Repository: octobercms/october Branch: 4.x Commit: fb78cceff482 Files: 3434 Total size: 37.3 MB Directory structure: gitextract_eml_srwg/ ├── .babelrc ├── .editorconfig ├── .gitattributes ├── .gitignore ├── .htaccess ├── .jshintrc ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── app/ │ ├── Provider.php │ └── blueprints/ │ └── .gitkeep ├── artisan ├── bootstrap/ │ ├── app.php │ ├── autoload.php │ └── providers.php ├── composer.json ├── config/ │ ├── app.php │ ├── backend.php │ ├── broadcasting.php │ ├── cache.php │ ├── cms.php │ ├── database.php │ ├── editor.php │ ├── filesystems.php │ ├── hashing.php │ ├── logging.php │ ├── mail.php │ ├── media.php │ ├── multisite.php │ ├── queue.php │ ├── services.php │ ├── session.php │ ├── system.php │ └── view.php ├── index.php ├── modules/ │ ├── backend/ │ │ ├── ServiceProvider.php │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ ├── backend/ │ │ │ │ │ ├── _brand.css │ │ │ │ │ └── _vars.css │ │ │ │ ├── controls/ │ │ │ │ │ └── settings-nav.css │ │ │ │ ├── main.css │ │ │ │ └── october.css │ │ │ ├── foundation/ │ │ │ │ ├── controls/ │ │ │ │ │ ├── autocomplete/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── autocomplete.js │ │ │ │ │ │ └── autocomplete.less │ │ │ │ │ ├── balloon-selector/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── balloon-selector.js │ │ │ │ │ │ └── balloon-selector.less │ │ │ │ │ ├── build.less │ │ │ │ │ ├── callout/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── callout.js │ │ │ │ │ │ └── callout.less │ │ │ │ │ ├── chart/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── chart.bar.js │ │ │ │ │ │ ├── chart.less │ │ │ │ │ │ ├── chart.line.js │ │ │ │ │ │ ├── chart.meter.js │ │ │ │ │ │ ├── chart.pie.js │ │ │ │ │ │ └── chart.utils.js │ │ │ │ │ ├── checkbox/ │ │ │ │ │ │ ├── checkbox.js │ │ │ │ │ │ └── checkbox.less │ │ │ │ │ ├── dropdown/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── dropdown.js │ │ │ │ │ │ ├── dropdown.less │ │ │ │ │ │ └── dropdown.variables.less │ │ │ │ │ ├── flashmessage/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ └── flashmessage.less │ │ │ │ │ ├── inspector/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── inspector.datainteraction.js │ │ │ │ │ │ ├── inspector.editor.autocomplete.js │ │ │ │ │ │ ├── inspector.editor.base.js │ │ │ │ │ │ ├── inspector.editor.checkbox.js │ │ │ │ │ │ ├── inspector.editor.dictionary.js │ │ │ │ │ │ ├── inspector.editor.dropdown.js │ │ │ │ │ │ ├── inspector.editor.object.js │ │ │ │ │ │ ├── inspector.editor.objectlist.js │ │ │ │ │ │ ├── inspector.editor.popupbase.js │ │ │ │ │ │ ├── inspector.editor.set.js │ │ │ │ │ │ ├── inspector.editor.string.js │ │ │ │ │ │ ├── inspector.editor.stringlist.js │ │ │ │ │ │ ├── inspector.editor.stringlistautocomplete.js │ │ │ │ │ │ ├── inspector.editor.text.js │ │ │ │ │ │ ├── inspector.engine.js │ │ │ │ │ │ ├── inspector.externalparametereditor.js │ │ │ │ │ │ ├── inspector.groups.js │ │ │ │ │ │ ├── inspector.helpers.js │ │ │ │ │ │ ├── inspector.less │ │ │ │ │ │ ├── inspector.manager.js │ │ │ │ │ │ ├── inspector.surface.js │ │ │ │ │ │ ├── inspector.validationset.js │ │ │ │ │ │ ├── inspector.validator.base.js │ │ │ │ │ │ ├── inspector.validator.basenumber.js │ │ │ │ │ │ ├── inspector.validator.float.js │ │ │ │ │ │ ├── inspector.validator.integer.js │ │ │ │ │ │ ├── inspector.validator.length.js │ │ │ │ │ │ ├── inspector.validator.regex.js │ │ │ │ │ │ ├── inspector.validator.required.js │ │ │ │ │ │ ├── inspector.wrapper.base.js │ │ │ │ │ │ ├── inspector.wrapper.container.js │ │ │ │ │ │ └── inspector.wrapper.popup.js │ │ │ │ │ ├── popover/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── popover.js │ │ │ │ │ │ └── popover.less │ │ │ │ │ ├── popup/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── popup.js │ │ │ │ │ │ ├── popup.less │ │ │ │ │ │ └── popup.stacker.js │ │ │ │ │ ├── toolbar/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── toolbar.js │ │ │ │ │ │ ├── toolbar.less │ │ │ │ │ │ └── toolbar.variables.less │ │ │ │ │ └── tooltip/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── tooltip.js │ │ │ │ │ ├── tooltip.less │ │ │ │ │ └── tooltip.variables.less │ │ │ │ ├── elements/ │ │ │ │ │ ├── backendicons/ │ │ │ │ │ │ ├── backendicons.less │ │ │ │ │ │ └── backendicons.mixins.less │ │ │ │ │ ├── breadcrumb/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ └── breadcrumb.less │ │ │ │ │ ├── build.less │ │ │ │ │ ├── buttons/ │ │ │ │ │ │ └── buttons.less │ │ │ │ │ ├── icons/ │ │ │ │ │ │ ├── icons.mixins.less │ │ │ │ │ │ └── icons.variables.less │ │ │ │ │ └── scoreboard/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── scoreboard.less │ │ │ │ ├── migrate/ │ │ │ │ │ ├── build.less │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── backend.js │ │ │ │ │ │ ├── bs3-adapter.js │ │ │ │ │ │ ├── checkbox.js │ │ │ │ │ │ ├── list.sortable.js │ │ │ │ │ │ └── loader.js │ │ │ │ │ ├── less/ │ │ │ │ │ │ ├── breadcrumb.less │ │ │ │ │ │ ├── checkbox.less │ │ │ │ │ │ ├── close.less │ │ │ │ │ │ ├── icons.less │ │ │ │ │ │ ├── layout.less │ │ │ │ │ │ ├── loader.less │ │ │ │ │ │ ├── popup.less │ │ │ │ │ │ └── stormicon.less │ │ │ │ │ └── vendor/ │ │ │ │ │ ├── flot/ │ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ │ ├── Makefile │ │ │ │ │ │ ├── excanvas.js │ │ │ │ │ │ ├── jquery.colorhelpers.js │ │ │ │ │ │ ├── jquery.flot.canvas.js │ │ │ │ │ │ ├── jquery.flot.categories.js │ │ │ │ │ │ ├── jquery.flot.crosshair.js │ │ │ │ │ │ ├── jquery.flot.errorbars.js │ │ │ │ │ │ ├── jquery.flot.fillbetween.js │ │ │ │ │ │ ├── jquery.flot.image.js │ │ │ │ │ │ ├── jquery.flot.js │ │ │ │ │ │ ├── jquery.flot.navigate.js │ │ │ │ │ │ ├── jquery.flot.pie.js │ │ │ │ │ │ ├── jquery.flot.resize.js │ │ │ │ │ │ ├── jquery.flot.selection.js │ │ │ │ │ │ ├── jquery.flot.stack.js │ │ │ │ │ │ ├── jquery.flot.symbol.js │ │ │ │ │ │ ├── jquery.flot.threshold.js │ │ │ │ │ │ ├── jquery.flot.time.js │ │ │ │ │ │ └── jquery.flot.tooltip.js │ │ │ │ │ ├── octoicons/ │ │ │ │ │ │ ├── octoicons.less │ │ │ │ │ │ ├── octoicons.mixins.less │ │ │ │ │ │ └── octoicons.variables.less │ │ │ │ │ ├── raphael/ │ │ │ │ │ │ └── raphael.js │ │ │ │ │ └── sortable/ │ │ │ │ │ └── jquery-sortable.js │ │ │ │ ├── scripts/ │ │ │ │ │ ├── drag/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── drag.scroll.js │ │ │ │ │ │ ├── drag.sort.js │ │ │ │ │ │ └── drag.value.js │ │ │ │ │ ├── foundation/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── foundation.baseclass.js │ │ │ │ │ │ ├── foundation.controlutils.js │ │ │ │ │ │ ├── foundation.element.js │ │ │ │ │ │ └── foundation.event.js │ │ │ │ │ └── rowlink/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── rowlink.js │ │ │ │ └── util/ │ │ │ │ ├── config.js │ │ │ │ └── data.js │ │ │ ├── images/ │ │ │ │ ├── october-login-ai-generated/ │ │ │ │ │ ├── 1/ │ │ │ │ │ │ └── background.css │ │ │ │ │ ├── 2/ │ │ │ │ │ │ └── background.css │ │ │ │ │ ├── 3/ │ │ │ │ │ │ └── background.css │ │ │ │ │ ├── 4/ │ │ │ │ │ │ └── background.css │ │ │ │ │ ├── 5/ │ │ │ │ │ │ └── background.css │ │ │ │ │ ├── 6/ │ │ │ │ │ │ └── background.css │ │ │ │ │ └── 7/ │ │ │ │ │ └── background.css │ │ │ │ └── october-login-gradients/ │ │ │ │ └── 1.css │ │ │ ├── js/ │ │ │ │ ├── auth/ │ │ │ │ │ └── auth.js │ │ │ │ ├── backend/ │ │ │ │ │ ├── backend.ajax.js │ │ │ │ │ ├── backend.fixes.js │ │ │ │ │ └── backend.js │ │ │ │ ├── controls/ │ │ │ │ │ └── settings-nav.js │ │ │ │ ├── main.js │ │ │ │ ├── october/ │ │ │ │ │ ├── october.alert.js │ │ │ │ │ ├── october.datetime.js │ │ │ │ │ ├── october.domidmanager.js │ │ │ │ │ ├── october.filelist.js │ │ │ │ │ ├── october.flyout.js │ │ │ │ │ ├── october.jsmodule.js │ │ │ │ │ ├── october.lang.js │ │ │ │ │ ├── october.layout.js │ │ │ │ │ ├── october.mainmenu.js │ │ │ │ │ ├── october.modalfocusmanager.js │ │ │ │ │ ├── october.responsivemenu.js │ │ │ │ │ ├── october.scrollbar.js │ │ │ │ │ ├── october.scrollpad.js │ │ │ │ │ ├── october.sidenav-tree.js │ │ │ │ │ ├── october.sidenav.js │ │ │ │ │ ├── october.sidepaneltab.js │ │ │ │ │ ├── october.simplelist.js │ │ │ │ │ ├── october.snackbar.js │ │ │ │ │ ├── october.tabformexpandcontrols.js │ │ │ │ │ ├── october.tooltip.js │ │ │ │ │ ├── october.treelist.js │ │ │ │ │ └── october.vueutils.js │ │ │ │ ├── onboarding.js │ │ │ │ ├── ph-icons-list.js │ │ │ │ ├── preferences/ │ │ │ │ │ └── preferences.js │ │ │ │ ├── vendor-min.js │ │ │ │ └── vueapp/ │ │ │ │ ├── vue-application.js │ │ │ │ └── vue-control-base.js │ │ │ ├── less/ │ │ │ │ ├── .gitignore │ │ │ │ ├── controls/ │ │ │ │ │ ├── backend-toolbar-buttons.less │ │ │ │ │ ├── color-mode-selector.less │ │ │ │ │ ├── common.less │ │ │ │ │ ├── filelist.less │ │ │ │ │ ├── menu-mode-selector.less │ │ │ │ │ ├── namevaluelist.less │ │ │ │ │ ├── onboarding.less │ │ │ │ │ ├── panels.less │ │ │ │ │ ├── reportwidgets.less │ │ │ │ │ ├── scrollable-panel.less │ │ │ │ │ ├── scrollbar.less │ │ │ │ │ ├── scrollpad.less │ │ │ │ │ ├── selector-group.less │ │ │ │ │ ├── sidenav-tree.less │ │ │ │ │ ├── simplelist.less │ │ │ │ │ ├── snackbars.less │ │ │ │ │ ├── svg-icons.less │ │ │ │ │ ├── tooltips.less │ │ │ │ │ ├── tree-path.less │ │ │ │ │ └── treelist.less │ │ │ │ ├── core/ │ │ │ │ │ ├── animations.less │ │ │ │ │ ├── base-editor-styles.less │ │ │ │ │ ├── boot.less │ │ │ │ │ ├── mixins/ │ │ │ │ │ │ ├── mixins.backend-toolbar.less │ │ │ │ │ │ ├── mixins.css3.less │ │ │ │ │ │ ├── mixins.gradient.less │ │ │ │ │ │ ├── mixins.less │ │ │ │ │ │ ├── mixins.triangle.less │ │ │ │ │ │ └── mixins.utility.less │ │ │ │ │ ├── utility.less │ │ │ │ │ └── variables/ │ │ │ │ │ ├── variables.form.less │ │ │ │ │ ├── variables.global.less │ │ │ │ │ ├── variables.less │ │ │ │ │ ├── variables.list.less │ │ │ │ │ └── variables.zindex.less │ │ │ │ ├── layout/ │ │ │ │ │ ├── fancylayout.less │ │ │ │ │ ├── flexlayout.less │ │ │ │ │ ├── flyout.less │ │ │ │ │ ├── footer.less │ │ │ │ │ ├── form-with-sidebar.less │ │ │ │ │ ├── formdocumentlayout.less │ │ │ │ │ ├── layout.less │ │ │ │ │ ├── mainmenu.items.less │ │ │ │ │ ├── mainmenu.left.less │ │ │ │ │ ├── mainmenu.less │ │ │ │ │ ├── mainmenu.logo.less │ │ │ │ │ ├── mainmenu.responsive.less │ │ │ │ │ ├── mainmenu.submenu.dropdown.less │ │ │ │ │ ├── mainmenu.top.less │ │ │ │ │ ├── outerlayout.less │ │ │ │ │ ├── sidenav-responsive.less │ │ │ │ │ ├── sidenav.less │ │ │ │ │ └── sidepanel.less │ │ │ │ └── october.less │ │ │ └── vendor/ │ │ │ └── daterangepicker/ │ │ │ ├── README.md │ │ │ ├── daterangepicker.css │ │ │ └── daterangepicker.js │ │ ├── behaviors/ │ │ │ ├── FormController.php │ │ │ ├── ImportExportController.php │ │ │ ├── ListController.php │ │ │ ├── RelationController.php │ │ │ ├── ReorderController.php │ │ │ ├── UserPreferencesModel.php │ │ │ ├── formcontroller/ │ │ │ │ ├── HasFormDesigns.php │ │ │ │ ├── HasMultisite.php │ │ │ │ ├── HasMultisiteGroup.php │ │ │ │ ├── HasOverrides.php │ │ │ │ ├── HasRenderers.php │ │ │ │ └── partials/ │ │ │ │ ├── _buttons.php │ │ │ │ ├── _error.php │ │ │ │ ├── _mode_basic.php │ │ │ │ ├── _mode_popup.php │ │ │ │ ├── _mode_sidebar.php │ │ │ │ ├── _popup_buttons.php │ │ │ │ └── _popup_error.php │ │ │ ├── importexportcontroller/ │ │ │ │ ├── ActionExport.php │ │ │ │ ├── ActionImport.php │ │ │ │ ├── CanFormatCsv.php │ │ │ │ ├── CanFormatJson.php │ │ │ │ ├── HasListExport.php │ │ │ │ ├── TranscodeFilter.php │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── export.css │ │ │ │ │ │ └── import.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── october.export.js │ │ │ │ │ │ └── october.import.js │ │ │ │ │ └── less/ │ │ │ │ │ ├── export.less │ │ │ │ │ └── import.less │ │ │ │ └── partials/ │ │ │ │ ├── _column_sample_form.php │ │ │ │ ├── _container_export.php │ │ │ │ ├── _container_import.php │ │ │ │ ├── _export_columns.php │ │ │ │ ├── _export_form.php │ │ │ │ ├── _export_result_form.php │ │ │ │ ├── _import_column_matcher.php │ │ │ │ ├── _import_db_columns.php │ │ │ │ ├── _import_file_columns.php │ │ │ │ ├── _import_form.php │ │ │ │ ├── _import_result_form.php │ │ │ │ ├── _import_toolbar.php │ │ │ │ ├── fields_export.yaml │ │ │ │ └── fields_import.yaml │ │ │ ├── listcontroller/ │ │ │ │ ├── HasOverrides.php │ │ │ │ └── partials/ │ │ │ │ └── _container.php │ │ │ ├── relationcontroller/ │ │ │ │ ├── HasExtraConfig.php │ │ │ │ ├── HasManageMode.php │ │ │ │ ├── HasNestedRelations.php │ │ │ │ ├── HasOverrides.php │ │ │ │ ├── HasPivotMode.php │ │ │ │ ├── HasViewMode.php │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── relation.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── october.relation.js │ │ │ │ │ └── less/ │ │ │ │ │ ├── relation.field.less │ │ │ │ │ ├── relation.less │ │ │ │ │ └── relation.ui.less │ │ │ │ └── partials/ │ │ │ │ ├── _button_add.php │ │ │ │ ├── _button_create.php │ │ │ │ ├── _button_delete.php │ │ │ │ ├── _button_link.php │ │ │ │ ├── _button_remove.php │ │ │ │ ├── _button_unlink.php │ │ │ │ ├── _button_update.php │ │ │ │ ├── _container.php │ │ │ │ ├── _manage_form.php │ │ │ │ ├── _manage_list.php │ │ │ │ ├── _manage_pivot.php │ │ │ │ ├── _pivot_form.php │ │ │ │ ├── _toolbar.php │ │ │ │ └── _view.php │ │ │ └── reordercontroller/ │ │ │ ├── assets/ │ │ │ │ └── js/ │ │ │ │ └── october.reorder.js │ │ │ └── partials/ │ │ │ ├── _container.htm │ │ │ └── _records.htm │ │ ├── classes/ │ │ │ ├── AuthManager.php │ │ │ ├── BackendController.php │ │ │ ├── Controller.php │ │ │ ├── ControllerBehavior.php │ │ │ ├── FilterScope.php │ │ │ ├── FilterWidgetBase.php │ │ │ ├── FormField.php │ │ │ ├── FormTabs.php │ │ │ ├── FormWidgetBase.php │ │ │ ├── ListColumn.php │ │ │ ├── LoginCustomization.php │ │ │ ├── MainMenuItem.php │ │ │ ├── NavigationManager.php │ │ │ ├── ReportWidgetBase.php │ │ │ ├── RoleManager.php │ │ │ ├── RolePermission.php │ │ │ ├── SettingsController.php │ │ │ ├── SideMenuItem.php │ │ │ ├── Skin.php │ │ │ ├── VueComponentBase.php │ │ │ ├── WidgetBase.php │ │ │ ├── WidgetManager.php │ │ │ ├── WildcardController.php │ │ │ ├── navigationmanager/ │ │ │ │ ├── HasNavigationContext.php │ │ │ │ └── HasTailorNavigationContext.php │ │ │ └── widgetmanager/ │ │ │ ├── HasFilterWidgets.php │ │ │ ├── HasFormWidgets.php │ │ │ └── HasReportWidgets.php │ │ ├── composer.json │ │ ├── controllers/ │ │ │ ├── AccessLogs.php │ │ │ ├── Auth.php │ │ │ ├── AuthGates.php │ │ │ ├── Files.php │ │ │ ├── Index.php │ │ │ ├── Preferences.php │ │ │ ├── UserGroups.php │ │ │ ├── UserRoles.php │ │ │ ├── Users.php │ │ │ ├── accesslogs/ │ │ │ │ ├── _hint.php │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── config_list.yaml │ │ │ │ └── index.php │ │ │ ├── auth/ │ │ │ │ ├── migrate.php │ │ │ │ ├── reset.php │ │ │ │ ├── restore.php │ │ │ │ ├── setup.php │ │ │ │ └── signin.php │ │ │ ├── authgates/ │ │ │ │ └── expired.php │ │ │ ├── preferences/ │ │ │ │ ├── _example_code.php │ │ │ │ ├── _field_editor_preview.php │ │ │ │ ├── config_form.yaml │ │ │ │ └── index.php │ │ │ ├── usergroups/ │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── _relation_users.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ ├── config_relation.yaml │ │ │ │ ├── create.php │ │ │ │ ├── index.php │ │ │ │ └── update.php │ │ │ ├── userroles/ │ │ │ │ ├── _action_view_as.php │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ ├── create.php │ │ │ │ ├── index.php │ │ │ │ └── update.php │ │ │ └── users/ │ │ │ ├── _hint_trashed.php │ │ │ ├── _list_toolbar.php │ │ │ ├── config_form.yaml │ │ │ ├── config_list.yaml │ │ │ ├── create.php │ │ │ ├── index.php │ │ │ ├── myaccount.php │ │ │ └── update.php │ │ ├── database/ │ │ │ ├── migrations/ │ │ │ │ ├── 2013_10_01_000001_Db_Backend_Users.php │ │ │ │ ├── 2013_10_01_000002_Db_Backend_User_Groups.php │ │ │ │ ├── 2013_10_01_000003_Db_Backend_Users_Groups.php │ │ │ │ ├── 2013_10_01_000004_Db_Backend_User_Throttle.php │ │ │ │ ├── 2014_01_04_000005_Db_Backend_User_Preferences.php │ │ │ │ ├── 2014_10_01_000006_Db_Backend_Access_Log.php │ │ │ │ ├── 2017_10_01_000010_Db_Backend_User_Roles.php │ │ │ │ ├── 2018_12_16_000011_Db_Backend_Add_Deleted_At.php │ │ │ │ ├── 2022_10_01_000012_Db_Backend_User_Roles_Sortable.php │ │ │ │ ├── 2023_10_01_000013_Db_Add_Site_To_Preferences.php │ │ │ │ ├── 2023_10_01_000014_Db_Add_User_Expired_Password.php │ │ │ │ └── 2024_10_01_000017_Db_Migrate_v4_0_0.php │ │ │ └── seeds/ │ │ │ ├── DatabaseSeeder.php │ │ │ └── SeedSetupAdmin.php │ │ ├── facades/ │ │ │ ├── Backend.php │ │ │ ├── BackendAuth.php │ │ │ ├── BackendMenu.php │ │ │ └── BackendUi.php │ │ ├── filterwidgets/ │ │ │ ├── Date.php │ │ │ ├── Group.php │ │ │ ├── Number.php │ │ │ ├── Text.php │ │ │ ├── date/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── datefilter.js │ │ │ │ └── partials/ │ │ │ │ ├── _date.php │ │ │ │ ├── _date_form.php │ │ │ │ ├── _item_between.php │ │ │ │ └── _item_single.php │ │ │ ├── group/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── groupfilter.js │ │ │ │ └── partials/ │ │ │ │ ├── _group.php │ │ │ │ └── _group_form.php │ │ │ ├── number/ │ │ │ │ └── partials/ │ │ │ │ ├── _item_between.php │ │ │ │ ├── _item_single.php │ │ │ │ ├── _number.php │ │ │ │ └── _number_form.php │ │ │ └── text/ │ │ │ └── partials/ │ │ │ ├── _item_single.php │ │ │ ├── _text.php │ │ │ └── _text_form.php │ │ ├── formwidgets/ │ │ │ ├── CodeEditor.php │ │ │ ├── ColorPicker.php │ │ │ ├── DataTable.php │ │ │ ├── DatePicker.php │ │ │ ├── FileUpload.php │ │ │ ├── MarkdownEditor.php │ │ │ ├── NestedForm.php │ │ │ ├── PaletteEditor.php │ │ │ ├── PermissionEditor.php │ │ │ ├── RecordFinder.php │ │ │ ├── Relation.php │ │ │ ├── Repeater.php │ │ │ ├── RichEditor.php │ │ │ ├── Sensitive.php │ │ │ ├── TagList.php │ │ │ ├── codeeditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── codeeditor.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── build-min.js │ │ │ │ │ │ └── codeeditor.js │ │ │ │ │ ├── less/ │ │ │ │ │ │ └── codeeditor.less │ │ │ │ │ └── vendor/ │ │ │ │ │ ├── ace/ │ │ │ │ │ │ ├── ace.js │ │ │ │ │ │ ├── ext-emmet.js │ │ │ │ │ │ ├── ext-language_tools.js │ │ │ │ │ │ ├── ext-searchbox.js │ │ │ │ │ │ ├── mode-css.js │ │ │ │ │ │ ├── mode-html.js │ │ │ │ │ │ ├── mode-javascript.js │ │ │ │ │ │ ├── mode-less.js │ │ │ │ │ │ ├── mode-markdown.js │ │ │ │ │ │ ├── mode-php.js │ │ │ │ │ │ ├── mode-plain_text.js │ │ │ │ │ │ ├── mode-sass.js │ │ │ │ │ │ ├── mode-scss.js │ │ │ │ │ │ ├── mode-twig.js │ │ │ │ │ │ ├── mode-yaml.js │ │ │ │ │ │ ├── snippets/ │ │ │ │ │ │ │ ├── css.js │ │ │ │ │ │ │ ├── html.js │ │ │ │ │ │ │ ├── javascript.js │ │ │ │ │ │ │ ├── markdown.js │ │ │ │ │ │ │ ├── php-inline.js │ │ │ │ │ │ │ ├── php.js │ │ │ │ │ │ │ ├── plain_text.js │ │ │ │ │ │ │ ├── sass.js │ │ │ │ │ │ │ ├── scss.js │ │ │ │ │ │ │ ├── text.js │ │ │ │ │ │ │ ├── twig.js │ │ │ │ │ │ │ └── yaml.js │ │ │ │ │ │ ├── theme-ambiance.js │ │ │ │ │ │ ├── theme-chaos.js │ │ │ │ │ │ ├── theme-chrome.js │ │ │ │ │ │ ├── theme-clouds.js │ │ │ │ │ │ ├── theme-clouds_midnight.js │ │ │ │ │ │ ├── theme-cobalt.js │ │ │ │ │ │ ├── theme-crimson_editor.js │ │ │ │ │ │ ├── theme-dawn.js │ │ │ │ │ │ ├── theme-dreamweaver.js │ │ │ │ │ │ ├── theme-eclipse.js │ │ │ │ │ │ ├── theme-github.js │ │ │ │ │ │ ├── theme-idle_fingers.js │ │ │ │ │ │ ├── theme-iplastic.js │ │ │ │ │ │ ├── theme-katzenmilch.js │ │ │ │ │ │ ├── theme-kr_theme.js │ │ │ │ │ │ ├── theme-kuroir.js │ │ │ │ │ │ ├── theme-merbivore.js │ │ │ │ │ │ ├── theme-merbivore_soft.js │ │ │ │ │ │ ├── theme-mono_industrial.js │ │ │ │ │ │ ├── theme-monokai.js │ │ │ │ │ │ ├── theme-pastel_on_dark.js │ │ │ │ │ │ ├── theme-solarized_dark.js │ │ │ │ │ │ ├── theme-solarized_light.js │ │ │ │ │ │ ├── theme-sqlserver.js │ │ │ │ │ │ ├── theme-terminal.js │ │ │ │ │ │ ├── theme-textmate.js │ │ │ │ │ │ ├── theme-tomorrow.js │ │ │ │ │ │ ├── theme-tomorrow_night.js │ │ │ │ │ │ ├── theme-tomorrow_night_blue.js │ │ │ │ │ │ ├── theme-tomorrow_night_bright.js │ │ │ │ │ │ ├── theme-tomorrow_night_eighties.js │ │ │ │ │ │ ├── theme-twilight.js │ │ │ │ │ │ ├── theme-vibrant_ink.js │ │ │ │ │ │ ├── theme-xcode.js │ │ │ │ │ │ ├── worker-css.js │ │ │ │ │ │ ├── worker-html.js │ │ │ │ │ │ ├── worker-javascript.js │ │ │ │ │ │ └── worker-php.js │ │ │ │ │ └── emmet/ │ │ │ │ │ └── emmet.js │ │ │ │ └── partials/ │ │ │ │ └── _codeeditor.php │ │ │ ├── colorpicker/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── colorpicker.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── colorpicker.js │ │ │ │ │ ├── less/ │ │ │ │ │ │ └── colorpicker.less │ │ │ │ │ └── vendor/ │ │ │ │ │ └── spectrum/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── README.md │ │ │ │ │ ├── spectrum.css │ │ │ │ │ └── spectrum.js │ │ │ │ └── partials/ │ │ │ │ ├── _colorpicker.php │ │ │ │ ├── _mode_input.php │ │ │ │ └── _mode_preset.php │ │ │ ├── datatable/ │ │ │ │ ├── LegacyDataTable.php │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── datatable-handsontable.css │ │ │ │ │ └── js/ │ │ │ │ │ └── datatable-handsontable.js │ │ │ │ └── partials/ │ │ │ │ ├── _datatable.php │ │ │ │ └── _datatable_handsontable.php │ │ │ ├── datepicker/ │ │ │ │ └── partials/ │ │ │ │ ├── _datepicker.php │ │ │ │ ├── _picker_date.php │ │ │ │ └── _picker_time.php │ │ │ ├── fileupload/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── fileupload.css │ │ │ │ │ └── js/ │ │ │ │ │ └── fileupload.js │ │ │ │ └── partials/ │ │ │ │ ├── _config_form.php │ │ │ │ ├── _file_multi.php │ │ │ │ ├── _file_single.php │ │ │ │ ├── _fileupload.php │ │ │ │ ├── _image_multi.php │ │ │ │ ├── _image_single.php │ │ │ │ ├── _template_file.php │ │ │ │ └── _template_image.php │ │ │ ├── markdowneditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── markdowneditor.css │ │ │ │ │ └── js/ │ │ │ │ │ └── markdowneditor.js │ │ │ │ └── partials/ │ │ │ │ └── _markdowneditor.php │ │ │ ├── nestedform/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── nestedform.css │ │ │ │ │ └── less/ │ │ │ │ │ └── nestedform.less │ │ │ │ └── partials/ │ │ │ │ └── _nestedform.php │ │ │ ├── paletteeditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── paletteeditor.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── paletteeditor.js │ │ │ │ │ └── less/ │ │ │ │ │ └── paletteeditor.less │ │ │ │ └── partials/ │ │ │ │ ├── _paletteeditor.php │ │ │ │ ├── _preset_preview.php │ │ │ │ ├── _preset_selection.php │ │ │ │ └── fields_colors.yaml │ │ │ ├── permissioneditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── permissioneditor.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── permissioneditor.js │ │ │ │ │ └── less/ │ │ │ │ │ └── permissioneditor.less │ │ │ │ └── partials/ │ │ │ │ ├── _permission_item.php │ │ │ │ └── _permissioneditor.php │ │ │ ├── recordfinder/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── recordfinder.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── recordfinder.js │ │ │ │ │ └── less/ │ │ │ │ │ ├── recordfinder.control-ui.less │ │ │ │ │ ├── recordfinder.less │ │ │ │ │ └── recordfinder.list.less │ │ │ │ └── partials/ │ │ │ │ ├── _container.php │ │ │ │ ├── _record_multi.php │ │ │ │ ├── _record_single.php │ │ │ │ ├── _recordfinder.php │ │ │ │ └── _recordfinder_form.php │ │ │ ├── relation/ │ │ │ │ ├── HasQuickCreate.php │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── relation-quick-create.js │ │ │ │ └── partials/ │ │ │ │ ├── _quick_create_form.php │ │ │ │ └── _relation.php │ │ │ ├── repeater/ │ │ │ │ ├── HasJsonStore.php │ │ │ │ ├── HasRelationStore.php │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── repeater.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── repeater.accordion.js │ │ │ │ │ │ ├── repeater.builder.js │ │ │ │ │ │ └── repeater.js │ │ │ │ │ └── less/ │ │ │ │ │ ├── repeater.group.less │ │ │ │ │ ├── repeater.item.less │ │ │ │ │ ├── repeater.less │ │ │ │ │ └── repeater.toolbar.less │ │ │ │ └── partials/ │ │ │ │ ├── _mode_accordion.php │ │ │ │ ├── _mode_builder.php │ │ │ │ ├── _repeater.php │ │ │ │ ├── _repeater_item.php │ │ │ │ ├── _repeater_toolbar.php │ │ │ │ ├── _template_group_palette.php │ │ │ │ └── _template_item_menu.php │ │ │ ├── richeditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── base-styles.css │ │ │ │ │ │ └── richeditor.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── build-min.js │ │ │ │ │ │ └── richeditor.js │ │ │ │ │ └── less/ │ │ │ │ │ ├── base-styles.less │ │ │ │ │ └── richeditor.less │ │ │ │ └── partials/ │ │ │ │ └── _richeditor.php │ │ │ ├── sensitive/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── sensitive.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── sensitive.js │ │ │ │ │ └── less/ │ │ │ │ │ └── sensitive.less │ │ │ │ └── partials/ │ │ │ │ ├── _sensitive.php │ │ │ │ ├── _sensitive_input.php │ │ │ │ └── _sensitive_textarea.php │ │ │ └── taglist/ │ │ │ ├── HasRelationStore.php │ │ │ ├── HasStringStore.php │ │ │ └── partials/ │ │ │ └── _taglist.php │ │ ├── helpers/ │ │ │ ├── Backend.php │ │ │ └── Inspector.php │ │ ├── lang/ │ │ │ ├── ar/ │ │ │ │ └── lang.php │ │ │ ├── ar.json │ │ │ ├── be/ │ │ │ │ └── lang.php │ │ │ ├── be.json │ │ │ ├── bg/ │ │ │ │ └── lang.php │ │ │ ├── bg.json │ │ │ ├── ca/ │ │ │ │ └── lang.php │ │ │ ├── ca.json │ │ │ ├── cs/ │ │ │ │ └── lang.php │ │ │ ├── cs.json │ │ │ ├── da/ │ │ │ │ └── lang.php │ │ │ ├── da.json │ │ │ ├── de/ │ │ │ │ └── lang.php │ │ │ ├── de.json │ │ │ ├── el/ │ │ │ │ └── lang.php │ │ │ ├── el.json │ │ │ ├── en/ │ │ │ │ └── lang.php │ │ │ ├── en.json │ │ │ ├── es/ │ │ │ │ └── lang.php │ │ │ ├── es-ar/ │ │ │ │ └── lang.php │ │ │ ├── es-ar.json │ │ │ ├── es.json │ │ │ ├── et/ │ │ │ │ └── lang.php │ │ │ ├── et.json │ │ │ ├── fa/ │ │ │ │ └── lang.php │ │ │ ├── fa.json │ │ │ ├── fi/ │ │ │ │ └── lang.php │ │ │ ├── fi.json │ │ │ ├── fr/ │ │ │ │ └── lang.php │ │ │ ├── fr.json │ │ │ ├── hu/ │ │ │ │ └── lang.php │ │ │ ├── hu.json │ │ │ ├── id/ │ │ │ │ └── lang.php │ │ │ ├── id.json │ │ │ ├── it/ │ │ │ │ └── lang.php │ │ │ ├── it.json │ │ │ ├── ja/ │ │ │ │ └── lang.php │ │ │ ├── ja.json │ │ │ ├── kaa.json │ │ │ ├── kk.json │ │ │ ├── ko/ │ │ │ │ └── lang.php │ │ │ ├── ko.json │ │ │ ├── lt/ │ │ │ │ └── lang.php │ │ │ ├── lt.json │ │ │ ├── lv/ │ │ │ │ └── lang.php │ │ │ ├── lv.json │ │ │ ├── nb-no/ │ │ │ │ └── lang.php │ │ │ ├── nb-no.json │ │ │ ├── nl/ │ │ │ │ └── lang.php │ │ │ ├── nl.json │ │ │ ├── pl/ │ │ │ │ └── lang.php │ │ │ ├── pl.json │ │ │ ├── pt-br/ │ │ │ │ └── lang.php │ │ │ ├── pt-br.json │ │ │ ├── pt-pt/ │ │ │ │ └── lang.php │ │ │ ├── pt-pt.json │ │ │ ├── ro/ │ │ │ │ └── lang.php │ │ │ ├── ro.json │ │ │ ├── rs/ │ │ │ │ └── lang.php │ │ │ ├── rs.json │ │ │ ├── ru/ │ │ │ │ └── lang.php │ │ │ ├── ru.json │ │ │ ├── sk/ │ │ │ │ └── lang.php │ │ │ ├── sk.json │ │ │ ├── sl/ │ │ │ │ └── lang.php │ │ │ ├── sl.json │ │ │ ├── sv/ │ │ │ │ └── lang.php │ │ │ ├── sv.json │ │ │ ├── th/ │ │ │ │ └── lang.php │ │ │ ├── th.json │ │ │ ├── tr/ │ │ │ │ └── lang.php │ │ │ ├── tr.json │ │ │ ├── uk/ │ │ │ │ └── lang.php │ │ │ ├── uk.json │ │ │ ├── vn/ │ │ │ │ └── lang.php │ │ │ ├── vn.json │ │ │ ├── zh-cn/ │ │ │ │ └── lang.php │ │ │ ├── zh-cn.json │ │ │ ├── zh-tw/ │ │ │ │ └── lang.php │ │ │ └── zh-tw.json │ │ ├── layouts/ │ │ │ ├── _custom_styles.php │ │ │ ├── _flash_messages.php │ │ │ ├── _footer.php │ │ │ ├── _head.php │ │ │ ├── _hint.php │ │ │ ├── _mainmenu.php │ │ │ ├── _mainmenu_item.php │ │ │ ├── _mainmenu_items.php │ │ │ ├── _mainmenu_responsive.php │ │ │ ├── _my_settings_menu_items.php │ │ │ ├── _sidenav-responsive.php │ │ │ ├── _sidenav.php │ │ │ ├── _submenu_items.php │ │ │ ├── _vue_templates.php │ │ │ ├── auth.php │ │ │ ├── default.php │ │ │ └── form-with-sidebar.php │ │ ├── models/ │ │ │ ├── AccessLog.php │ │ │ ├── BrandSetting.php │ │ │ ├── EditorSetting.php │ │ │ ├── ExportModel.php │ │ │ ├── ImportModel.php │ │ │ ├── Preference.php │ │ │ ├── User.php │ │ │ ├── UserGroup.php │ │ │ ├── UserPreference.php │ │ │ ├── UserPreferenceModel.php │ │ │ ├── UserRole.php │ │ │ ├── UserThrottle.php │ │ │ ├── accesslog/ │ │ │ │ ├── columns.yaml │ │ │ │ └── scopes.yaml │ │ │ ├── brandsetting/ │ │ │ │ ├── HasPalettes.php │ │ │ │ ├── _color_mode.php │ │ │ │ ├── _menu_mode.php │ │ │ │ ├── fields.yaml │ │ │ │ ├── style_custom.less │ │ │ │ └── style_palette.less │ │ │ ├── editorsetting/ │ │ │ │ ├── _toolbar_presets.php │ │ │ │ ├── default_styles.less │ │ │ │ └── fields.yaml │ │ │ ├── exportmodel/ │ │ │ │ ├── EncodesCsv.php │ │ │ │ └── EncodesJson.php │ │ │ ├── importmodel/ │ │ │ │ ├── DecodesCsv.php │ │ │ │ └── DecodesJson.php │ │ │ ├── preference/ │ │ │ │ └── fields.yaml │ │ │ ├── user/ │ │ │ │ ├── columns.yaml │ │ │ │ ├── fields.yaml │ │ │ │ └── scopes.yaml │ │ │ ├── usergroup/ │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ └── userrole/ │ │ │ ├── columns.yaml │ │ │ └── fields.yaml │ │ ├── reportwidgets/ │ │ │ ├── Welcome.php │ │ │ └── welcome/ │ │ │ ├── assets/ │ │ │ │ └── css/ │ │ │ │ └── welcome.css │ │ │ └── partials/ │ │ │ └── _widget.php │ │ ├── routes.php │ │ ├── skins/ │ │ │ └── Standard.php │ │ ├── tests/ │ │ │ ├── classes/ │ │ │ │ ├── NavigationManagerTest.php │ │ │ │ ├── RoleManagerTest.php │ │ │ │ └── WidgetManagerTest.php │ │ │ ├── database/ │ │ │ │ └── ImportModelDbTest.php │ │ │ ├── fixtures/ │ │ │ │ ├── models/ │ │ │ │ │ └── BackendUserFixture.php │ │ │ │ └── reference/ │ │ │ │ ├── file1.txt │ │ │ │ └── file2.txt │ │ │ ├── models/ │ │ │ │ ├── ExportModelTest.php │ │ │ │ └── ImportModelTest.php │ │ │ ├── traits/ │ │ │ │ └── WidgetMakerTest.php │ │ │ └── widgets/ │ │ │ ├── FilterWidgetTest.php │ │ │ ├── FormWidgetTest.php │ │ │ └── ListsWidgetTest.php │ │ ├── traits/ │ │ │ ├── CollapsableWidget.php │ │ │ ├── ErrorMaker.php │ │ │ ├── FormModelSaver.php │ │ │ ├── FormModelWidget.php │ │ │ ├── InspectableContainer.php │ │ │ ├── PreferenceMaker.php │ │ │ ├── SearchableWidget.php │ │ │ ├── SelectableWidget.php │ │ │ ├── SessionMaker.php │ │ │ ├── VueMaker.php │ │ │ └── WidgetMaker.php │ │ ├── views/ │ │ │ ├── 404.php │ │ │ ├── access_denied.php │ │ │ ├── in_maintenance.php │ │ │ ├── mail/ │ │ │ │ ├── contact-form.htm │ │ │ │ ├── invite.htm │ │ │ │ └── restore.htm │ │ │ └── no_database.php │ │ ├── vuecomponents/ │ │ │ ├── Autocomplete.php │ │ │ ├── CodeEditor.php │ │ │ ├── Document.php │ │ │ ├── DocumentMarkdownEditor.php │ │ │ ├── Dropdown.php │ │ │ ├── DropdownMenu.php │ │ │ ├── DropdownMenuButton.php │ │ │ ├── InfoTable.php │ │ │ ├── Inspector.php │ │ │ ├── LoadingIndicator.php │ │ │ ├── Modal.php │ │ │ ├── MonacoEditor.php │ │ │ ├── Popover.php │ │ │ ├── RichEditor.php │ │ │ ├── RichEditorDocumentConnector.php │ │ │ ├── ScrollablePanel.php │ │ │ ├── Splitter.php │ │ │ ├── Tabs.php │ │ │ ├── TreeView.php │ │ │ ├── Uploader.php │ │ │ ├── autocomplete/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── autocomplete.js │ │ │ │ │ └── vendor/ │ │ │ │ │ └── vue-autocomplete/ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ ├── october-patch.txt │ │ │ │ │ └── vue-autocomplete.esm.js │ │ │ │ └── partials/ │ │ │ │ └── _autocomplete.php │ │ │ ├── codeeditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _autocomplete.css │ │ │ │ │ │ └── codeeditor.css │ │ │ │ │ └── js/ │ │ │ │ │ └── codeeditor.js │ │ │ │ └── partials/ │ │ │ │ └── _codeeditor.php │ │ │ ├── document/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _contents.css │ │ │ │ │ │ ├── _header.css │ │ │ │ │ │ ├── _toolbar.css │ │ │ │ │ │ └── document.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── document.js │ │ │ │ │ ├── header.js │ │ │ │ │ ├── toolbar-button.js │ │ │ │ │ └── toolbar.js │ │ │ │ └── partials/ │ │ │ │ ├── _document.php │ │ │ │ ├── _header.php │ │ │ │ ├── _toolbar-button.php │ │ │ │ ├── _toolbar.php │ │ │ │ └── _toolbarelementlist.php │ │ │ ├── documentmarkdowneditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── documentmarkdowneditor.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── documentmarkdowneditor.js │ │ │ │ │ │ ├── formwidget.js │ │ │ │ │ │ ├── formwidgetconnector.js │ │ │ │ │ │ ├── octobercommands.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ └── vendor/ │ │ │ │ │ ├── dompurify@2.1.1/ │ │ │ │ │ │ └── LICENSE.txt │ │ │ │ │ ├── easymde@2.12.0/ │ │ │ │ │ │ └── LICENSE.txt │ │ │ │ │ └── marked@1.2.0/ │ │ │ │ │ └── LICENSE.md │ │ │ │ └── partials/ │ │ │ │ ├── _documentmarkdowneditor.php │ │ │ │ └── _formwidgetconnector.php │ │ │ ├── dropdown/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── js/ │ │ │ │ │ │ └── dropdown.js │ │ │ │ │ └── vendor/ │ │ │ │ │ └── vue-multiselect/ │ │ │ │ │ ├── LICENSE.txt │ │ │ │ │ └── vue-multiselect.esm.js │ │ │ │ └── partials/ │ │ │ │ └── _dropdown.php │ │ │ ├── dropdownmenu/ │ │ │ │ ├── ItemDefinition.php │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── dropdownmenu.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── dropdownmenu-utils.js │ │ │ │ │ ├── dropdownmenu.js │ │ │ │ │ ├── menuitem.js │ │ │ │ │ └── sheet.js │ │ │ │ └── partials/ │ │ │ │ ├── _dropdownmenu.php │ │ │ │ ├── _menuitem.php │ │ │ │ └── _sheet.php │ │ │ ├── dropdownmenubutton/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── dropdownmenubutton.js │ │ │ │ └── partials/ │ │ │ │ └── _dropdownmenubutton.php │ │ │ ├── infotable/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── infotable.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── infotable.js │ │ │ │ │ └── item.js │ │ │ │ └── partials/ │ │ │ │ ├── _infotable.php │ │ │ │ └── _item.php │ │ │ ├── inspector/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _control-autocomplete.css │ │ │ │ │ │ ├── _control-checkbox.css │ │ │ │ │ │ ├── _control-dropdown.css │ │ │ │ │ │ ├── _control-table-dropdown.css │ │ │ │ │ │ ├── _control-table-text.css │ │ │ │ │ │ ├── _control-table.css │ │ │ │ │ │ ├── _control-text.css │ │ │ │ │ │ ├── _controlhost.css │ │ │ │ │ │ ├── _controls.css │ │ │ │ │ │ ├── _group.css │ │ │ │ │ │ ├── _host.css │ │ │ │ │ │ └── inspector.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── classes/ │ │ │ │ │ │ │ ├── control-base.js │ │ │ │ │ │ │ ├── control-table-base.js │ │ │ │ │ │ │ ├── dataloader.js │ │ │ │ │ │ │ ├── dataschema.js │ │ │ │ │ │ │ ├── host.js │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ ├── utils.js │ │ │ │ │ │ │ ├── validators/ │ │ │ │ │ │ │ │ ├── base.js │ │ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ │ │ ├── integer.js │ │ │ │ │ │ │ │ ├── number-base.js │ │ │ │ │ │ │ │ ├── regex.js │ │ │ │ │ │ │ │ └── required.js │ │ │ │ │ │ │ └── validatorset.js │ │ │ │ │ │ ├── control-autocomplete.js │ │ │ │ │ │ ├── control-checkbox.js │ │ │ │ │ │ ├── control-dictionary.js │ │ │ │ │ │ ├── control-dropdown.js │ │ │ │ │ │ ├── control-mediafinder.js │ │ │ │ │ │ ├── control-object.js │ │ │ │ │ │ ├── control-objectlist-records.js │ │ │ │ │ │ ├── control-objectlist-recordtitle.js │ │ │ │ │ │ ├── control-objectlist.js │ │ │ │ │ │ ├── control-set.js │ │ │ │ │ │ ├── control-table-cell.js │ │ │ │ │ │ ├── control-table-dropdown.js │ │ │ │ │ │ ├── control-table-head.js │ │ │ │ │ │ ├── control-table-headcell.js │ │ │ │ │ │ ├── control-table-row.js │ │ │ │ │ │ ├── control-table-text.js │ │ │ │ │ │ ├── control-table.js │ │ │ │ │ │ ├── control-text.js │ │ │ │ │ │ ├── controlhost-row.js │ │ │ │ │ │ ├── controlhost.js │ │ │ │ │ │ ├── group.js │ │ │ │ │ │ ├── grouphost.js │ │ │ │ │ │ ├── host-modal.js │ │ │ │ │ │ ├── inspector.js │ │ │ │ │ │ └── panel.js │ │ │ │ │ └── vendor/ │ │ │ │ │ └── ajv/ │ │ │ │ │ └── LICENSE.txt │ │ │ │ └── partials/ │ │ │ │ ├── _control-autocomplete.php │ │ │ │ ├── _control-checkbox.php │ │ │ │ ├── _control-dictionary.php │ │ │ │ ├── _control-dropdown.php │ │ │ │ ├── _control-mediafinder.php │ │ │ │ ├── _control-object.php │ │ │ │ ├── _control-objectlist-records.php │ │ │ │ ├── _control-objectlist-recordtitle.php │ │ │ │ ├── _control-objectlist.php │ │ │ │ ├── _control-set.php │ │ │ │ ├── _control-table-cell.php │ │ │ │ ├── _control-table-dropdown.php │ │ │ │ ├── _control-table-head.php │ │ │ │ ├── _control-table-headcell.php │ │ │ │ ├── _control-table-row.php │ │ │ │ ├── _control-table-text.php │ │ │ │ ├── _control-table.php │ │ │ │ ├── _control-text.php │ │ │ │ ├── _controlhost-row-controls.php │ │ │ │ ├── _controlhost-row.php │ │ │ │ ├── _controlhost.php │ │ │ │ ├── _group.php │ │ │ │ ├── _grouphost.php │ │ │ │ ├── _host-modal.php │ │ │ │ ├── _inspector.php │ │ │ │ └── _panel.php │ │ │ ├── loadingindicator/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _bar.css │ │ │ │ │ │ ├── _circles.css │ │ │ │ │ │ ├── _stripe.css │ │ │ │ │ │ └── loadingindicator.css │ │ │ │ │ └── js/ │ │ │ │ │ └── loadingindicator.js │ │ │ │ └── partials/ │ │ │ │ └── _loadingindicator.php │ │ │ ├── modal/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _resizing.css │ │ │ │ │ │ └── modal.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── alert.js │ │ │ │ │ ├── basic.js │ │ │ │ │ ├── classes/ │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── position.js │ │ │ │ │ │ ├── size.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── confirm.js │ │ │ │ │ └── modal.js │ │ │ │ └── partials/ │ │ │ │ ├── _alert.php │ │ │ │ ├── _basic.php │ │ │ │ ├── _confirm.php │ │ │ │ └── _modal.php │ │ │ ├── monacoeditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _container-style.css │ │ │ │ │ │ ├── _decorations.css │ │ │ │ │ │ ├── _editor-widgets.css │ │ │ │ │ │ ├── _tabs-style-monacoeditor.css │ │ │ │ │ │ └── monacoeditor.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── modeldefinition.js │ │ │ │ │ │ ├── modelreference.js │ │ │ │ │ │ └── monacoeditor.js │ │ │ │ │ └── vendor/ │ │ │ │ │ ├── monaco/ │ │ │ │ │ │ └── vs/ │ │ │ │ │ │ ├── base/ │ │ │ │ │ │ │ ├── common/ │ │ │ │ │ │ │ │ └── worker/ │ │ │ │ │ │ │ │ ├── simpleWorker.nls.de.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.es.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.fr.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.it.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.ja.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.ko.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.ru.js │ │ │ │ │ │ │ │ ├── simpleWorker.nls.zh-cn.js │ │ │ │ │ │ │ │ └── simpleWorker.nls.zh-tw.js │ │ │ │ │ │ │ └── worker/ │ │ │ │ │ │ │ └── workerMain.js │ │ │ │ │ │ ├── basic-languages/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ └── css.js │ │ │ │ │ │ │ ├── html/ │ │ │ │ │ │ │ │ └── html.js │ │ │ │ │ │ │ ├── javascript/ │ │ │ │ │ │ │ │ └── javascript.js │ │ │ │ │ │ │ ├── less/ │ │ │ │ │ │ │ │ └── less.js │ │ │ │ │ │ │ ├── markdown/ │ │ │ │ │ │ │ │ └── markdown.js │ │ │ │ │ │ │ ├── php/ │ │ │ │ │ │ │ │ └── php.js │ │ │ │ │ │ │ ├── scss/ │ │ │ │ │ │ │ │ └── scss.js │ │ │ │ │ │ │ ├── twig/ │ │ │ │ │ │ │ │ └── twig.js │ │ │ │ │ │ │ ├── typescript/ │ │ │ │ │ │ │ │ └── typescript.js │ │ │ │ │ │ │ └── yaml/ │ │ │ │ │ │ │ └── yaml.js │ │ │ │ │ │ ├── editor/ │ │ │ │ │ │ │ ├── editor.main.css │ │ │ │ │ │ │ ├── editor.main.js │ │ │ │ │ │ │ └── editor.main.nls.js │ │ │ │ │ │ ├── language/ │ │ │ │ │ │ │ ├── css/ │ │ │ │ │ │ │ │ ├── cssMode.js │ │ │ │ │ │ │ │ └── cssWorker.js │ │ │ │ │ │ │ ├── html/ │ │ │ │ │ │ │ │ ├── htmlMode.js │ │ │ │ │ │ │ │ └── htmlWorker.js │ │ │ │ │ │ │ ├── json/ │ │ │ │ │ │ │ │ ├── jsonMode.js │ │ │ │ │ │ │ │ └── jsonWorker.js │ │ │ │ │ │ │ └── typescript/ │ │ │ │ │ │ │ ├── tsMode.js │ │ │ │ │ │ │ └── tsWorker.js │ │ │ │ │ │ └── loader.js │ │ │ │ │ └── monaco-yaml/ │ │ │ │ │ ├── monaco-yaml.js │ │ │ │ │ ├── yaml.worker.js │ │ │ │ │ └── yaml.worker.min.js.LICENSE.txt │ │ │ │ └── partials/ │ │ │ │ └── _monacoeditor.php │ │ │ ├── popover/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── popover.js │ │ │ │ └── partials/ │ │ │ │ └── _popover.php │ │ │ ├── richeditor/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _editor-styles.css │ │ │ │ │ │ ├── iframestyles.css │ │ │ │ │ │ └── richeditor.css │ │ │ │ │ └── js/ │ │ │ │ │ └── richeditor.js │ │ │ │ └── partials/ │ │ │ │ └── _richeditor.php │ │ │ ├── richeditordocumentconnector/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _formwidget.css │ │ │ │ │ │ ├── _resizing.css │ │ │ │ │ │ └── richeditordocumentconnector.css │ │ │ │ │ ├── js/ │ │ │ │ │ │ ├── formwidget.js │ │ │ │ │ │ ├── formwidgetconnector.js │ │ │ │ │ │ ├── octobercommands.js │ │ │ │ │ │ ├── richeditordocumentconnector.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ └── vendor/ │ │ │ │ │ └── beautify@1.13.0/ │ │ │ │ │ ├── LICENSE │ │ │ │ │ ├── beautify-html.js │ │ │ │ │ ├── beautify.js │ │ │ │ │ └── beautify.js-css.js │ │ │ │ └── partials/ │ │ │ │ ├── _formwidgetconnector.php │ │ │ │ └── _richeditordocumentconnector.php │ │ │ ├── scrollablepanel/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── scrollablepanel.css │ │ │ │ │ └── js/ │ │ │ │ │ └── scrollablepanel.js │ │ │ │ └── partials/ │ │ │ │ └── _scrollablepanel.php │ │ │ ├── splitter/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── splitter.css │ │ │ │ │ └── js/ │ │ │ │ │ └── splitter.js │ │ │ │ └── partials/ │ │ │ │ └── _splitter.php │ │ │ ├── tabs/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _style-document.css │ │ │ │ │ │ ├── _style-form.css │ │ │ │ │ │ ├── _style-inspector.css │ │ │ │ │ │ └── tabs.css │ │ │ │ │ └── js/ │ │ │ │ │ └── tabs.js │ │ │ │ └── partials/ │ │ │ │ └── _tabs.php │ │ │ ├── treeview/ │ │ │ │ ├── NodeDefinition.php │ │ │ │ ├── SectionDefinition.php │ │ │ │ ├── SectionList.php │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── _drag-drop.css │ │ │ │ │ │ ├── _node-expand-toggle.css │ │ │ │ │ │ ├── _node-icon.css │ │ │ │ │ │ ├── _node-menu.css │ │ │ │ │ │ ├── _node.css │ │ │ │ │ │ ├── _quick-access.css │ │ │ │ │ │ ├── _search.css │ │ │ │ │ │ ├── _section.css │ │ │ │ │ │ └── treeview.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── classes/ │ │ │ │ │ │ ├── draganddrop.js │ │ │ │ │ │ ├── index.js │ │ │ │ │ │ ├── navigation.js │ │ │ │ │ │ ├── selection.js │ │ │ │ │ │ └── utils.js │ │ │ │ │ ├── node.js │ │ │ │ │ ├── quickaccess.js │ │ │ │ │ ├── section.js │ │ │ │ │ └── treeview.js │ │ │ │ └── partials/ │ │ │ │ ├── _node.php │ │ │ │ ├── _quickaccess.php │ │ │ │ ├── _section.php │ │ │ │ └── _treeview.php │ │ │ └── uploader/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ ├── _item.css │ │ │ │ │ └── uploader.css │ │ │ │ └── js/ │ │ │ │ ├── file.js │ │ │ │ ├── item.js │ │ │ │ ├── queue.js │ │ │ │ ├── uploader-utils.js │ │ │ │ ├── uploader.js │ │ │ │ └── utils.js │ │ │ └── partials/ │ │ │ ├── _item.php │ │ │ └── _uploader.php │ │ └── widgets/ │ │ ├── Filter.php │ │ ├── Form.php │ │ ├── ListStructure.php │ │ ├── Lists.php │ │ ├── ReportContainer.php │ │ ├── RoleImpersonator.php │ │ ├── Search.php │ │ ├── SiteSwitcher.php │ │ ├── Table.php │ │ ├── Toolbar.php │ │ ├── filter/ │ │ │ ├── HasFilterWidgets.php │ │ │ ├── HasLegacyDefinitions.php │ │ │ ├── IsFilterElement.php │ │ │ ├── ScopeProcessor.php │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── filter.css │ │ │ │ ├── js/ │ │ │ │ │ └── october.filter.js │ │ │ │ └── less/ │ │ │ │ ├── filter.box.less │ │ │ │ ├── filter.checkbox.less │ │ │ │ ├── filter.dropdown.less │ │ │ │ ├── filter.group.less │ │ │ │ ├── filter.inline.less │ │ │ │ └── filter.less │ │ │ └── partials/ │ │ │ ├── _filter-container.php │ │ │ ├── _filter.php │ │ │ ├── _filter_menu.php │ │ │ ├── _filter_scopes.php │ │ │ ├── _form_widget.php │ │ │ ├── _popover_template.php │ │ │ ├── _scope-container.php │ │ │ ├── _scope.php │ │ │ ├── _scope_checkbox.php │ │ │ ├── _scope_dropdown.php │ │ │ ├── _scope_switch.php │ │ │ └── _scope_widget.php │ │ ├── form/ │ │ │ ├── FieldProcessor.php │ │ │ ├── HasFormWidgets.php │ │ │ ├── HasTranslatable.php │ │ │ ├── IsFormElement.php │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── form.css │ │ │ │ ├── js/ │ │ │ │ │ └── october.form.js │ │ │ │ └── less/ │ │ │ │ └── form.less │ │ │ └── partials/ │ │ │ ├── _field-container.php │ │ │ ├── _field.php │ │ │ ├── _field_balloon-selector.php │ │ │ ├── _field_checkbox.php │ │ │ ├── _field_checkboxlist.php │ │ │ ├── _field_dropdown.php │ │ │ ├── _field_email.php │ │ │ ├── _field_hint.php │ │ │ ├── _field_number.php │ │ │ ├── _field_partial.php │ │ │ ├── _field_password.php │ │ │ ├── _field_radio.php │ │ │ ├── _field_ruler.php │ │ │ ├── _field_section.php │ │ │ ├── _field_switch.php │ │ │ ├── _field_text.php │ │ │ ├── _field_textarea.php │ │ │ ├── _field_widget.php │ │ │ ├── _form-container.php │ │ │ ├── _form.php │ │ │ ├── _form_fields.php │ │ │ ├── _form_fields_lazy.php │ │ │ ├── _form_tabs.php │ │ │ ├── _form_tabs_survey.php │ │ │ ├── _horizontal_field.php │ │ │ ├── _section-container.php │ │ │ ├── _section.php │ │ │ ├── _tooltip.php │ │ │ ├── _translate_button.php │ │ │ └── _translate_popup.php │ │ ├── lists/ │ │ │ ├── ColumnProcessor.php │ │ │ ├── HasListSetup.php │ │ │ ├── HasSearch.php │ │ │ ├── HasSorting.php │ │ │ ├── HasValueProcessor.php │ │ │ ├── IsListElement.php │ │ │ ├── assets/ │ │ │ │ ├── js/ │ │ │ │ │ └── october.list.js │ │ │ │ └── less/ │ │ │ │ ├── list.less │ │ │ │ ├── list.rowlink.less │ │ │ │ └── list.structure.less │ │ │ └── partials/ │ │ │ ├── _column_colorpicker.php │ │ │ ├── _column_file.php │ │ │ ├── _column_image.php │ │ │ ├── _column_linkage.php │ │ │ ├── _column_partial.php │ │ │ ├── _column_selectable.php │ │ │ ├── _column_switch.php │ │ │ ├── _list-container.php │ │ │ ├── _list.php │ │ │ ├── _list_body_checkbox.php │ │ │ ├── _list_body_row.php │ │ │ ├── _list_body_rows.php │ │ │ ├── _list_datalocker.php │ │ │ ├── _list_head_row.php │ │ │ ├── _list_head_tooltip.php │ │ │ ├── _list_pagination.php │ │ │ ├── _list_pagination_simple.php │ │ │ └── _setup_form.php │ │ ├── liststructure/ │ │ │ ├── assets/ │ │ │ │ └── js/ │ │ │ │ └── october.liststructure.js │ │ │ └── partials/ │ │ │ ├── _list.php │ │ │ ├── _list_body_reorder.php │ │ │ ├── _list_body_row.php │ │ │ ├── _list_body_rows.php │ │ │ ├── _list_body_tree.php │ │ │ └── _list_head_row.php │ │ ├── reportcontainer/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── reportcontainer.css │ │ │ │ ├── js/ │ │ │ │ │ └── reportcontainer.js │ │ │ │ ├── less/ │ │ │ │ │ └── reportcontainer.less │ │ │ │ └── vendor/ │ │ │ │ └── isotope/ │ │ │ │ └── jquery.isotope.js │ │ │ └── partials/ │ │ │ ├── _container.php │ │ │ ├── _new_widget_popup.php │ │ │ ├── _widget.php │ │ │ ├── _widget_list.php │ │ │ └── _widget_toolbar.php │ │ ├── roleimpersonator/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── roleimpersonator.css │ │ │ │ └── less/ │ │ │ │ └── roleimpersonator.less │ │ │ └── partials/ │ │ │ └── _roleimpersonator.php │ │ ├── search/ │ │ │ └── partials/ │ │ │ └── _search.php │ │ ├── siteswitcher/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── siteswitcher.css │ │ │ │ ├── js/ │ │ │ │ │ └── siteswitcher.js │ │ │ │ └── less/ │ │ │ │ └── siteswitcher.less │ │ │ └── partials/ │ │ │ ├── _sitebanner.php │ │ │ ├── _siteswitcher.php │ │ │ ├── _submenu.php │ │ │ ├── _submenu_footer.php │ │ │ ├── _submenu_grouped_items.php │ │ │ └── _submenu_items.php │ │ ├── table/ │ │ │ ├── ClientMemoryDataSource.php │ │ │ ├── DataSourceBase.php │ │ │ ├── README.md │ │ │ ├── ServerEventDataSource.php │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── table.css │ │ │ │ └── js/ │ │ │ │ ├── build-min.js │ │ │ │ ├── table.datasource.base.js │ │ │ │ ├── table.datasource.client.js │ │ │ │ ├── table.datasource.server.js │ │ │ │ ├── table.helper.navigation.js │ │ │ │ ├── table.helper.search.js │ │ │ │ ├── table.js │ │ │ │ ├── table.processor.autocomplete.js │ │ │ │ ├── table.processor.base.js │ │ │ │ ├── table.processor.checkbox.js │ │ │ │ ├── table.processor.dropdown.js │ │ │ │ ├── table.processor.string.js │ │ │ │ ├── table.validator.base.js │ │ │ │ ├── table.validator.basenumber.js │ │ │ │ ├── table.validator.float.js │ │ │ │ ├── table.validator.integer.js │ │ │ │ ├── table.validator.length.js │ │ │ │ ├── table.validator.regex.js │ │ │ │ └── table.validator.required.js │ │ │ └── partials/ │ │ │ └── _table.php │ │ └── toolbar/ │ │ └── partials/ │ │ └── _toolbar.php │ ├── cms/ │ │ ├── ServiceProvider.php │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ ├── themelogs.css │ │ │ │ └── themes.css │ │ │ ├── js/ │ │ │ │ ├── cms.editor.extension.documentcomponent.base.js │ │ │ │ ├── cms.editor.extension.documentcontroller.asset.js │ │ │ │ ├── cms.editor.extension.documentcontroller.content.js │ │ │ │ ├── cms.editor.extension.documentcontroller.layout.js │ │ │ │ ├── cms.editor.extension.documentcontroller.page.js │ │ │ │ ├── cms.editor.extension.documentcontroller.partial.js │ │ │ │ ├── cms.editor.extension.js │ │ │ │ ├── cms.editor.intellisense.actionhandler.base.js │ │ │ │ ├── cms.editor.intellisense.actionhandler.expandcomponent.js │ │ │ │ ├── cms.editor.intellisense.clickhandler.base.js │ │ │ │ ├── cms.editor.intellisense.clickhandler.cssimports.js │ │ │ │ ├── cms.editor.intellisense.clickhandler.template.js │ │ │ │ ├── cms.editor.intellisense.completer.assets.js │ │ │ │ ├── cms.editor.intellisense.completer.base.js │ │ │ │ ├── cms.editor.intellisense.completer.content.js │ │ │ │ ├── cms.editor.intellisense.completer.octobertags.js │ │ │ │ ├── cms.editor.intellisense.completer.pages.js │ │ │ │ ├── cms.editor.intellisense.completer.partials.js │ │ │ │ ├── cms.editor.intellisense.completer.twigfilters.js │ │ │ │ ├── cms.editor.intellisense.hoverprovider.base.js │ │ │ │ ├── cms.editor.intellisense.hoverprovider.octobertags.js │ │ │ │ ├── cms.editor.intellisense.hoverprovider.twigfilters.js │ │ │ │ ├── cms.editor.intellisense.js │ │ │ │ ├── cms.editor.intellisense.utils.js │ │ │ │ └── themelogs.templatediff.js │ │ │ ├── less/ │ │ │ │ └── themes.less │ │ │ └── vendor/ │ │ │ └── jsdiff/ │ │ │ └── diff.js │ │ ├── classes/ │ │ │ ├── AjaxApiResponse.php │ │ │ ├── Asset.php │ │ │ ├── CmsCompoundObject.php │ │ │ ├── CmsController.php │ │ │ ├── CmsException.php │ │ │ ├── CmsObject.php │ │ │ ├── CmsObjectCache.php │ │ │ ├── CmsObjectCollection.php │ │ │ ├── CodeBase.php │ │ │ ├── CodeParser.php │ │ │ ├── ComponentBase.php │ │ │ ├── ComponentBehavior.php │ │ │ ├── ComponentHelpers.php │ │ │ ├── ComponentManager.php │ │ │ ├── ComponentModuleBase.php │ │ │ ├── ComponentPartial.php │ │ │ ├── Content.php │ │ │ ├── Controller.php │ │ │ ├── EditorExtension.php │ │ │ ├── Layout.php │ │ │ ├── LayoutCode.php │ │ │ ├── Meta.php │ │ │ ├── Page.php │ │ │ ├── PageCode.php │ │ │ ├── PageManager.php │ │ │ ├── Partial.php │ │ │ ├── PartialCode.php │ │ │ ├── PartialStack.php │ │ │ ├── PartialWatcher.php │ │ │ ├── Router.php │ │ │ ├── Snippet.php │ │ │ ├── SnippetManager.php │ │ │ ├── Theme.php │ │ │ ├── ThemeManager.php │ │ │ ├── ThisVariable.php │ │ │ ├── controller/ │ │ │ │ ├── HasAjaxRequests.php │ │ │ │ ├── HasComponentHelpers.php │ │ │ │ ├── HasRenderers.php │ │ │ │ └── HasThemeAssetMaker.php │ │ │ ├── editorextension/ │ │ │ │ ├── HasComponentListLoader.php │ │ │ │ ├── HasExtensionAssetsCrud.php │ │ │ │ ├── HasExtensionAssetsState.php │ │ │ │ ├── HasExtensionCrud.php │ │ │ │ ├── HasExtensionExtensibility.php │ │ │ │ ├── HasExtensionState.php │ │ │ │ ├── HasExtensionThemeCrud.php │ │ │ │ ├── HasExtensionThemesState.php │ │ │ │ ├── HasIntellisense.php │ │ │ │ └── editorintellisense/ │ │ │ │ ├── octobertags.json │ │ │ │ └── twigfilters.json │ │ │ ├── layout/ │ │ │ │ └── Fields.php │ │ │ ├── page/ │ │ │ │ └── Fields.php │ │ │ ├── partial/ │ │ │ │ └── Fields.php │ │ │ └── theme/ │ │ │ ├── HasCacheLayer.php │ │ │ ├── HasConfiguration.php │ │ │ └── fields.yaml │ │ ├── components/ │ │ │ ├── Resources.php │ │ │ ├── SitePicker.php │ │ │ ├── UnknownComponent.php │ │ │ ├── ViewBag.php │ │ │ └── sitepicker/ │ │ │ └── default.htm │ │ ├── composer.json │ │ ├── console/ │ │ │ ├── ThemeCache.php │ │ │ ├── ThemeCheck.php │ │ │ ├── ThemeClear.php │ │ │ ├── ThemeCopy.php │ │ │ ├── ThemeInstall.php │ │ │ ├── ThemeList.php │ │ │ ├── ThemeRemove.php │ │ │ ├── ThemeSeed.php │ │ │ └── ThemeUse.php │ │ ├── contracts/ │ │ │ └── CmsObject.php │ │ ├── controllers/ │ │ │ ├── ThemeLogs.php │ │ │ ├── ThemeOptions.php │ │ │ ├── Themes.php │ │ │ ├── themelogs/ │ │ │ │ ├── _field_content.php │ │ │ │ ├── _field_diff_content.php │ │ │ │ ├── _field_diff_template.php │ │ │ │ ├── _field_template.php │ │ │ │ ├── _hint.php │ │ │ │ ├── _hint_preview.php │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── _preview_scoreboard.php │ │ │ │ ├── config_filter.yaml │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ ├── index.php │ │ │ │ └── preview.php │ │ │ ├── themeoptions/ │ │ │ │ ├── config_form.yaml │ │ │ │ └── update.php │ │ │ └── themes/ │ │ │ ├── _theme_create_form.php │ │ │ ├── _theme_duplicate_form.php │ │ │ ├── _theme_export_form.php │ │ │ ├── _theme_fields_form.php │ │ │ ├── _theme_import_form.php │ │ │ ├── _theme_list.php │ │ │ ├── _theme_list_item.php │ │ │ ├── _theme_seed_form.php │ │ │ ├── download.php │ │ │ └── index.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2014_10_01_000001_Db_Cms_Theme_Data.php │ │ │ ├── 2017_10_01_000003_Db_Cms_Theme_Logs.php │ │ │ └── 2018_11_01_000001_Db_Cms_Theme_Templates.php │ │ ├── facades/ │ │ │ └── Cms.php │ │ ├── formwidgets/ │ │ │ ├── PageFinder.php │ │ │ └── pagefinder/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── pagefinder.css │ │ │ │ └── js/ │ │ │ │ └── pagefinder.js │ │ │ └── partials/ │ │ │ ├── _container.php │ │ │ └── _pagefinder.php │ │ ├── helpers/ │ │ │ ├── Cms.php │ │ │ ├── Component.php │ │ │ ├── File.php │ │ │ └── cms/ │ │ │ └── HasSites.php │ │ ├── lang/ │ │ │ ├── ar/ │ │ │ │ └── lang.php │ │ │ ├── be/ │ │ │ │ └── lang.php │ │ │ ├── be.json │ │ │ ├── bg/ │ │ │ │ └── lang.php │ │ │ ├── bg.json │ │ │ ├── ca/ │ │ │ │ └── lang.php │ │ │ ├── ca.json │ │ │ ├── cs/ │ │ │ │ └── lang.php │ │ │ ├── cs.json │ │ │ ├── da/ │ │ │ │ └── lang.php │ │ │ ├── da.json │ │ │ ├── de/ │ │ │ │ └── lang.php │ │ │ ├── de.json │ │ │ ├── el/ │ │ │ │ └── lang.php │ │ │ ├── el.json │ │ │ ├── en/ │ │ │ │ └── lang.php │ │ │ ├── en.json │ │ │ ├── es/ │ │ │ │ └── lang.php │ │ │ ├── es-ar/ │ │ │ │ └── lang.php │ │ │ ├── es-ar.json │ │ │ ├── es.json │ │ │ ├── et/ │ │ │ │ └── lang.php │ │ │ ├── et.json │ │ │ ├── fa/ │ │ │ │ └── lang.php │ │ │ ├── fa.json │ │ │ ├── fi/ │ │ │ │ └── lang.php │ │ │ ├── fi.json │ │ │ ├── fr/ │ │ │ │ └── lang.php │ │ │ ├── fr.json │ │ │ ├── hu/ │ │ │ │ └── lang.php │ │ │ ├── hu.json │ │ │ ├── id/ │ │ │ │ └── lang.php │ │ │ ├── id.json │ │ │ ├── it/ │ │ │ │ └── lang.php │ │ │ ├── it.json │ │ │ ├── ja/ │ │ │ │ └── lang.php │ │ │ ├── ja.json │ │ │ ├── kaa.json │ │ │ ├── kk.json │ │ │ ├── ko/ │ │ │ │ └── lang.php │ │ │ ├── ko.json │ │ │ ├── lt/ │ │ │ │ └── lang.php │ │ │ ├── lt.json │ │ │ ├── lv/ │ │ │ │ └── lang.php │ │ │ ├── lv.json │ │ │ ├── nb-no/ │ │ │ │ └── lang.php │ │ │ ├── nb-no.json │ │ │ ├── nl/ │ │ │ │ └── lang.php │ │ │ ├── nl.json │ │ │ ├── pl/ │ │ │ │ └── lang.php │ │ │ ├── pl.json │ │ │ ├── pt-br/ │ │ │ │ └── lang.php │ │ │ ├── pt-br.json │ │ │ ├── pt-pt/ │ │ │ │ └── lang.php │ │ │ ├── pt-pt.json │ │ │ ├── ro/ │ │ │ │ └── lang.php │ │ │ ├── ro.json │ │ │ ├── rs/ │ │ │ │ └── lang.php │ │ │ ├── rs.json │ │ │ ├── ru/ │ │ │ │ └── lang.php │ │ │ ├── ru.json │ │ │ ├── sk/ │ │ │ │ └── lang.php │ │ │ ├── sk.json │ │ │ ├── sl/ │ │ │ │ └── lang.php │ │ │ ├── sl.json │ │ │ ├── sv/ │ │ │ │ └── lang.php │ │ │ ├── sv.json │ │ │ ├── th/ │ │ │ │ └── lang.php │ │ │ ├── th.json │ │ │ ├── tr/ │ │ │ │ └── lang.php │ │ │ ├── tr.json │ │ │ ├── uk/ │ │ │ │ └── lang.php │ │ │ ├── uk.json │ │ │ ├── vn/ │ │ │ │ └── lang.php │ │ │ ├── vn.json │ │ │ ├── zh-cn/ │ │ │ │ └── lang.php │ │ │ ├── zh-cn.json │ │ │ ├── zh-tw/ │ │ │ │ └── lang.php │ │ │ └── zh-tw.json │ │ ├── models/ │ │ │ ├── MaintenanceSetting.php │ │ │ ├── PageLookupItem.php │ │ │ ├── ThemeData.php │ │ │ ├── ThemeExport.php │ │ │ ├── ThemeImport.php │ │ │ ├── ThemeLog.php │ │ │ ├── ThemeSeed.php │ │ │ ├── maintenancesetting/ │ │ │ │ └── fields.yaml │ │ │ ├── themeexport/ │ │ │ │ └── fields.yaml │ │ │ ├── themeimport/ │ │ │ │ └── fields.yaml │ │ │ ├── themelog/ │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ └── themeseed/ │ │ │ └── fields.yaml │ │ ├── reportwidgets/ │ │ │ ├── ActiveTheme.php │ │ │ └── activetheme/ │ │ │ ├── assets/ │ │ │ │ └── css/ │ │ │ │ └── activetheme.css │ │ │ └── partials/ │ │ │ └── _widget.php │ │ ├── routes.php │ │ ├── tests/ │ │ │ ├── classes/ │ │ │ │ ├── CmsCompoundObjectTest.php │ │ │ │ ├── CmsExceptionTest.php │ │ │ │ ├── CmsObjectQueryTest.php │ │ │ │ ├── CmsObjectTest.php │ │ │ │ ├── CodeParserTest.php │ │ │ │ ├── ComponentManagerTest.php │ │ │ │ ├── ContentTest.php │ │ │ │ ├── ControllerTest.php │ │ │ │ ├── PartialStackTest.php │ │ │ │ ├── RouterTest.php │ │ │ │ ├── ThemeCombineAssetsTest.php │ │ │ │ ├── ThemeDataTest.php │ │ │ │ └── ThemeTest.php │ │ │ ├── fixtures/ │ │ │ │ ├── reference/ │ │ │ │ │ ├── compound-full.htm │ │ │ │ │ ├── compound-markup-settings.htm │ │ │ │ │ ├── compound-markup.htm │ │ │ │ │ ├── namespaces-aliases.php.stub │ │ │ │ │ └── namespaces.php.stub │ │ │ │ └── themes/ │ │ │ │ ├── apitest/ │ │ │ │ │ └── .gitignore │ │ │ │ └── test/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ ├── style1.css │ │ │ │ │ │ └── style2.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── script1.js │ │ │ │ │ └── script2.js │ │ │ │ ├── content/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── a-content.htm │ │ │ │ │ ├── html-content.htm │ │ │ │ │ ├── layout-content.txt │ │ │ │ │ ├── markdown-content.md │ │ │ │ │ ├── page-content.htm │ │ │ │ │ └── text-content.txt │ │ │ │ ├── layouts/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── a-layout.htm │ │ │ │ │ ├── ajax-test.htm │ │ │ │ │ ├── content.htm │ │ │ │ │ ├── cycle-test.htm │ │ │ │ │ ├── no-php.htm │ │ │ │ │ ├── partials.htm │ │ │ │ │ ├── php-parser-test.htm │ │ │ │ │ ├── placeholder.htm │ │ │ │ │ └── sidebar.htm │ │ │ │ ├── pages/ │ │ │ │ │ ├── 404.htm │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── a-page.htm │ │ │ │ │ ├── ajax-test.htm │ │ │ │ │ ├── authors.htm │ │ │ │ │ ├── b/ │ │ │ │ │ │ ├── b-page.htm │ │ │ │ │ │ └── c/ │ │ │ │ │ │ └── c-page.htm │ │ │ │ │ ├── blog-archive.htm │ │ │ │ │ ├── blog-category.htm │ │ │ │ │ ├── blog-post.htm │ │ │ │ │ ├── code-namespaces-aliases.htm │ │ │ │ │ ├── code-namespaces.htm │ │ │ │ │ ├── component-custom-render.htm │ │ │ │ │ ├── component-partial-alias-override.htm │ │ │ │ │ ├── component-partial-nesting.htm │ │ │ │ │ ├── component-partial-override.htm │ │ │ │ │ ├── component-partial.htm │ │ │ │ │ ├── cycle-test.htm │ │ │ │ │ ├── index.htm │ │ │ │ │ ├── no-component-class.htm │ │ │ │ │ ├── no-component.htm │ │ │ │ │ ├── no-layout.htm │ │ │ │ │ ├── no-partial.htm │ │ │ │ │ ├── optional-full-php-tags.htm │ │ │ │ │ ├── optional-short-php-tags.htm │ │ │ │ │ ├── throw-php.htm │ │ │ │ │ ├── with-component.htm │ │ │ │ │ ├── with-components.htm │ │ │ │ │ ├── with-content.htm │ │ │ │ │ ├── with-layout.htm │ │ │ │ │ ├── with-partials.htm │ │ │ │ │ └── with-placeholder.htm │ │ │ │ ├── partials/ │ │ │ │ │ ├── a/ │ │ │ │ │ │ └── a-partial.htm │ │ │ │ │ ├── ajax-result.htm │ │ │ │ │ ├── ajax-second-result.htm │ │ │ │ │ ├── layout-partial.htm │ │ │ │ │ ├── nesting/ │ │ │ │ │ │ ├── level1.htm │ │ │ │ │ │ ├── level2.htm │ │ │ │ │ │ └── level3.htm │ │ │ │ │ ├── override1/ │ │ │ │ │ │ └── default.htm │ │ │ │ │ ├── override2/ │ │ │ │ │ │ ├── default.htm │ │ │ │ │ │ └── items.htm │ │ │ │ │ ├── override3/ │ │ │ │ │ │ └── default.htm │ │ │ │ │ ├── override4/ │ │ │ │ │ │ └── default.htm │ │ │ │ │ ├── page-partial-body.htm │ │ │ │ │ ├── page-partial.htm │ │ │ │ │ └── testpost/ │ │ │ │ │ └── default.htm │ │ │ │ ├── temporary/ │ │ │ │ │ └── .gitignore │ │ │ │ ├── testobjects/ │ │ │ │ │ ├── component.htm │ │ │ │ │ ├── components.htm │ │ │ │ │ ├── compound.htm │ │ │ │ │ ├── plain.html │ │ │ │ │ ├── subdir/ │ │ │ │ │ │ └── obj.html │ │ │ │ │ └── viewbag.htm │ │ │ │ └── theme.yaml │ │ │ └── helpers/ │ │ │ ├── CmsTest.php │ │ │ └── FileTest.php │ │ ├── traits/ │ │ │ ├── ParsableAttributes.php │ │ │ ├── ParsableController.php │ │ │ └── UrlMaker.php │ │ ├── twig/ │ │ │ ├── DebugExtension.php │ │ │ ├── Extension.php │ │ │ ├── Loader.php │ │ │ ├── node/ │ │ │ │ ├── CacheNode.php │ │ │ │ ├── ComponentNode.php │ │ │ │ ├── ContentNode.php │ │ │ │ ├── DefaultNode.php │ │ │ │ ├── FlashNode.php │ │ │ │ ├── FrameworkNode.php │ │ │ │ ├── MetaNode.php │ │ │ │ ├── PageNode.php │ │ │ │ ├── PartialNode.php │ │ │ │ ├── PlaceholderNode.php │ │ │ │ ├── PropsNode.php │ │ │ │ ├── PutNode.php │ │ │ │ ├── ScriptsNode.php │ │ │ │ └── StylesNode.php │ │ │ └── tokenparser/ │ │ │ ├── AjaxPartialTokenParser.php │ │ │ ├── CacheTokenParser.php │ │ │ ├── ComponentTokenParser.php │ │ │ ├── ContentTokenParser.php │ │ │ ├── DefaultTokenParser.php │ │ │ ├── FlashTokenParser.php │ │ │ ├── FrameworkTokenParser.php │ │ │ ├── MetaTokenParser.php │ │ │ ├── PageTokenParser.php │ │ │ ├── PartialTokenParser.php │ │ │ ├── PlaceholderTokenParser.php │ │ │ ├── PropsTokenParser.php │ │ │ ├── PutTokenParser.php │ │ │ ├── ScriptsTokenParser.php │ │ │ └── StylesTokenParser.php │ │ ├── views/ │ │ │ ├── 404.php │ │ │ └── error.php │ │ ├── vuecomponents/ │ │ │ ├── AssetEditor.php │ │ │ ├── CmsComponentListPopup.php │ │ │ ├── CmsObjectComponentList.php │ │ │ ├── ContentEditor.php │ │ │ ├── LayoutEditor.php │ │ │ ├── PageEditor.php │ │ │ ├── PartialEditor.php │ │ │ ├── asseteditor/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── asseteditor.js │ │ │ │ └── partials/ │ │ │ │ └── _asseteditor.php │ │ │ ├── cmscomponentlistpopup/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── cmscomponentlistpopup.css │ │ │ │ │ └── js/ │ │ │ │ │ └── cmscomponentlistpopup.js │ │ │ │ └── partials/ │ │ │ │ └── _cmscomponentlistpopup.php │ │ │ ├── cmsobjectcomponentlist/ │ │ │ │ ├── assets/ │ │ │ │ │ ├── css/ │ │ │ │ │ │ └── cmsobjectcomponentlist.css │ │ │ │ │ └── js/ │ │ │ │ │ ├── cmsobjectcomponentlist.js │ │ │ │ │ └── component.js │ │ │ │ └── partials/ │ │ │ │ ├── _cmsobjectcomponentlist.php │ │ │ │ └── _component.php │ │ │ ├── contenteditor/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── contenteditor.js │ │ │ │ └── partials/ │ │ │ │ └── _contenteditor.php │ │ │ ├── layouteditor/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── layouteditor.js │ │ │ │ └── partials/ │ │ │ │ └── _layouteditor.php │ │ │ ├── pageeditor/ │ │ │ │ ├── assets/ │ │ │ │ │ └── js/ │ │ │ │ │ └── pageeditor.js │ │ │ │ └── partials/ │ │ │ │ └── _pageeditor.php │ │ │ └── partialeditor/ │ │ │ ├── assets/ │ │ │ │ └── js/ │ │ │ │ └── partialeditor.js │ │ │ └── partials/ │ │ │ └── _partialeditor.php │ │ └── widgets/ │ │ ├── PageLookup.php │ │ ├── SnippetLookup.php │ │ ├── pagelookup/ │ │ │ ├── assets/ │ │ │ │ └── js/ │ │ │ │ └── pagelookup.js │ │ │ └── partials/ │ │ │ ├── _field_page_search.php │ │ │ └── _lookup_form.php │ │ └── snippetlookup/ │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── snippetlookup.css │ │ │ ├── js/ │ │ │ │ ├── snippet-control.js │ │ │ │ ├── snippet-control.markdown.js │ │ │ │ ├── snippet-control.richeditor.js │ │ │ │ ├── snippetlookup-control.js │ │ │ │ └── snippetlookup.js │ │ │ └── less/ │ │ │ └── snippetlookup.less │ │ └── partials/ │ │ ├── _items.php │ │ ├── _lookup_form.php │ │ ├── _snippets.php │ │ └── _toolbar.php │ ├── dashboard/ │ │ ├── ServiceProvider.php │ │ ├── assets/ │ │ │ └── js/ │ │ │ └── classes/ │ │ │ ├── Calendar.js │ │ │ ├── Dragging.js │ │ │ ├── Helpers.js │ │ │ ├── Reordering.js │ │ │ ├── Sizing.js │ │ │ ├── data-helper.js │ │ │ ├── data-source.js │ │ │ ├── inspector-configurator.js │ │ │ └── widget-manager.js │ │ ├── behaviors/ │ │ │ ├── DashController.php │ │ │ └── dashcontroller/ │ │ │ └── partials/ │ │ │ └── _container.php │ │ ├── classes/ │ │ │ ├── CmsDemoTrafficDataGenerator.php │ │ │ ├── CmsReportDataSource.php │ │ │ ├── CmsStatusDataSource.php │ │ │ ├── DashManager.php │ │ │ ├── DashReport.php │ │ │ ├── ReportData.php │ │ │ ├── ReportDataCacheHelper.php │ │ │ ├── ReportDataOrderRule.php │ │ │ ├── ReportDataPaginationParams.php │ │ │ ├── ReportDataQueryBuilder.php │ │ │ ├── ReportDataSourceBase.php │ │ │ ├── ReportDateDataSet.php │ │ │ ├── ReportDimension.php │ │ │ ├── ReportDimensionField.php │ │ │ ├── ReportDimensionFilter.php │ │ │ ├── ReportFetchData.php │ │ │ ├── ReportFetchDataResult.php │ │ │ ├── ReportMetric.php │ │ │ ├── ReportMetricConfiguration.php │ │ │ ├── ReportPeriodCalculator.php │ │ │ ├── ReportQueryBuilder.php │ │ │ ├── ReportWidgetBase.php │ │ │ ├── StaticReportWidgetContainer.php │ │ │ ├── SystemReportDataSource.php │ │ │ ├── TrafficLogger.php │ │ │ ├── VueReportWidgetBase.php │ │ │ ├── dashmanager/ │ │ │ │ ├── HasDataSources.php │ │ │ │ └── HasVueReportWidgets.php │ │ │ └── systemreportdatasource/ │ │ │ └── _warnings.php │ │ ├── composer.json │ │ ├── controllers/ │ │ │ ├── DashboardSettings.php │ │ │ ├── Dashboards.php │ │ │ ├── Index.php │ │ │ ├── dashboards/ │ │ │ │ ├── _form_popup_buttons.php │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ └── index.php │ │ │ ├── dashboardsettings/ │ │ │ │ ├── config_form.yaml │ │ │ │ └── index.php │ │ │ └── index/ │ │ │ ├── _dash_sidenav.php │ │ │ ├── config_dash.yaml │ │ │ └── index.php │ │ ├── database/ │ │ │ └── migrations/ │ │ │ ├── 2025_10_01_000001_Db_Dashboard_Dashboards.php │ │ │ ├── 2025_10_01_000002_Db_Dashboard_Report_Data_Cache.php │ │ │ ├── 2025_10_01_000003_Db_Dashboard_Traffic_Stats_Pageviews.php │ │ │ ├── 2025_10_01_000004_Db_Add_Dashboard_Overrides.php │ │ │ ├── 2025_10_01_000005_Db_Dashboard_Traffic_Stats_Add_Site.php │ │ │ └── 2026_10_01_000006_Db_Dashboard_Roles.php │ │ ├── lang/ │ │ │ ├── ar.json │ │ │ ├── be.json │ │ │ ├── bg.json │ │ │ ├── ca.json │ │ │ ├── cs.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── el.json │ │ │ ├── en/ │ │ │ │ └── client-export.php │ │ │ ├── en.json │ │ │ ├── es.json │ │ │ ├── et.json │ │ │ ├── fa.json │ │ │ ├── fi.json │ │ │ ├── fr.json │ │ │ ├── hu.json │ │ │ ├── id.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── lt.json │ │ │ ├── lv.json │ │ │ ├── nl.json │ │ │ ├── pl.json │ │ │ ├── ro.json │ │ │ ├── ru.json │ │ │ ├── sk.json │ │ │ ├── sl.json │ │ │ ├── sv.json │ │ │ ├── th.json │ │ │ ├── tr.json │ │ │ └── uk.json │ │ ├── models/ │ │ │ ├── Dashboard.php │ │ │ ├── DashboardSetting.php │ │ │ ├── ReportDataCache.php │ │ │ ├── TrafficStatisticsPageview.php │ │ │ ├── dashboard/ │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ └── dashboardsetting/ │ │ │ └── fields.yaml │ │ ├── tests/ │ │ │ └── classes/ │ │ │ ├── DashboardManagerTest.php │ │ │ ├── ReportDataCacheHelperTest.php │ │ │ ├── ReportDataSourceBaseTest.php │ │ │ ├── ReportDateDataSetTest.php │ │ │ ├── ReportPeriodCalculatorTest.php │ │ │ └── ReportQueryBuilderTest.php │ │ ├── vuecomponents/ │ │ │ ├── Dashboard.php │ │ │ └── dashboard/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ ├── _daterangepicker.css │ │ │ │ │ ├── _report-container.css │ │ │ │ │ ├── _row.css │ │ │ │ │ ├── _toolbar.css │ │ │ │ │ ├── _widget-chart.css │ │ │ │ │ ├── _widget-indicator.css │ │ │ │ │ ├── _widget-notice.css │ │ │ │ │ ├── _widget-sectiontitle.css │ │ │ │ │ ├── _widget-static.css │ │ │ │ │ ├── _widget-table.css │ │ │ │ │ ├── _widget.css │ │ │ │ │ └── dashboard.css │ │ │ │ └── js/ │ │ │ │ ├── dashboard-selector.js │ │ │ │ ├── dashboard.js │ │ │ │ ├── interval-selector.js │ │ │ │ ├── report-diff.js │ │ │ │ ├── report-row.js │ │ │ │ ├── report-widget.js │ │ │ │ ├── report.js │ │ │ │ ├── widget-base.js │ │ │ │ ├── widget-chart.js │ │ │ │ ├── widget-error.js │ │ │ │ ├── widget-indicator.js │ │ │ │ ├── widget-section-title.js │ │ │ │ ├── widget-static.js │ │ │ │ ├── widget-table.js │ │ │ │ └── widget-text-notice.js │ │ │ └── partials/ │ │ │ ├── _dashboard-selector.php │ │ │ ├── _dashboard.php │ │ │ ├── _interval-selector.php │ │ │ ├── _report-diff.php │ │ │ ├── _report-row.php │ │ │ ├── _report-widget.php │ │ │ ├── _report.php │ │ │ ├── _widget-chart.php │ │ │ ├── _widget-error.php │ │ │ ├── _widget-indicator.php │ │ │ ├── _widget-section-title.php │ │ │ ├── _widget-static.php │ │ │ ├── _widget-table.php │ │ │ └── _widget-text-notice.php │ │ └── widgets/ │ │ ├── Dash.php │ │ └── dash/ │ │ ├── HasPropertyOptions.php │ │ ├── HasReportWidgets.php │ │ ├── HasWidgetData.php │ │ ├── ReportProcessor.php │ │ ├── assets/ │ │ │ └── js/ │ │ │ ├── classes/ │ │ │ │ └── dash-store.js │ │ │ └── controls/ │ │ │ └── control-dashwidget.js │ │ └── partials/ │ │ └── _dash.php │ ├── editor/ │ │ ├── README.md │ │ ├── ServiceProvider.php │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── editor.css │ │ │ ├── js/ │ │ │ │ ├── editor.command.js │ │ │ │ ├── editor.documenturi.js │ │ │ │ ├── editor.extension.base.js │ │ │ │ ├── editor.extension.documentcomponent.base.js │ │ │ │ ├── editor.extension.documentcontroller.base.js │ │ │ │ ├── editor.extension.filesystemfunctions.js │ │ │ │ ├── editor.page.js │ │ │ │ ├── editor.store.js │ │ │ │ ├── editor.store.tabmanager.js │ │ │ │ └── editor.timeoutpromise.js │ │ │ └── less/ │ │ │ ├── _buttons.less │ │ │ ├── _document.less │ │ │ ├── _layout.less │ │ │ └── editor.less │ │ ├── behaviors/ │ │ │ ├── StateManager.php │ │ │ └── statemanager/ │ │ │ └── inspector-configs.json │ │ ├── classes/ │ │ │ ├── ApiHelpers.php │ │ │ ├── ExtensionBase.php │ │ │ ├── ExtensionManager.php │ │ │ └── NewDocumentDescription.php │ │ ├── composer.json │ │ ├── controllers/ │ │ │ ├── Index.php │ │ │ └── index/ │ │ │ └── index.php │ │ ├── lang/ │ │ │ ├── be.json │ │ │ ├── bg.json │ │ │ ├── ca.json │ │ │ ├── cs.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── el.json │ │ │ ├── en/ │ │ │ │ └── lang.php │ │ │ ├── en.json │ │ │ ├── es-ar.json │ │ │ ├── es.json │ │ │ ├── et.json │ │ │ ├── fa.json │ │ │ ├── fi/ │ │ │ │ └── lang.php │ │ │ ├── fi.json │ │ │ ├── fr/ │ │ │ │ └── lang.php │ │ │ ├── fr.json │ │ │ ├── hu/ │ │ │ │ └── lang.php │ │ │ ├── hu.json │ │ │ ├── id.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── kaa.json │ │ │ ├── kk.json │ │ │ ├── ko.json │ │ │ ├── lt.json │ │ │ ├── lv.json │ │ │ ├── nb-no.json │ │ │ ├── nl/ │ │ │ │ └── lang.php │ │ │ ├── nl.json │ │ │ ├── pl.json │ │ │ ├── pt-br/ │ │ │ │ └── lang.php │ │ │ ├── pt-br.json │ │ │ ├── pt-pt.json │ │ │ ├── ro.json │ │ │ ├── rs.json │ │ │ ├── ru/ │ │ │ │ └── lang.php │ │ │ ├── ru.json │ │ │ ├── sk/ │ │ │ │ └── lang.php │ │ │ ├── sk.json │ │ │ ├── sl.json │ │ │ ├── sv.json │ │ │ ├── th.json │ │ │ ├── tr.json │ │ │ ├── uk.json │ │ │ ├── vn.json │ │ │ ├── zh-cn/ │ │ │ │ └── lang.php │ │ │ ├── zh-cn.json │ │ │ └── zh-tw.json │ │ ├── traits/ │ │ │ └── FileSystemFunctions.php │ │ └── vuecomponents/ │ │ ├── Application.php │ │ ├── DocumentInfoPopup.php │ │ ├── EditorConflictResolver.php │ │ ├── Navigator.php │ │ ├── application/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── application.css │ │ │ │ ├── js/ │ │ │ │ │ └── application.js │ │ │ │ └── less/ │ │ │ │ ├── _splash.less │ │ │ │ └── application.less │ │ │ └── partials/ │ │ │ └── _application.php │ │ ├── documentinfopopup/ │ │ │ ├── assets/ │ │ │ │ └── js/ │ │ │ │ └── documentinfopopup.js │ │ │ └── partials/ │ │ │ └── _documentinfopopup.php │ │ ├── editorconflictresolver/ │ │ │ ├── assets/ │ │ │ │ └── js/ │ │ │ │ └── editorconflictresolver.js │ │ │ └── partials/ │ │ │ └── _editorconflictresolver.php │ │ └── navigator/ │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── navigator.css │ │ │ ├── js/ │ │ │ │ └── navigator.js │ │ │ └── less/ │ │ │ └── navigator.less │ │ └── partials/ │ │ └── _navigator.php │ ├── media/ │ │ ├── ServiceProvider.php │ │ ├── classes/ │ │ │ ├── MediaLibrary.php │ │ │ └── MediaLibraryItem.php │ │ ├── composer.json │ │ ├── controllers/ │ │ │ ├── Index.php │ │ │ └── index/ │ │ │ └── index.php │ │ ├── formwidgets/ │ │ │ ├── MediaFinder.php │ │ │ └── mediafinder/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── mediafinder.css │ │ │ │ └── js/ │ │ │ │ └── mediafinder.js │ │ │ └── partials/ │ │ │ ├── _file_multi.php │ │ │ ├── _file_single.php │ │ │ ├── _folder_single.php │ │ │ ├── _image_multi.php │ │ │ ├── _image_single.php │ │ │ ├── _mediafinder.php │ │ │ ├── _template_file.php │ │ │ └── _template_image.php │ │ ├── helpers/ │ │ │ └── MediaView.php │ │ ├── lang/ │ │ │ ├── be.json │ │ │ ├── bg.json │ │ │ ├── ca.json │ │ │ ├── cs.json │ │ │ ├── da.json │ │ │ ├── de.json │ │ │ ├── el.json │ │ │ ├── en.json │ │ │ ├── es-ar.json │ │ │ ├── es.json │ │ │ ├── et.json │ │ │ ├── fa.json │ │ │ ├── fi.json │ │ │ ├── fr.json │ │ │ ├── hu.json │ │ │ ├── id.json │ │ │ ├── it.json │ │ │ ├── ja.json │ │ │ ├── kaa.json │ │ │ ├── kk.json │ │ │ ├── ko.json │ │ │ ├── lt.json │ │ │ ├── lv.json │ │ │ ├── nb-no.json │ │ │ ├── nl.json │ │ │ ├── pl.json │ │ │ ├── pt-br.json │ │ │ ├── pt-pt.json │ │ │ ├── ro.json │ │ │ ├── rs.json │ │ │ ├── ru.json │ │ │ ├── sk.json │ │ │ ├── sl.json │ │ │ ├── sv.json │ │ │ ├── th.json │ │ │ ├── tr.json │ │ │ ├── uk.json │ │ │ ├── vn.json │ │ │ ├── zh-cn.json │ │ │ └── zh-tw.json │ │ ├── models/ │ │ │ └── MediaLibraryItemImport.php │ │ ├── tests/ │ │ │ ├── classes/ │ │ │ │ ├── MediaLibraryItemTest.php │ │ │ │ └── MediaLibraryTest.php │ │ │ └── fixtures/ │ │ │ └── media/ │ │ │ └── document.txt │ │ ├── twig/ │ │ │ └── Extension.php │ │ └── widgets/ │ │ ├── MediaManager.php │ │ └── mediamanager/ │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── mediamanager.css │ │ │ └── js/ │ │ │ ├── mediamanager.imagecroppopup.js │ │ │ ├── mediamanager.js │ │ │ └── mediamanager.popup.js │ │ └── partials/ │ │ ├── _body.php │ │ ├── _bottom-toolbar.php │ │ ├── _crop-tool-image-area.php │ │ ├── _crop-toolbar.php │ │ ├── _filters.php │ │ ├── _folder-path.php │ │ ├── _folder-toolbar.php │ │ ├── _generic-list.php │ │ ├── _image-crop-popup-body.php │ │ ├── _item-icon.php │ │ ├── _item-list.php │ │ ├── _item-sidebar-preview.php │ │ ├── _left-sidebar.php │ │ ├── _list-grid.php │ │ ├── _list-list.php │ │ ├── _list-tiles.php │ │ ├── _move-form.php │ │ ├── _new-folder-form.php │ │ ├── _popup-body.php │ │ ├── _rename-form.php │ │ ├── _resize-image-form.php │ │ ├── _right-sidebar.php │ │ ├── _sorting.php │ │ ├── _thumbnail-image.php │ │ ├── _toolbar.php │ │ ├── _upload-progress.php │ │ └── _view-mode-buttons.php │ ├── system/ │ │ ├── ServiceProvider.php │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ ├── framework-extras.css │ │ │ │ ├── main.css │ │ │ │ ├── pages/ │ │ │ │ │ ├── eventlogs.css │ │ │ │ │ ├── mailbrandsettings.css │ │ │ │ │ ├── market.css │ │ │ │ │ └── settings.css │ │ │ │ └── styles.css │ │ │ ├── js/ │ │ │ │ ├── foundation.js │ │ │ │ ├── framework-bundle.js │ │ │ │ ├── framework.esm.js │ │ │ │ ├── framework.js │ │ │ │ ├── lang/ │ │ │ │ │ ├── lang.ar.js │ │ │ │ │ ├── lang.be.js │ │ │ │ │ ├── lang.bg.js │ │ │ │ │ ├── lang.ca.js │ │ │ │ │ ├── lang.cs.js │ │ │ │ │ ├── lang.da.js │ │ │ │ │ ├── lang.de.js │ │ │ │ │ ├── lang.el.js │ │ │ │ │ ├── lang.en-au.js │ │ │ │ │ ├── lang.en-ca.js │ │ │ │ │ ├── lang.en-gb.js │ │ │ │ │ ├── lang.en.js │ │ │ │ │ ├── lang.es-ar.js │ │ │ │ │ ├── lang.es.js │ │ │ │ │ ├── lang.et.js │ │ │ │ │ ├── lang.fa.js │ │ │ │ │ ├── lang.fi.js │ │ │ │ │ ├── lang.fr-ca.js │ │ │ │ │ ├── lang.fr.js │ │ │ │ │ ├── lang.hr.js │ │ │ │ │ ├── lang.hu.js │ │ │ │ │ ├── lang.id.js │ │ │ │ │ ├── lang.it.js │ │ │ │ │ ├── lang.ja.js │ │ │ │ │ ├── lang.ko.js │ │ │ │ │ ├── lang.kr.js │ │ │ │ │ ├── lang.lt.js │ │ │ │ │ ├── lang.lv.js │ │ │ │ │ ├── lang.nb-no.js │ │ │ │ │ ├── lang.nl.js │ │ │ │ │ ├── lang.nn-no.js │ │ │ │ │ ├── lang.pl.js │ │ │ │ │ ├── lang.pt-br.js │ │ │ │ │ ├── lang.pt-pt.js │ │ │ │ │ ├── lang.ro.js │ │ │ │ │ ├── lang.ru.js │ │ │ │ │ ├── lang.sk.js │ │ │ │ │ ├── lang.sl.js │ │ │ │ │ ├── lang.stub │ │ │ │ │ ├── lang.sv.js │ │ │ │ │ ├── lang.th.js │ │ │ │ │ ├── lang.tr.js │ │ │ │ │ ├── lang.uk.js │ │ │ │ │ ├── lang.vn.js │ │ │ │ │ ├── lang.zh-cn.js │ │ │ │ │ └── lang.zh-tw.js │ │ │ │ ├── main.js │ │ │ │ ├── pages/ │ │ │ │ │ ├── eventlogs.beautifier.js │ │ │ │ │ ├── eventlogs.beautifier.links.js │ │ │ │ │ ├── mailbrandsettings.js │ │ │ │ │ ├── market.details.js │ │ │ │ │ ├── market.installprocess.js │ │ │ │ │ └── updates.js │ │ │ │ ├── vendor.js │ │ │ │ ├── vue.factory.js │ │ │ │ └── vue.hotkey.js │ │ │ ├── toolbox/ │ │ │ │ ├── controls/ │ │ │ │ │ ├── context-menu/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── context-menu.css │ │ │ │ │ │ └── context-menu.js │ │ │ │ │ ├── custom-select/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── custom-select-control.css │ │ │ │ │ │ ├── custom-select-control.js │ │ │ │ │ │ ├── select.base.css │ │ │ │ │ │ ├── select.control.css │ │ │ │ │ │ ├── select.variants.css │ │ │ │ │ │ └── select.vendor.css │ │ │ │ │ ├── datepicker/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── datepicker.css │ │ │ │ │ │ ├── datepicker.date.css │ │ │ │ │ │ ├── datepicker.js │ │ │ │ │ │ └── datepicker.time.css │ │ │ │ │ ├── input/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── change-monitor-control.js │ │ │ │ │ │ ├── input-hotkey-control.js │ │ │ │ │ │ ├── input-preset-engine.js │ │ │ │ │ │ ├── input-preset.js │ │ │ │ │ │ └── input-trigger-control.js │ │ │ │ │ ├── loader-container/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── loader-container-control.css │ │ │ │ │ │ └── loader-container-control.js │ │ │ │ │ ├── search-input/ │ │ │ │ │ │ ├── README.md │ │ │ │ │ │ ├── search-input-control.css │ │ │ │ │ │ └── search-input-control.js │ │ │ │ │ └── tab/ │ │ │ │ │ ├── README.md │ │ │ │ │ ├── tab-control.css │ │ │ │ │ ├── tab-control.js │ │ │ │ │ ├── tab.base.css │ │ │ │ │ └── tab.variants.css │ │ │ │ ├── elements/ │ │ │ │ │ ├── flag/ │ │ │ │ │ │ └── flag.css │ │ │ │ │ └── timeline/ │ │ │ │ │ ├── README.md │ │ │ │ │ └── timeline.css │ │ │ │ ├── toolbox.css │ │ │ │ └── toolbox.js │ │ │ └── vendor/ │ │ │ ├── bootstrap/ │ │ │ │ ├── bootstrap-lite.css │ │ │ │ ├── bootstrap.css │ │ │ │ ├── bootstrap.esm.js │ │ │ │ └── src/ │ │ │ │ ├── _variables-dark.scss │ │ │ │ ├── _variables.scss │ │ │ │ ├── bootstrap-lite.scss │ │ │ │ └── bootstrap.scss │ │ │ ├── bootstrap-icons/ │ │ │ │ └── bootstrap-icons.css │ │ │ ├── chartjs/ │ │ │ │ ├── chart.esm.js │ │ │ │ └── chartjs-adapter-moment.esm.js │ │ │ ├── clockpicker/ │ │ │ │ ├── css/ │ │ │ │ │ └── jquery-clockpicker.css │ │ │ │ └── js/ │ │ │ │ └── jquery-clockpicker.js │ │ │ ├── dropzone/ │ │ │ │ └── dropzone.esm.js │ │ │ ├── froala/ │ │ │ │ ├── base-styles.css │ │ │ │ ├── froala.css │ │ │ │ ├── froala.js │ │ │ │ └── languages/ │ │ │ │ ├── ar.js │ │ │ │ ├── bs.js │ │ │ │ ├── cs.js │ │ │ │ ├── da.js │ │ │ │ ├── de.js │ │ │ │ ├── el.js │ │ │ │ ├── en_ca.js │ │ │ │ ├── en_gb.js │ │ │ │ ├── es.js │ │ │ │ ├── et.js │ │ │ │ ├── fa.js │ │ │ │ ├── fi.js │ │ │ │ ├── fr.js │ │ │ │ ├── he.js │ │ │ │ ├── hr.js │ │ │ │ ├── hu.js │ │ │ │ ├── id.js │ │ │ │ ├── it.js │ │ │ │ ├── ja.js │ │ │ │ ├── ko.js │ │ │ │ ├── ku.js │ │ │ │ ├── me.js │ │ │ │ ├── nb.js │ │ │ │ ├── nl.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt_br.js │ │ │ │ ├── pt_pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── sk.js │ │ │ │ ├── sl.js │ │ │ │ ├── sr.js │ │ │ │ ├── sv.js │ │ │ │ ├── th.js │ │ │ │ ├── tr.js │ │ │ │ ├── ua.js │ │ │ │ ├── uk.js │ │ │ │ ├── vi.js │ │ │ │ ├── zh_cn.js │ │ │ │ └── zh_tw.js │ │ │ ├── handsontable/ │ │ │ │ ├── handsontable.css │ │ │ │ └── handsontable.js │ │ │ ├── jcrop/ │ │ │ │ ├── MIT-LICENSE.txt │ │ │ │ ├── OCTOBER-README.md │ │ │ │ ├── README.md │ │ │ │ └── js/ │ │ │ │ └── jquery.Jcrop.js │ │ │ ├── js-cookie/ │ │ │ │ └── js.cookie.esm.js │ │ │ ├── larajax/ │ │ │ │ ├── framework-bundle.js │ │ │ │ ├── framework.js │ │ │ │ └── migrate.js │ │ │ ├── mitt/ │ │ │ │ └── mitt.esm.js │ │ │ ├── moment/ │ │ │ │ ├── locale/ │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar-dz.js │ │ │ │ │ ├── ar-kw.js │ │ │ │ │ ├── ar-ly.js │ │ │ │ │ ├── ar-ma.js │ │ │ │ │ ├── ar-ps.js │ │ │ │ │ ├── ar-sa.js │ │ │ │ │ ├── ar-tn.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── be.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── bm.js │ │ │ │ │ ├── bn-bd.js │ │ │ │ │ ├── bn.js │ │ │ │ │ ├── bo.js │ │ │ │ │ ├── br.js │ │ │ │ │ ├── bs.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── cv.js │ │ │ │ │ ├── cy.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de-at.js │ │ │ │ │ ├── de-ch.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── dv.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en-au.js │ │ │ │ │ ├── en-ca.js │ │ │ │ │ ├── en-gb.js │ │ │ │ │ ├── en-ie.js │ │ │ │ │ ├── en-il.js │ │ │ │ │ ├── en-in.js │ │ │ │ │ ├── en-nz.js │ │ │ │ │ ├── en-sg.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es-do.js │ │ │ │ │ ├── es-mx.js │ │ │ │ │ ├── es-us.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fil.js │ │ │ │ │ ├── fo.js │ │ │ │ │ ├── fr-ca.js │ │ │ │ │ ├── fr-ch.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── fy.js │ │ │ │ │ ├── ga.js │ │ │ │ │ ├── gd.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── gom-deva.js │ │ │ │ │ ├── gom-latn.js │ │ │ │ │ ├── gu.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── hy-am.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── it-ch.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── jv.js │ │ │ │ │ ├── ka.js │ │ │ │ │ ├── kk.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── kn.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── ku-kmr.js │ │ │ │ │ ├── ku.js │ │ │ │ │ ├── ky.js │ │ │ │ │ ├── lb.js │ │ │ │ │ ├── lo.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── me.js │ │ │ │ │ ├── mi.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── ml.js │ │ │ │ │ ├── mn.js │ │ │ │ │ ├── mr.js │ │ │ │ │ ├── ms-my.js │ │ │ │ │ ├── ms.js │ │ │ │ │ ├── mt.js │ │ │ │ │ ├── my.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── ne.js │ │ │ │ │ ├── nl-be.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── nn.js │ │ │ │ │ ├── oc-lnc.js │ │ │ │ │ ├── pa-in.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sd.js │ │ │ │ │ ├── se.js │ │ │ │ │ ├── si.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sr-cyrl.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── ss.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── sw.js │ │ │ │ │ ├── ta.js │ │ │ │ │ ├── te.js │ │ │ │ │ ├── tet.js │ │ │ │ │ ├── tg.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tk.js │ │ │ │ │ ├── tl-ph.js │ │ │ │ │ ├── tlh.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── tzl.js │ │ │ │ │ ├── tzm-latn.js │ │ │ │ │ ├── tzm.js │ │ │ │ │ ├── ug-cn.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── ur.js │ │ │ │ │ ├── uz-latn.js │ │ │ │ │ ├── uz.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── x-pseudo.js │ │ │ │ │ ├── yo.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ ├── zh-hk.js │ │ │ │ │ ├── zh-mo.js │ │ │ │ │ └── zh-tw.js │ │ │ │ ├── moment-timezone.esm.js │ │ │ │ └── moment.esm.js │ │ │ ├── mousewheel/ │ │ │ │ └── mousewheel.js │ │ │ ├── october-icons/ │ │ │ │ └── icons.css │ │ │ ├── p-queue/ │ │ │ │ └── p-queue.esm.js │ │ │ ├── phosphor-icons/ │ │ │ │ └── style.css │ │ │ ├── pikaday/ │ │ │ │ ├── README.md │ │ │ │ ├── css/ │ │ │ │ │ └── pikaday.css │ │ │ │ └── js/ │ │ │ │ ├── pikaday.jquery.js │ │ │ │ └── pikaday.js │ │ │ ├── prettify/ │ │ │ │ ├── lang-apollo.js │ │ │ │ ├── lang-basic.js │ │ │ │ ├── lang-clj.js │ │ │ │ ├── lang-css.js │ │ │ │ ├── lang-dart.js │ │ │ │ ├── lang-erlang.js │ │ │ │ ├── lang-go.js │ │ │ │ ├── lang-hs.js │ │ │ │ ├── lang-lisp.js │ │ │ │ ├── lang-llvm.js │ │ │ │ ├── lang-lua.js │ │ │ │ ├── lang-matlab.js │ │ │ │ ├── lang-ml.js │ │ │ │ ├── lang-mumps.js │ │ │ │ ├── lang-n.js │ │ │ │ ├── lang-pascal.js │ │ │ │ ├── lang-proto.js │ │ │ │ ├── lang-r.js │ │ │ │ ├── lang-rd.js │ │ │ │ ├── lang-scala.js │ │ │ │ ├── lang-sql.js │ │ │ │ ├── lang-tcl.js │ │ │ │ ├── lang-tex.js │ │ │ │ ├── lang-vb.js │ │ │ │ ├── lang-vhdl.js │ │ │ │ ├── lang-wiki.js │ │ │ │ ├── lang-xq.js │ │ │ │ ├── lang-yaml.js │ │ │ │ ├── prettify.css │ │ │ │ ├── prettify.js │ │ │ │ ├── run_prettify.js │ │ │ │ └── theme-desert.css │ │ │ ├── select2/ │ │ │ │ ├── css/ │ │ │ │ │ └── select2.less │ │ │ │ └── js/ │ │ │ │ ├── i18n/ │ │ │ │ │ ├── af.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── bn.js │ │ │ │ │ ├── bs.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── cs.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── dsb.js │ │ │ │ │ ├── el.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── eo.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── hsb.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── hy.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── ka.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── lt.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── ms.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── ne.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── pa.js │ │ │ │ │ ├── pl.js │ │ │ │ │ ├── ps.js │ │ │ │ │ ├── pt-br.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── ru.js │ │ │ │ │ ├── sk.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── sr-cyrl.js │ │ │ │ │ ├── sr.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── te.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── tk.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── uk.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── zh-cn.js │ │ │ │ │ └── zh-tw.js │ │ │ │ └── select2.full.js │ │ │ ├── sortablejs/ │ │ │ │ └── sortable.esm.js │ │ │ ├── syntaxhighlighter/ │ │ │ │ ├── LGPL-LICENSE │ │ │ │ ├── MIT-LICENSE │ │ │ │ ├── scripts/ │ │ │ │ │ ├── shAutoloader.js │ │ │ │ │ ├── shBrushPhp.js │ │ │ │ │ ├── shBrushPlain.js │ │ │ │ │ ├── shBrushXml.js │ │ │ │ │ └── shCore.js │ │ │ │ └── styles/ │ │ │ │ ├── shCore.css │ │ │ │ └── shCoreDefault.css │ │ │ ├── vue/ │ │ │ │ └── vue.esm.js │ │ │ ├── vue-router/ │ │ │ │ └── vue-router.esm.js │ │ │ └── waterfall/ │ │ │ └── jquery.waterfall.js │ │ ├── behaviors/ │ │ │ └── SettingsModel.php │ │ ├── build-util.js │ │ ├── build.js │ │ ├── classes/ │ │ │ ├── AppBase.php │ │ │ ├── CombineAssets.php │ │ │ ├── DependencyResolver.php │ │ │ ├── DriverBehavior.php │ │ │ ├── ErrorHandler.php │ │ │ ├── MailManager.php │ │ │ ├── ManifestCache.php │ │ │ ├── MarkupExtensionItem.php │ │ │ ├── MarkupManager.php │ │ │ ├── ModelBehavior.php │ │ │ ├── PagerElement.php │ │ │ ├── PluginBase.php │ │ │ ├── PluginManager.php │ │ │ ├── PresetManager.php │ │ │ ├── ProductDetail.php │ │ │ ├── RateLimiter.php │ │ │ ├── ResizeImageItem.php │ │ │ ├── ResizeImages.php │ │ │ ├── SettingsManager.php │ │ │ ├── SettingsMenuItem.php │ │ │ ├── SiteCollection.php │ │ │ ├── SiteManager.php │ │ │ ├── SystemController.php │ │ │ ├── UiElement.php │ │ │ ├── UiFactory.php │ │ │ ├── UpdateManager.php │ │ │ ├── VersionManager.php │ │ │ ├── ViewComponent.php │ │ │ ├── presetmanager/ │ │ │ │ ├── Dates.php │ │ │ │ ├── Icons.php │ │ │ │ ├── Locales.php │ │ │ │ ├── icons-bootstrap.json │ │ │ │ ├── icons-phosphor.json │ │ │ │ └── icons.json │ │ │ ├── sitemanager/ │ │ │ │ ├── HasActiveSite.php │ │ │ │ ├── HasEditSite.php │ │ │ │ ├── HasPreferredLanguage.php │ │ │ │ └── HasSiteContext.php │ │ │ ├── uifactory/ │ │ │ │ ├── HasButtons.php │ │ │ │ ├── HasInputs.php │ │ │ │ └── migrate/ │ │ │ │ ├── AjaxButton.php │ │ │ │ ├── Button.php │ │ │ │ ├── Callout.php │ │ │ │ └── PopupButton.php │ │ │ └── updatemanager/ │ │ │ ├── HasGatewayAccess.php │ │ │ ├── ManagesApp.php │ │ │ ├── ManagesModules.php │ │ │ ├── ManagesPlugins.php │ │ │ ├── ManagesProject.php │ │ │ └── ManagesThemes.php │ │ ├── composer.json │ │ ├── console/ │ │ │ ├── ComposerScript.php │ │ │ ├── OctoberAbout.php │ │ │ ├── OctoberDown.php │ │ │ ├── OctoberFresh.php │ │ │ ├── OctoberMigrate.php │ │ │ ├── OctoberMirror.php │ │ │ ├── OctoberOptimize.php │ │ │ ├── OctoberPasswd.php │ │ │ ├── OctoberUp.php │ │ │ ├── OctoberUpdate.php │ │ │ ├── OctoberUtil.php │ │ │ ├── OctoberUtilCommands.php │ │ │ ├── OctoberUtilPackageDocs.php │ │ │ ├── OctoberUtilPatches.php │ │ │ ├── OctoberUtilRefitLang.php │ │ │ ├── PluginCheck.php │ │ │ ├── PluginDisable.php │ │ │ ├── PluginEnable.php │ │ │ ├── PluginInstall.php │ │ │ ├── PluginList.php │ │ │ ├── PluginRefresh.php │ │ │ ├── PluginRemove.php │ │ │ ├── PluginSeed.php │ │ │ ├── PluginTest.php │ │ │ └── ProjectSync.php │ │ ├── controllers/ │ │ │ ├── EventLogs.php │ │ │ ├── MailBrandSettings.php │ │ │ ├── MailLayouts.php │ │ │ ├── MailPartials.php │ │ │ ├── MailTemplates.php │ │ │ ├── Market.php │ │ │ ├── RequestLogs.php │ │ │ ├── Settings.php │ │ │ ├── SiteGroups.php │ │ │ ├── Sites.php │ │ │ ├── Updates.php │ │ │ ├── eventlogs/ │ │ │ │ ├── _field_message.php │ │ │ │ ├── _hint.php │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── _message_column.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ ├── index.php │ │ │ │ └── preview.php │ │ │ ├── mailbrandsettings/ │ │ │ │ ├── _field_mail_preview.php │ │ │ │ ├── _form_buttons.php │ │ │ │ ├── config_form.yaml │ │ │ │ └── index.php │ │ │ ├── maillayouts/ │ │ │ │ ├── config_form.yaml │ │ │ │ ├── create.php │ │ │ │ └── update.php │ │ │ ├── mailpartials/ │ │ │ │ ├── config_form.yaml │ │ │ │ ├── create.php │ │ │ │ └── update.php │ │ │ ├── mailtemplates/ │ │ │ │ ├── _list_layouts_toolbar.php │ │ │ │ ├── _list_partials_toolbar.php │ │ │ │ ├── _list_templates_toolbar.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_layouts_list.yaml │ │ │ │ ├── config_partials_list.yaml │ │ │ │ ├── config_templates_list.yaml │ │ │ │ ├── create.php │ │ │ │ ├── index.php │ │ │ │ └── update.php │ │ │ ├── market/ │ │ │ │ ├── _details_scoreboard.php │ │ │ │ ├── _details_toolbar.php │ │ │ │ ├── _install_plugins.php │ │ │ │ ├── _install_recommended.php │ │ │ │ ├── _install_themes.php │ │ │ │ ├── _manage_project.php │ │ │ │ ├── _pagination.php │ │ │ │ ├── index.php │ │ │ │ ├── plugin.php │ │ │ │ └── theme.php │ │ │ ├── requestlogs/ │ │ │ │ ├── _hint.php │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── _referer_field.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ ├── index.php │ │ │ │ └── preview.php │ │ │ ├── settings/ │ │ │ │ ├── index.php │ │ │ │ └── update.php │ │ │ ├── sitegroups/ │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ ├── create.php │ │ │ │ ├── index.php │ │ │ │ └── update.php │ │ │ ├── sites/ │ │ │ │ ├── _form_buttons.php │ │ │ │ ├── _list_container.php │ │ │ │ ├── _list_tabs.php │ │ │ │ ├── _list_toolbar.php │ │ │ │ ├── config_form.yaml │ │ │ │ ├── config_list.yaml │ │ │ │ ├── create.php │ │ │ │ ├── index.php │ │ │ │ └── update.php │ │ │ └── updates/ │ │ │ ├── HasComposerEditor.php │ │ │ ├── _column_code.php │ │ │ ├── _column_is_enabled.php │ │ │ ├── _column_latest.php │ │ │ ├── _column_version.php │ │ │ ├── _composer_form.php │ │ │ ├── _list_manage_toolbar.php │ │ │ ├── _list_toolbar.php │ │ │ ├── _project_form.php │ │ │ ├── config_list.yaml │ │ │ ├── config_manage_list.yaml │ │ │ ├── index.php │ │ │ └── manage.php │ │ ├── database/ │ │ │ ├── migrations/ │ │ │ │ ├── 2013_10_01_000001_Db_Deferred_Bindings.php │ │ │ │ ├── 2013_10_01_000002_Db_System_Files.php │ │ │ │ ├── 2013_10_01_000003_Db_System_Plugin_Versions.php │ │ │ │ ├── 2013_10_01_000004_Db_System_Plugin_History.php │ │ │ │ ├── 2013_10_01_000005_Db_System_Settings.php │ │ │ │ ├── 2013_10_01_000006_Db_System_Parameters.php │ │ │ │ ├── 2013_10_01_000008_Db_System_Mail_Templates.php │ │ │ │ ├── 2013_10_01_000009_Db_System_Mail_Layouts.php │ │ │ │ ├── 2014_10_01_000010_Db_Jobs.php │ │ │ │ ├── 2014_10_01_000011_Db_System_Event_Logs.php │ │ │ │ ├── 2014_10_01_000012_Db_System_Request_Logs.php │ │ │ │ ├── 2014_10_01_000013_Db_System_Sessions.php │ │ │ │ ├── 2015_10_01_000016_Db_Cache.php │ │ │ │ ├── 2015_10_01_000017_Db_System_Revisions.php │ │ │ │ ├── 2015_10_01_000018_Db_FailedJobs.php │ │ │ │ ├── 2017_10_01_000023_Db_System_Mail_Partials.php │ │ │ │ ├── 2021_10_01_000025_Db_Add_Pivot_Data_To_Deferred_Bindings.php │ │ │ │ ├── 2022_10_01_000026_Db_System_Site_Definitions.php │ │ │ │ ├── 2023_10_01_000027_Db_Add_Site_To_Settings.php │ │ │ │ ├── 2023_10_01_000028_Db_Add_Restrict_Roles_To_Sites.php │ │ │ │ ├── 2023_10_01_000029_Db_System_Site_Groups.php │ │ │ │ ├── 2023_10_01_000030_Db_Add_Group_To_Sites.php │ │ │ │ ├── 2024_10_01_000031_Db_Add_Sort_Order_To_Deferred_Bindings.php │ │ │ │ ├── 2024_10_01_000032_Db_Add_Fallback_Locale_To_Sites.php │ │ │ │ ├── 2026_10_01_000033_Db_System_Translate_Attributes.php │ │ │ │ ├── 2026_10_01_000034_Db_Add_Site_Group_To_Settings.php │ │ │ │ └── 2026_10_01_000035_Db_System_Plugin_Site_Groups.php │ │ │ └── seeds/ │ │ │ ├── DatabaseSeeder.php │ │ │ ├── SeedArtisanAutoexec.php │ │ │ ├── SeedSetBuildNumber.php │ │ │ ├── SeedSetupMailLayouts.php │ │ │ └── SeedSetupPrimarySite.php │ │ ├── facades/ │ │ │ ├── Manifest.php │ │ │ ├── System.php │ │ │ └── Ui.php │ │ ├── helpers/ │ │ │ ├── Cache.php │ │ │ ├── DateTime.php │ │ │ ├── DateTimeHelper.php │ │ │ ├── LocaleHelper.php │ │ │ ├── Preset.php │ │ │ ├── System.php │ │ │ └── View.php │ │ ├── lang/ │ │ │ ├── ar/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── ar.json │ │ │ ├── be/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── be.json │ │ │ ├── bg/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── bg.json │ │ │ ├── ca/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── ca.json │ │ │ ├── cs/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── cs.json │ │ │ ├── da/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── da.json │ │ │ ├── de/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── de.json │ │ │ ├── el/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── el.json │ │ │ ├── en/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── en.json │ │ │ ├── es/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── es-ar/ │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── es-ar.json │ │ │ ├── es.json │ │ │ ├── et/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── et.json │ │ │ ├── fa/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── fa.json │ │ │ ├── fi/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── fi.json │ │ │ ├── fr/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── fr.json │ │ │ ├── hu/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── hu.json │ │ │ ├── id/ │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── id.json │ │ │ ├── it/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── it.json │ │ │ ├── ja/ │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── ja.json │ │ │ ├── kaa.json │ │ │ ├── kk.json │ │ │ ├── ko/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── ko.json │ │ │ ├── lt/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── lt.json │ │ │ ├── lv/ │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── lv.json │ │ │ ├── nb-no/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── nb-no.json │ │ │ ├── nl/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── nl.json │ │ │ ├── pl/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── pl.json │ │ │ ├── pt-br/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── pt-br.json │ │ │ ├── pt-pt/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── pt-pt.json │ │ │ ├── ro/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── ro.json │ │ │ ├── rs/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── rs.json │ │ │ ├── ru/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── ru.json │ │ │ ├── sk/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── sk.json │ │ │ ├── sl/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── sl.json │ │ │ ├── sv/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── sv.json │ │ │ ├── th/ │ │ │ │ ├── client.php │ │ │ │ └── lang.php │ │ │ ├── th.json │ │ │ ├── tr/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── tr.json │ │ │ ├── uk/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── uk.json │ │ │ ├── vn/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── vn.json │ │ │ ├── zh-cn/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ ├── zh-cn.json │ │ │ ├── zh-tw/ │ │ │ │ ├── client.php │ │ │ │ ├── lang.php │ │ │ │ └── validation.php │ │ │ └── zh-tw.json │ │ ├── middleware/ │ │ │ └── ActiveSite.php │ │ ├── models/ │ │ │ ├── EventLog.php │ │ │ ├── File.php │ │ │ ├── LogSetting.php │ │ │ ├── MailBrandSetting.php │ │ │ ├── MailLayout.php │ │ │ ├── MailPartial.php │ │ │ ├── MailSetting.php │ │ │ ├── MailTemplate.php │ │ │ ├── Parameter.php │ │ │ ├── PluginSiteGroup.php │ │ │ ├── PluginVersion.php │ │ │ ├── RequestLog.php │ │ │ ├── Revision.php │ │ │ ├── SettingModel.php │ │ │ ├── SiteDefinition.php │ │ │ ├── SiteGroup.php │ │ │ ├── TranslateAttribute.php │ │ │ ├── eventlog/ │ │ │ │ ├── columns.yaml │ │ │ │ ├── fields.yaml │ │ │ │ └── scopes.yaml │ │ │ ├── file/ │ │ │ │ └── fields.yaml │ │ │ ├── logsetting/ │ │ │ │ └── fields.yaml │ │ │ ├── mailbrandsetting/ │ │ │ │ ├── custom.less │ │ │ │ ├── fields.yaml │ │ │ │ └── sample_template.htm │ │ │ ├── maillayout/ │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ ├── mailpartial/ │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ ├── mailsetting/ │ │ │ │ ├── _drivers_hint.php │ │ │ │ └── fields.yaml │ │ │ ├── mailtemplate/ │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ ├── pluginversion/ │ │ │ │ ├── HasDisabledContext.php │ │ │ │ ├── columns.yaml │ │ │ │ └── columns_manage.yaml │ │ │ ├── requestlog/ │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ ├── settingmodel/ │ │ │ │ ├── HasMultisite.php │ │ │ │ └── HasMultisiteGroup.php │ │ │ ├── sitedefinition/ │ │ │ │ ├── HasModelAttributes.php │ │ │ │ ├── _column_name.php │ │ │ │ ├── columns.yaml │ │ │ │ └── fields.yaml │ │ │ └── sitegroup/ │ │ │ ├── columns.yaml │ │ │ └── fields.yaml │ │ ├── package.json │ │ ├── partials/ │ │ │ ├── _settings_menu.php │ │ │ ├── _settings_menu_items.php │ │ │ ├── _settings_menu_toolbar.php │ │ │ └── _system_sidebar.php │ │ ├── reportwidgets/ │ │ │ ├── Status.php │ │ │ └── status/ │ │ │ └── partials/ │ │ │ ├── _warnings_form.php │ │ │ └── _widget.php │ │ ├── routes.php │ │ ├── tests/ │ │ │ ├── PluginTestCase.php │ │ │ ├── TestCase.php │ │ │ ├── bootstrap.php │ │ │ ├── classes/ │ │ │ │ ├── ChangelogWidgetTest.php │ │ │ │ ├── CoreLangTest.php │ │ │ │ ├── DependencyResolverTest.php │ │ │ │ ├── MarkupExtensionItemTest.php │ │ │ │ ├── PluginManagerTest.php │ │ │ │ ├── SiteManagerTest.php │ │ │ │ └── VersionManagerTest.php │ │ │ ├── concerns/ │ │ │ │ ├── InteractsWithAuthentication.php │ │ │ │ ├── PerformsMigrations.php │ │ │ │ └── PerformsRegistrations.php │ │ │ ├── database/ │ │ │ │ ├── AttachManyModelTest.php │ │ │ │ ├── AttachOneModelTest.php │ │ │ │ ├── BelongsToManyModelTest.php │ │ │ │ ├── BelongsToModelTest.php │ │ │ │ ├── DeferredBindingTest.php │ │ │ │ ├── DoubleMorphTest.php │ │ │ │ ├── HasManyModelTest.php │ │ │ │ ├── HasManyThroughModelTest.php │ │ │ │ ├── HasOneModelTest.php │ │ │ │ ├── HasOneThroughModelTest.php │ │ │ │ ├── ModelTest.php │ │ │ │ ├── MorphManyModelTest.php │ │ │ │ ├── MorphOneModelTest.php │ │ │ │ ├── MorphToModelTest.php │ │ │ │ ├── NestedTreeModelTest.php │ │ │ │ ├── NullableModelTest.php │ │ │ │ ├── RevisionableModelTest.php │ │ │ │ ├── SimpleTreeModelTest.php │ │ │ │ ├── SluggableModelTest.php │ │ │ │ ├── SoftDeleteModelTest.php │ │ │ │ └── ValidationModelTest.php │ │ │ ├── fixtures/ │ │ │ │ └── plugins/ │ │ │ │ ├── database/ │ │ │ │ │ └── tester/ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ ├── blueprints/ │ │ │ │ │ │ ├── author.yaml │ │ │ │ │ │ ├── category.yaml │ │ │ │ │ │ ├── post-content.yaml │ │ │ │ │ │ └── post.yaml │ │ │ │ │ ├── models/ │ │ │ │ │ │ ├── Author.php │ │ │ │ │ │ ├── Category.php │ │ │ │ │ │ ├── Country.php │ │ │ │ │ │ ├── EventLog.php │ │ │ │ │ │ ├── Meta.php │ │ │ │ │ │ ├── Phone.php │ │ │ │ │ │ ├── Post.php │ │ │ │ │ │ ├── Product.php │ │ │ │ │ │ ├── Role.php │ │ │ │ │ │ ├── Tag.php │ │ │ │ │ │ └── User.php │ │ │ │ │ └── updates/ │ │ │ │ │ ├── create_authors_table.php │ │ │ │ │ ├── create_categories_table.php │ │ │ │ │ ├── create_countries_table.php │ │ │ │ │ ├── create_double_join_table.php │ │ │ │ │ ├── create_event_log_table.php │ │ │ │ │ ├── create_meta_table.php │ │ │ │ │ ├── create_phones_table.php │ │ │ │ │ ├── create_posts_table.php │ │ │ │ │ ├── create_products_table.php │ │ │ │ │ ├── create_roles_table.php │ │ │ │ │ ├── create_tags_table.php │ │ │ │ │ ├── create_users_table.php │ │ │ │ │ └── version.yaml │ │ │ │ ├── dependencytest/ │ │ │ │ │ ├── dependency/ │ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ │ └── updates/ │ │ │ │ │ │ └── version.yaml │ │ │ │ │ ├── found/ │ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ │ └── updates/ │ │ │ │ │ │ └── version.yaml │ │ │ │ │ ├── notfound/ │ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ │ └── updates/ │ │ │ │ │ │ └── version.yaml │ │ │ │ │ └── wrongcase/ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ └── updates/ │ │ │ │ │ └── version.yaml │ │ │ │ ├── october/ │ │ │ │ │ ├── noupdates/ │ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ │ └── updates/ │ │ │ │ │ │ └── version.yaml │ │ │ │ │ ├── sample/ │ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ │ └── updates/ │ │ │ │ │ │ └── version.yaml │ │ │ │ │ └── tester/ │ │ │ │ │ ├── Plugin.php │ │ │ │ │ ├── classes/ │ │ │ │ │ │ └── Users.php │ │ │ │ │ ├── components/ │ │ │ │ │ │ ├── Archive.php │ │ │ │ │ │ ├── Categories.php │ │ │ │ │ │ ├── Comments.php │ │ │ │ │ │ ├── ContentBlock.php │ │ │ │ │ │ ├── MainMenu.php │ │ │ │ │ │ ├── Post.php │ │ │ │ │ │ ├── mainmenu/ │ │ │ │ │ │ │ ├── default.htm │ │ │ │ │ │ │ └── items.htm │ │ │ │ │ │ └── post/ │ │ │ │ │ │ └── default.htm │ │ │ │ │ ├── formwidgets/ │ │ │ │ │ │ └── Preview.php │ │ │ │ │ └── updates/ │ │ │ │ │ ├── create_blog_settings_table.php │ │ │ │ │ ├── create_comments_table.php │ │ │ │ │ └── version.yaml │ │ │ │ └── testvendor/ │ │ │ │ └── test/ │ │ │ │ ├── Plugin.php │ │ │ │ └── formwidgets/ │ │ │ │ └── Sample.php │ │ │ ├── helpers/ │ │ │ │ └── SystemTest.php │ │ │ └── traits/ │ │ │ └── AssetMakerTest.php │ │ ├── traits/ │ │ │ ├── AssetMaker.php │ │ │ ├── ConfigMaker.php │ │ │ ├── DependencyMaker.php │ │ │ ├── ElementRenderer.php │ │ │ ├── EventEmitter.php │ │ │ ├── KeyCodeModel.php │ │ │ ├── NoteMaker.php │ │ │ ├── PropertyContainer.php │ │ │ ├── ResponseMaker.php │ │ │ ├── SecurityController.php │ │ │ └── ViewMaker.php │ │ ├── twig/ │ │ │ ├── Engine.php │ │ │ ├── Extension.php │ │ │ ├── GetAttrAdjuster.php │ │ │ ├── Loader.php │ │ │ ├── SecurityPolicy.php │ │ │ ├── SecurityPolicyLegacy.php │ │ │ ├── node/ │ │ │ │ ├── GetAttrNode.php │ │ │ │ └── MailPartialNode.php │ │ │ └── tokenparser/ │ │ │ └── MailPartialTokenParser.php │ │ ├── views/ │ │ │ ├── 404.php │ │ │ ├── error.php │ │ │ ├── exception.php │ │ │ ├── mail/ │ │ │ │ ├── layout-default.htm │ │ │ │ ├── layout-system.htm │ │ │ │ ├── partial-button.htm │ │ │ │ ├── partial-footer.htm │ │ │ │ ├── partial-header.htm │ │ │ │ ├── partial-panel.htm │ │ │ │ ├── partial-promotion.htm │ │ │ │ ├── partial-subcopy.htm │ │ │ │ └── partial-table.htm │ │ │ ├── maintenance.php │ │ │ ├── pagination/ │ │ │ │ ├── ajax.htm │ │ │ │ ├── default.htm │ │ │ │ └── simple.htm │ │ │ └── ui/ │ │ │ ├── button/ │ │ │ │ ├── _hotkey.php │ │ │ │ ├── ajax-button.php │ │ │ │ ├── dropdown-button.php │ │ │ │ ├── dropdown-divider.php │ │ │ │ ├── dropdown-item.php │ │ │ │ ├── icon-button.php │ │ │ │ └── popup-button.php │ │ │ ├── button.php │ │ │ └── input/ │ │ │ └── search-input.php │ │ └── widgets/ │ │ ├── Changelog.php │ │ ├── Updater.php │ │ ├── changelog/ │ │ │ ├── assets/ │ │ │ │ ├── css/ │ │ │ │ │ └── changelog.css │ │ │ │ └── less/ │ │ │ │ └── changelog.less │ │ │ └── partials/ │ │ │ ├── _plugin_list.php │ │ │ └── _system_list.php │ │ └── updater/ │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── updater.css │ │ │ ├── js/ │ │ │ │ └── updater.js │ │ │ └── less/ │ │ │ └── updater.less │ │ ├── fields-theme-check.yaml │ │ └── partials/ │ │ ├── _execute.php │ │ ├── _license_form.php │ │ ├── _plugin_form.php │ │ ├── _require_form.php │ │ ├── _theme_check_form.php │ │ ├── _theme_form.php │ │ ├── _update_form.php │ │ └── _update_list.php │ └── tailor/ │ ├── ServiceProvider.php │ ├── assets/ │ │ ├── css/ │ │ │ └── tailor.css │ │ └── js/ │ │ ├── blueprint-yaml-schema.json │ │ ├── preview-tracker.js │ │ ├── tailor.editor.extension.documentcomponent.base.js │ │ ├── tailor.editor.extension.documentcontroller.blueprint.js │ │ ├── tailor.editor.extension.documentcontroller.theme-blueprint.js │ │ ├── tailor.editor.extension.js │ │ ├── vue-entry-document.js │ │ └── vue-entry-header-controls.js │ ├── behaviors/ │ │ ├── DraftController.php │ │ ├── PreviewController.php │ │ └── VersionController.php │ ├── classes/ │ │ ├── Blueprint.php │ │ ├── BlueprintCollection.php │ │ ├── BlueprintErrorData.php │ │ ├── BlueprintException.php │ │ ├── BlueprintIndexer.php │ │ ├── BlueprintModel.php │ │ ├── BlueprintVerifier.php │ │ ├── ComponentVariable.php │ │ ├── ContentFieldBase.php │ │ ├── EditorExtension.php │ │ ├── FieldManager.php │ │ ├── Fieldset.php │ │ ├── NavigationItem.php │ │ ├── PermissionItem.php │ │ ├── PresenceVerifier.php │ │ ├── RecordIndexer.php │ │ ├── SchemaBuilder.php │ │ ├── SchemaPruner.php │ │ ├── ThemeBlueprint.php │ │ ├── blueprint/ │ │ │ ├── EntryBlueprint.php │ │ │ ├── GlobalBlueprint.php │ │ │ ├── HasDatasources.php │ │ │ ├── MixinBlueprint.php │ │ │ ├── SingleBlueprint.php │ │ │ ├── StreamBlueprint.php │ │ │ └── StructureBlueprint.php │ │ ├── blueprintindexer/ │ │ │ ├── FieldsetIndex.php │ │ │ ├── GlobalIndex.php │ │ │ ├── MixinIndex.php │ │ │ ├── NavigationRegistry.php │ │ │ ├── PageManagerRegistry.php │ │ │ ├── PermissionRegistry.php │ │ │ └── SectionIndex.php │ │ ├── editorextension/ │ │ │ ├── HasExtensionCrud.php │ │ │ ├── HasExtensionState.php │ │ │ └── templates/ │ │ │ ├── entry.yaml │ │ │ ├── global.yaml │ │ │ ├── mixin.yaml │ │ │ ├── single.yaml │ │ │ ├── stream.yaml │ │ │ └── structure.yaml │ │ ├── relations/ │ │ │ ├── CustomFieldHasManyRelation.php │ │ │ ├── CustomFieldHasOneRelation.php │ │ │ ├── CustomMultiJoinRelation.php │ │ │ └── CustomNestedJoinRelation.php │ │ ├── schemabuilder/ │ │ │ ├── HasCommonColumns.php │ │ │ ├── HasJoinTable.php │ │ │ ├── HasRepeaterTable.php │ │ │ ├── HasStreamColumns.php │ │ │ ├── HasStructureColumns.php │ │ │ └── HasTablePatches.php │ │ └── scopes/ │ │ ├── DraftableScope.php │ │ ├── EntryRecordScope.php │ │ ├── GlobalRecordScope.php │ │ ├── SingleRecordScope.php │ │ ├── StreamRecordScope.php │ │ ├── StructureRecordScope.php │ │ └── VersionableScope.php │ ├── components/ │ │ ├── CollectionComponent.php │ │ ├── GlobalComponent.php │ │ ├── SectionComponent.php │ │ ├── collectioncomponent/ │ │ │ └── default.htm │ │ └── sectioncomponent/ │ │ └── default.htm │ ├── composer.json │ ├── console/ │ │ ├── TailorMigrate.php │ │ ├── TailorPropagate.php │ │ ├── TailorPrune.php │ │ └── TailorRefresh.php │ ├── contentfields/ │ │ ├── DataTableField.php │ │ ├── DatePickerField.php │ │ ├── EntriesField.php │ │ ├── FallbackField.php │ │ ├── FileUploadField.php │ │ ├── GenericField.php │ │ ├── MarkdownField.php │ │ ├── MediaFinderField.php │ │ ├── MixinField.php │ │ ├── NestedFormField.php │ │ ├── NestedItemsField.php │ │ ├── NumberField.php │ │ ├── PageFinderField.php │ │ ├── RecordFinderField.php │ │ ├── RepeaterField.php │ │ ├── RichEditorField.php │ │ ├── TagListField.php │ │ └── entriesfield/ │ │ └── partials/ │ │ ├── _column_multi.php │ │ └── _column_single.php │ ├── controllers/ │ │ ├── BulkActions.php │ │ ├── Entries.php │ │ ├── Globals.php │ │ ├── bulkactions/ │ │ │ ├── config_import_export.yaml │ │ │ ├── export.php │ │ │ └── import.php │ │ ├── entries/ │ │ │ ├── _edit.php │ │ │ ├── _edit_header_controls.php │ │ │ ├── _edit_popup.php │ │ │ ├── _form_draft_notes.php │ │ │ ├── _form_history_links.php │ │ │ ├── _list_bulk_actions.php │ │ │ ├── _list_toolbar.php │ │ │ ├── _primary_tabs.php │ │ │ ├── _relation_manage_form.php │ │ │ ├── config_form.yaml │ │ │ ├── config_list.yaml │ │ │ ├── create.php │ │ │ ├── index.php │ │ │ ├── update.php │ │ │ └── version.php │ │ └── globals/ │ │ ├── config_form.yaml │ │ └── index.php │ ├── database/ │ │ └── migrations/ │ │ ├── 2021_05_01_000001_Db_Tailor_Globals.php │ │ ├── 2021_05_01_000002_Db_Tailor_Content.php │ │ ├── 2021_06_01_000003_Db_Tailor_PreviewToken.php │ │ ├── 2023_10_01_000004_Db_Tailor_Content_Joins.php │ │ └── 2024_10_01_000005_Db_Add_Parent_To_Repeaters.php │ ├── lang/ │ │ ├── ar.json │ │ ├── be.json │ │ ├── bg.json │ │ ├── ca.json │ │ ├── cs.json │ │ ├── da.json │ │ ├── de/ │ │ │ └── lang.php │ │ ├── de.json │ │ ├── el.json │ │ ├── en/ │ │ │ └── lang.php │ │ ├── en.json │ │ ├── es.json │ │ ├── et.json │ │ ├── fa.json │ │ ├── fi/ │ │ │ └── lang.php │ │ ├── fi.json │ │ ├── fr/ │ │ │ └── lang.php │ │ ├── fr.json │ │ ├── hu.json │ │ ├── id.json │ │ ├── it.json │ │ ├── ja.json │ │ ├── kaa.json │ │ ├── kk.json │ │ ├── ko.json │ │ ├── lt.json │ │ ├── lv.json │ │ ├── nb-no.json │ │ ├── nl/ │ │ │ └── lang.php │ │ ├── nl.json │ │ ├── pl.json │ │ ├── pt-br/ │ │ │ └── lang.php │ │ ├── pt-br.json │ │ ├── pt-pt.json │ │ ├── ro.json │ │ ├── rs.json │ │ ├── ru/ │ │ │ └── lang.php │ │ ├── ru.json │ │ ├── sk.json │ │ ├── sl.json │ │ ├── sv.json │ │ ├── th.json │ │ ├── tr.json │ │ ├── uk.json │ │ ├── vn.json │ │ ├── zh-cn/ │ │ │ └── lang.php │ │ ├── zh-cn.json │ │ └── zh-tw.json │ ├── models/ │ │ ├── ContentSchema.php │ │ ├── EntryRecord.php │ │ ├── GlobalRecord.php │ │ ├── NestedFormItem.php │ │ ├── PreviewToken.php │ │ ├── RecordExport.php │ │ ├── RecordImport.php │ │ ├── RepeaterItem.php │ │ ├── SingleRecord.php │ │ ├── StreamRecord.php │ │ ├── StructureRecord.php │ │ ├── entryrecord/ │ │ │ ├── HasCoreModifiers.php │ │ │ ├── HasDuplication.php │ │ │ ├── HasEntryBlueprint.php │ │ │ └── HasStatusScopes.php │ │ └── globalrecord/ │ │ └── HasGlobalBlueprint.php │ ├── tests/ │ │ ├── classes/ │ │ │ ├── BlueprintIndexerTest.php │ │ │ └── BlueprintTest.php │ │ ├── database/ │ │ │ └── EntriesFieldModelTest.php │ │ └── fixtures/ │ │ └── blueprints/ │ │ ├── blog/ │ │ │ ├── authors.yaml │ │ │ ├── categories.yaml │ │ │ ├── comments.stub │ │ │ ├── config.yaml │ │ │ ├── post-content.yaml │ │ │ └── posts.yaml │ │ ├── landing/ │ │ │ ├── blockbuilder/ │ │ │ │ ├── call-to-action.yaml │ │ │ │ ├── carousel.yaml │ │ │ │ ├── common.yaml │ │ │ │ ├── compare-table.yaml │ │ │ │ ├── feature-table.yaml │ │ │ │ ├── featurette.yaml │ │ │ │ ├── headline-items.yaml │ │ │ │ ├── headline.yaml │ │ │ │ └── pricing-table.yaml │ │ │ ├── blockbuilder.yaml │ │ │ └── landing-page.yaml │ │ ├── october-test/ │ │ │ ├── collections/ │ │ │ │ └── basic.yaml │ │ │ ├── globals/ │ │ │ │ └── basic.yaml │ │ │ ├── mixins/ │ │ │ │ ├── collection-field.yaml │ │ │ │ └── entry-field.yaml │ │ │ └── sections/ │ │ │ ├── feed-basic.yaml │ │ │ ├── solo-basic.yaml │ │ │ └── tree-basic.yaml │ │ └── wiki/ │ │ └── wiki.yaml │ ├── traits/ │ │ ├── BlueprintModel.php │ │ ├── BlueprintRelationModel.php │ │ ├── DeferredContentModel.php │ │ ├── DraftableModel.php │ │ ├── NestedTreeModel.php │ │ └── VersionableModel.php │ └── vuecomponents/ │ ├── BlueprintEditor.php │ ├── DraftNotes.php │ ├── PublishButton.php │ ├── PublishingControls.php │ ├── blueprinteditor/ │ │ ├── assets/ │ │ │ └── js/ │ │ │ └── blueprinteditor.js │ │ └── partials/ │ │ └── _blueprinteditor.php │ ├── draftnotes/ │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── draftnotes.css │ │ │ └── js/ │ │ │ └── draftnotes.js │ │ └── partials/ │ │ └── _draftnotes.php │ ├── publishbutton/ │ │ ├── assets/ │ │ │ ├── css/ │ │ │ │ └── publishbutton.css │ │ │ └── js/ │ │ │ └── publishbutton.js │ │ └── partials/ │ │ └── _publishbutton.php │ └── publishingcontrols/ │ ├── assets/ │ │ ├── css/ │ │ │ └── publishingcontrols.css │ │ └── js/ │ │ ├── domtools.js │ │ └── publishingcontrols.js │ └── partials/ │ └── _publishingcontrols.php ├── package.json ├── phpcs.xml ├── phpunit.xml ├── plugins/ │ └── october/ │ └── demo/ │ ├── Plugin.php │ ├── components/ │ │ ├── BackendLink.php │ │ ├── Todo.php │ │ └── todo/ │ │ ├── default.htm │ │ └── list.htm │ ├── composer.json │ └── updates/ │ └── version.yaml ├── storage/ │ ├── .gitignore │ ├── app/ │ │ ├── .gitignore │ │ ├── media/ │ │ │ └── .gitignore │ │ ├── resources/ │ │ │ └── .gitignore │ │ └── uploads/ │ │ ├── .gitignore │ │ └── public/ │ │ └── .gitignore │ ├── cms/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── combiner/ │ │ │ └── .gitignore │ │ └── twig/ │ │ └── .gitignore │ ├── framework/ │ │ ├── .gitignore │ │ ├── cache/ │ │ │ └── .gitignore │ │ ├── sessions/ │ │ │ └── .gitignore │ │ └── views/ │ │ └── .gitignore │ ├── logs/ │ │ └── .gitignore │ └── temp/ │ ├── .gitignore │ └── public/ │ └── .gitignore ├── tests/ │ ├── README.md │ └── bootstrap.php ├── themes/ │ └── demo/ │ ├── .gitignore │ ├── README.md │ ├── assets/ │ │ ├── css/ │ │ │ ├── blocks/ │ │ │ │ ├── hero-image.css │ │ │ │ ├── scoreboard-metrics.css │ │ │ │ └── team-leaders.css │ │ │ ├── controls/ │ │ │ │ ├── card-slider.css │ │ │ │ ├── gallery-slider.css │ │ │ │ └── quantity-input.css │ │ │ ├── elements/ │ │ │ │ ├── buttons.css │ │ │ │ ├── card.css │ │ │ │ ├── code.css │ │ │ │ ├── footer.css │ │ │ │ ├── form.css │ │ │ │ ├── how-its-made.css │ │ │ │ ├── jumbotron.css │ │ │ │ ├── lists.css │ │ │ │ ├── modals.css │ │ │ │ ├── nav.css │ │ │ │ ├── navbar.css │ │ │ │ ├── pagination.css │ │ │ │ ├── popover.css │ │ │ │ ├── social-links.css │ │ │ │ ├── text.css │ │ │ │ └── user-panel.css │ │ │ ├── layouts/ │ │ │ │ ├── blog.css │ │ │ │ ├── default.css │ │ │ │ ├── home.css │ │ │ │ └── wiki.css │ │ │ ├── pages/ │ │ │ │ ├── 404.css │ │ │ │ ├── ajax.css │ │ │ │ ├── components.css │ │ │ │ ├── contact.css │ │ │ │ └── index.css │ │ │ ├── theme/ │ │ │ │ ├── common.css │ │ │ │ └── variables.css │ │ │ ├── theme.css │ │ │ └── vendor.css │ │ ├── js/ │ │ │ ├── app.js │ │ │ ├── blocks/ │ │ │ │ └── team-leaders.js │ │ │ └── controls/ │ │ │ ├── alert-dialog.js │ │ │ ├── card-slider.js │ │ │ ├── gallery-slider.js │ │ │ ├── password-dialog.js │ │ │ └── quantity-input.js │ │ └── vendor/ │ │ ├── bootstrap/ │ │ │ ├── bootstrap.css │ │ │ ├── bootstrap.js │ │ │ ├── bootstrap.min.js.LICENSE.txt │ │ │ └── bootstrap.scss │ │ ├── bootstrap-icons/ │ │ │ ├── bootstrap-icons.css │ │ │ └── bootstrap-icons.scss │ │ ├── codeblocks/ │ │ │ └── codeblocks.js │ │ ├── photoswipe/ │ │ │ ├── LICENSE.txt │ │ │ └── photoswipe.css │ │ ├── photoswipe-dynamic-caption-plugin/ │ │ │ ├── LICENSE.txt │ │ │ ├── photoswipe-dynamic-caption-plugin.css │ │ │ └── photoswipe-dynamic-caption-plugin.esm.js │ │ └── slick-carousel/ │ │ ├── config.rb │ │ ├── slick-theme.css │ │ ├── slick-theme.less │ │ ├── slick-theme.scss │ │ ├── slick.css │ │ ├── slick.js │ │ ├── slick.less │ │ └── slick.scss │ ├── blueprints/ │ │ ├── blog/ │ │ │ ├── author.yaml │ │ │ ├── category.yaml │ │ │ ├── config.yaml │ │ │ └── post.yaml │ │ ├── fields/ │ │ │ ├── _blocks.yaml │ │ │ ├── _blog_content.yaml │ │ │ ├── _social_links.yaml │ │ │ └── blocks/ │ │ │ ├── _detailed-block.yaml │ │ │ ├── _image-slice.yaml │ │ │ ├── _paragraph-block.yaml │ │ │ ├── _scoreboard-metrics.yaml │ │ │ └── _team-leaders.yaml │ │ ├── pages/ │ │ │ ├── about.yaml │ │ │ └── article.yaml │ │ └── site/ │ │ ├── menus/ │ │ │ ├── _menu_item.yaml │ │ │ └── _sitemap_item.yaml │ │ └── menus.yaml │ ├── composer.json │ ├── content/ │ │ └── ajax/ │ │ ├── calcresult.txt │ │ ├── form.txt │ │ └── handler.txt │ ├── esbuild.config.js │ ├── layouts/ │ │ ├── blog.htm │ │ ├── default.htm │ │ ├── external.htm │ │ ├── home.htm │ │ └── wiki.htm │ ├── package.json │ ├── pages/ │ │ ├── 404.htm │ │ ├── about.htm │ │ ├── ajax.htm │ │ ├── blog/ │ │ │ ├── archive.htm │ │ │ ├── author.htm │ │ │ ├── category.htm │ │ │ ├── index.htm │ │ │ ├── post.htm │ │ │ ├── rss.htm │ │ │ └── search.htm │ │ ├── components.htm │ │ ├── contact.htm │ │ ├── error.htm │ │ ├── index.htm │ │ ├── sitemap.htm │ │ └── wiki/ │ │ ├── article.htm │ │ ├── index.htm │ │ └── search.htm │ ├── partials/ │ │ ├── about/ │ │ │ └── contact-form.htm │ │ ├── blocks/ │ │ │ ├── detailed-block.htm │ │ │ ├── image-slice.htm │ │ │ ├── paragraph-block.htm │ │ │ ├── scoreboard-metrics.htm │ │ │ └── team-leaders.htm │ │ ├── blog/ │ │ │ ├── comment-form.htm │ │ │ ├── comment-list.htm │ │ │ ├── post-card.htm │ │ │ └── sidebar.htm │ │ ├── calcresult.htm │ │ ├── controls/ │ │ │ └── gallery-slider.htm │ │ ├── elements/ │ │ │ ├── share-button.htm │ │ │ ├── social-links.htm │ │ │ ├── user-panel-author.htm │ │ │ ├── user-panel-team.htm │ │ │ └── user-panel.htm │ │ ├── site/ │ │ │ ├── flash-messages.htm │ │ │ ├── footer.htm │ │ │ ├── head/ │ │ │ │ ├── analytics-code.htm │ │ │ │ ├── head-links.htm │ │ │ │ ├── head-meta.htm │ │ │ │ └── head-scripts.htm │ │ │ ├── header.htm │ │ │ ├── helpers/ │ │ │ │ ├── random-avatar-image.htm │ │ │ │ └── random-stock-image.htm │ │ │ ├── how-its-made.htm │ │ │ ├── modals/ │ │ │ │ ├── ajax-modal.htm │ │ │ │ ├── alert-dialog.htm │ │ │ │ └── password-dialog.htm │ │ │ ├── nav-footer.htm │ │ │ ├── nav-links.htm │ │ │ └── nav-mobile.htm │ │ └── wiki/ │ │ ├── article-toc.htm │ │ ├── breadcrumb.htm │ │ ├── continue.htm │ │ ├── sidebar-toc.htm │ │ └── sidebar.htm │ ├── seeds/ │ │ ├── data/ │ │ │ ├── blog/ │ │ │ │ ├── author.json │ │ │ │ ├── category.json │ │ │ │ └── post.json │ │ │ ├── pages/ │ │ │ │ ├── about.json │ │ │ │ └── article.json │ │ │ └── site/ │ │ │ └── menus.json │ │ └── data.yaml │ └── theme.yaml ├── webpack.config.js ├── webpack.helpers.js └── webpack.mix.js ================================================ FILE CONTENTS ================================================ ================================================ FILE: .babelrc ================================================ { "presets": ["@babel/preset-env"], "plugins": [ [ "module-resolver", { "root": ["."], "alias": { "helpers": "./tests/js/helpers" } } ] ] } ================================================ FILE: .editorconfig ================================================ # EditorConfig is awesome: http://EditorConfig.org # top-most EditorConfig file root = true [*] end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true indent_style = space indent_size = 4 ================================================ FILE: .gitattributes ================================================ * text=auto ================================================ FILE: .gitignore ================================================ # Common composer.phar .DS_Store .vite .claude .idea .env .env.*.php .env.php auth.json php_errors.log nginx-error.log nginx-access.log nginx-ssl.access.log nginx-ssl.error.log php-errors.log sftp-config.json .ftpconfig .vscode/ selenium.php composer.lock package-lock.json /node_modules /modules/system/node_modules _ide_helper.php .phpunit.result.cache nbproject .phpstorm.meta.php # Project /bootstrap/compiled.php /vendor /vendor_drm ================================================ FILE: .htaccess ================================================ Options -MultiViews RewriteEngine On ## ## You may need to uncomment the following line for some hosting environments, ## if you have installed to a subdirectory, enter the name here also. ## # RewriteBase / ## ## Uncomment following lines to force HTTPS. ## # RewriteCond %{HTTPS} off # RewriteRule (.*) https://%{SERVER_NAME}/$1 [L,R=301] ## ## Uncomment to redirect trailing slashes in URLs. ## # RewriteCond %{REQUEST_FILENAME} !-d # RewriteRule ^(.*)/$ /$1 [L,R=301] ## ## Uncomment to redirect /index.php/path to /path ## # RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/index\.php\s # RewriteRule ^index\.php$ / [R=301,L] # RewriteRule ^index\.php/(.*)$ /$1 [L,R=301] ## ## Handle Authorization Header ## RewriteCond %{HTTP:Authorization} . RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] ## ## Blocked folders ## RewriteRule ^bootstrap/.* index.php [L,NC] RewriteRule ^config/.* index.php [L,NC] RewriteRule ^vendor/.* index.php [L,NC] RewriteRule ^storage/cms/.* index.php [L,NC] RewriteRule ^storage/logs/.* index.php [L,NC] RewriteRule ^storage/framework/.* index.php [L,NC] RewriteRule ^storage/temp/protected/.* index.php [L,NC] RewriteRule ^storage/app/uploads/protected/.* index.php [L,NC] ## ## Allowed folders ## RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} !/.well-known/* RewriteCond %{REQUEST_FILENAME} !/app/(assets|resources)/.* RewriteCond %{REQUEST_FILENAME} !/storage/app/media/.* RewriteCond %{REQUEST_FILENAME} !/storage/app/resources/.* RewriteCond %{REQUEST_FILENAME} !/storage/app/uploads/public/.* RewriteCond %{REQUEST_FILENAME} !/storage/temp/public/.* RewriteCond %{REQUEST_FILENAME} !/themes/.*/(assets|resources)/.* RewriteCond %{REQUEST_FILENAME} !/plugins/.*/(assets|resources)/.* RewriteCond %{REQUEST_FILENAME} !/modules/.*/(assets|resources)/.* RewriteRule !^index.php index.php [L,NC] ## ## Block all PHP files, except index ## RewriteCond %{REQUEST_FILENAME} -f RewriteCond %{REQUEST_FILENAME} \.php$ RewriteRule !^index.php index.php [L,NC] ## ## Standard routes ## RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.php [L] ================================================ FILE: .jshintrc ================================================ { "esversion": 6, "curly": true, "asi": true } ================================================ FILE: CHANGELOG.md ================================================ View the changelog on the [October CMS website](https://octobercms.com/changelog) ================================================ FILE: LICENSE.md ================================================ Copyright (c) 2013-2022 Responsiv Pty Ltd This End User License Agreement (“EULA”) constitutes a binding agreement between you (the “Licensee”, “you” or “your”) and Responsiv Pty Ltd - ACN 159 492 823 (the “Company”, “we”, “us” or “our”) with respect to your use of the October CMS software (“Licensed Software” or “October CMS Software”). The Company and the Licensee are each individually referred to as “Party” and collectively as “Parties”. Please carefully read the terms and conditions of this EULA before installing and using the Licensed Software. By using the Licensed Software, you represent that you have read this EULA, and you agree to be bound by all the terms and conditions of this EULA, including any other agreements and policies referenced in this EULA. If you do not agree with any provisions of this EULA, please do not install the October CMS Software. The Company reserves the right to modify or discontinue the October CMS Software or any portion thereof, temporarily or permanently, with or without notice to you. The Company will not be under any obligation to support or update the Licensed Software, except as described in this EULA. YOU AGREE THAT THE COMPANY SHALL NOT BE LIABLE TO YOU OR ANY THIRD PARTY IN THE EVENT THAT WE EXERCISE OUR RIGHT TO MODIFY OR DISCONTINUE THE LICENSED SOFTWARE OR ANY PORTION THEREOF. ## Summary This section outlines some of the key provisions covered in this EULA. Please note that this summary is provided for your convenience only, and it does not relieve you of your obligation to read the full EULA before installing/using the October CMS Software. By proceeding to use the October CMS Software, you understand and agree that: - You must be at least 18 years of age to enter into this EULA; - You will only use the October CMS Software in compliance with applicable laws; - October CMS Software licenses are only issued for Projects created through the website. To acquire/renew your Project licence, you need to sign in to your October CMS Account, and select/create the Project for which you wish to acquire/renew the licence; - You will be responsible for paying the full License Fee prior to installing the October CMS Software; - All License Fee Payments are non-refundable; - Upon full payment of the License Fee, you will receive a License Key that allows you to install the Licensed Software to create a single production or non-production website and ancillary installations needed to support that single production or non-production website; - Each new/renewed Project licence comes with one year of Updates. You may continue to use your expired Project license in perpetuity, but if you wish to continue receiving all the Updates, you will be required to keep your Project licence active by renewing it every year; - Subject to the payment of full License Fee and compliance with this EULA, the Company and its third party licensors grant you a limited, non-exclusive, non-transferable, non-assignable, perpetual and worldwide license to install and/or use the October CMS Software; - The Company and its licensors retain all rights, title and interest in the October CMS Software, Documentation and other similar proprietary materials made available to you; - You will not sublicense, resell, distribute, or transfer the Licensed Software to any third party without the Company’s prior written consent; - You will not remove, obscure or otherwise modify any copyright notices from the October CMS Software files or this EULA; - You will not modify, disassemble, or reverse engineer any part of the October CMS Software; - You will take all required steps to prevent unauthorised installation/use of the October CMS Software and prevent any breach of this EULA; - The Company may terminate this EULA if you are in breach of any provision of this EULA or if we discontinue the October CMS Software; - SUBJECT TO YOUR STATUTORY RIGHTS, THE COMPANY PROVIDES THE OCTOBER CMS SOFTWARE TO YOU “AS IS” AND “WITH ALL FAULTS”. THE COMPANY DOES NOT OFFER ANY WARRANTIES, WHETHER EXPRESS OR IMPLIED. IN NO EVENT WILL THE COMPANY’S AGGREGATE LIABILITY TO YOU FOR ANY CLAIMS CONNECTED WITH THIS EULA OR THE OCTOBER CMS SOFTWARE EXCEED THE AMOUNT ACTUALLY PAID BY YOU TO THE COMPANY FOR THE OCTOBER CMS SOFTWARE IN THE TWELVE MONTHS PRECEDING THE DATE WHEN THE CLAIM FIRST AROSE; - This EULA shall be governed by and construed in accordance with the laws of the state of New South Wales, Australia, without giving effect to any principles of conflict of laws. ## Table of Contents - [1. Definitions](#Definitions) - [2. Authorisation](#Authorisation) - [3. License Grant](#License-Grant) - [4. License Purchase and Renewal](#License-Purchase-and-Renewal) - [5. License Fees, Payments and Refunds](#License-Fees-Payments-and-Refunds) - [6. Ownership](#Ownership) - [7. Use and Restrictions](#Use-and-Restrictions) - [8. Technical Support](#Technical-Support) - [9. Termination](#Termination) - [10. Statutory Consumer Rights](#Statutory-Consumer-Rights) - [11. Disclaimer of Warranties](#Disclaimer-of-Warranties) - [12. Limitation of Liability](#Limitation-of-Liability) - [13. Waiver](#Waiver) - [14. Indemnification](#Indemnification) - [15. Compliance with the Laws](#Compliance-with-the-Laws) - [16. Data Protection](#Data-Protection) - [17. Delivery](#Delivery) - [18. General](#General) ## 1. Definitions The following words shall have the meaning given hereunder whenever they appear in this EULA: Term | Definition ---- | ----------- Account | refers to a user account registered on the Website by an individual or entity. Active Term | means the period commencing from the date of License purchase/renewal until the License expiry date as specified on the Project page in your Account. Documentation | means the current version of the documentation relating to the October CMS Software available at https://docs.octobercms.com or otherwise made available by the Company in electronic format. Documentation includes but is not limited to installation instructions, user guides and help documents regarding the use of the October CMS Software. License Fee | means the fee payable by the Licensee for the use of the October CMS Software in accordance with the provisions of this EULA and any other applicable agreements referenced in this EULA. License Key | means a unique string of characters provided by the Company that enables users to install the October CMS Software for a specific Project. Modifications | means any changes to the original code or files of the October CMS Software by the Licensee or any third party. For the avoidance of any doubt, the term “Modifications” does not include any Updates furnished by the Company. October CMS Software | refers to the collection of proprietary code and graphics in various file formats provided by the Company to the Licensee. Project | means a collection of extensions and themes to be used in a single production website. Updates | means all new releases of the October CMS Software, including but not limited to new features and fixes which are provided by the Company to a Licensee during the Active Term of the License. The Website | refers to the Company website located at www.octobercms.com. ## 2. Authorisation You must be at least 18 years of age and have the legal capacity to enter into this EULA. If you are accepting this EULA on behalf of a corporation, organisation, or other legal entity (‘corporate entity’), you warrant that you have the authority to enter into this EULA on behalf of such corporate entity and to bind the former to this EULA. ## 3. License Grant Subject to your compliance with all the terms and conditions of this EULA and the payment of the full License Fee, the Company and its third party licensors grant you a limited, non-exclusive, non-transferable, non-assignable, perpetual and worldwide license to install and/or use the October CMS Software. You shall be solely responsible for ensuring that all your authorised employees, contractors or other users of the Licensed Software comply with all the terms and conditions of this EULA, and any failure to comply with this EULA will be deemed as a breach of this EULA by you. The Company and its third party licensors may make changes to the Licensed Software, which are provided to you through Updates. You will only receive all such Updates during the Active Term of your license. You will not have any right to receive Updates after the expiration of your license. Please note that if you terminate your Account, you will not be able to access your Projects and renew your license/receive any future Updates. UNLESS EXPRESSLY PROVIDED IN THIS EULA, YOU MAY NOT COPY OR MODIFY THE OCTOBER CMS SOFTWARE. ## 4. License Purchase and Renewal October CMS Software licenses are only issued for Projects created through the Website. To acquire a new Project licence or to renew an existing Project licence, you must sign in to your October CMS Account and select/create the Project for which you wish to acquire/renew the licence. Upon full payment of the License Fee, you will receive a License Key that allows you to install the Licensed Software to create a single production or non-production website and ancillary installations needed to support that single production or non-production website. Each new/renewed Project licence comes with one year of Updates starting from the date on which you pay the License Fee. You are not under any legal obligation to renew your Project licence, and you can continue to use your expired Project license for your website in perpetuity. Please note that expired Project licenses do not receive any Updates. If you wish to continue receiving all the Updates, you will be required to keep your Project licence active by renewing it every year. By installing and using the October CMS Software, you assume full responsibility for your selection of the Licensed Software, its installation, and the results obtained from the use of the October CMS Software. ## 5. License Fees, Payments and Refunds The current License Fee for the October CMS Software is published on the Website, and the amount is specified in United States Dollars (USD). The License fee as specified on the Website does not include any taxes which shall be payable by the Licensee in addition to the License Fee. The License fee becomes due and payable in full at the time the Licensee purchases a new Project license or renews an existing Project license. All Project licenses are issued/renewed subject to the payment of the License Fee by the Licensee as outlined in Section 7 of our [Website Terms of Use](https://octobercms.com/help/terms/website#fees-payments-refunds-policy) and incorporated into this EULA by reference. The Company reserves the right to refuse issuance of a new Project license or renewal of an existing license until the Company receives the full payment. To the extent permitted by law, all License Fee payments are non-refundable. ## 6. Ownership Nothing in this EULA constitutes the sale of October CMS Software to you. The Company and its licensors retain all rights, title and interest in the October CMS Software, Documentation and other similar proprietary materials made available to you (collectively “Proprietary Material”). All Proprietary Material is protected by copyright and other intellectual property laws of Australia and international conventions. You acknowledge that the October CMS Software may contain some open source software that is not owned by the Company and which shall be governed by its own license terms. Except where authorised by the Company in writing, any use of the October CMS trademark, trade name, or logo is strictly prohibited. The Company reserves all rights that are not expressly granted in and to the Proprietary Material. ## 7. Use and Restrictions You hereby agree that: 1. A License Key may only be used to create a single production or non-production website as provided in Section 4 (License Purchase and Renewal) of this EULA. If you wish to create another website, you will need to create a new Project and acquire a new License for that Project; 2. Unless expressly provided otherwise in this EULA or other applicable agreements referenced herein, you will not sublicense, resell, distribute, or transfer the Licensed Software to any third party without the Company’s prior written consent; 3. You will not remove, obscure or otherwise modify any copyright notices from the October CMS Software files or this EULA; 4. You will not modify, disassemble, or reverse engineer any part of the October CMS Software; 5. You will take all required steps to prevent unauthorised installation/use of the October CMS Software and prevent any breach of this EULA; 6. You do not receive any rights, interests or titles in the “October CMS” trademark, trade name or service mark (“Marks”), and you will not use any of these Marks without our express consent. ## 8. Technical Support The Company does not offer any technical support except as described in our Premium Support Policy. The Company reserves the right to deny any and all technical support for any Modifications of the October CMS Software or in the event of any breach of this EULA. ## 9. Termination This EULA shall remain effective until terminated by either Party as described below. ### 9.1 Termination by Licensee You may terminate this EULA by uninstalling the October CMS Software and deleting all files and your Account. Please note that once you delete your Account, you will not be able to reactivate it to restore your Projects and access your License Key. ### 9.2 Termination by the Company The Company may terminate this EULA if you are in breach of any provision of this EULA or if we discontinue the October CMS Software. ### 9.3 Survival Section 11 (Disclaimer of Warranties), Section 12 (Limitation of Liability), Section 13 (Waiver), Section 14 (Indemnification) and other sections of this EULA that by their nature are intended to survive the termination of this EULA shall survive. Unless expressly specified otherwise in this EULA, any termination of this EULA either by you or the Company does not create any obligation on the Company to issue a full or partial refund of the License Fee paid by you. ## 10. Statutory Consumer Rights ### 10.1 CONSUMERS IN AUSTRALIA If you acquire the October CMS Software license as a “consumer”, nothing in this EULA will exclude, limit or modify any rights and guarantees conferred on you by legislation, including the Australian Consumer Law (ACL) in the Competition and Consumer Act 2010 (Cth) (‘Statutory Rights’). If the Company is in breach of any such Statutory Rights, then the Company’s liability shall be limited (at the Company’s option) to: 10.1.1 In case of products supplied to you, to resupplying, replacing or paying the cost of resupplying or replacing the product in respect of which the breach occurred; 10.1.2 In case of services supplied to you, to resupply the service or to pay the cost of resupplying the service in respect of which the breach occurred. Unless expressly specified otherwise in this EULA, you agree that the Company’s liability for the October CMS Software is governed solely by this EULA and the Australian Consumer Law. ### 10.1 CONSUMERS OUTSIDE OF AUSTRALIA If you are deemed a “consumer” by statutory law in your country of residence, you may enjoy some legal rights under your local law which prohibit the exclusions, modification or limitations of certain liabilities from applying to you, and where such prohibition exists in your country of residence, any such limitations or exclusions will only apply to you to the extent it is permitted by your local law. You agree that apart from the application of your statutory consumer rights, the Company’s liability for the October CMS Software is governed solely by this EULA. ## 11. Disclaimer of Warranties SUBJECT TO YOUR STATUTORY RIGHTS AS PROVIDED IN SECTION 10 ABOVE, THE COMPANY PROVIDES THE OCTOBER CMS SOFTWARE TO YOU “AS IS” AND “WITH ALL FAULTS”. EXCLUDING ANY EXPRESS WARRANTIES OFFERED IN THIS EULA, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE COMPANY, ITS EMPLOYEES, DIRECTORS, CONTRACTORS, AFFILIATES (“THE COMPANY AND ITS OFFICERS”) DISCLAIM ANY EXPRESS OR IMPLIED WARRANTIES WITH RESPECT TO THE OCTOBER CMS SOFTWARE, INCLUDING WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, ACCURACY, RELIABILITY, COURSE OF PERFORMANCE OR USAGE IN TRADE. THE COMPANY DOES NOT WARRANT THAT THE OCTOBER CMS SOFTWARE: WILL MEET YOUR REQUIREMENTS; WILL BE UNINTERRUPTED, ERROR-FREE, OR SECURE; OR THAT THE COMPANY WILL BE ABLE TO RECTIFY ANY ERRORS, BUGS, SECURITY VULNERABILITIES. NO OBLIGATION, WARRANTIES OR LIABILITY SHALL ARISE OUT OF ANY TECHNICAL SUPPORT SERVICES PROVIDED BY THE COMPANY AND ITS OFFICERS IN CONNECTION WITH THE OCTOBER CMS SOFTWARE. NO VERBAL OR WRITTEN COMMUNICATION RECEIVED FROM THE COMPANY AND ITS OFFICERS, WHETHER MARKETING, PROMOTIONAL OR TECHNICAL SUPPORT, SHALL CREATE ANY WARRANTIES THAT ARE NOT EXPRESSLY PROVIDED IN THIS EULA. ALTHOUGH THE COMPANY PERIODICALLY RELEASES UPDATES FOR THE OCTOBER CMS SOFTWARE THAT MAY INCLUDE FIXES FOR KNOWN VULNERABILITIES, YOU ACKNOWLEDGE AND AGREE THAT THERE MAY BE VULNERABILITIES THAT THE COMPANY HAS NOT YET IDENTIFIED AND THEREFORE CANNOT ADDRESS. YOU ACKNOWLEDGE AND AGREE THAT YOU ARE SOLELY RESPONSIBLE FOR TAKING ALL THE PRECAUTIONS AND SAFEGUARDS NECESSARY TO PROTECT YOUR WEBSITE AND DATA FROM ANY EXTERNAL ATTACKS, INCLUDING BUT NOT LIMITED TO KEEPING YOUR OCTOBER CMS SOFTWARE INSTALLATION CURRENT AND UP TO DATE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY NOT APPLY TO YOU. ## 12. Limitation of Liability IN NO EVENT SHALL THE COMPANY BE LIABLE TO YOU OR ANY THIRD-PARTY FOR ANY LOSS OF REVENUE, LOSS OF PROFITS (ACTUAL OR ANTICIPATED), LOSS OF SAVINGS (ACTUAL OR ANTICIPATED), LOSS OF OPPORTUNITY, LOSS OF REPUTATION, LOSS OF GOODWILL OR FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES RESULTING FROM THE INSTALLATION, USE OR INABILITY TO USE THE OCTOBER CMS SOFTWARE, WHETHER ARISING FROM ANY BREACH OF CONTRACT, NEGLIGENCE OR ANY OTHER THEORY OF LIABILITY, EVEN IF THE COMPANY WAS PREVIOUSLY ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. THE LICENSEE SHALL BE SOLELY RESPONSIBLE FOR DETERMINING THE SUITABILITY OF THE LICENSED SOFTWARE AND ALL RISKS ASSOCIATED WITH ITS USE. IN NO EVENT WILL THE COMPANY’S AGGREGATE LIABILITY TO YOU FOR ANY CLAIMS CONNECTED WITH THIS EULA OR THE OCTOBER CMS SOFTWARE, INCLUDING THOSE ARISING FROM ANY BREACH OF CONTRACT OR NEGLIGENCE, EXCEED THE AMOUNT ACTUALLY PAID BY YOU TO THE COMPANY FOR THE OCTOBER CMS SOFTWARE IN THE TWELVE MONTHS PRECEDING THE DATE WHEN THE CLAIM FIRST AROSE. NOTWITHSTANDING ANYTHING TO THE FOREGOING, NOTHING IN THIS PROVISION SHALL LIMIT EITHER PARTY’S LIABILITY FOR ANY FRAUD OR LIABILITY THAT CANNOT BE LIMITED BY LAW. ## 13. Waiver YOU HEREBY RELEASE THE COMPANY AND ITS OFFICERS FROM ALL UNKNOWN RISKS ARISING OUT OF OR ASSOCIATED WITH THE USE OF THE OCTOBER CMS SOFTWARE. IF YOU ARE A RESIDENT IN THE STATE OF CALIFORNIA, U.S.A., YOU EXPRESSLY WAIVE CALIFORNIA CIVIL CODE SECTION 1542, OR OTHER SIMILAR LAW APPLICABLE TO YOU, WHICH STATES: “A GENERAL RELEASE DOES NOT EXTEND TO CLAIMS WHICH THE CREDITOR DOES NOT KNOW OR SUSPECT TO EXIST IN HIS OR HER FAVOR AT THE TIME OF EXECUTING THE RELEASE, WHICH IF KNOWN BY HIM OR HER MUST HAVE MATERIALLY AFFECTED HIS OR HER SETTLEMENT WITH THE DEBTOR OR RELEASED PARTY. ” **YOU ACKNOWLEDGE AND AGREE THAT THE LIMITATION OF LIABILITY AND THE WAIVER SET FORTH ABOVE REFLECT A REASONABLE AND FAIR ALLOCATION OF RISK BETWEEN YOU AND THE COMPANY AND THAT THESE PROVISIONS FORM AN ESSENTIAL BASIS OF THE BARGAIN BETWEEN YOU AND THE COMPANY. THE COMPANY WOULD NOT BE ABLE TO PROVIDE THE OCTOBER CMS SOFTWARE TO YOU ON AN ECONOMICALLY REASONABLE BASIS WITHOUT THESE LIMITATIONS.** ## 14. Indemnification 14.1 The Company will defend or settle any claims against you that allege that the October CMS Software as supplied to you for installation and use in accordance with this EULA and Documentation infringes the intellectual property rights of a third party provided that: 14.1.1 You immediately notify the Company of any such claim that relates to this indemnity; 14.1.2 The Company has the sole right to control the defence or settlement of such claim; and 14.1.3 You provide the Company with all reasonable assistance in relation to the defence. 14.2 For any claims of infringement of intellectual property mentioned in Section 14.1, the Company reserves the right to: 14.2.1 Modify or replace the Licensed Software to make it non-infringing provided such modification or replacement does not substantively change the functionality of the Licensed Software; or 14.2.2 Acquire at its own expense the right for you to continue the use of the Licensed Software; or 14.2.3 Terminate the Project license and direct you to cease the use of the Licensed Software. In such cases, the Company will provide you with a full refund of the License Fees paid by you for the Licensed Software in the preceding 12 months. Please note that where the Company directs you to cease the use of the October CMS Software due to a third party claim of infringement, you are under a legal obligation to immediately cease such use. Unless otherwise provided by law, this Section 14 sets out your exclusive remedies for any infringement of intellectual property claims made by a third party against you and nothing in this EULA will create any obligations on the Company to offer greater indemnity. The Company does not have any obligation to defend or indemnify any other third party. 14.3 The Company shall not have any obligation to indemnify you if: 14.3.1 The infringement arises out of any Modification of the October CMS Software; 14.3.2 The infringement arises from any combination, operation, or use of the Licensed Software with any other third party software; 14.3.3 The infringement arises from the use of the Licensed Software in breach of this EULA; 14.3.4 The infringement arises from the use of the Licensed Software after the Company has informed you to cease the use of the Licensed Software due to possible claims. 14.4 You will indemnify the Company against any third party claims, damages, losses and costs, including reasonable attorney fees arising from: 14.4.1 Your actions or omissions (actual or alleged), including without limitation, claims that your actions or omission infringe any third party’s intellectual property rights; or 14.4.2 Your violation of any applicable laws; or 14.4.3 Your breach of this EULA. ## 15. Compliance with the Laws You will only install/use the October CMS Software and fulfil all your obligations under this EULA in compliance with all applicable laws. You hereby confirm that neither you nor the corporate entity that you represent is subject or target of any government Sanctions, and your use of the October CMS Software would not result in violation of any Sanctions by the Company. You further confirm that the Licensed Software will not be used by any individual or entity engaged in any of the following activities: (i) Terrorist activities; (ii) design, development or production of any weapons of mass destruction; or (iii) any other illegal activity. ## 16. Data Protection The Company only collects minimal personal data from the Licensee, as described in our Privacy Policy. The Company does not process any data on behalf of the Licensee, and the Licensee shall be solely responsible for compliance with applicable data protection laws for any data it controls or processes. ## 17. Delivery The Company will deliver the October CMS Software and this EULA to you by electronic download. ## 18. General ### 18.1 Amendments The Company reserves the right to amend the terms and conditions of this EULA at any time and without giving any prior notice to you. You acknowledge that you are responsible for periodically reviewing this EULA to familiarise yourself with any changes. Your continued use of the October CMS Software after any changes to the EULA shall constitute your consent to such change. You can access the latest version of the EULA by visiting https://octobercms.com/eula ### 18.2 Assignment You may not assign any rights and obligations under this EULA, in whole or in part, without an authorised Company representative's written consent. Any attempt to assign any rights and obligations without the Company's consent shall be void. The Company reserves the right to assign any of its rights and obligations under this EULA to a third party without requiring your consent. ### 18.3 Notices You hereby consent to receive all notices and communication from the Company electronically. All notices to the Company under this EULA shall be sent to: PO Box 47
Queanbeyan NSW 2620
Australia For any other questions relating to this EULA, please contact us at https://octobercms.com/contact ### 18.4 Governing Law and Jurisdiction This EULA shall be governed by and construed in accordance with the laws of the state of New South Wales, Australia, without giving effect to any principles of conflict of laws. The parties hereby agree to submit to the non-exclusive jurisdiction of the courts of New South Wales to decide any matter arising out of these Terms. Both Parties hereby agree that the United Nations Convention on Contracts for the International Sale of Goods will not apply to this EULA. ### 18.5 Force Majeure Neither Party will be liable to the other for any failure or delay in the performance of its obligations to the extent that such failure or delay is caused by any unforeseen events which are beyond the reasonable control of the obligated Party such as an act of God, strike, war, terrorism, epidemic, internet or telecommunication outage or other similar events, and the obligated Party is not able to avoid or remove the force measure by taking reasonable measures. ================================================ FILE: README.md ================================================

October

[October](https://octobercms.com) is a Content Management System (CMS) and web platform whose sole purpose is to make your development workflow simple again. It was born out of frustration with existing systems. We feel building websites has become a convoluted and confusing process that leaves developers unsatisfied. We want to turn you around to the simpler side and get back to basics. October's mission is to show the world that web development is not rocket science. [![Build Status](https://github.com/octobercms/library/actions/workflows/tests.yml/badge.svg)](https://octobercms.com/) [![Downloads](https://img.shields.io/packagist/dt/october/rain)](https://docs.octobercms.com/) [![Version](https://img.shields.io/packagist/v/october/october)](https://octobercms.com/changelog) [![License](https://poser.pugx.org/october/october/license.svg)](./LICENSE.md) > *Please note*: October CMS is open source and every new account includes a complimentary license for the first year. After that, a license is required to continue receiving updates and access the Marketplace ecosystem. ## Installing October Instructions on how to install October can be found at the [installation guide](https://docs.octobercms.com/3.x/setup/installation.html). ### Quick Start Installation If you have composer installed, run this in your terminal to install October CMS from command line. This will place the files in a directory named **myoctober**. composer create-project october/october myoctober If you plan on using a database, run this command inside the application directory. php artisan october:install ## Learning October The best place to learn October CMS is by [reading the documentation](https://docs.octobercms.com) or [following some tutorials](https://octobercms.com/support/articles/tutorials). You may also watch this [introductory video](https://www.youtube.com/watch?v=yLZTOeOS7wI). Make sure to check out our [official YouTube channel](https://www.youtube.com/c/OctoberCMSOfficial). There is also the excellent video series by [Watch & Learn](https://watch-learn.com/series/making-websites-with-october-cms). For code examples of building with October CMS, visit the [RainLab Plugin Suite](https://github.com/rainlab) or the [October Demos Repo](https://github.com/octoberdemos). ## Coding Standards Please follow the following guides and code standards: * [PSR 4 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md) * [PSR 2 Coding Style Guide](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md) * [PSR 1 Coding Standards](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md) ## Security Vulnerabilities Please review [our security policy](https://github.com/octobercms/october/security/policy) on how to report security vulnerabilities. ## Development Team October CMS was founded in 2014 by Alexey Bobkov and Sam Georges. Today it is supported by a worldwide network of [partners](https://octobercms.com/partners) and contributors. ## Foundation library The CMS uses [Laravel](https://laravel.com) as a foundation PHP framework. ## Contact For announcements and updates: * [Contact Us Page](https://octobercms.com/contact) * [Follow us on Twitter](https://twitter.com/octobercms) * [Like us on Facebook](https://facebook.com/octobercms) To chat or hang out: * [Join us on Discord](https://discord.gg/gEKgwSZ) ## License The October CMS platform is licensed software, see [End User License Agreement](./LICENSE.md) (EULA) for more details. ================================================ FILE: app/Provider.php ================================================ make(Illuminate\Contracts\Console\Kernel::class); $status = $kernel->handle( $input = new Symfony\Component\Console\Input\ArgvInput, new Symfony\Component\Console\Output\ConsoleOutput ); /* |-------------------------------------------------------------------------- | Shutdown The Application |-------------------------------------------------------------------------- | | Once Artisan has finished running. We will fire off the shutdown events | so that any final work may be done by the application before we shut | down the process. This is the last thing to happen to the request. | */ $kernel->terminate($input, $status); exit($status); ================================================ FILE: bootstrap/app.php ================================================ withRouting( // web: __DIR__.'/../routes/web.php', // commands: __DIR__.'/../routes/console.php', // health: '/up', ) ->withMiddleware(function (Middleware $middleware) { // }) ->withExceptions(function (Exceptions $exceptions) { // })->create(); ================================================ FILE: bootstrap/autoload.php ================================================ Application not ready

Application not ready

The application dependencies are not installed.

On the server, run:

composer install --no-dev --prefer-dist --no-interaction --optimize-autoloader

If you deploy build artifacts, ensure the vendor/ directory is included or that your deploy step runs Composer before switching traffic.

If you are using the Deploy plugin for this application, use the Check Beacon function now to verify the deployment.

HTML; exit(1); } ================================================ FILE: bootstrap/providers.php ================================================ env('APP_NAME', 'October CMS'), /* |-------------------------------------------------------------------------- | Application Environment |-------------------------------------------------------------------------- | | This value determines the "environment" your application is currently | running in. This may determine how you prefer to configure various | services the application utilizes. Set this in your ".env" file. | */ 'env' => env('APP_ENV', 'production'), /* |-------------------------------------------------------------------------- | Application Debug Mode |-------------------------------------------------------------------------- | | When your application is in debug mode, detailed error messages with | stack traces will be shown on every error that occurs within your | application. If disabled, a simple generic error page is shown. | | You can create a CMS page with route "/error" to set the contents | of this page. Otherwise a default error page is shown. | */ 'debug' => (bool) env('APP_DEBUG', false), /* |-------------------------------------------------------------------------- | Application URL |-------------------------------------------------------------------------- | | This URL is used by the console to properly generate URLs when using | the Artisan command line tool. You should set this to the root of | your application so that it is used when running Artisan tasks. | */ 'url' => env('APP_URL', 'http://localhost'), 'asset_url' => env('ASSET_URL'), /* |-------------------------------------------------------------------------- | Application Locale Configuration |-------------------------------------------------------------------------- | | The application locale determines the default locale that will be used | by the translation service provider. You are free to set this value | to any of the locales which will be supported by the application. | */ 'locale' => env('APP_LOCALE', 'en'), 'fallback_locale' => env('APP_FALLBACK_LOCALE', 'en'), 'faker_locale' => env('APP_FAKER_LOCALE', 'en_US'), /* |-------------------------------------------------------------------------- | Encryption Key |-------------------------------------------------------------------------- | | This key is used by the Illuminate encrypter service and should be set | to a random, 32 character string, otherwise these encrypted strings | will not be safe. Please do this before deploying an application! | */ 'cipher' => 'AES-256-CBC', 'key' => env('APP_KEY'), 'previous_keys' => [ ...array_filter( explode(',', (string) env('APP_PREVIOUS_KEYS', '')) ), ], /* |-------------------------------------------------------------------------- | Maintenance Mode Driver |-------------------------------------------------------------------------- | | These configuration options determine the driver used to determine and | manage Laravel's "maintenance mode" status. The "cache" driver will | allow maintenance mode to be controlled across multiple machines. | | Supported drivers: "file", "cache" | */ 'maintenance' => [ 'driver' => env('APP_MAINTENANCE_DRIVER', 'file'), 'store' => env('APP_MAINTENANCE_STORE', 'database'), ], /* |-------------------------------------------------------------------------- | Application Timezone |-------------------------------------------------------------------------- | | Here you may specify the default timezone for your application, which | will be used by the PHP date and date-time functions. We have gone | ahead and set this to a sensible default for you out of the box. | |-------------------------------- WARNING! -------------------------------- | | Before you change this value, consider carefully if that is actually | what you want to do. It is highly recommended that this is always set | to UTC (as your server & DB timezone should be as well) and instead | you can use backend.timezone or cms.timezone to set the default | timezone used to display dates & times. | */ 'timezone' => 'UTC', ]; ================================================ FILE: config/backend.php ================================================ http://localhost/admin | */ 'uri' => env('BACKEND_URI', 'admin'), /* |-------------------------------------------------------------------------- | Backend Skin |-------------------------------------------------------------------------- | | Specifies the backend skin class to use. | */ 'skin' => Backend\Skins\Standard::class, /* |-------------------------------------------------------------------------- | Default Branding |-------------------------------------------------------------------------- | | The default backend customization settings. These values are all optional | and remember to set the enabled value to true. Supported values: | | - menu_mode: inline, text, tile, collapse, icons, left | - color_mode: light, dark, auto | - color_palette: default, classic, oxford, console, valentino, punch | - login_background_type: color, wallpaper, gradient, ai_images | - login_background_wallpaper_size: auto, cover | - login_image_type: autumn_images, custom | */ 'brand' => [ 'enabled' => false, 'app_name' => env('APP_NAME', 'October CMS'), 'tagline' => 'Administration Panel', 'menu_mode' => 'icons', 'color_mode' => 'light', 'color_palette' => 'default', 'logo_path' => '~/app/assets/images/logo.png', 'favicon_path' => '~/app/assets/images/favicon.png', 'menu_logo_path' => '~/app/assets/images/menu_logo.png', 'dashboard_icon_path' => '~/app/assets/images/dashboard_icon.png', 'stylesheet_path' => '~/app/assets/css/brand_styles.css', 'login_background_type' => 'color', 'login_background_color' => '#fef6eb', 'login_background_wallpaper' => '~/app/assets/images/login_wallpaper.png', 'login_background_wallpaper_size' => 'auto', 'login_image_type' => 'autumn_images', 'login_custom_image' => '~/app/assets/images/loginimage.png', ], /* |-------------------------------------------------------------------------- | Turbo Router |-------------------------------------------------------------------------- | | Enhance the backend experience using PJAX (push state and AJAX) so when | you click a link, the page is automatically swapped client-side without | the cost of a full page load. | */ 'turbo_router' => env('BACKEND_TURBO_ROUTER', false), /* |-------------------------------------------------------------------------- | Force HTTPS security |-------------------------------------------------------------------------- | | Use this setting to force a secure protocol when accessing any backend | pages, including the authentication pages. This is usually handled by | web server config, but can be handled by the app for added security. | */ 'force_secure' => false, /* |-------------------------------------------------------------------------- | Remember Login |-------------------------------------------------------------------------- | | Define live duration of backend sessions: | | true - session never expires (cookie expiration in 5 years) | false - session has a limited time (see session.lifetime) | null - the form login displays a checkbox that allow user to choose | */ 'force_remember' => null, /* |-------------------------------------------------------------------------- | Force Single Session |-------------------------------------------------------------------------- | | Use this setting to prevent concurrent sessions. When enabled, backend | users cannot sign in to multiple devices at the same time. When a new | sign in occurs, all other sessions for that user are invalidated. | */ 'force_single_session' => false, /* |-------------------------------------------------------------------------- | Force Mail Setting |-------------------------------------------------------------------------- | | Use this setting to remove the option to configure the mail settings | via the backend. This can be used in developer environments to prevent | accidentally sending mail via the configured database. | */ 'force_mail_setting' => false, /* |-------------------------------------------------------------------------- | Password Policy |-------------------------------------------------------------------------- | | Specify the password policy for backend administrators. | | allow_reset - Allow administrators to reset their own passwords via self service | min_length - Password minimum length between 4 - 128 chars | require_uppercase - Require at least one uppercase letter (A–Z) | require_lowercase - Require at least one lowercase letter (a–z) | require_number - Require at least one number | require_nonalpha - Require at least one non-alphanumeric character | expire_days - Enable password expiration after number of days, false to disable | */ 'password_policy' => [ 'allow_reset' => true, 'min_length' => 4, 'require_uppercase' => false, 'require_lowercase' => false, 'require_number' => false, 'require_nonalpha' => false, 'expire_days' => false, ], /* |-------------------------------------------------------------------------- | Peer Management |-------------------------------------------------------------------------- | | When enabled, admin users can manage other users at the same role level | in addition to their users below their role (direct reports). | | When disabled, users can only manage their direct reports and not peers. | */ 'user_peer_management' => false, /* |-------------------------------------------------------------------------- | Default Avatar |-------------------------------------------------------------------------- | | The default avatar used for backend accounts that have no avatar defined. | | local - Use a local default image of a user | gravatar - Use the Gravatar service to generate a unique image | - Specify a custom URL to a default avatar | */ 'default_avatar' => 'gravatar', /* |-------------------------------------------------------------------------- | Backend Locale |-------------------------------------------------------------------------- | | This acts as the default setting for a backend user's locale. This can | be changed by the user at any time using the backend preferences. | */ 'locale' => env('APP_LOCALE', 'en'), /* |-------------------------------------------------------------------------- | Backend Timezone |-------------------------------------------------------------------------- | | This acts as the default setting for a backend user's timezone. This can | be changed by the user at any time using the backend preferences. All | dates displayed in the backend will be converted to this timezone. | */ 'timezone' => 'UTC', /* |-------------------------------------------------------------------------- | Middleware Group |-------------------------------------------------------------------------- | | The name of the middleware group to apply to all backend application routes. | You may use this to apply your own middleware definition. | */ 'middleware_group' => 'web', ]; ================================================ FILE: config/broadcasting.php ================================================ env('BROADCASTING_DEFAULT', 'pusher'), /* |-------------------------------------------------------------------------- | Broadcast Connections |-------------------------------------------------------------------------- | | Here you may define all of the broadcast connections that will be used | to broadcast events to other systems or over websockets. Samples of | each available type of connection are provided inside this array. | */ 'connections' => [ 'pusher' => [ 'driver' => 'pusher', 'key' => env('PUSHER_KEY'), 'secret' => env('PUSHER_SECRET'), 'app_id' => env('PUSHER_APP_ID'), 'options' => [ 'cluster' => 'eu', 'encrypted' => true, ], ], 'redis' => [ 'driver' => 'redis', 'connection' => 'default', ], 'log' => [ 'driver' => 'log', ], ], ]; ================================================ FILE: config/cache.php ================================================ env('CACHE_STORE', 'file'), /* |-------------------------------------------------------------------------- | Cache Stores |-------------------------------------------------------------------------- | | Here you may define all of the cache "stores" for your application as | well as their drivers. You may even define multiple stores for the | same cache driver to group types of items stored in your caches. | */ 'stores' => [ 'apc' => [ 'driver' => 'apc', ], 'array' => [ 'driver' => 'array', 'serialize' => false, ], 'database' => [ 'driver' => 'database', 'connection' => env('DB_CACHE_CONNECTION'), 'table' => env('DB_CACHE_TABLE', 'cache'), 'lock_connection' => env('DB_CACHE_LOCK_CONNECTION'), 'lock_table' => env('DB_CACHE_LOCK_TABLE'), ], 'file' => [ 'driver' => 'file', 'path' => storage_path('framework/cache/data'), 'lock_path' => storage_path('framework/cache/data'), ], 'memcached' => [ 'driver' => 'memcached', 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), 'sasl' => [ env('MEMCACHED_USERNAME'), env('MEMCACHED_PASSWORD'), ], 'options' => [ // Memcached::OPT_CONNECT_TIMEOUT => 2000, ], 'servers' => [ [ 'host' => env('MEMCACHED_HOST', '127.0.0.1'), 'port' => env('MEMCACHED_PORT', 11211), 'weight' => 100, ], ], ], 'redis' => [ 'driver' => 'redis', 'connection' => env('REDIS_CACHE_CONNECTION', 'cache'), 'lock_connection' => env('REDIS_CACHE_LOCK_CONNECTION', 'default'), ], 'dynamodb' => [ 'driver' => 'dynamodb', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'table' => env('DYNAMODB_CACHE_TABLE', 'cache'), 'endpoint' => env('DYNAMODB_ENDPOINT'), ], 'octane' => [ 'driver' => 'octane', ], 'failover' => [ 'driver' => 'failover', 'stores' => [ 'database', 'array', ], ], ], /* |-------------------------------------------------------------------------- | Cache Key Prefix |-------------------------------------------------------------------------- | | When utilizing a RAM based store such as APC or Memcached, there might | be other applications utilizing the same cache. So, we'll specify a | value to get prefixed to all our keys so we can avoid collisions. | */ 'prefix' => env('CACHE_PREFIX', 'october-cache-'), ]; ================================================ FILE: config/cms.php ================================================ env('ACTIVE_THEME', 'demo'), /* |-------------------------------------------------------------------------- | Database Themes |-------------------------------------------------------------------------- | | Globally forces all themes to store template changes in the database, | instead of the file system. If this feature is enabled, changes will | not be stored in the file system. | | false - All theme templates are sourced from the filesystem. | true - Source theme templates from the database with fallback to the filesystem. | */ 'database_templates' => env('CMS_DB_TEMPLATES', false), /* |-------------------------------------------------------------------------- | Template Strictness |-------------------------------------------------------------------------- | | When enabled, an error is thrown when a component, variable, or attribute | used does not exist. When disabled, a null value is returned instead. | */ 'strict_variables' => env('CMS_STRICT_VARIABLES', false), 'strict_components' => env('CMS_STRICT_COMPONENTS', false), /* |-------------------------------------------------------------------------- | Frontend Timezone |-------------------------------------------------------------------------- | | This acts as the default setting for a frontend user's timezone used when | converting dates from the system setting, typically set to UTC. | */ 'timezone' => 'UTC', /* |-------------------------------------------------------------------------- | Template Caching |-------------------------------------------------------------------------- | | Specifies the number of minutes the CMS object cache lives. After the interval | is expired item are re-cached. Note that items are re-cached automatically when | the corresponding template file is modified. | */ 'template_cache_ttl' => 1440, /* |-------------------------------------------------------------------------- | Twig Cache |-------------------------------------------------------------------------- | | Store a temporary cache of parsed Twig templates in the local filesystem. | */ 'enable_twig_cache' => env('CMS_TWIG_CACHE', true), /* |-------------------------------------------------------------------------- | Determines if the routing caching is enabled. |-------------------------------------------------------------------------- | | If the caching is enabled, the page URL map is saved in the cache. If a page | URL was changed on the disk, the old URL value could be still saved in the cache. | To update the cache the clear:cache command should be used. It is recommended | to disable the caching during the development, and enable it in the production mode. | */ 'enable_route_cache' => env('CMS_ROUTE_CACHE', true), /* |-------------------------------------------------------------------------- | Page URL Exceptions (Beta) |-------------------------------------------------------------------------- | | This configuration can be used to bypass CMS routing logic, such as the | maintenance mode page and site definition prefix. The key matches a page | URL match with support for wildcards. The following exception values can | be configured separated by the pipe character (|). | | maintenance - Skip maintenance mode and always allow access to this page | site - Skip the multisite definition matching engine | */ 'url_exceptions' => [ // '/api/*' => 'maintenance', // '/sitemap.xml' => 'site|maintenance', ], /* |-------------------------------------------------------------------------- | Time to live for the URL map. |-------------------------------------------------------------------------- | | The URL map used in the CMS page routing process. By default | the map is updated every time when a page is saved in the backend or when the | interval, in minutes, specified with the url_cache_ttl parameter expires. | */ 'url_cache_ttl' => 60, /* |-------------------------------------------------------------------------- | Determines if the asset caching is enabled. |-------------------------------------------------------------------------- | | If the caching is enabled, combined assets are cached. If a asset file | is changed on the disk, the old file contents could be still saved in the cache. | To update the cache the clear cache command should be used. It is recommended | to disable the caching during the development, and enable it in the production mode. | */ 'enable_asset_cache' => env('CMS_ASSET_CACHE', true), /* |-------------------------------------------------------------------------- | Determines if the asset minification is enabled. |-------------------------------------------------------------------------- | | If the minification is enabled, combined assets are compressed (minified). | It is recommended to disable the minification during development, and | enable it in production mode. | */ 'enable_asset_minify' => env('CMS_ASSET_MINIFY', false), /* |-------------------------------------------------------------------------- | Check Import Timestamps When Combining Assets |-------------------------------------------------------------------------- | | If deep hashing is enabled, the combiner cache will be reset when a change | is detected on imported files, in addition to those referenced directly. | This will cause slower page performance. If set to null, deep hashing | is used when debug mode (app.debug) is enabled. | */ 'enable_asset_deep_hashing' => env('CMS_ASSET_DEEP_HASHING', null), /* |-------------------------------------------------------------------------- | Site Redirect Policy |-------------------------------------------------------------------------- | | Controls the behavior when the root URL is opened without a matched site. | | detect - detect the site based on the browser language | primary - use the primary site | - use a specific site identifier (id) | */ 'redirect_policy' => env('CMS_REDIRECT_POLICY', 'detect'), /* |-------------------------------------------------------------------------- | Force Bytecode Invalidation |-------------------------------------------------------------------------- | | When using Opcache with opcache.validate_timestamps set to 0 or APC | with apc.stat set to 0 and Twig cache enabled, clearing the template | cache won't update the cache, set to true to get around this. | */ 'force_bytecode_invalidation' => true, /* |-------------------------------------------------------------------------- | Safe Mode |-------------------------------------------------------------------------- | | If safe mode is enabled, the PHP code section is disabled in the CMS | for security reasons. If set to null, safe mode is enabled when | debug mode (app.debug) is disabled. | */ 'safe_mode' => env('CMS_SAFE_MODE', null), /* |-------------------------------------------------------------------------- | Middleware Group |-------------------------------------------------------------------------- | | The name of the middleware group to apply to all CMS application routes. | You may use this to apply your own middleware definition, or use some | of the defaults: web, api | */ 'middleware_group' => 'web', /* |-------------------------------------------------------------------------- | V1 Security Policy |-------------------------------------------------------------------------- | | When using safe mode configuration, the Twig sandbox becomes very strict and | uses an allow-list to protect calling unapproved methods. Instead, you may | use V1, which is a more relaxed policy that uses a block-list, it blocks | most of the unsecure methods but is not as secure as an allow-list. | */ 'security_policy_v1' => env('CMS_SECURITY_POLICY_V1', false), /* |-------------------------------------------------------------------------- | V1 Exception Policy |-------------------------------------------------------------------------- | | When debug mode is off, throwing exceptions in AJAX will display a generic | message, except for specific exception types such as ApplicationException | and ValidationException (allow-list). Instead, you may use V1, which is | a more relaxed policy that allows all messages and blocks common exception | types (block-list) but may still leak information in rare cases. | */ 'exception_policy_v1' => env('CMS_EXCEPTION_POLICY_V1', false), ]; ================================================ FILE: config/database.php ================================================ env('DB_CONNECTION', 'mysql'), /* |-------------------------------------------------------------------------- | Database Connections |-------------------------------------------------------------------------- | | Here are each of the database connections setup for your application. | Of course, examples of configuring each database platform that is | supported by Laravel is shown below to make development simple. | | | All database work in Laravel is done through the PHP PDO facilities | so make sure you have the driver for your particular database of | choice installed on your machine before you begin development. | */ 'connections' => [ 'sqlite' => [ 'driver' => 'sqlite', 'url' => env('DB_URL'), 'database' => env('DB_DATABASE', database_path('database.sqlite')), 'prefix' => '', 'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true), 'busy_timeout' => null, 'journal_mode' => null, 'synchronous' => null, 'transaction_mode' => 'DEFERRED', ], 'mysql' => [ 'driver' => 'mysql', 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => env('DB_CHARSET', 'utf8mb4'), 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ (PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'mariadb' => [ 'driver' => 'mariadb', 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'unix_socket' => env('DB_SOCKET', ''), 'charset' => env('DB_CHARSET', 'utf8mb4'), 'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'), 'prefix' => '', 'prefix_indexes' => true, 'strict' => true, 'engine' => null, 'options' => extension_loaded('pdo_mysql') ? array_filter([ (PHP_VERSION_ID >= 80500 ? \Pdo\Mysql::ATTR_SSL_CA : \PDO::MYSQL_ATTR_SSL_CA) => env('MYSQL_ATTR_SSL_CA'), ]) : [], ], 'pgsql' => [ 'driver' => 'pgsql', 'url' => env('DB_URL'), 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '5432'), 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, 'search_path' => env('DB_SCHEMA', 'public'), 'sslmode' => env('DB_SSLMODE', 'prefer'), ], 'sqlsrv' => [ 'driver' => 'sqlsrv', 'url' => env('DB_URL'), 'host' => env('DB_HOST', 'localhost'), 'port' => env('DB_PORT', '1433'), 'database' => env('DB_DATABASE', 'laravel'), 'username' => env('DB_USERNAME', 'root'), 'password' => env('DB_PASSWORD', ''), 'charset' => env('DB_CHARSET', 'utf8'), 'prefix' => '', 'prefix_indexes' => true, // 'encrypt' => env('DB_ENCRYPT', 'yes'), // 'trust_server_certificate' => env('DB_TRUST_SERVER_CERTIFICATE', 'false'), ], ], /* |-------------------------------------------------------------------------- | Migration Repository Table |-------------------------------------------------------------------------- | | This table keeps track of all the migrations that have already run for | your application. Using this information, we can determine which of | the migrations on disk have not actually be run in the databases. | */ 'migrations' => [ 'table' => 'migrations', 'update_date_on_publish' => true, ], /* |-------------------------------------------------------------------------- | Redis Databases |-------------------------------------------------------------------------- | | Redis is an open source, fast, and advanced key-value store that also | provides a richer set of commands than a typical key-value systems | such as APC or Memcached. Laravel makes it easy to dig right in. | */ 'redis' => [ 'client' => env('REDIS_CLIENT', 'phpredis'), 'options' => [ 'cluster' => env('REDIS_CLUSTER', 'redis'), 'prefix' => env('REDIS_PREFIX', 'october_database_'), 'persistent' => env('REDIS_PERSISTENT', false), ], 'default' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'username' => env('REDIS_USERNAME'), 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_DB', '0'), 'max_retries' => env('REDIS_MAX_RETRIES', 3), 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), ], 'cache' => [ 'url' => env('REDIS_URL'), 'host' => env('REDIS_HOST', '127.0.0.1'), 'username' => env('REDIS_USERNAME'), 'password' => env('REDIS_PASSWORD'), 'port' => env('REDIS_PORT', '6379'), 'database' => env('REDIS_CACHE_DB', '1'), 'max_retries' => env('REDIS_MAX_RETRIES', 3), 'backoff_algorithm' => env('REDIS_BACKOFF_ALGORITHM', 'decorrelated_jitter'), 'backoff_base' => env('REDIS_BACKOFF_BASE', 100), 'backoff_cap' => env('REDIS_BACKOFF_CAP', 1000), ], ], ]; ================================================ FILE: config/editor.php ================================================ [ 'enabled' => false, 'stylesheet_path' => '~/app/assets/css/editor_styles.css', 'toolbar_buttons' => 'paragraphFormat, paragraphStyle, quote, bold, italic, align, formatOL, formatUL, insertTable, insertSnippet, insertPageLink, insertImage, insertVideo, insertAudio, insertFile, insertHR, fullscreen, html', 'allow_tags' => 'a, abbr, address, area, article, aside, audio, b, base, bdi, bdo, blockquote, br, button, canvas, caption, cite, code, col, colgroup, datalist, dd, del, details, dfn, dialog, div, dl, dt, em, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, i, iframe, img, input, ins, kbd, keygen, label, legend, li, link, main, map, mark, menu, menuitem, meter, nav, noscript, object, ol, optgroup, option, output, p, param, pre, progress, queue, rp, rt, ruby, s, samp, script, style, section, select, small, source, span, strike, strong, sub, summary, sup, table, tbody, td, textarea, tfoot, th, thead, time, title, tr, track, u, ul, var, video, wbr', 'allow_empty_tags' => 'textarea, a, i, iframe, object, video, style, script, .icon, .bi, .fa, .fr-emoticon, .fr-inner, path, line', 'no_wrap_tags' => 'figure, script, style', 'remove_tags' => 'script, style', 'line_breaker_tags' => 'figure, table, hr, iframe, form, dl', 'allow_attrs' => '', 'paragraph_formats' => [ 'N' => 'Normal', 'H1' => 'Heading 1', 'H2' => 'Heading 2', 'H3' => 'Heading 3', 'H4' => 'Heading 4', 'PRE' => 'Code', ], 'style_paragraph' => [ 'oc-text-bordered' => 'Bordered', 'oc-text-gray' => 'Gray', 'oc-text-spaced' => 'Spaced', 'oc-text-uppercase' => 'Uppercase', ], 'style_inline' => [ 'oc-class-code' => 'Code', 'oc-class-highlighted' => 'Highlighted', 'oc-class-transparency' => 'Transparent', ], 'style_link' => [ 'oc-link-green' => 'Green', 'oc-link-strong' => 'Strong', ], 'style_table' => [ 'oc-dashed-borders' => 'Dashed Borders', 'oc-alternate-rows' => 'Alternate Rows', ], 'style_table_cell' => [ 'oc-cell-highlighted' => 'Highlighted', 'oc-cell-thick-border' => 'Thick Border', ], 'style_image' => [ 'oc-img-rounded' => 'Rounded', 'oc-img-bordered' => 'Bordered', ], 'editor_options' => [], ], ]; ================================================ FILE: config/filesystems.php ================================================ env('FILESYSTEM_DISK', 'local'), /* |-------------------------------------------------------------------------- | Filesystem Disks |-------------------------------------------------------------------------- | | Here you may configure as many filesystem "disks" as you wish, and you | may even configure multiple disks of the same driver. Defaults have | been setup for each driver as an example of the required options. | | Supported Drivers: "local", "ftp", "sftp", "s3" | */ 'disks' => [ 'local' => [ 'driver' => 'local', 'root' => storage_path('app/private'), 'serve' => true, 'throw' => false, 'report' => false, ], 'public' => [ 'driver' => 'local', 'root' => storage_path('app/public'), 'url' => rtrim(env('APP_URL', ''), '/').'/storage/app/public', 'visibility' => 'public', 'throw' => false, 'report' => false, ], 'uploads' => [ 'driver' => 'local', 'root' => storage_path('app/uploads'), 'url' => '/storage/app/uploads', 'visibility' => 'public', 'throw' => false, 'report' => false, ], 'media' => [ 'driver' => 'local', 'root' => storage_path('app/media'), 'url' => '/storage/app/media', 'visibility' => 'public', 'throw' => false, 'report' => false, ], 'resources' => [ 'driver' => 'local', 'root' => storage_path('app/resources'), 'url' => '/storage/app/resources', 'visibility' => 'public', 'throw' => false, 'report' => false, ], 's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, 'report' => false, ], ], /* |-------------------------------------------------------------------------- | Symbolic Links |-------------------------------------------------------------------------- | | Here you may configure the symbolic links that will be created when the | `storage:link` Artisan command is executed. The array keys should be | the locations of the links and the values should be their targets. | | For October CMS, we recommend using the `october:mirror` command instead | */ 'links' => [ public_path('storage/app/public') => storage_path('app/public'), ], ]; ================================================ FILE: config/hashing.php ================================================ 'bcrypt', /* |-------------------------------------------------------------------------- | Bcrypt Options |-------------------------------------------------------------------------- | | Here you may specify the configuration options that should be used when | passwords are hashed using the Bcrypt algorithm. This will allow you | to control the amount of time it takes to hash the given password. | */ 'bcrypt' => [ 'rounds' => env('BCRYPT_ROUNDS', 10), ], /* |-------------------------------------------------------------------------- | Argon Options |-------------------------------------------------------------------------- | | Here you may specify the configuration options that should be used when | passwords are hashed using the Argon algorithm. These will allow you | to control the amount of time it takes to hash the given password. | */ 'argon' => [ 'memory' => 1024, 'threads' => 2, 'time' => 2, ], ]; ================================================ FILE: config/logging.php ================================================ env('LOG_CHANNEL', 'stack'), /* |-------------------------------------------------------------------------- | Deprecations Log Channel |-------------------------------------------------------------------------- | | This option controls the log channel that should be used to log warnings | regarding deprecated PHP and library features. This allows you to get | your application ready for upcoming major versions of dependencies. | */ 'deprecations' => [ 'channel' => env('LOG_DEPRECATIONS_CHANNEL', 'null'), 'trace' => env('LOG_DEPRECATIONS_TRACE', false), ], /* |-------------------------------------------------------------------------- | Log Channels |-------------------------------------------------------------------------- | | Here you may configure the log channels for your application. Out of | the box, Laravel uses the Monolog PHP logging library. This gives | you a variety of powerful log handlers / formatters to utilize. | | Available Drivers: "single", "daily", "slack", "syslog", | "errorlog", "monolog", | "custom", "stack" | */ 'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => explode(',', (string) env('LOG_STACK', 'single')), 'ignore_exceptions' => false, ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/system.log'), 'level' => env('LOG_LEVEL', 'debug'), 'replace_placeholders' => true, ], 'daily' => [ 'driver' => 'daily', 'path' => storage_path('logs/system.log'), 'level' => env('LOG_LEVEL', 'debug'), 'days' => env('LOG_DAILY_DAYS', 14), 'replace_placeholders' => true, ], 'slack' => [ 'driver' => 'slack', 'url' => env('LOG_SLACK_WEBHOOK_URL'), 'username' => env('LOG_SLACK_USERNAME', 'October CMS Log'), 'emoji' => env('LOG_SLACK_EMOJI', ':boom:'), 'level' => env('LOG_LEVEL', 'critical'), 'replace_placeholders' => true, ], 'papertrail' => [ 'driver' => 'monolog', 'level' => env('LOG_LEVEL', 'debug'), 'handler' => env('LOG_PAPERTRAIL_HANDLER', SyslogUdpHandler::class), 'handler_with' => [ 'host' => env('PAPERTRAIL_URL'), 'port' => env('PAPERTRAIL_PORT'), 'connectionString' => 'tls://'.env('PAPERTRAIL_URL').':'.env('PAPERTRAIL_PORT'), ], 'processors' => [PsrLogMessageProcessor::class], ], 'stderr' => [ 'driver' => 'monolog', 'level' => env('LOG_LEVEL', 'debug'), 'handler' => StreamHandler::class, 'handler_with' => [ 'stream' => 'php://stderr', ], 'formatter' => env('LOG_STDERR_FORMATTER'), 'processors' => [PsrLogMessageProcessor::class], ], 'syslog' => [ 'driver' => 'syslog', 'level' => env('LOG_LEVEL', 'debug'), 'facility' => env('LOG_SYSLOG_FACILITY', LOG_USER), 'replace_placeholders' => true, ], 'errorlog' => [ 'driver' => 'errorlog', 'level' => env('LOG_LEVEL', 'debug'), 'replace_placeholders' => true, ], 'null' => [ 'driver' => 'monolog', 'handler' => NullHandler::class, ], 'emergency' => [ 'path' => storage_path('logs/laravel.log'), ], ], ]; ================================================ FILE: config/mail.php ================================================ env('MAIL_MAILER', 'smtp'), /* |-------------------------------------------------------------------------- | Mailer Configurations |-------------------------------------------------------------------------- | | Here you may configure all of the mailers used by your application plus | their respective settings. Several examples have been configured for | you and you are free to add your own as your application requires. | | Laravel supports a variety of mail "transport" drivers to be used while | sending an e-mail. You will specify which one you are using for your | mailers below. You are free to add additional mailers as required. | | Supported: "smtp", "sendmail", "mailgun", "ses", "ses-v2", | "postmark", "resend", "log", "array", | "failover", "roundrobin" | */ 'mailers' => [ 'smtp' => [ 'transport' => 'smtp', 'scheme' => env('MAIL_SCHEME'), 'url' => env('MAIL_URL'), 'host' => env('MAIL_HOST', '127.0.0.1'), 'port' => env('MAIL_PORT', 2525), 'username' => env('MAIL_USERNAME'), 'password' => env('MAIL_PASSWORD'), 'timeout' => null, 'local_domain' => env('MAIL_EHLO_DOMAIN', parse_url((string) env('APP_URL', 'http://localhost'), PHP_URL_HOST)), ], 'ses' => [ 'transport' => 'ses', ], 'postmark' => [ 'transport' => 'postmark', // 'message_stream_id' => env('POSTMARK_MESSAGE_STREAM_ID'), // 'client' => [ // 'timeout' => 5, // ], ], 'resend' => [ 'transport' => 'resend', ], 'sendmail' => [ 'transport' => 'sendmail', 'path' => env('MAIL_SENDMAIL_PATH', '/usr/sbin/sendmail -t -i'), ], 'log' => [ 'transport' => 'log', 'channel' => env('MAIL_LOG_CHANNEL'), ], 'array' => [ 'transport' => 'array', ], 'failover' => [ 'transport' => 'failover', 'mailers' => [ 'smtp', 'log', ], 'retry_after' => 60, ], 'roundrobin' => [ 'transport' => 'roundrobin', 'mailers' => [ 'ses', 'postmark', ], 'retry_after' => 60, ], ], /* |-------------------------------------------------------------------------- | Global "From" Address |-------------------------------------------------------------------------- | | You may wish for all e-mails sent by your application to be sent from | the same address. Here, you may specify a name and address that is | used globally for all e-mails that are sent by your application. | */ 'from' => [ 'address' => env('MAIL_FROM_ADDRESS', 'noreply@example.tld'), 'name' => env('MAIL_FROM_NAME', 'October CMS'), ], /* |-------------------------------------------------------------------------- | Global "To" Address |-------------------------------------------------------------------------- | | When testing your application, you may need all e-mails to be sent to | one developer's address. Here, you may specify a name and address that is | used globally for all e-mails that are sent by your application. | */ 'to' => [ 'address' => env('MAIL_TO_ADDRESS', null), 'name' => env('MAIL_TO_NAME', null), ], ]; ================================================ FILE: config/media.php ================================================ 10, /* |-------------------------------------------------------------------------- | Automatically Rename Filenames |-------------------------------------------------------------------------- | | When a media file is uploaded, automatically transform its filename to | something consistent. The "slug" mode will slug the file name for all | uploads. | | Supported: "null", "slug" | */ 'auto_rename' => env('MEDIA_AUTO_RENAME', null), /* |-------------------------------------------------------------------------- | Clean Vector Files |-------------------------------------------------------------------------- | | When a vector file (SVG) file is uploaded, automatically process its | contents to remove scripts and other potentially dangerous content. | */ 'clean_vectors' => true, /* |-------------------------------------------------------------------------- | Ignored Files and Patterns |-------------------------------------------------------------------------- | | The media manager wil ignore file names and patterns specified here | */ 'ignore_files' => ['.svn', '.git', '.DS_Store', '.AppleDouble'], 'ignore_patterns' => ['^\..*'], /* |-------------------------------------------------------------------------- | Allowed Extensions |-------------------------------------------------------------------------- | | Only allow the following extensions to be uploaded and stored. | */ 'default_extensions' => ['jpg', 'jpeg', 'bmp', 'png', 'webp', 'avif', 'gif', 'svg', 'js', 'map', 'ico', 'css', 'less', 'scss', 'ics', 'odt', 'doc', 'docx', 'ppt', 'pptx', 'pdf', 'swf', 'txt', 'ods', 'xls', 'xlsx', 'eot', 'woff', 'woff2', 'ttf', 'flv', 'wmv', 'mp3', 'ogg', 'wav', 'avi', 'mov', 'mp4', 'mpeg', 'webm', 'mkv', 'rar', 'zip'], /* |-------------------------------------------------------------------------- | Image Extensions |-------------------------------------------------------------------------- | | File extensions corresponding to the Image document type | */ 'image_extensions' => ['jpg', 'jpeg', 'bmp', 'png', 'webp', 'avif', 'gif', 'svg'], /* |-------------------------------------------------------------------------- | Video Extensions |-------------------------------------------------------------------------- | | File extensions corresponding to the Video document type | */ 'video_extensions' => ['mp4', 'avi', 'mov', 'mpg', 'mpeg', 'mkv', 'webm'], /* |-------------------------------------------------------------------------- | Audio Extensions |-------------------------------------------------------------------------- | | File extensions corresponding to the Audio document type | */ 'audio_extensions' => ['mp3', 'wav', 'wma', 'm4a', 'ogg'], ]; ================================================ FILE: config/multisite.php ================================================ true, /* |-------------------------------------------------------------------------- | Multisite Features |-------------------------------------------------------------------------- | | Use multisite for the features defined below. Be sure to clear the application | cache after modifying these settings. | | - system_plugin_sites - Plugins can be enabled/disabled per site | - system_plugin_site_groups - Plugins can be enabled/disabled per site group | - system_asset_combiner - Asset combiner cache keys are unique to the site | - cms_maintenance_setting - Maintenance Mode Settings are unique for each site | - backend_mail_setting - Mail Settings are unique for each site | | There are also some known vendor implementations. | | - rainlab_googleanalytics_setting - Google Analytics for each site | - responsiv_campaign_message - Mailing list campaigns for each site | */ 'features' => [ 'system_plugin_sites' => false, 'system_plugin_site_groups' => false, 'system_asset_combiner' => false, 'cms_maintenance_setting' => false, 'backend_mail_setting' => false, 'dashboard_traffic_statistics' => false, // Vendor 'rainlab_googleanalytics_setting' => false, 'responsiv_campaign_message' => false, ], ]; ================================================ FILE: config/queue.php ================================================ env('QUEUE_CONNECTION', 'sync'), /* |-------------------------------------------------------------------------- | Queue Connections |-------------------------------------------------------------------------- | | Here you may configure the connection options for every queue backend | used by your application. An example configuration is provided for | each backend supported by Laravel. You're also free to add more. | | Drivers: "sync", "database", "beanstalkd", "sqs", "redis", | "deferred", "background", "failover", "null" | */ 'connections' => [ 'sync' => [ 'driver' => 'sync', ], 'database' => [ 'driver' => 'database', 'connection' => env('DB_QUEUE_CONNECTION'), 'table' => env('DB_QUEUE_TABLE', 'jobs'), 'queue' => env('DB_QUEUE', 'default'), 'retry_after' => (int) env('DB_QUEUE_RETRY_AFTER', 90), 'after_commit' => false, ], 'beanstalkd' => [ 'driver' => 'beanstalkd', 'host' => env('BEANSTALKD_QUEUE_HOST', 'localhost'), 'queue' => env('BEANSTALKD_QUEUE', 'default'), 'retry_after' => (int) env('BEANSTALKD_QUEUE_RETRY_AFTER', 90), 'block_for' => 0, 'after_commit' => false, ], 'sqs' => [ 'driver' => 'sqs', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 'queue' => env('SQS_QUEUE', 'default'), 'suffix' => env('SQS_SUFFIX'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'after_commit' => false, ], 'redis' => [ 'driver' => 'redis', 'connection' => env('REDIS_QUEUE_CONNECTION', 'default'), 'queue' => env('REDIS_QUEUE', 'default'), 'retry_after' => (int) env('REDIS_QUEUE_RETRY_AFTER', 90), 'block_for' => null, 'after_commit' => false, ], 'deferred' => [ 'driver' => 'deferred', ], 'background' => [ 'driver' => 'background', ], 'failover' => [ 'driver' => 'failover', 'connections' => [ 'database', 'deferred', ], ], ], /* |-------------------------------------------------------------------------- | Job Batching |-------------------------------------------------------------------------- | | The following options configure the database and table that store job | batching information. These options can be updated to any database | connection and table which has been defined by your application. | */ 'batching' => [ 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'job_batches', ], /* |-------------------------------------------------------------------------- | Failed Queue Jobs |-------------------------------------------------------------------------- | | These options configure the behavior of failed queue job logging so you | can control how and where failed jobs are stored. Laravel ships with | support for storing failed jobs in a simple file or in a database. | | Supported drivers: "database", "database-uuids", "dynamodb", "file", "null" | */ 'failed' => [ 'driver' => env('QUEUE_FAILED_DRIVER', 'database'), 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ], ]; ================================================ FILE: config/services.php ================================================ [ 'key' => env('POSTMARK_API_KEY'), ], 'resend' => [ 'key' => env('RESEND_API_KEY'), ], 'ses' => [ 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], 'slack' => [ 'notifications' => [ 'bot_user_oauth_token' => env('SLACK_BOT_USER_OAUTH_TOKEN'), 'channel' => env('SLACK_BOT_USER_DEFAULT_CHANNEL'), ], ], ]; ================================================ FILE: config/session.php ================================================ env('SESSION_DRIVER', 'file'), /* |-------------------------------------------------------------------------- | Session Lifetime |-------------------------------------------------------------------------- | | Here you may specify the number of minutes that you wish the session | to be allowed to remain idle before it expires. If you want them | to expire immediately when the browser is closed then you may | indicate that via the expire_on_close configuration option. | */ 'lifetime' => (int) env('SESSION_LIFETIME', 120), 'expire_on_close' => env('SESSION_EXPIRE_ON_CLOSE', false), /* |-------------------------------------------------------------------------- | Session Encryption |-------------------------------------------------------------------------- | | This option allows you to easily specify that all of your session data | should be encrypted before it's stored. All encryption is performed | automatically by Laravel and you may use the session like normal. | */ 'encrypt' => env('SESSION_ENCRYPT', false), /* |-------------------------------------------------------------------------- | Session File Location |-------------------------------------------------------------------------- | | When utilizing the "file" session driver, the session files are placed | on disk. The default storage location is defined here; however, you | are free to provide another location where they should be stored. | */ 'files' => storage_path('framework/sessions'), /* |-------------------------------------------------------------------------- | Session Database Connection |-------------------------------------------------------------------------- | | When using the "database" or "redis" session drivers, you may specify a | connection that should be used to manage these sessions. This should | correspond to a connection in your database configuration options. | */ 'connection' => env('SESSION_CONNECTION'), /* |-------------------------------------------------------------------------- | Session Database Table |-------------------------------------------------------------------------- | | When using the "database" session driver, you may specify the table to | be used to store sessions. Of course, a sensible default is defined | for you; however, you're welcome to change this to another table. | */ 'table' => env('SESSION_TABLE', 'sessions'), /* |-------------------------------------------------------------------------- | Session Cache Store |-------------------------------------------------------------------------- | | When using one of the framework's cache driven session backends, you may | define the cache store which should be used to store the session data | between requests. This must match one of your defined cache stores. | | Affects: "dynamodb", "memcached", "redis" | */ 'store' => env('SESSION_STORE'), /* |-------------------------------------------------------------------------- | Session Sweeping Lottery |-------------------------------------------------------------------------- | | Some session drivers must manually sweep their storage location to get | rid of old sessions from storage. Here are the chances that it will | happen on a given request. By default, the odds are 2 out of 100. | */ 'lottery' => [2, 100], /* |-------------------------------------------------------------------------- | Session Cookie Name |-------------------------------------------------------------------------- | | Here you may change the name of the session cookie that is created by | the framework. Typically, you should not need to change this value | since doing so does not grant a meaningful security improvement. | */ 'cookie' => env('SESSION_COOKIE', 'october_session'), /* |-------------------------------------------------------------------------- | Session Cookie Path |-------------------------------------------------------------------------- | | The session cookie path determines the path for which the cookie will | be regarded as available. Typically, this will be the root path of | your application, but you're free to change this when necessary. | */ 'path' => env('SESSION_PATH', '/'), /* |-------------------------------------------------------------------------- | Session Cookie Domain |-------------------------------------------------------------------------- | | This value determines the domain and subdomains the session cookie is | available to. By default, the cookie will be available to the root | domain without subdomains. Typically, this shouldn't be changed. | */ 'domain' => env('SESSION_DOMAIN'), /* |-------------------------------------------------------------------------- | HTTPS Only Cookies |-------------------------------------------------------------------------- | | By setting this option to true, session cookies will only be sent back | to the server if the browser has a HTTPS connection. This will keep | the cookie from being sent to you when it can't be done securely. | */ 'secure' => env('SESSION_SECURE_COOKIE'), /* |-------------------------------------------------------------------------- | HTTP Access Only |-------------------------------------------------------------------------- | | Setting this value to true will prevent JavaScript from accessing the | value of the cookie and the cookie will only be accessible through | the HTTP protocol. It's unlikely you should disable this option. | */ 'http_only' => env('SESSION_HTTP_ONLY', true), /* |-------------------------------------------------------------------------- | Same-Site Cookies |-------------------------------------------------------------------------- | | This option determines how your cookies behave when cross-site requests | take place, and can be used to mitigate CSRF attacks. By default, we | will set this value to "lax" to permit secure cross-site requests. | | See: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value | | Supported: "lax", "strict", "none", null | */ 'same_site' => env('SESSION_SAME_SITE', 'lax'), /* |-------------------------------------------------------------------------- | Partitioned Cookies |-------------------------------------------------------------------------- | | Setting this value to true will tie the cookie to the top-level site for | a cross-site context. Partitioned cookies are accepted by the browser | when flagged "secure" and the Same-Site attribute is set to "none". | */ 'partitioned' => env('SESSION_PARTITIONED_COOKIE', false), ]; ================================================ FILE: config/system.php ================================================ env('LOAD_MODULES'), /* |-------------------------------------------------------------------------- | Disable Specified Plugins |-------------------------------------------------------------------------- | | Specify plugin codes which will always be disabled in the application. | | DISABLE_PLUGINS="October.Demo,RainLab.Blog" | */ 'disable_plugins' => env('DISABLE_PLUGINS'), /* |-------------------------------------------------------------------------- | Link Policy |-------------------------------------------------------------------------- | | Controls how URL links are generated throughout the application. | | detect - detect hostname and use the current schema | secure - detect hostname and force HTTPS schema | insecure - detect hostname and force HTTP schema | force - force hostname and schema using app.url config value | | By default most links use their fully qualified URLs or reference their | CDN location. In some cases you may prefer relative links where possible | if so, set the relative_links value to true. | */ 'link_policy' => env('LINK_POLICY', 'detect'), 'relative_links' => env('RELATIVE_LINKS', false), /* |-------------------------------------------------------------------------- | System Paths |-------------------------------------------------------------------------- | | Specify location to core system paths. Local paths are relative if they | do not have a leading slash. URLs can be relative to the base application | URL or you can specify a full path URL. | | PLUGINS_PATH="plugins" | PLUGINS_ASSET_URL="/plugins" | | THEMES_PATH="/absolute/path/to/themes" | THEMES_ASSET_URL="http://localhost/themes" | */ 'plugins_path' => env('PLUGINS_PATH'), 'plugins_asset_url' => env('PLUGINS_ASSET_URL'), 'themes_path' => env('THEMES_PATH'), 'themes_asset_url' => env('THEMES_ASSET_URL'), 'storage_path' => env('STORAGE_PATH'), 'cache_path' => env('CACHE_PATH'), /* |-------------------------------------------------------------------------- | Default Permission Masks |-------------------------------------------------------------------------- | | Specifies a default file and folder permission as a string (eg: "755") for | created files and directories in the system paths. It is recommended | to use file as "644" and folder as "755". | */ 'default_mask' => [ 'file' => env('DEFAULT_FILE_MASK'), 'folder' => env('DEFAULT_FOLDER_MASK'), ], /* |-------------------------------------------------------------------------- | Cross Site Request Forgery (CSRF) Protection |-------------------------------------------------------------------------- | | If the CSRF protection is enabled, all "postback" & AJAX requests are | checked for a valid security token. | */ 'enable_csrf_protection' => env('ENABLE_CSRF', true), /* |-------------------------------------------------------------------------- | Convert Line Endings |-------------------------------------------------------------------------- | | Determines if October CMS should convert line endings from the Windows | style \r\n to the Unix style \n. | */ 'convert_line_endings' => env('CONVERT_LINE_ENDINGS', false), /* |-------------------------------------------------------------------------- | Cookie Encryption |-------------------------------------------------------------------------- | | October CMS encrypts/decrypts cookies by default. You can specify cookies | that should not be encrypted or decrypted here. This is useful, for | example, when you want to pass data from frontend to server side backend | via cookies, and vice versa. | */ 'unencrypt_cookies' => env('UNENCRYPT_COOKIES', [ // 'my_cookie', ]), /* |-------------------------------------------------------------------------- | Automatically Mirror to Public Directory |-------------------------------------------------------------------------- | | Performed after a composer update. | | true - automatically mirror asset to the public directory | false - never mirror assets to public directory | null - only mirror assets when debug mode is OFF (in production) | */ 'auto_mirror_public' => env('AUTO_MIRROR_PUBLIC', false), /* |-------------------------------------------------------------------------- | Automatically Rollback Plugins |-------------------------------------------------------------------------- | | Attempt to automatically reverse database migrations for a plugin when | they are uninstalled using composer. This is disabled by default | to prevent data loss. | */ 'auto_rollback_plugins' => env('AUTO_ROLLBACK_PLUGINS', false), /* |-------------------------------------------------------------------------- | Base Directory Restriction |-------------------------------------------------------------------------- | | Restricts loading backend template and config files to within the base | directory of the application. For example, when using the symlink option | in composer for local packages. | | Warning: This should never be disabled in production for security reasons. | */ 'restrict_base_dir' => env('RESTRICT_BASE_DIR', true), /* |-------------------------------------------------------------------------- | Log Deprecation Warnings |-------------------------------------------------------------------------- | | This logs deprecation warnings from PHP code, either by the language or | from developer code, in the event log. This should be set to true in | development environments to ensure code is maintained and breaking | changes are fixed before they happen. | */ 'log_deprecations' => env('LOG_DEPRECATIONS', false), ]; ================================================ FILE: config/view.php ================================================ [ app_path('views'), ], /* |-------------------------------------------------------------------------- | Compiled View Path |-------------------------------------------------------------------------- | | This option determines where all the compiled Blade templates will be | stored for your application. Typically, this is within the storage | directory. However, as usual, you are free to change this value. | */ 'compiled' => env( 'VIEW_COMPILED_PATH', realpath(storage_path('framework/views')) ), ]; ================================================ FILE: index.php ================================================ make(\Illuminate\Contracts\Http\Kernel::class); $response = $kernel->handle( $request = Illuminate\Http\Request::capture() ); $response->send(); $kernel->terminate($request, $response); ================================================ FILE: modules/backend/ServiceProvider.php ================================================ registerSingletons(); } /** * boot the module events. */ public function boot() { parent::boot('backend'); } /** * registerSingletons */ protected function registerSingletons() { $this->app->singleton('backend.helper', \Backend\Helpers\Backend::class); $this->app->singleton('backend.roles', \Backend\Classes\RoleManager::class); $this->app->scoped('backend.auth', fn () => \Backend\Classes\AuthManager::instance()); $this->app->scoped('backend.menu', \Backend\Classes\NavigationManager::class); $this->app->scoped('backend.widgets', \Backend\Classes\WidgetManager::class); } /** * registerReportWidgets */ public function registerReportWidgets() { return [ \Backend\ReportWidgets\Welcome::class => [ 'label' => "Welcome", 'context' => 'dashboard' ], ]; } /** * registerMailTemplates */ public function registerMailTemplates() { return [ 'backend:invite' => 'backend::mail.invite', 'backend:restore' => 'backend::mail.restore', 'backend:contact-form' => 'backend::mail.contact-form', ]; } /** * registerNavigation */ public function registerNavigation() { // return [ // 'dashboard' => [ // 'label' => "Dashboard", // 'icon' => 'icon-dashboard', // 'iconSvg' => 'modules/backend/assets/images/dashboard-icon.svg', // 'url' => Backend::url('backend'), // 'permissions' => ['dashboard.*', 'dashboard'], // 'order' => 10 // ] // ]; } /** * registerPermissions */ public function registerPermissions() { return [ // General 'general.backend' => [ 'label' => 'Access the Backend Panel', 'tab' => 'General', 'order' => 200 ], 'general.backend.view_offline' => [ 'label' => 'View Backend During Maintenance', 'tab' => 'General', 'order' => 300 ], 'general.backend.perform_updates' => [ 'label' => 'Perform Software Updates', 'tab' => 'General', 'roles' => UserRole::CODE_DEVELOPER, 'order' => 300 ], // Administrators 'admins.manage' => [ 'label' => 'Manage Admins', 'tab' => 'Administrators', 'order' => 200 ], 'admins.manage.create' => [ 'label' => 'Create Admins', 'tab' => 'Administrators', 'order' => 300 ], // 'admins.manage.moderate' => [ // 'label' => 'Moderate Admins', // 'comment' => 'Manage account suspension and ban admin accounts', // 'tab' => 'Administrators', // 'order' => 400 // ], 'admins.manage.other_admins' => [ 'label' => 'Manage Other Admins', 'comment' => 'Allow users to reset passwords and update emails.', 'tab' => 'Administrators', 'order' => 700 ], 'admins.manage.delete' => [ 'label' => 'Delete Admins', 'tab' => 'Administrators', 'order' => 800 ], 'admins.roles' => [ 'label' => 'Role Permissions', 'comment' => 'Allow users to create new roles and manage roles lower than their highest role.', 'tab' => 'Administrators', 'order' => 500 ], 'admins.groups' => [ 'label' => 'Team Groups', 'tab' => 'Administrators', 'order' => 600 ], // Preferences 'preferences' => [ 'label' => "Manage Backend Preferences", 'tab' => 'Preferences', 'order' => 400 ], 'preferences.code_editor' => [ 'label' => "Manage Code Editor Preferences", 'tab' => 'Preferences', 'order' => 500 ], // Settings 'settings.customize_backend' => [ 'label' => "Customize Backend Styles", 'tab' => 'Settings', 'order' => 400 ], 'settings.editor_settings' => [ 'label' => 'Global Editor Settings', 'comment' => "Change the global editor preferences.", 'tab' => 'Settings', 'order' => 500 ] ]; } /** * registerFormWidgets */ public function registerFormWidgets() { return [ \Backend\FormWidgets\CodeEditor::class => 'codeeditor', \Backend\FormWidgets\RichEditor::class => 'richeditor', \Backend\FormWidgets\MarkdownEditor::class => 'markdown', \Backend\FormWidgets\FileUpload::class => 'fileupload', \Backend\FormWidgets\Relation::class => 'relation', \Backend\FormWidgets\DatePicker::class => 'datepicker', \Backend\FormWidgets\ColorPicker::class => 'colorpicker', \Backend\FormWidgets\DataTable::class => 'datatable', \Backend\FormWidgets\RecordFinder::class => 'recordfinder', \Backend\FormWidgets\Repeater::class => 'repeater', \Backend\FormWidgets\TagList::class => 'taglist', \Backend\FormWidgets\NestedForm::class => 'nestedform', \Backend\FormWidgets\Sensitive::class => 'sensitive', ]; } /** * registerFilterWidgets */ public function registerFilterWidgets() { return [ \Backend\FilterWidgets\Group::class => 'group', \Backend\FilterWidgets\Date::class => 'date', \Backend\FilterWidgets\Text::class => 'text', \Backend\FilterWidgets\Number::class => 'number', ]; } /** * registerSettings */ public function registerSettings() { return [ 'branding' => [ 'label' => "Branding & Appearance", 'description' => "Customize the administration area such as name, colors and logo.", 'category' => SettingsManager::CATEGORY_BACKEND, 'icon' => 'ph ph-terminal-window', 'class' => \Backend\Models\BrandSetting::class, 'permissions' => ['settings.customize_backend'], 'order' => 400, 'keywords' => 'brand style' ], 'editor' => [ 'label' => "Editor Settings", 'description' => "Change the global editor preferences.", 'category' => SettingsManager::CATEGORY_BACKEND, 'icon' => 'icon-code', 'class' => \Backend\Models\EditorSetting::class, 'permissions' => ['settings.editor_settings'], 'order' => 410, 'keywords' => 'html code class style' ], 'administrators' => [ 'label' => "Administrators", 'description' => "Manage back-end administrator users, groups and permissions.", 'category' => SettingsManager::CATEGORY_TEAM, 'icon' => 'ph ph-users-three', 'url' => Backend::url('backend/users'), 'permissions' => ['admins.manage'], 'order' => 500 ], 'adminroles' => [ 'label' => "Role Permissions", 'description' => "Define permissions for administrators based on their role.", 'category' => SettingsManager::CATEGORY_TEAM, 'icon' => 'icon-id-card-1', 'url' => Backend::url('backend/userroles'), 'permissions' => ['admins.roles'], 'order' => 510 ], 'admingroups' => [ 'label' => "Team Groups", 'description' => "Add administrators to groups used for notifications and features.", 'category' => SettingsManager::CATEGORY_TEAM, 'icon' => 'icon-user-group', 'url' => Backend::url('backend/usergroups'), 'permissions' => ['admins.groups'], 'order' => 520 ], 'myaccount' => [ 'label' => "My Account", 'description' => "Update your account details such as name, email address and password.", 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-user-account', 'url' => Backend::url('backend/users/myaccount'), 'order' => 600, 'context' => 'mysettings', 'keywords' => "security login" ], 'preferences' => [ 'label' => "Backend Preferences", 'description' => "Manage your account preferences such as desired language.", 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-app-window', 'url' => Backend::url('backend/preferences'), 'permissions' => ['preferences'], 'order' => 610, 'context' => 'mysettings' ], 'color_mode' => !BrandSetting::get('show_light_switch') ? null : [ 'label' => "Color Mode", 'category' => SettingsManager::CATEGORY_MYSETTINGS, 'icon' => 'icon-adjust', 'url' => 'javascript:;', 'permissions' => ['preferences'], 'attributes' => [ 'data-control' => 'color-mode-switcher', 'data-lang-light-mode' => __("Light Mode"), 'data-lang-dark-mode' => __("Dark Mode"), 'data-lang-auto-mode' => __("Auto Mode") ], 'order' => 620, 'context' => 'mysettings' ], 'access_logs' => [ 'label' => 'Access Log', 'description' => 'View a list of successful back-end user sign ins.', 'category' => SettingsManager::CATEGORY_LOGS, 'icon' => 'icon-text-lock', 'url' => Backend::url('backend/accesslogs'), 'permissions' => ['utilities.logs'], 'order' => 920 ] ]; } } ================================================ FILE: modules/backend/assets/css/backend/_brand.css ================================================ /* // Light Mode // --------------------------------------------------*/ :root, [data-bs-theme="light"] { /* --bs-border-color: #d7e1ea; */ /* --oc-border-focus: #72809d; */ --bs-emphasis-color: #333333; --bs-border-color: #c4ced7; --bs-backdrop-opacity: 0.2; --oc-border-focus: var(--oc-primary-active-bg); --oc-highlight-color: white; /* // Primary Colors // --------------------------------------------------*/ --bs-success: var(--bs-green); --bs-info: var(--bs-blue); --bs-warning: var(--bs-yellow); --bs-danger: var(--bs-red); --oc-accent: #3498db; --oc-accent-text: #258cd1; /* darker 5% */ --oc-selection: var(--bs-teal); --oc-selection-rgb: 107, 196, 141; --oc-selection-text: #39905a; /* darken 20% */ --oc-primary-bg: white; --oc-primary-color: #5e6d8c; --oc-primary-border: #cfd7e1; --oc-primary-hover-bg: #8082f8; /* tint(#6a6cf7, 15%); */ --oc-primary-active-bg: #8889f9; /* tint(#6a6cf7, 20%); */ --bs-secondary: #72809d; --bs-secondary-color: #72809d; --oc-secondary-bg: #d7e1ea; --oc-secondary-hover-bg: #e0e2e4; /* darken(#eeeff0, 5%); */ --oc-secondary-active-bg: #d3d6d8; /* darken(#eeeff0, 10%); */ --oc-color-neutral: #e5a91a; --oc-color-positive: #95b753; --oc-color-negative: #cc3300; /* // Form Variables // --------------------------------------------------*/ --oc-form-control-bg: white; --oc-form-control-disabled-bg: #e9ecef; --oc-form-control-disabled-color: #899c9d; --oc-input-translatable-color: #75809b; --oc-input-translatable-bg: #ebf0fb; --oc-input-selection-color: #000; --oc-input-selection-bg: #b5d6fd; /* // Component Variables // --------------------------------------------------*/ --oc-mainnav-color: white; --oc-mainnav-bg: #2D3134; --oc-mainnav-icon-color: white; --oc-sidebar-color: #536061; --oc-sidebar-bg: #e9edf3; --oc-sidebar-active-color: #333; --oc-sidebar-active-bg: white; --oc-sidebar-active-border: var(--bs-primary); --oc-sidebar-hover-bg: white; --oc-editor-bg: #f0f4f8; --oc-editor-section-color: #333; --oc-editor-section-bg: #d7e1eA; --oc-editor-tab-color: #5e6d8c; --oc-editor-tab-bg: #e9edf3; --oc-editor-tab-active-color: #2c3e4f; --oc-editor-tab-active-bg: var(--bs-body-bg); --oc-document-toolbar-bg: var(--bs-body-bg); --oc-document-tabs-bg: white; --oc-document-content-bg: white; --oc-document-ruler-bg: #d7e1ea; --oc-document-ruler-color: white; --oc-document-ruler-tick: #bdc3c7; --oc-settings-color: #536061; --oc-settings-bg: #f0f4f8; --oc-settings-item: white; --oc-settings-active-color: white; --oc-settings-active-bg: #6bc48d; --oc-settings-hover-bg: #dfe7ee; --oc-toolbar-color: #536061; --oc-toolbar-bg: white; /* --oc-toolbar-border: #ecf0f1; */ --oc-toolbar-border: #d7e1ea; --oc-toolbar-hover-color: black; --oc-toolbar-hover-bg: rgba(215,225,234,0.7); --oc-tab-color: #72809d; --oc-tab-bg: #ffffff; --oc-tab-active-color: #35425b; --oc-tab-border: #d7e1eA; --oc-tab-hover-bg: rgba(215,225,234,0.7); --oc-dropdown-trigger-border: #bcc3c7; --oc-dropdown-trigger-color: #536061; --oc-dropdown-trigger-bg: white; --oc-dropdown-hover-bg: var(--bs-primary); --oc-dropdown-hover-color: white; --oc-dropdown-active-bg: rgba(var(--bs-primary-rgb), .95); --oc-dropdown-active-color: white; &,.table { --bs-table-color: #536061; --bs-table-bg: white; --bs-table-striped-bg: #f7f9fb; /* --bs-table-border-color: #ecf0f1; */ --bs-table-border-color: #d7e1ea; --bs-table-hover-bg: #fff5cb; --oc-table-active-bg: #fff0b2; /* darken(#fff5cb, 5%); */ } &,.pagination { --bs-pagination-active-bg: var(--bs-primary); --bs-pagination-active-border-color: var(--bs-primary); } &,.breadcrumb { --bs-breadcrumb-item-padding-x: 0.4rem; } &,.modal { --bs-modal-bg: white; } } /* // Dark Mode // --------------------------------------------------*/ [data-bs-theme="dark"] { --bs-heading-color: #e0e0e0; --bs-emphasis-color: white; --bs-border-color: #383a3e; --bs-backdrop-opacity: 0.5; --oc-highlight-color: black; /* // Primary Colors // --------------------------------------------------*/ --bs-blue: #0d6efd; --bs-indigo: #6610f2; --bs-purple: #6f42c1; --bs-pink: #d63384; --bs-red: #dc3545; --bs-orange: #fd7e14; --bs-yellow: #ffc107; --bs-green: #41b862; --bs-teal: #24b58a; --bs-cyan: #0dcaf0; --oc-primary-color: rgba(173, 181, 189, 0.85); --oc-primary-bg: #141515; --oc-primary-border: #494c50; --bs-secondary-color: rgba(173, 181, 189, 0.75); --oc-secondary-bg: #6f6f6f; /* darken(#888, 10%); */ --oc-secondary-hover-bg: #7b7b7b; /* darken(#888, 5%); */ --oc-secondary-active-bg: #888; /* // Form Variables // --------------------------------------------------*/ --oc-form-control-bg: #1e2227; --oc-form-control-disabled-bg: #343a40; --oc-input-translatable-color: rgba(173, 181, 189, 0.85); --oc-input-translatable-bg: #272b2e; --oc-input-selection-color: #e0e0e0; --oc-input-selection-bg: #373f47; /* // Component Variables // --------------------------------------------------*/ --oc-sidebar-color: #d7e1eA; --oc-sidebar-bg: #292a2d; --oc-sidebar-active-color: white; --oc-sidebar-active-bg: #424242; --oc-sidebar-hover-bg: #424242; --oc-editor-bg: #212529; --oc-editor-section-bg: #383a3e; --oc-editor-section-color: #e0e0e0; --oc-editor-tab-color: #adb5bd; --oc-editor-tab-bg: #181a1e; --oc-editor-tab-active-color: #e0e0e0; --oc-editor-tab-active-bg: #202124; --oc-document-toolbar-bg: #202124; --oc-document-tabs-bg: #24262a; --oc-document-content-bg: #181a1e; --oc-document-ruler-bg: #353b42; --oc-document-ruler-color: #1e2227; --oc-document-ruler-tick: #495057; --oc-settings-color: #adb5bd; --oc-settings-bg: #1b1f22; --oc-settings-item: #212529; --oc-settings-active-color: white; --oc-settings-active-bg: #2b3442; --oc-settings-hover-bg: #2b3442; --oc-toolbar-color: #adb5bd; --oc-toolbar-bg: #1e2227; --oc-toolbar-border: #242a30; --oc-toolbar-hover-color: white; --oc-toolbar-hover-bg: #43484e; /* rgba(215,225,234,0.2); */ --oc-tab-color: var(--bs-body-color); --oc-tab-bg: var(--bs-body-bg); --oc-tab-active-color: #e0e0e0; --oc-tab-border: #383a3e; --oc-tab-hover-bg: rgba(215,225,234,0.2); --oc-dropdown-trigger-border: #495057; --oc-dropdown-trigger-color: #e0e0e0; --oc-dropdown-trigger-bg: #12262c; &,.table { --bs-table-color: #adb5bd; --bs-table-bg: #1e2227; --bs-table-striped-bg: rgba(0,0,0,0.05); --bs-table-border-color: #242a30; --bs-table-hover-bg: #35425b; --bs-table-hover-color: #e0e0e0; --oc-table-active-bg: #2c364b; /* darken(#35425b, 5%); */ } &,.modal { --bs-modal-bg: #1a1d21; } } ================================================ FILE: modules/backend/assets/css/backend/_vars.css ================================================ /* // Variables // --------------------------------------------------*/ :root { --bs-body-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; --oc-brand-primary: var(--bs-primary); --oc-brand-secondary: var(--bs-secondary); --oc-brand-success: var(--bs-success); --oc-brand-info: var(--bs-info); --oc-brand-warning: var(--bs-warning); --oc-brand-danger: var(--bs-danger); --oc-brand-light: var(--bs-light); --oc-brand-dark: var(--bs-dark); --oc-body-bg: var(--bs-body-bg); --oc-text-color: var(--bs-body-color); --oc-text-muted: var(--bs-secondary-color); --oc-link-color: var(--bs-link-color); --oc-link-hover-color: var(--bs-link-hover-color); --oc-heading-color: var(--bs-heading-color); --oc-emphasis-color: var(--bs-emphasis-color); --oc-border-color: var(--bs-border-color); --oc-popup-bg: var(--bs-modal-bg); --oc-popup-border: 1px solid rgba(149, 165, 166, 0.2); --oc-backdrop-opacity: var(--bs-backdrop-opacity); /* // "Windex" Z-Index Window Manager // -------------------------------------------------- // // Z-Index frequencies: // // 0-100 - Primary layer (body / content) // 100-200 - Primary menus / dropdowns // // 300-400 - Secondary layer (full screen) // 400-500 - Secondary menus / dropdowns // // 500-600 - Tertiary layer (popups) // 600-700 - Tertiary menus / dropdowns // // 1000-10000 - Reserved for frequency manager // // 10000+ - Always on top */ /* Primary */ --oc-zindex-filter: 10; --oc-zindex-button: 10; --oc-zindex-form: 10; --oc-zindex-checkbox: 10; --oc-zindex-breadcrumb: 10; --oc-zindex-chart: 10; --oc-zindex-tab: 10; --oc-zindex-loader: 10; --oc-zindex-navbar: 100; --oc-zindex-navbar-fixed: 110; /* Secondary */ --oc-zindex-fullscreen: 300; /* Tertiary */ --oc-zindex-modal-background: 500; --oc-zindex-modal: 600; --oc-zindex-popover: 600; --oc-zindex-dropdown: 600; /* Always on top */ --oc-zindex-inspector: 10000; --oc-zindex-datepicker: 10100; --oc-zindex-flashmessage: 10300; --oc-zindex-select: 10400; --oc-zindex-alert: 10500; --oc-zindex-snackbar: 10600; --oc-zindex-tooltip: 10700; } ================================================ FILE: modules/backend/assets/css/controls/settings-nav.css ================================================ html .control-settings-nav { background: var(--oc-settings-bg); } body.has-settings-nav { .control-settings-nav ul.top-level { opacity: 1; } } .control-settings-nav ul.top-level { opacity: 0; } .control-settings-nav-container { width: 300px; } .control-settings-nav { width: 300px; flex-shrink: 0; border-right: 1px solid var(--oc-primary-border); position: sticky; top: 0; height: calc(100vh - 70px); &.is-full { height: 100vh; } .input-clear-search { display: none; } &.is-search-active { .input-clear-search { display: block; } } .settings-nav-scroll-canvas { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .settings-search-toolbar-item { display: block; position: relative; background: var(--oc-form-control-bg); input.form-control { border: none; outline: none; background: transparent; border-radius: 0; border-bottom: 1px solid var(--oc-primary-border); padding-left: 3rem; padding-right: 3rem; height: 40px; } .input-icon-start, .input-icon-end { position: absolute; top: 50%; transform: translateY(-50%); font-size: 1.4rem; margin-top: .1rem; } .input-icon-start { left: 1rem; } .input-icon-end { right: 1rem; } .input-decoration { color: var(--bs-tertiary-color); } .input-clear-search { text-decoration: none; color: var(--bs-body-color); &:hover { color: var(--bs-secondary-color); } } } ul { padding: 0; margin: 0; list-style: none; } ul.top-level { padding-bottom: 20px; } div.scrollbar-thumb { background: rgba(0,0,0,.2) !important; } ul.top-level > li { padding-top: 10px; &[data-status=collapsed] { > div.group { h3 > span.group-collapse { transform: scaleY(-1) translate(0, -10px); } } ul { display: none; } } > div.group { /* This makes the group title stick to the top when scrolling background: var(--oc-settings-bg); position: relative; position: sticky; top: 0; z-index: 1; */ h3 { user-select: none; font-size: 1rem; font-weight: 600; padding: 9px 2px 10px 60px; margin: 0; position: relative; cursor: pointer; > span.group-icon { position: absolute; left: 15px; top: 4px; width: 30px; height: 30px; > i { font-size: 1.4rem; position: absolute; right: 0; top: 50%; transform: translateY(-50%); } } > span.group-collapse { display: block; position: absolute; width: 10px; height: 10px; right: 20px; top: 7px; transform: scaleY(1); transition: all 0.1s ease; font-size: 16px; } } } > ul { li { padding: 1px 10px; a { display: block; position: relative; padding: 5px 5px 3px 50px; text-decoration: none !important; border-radius: 6px; font-size: 1rem; span { display: block; line-height: 150%; &.header { margin-bottom: 3px; } } } a:hover, &.active a { opacity: 1; text-decoration: none; } } } } } /* Item Styling */ .control-settings-nav ul.top-level > li { > div.group h3 { color: var(--oc-settings-color); &:before { color: var(--oc-settings-color); } } } .control-settings-nav ul.top-level > li > ul li { a { color: var(--oc-settings-color); span.header { color: var(--oc-settings-color); } } a:hover { background: var(--oc-settings-hover-bg); color: var(--oc-settings-color); span.header { color: var(--oc-settings-color); } } &.active a { color: var(--oc-settings-active-color); background: var(--oc-settings-active-bg); span.header { color: var(--oc-settings-active-color); } } } .control-settings-nav { .control-scrollbar.vertical > div.scrollbar-scrollbar { margin-right: 0; div.scrollbar-thumb { opacity: 0; transition: opacity 0.1s ease-out; background: rgba(0,0,0,.2); } } &:hover { .control-scrollbar.vertical > div.scrollbar-scrollbar { div.scrollbar-thumb { opacity: 1; } } } } body.drag-noselect { .control-settings-nav { .control-scrollbar.vertical > div.scrollbar-scrollbar { div.scrollbar-thumb { opacity: 1; } } } } /* Expanded */ @media (max-width: 767px) { body.settings-nav-expanded { #layout-body { display: none !important; } .control-settings-nav-container { width: 100%; } .control-settings-nav { display: block !important; margin: 0 auto; border-right: none; border-left: none; flex-shrink: inherit; width: 100%; } } body:not(.settings-nav-expanded) { .control-settings-nav-container, .control-settings-nav { display: none; } } } html body.main-menu-left .control-settings-nav { height: 100vh; } ================================================ FILE: modules/backend/assets/css/main.css ================================================ /* Backend */ @import './backend/_brand.css'; @import './backend/_vars.css'; @import './controls/settings-nav.css'; /* temp */ @import './october.css'; ================================================ FILE: modules/backend/assets/css/october.css ================================================ .clearfix:before,.clearfix:after{content:" ";display:table}.clearfix:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right !important}.pull-left{float:left !important}.oc-hide{display:none !important}.oc-show{display:block !important}.oc-invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none !important;visibility:hidden !important}.t-ww{word-wrap:break-word;word-break:break-word}.t-nw{white-space:nowrap}.w-0{width:0 !important}.w-60{width:60px !important}.w-120{width:120px !important}.w-130{width:130px !important}.w-140{width:140px !important}.w-150{width:150px !important}.w-200{width:200px !important}.w-300{width:300px !important}.w-350{width:350px !important}.mw-400{max-width:400px !important}.mw-450{max-width:450px !important}.mw-500{max-width:500px !important}.mw-550{max-width:550px !important}.mw-600{max-width:600px !important}.mw-650{max-width:650px !important}.mw-700{max-width:700px !important}.mw-750{max-width:750px !important}.mw-800{max-width:800px !important}.mw-850{max-width:850px !important}.mw-900{max-width:900px !important}.mw-950{max-width:950px !important}.mw-1000{max-width:1000px !important}.mw-1050{max-width:1050px !important}.mw-1100{max-width:1100px !important}.mw-1150{max-width:1150px !important}.mw-1200{max-width:1200px !important}.mw-1250{max-width:1250px !important}.mw-1400{max-width:1400px !important}.mw-auto{max-width:auto !important}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);-ms-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);-ms-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);-ms-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}100%{opacity:1;-webkit-transform:none;transform:none}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);-ms-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}100%{opacity:1;-webkit-transform:none;-ms-transform:none;transform:none}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}@keyframes fadeOutDown{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, 100%, 0);-ms-transform:translate3d(0, 100%, 0);transform:translate3d(0, 100%, 0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}@keyframes fadeOutLeft{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(-100%, 0, 0);-ms-transform:translate3d(-100%, 0, 0);transform:translate3d(-100%, 0, 0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}@keyframes fadeOutRight{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(100%, 0, 0);-ms-transform:translate3d(100%, 0, 0);transform:translate3d(100%, 0, 0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}@keyframes fadeOutUp{0%{opacity:1}100%{opacity:0;-webkit-transform:translate3d(0, -100%, 0);-ms-transform:translate3d(0, -100%, 0);transform:translate3d(0, -100%, 0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeCycle{0%{opacity:1}50%{opacity:.5}100%{opacity:1}}@keyframes fadeCycle{0%{opacity:1}50%{opacity:.5}100%{opacity:1}}.fadeCycle{-webkit-animation:fadeCycle 2s infinite;-moz-animation:fadeCycle 2s infinite;animation:fadeCycle 2s infinite}.autocomplete.dropdown-menu{background:var(--bs-modal-bg)}.autocomplete.dropdown-menu li a{padding:3px 12px}body .control-balloon-selector ul{padding:0;display:inline-block;font-size:0}body .control-balloon-selector ul li{list-style:none;line-height:36px;display:inline-block;background-color:var(--oc-form-control-bg);color:var(--bs-body-color);font-size:1rem;padding:0 14px;border:1px solid var(--bs-border-color)}body .control-balloon-selector ul li:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px}body .control-balloon-selector ul li:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px}body .control-balloon-selector ul li.active{background:var(--oc-selection) !important;color:white;border-color:var(--oc-selection);position:relative;z-index:1}body .control-balloon-selector ul li+li{margin-left:-1px}body .control-balloon-selector.control-disabled ul li.active{background-color:#72809d !important;border-color:#72809d !important}body .control-balloon-selector:not(.control-disabled) ul li:hover{background:var(--oc-toolbar-hover-bg);cursor:pointer}body .control-balloon-selector.form-control-sm li{font-size:12px;padding:0 10px;line-height:27px}.form-group .control-balloon-selector ul{margin-bottom:0}:root,[data-bs-theme="light"]{--oc-callout-info-bg:#e6e7fc;--oc-callout-info-icon:#6a6cf7;--oc-callout-warning-bg:#faf6e2;--oc-callout-warning-icon:#e1b810;--oc-callout-danger-bg:#fadad7;--oc-callout-danger-content-bg:#fadad7;--oc-callout-danger-icon:#ff3e1d;--oc-callout-success-bg:#ecf7da;--oc-callout-success-icon:#86cb43}[data-bs-theme="dark"]{--oc-callout-info-bg:#12262c;--oc-callout-warning-bg:#302310;--oc-callout-danger-bg:#330c06;--oc-callout-success-bg:#1b290d}.callout{font-size:14px;margin-bottom:20px}.callout.fade{opacity:0;transition:all .5s,width 0s;transform:scale(.9)}.callout.fade.show{opacity:1;transform:scale(1)}.callout>.close{width:22px;height:22px;margin:15px 15px 0;position:relative;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;opacity:1}.callout>.close:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e93e";color:var(--bs-body-color);font-size:16px;position:relative}.callout>.close:hover:before{color:var(--bs-danger)}.callout>.action{float:right;padding:10px}.callout>.header+.content{border-top:none}.callout>.header{padding:15px 20px 5px;border-radius:4px 4px 0 0;color:var(--bs-body-color);margin-bottom:-1px}.callout>.header>.custom-icon{width:27.5px;text-align:center;font-size:22px;float:left;position:relative;top:-5px;left:-5px}.callout>.header>i,.callout>.header>.custom-icon{display:none}.callout>.header:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;float:left;font-size:22px;position:relative;left:-3px}.callout>.header h3{letter-spacing:0;font-size:14px;font-weight:600;line-height:150%;margin:0}.callout>.header h3,.callout>.header p,.callout>.header ul,.callout>.header ol{margin-left:32px;margin-bottom:7px}.callout>.header ul,.callout>.header ol{padding-left:20px}.callout>.header:last-child{border-radius:4px;margin-bottom:0}.callout>.content{color:var(--bs-body-color);padding:0 20px 15px 52px;border-radius:0 0 4px 4px}.callout>.content h1,.callout>.content h2,.callout>.content h3,.callout>.content h4,.callout>.content h5,.callout>.content h6{color:var(--bs-body-color);text-transform:none;margin:20px 0 5px 0;line-height:150%;font-weight:600}.callout>.content h1{font-size:30px}.callout>.content h2{font-size:26px}.callout>.content h3{font-size:24px}.callout>.content h4{font-size:20px}.callout>.content h5{font-size:18px}.callout>.content h6{font-size:16px}.callout>.content *:last-child{margin-bottom:0}.callout>.content ul,.callout>.content ol{padding-left:20px}.callout>.content ul li,.callout>.content ol li{margin-bottom:5px}.callout>.content .action-panel{padding:10px 0 0 0}.callout.has-custom-icon>.header>.custom-icon{display:block}.callout.has-custom-icon>.header:before{display:none}.callout.no-title>.content{padding-top:15px;border-radius:4px}.callout.no-subheader>.header{padding-bottom:10px}.callout.no-subheader>.header+.content{margin-top:-5px}.callout.no-icon>.header h3,.callout.no-icon>.header p,.callout.no-icon>.header ul,.callout.no-icon>.header ol{margin-left:0}.callout.no-icon>.header:before{display:none}.callout.no-icon>.content{padding-left:20px}.callout.callout-danger>.header{background:var(--oc-callout-danger-bg)}.callout.callout-danger>.header>.custom-icon{color:var(--oc-callout-danger-icon)}.callout.callout-danger>.header:before{content:"\e93d";color:var(--oc-callout-danger-icon)}.callout.callout-danger>.content{background:var(--oc-callout-danger-bg)}.callout.callout-info>.header{background:var(--oc-callout-info-bg)}.callout.callout-info>.header>.custom-icon{color:var(--oc-callout-info-icon)}.callout.callout-info>.header:before{content:"\e93f";color:var(--oc-callout-info-icon)}.callout.callout-info>.content{background:var(--oc-callout-info-bg)}.callout.callout-success>.header{background:var(--oc-callout-success-bg)}.callout.callout-success>.header>.custom-icon{color:var(--oc-callout-success-icon)}.callout.callout-success>.header:before{content:"\e93c";color:var(--oc-callout-success-icon)}.callout.callout-success>.content{background:var(--oc-callout-success-bg)}.callout.callout-warning>.header{background:var(--oc-callout-warning-bg)}.callout.callout-warning>.header>.custom-icon{color:var(--oc-callout-warning-icon)}.callout.callout-warning>.header:before{content:"\e93d";color:var(--oc-callout-warning-icon)}.callout.callout-warning>.content{background:var(--oc-callout-warning-bg)}.callout.is-flush{margin-bottom:0}.callout.is-flush>.content{border-bottom-left-radius:0;border-bottom-right-radius:0}.form-group>.callout{margin-bottom:0}.control-chart{text-align:left}.control-chart div.canvas{display:inline-block;margin-right:20px;margin-bottom:20px;position:relative}.control-chart div.canvas span.center{position:absolute;display:block;text-align:center;width:100%;top:50%;margin-top:-21px;font-size:30px;font-weight:100;color:var(--bs-heading-color);z-index:9}.control-chart div.canvas svg{z-index:10}.control-chart.full-width div.canvas{margin-right:0 !important}.control-chart ul{display:inline-block;height:inherit;margin:0;padding:0;list-style:none;position:relative;vertical-align:top}.control-chart ul li{width:120px;white-space:normal;display:block;text-transform:uppercase;color:var(--bs-heading-color);font-weight:300;font-size:12px;margin-bottom:10px}.control-chart ul li span{float:right;font-weight:600}.control-chart ul li:last-child{margin-bottom:0}.control-chart div.chart-legend{display:inline-block;vertical-align:top;text-align:left}.control-chart div.chart-legend table{font-size:12px;color:var(--bs-body-color)}.control-chart div.chart-legend table tr td{padding:0 0 7px 0;vertical-align:top}.control-chart div.chart-legend table tr td.value{padding-left:10px;font-weight:600;color:var(--bs-secondary-color)}.control-chart div.chart-legend table tr td i{display:inline-block;width:13px;height:13px;border-radius:4px;text-indent:-100000em;margin-right:5px;position:relative;top:2px}.control-chart div.chart-legend table tr td.indicator{width:20px}.control-chart div.chart-legend table tr:last-child td{padding-bottom:0}.control-chart .canvas{margin-right:20px;display:inline-block}.control-chart.centered{text-align:center}.control-chart.centered .canvas{margin-right:0;display:block;margin-left:auto;margin-right:auto}.control-chart.wrap-legend div.chart-legend table tr{display:inline-block;white-space:nowrap;margin-right:20px}.control-chart.wrap-legend div.chart-legend table tr:last-child td{padding-bottom:7px}.report-container .wrapped .control-chart{text-align:left}.report-container .wrapped .control-chart .canvas{margin-right:20px;display:inline-block}.tickLabel,.flot-tick-label{color:#545454}[data-bs-theme="dark"] .tickLabel,[data-bs-theme="dark"] .flot-tick-label{color:#e0e0e0}.title-value span.goal-meter-indicator{float:left;height:24px;width:10px;margin-right:5px;position:relative;top:9px;background:var(--oc-color-negative)}.title-value span.goal-meter-indicator>span{text-indent:-10000em;display:block;position:absolute;width:10px;left:0;bottom:0;background:var(--oc-color-positive);height:0;-webkit-transition:all .2s;transition:all .2s}.title-value.goal-meter-inverse span.goal-meter-indicator{background:var(--oc-color-positive)}.title-value.goal-meter-inverse span.goal-meter-indicator>span{background:var(--oc-color-negative)}.report-container .title-value{margin-top:-18px}.report-container .title-value p{font-weight:100;font-size:40px}.report-container .title-value p.description{font-size:12px;margin-top:9px}.report-container .title-value p:before{font-size:30px;margin-right:10px}.report-container .title-value p.negative:after,.report-container .title-value p.positive:after{top:-8px}.report-container .title-value span.goal-meter-indicator{height:31px;top:4px;width:15px;margin-right:10px}.report-container .title-value span.goal-meter-indicator span{width:15px}.control-status-list>ul{margin-bottom:0;padding:0}.control-status-list>ul li{margin:0;padding:7px 15px 6px;list-style:none;display:block;font-size:13px;color:#7e8c8d;border-bottom:1px solid var(--bs-border-color)}.control-status-list>ul li:last-child{border-bottom:none}.control-status-list>ul li a:not(.btn){color:#7e8c8d;text-decoration:none}.control-status-list>ul li a:not(.btn):hover{color:var(--bs-link-color);text-decoration:none}.control-status-list>ul li a.btn:hover{color:white}.control-status-list>ul li .status-text{margin:0 5px}.control-status-list>ul li .status-text.muted{color:var(--bs-secondary-color)}.control-status-list>ul li .status-text.primary{color:var(--bs-primary)}.control-status-list>ul li .status-text.success{color:#3c763d}.control-status-list>ul li .status-text.info{color:#31708f}.control-status-list>ul li .status-text.warning{color:#8a6d3b}.control-status-list>ul li .status-text.danger{color:#a94442}.control-status-list>ul li .status-label{display:block;float:right;padding:1px 10px}.control-status-list>ul li .status-label.btn{border-radius:20px}.control-status-list>ul li .status-icon{display:inline-block;text-align:center;color:white;width:22px;height:22px;position:relative;top:-1px;-webkit-border-radius:100px;-moz-border-radius:100px;border-radius:100px}.control-status-list>ul li .status-icon>i{font-size:12px;line-height:22px}.control-status-list>ul li .status-icon{background:#999}.control-status-list>ul li .status-icon.success{background:var(--bs-success)}.control-status-list>ul li .status-icon.primary{background:var(--bs-primary)}.control-status-list>ul li .status-icon.warning{background:var(--bs-warning)}.control-status-list>ul li .status-icon.danger{background:var(--bs-danger)}.control-status-list>ul li .status-icon.info{background:var(--bs-info)}.control-status-list>ul li .status-icon.link{background:transparent}.report-container .control-status-list>ul{margin:-15px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul,.control-dropdown.dropdown-menu{padding:0;list-style:none;background-color:var(--bs-modal-bg);position:relative;border:var(--oc-popup-border);box-shadow:-2px 2px 5px rgba(67, 86, 100, 0.12);border-radius:4px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul.is-fixed,.control-dropdown.dropdown-menu.is-fixed{position:fixed !important}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul.offset-left,.control-dropdown.dropdown-menu.offset-left{left:10px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a,.control-dropdown.dropdown-menu>li a,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button,.control-dropdown.dropdown-menu>li button{outline:none;padding:10px 15px;font-size:14px;display:block;color:var(--bs-body-color);position:relative;white-space:nowrap;text-decoration:none}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover,.control-dropdown.dropdown-menu>li a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover,.control-dropdown.dropdown-menu>li button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active,.control-dropdown.dropdown-menu>li a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active,.control-dropdown.dropdown-menu>li button:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active,.control-dropdown.dropdown-menu>li a:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active,.control-dropdown.dropdown-menu>li button:focus:active{color:var(--oc-dropdown-hover-color);background-color:var(--oc-dropdown-hover-bg) !important}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover i,.control-dropdown.dropdown-menu>li a:hover i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover i,.control-dropdown.dropdown-menu>li button:hover i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active i,.control-dropdown.dropdown-menu>li a:active i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active i,.control-dropdown.dropdown-menu>li button:active i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active i,.control-dropdown.dropdown-menu>li a:focus:active i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active i,.control-dropdown.dropdown-menu>li button:focus:active i{color:var(--oc-dropdown-hover-color)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li a:hover[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li button:hover[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li a:active[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li button:active[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li a:focus:active[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li button:focus:active[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:hover[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li a:hover[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:hover[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li button:hover[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li a:active[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li button:active[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li a:focus:active[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li button:focus:active[class*=" oc-icon-"]:before{color:var(--oc-dropdown-hover-color)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:active,.control-dropdown.dropdown-menu>li a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:active,.control-dropdown.dropdown-menu>li button:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a:focus:active,.control-dropdown.dropdown-menu>li a:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button:focus:active,.control-dropdown.dropdown-menu>li button:focus:active{background-color:var(--oc-dropdown-active-bg) !important}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class^="oc-icon-"],.control-dropdown.dropdown-menu>li a[class^="oc-icon-"],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class^="oc-icon-"],.control-dropdown.dropdown-menu>li button[class^="oc-icon-"],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class*=" oc-icon-"],.control-dropdown.dropdown-menu>li a[class*=" oc-icon-"],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class*=" oc-icon-"],.control-dropdown.dropdown-menu>li button[class*=" oc-icon-"]{padding-left:30px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li a[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li button[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li a[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li button[class*=" oc-icon-"]:before{position:absolute;font-size:14px;left:9px;top:14px;color:rgba(var(--bs-body-color-rgb), .6)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a>i,.control-dropdown.dropdown-menu>li a>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button>i,.control-dropdown.dropdown-menu>li button>i{color:rgba(var(--bs-body-color-rgb), .6);font-size:14px;margin-right:4px;margin-left:-2px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) a:hover,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) button:hover,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) a:focus,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) button:focus,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) a:active,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.first-item:not(.disabled) button:active,.control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:active{border-top-left-radius:4px;border-top-right-radius:4px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) a:hover,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) button:hover,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) a:focus,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) button:focus,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:focus,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) a:active,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.last-item:not(.disabled) button:active,.control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:active{border-bottom-left-radius:4px;border-bottom-right-radius:4px}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.dropdown-title,.control-dropdown.dropdown-menu>li.dropdown-title{display:none}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.dropdown-divider,.control-dropdown.dropdown-menu>li.dropdown-divider{margin:0}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.active>a,.control-dropdown.dropdown-menu>li.active>a{font-weight:bold}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a,.control-dropdown.dropdown-menu>li.disabled a,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button,.control-dropdown.dropdown-menu>li.disabled button,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled],.control-dropdown.dropdown-menu>li a[disabled],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled],.control-dropdown.dropdown-menu>li button[disabled],.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:hover,.control-dropdown.dropdown-menu>li.disabled a:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:hover,.control-dropdown.dropdown-menu>li.disabled button:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:hover,.control-dropdown.dropdown-menu>li a[disabled]:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:hover,.control-dropdown.dropdown-menu>li button[disabled]:hover,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:active,.control-dropdown.dropdown-menu>li.disabled a:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:active,.control-dropdown.dropdown-menu>li.disabled button:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:active,.control-dropdown.dropdown-menu>li a[disabled]:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:active,.control-dropdown.dropdown-menu>li button[disabled]:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:focus:active,.control-dropdown.dropdown-menu>li.disabled a:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:focus:active,.control-dropdown.dropdown-menu>li.disabled button:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:focus:active,.control-dropdown.dropdown-menu>li a[disabled]:focus:active,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:focus:active,.control-dropdown.dropdown-menu>li button[disabled]:focus:active{cursor:not-allowed;background-color:var(--bs-modal-bg) !important;color:#98A0A0}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a>i,.control-dropdown.dropdown-menu>li.disabled a>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button>i,.control-dropdown.dropdown-menu>li.disabled button>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]>i,.control-dropdown.dropdown-menu>li a[disabled]>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]>i,.control-dropdown.dropdown-menu>li button[disabled]>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:hover>i,.control-dropdown.dropdown-menu>li.disabled a:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:hover>i,.control-dropdown.dropdown-menu>li.disabled button:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:hover>i,.control-dropdown.dropdown-menu>li a[disabled]:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:hover>i,.control-dropdown.dropdown-menu>li button[disabled]:hover>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:active>i,.control-dropdown.dropdown-menu>li.disabled a:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:active>i,.control-dropdown.dropdown-menu>li.disabled button:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:active>i,.control-dropdown.dropdown-menu>li a[disabled]:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:active>i,.control-dropdown.dropdown-menu>li button[disabled]:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a:focus:active>i,.control-dropdown.dropdown-menu>li.disabled a:focus:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button:focus:active>i,.control-dropdown.dropdown-menu>li.disabled button:focus:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled]:focus:active>i,.control-dropdown.dropdown-menu>li a[disabled]:focus:active>i,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled]:focus:active>i,.control-dropdown.dropdown-menu>li button[disabled]:focus:active>i{color:rgba(var(--bs-body-color-rgb), .6)}.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li.disabled a[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button[class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li.disabled button[class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled][class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li a[disabled][class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled][class^="oc-icon-"]:before,.control-dropdown.dropdown-menu>li button[disabled][class^="oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled a[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li.disabled a[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li.disabled button[class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li.disabled button[class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li a[disabled][class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li a[disabled][class*=" oc-icon-"]:before,.dropdown-menu.backend-dropdownmenu .dropdown-container>ul>li button[disabled][class*=" oc-icon-"]:before,.control-dropdown.dropdown-menu>li button[disabled][class*=" oc-icon-"]:before{color:rgba(var(--bs-body-color-rgb), .6)}@media (hover:hover){.control-dropdown.dropdown-menu>li a:focus,.control-dropdown.dropdown-menu>li button:focus{background:var(--oc-toolbar-hover-bg)}}.touch .control-dropdown.dropdown-menu>li a:hover{color:var(--bs-body-color);background:white}body.dropdown-open .dropdown-overlay{position:fixed;left:0;top:0;right:0;bottom:0;z-index:599}@media (max-width:768px){body.dropdown-open{overflow:hidden}body.dropdown-open .dropdown-overlay{background:rgba(0,0,0,0.4)}body.dropdown-open .control-dropdown.dropdown-menu{overflow:auto;overflow-y:scroll;position:fixed !important;margin:15px !important;top:auto !important;right:0 !important;bottom:0 !important;left:0 !important;transform:none !important;z-index:600;border-radius:8px}body.dropdown-open .control-dropdown.dropdown-menu>li a,body.dropdown-open .control-dropdown.dropdown-menu>li button{font-size:16px;padding-top:12px;padding-bottom:12px}body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) a:active,body.dropdown-open .control-dropdown.dropdown-menu>li.first-item:not(.disabled) button:active{border-top-left-radius:8px;border-top-right-radius:8px}body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:hover,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:focus,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) a:active,body.dropdown-open .control-dropdown.dropdown-menu>li.last-item:not(.disabled) button:active{border-bottom-left-radius:8px;border-bottom-right-radius:8px}}.flash-message.static{color:#ffffff;font-size:14px;padding:10px 30px 10px 15px;word-wrap:break-word;text-align:left;border-radius:4px}.flash-message.static.success{background:var(--bs-success)}.flash-message.static.error{background:#cc3300}.flash-message.static.warning{background:#f0ad4e}.flash-message.static.info{background:#5fb6f5}.flash-message.static button{float:none;position:absolute;right:10px;top:12px;color:white;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;opacity:1;outline:none}.flash-message.static button:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e93e";color:white;font-size:16px;position:relative}.flash-message.static button:hover{opacity:1}.inspector-fields{min-width:220px;border-collapse:collapse;width:100%;table-layout:fixed;border-bottom-right-radius:2px;border-bottom-left-radius:2px}.inspector-fields td,.inspector-fields th{padding:5px 12px;font-size:12px;border-bottom:1px solid var(--oc-primary-border);text-align:left}.inspector-fields th{color:var(--oc-primary-color);width:45%}.inspector-fields td{color:var(--bs-body-color);width:55%}.inspector-fields tr:last-child td,.inspector-fields tr:last-child th{border-bottom:none}.inspector-fields tr:last-child td,.inspector-fields tr:last-child td input[type=text]{border-radius:0 0 2px 0}.inspector-fields tr.group{user-select:none}.inspector-fields tr.group th{font-weight:600;cursor:pointer}.inspector-fields tr.invalid th{color:#c03f31 !important}.inspector-fields tr.control-group{user-select:none}.inspector-fields tr.control-group th,.inspector-fields tr.control-group td{cursor:pointer}.inspector-fields tr.collapsed{display:none}.inspector-fields tr.expanded{display:table-row}.inspector-fields.has-groups th{padding-left:20px}.inspector-fields.has-groups tr.grouped th{padding-left:35px}.inspector-fields:not(:hover) td{border-left-color:transparent}.inspector-fields th{background:var(--oc-form-control-bg)}.inspector-fields td{font-weight:400;border-left:1px solid var(--oc-primary-border);text-overflow:ellipsis;white-space:nowrap;overflow:hidden;background:var(--oc-form-control-bg);transition:border-left-color .35s}.inspector-fields td.text input[type=text]{background:var(--oc-form-control-bg);color:var(--bs-body-color);text-overflow:ellipsis}.inspector-fields td.text input[type=text]::placeholder{font-weight:normal!important;color:#b5babd}.inspector-fields td.text.active{background:var(--oc-form-control-bg)}.inspector-fields td.autocomplete{padding:0;position:relative;overflow:visible}.inspector-fields td.autocomplete .autocomplete-container input[type=text]{padding:5px 12px}.inspector-fields td.autocomplete .autocomplete-container ul.dropdown-menu{background:var(--bs-modal-bg);font-size:12px;z-index:10000}.inspector-fields td.autocomplete .autocomplete-container ul.dropdown-menu li a{padding:5px 12px;white-space:normal;word-wrap:break-word}.inspector-fields td.autocomplete .autocomplete-container .loading-indicator span{margin-top:-12px;right:10px;left:auto}.inspector-fields td.trigger-cell{padding:0!important}.inspector-fields td.trigger-cell a.trigger{display:block;padding:5px 12px 7px 12px;overflow:hidden;min-height:29px;text-overflow:ellipsis;color:var(--oc-primary-color);text-decoration:none}.inspector-fields td.trigger-cell a.trigger.cell-placeholder{color:#b5babd}.inspector-fields td.trigger-cell a.trigger .loading-indicator{background-color:var(--oc-form-control-bg)}.inspector-fields td.trigger-cell a.trigger .loading-indicator span{margin-top:-12px;right:10px;left:auto}.inspector-fields td.dropdown{padding:0!important}.inspector-fields td select{width:90%}.inspector-fields td div.external-param-editor-container{position:relative;padding-right:25px}.inspector-fields td div.external-param-editor-container div.external-editor{bottom:0;margin:-5px -12px;right:30px;left:auto;top:0;position:absolute;transition:left .2s;transform:translateZ(0);will-change:transform}.inspector-fields td div.external-param-editor-container div.external-editor div.controls{position:absolute;width:100%;height:100%;left:0;top:0}.inspector-fields td div.external-param-editor-container div.external-editor div.controls a{position:absolute;left:0;top:0;display:inline-block;height:100%;width:30px;color:var(--oc-primary-color);outline:none}.inspector-fields td div.external-param-editor-container div.external-editor div.controls a i{display:inline-block;position:relative;left:7px;top:5px;font-size:1rem}.inspector-fields td div.external-param-editor-container div.external-editor div.controls input{position:absolute;display:block;border:none;width:100%;height:100%;left:0;top:0;padding-left:30px;padding-right:12px;background:transparent;color:var(--bs-body-color)}.inspector-fields td div.external-param-editor-container.editor-visible div.external-editor div.controls input{background:var(--oc-form-control-bg)}.inspector-fields td.active div.external-param-editor-container div.external-editor div.controls input{background:var(--bs-secondary-bg)}.inspector-fields td.dropdown div.external-param-editor-container div.external-editor,.inspector-fields td.trigger-cell div.external-param-editor-container div.external-editor{height:100%;margin:0;bottom:auto}.inspector-fields th{font-weight:600}.inspector-fields th>div{position:relative}.inspector-fields th>div>div{white-space:nowrap;padding-right:10px;text-overflow:ellipsis;overflow:hidden;width:100%}.inspector-fields th>div>div span.info{display:inline-block;position:absolute;right:3px;top:3px;font-size:14px;width:10px;height:12px;line-height:80%;color:#999}.inspector-fields th>div>div span.info:before{margin-left:3px}.inspector-fields th>div>div span.info:hover{color:var(--bs-emphasis-color)}.inspector-fields th>div a.expandControl{display:block;position:absolute;width:12px;height:12px;left:-15px;top:2px;text-indent:-100000em}.inspector-fields th>div a.expandControl span{position:absolute;display:inline-block;left:0;top:0;width:12px;height:12px}.inspector-fields th>div a.expandControl span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f105";position:absolute;left:4px;top:-2px;width:12px;height:12px;font-size:13px;color:var(--oc-primary-color);text-indent:0}.inspector-fields th>div a.expandControl.expanded span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f107";left:2px}.inspector-fields input[type=text]{display:block;width:100%;border:none;outline:none}.inspector-fields div.form-check{position:relative;top:1px;font-size:1rem}.inspector-fields .select2-container{width:100% !important}.inspector-fields .select2-container .select2-selection{height:29px;line-height:29px;padding:0 3px 0 12px;border:none !important;font-size:12px;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;-webkit-box-shadow:none !important;box-shadow:none !important}.inspector-fields .select2-container .select2-selection.select2-default{font-weight:normal !important}.inspector-fields .select2-container .loading-indicator>span{top:15px}.inspector-fields .select2-container.select2-container--open{-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;border:none !important}.inspector-fields .select2-container .select2-selection__rendered{padding:0 22px 0 0;color:var(--bs-body-color)}.inspector-fields tr.changed td{font-weight:600}.inspector-fields tr.changed td input[type=text]{font-weight:600}.inspector-fields tr.changed td .select2-container .select2-selection{font-weight:600}div.control-popover.control-inspector>div{background:var(--oc-form-control-bg);border:none}div.control-popover.control-inspector>div:before,div.control-popover.control-inspector>div:after{display:none}div.control-popover.control-inspector>div>form{padding:5px 20px 10px}div.control-popover.control-inspector .popover-head{padding-left:20px;padding-right:20px}div.control-popover.control-inspector .inspector-fields th{padding-left:0}div.control-popover.hero>div{border-radius:8px}div.control-popover.hero .popover-head{border-top-right-radius:8px;border-top-left-radius:8px}div.control-popover.hero .popover-head h3{font-weight:normal;font-size:18px}div.control-popover.hero .popover-head .btn-close{top:16px;right:17px}div.control-popover.hero .inspector-fields th,div.control-popover.hero .inspector-fields td{padding:9px 12px;font-weight:600!important;font-size:13px}div.control-popover.hero .inspector-fields th{padding-left:0}div.control-popover.hero .inspector-fields td{font-weight:400!important}div.control-popover.hero .inspector-fields div.custom-select.select2-container .select2-selection{height:36px;line-height:36px}div.control-popover.inspector-temporary-placement{visibility:hidden;left:0!important;top:0!important}.inspector-columns-editor{min-height:400px;margin-bottom:20px;border-bottom:1px solid var(--oc-primary-border)}.inspector-columns-editor .items-column{width:250px}.inspector-columns-editor .inspector-wrapper{background:var(--oc-form-control-bg);border-left:2px solid var(--oc-primary-border)}.inspector-columns-editor .toolbar{padding:20px}.inspector-table-list{border-top:1px solid var(--bs-border-color);user-select:none}div.inspector-dictionary-container{border:1px solid var(--bs-border-color)}div.inspector-dictionary-container .values{height:300px}div.inspector-dictionary-container table.headers{width:100%;border:none}div.inspector-dictionary-container table.headers td{width:50%;padding:7px 5px;font-size:13px;text-transform:uppercase;font-weight:600;color:var(--oc-primary-color);background:var(--oc-primary-bg);border-bottom:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.headers td:first-child{border-right:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.inspector-dictionary-table{width:100%;border:none}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td{width:50%;padding:0!important;border-bottom:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td div{border:1px solid transparent}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td.active div{border-color:var(--oc-accent)}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td input{width:100%;height:100%;display:block;outline:none;border:none;padding:7px 5px;box-shadow:none}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td input:focus{border:none;outline:none}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr td:first-child{border-right:1px solid var(--bs-border-color)}div.inspector-dictionary-container table.inspector-dictionary-table tbody tr:last-child td{border-bottom:none}.inspector-header{background:var(--oc-popup-bg);padding:14px 16px;position:relative;color:var(--oc-primary-color);border-bottom:1px solid rgba(0,0,0,0.15)}.inspector-header h3{font-size:15px;font-weight:600;margin-top:0;margin-bottom:0;padding-right:15px;line-height:130%}.inspector-header p{font-size:12px;font-weight:normal;margin:5px 0 0 0}.inspector-header p:empty{display:none}.inspector-header span,.inspector-header a{text-decoration:none;position:absolute;top:12px;float:none;color:var(--bs-emphasis-color);cursor:pointer;line-height:1;opacity:.4}.inspector-header span:hover,.inspector-header a:hover{opacity:1;color:var(--bs-emphasis-color)}.inspector-header .detach{right:26px;line-height:22px}.inspector-header .close{right:11px;font-size:21px}.inspector-container:empty{display:none}.inspector-container .control-scrollpad{position:absolute}.inspector-field-comment:empty{display:none}ul.autocomplete.dropdown-menu.inspector-autocomplete{background:var(--bs-modal-bg);font-size:12px;z-index:10000}ul.autocomplete.dropdown-menu.inspector-autocomplete li a{padding:5px 12px;white-space:normal;word-wrap:break-word}.select2-dropdown.ocInspectorDropdown{font-size:12px;-webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important;border:none !important}.select2-dropdown.ocInspectorDropdown>.select2-results>.select2-results__options{font-size:12px}.select2-dropdown.ocInspectorDropdown>.select2-results>li>div{padding:5px 12px 5px}.select2-dropdown.ocInspectorDropdown>.select2-results li.select2-no-results{padding:5px 12px 5px}.select2-dropdown.ocInspectorDropdown>.select2-results li>i,.select2-dropdown.ocInspectorDropdown>.select2-results li>img{margin-left:6px}.select2-dropdown.ocInspectorDropdown .select2-search{min-height:26px;position:relative;border-bottom:1px solid var(--bs-border-color)}.select2-dropdown.ocInspectorDropdown .select2-search:after{position:absolute;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f002";right:10px;top:10px;color:#95a5a6}.select2-dropdown.ocInspectorDropdown .select2-search input.select2-search__field{min-height:26px;background:transparent !important;font-size:13px;padding-left:4px;padding-right:20px;border:none}div.control-popover{position:absolute;background-clip:content-box;left:0;top:0;z-index:600;visibility:hidden}div.control-popover.fade,div.control-popover.show{visibility:visible}div.control-popover.fade>div{opacity:0;transition:all .3s,width 0s;transform:scale(.7)}div.control-popover.fade.show>div{opacity:1;transform:scale(1)}div.control-popover>div{position:relative;background:var(--oc-popup-bg);box-shadow:0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24);border-radius:6px}div.control-popover>div:after,div.control-popover>div:before{position:absolute}div.control-popover>div:after{z-index:601}div.control-popover>div:before{z-index:600}div.control-popover.placement-bottom>div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid var(--oc-popup-bg);left:15px;top:-8px}div.control-popover.placement-bottom>div:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-bottom:9px solid rgba(0,0,0,0.15);left:14px;top:-9px}div.control-popover.placement-bottom.placement-bottom-right>div:after{left:auto;right:15px}div.control-popover.placement-bottom.placement-bottom-right>div:before{left:auto;right:14px}div.control-popover.placement-top>div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid var(--oc-popup-bg);border-bottom-width:0;left:15px;bottom:-8px}div.control-popover.placement-top>div:before{content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid rgba(0,0,0,0.15);border-bottom-width:0;left:14px;bottom:-9px}div.control-popover.placement-left>div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid var(--oc-popup-bg);right:-8px;top:7px}div.control-popover.placement-left>div:before{content:'';display:block;width:0;height:0;border-top:8.5px solid transparent;border-bottom:8.5px solid transparent;border-left:9px solid rgba(0,0,0,0.15);right:-9px;top:6px}div.control-popover.placement-right>div:after{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid var(--oc-popup-bg);left:-8px;top:7px}div.control-popover.placement-right>div:before{content:'';display:block;width:0;height:0;border-top:8.5px solid transparent;border-bottom:8.5px solid transparent;border-right:9px solid rgba(0,0,0,0.15);left:-9px;top:6px}div.control-popover div.popover-body{padding:15px}div.control-popover div.popover-body.form-container{padding-bottom:0}div.control-popover div.popover-footer{padding:0 20px 20px 20px}div.control-popover .popover-head{background:var(--oc-popup-bg);padding:14px 16px;position:relative;color:var(--oc-primary-color);border-top-right-radius:6px;border-top-left-radius:6px;border-bottom:1px solid rgba(0,0,0,0.15)}div.control-popover .popover-head:before{z-index:602;position:absolute}div.control-popover .popover-head h3{font-size:14px;font-weight:600;margin-top:0;margin-bottom:0;padding-right:15px;line-height:130%}div.control-popover .popover-head p{font-size:12px;font-weight:normal;margin:5px 0 0 0}div.control-popover .popover-head p:empty{display:none}div.control-popover .popover-head .btn-close,div.control-popover .popover-head .close{float:none;position:absolute;right:11px;top:12px;color:var(--oc-primary-color);outline:none;opacity:.4}div.control-popover .popover-head .btn-close:hover,div.control-popover .popover-head .close:hover{opacity:1}div.control-popover .popover-head .inspector-move-to-container{opacity:.4;position:absolute;top:14px;right:26px;float:none;color:var(--bs-emphasis-color);cursor:pointer;text-decoration:none;line-height:17px}div.control-popover .popover-head .inspector-move-to-container:hover{opacity:1;color:var(--bs-emphasis-color)}div.control-popover .popover-head .inspector-move-to-container:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}div.control-popover.placement-bottom .popover-head:before{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid var(--oc-popup-bg);left:15px;top:-8px}div.control-popover.placement-left .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid var(--oc-popup-bg);right:-8px;top:7px}div.control-popover.placement-right .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid var(--oc-popup-bg);left:-8px;top:7px}div.control-popover.popover-danger>div{color:#fff;background-color:#ab2a1c}div.control-popover.popover-danger>div .popover-head p,div.control-popover.popover-danger>div .popover-head h3{color:#fff}div.control-popover.popover-danger>div .popover-head .btn-close{filter:var(--bs-btn-close-white-filter)}div.control-popover.popover-danger.placement-top>div:after{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-top:8px solid #ab2a1c;border-bottom-width:0}div.control-popover.popover-danger.placement-bottom>div:after,div.control-popover.popover-danger.placement-bottom .popover-head:before{content:'';display:block;width:0;height:0;border-left:7.5px solid transparent;border-right:7.5px solid transparent;border-bottom:8px solid #ab2a1c}div.control-popover.popover-danger.placement-left>div:after,div.control-popover.popover-danger.placement-left .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-left:8px solid #ab2a1c}div.control-popover.popover-danger.placement-right>div:after,div.control-popover.popover-danger.placement-right .popover-head:before{content:'';display:block;width:0;height:0;border-top:7.5px solid transparent;border-bottom:7.5px solid transparent;border-right:8px solid #ab2a1c}div.control-popover.popover-danger .popover-head{color:#fff;background-color:#ab2a1c;border-bottom:2px solid rgba(255,255,255,0.15)}div.control-popover.popover-danger .popover-head .close{color:#fff;text-shadow:none}div.control-popover div.popover-fixed-height{height:300px}.popover-highlight{position:relative;z-index:598 !important}.popover-highlight:hover,.popover-highlight:active,.popover-highlight:focus{z-index:598 !important}div.popover-overlay-container{position:fixed;left:0;top:0;right:0;bottom:0;z-index:597;font-size:14px}div.popover-overlay-container>div.control-popover>div{border-radius:4px}div.popover-overlay{position:fixed;left:0;top:0;right:0;bottom:0;background:rgba(0, 0, 0, var(--bs-backdrop-opacity));z-index:597;display:none}div.popover-overlay.show{display:block}@media (max-width:768px){body.popover-open{overflow:hidden}body.popover-open .control-popover{overflow:auto;overflow-y:scroll;position:fixed;margin:0;padding:10px;width:100% !important;z-index:603;top:auto !important;right:0 !important;bottom:0 !important;left:0 !important}body.popover-open .control-popover>div{padding:0}body.popover-open .control-popover>div:before,body.popover-open .control-popover>div:after{display:none}body.popover-open .control-popover div.popover-fixed-height{height:100%;min-height:100%}body.popover-open .control-popover .popover-head:before{display:none}div.popover-overlay{display:block}}.modal{z-index:600}.modal-backdrop{z-index:490;background-color:rgba(0, 0, 0, var(--bs-backdrop-opacity))}.modal-content{border:var(--oc-popup-border);border-radius:8px;box-shadow:0 0 32px rgba(67, 86, 100, 0.2);background:var(--oc-popup-bg)}.modal-content.popup-shaking{-webkit-animation:popup-shake .82s cubic-bezier(.36, .07, .19, .97) both;animation:popup-shake .82s cubic-bezier(.36, .07, .19, .97) both;-webkit-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.modal-content .modal-header{background:transparent;color:var(--bs-heading-color);border-top-right-radius:4px;border-top-left-radius:4px;padding:15px 20px;border-bottom:var(--oc-popup-border)}.modal-content .modal-header h4{font-weight:normal;font-size:18px}.modal-content .modal-header button.close{width:19px;height:19px;border-radius:20px;position:relative;top:5px;opacity:1;font-size:0;color:transparent}.modal-content .modal-header button.close:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e93e";color:#35425b;font-size:16px;position:relative;top:-1px}.modal-content .modal-header button.close:hover:after{color:var(--bs-danger)}.modal-content .modal-header button.close:focus{outline:none;background-color:var(--oc-toolbar-hover-bg)}.modal-content .modal-body{padding:20px 20px 0 20px}.modal-content .modal-body>p:last-child{margin-bottom:20px}.modal-content .modal-body.modal-no-header{padding-top:20px}.modal-content .modal-body.modal-no-footer{padding-bottom:20px}.modal-content .modal-footer{background:transparent;border:none;margin-top:0;padding:0 20px 20px 20px;justify-content:flex-start}.modal-content .modal-footer>.pull-right{margin-left:auto}.modal-content .modal-footer>*:first-child{margin-left:0}.modal-content .modal-footer>*:last-child{margin-right:0}.modal-content .modal-footer .btn-link{padding-left:5px;padding-right:5px}.modal-dialog{max-width:598px}.modal-dialog.size-adaptive{max-width:100%;padding-right:50px;padding-left:50px}.modal-dialog.adaptive-height{height:100%;min-height:600px;margin-top:0;margin-bottom:0;padding-top:50px;padding-bottom:50px}.modal-dialog.adaptive-height .modal-content{height:100%}@media (min-width:768px){.modal-dialog.size-tiny{max-width:300px}.modal-dialog.size-small{max-width:400px}}@media (min-width:992px){.modal-dialog.size-large{max-width:750px}.modal-dialog.size-huge{max-width:900px}.modal-dialog.size-giant{max-width:982px}}@media (max-width:768px){.modal-dialog.size-adaptive{max-width:auto;padding:5px 0;margin:0}}.modal-dialog.size-400{max-width:400px}.modal-dialog.size-450{max-width:450px}.modal-dialog.size-500{max-width:500px}.modal-dialog.size-550{max-width:550px}.modal-dialog.size-600{max-width:600px}.modal-dialog.size-650{max-width:650px}.modal-dialog.size-700{max-width:700px}.modal-dialog.size-750{max-width:750px}.modal-dialog.size-800{max-width:800px}.modal-dialog.size-850{max-width:850px}.modal-dialog.size-900{max-width:900px}.modal-dialog.size-950{max-width:950px}.modal-dialog.size-1000{max-width:1000px}.modal-dialog.size-1050{max-width:1050px}.modal-dialog.size-1100{max-width:1100px}.modal-dialog.size-1200{max-width:1200px}.modal-dialog.size-1400{max-width:1400px}.modal-dialog.size-auto{max-width:auto;padding:5px 0;margin:0}.control-popup.fade:not(.show){pointer-events:none}.control-popup.fade .modal-dialog{opacity:0;-webkit-transition:all 0.3s, width 0s;transition:all 0.3s, width 0s;-webkit-transform:scale(0.7);-ms-transform:scale(0.7);transform:scale(0.7)}.control-popup.fade.show .modal-dialog{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}.popup-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:490;background-color:rgba(0, 0, 0, var(--bs-backdrop-opacity));opacity:1}.popup-backdrop .popup-loading-indicator{background:var(--oc-popup-bg);display:block;width:100px;height:100px;position:absolute;top:130px;left:50%;margin-left:-50px;transition:all .3s,width 0s;transform:scale(.7);opacity:0}.popup-backdrop .popup-loading-indicator:after{--loader-size:50px;content:'';position:absolute;top:50%;left:50%;width:var(--loader-size);height:var(--loader-size);margin-top:calc(var(--loader-size) / -2);margin-left:calc(var(--loader-size) / -2);border:4px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.popup-backdrop.loading .popup-loading-indicator{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}@-moz-keyframes popup-shake{10%,90%{-moz-transform:translate3d(-1px, 0, 0)}20%,80%{-moz-transform:translate3d(2px, 0, 0)}30%,50%,70%{-moz-transform:translate3d(-4px, 0, 0)}40%,60%{-moz-transform:translate3d(4px, 0, 0)}}@-webkit-keyframes popup-shake{10%,90%{-webkit-transform:translate3d(-1px, 0, 0)}20%,80%{-webkit-transform:translate3d(2px, 0, 0)}30%,50%,70%{-webkit-transform:translate3d(-4px, 0, 0)}40%,60%{-webkit-transform:translate3d(4px, 0, 0)}}@keyframes popup-shake{10%,90%{transform:translate3d(-1px, 0, 0)}20%,80%{transform:translate3d(2px, 0, 0)}30%,50%,70%{transform:translate3d(-4px, 0, 0)}40%,60%{transform:translate3d(4px, 0, 0)}}.control-toolbar{font-size:0;padding:0 0 10px 0;position:relative;display:table;table-layout:fixed;width:100%}.control-toolbar .toolbar-divider{margin-right:1px;display:inline-block;height:1em;padding:10px 0;border-right:1px solid var(--oc-toolbar-border);border-left:1px solid var(--bs-border-color);width:1px;vertical-align:middle;margin-right:8px}.control-toolbar .toolbar-item{position:relative;white-space:nowrap;display:table-cell;vertical-align:top;padding-right:10px}.control-toolbar .toolbar-item:last-child,.control-toolbar .toolbar-item.last{padding-right:0}.control-toolbar .toolbar-item.toolbar-primary{position:relative}.control-toolbar .toolbar-item.toolbar-primary:after,.control-toolbar .toolbar-item.toolbar-primary:before{content:'';position:absolute;top:0;bottom:0;width:10px;z-index:2;opacity:0;transition:opacity .1s ease-out}.control-toolbar .toolbar-item.toolbar-primary:before{background:transparent linear-gradient(90deg, #000 0%, rgba(0,0,0,0) 100%);left:10px}.control-toolbar .toolbar-item.toolbar-primary:after{background:transparent linear-gradient(270deg, #000 0%, rgba(0,0,0,0) 100%);right:-10px}.control-toolbar .toolbar-item.toolbar-primary.scroll-before:before{opacity:.15}.control-toolbar .toolbar-item.toolbar-primary.scroll-after:after{opacity:.15}.control-toolbar .toolbar-item.toolbar-primary:before{left:-3px}.control-toolbar .toolbar-item.toolbar-primary:after{right:13px}.control-toolbar .toolbar-item.toolbar-setup{width:28px;vertical-align:middle}.control-toolbar .toolbar-item.toolbar-setup a{padding:8px 15px}.control-toolbar .toolbar-item.toolbar-setup a>span{display:block;color:var(--oc-toolbar-color);width:24px;height:24px;text-align:center;border-radius:3px}.control-toolbar .toolbar-item.toolbar-setup a>span:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e90c";font-size:14px;line-height:24px;display:inline-block;vertical-align:middle}.control-toolbar .toolbar-item.toolbar-setup a:hover>span{color:var(--oc-toolbar-hover-color);background:var(--oc-toolbar-hover-bg)}.control-toolbar .btn,.control-toolbar .btn-group,.control-toolbar .dropdown,.control-toolbar .btn-container{white-space:nowrap;float:none;display:inline-block;margin-right:10px}.control-toolbar .btn:last-child,.control-toolbar .btn-group:last-child,.control-toolbar .dropdown:last-child,.control-toolbar .btn-container:last-child{margin-right:0}.control-toolbar .btn.standalone,.control-toolbar .btn-group.standalone,.control-toolbar .dropdown.standalone,.control-toolbar .btn-container.standalone{margin-right:15px}.control-toolbar .dropdown>.btn{margin-right:0}.control-toolbar .btn-group>.btn,.control-toolbar .btn-group>.dropdown{margin-right:0;display:inline-block;float:none}.control-toolbar .btn-group .dropdown>.btn{margin-right:0;border-bottom-right-radius:0;border-top-right-radius:0}.control-toolbar .btn-group .dropdown.last>.btn{border-bottom-right-radius:4px !important;border-top-right-radius:4px !important}.control-toolbar input.form-control[type=text]{height:auto;padding:7px 13px 6px}.control-toolbar.toolbar-padded{padding:20px}.control-toolbar.flex{display:flex;flex-direction:row}.control-toolbar.flex .toolbar-item{display:block;flex:1 1 auto}.control-toolbar.flex .toolbar-item.fix-width{flex:0 0 auto}.relation-toolbar .control-toolbar .btn,.control-toolbar.toolbar-form .btn{line-height:inherit;display:inline-block;color:inherit;padding:0 6px;min-width:40px;text-align:center;text-decoration:none !important;border-radius:4px;outline:none;box-shadow:none;-webkit-appearance:none;border:none;background:transparent;color:var(--oc-toolbar-color);font-size:14px;margin-right:8px;line-height:30px}.relation-toolbar .control-toolbar .btn.control-button,.control-toolbar.toolbar-form .btn.control-button{color:var(--oc-toolbar-color);font-size:14px;margin-right:8px;line-height:30px}.relation-toolbar .control-toolbar .btn.icon-only,.control-toolbar.toolbar-form .btn.icon-only{min-width:30px}.relation-toolbar .control-toolbar .btn[disabled],.control-toolbar.toolbar-form .btn[disabled]{cursor:default}.relation-toolbar .control-toolbar .btn[disabled]>i,.control-toolbar.toolbar-form .btn[disabled]>i,.relation-toolbar .control-toolbar .btn[disabled]>span,.control-toolbar.toolbar-form .btn[disabled]>span,.relation-toolbar .control-toolbar .btn[disabled]:after,.control-toolbar.toolbar-form .btn[disabled]:after{opacity:.5}.relation-toolbar .control-toolbar .btn i,.control-toolbar.toolbar-form .btn i{display:inline-block;position:relative;font-size:16px;top:1px}.relation-toolbar .control-toolbar .btn i+span.button-label,.control-toolbar.toolbar-form .btn i+span.button-label{margin-left:6px}.relation-toolbar .control-toolbar .btn:not([disabled]):hover,.control-toolbar.toolbar-form .btn:not([disabled]):hover{background:var(--oc-toolbar-hover-bg)}.relation-toolbar .control-toolbar .btn:not([disabled]):focus,.control-toolbar.toolbar-form .btn:not([disabled]):focus{background:var(--oc-toolbar-hover-bg)}.relation-toolbar .control-toolbar .btn.has-menu:after,.control-toolbar.toolbar-form .btn.has-menu:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e90a";font-size:16px;vertical-align:middle;margin-left:0;margin-right:-3px;position:relative;top:-1px}[data-control~=toolbar]{white-space:nowrap;width:100%;overflow:hidden;padding:.3rem;margin:-0.3rem}@media (pointer:coarse){[data-control~=toolbar].is-native-drag{overflow:auto}}.clear-input-text{padding:0 5px;cursor:pointer;border:none;border-radius:100px;-webkit-appearance:none;font-size:21px;font-weight:bold;line-height:1;color:var(--bs-emphasis-color);text-shadow:0 1px 0 var(--bs-body-bg);font-family:sans-serif;display:inline-block;position:absolute;right:3px;top:0;bottom:0;margin:auto;background-color:var(--oc-form-control-bg);height:28px;width:26px;z-index:2}.clear-input-text>i{opacity:1;width:16px;height:16px;background-position:-16px -38px;display:block}.clear-input-text:hover,.clear-input-text:focus{text-decoration:none;cursor:pointer}.clear-input-text:focus{outline:none}.control-toolbar.form-toolbar{background-color:var(--oc-content-tab-content-bg);border-radius:6px}.control-toolbar.form-toolbar .btn-outline-secondary{--bs-btn-color:var(--bs-body-color)}.control-toolbar.form-toolbar .btn{--bs-btn-padding-x:.5rem;--bs-btn-padding-y:.4rem;border:none;font-size:14px;margin-right:8px;transition:all .15s ease-in-out}.control-toolbar.form-toolbar .btn:before{transition:color .15s ease-in-out}.control-toolbar.form-toolbar .btn,.control-toolbar.form-toolbar .btn:before{color:var(--bs-body-color)}.control-toolbar.form-toolbar .btn:hover,.control-toolbar.form-toolbar .btn:focus:hover,.control-toolbar.form-toolbar .btn:active,.control-toolbar.form-toolbar .btn:focus-visible,.control-toolbar.form-toolbar .btn:hover:before,.control-toolbar.form-toolbar .btn:focus:hover:before,.control-toolbar.form-toolbar .btn:active:before,.control-toolbar.form-toolbar .btn:focus-visible:before{color:#fff}.control-toolbar.editor-toolbar{padding:0;background:#ffffff;border-bottom-right-radius:0;border-bottom-left-radius:0;border-bottom:1px solid var(--oc-toolbar-border)}.control-toolbar.editor-toolbar .toolbar-item .btn,.control-toolbar.editor-toolbar .toolbar-item .btn-group,.control-toolbar.editor-toolbar .toolbar-item .dropdown{margin:0;padding:0}.control-toolbar.editor-toolbar .toolbar-item .btn{text-align:center;height:38px;width:38px;line-height:38px;color:#333;background:transparent;user-select:none;box-shadow:none;text-shadow:none;border-radius:0;font-size:14px}.control-toolbar.editor-toolbar .toolbar-item .btn>i{opacity:1}.control-toolbar.editor-toolbar .toolbar-item .btn:hover{outline:none;background-color:#ddd;color:#000}.control-toolbar.editor-toolbar .toolbar-item .btn.active,.control-toolbar.editor-toolbar .toolbar-item .btn:active{outline:none;background-color:#d6d6d6;color:#000}.control-toolbar.editor-toolbar .toolbar-item .btn.disabled,.control-toolbar.editor-toolbar .toolbar-item .btn[disabled]{opacity:1;color:#bdbdbd;cursor:default;background:transparent}.control-toolbar.editor-toolbar .toolbar-item .dropdown.open .btn{background-color:#d6d6d6;color:#000}.control-toolbar.editor-toolbar .toolbar-item .btn[class^="oc-icon-"]:before,.control-toolbar.editor-toolbar .toolbar-item .btn[class*=" oc-icon-"]:before{opacity:1;margin:0}.control-toolbar.editor-toolbar .toolbar-item .btn.oc-autumn-button{color:#c03f31}.control-toolbar.editor-toolbar .toolbar-item .btn.oc-autumn-button:hover{color:#000 !important}#layout-side-panel div.control-toolbar,.compact-toolbar div.control-toolbar,#layout-side-panel div.control-toolbar.toolbar-padded,.compact-toolbar div.control-toolbar.toolbar-padded{padding:0}#layout-side-panel div.control-toolbar.separator,.compact-toolbar div.control-toolbar.separator{border-bottom:1px solid var(--oc-toolbar-border)}#layout-side-panel div.control-toolbar .toolbar-item,.compact-toolbar div.control-toolbar .toolbar-item{padding-right:0}#layout-side-panel div.control-toolbar .btn,.compact-toolbar div.control-toolbar .btn{border-radius:0 !important;padding-top:12px;padding-bottom:13px;margin-right:0;box-shadow:none}#layout-side-panel div.control-toolbar input.form-control,.compact-toolbar div.control-toolbar input.form-control{border:none;padding:11px 13px 12px;height:auto;border-radius:0 !important}#layout-side-panel div.control-toolbar input.form-control.icon.search,.compact-toolbar div.control-toolbar input.form-control.icon.search{background-position:right -78px}#layout-side-panel div.control-toolbar div.loading-indicator-container.size-input-text .loading-indicator,.compact-toolbar div.control-toolbar div.loading-indicator-container.size-input-text .loading-indicator{top:6px}.tooltip{z-index:10700;font-size:13px}.form-check-input:checked,.form-check-input[type=checkbox]:indeterminate{background-color:var(--bs-primary);border-color:var(--bs-primary)}.backend-icon-background{background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.backend-icon-background{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}.backend-icon-background.entity-small{position:relative;width:10px;height:10px}.backend-icon-background.entity-small.cms-page{background-position:-129px 0}.backend-icon-background.entity-small.cms-partial{background-position:-180px -20px}.backend-icon-background.entity-small.cms-content{background-position:-206px -20px}.backend-icon-background.entity-small.cms-layout{background-position:-193px -20px}.backend-icon-background.entity-small.cms-asset{background-position:-219px -20px}.backend-icon-background.entity-small.tailor-blueprint{background-position:-180px -60px}.backend-icon-background.entity-small.text{background-position:-142px 0}.backend-icon-background.monaco-document{position:relative;width:16px;height:16px}.backend-icon-background.monaco-document.php{background-position:-181px -38px}.backend-icon-background.monaco-document.html{background-position:-203px -38px}.backend-icon-background-pseudo:before{content:'';background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.backend-icon-background-pseudo:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}[data-bs-theme="dark"] .backend-icon-background-pseudo:before{background-image:url('../foundation/elements/backendicons/backend-icons-dark.png')}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){[data-bs-theme="dark"] .backend-icon-background-pseudo:before{background-image:url('../foundation/elements/backendicons/backend-icons-dark@2x.png')}}body.breadcrumb-flush .control-breadcrumb,.control-breadcrumb.breadcrumb-flush{margin-bottom:0}.control-breadcrumb>ol>li>a{text-decoration:underline}body.compact-container .control-breadcrumb{margin-top:20px;margin-left:20px;margin-right:20px}body.compact-container .control-breadcrumb>ol{margin-bottom:0}body.slim-container .layout-container .control-breadcrumb{margin-left:20px;margin-right:20px}.btn{--bs-btn-padding-x:1.25rem;--bs-btn-padding-y:.5rem}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y:.5rem;--bs-btn-padding-x:1.5rem;--bs-btn-font-size:1.15rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y:.4rem;--bs-btn-padding-x:.85rem}.btn-default,.btn-primary,.btn-secondary,.btn-success,.btn-info,.btn-warning,.btn-danger{--bs-btn-box-shadow:rgba(20,19,78,0.32) 0 1px 1px 0, var(--bs-btn-bg) 0 0 0 1px, rgba(64,68,82,0.08) 0 2px 5px 0;box-shadow:var(--bs-btn-box-shadow);border:none}.btn-primary{--bs-btn-font-weight:600;--bs-btn-bg:var(--bs-primary);--bs-btn-hover-bg:var(--oc-primary-hover-bg);--bs-btn-active-bg:var(--oc-primary-active-bg)}.btn-secondary{--bs-btn-color:var(--bs-emphasis-color);--bs-btn-bg:var(--oc-secondary-bg);--bs-btn-hover-color:var(--bs-emphasis-color);--bs-btn-hover-bg:var(--oc-secondary-hover-bg);--bs-btn-active-color:var(--bs-emphasis-color);--bs-btn-active-bg:var(--oc-secondary-active-bg);--bs-btn-disabled-bg:var(--oc-secondary-bg);--bs-btn-disabled-color:var(--bs-body-color);--bs-btn-box-shadow:rgba(0,0,0,0.12) 0 1px 1px 0, rgba(64,68,82,0.16) 0 0 0 1px, rgba(64,68,82,0.08) 0 2px 5px 0}.btn-primary,.btn-success,.btn-info,.btn-warning,.btn-danger{--bs-btn-color:#fff;--bs-btn-hover-color:#fff;--bs-btn-active-color:#fff;--bs-btn-disabled-color:rgba(255,255,255,0.6)}.btn-success{--bs-btn-hover-bg:var(--bs-success)}.btn-info{--bs-btn-hover-bg:var(--bs-info)}.btn-warning{--bs-btn-hover-bg:var(--bs-warning)}.btn-default{--bs-btn-color:#fff;--bs-btn-bg:var(--bs-secondary);--bs-btn-border-color:var(--bs-secondary);--bs-btn-hover-color:#fff;--bs-btn-hover-bg:var(--oc-primary-hover-bg);--bs-btn-hover-border-color:var(--oc-primary-hover-bg);--bs-btn-focus-shadow-rgb:90, 92, 210;--bs-btn-active-color:#fff;--bs-btn-active-bg:var(--oc-primary-active-bg);--bs-btn-active-border-color:var(--oc-primary-active-bg);--bs-btn-active-shadow:inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color:#f0f0f0;--bs-btn-disabled-bg:var(--bs-secondary);--bs-btn-disabled-border-color:var(--bs-secondary)}.btn-link.text-muted{text-decoration:underline}.btn-link.text-muted:hover,.btn-link.text-muted:focus-visible{color:#124364 !important}.input-group .btn{--bs-btn-box-shadow:none}.btn-outline-default,.btn-outline-primary,.btn-outline-success,.btn-outline-info,.btn-outline-warning,.btn-outline-danger{--bs-btn-hover-color:#fff;--bs-btn-active-color:#f0f0f0}.btn-outline-default{--bs-btn-hover-bg:var(--oc-brand-primary);--bs-btn-active-bg:var(--oc-brand-primary)}.button-separator{color:var(--bs-secondary-color);margin:0 10px;font-size:14px;padding-bottom:2px}.button-separator+.btn-link{margin-left:-5px}.btn[class^="oc-icon-"]:before,.btn[class*=" oc-icon-"]:before{font-size:14px;line-height:14px;position:relative;text-decoration:none}.btn i{font-size:14px;line-height:14px;position:relative;top:1px;text-decoration:none;margin-right:4px}.btn-group .btn{border-right:1px solid rgba(0,0,0,0.09);margin-left:0 !important}.btn-group .btn:last-child,.btn-group .btn.last{border-right:none}.btn-group .btn.last{border-bottom-right-radius:4px !important;border-top-right-radius:4px !important}.btn-group>.dropdown{float:left}.btn-group>.dropdown:not(:last-child, .last)>.btn{border-right:1px solid rgba(0,0,0,0.09);border-bottom-right-radius:0 !important;border-top-right-radius:0 !important}.btn-group>.dropdown:not(:first-child)>.btn{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.btn-group>.dropdown.last .btn{border-right:none}.btn.offset-right,.btn-group.offset-right{margin-right:10px}.btn-icon{display:inline-block;height:36px;font-size:21px;background:transparent;border:none;outline:none;border-radius:.3rem;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.btn-icon:before{display:block;color:#bcc3c7}.btn-icon:focus-visible{box-shadow:0 0 0 .25rem rgba(53,66,91,0.1)}.btn-icon:hover:before{color:var(--bs-link-color)}.btn-icon.danger:hover:before{color:#c63e26}.btn-icon.pull-right:before{margin-right:0}.btn-icon.margin-left{margin-left:5px}.btn-icon.small{font-size:17px;height:17px;line-height:15px}.btn-icon.larger{font-size:21px;height:21px;line-height:17px}.btn-text{font-size:14px;color:var(--bs-secondary-color);vertical-align:middle;display:inline-block;padding:8px 0}.btn-text a,.btn-text .btn.btn-link{font-size:14px;color:var(--bs-secondary-color);text-decoration:underline;vertical-align:baseline}.btn-text a:hover,.btn-text .btn.btn-link:hover{color:var(--bs-link-color)}.btn-circle{width:30px;height:30px;text-align:center;padding-left:0;padding-right:0;font-size:12px;line-height:1.42857143;border-radius:30px}.btn-circle i{margin:0}.btn-circle.btn-lg{width:50px;height:50px;font-size:18px;line-height:1.33;border-radius:25px}.btn-circle.btn-xl{width:70px;height:70px;font-size:24px;line-height:1.33;border-radius:35px}div.scoreboard{position:relative;padding:0}div.scoreboard:after,div.scoreboard:before{display:none;position:absolute;top:50%;margin-top:-7px;height:9px;font-size:10px;color:#bbbbbb}div.scoreboard:before{left:-6px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f104"}div.scoreboard:after{right:-8px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f105"}div.scoreboard.scroll-before:before{display:block}div.scoreboard.scroll-after:after{display:block}div.scoreboard:before,div.scoreboard:after{margin-top:-10px}div.scoreboard:before{left:7px}div.scoreboard:after{right:10px}div.scoreboard div.scoreboard-item{display:inline-block;margin-right:40px;margin-bottom:20px;vertical-align:top}div.scoreboard div.scoreboard-item:last-child{margin-right:0}div.scoreboard div.scoreboard-item.thumbnail-value{margin-right:20px}div.scoreboard div.scoreboard-item.thumbnail-value img{height:72px}div.scoreboard div.scoreboard-item span.scoreboard-colorpicker{width:0;height:0;background-color:transparent;border-right-color:var(--background-color);border-bottom-color:var(--background-color);border-top-color:var(--foreground-color);border-left-color:var(--foreground-color);border-width:10px;border-style:solid;border-radius:20px;display:inline-block}div.scoreboard div.scoreboard-item span.scoreboard-colorpicker:after{content:"";top:-10px;left:-10px;width:20px;height:20px;position:absolute;box-shadow:inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), .2);border-radius:20px}div.scoreboard .control-chart{height:67px}div.scoreboard .control-chart ul{margin-left:77px;top:-2px}div.scoreboard .control-chart ul li{padding-left:18px}div.scoreboard .control-chart ul li>i{margin-left:-18px}div.scoreboard .control-chart .canvas+ul{margin-left:0}div.scoreboard .scoreboard-offset{padding-left:20px}body.slim-container div.scoreboard{padding:0 20px}.title-value h4{font-size:1.1rem;line-height:1;font-weight:normal;margin:0;color:var(--bs-heading-color)}.title-value p{color:var(--bs-body-color);margin:0;font-size:28px}.title-value p i,.title-value p:before{color:var(--oc-color-neutral);font-size:22px;position:relative;top:-2px}.title-value p.success{color:var(--oc-color-positive)}.title-value p.danger{color:var(--oc-color-negative)}.title-value p.negative:after,.title-value p.positive:after{font-size:17px;vertical-align:middle;position:relative;top:-3px;left:5px}.title-value p.negative{color:var(--oc-color-negative)}.title-value p.negative:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f103"}.title-value p.positive{color:var(--oc-color-positive)}.title-value p.positive:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f102"}.title-value p.description{color:var(--bs-secondary-color);line-height:100%;font-size:13px}.loading-indicator{padding:20px 20px 20px 60px;color:#999999;font-size:14px;font-weight:600;background:var(--bs-body-bg);text-align:left;z-index:10}.loading-indicator>span{--loader-size:40px;position:absolute;width:var(--loader-size);height:var(--loader-size);top:50%;margin-top:calc(var(--loader-size) / -2);left:0;display:block;border:3px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.loading-indicator.is-transparent{background-color:transparent}.loading-indicator-container{position:relative;min-height:40px}.loading-indicator-container .loading-indicator{position:absolute;left:-1px;right:-1px;top:-1px;bottom:-1px;padding-top:0}.loading-indicator-container .loading-indicator>div{position:absolute;top:50%;margin-top:-0.65em}.form-buttons>.loading-indicator-container{padding:.3rem;margin:-0.3rem}.loading-indicator.is-opaque>span,.loading-indicator-container.is-opaque .loading-indicator>span{background-color:var(--bs-body-bg);border-color:var(--oc-primary-border);border-top-color:var(--oc-accent)}.loading-indicator-container.size-small{min-height:20px}.loading-indicator.size-small,.loading-indicator-container.size-small .loading-indicator{padding:16px 16px 16px 30px;font-size:11px}.loading-indicator.size-small>span,.loading-indicator-container.size-small .loading-indicator>span{--loader-size:20px;border-width:2px}.loading-indicator.indicator-center,.loading-indicator-container.indicator-center .loading-indicator{padding:20px}.loading-indicator.indicator-center>span,.loading-indicator-container.indicator-center .loading-indicator>span{left:50%;margin-left:calc(var(--loader-size) / -2);margin-top:calc(var(--loader-size) / -2)}.loading-indicator.indicator-center>div,.loading-indicator-container.indicator-center .loading-indicator>div{text-align:center;position:relative;margin-top:30px}.loading-indicator.indicator-inset,.loading-indicator-container.indicator-inset .loading-indicator{padding-left:80px}.loading-indicator.indicator-inset>span,.loading-indicator-container.indicator-inset .loading-indicator>span{left:20px}.loading-indicator-container.size-form-field,.loading-indicator-container.size-input-text{min-height:0}.loading-indicator-container.size-form-field .loading-indicator,.loading-indicator-container.size-input-text .loading-indicator{background-color:transparent;padding:0;margin:0}.loading-indicator-container.size-form-field .loading-indicator>span,.loading-indicator-container.size-input-text .loading-indicator>span{--loader-size:23px;padding:0;margin:0;left:auto;right:7px;top:6px;border-width:2px}.loading-indicator-container.size-form-field .loading-indicator>span{--loader-size:20px;top:0;right:0}.layout{display:table;table-layout:fixed;height:100%;width:100%}.layout>.layout-row{display:table-row;vertical-align:top;height:100%}.layout>.layout-row>.layout-cell{display:table-cell;vertical-align:top;height:100%}.layout>.layout-row>.layout-cell .layout-relative{position:relative;height:100%}.layout>.layout-row>.layout-cell .layout-absolute{position:absolute;height:100%;width:100%}.layout>.layout-row>.layout-cell.min-size{width:0}.layout>.layout-row>.layout-cell.min-height{height:0}.layout>.layout-row>.layout-cell.center{text-align:center}.layout>.layout-row>.layout-cell.middle{vertical-align:middle}.layout>.layout-row>.layout-cell .layout-relative{position:relative;height:100%}.layout>.layout-row>.layout-cell .layout-absolute{position:absolute;height:100%;width:100%}.layout>.layout-row>.layout-cell.min-size{width:0}.layout>.layout-row>.layout-cell.min-height{height:0}.layout>.layout-row>.layout-cell.center{text-align:center}.layout>.layout-row>.layout-cell.middle{vertical-align:middle}.layout>.layout-row.min-size{height:.1px}.layout>.layout-cell{display:table-cell;vertical-align:top;height:100%}.layout>.layout-cell .layout-relative{position:relative;height:100%}.layout>.layout-cell .layout-absolute{position:absolute;height:100%;width:100%}.layout>.layout-cell.min-size{width:0}.layout>.layout-cell.min-height{height:0}.layout>.layout-cell.center{text-align:center}.layout>.layout-cell.middle{vertical-align:middle}@media (max-width:768px){.hide-on-small{display:none !important}}.close{float:right;font-size:21px;font-weight:bold;line-height:1;color:var(--bs-emphasis-color);text-shadow:0 1px 0 var(--bs-body-bg);font-family:sans-serif;opacity:.2}.close:hover,.close:focus{color:var(--bs-emphasis-color);text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:transparent;border:0;-webkit-appearance:none}.custom-checkbox.nolabel label,.custom-radio.nolabel label{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.custom-checkbox,.custom-radio{padding-left:23px;margin-top:0}.custom-checkbox input[type=radio],.custom-radio input[type=radio],.custom-checkbox input[type=checkbox],.custom-radio input[type=checkbox]{position:absolute;overflow:hidden;clip:rect(0 0 0 0);width:1px;margin:-1px;padding:0;border:0;opacity:0}.custom-checkbox label,.custom-radio label{display:inline-block;cursor:pointer;position:relative;padding-left:20px;margin-right:15px;margin-left:-20px;font-size:1rem;user-select:none}.custom-checkbox label:before,.custom-radio label:before{content:"";display:inline-block;text-align:center;color:#FFFFFF;width:16px;height:16px;margin-right:15px;position:absolute;left:-3px;top:1px;background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.custom-checkbox label:hover:before,.custom-radio label:hover:before{border-color:var(--oc-border-focus)}.custom-checkbox label:active:before,.custom-radio label:active:before{border-color:#b0bdcd;border-width:2px}.custom-checkbox input[type=radio]+label:before,.custom-radio input[type=radio]+label:before{background-position:-19px -19px}.custom-checkbox input[type=radio]:checked+label:before,.custom-radio input[type=radio]:checked+label:before{background-position:0 -19px}.custom-checkbox input[type=radio][data-radio-color=green]:checked+label:before,.custom-radio input[type=radio][data-radio-color=green]:checked+label:before{background-position:-59px -19px}.custom-checkbox input[type=radio][data-radio-color=red]:checked+label:before,.custom-radio input[type=radio][data-radio-color=red]:checked+label:before{background-position:-79px -19px}.custom-checkbox input[type=checkbox]+label:before,.custom-radio input[type=checkbox]+label:before{background-position:-19px 0}.custom-checkbox input[type=checkbox]:checked+label:before,.custom-radio input[type=checkbox]:checked+label:before{background-position:0 0}.custom-checkbox input[type=checkbox]:indeterminate+label:before,.custom-radio input[type=checkbox]:indeterminate+label:before{background-position:-79px 0}.custom-checkbox input:disabled+label,.custom-radio input:disabled+label{cursor:not-allowed}.custom-checkbox input[type=checkbox]:disabled:checked+label:before,.custom-radio input[type=checkbox]:disabled:checked+label:before{background-position:-39px 0}.custom-checkbox input[type=radio]:disabled:checked+label:before,.custom-radio input[type=radio]:disabled:checked+label:before{background-position:-39px -19px}.custom-checkbox:focus,.custom-radio:focus{outline:none}.custom-checkbox:focus label:before,.custom-radio:focus label:before{box-shadow:0 0 0px 2px rgba(0,0,0,0.15)}.custom-checkbox p.form-text,.custom-radio p.form-text{margin-bottom:17px}.custom-radio label:before{-webkit-border-radius:16px;-moz-border-radius:16px;border-radius:16px}.custom-checkbox label:before{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.inline-options .field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:10px 15px 15px 15px}.inline-options .field-checkboxlist:not(.is-scrollable) .custom-checkbox{display:inline-block;margin:0}.inline-options .field-checkboxlist:not(.is-scrollable) .custom-checkbox label{margin-bottom:0 !important;padding-top:10px}.inline-options .field-checkboxlist:not(.is-scrollable) .custom-checkbox label:before{top:10px}.inline-options.radio-field>label{display:block}.inline-options.radio-field .custom-radio{display:inline-block;margin-bottom:0}.switch-field .field-switch{padding-left:75px;float:left}.switch-field .field-switch>label{margin-top:3px}.custom-switch{display:block;width:65px;height:26px;position:relative;text-transform:uppercase;border:none;cursor:pointer;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.custom-switch *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.custom-switch.disabled{opacity:.5}.custom-switch .slide-button{z-index:9;display:block;position:absolute;right:42px;top:3px;width:20px;height:20px;background-color:#f6f6f6;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;-webkit-transition:all .1s;transition:all .1s}.custom-switch label,.custom-switch>span{line-height:23px;vertical-align:middle}.custom-switch label{z-index:8;width:100%;display:block;position:relative}.custom-switch input{z-index:10;position:absolute;left:0;top:0;opacity:0}.custom-switch input:checked~.slide-button{right:4px}.custom-switch input:checked~span{background-color:var(--bs-success)}.custom-switch input:checked~span span:first-of-type{color:#FFFFFF;display:block}.custom-switch input:checked~span span:last-of-type{color:#666666;display:none}.custom-switch input[disabled]~span{background-color:#bdc3c7 !important}.custom-switch input[disabled]~span,.custom-switch input[disabled]~span+a{cursor:default}.custom-switch>span{display:block;height:100%;position:absolute;left:0;width:100%;background-color:#72809d;font-size:12px;font-weight:600;user-select:none;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px}.custom-switch>span span{z-index:10;display:block;position:absolute;top:1px;left:-1px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.custom-switch>span span:last-child{left:28px;color:#FFFFFF;display:block}.custom-switch>span span:first-of-type{padding-left:13px;display:none;color:#666666}.oc-circle-thin:before,.icon-circle-thin:before{content:"\f10c"}.oc-undo:before,.icon-undo:before{content:"\e929"}.oc-redo:before,.icon-redo:before{content:"\e928"}.oc-icon-arrow-circle-o-down:before,.icon-arrow-circle-o-down:before{content:"\f0ab"}.oc-icon-arrow-circle-o-left:before,.icon-arrow-circle-o-left:before{content:"\f0a8"}.oc-icon-arrow-circle-o-right:before,.icon-arrow-circle-o-right:before{content:"\f0a9"}.oc-icon-arrow-circle-o-up:before,.icon-arrow-circle-o-up:before{content:"\f0aa"}.oc-icon-caret-square-o-down:before,.icon-caret-square-o-down:before{content:"\f150"}.oc-icon-caret-square-o-left:before,.icon-caret-square-o-left:before{content:"\f191"}.oc-icon-caret-square-o-right:before,.icon-caret-square-o-right:before{content:"\f152"}.oc-icon-caret-square-o-up:before,.icon-caret-square-o-up:before{content:"\f151"}.oc-icon-circle-o-notch:before,.icon-circle-o-notch:before{content:"\f1ce"}.oc-icon-hand-o-down:before,.icon-hand-o-down:before{content:"\f0a7"}.oc-icon-hand-o-left:before,.icon-hand-o-left:before{content:"\f0a5"}.oc-icon-hand-o-right:before,.icon-hand-o-right:before{content:"\f0a4"}.oc-icon-hand-o-up:before,.icon-hand-o-up:before{content:"\f0a6"}.oc-icon-thumbs-o-down:before,.icon-thumbs-o-down:before{content:"\f16a"}.oc-icon-thumbs-o-up:before,.icon-thumbs-o-up:before{content:"\f08c"}.oc-icon-address-book-o:before,.icon-address-book-o:before{content:"\f2ba"}.oc-icon-address-card-o:before,.icon-address-card-o:before{content:"\f2bc"}.oc-icon-bar-chart-o:before,.icon-bar-chart-o:before{content:"\f080"}.oc-icon-bell-o:before,.icon-bell-o:before{content:"\f0f3"}.oc-icon-bell-slash-o:before,.icon-bell-slash-o:before{content:"\f1f6"}.oc-icon-bookmark-o:before,.icon-bookmark-o:before{content:"\f02e"}.oc-icon-building-o:before,.icon-building-o:before{content:"\f1ad"}.oc-icon-calendar-check-o:before,.icon-calendar-check-o:before{content:"\f274"}.oc-icon-calendar-minus-o:before,.icon-calendar-minus-o:before{content:"\f272"}.oc-icon-calendar-o:before,.icon-calendar-o:before{content:"\f073"}.oc-icon-calendar-plus-o:before,.icon-calendar-plus-o:before{content:"\f271"}.oc-icon-calendar-times-o:before,.icon-calendar-times-o:before{content:"\f273"}.oc-icon-check-circle-o:before,.icon-check-circle-o:before{content:"\f058"}.oc-icon-check-square-o:before,.icon-check-square-o:before{content:"\f14a"}.oc-icon-circle-o:before,.icon-circle-o:before{content:"\f10c"}.oc-icon-clock-o:before,.icon-clock-o:before{content:"\f017"}.oc-icon-comment-o:before,.icon-comment-o:before{content:"\f075"}.oc-icon-commenting-o:before,.icon-commenting-o:before{content:"\f27b"}.oc-icon-comments-o:before,.icon-comments-o:before{content:"\f086"}.oc-icon-dot-circle-o:before,.icon-dot-circle-o:before{content:"\f192"}.oc-icon-drivers-license-o:before,.icon-drivers-license-o:before{content:"\f2c3"}.oc-icon-envelope-o:before,.icon-envelope-o:before{content:"\f0e0"}.oc-icon-envelope-open-o:before,.icon-envelope-open-o:before{content:"\f2b7"}.oc-icon-file-archive-o:before,.icon-file-archive-o:before{content:"\f1c6"}.oc-icon-file-audio-o:before,.icon-file-audio-o:before{content:"\f1c7"}.oc-icon-file-code-o:before,.icon-file-code-o:before{content:"\f1c9"}.oc-icon-file-excel-o:before,.icon-file-excel-o:before{content:"\f1c3"}.oc-icon-file-image-o:before,.icon-file-image-o:before{content:"\f1c5"}.oc-icon-file-movie-o:before,.icon-file-movie-o:before{content:"\f1c8"}.oc-icon-file-o:before,.icon-file-o:before{content:"\f15c"}.oc-icon-file-pdf-o:before,.icon-file-pdf-o:before{content:"\f1c1"}.oc-icon-file-photo-o:before,.icon-file-photo-o:before{content:"\f1ca"}.oc-icon-file-picture-o:before,.icon-file-picture-o:before{content:"\f1cc"}.oc-icon-file-powerpoint-o:before,.icon-file-powerpoint-o:before{content:"\f1c4"}.oc-icon-file-sound-o:before,.icon-file-sound-o:before{content:"\f1cd"}.oc-icon-file-text-o:before,.icon-file-text-o:before{content:"\f15d"}.oc-icon-file-video-o:before,.icon-file-video-o:before{content:"\f1cf"}.oc-icon-file-word-o:before,.icon-file-word-o:before{content:"\f1c2"}.oc-icon-file-zip-o:before,.icon-file-zip-o:before{content:"\f1d0"}.oc-icon-files-o:before,.icon-files-o:before{content:"\f0c6"}.oc-icon-flag-o:before,.icon-flag-o:before{content:"\f024"}.oc-icon-floppy-o:before,.icon-floppy-o:before{content:"\f0c7"}.oc-icon-folder-o:before,.icon-folder-o:before{content:"\f114"}.oc-icon-folder-open-o:before,.icon-folder-open-o:before{content:"\f115"}.oc-icon-frown-o:before,.icon-frown-o:before{content:"\f119"}.oc-icon-futbol-o:before,.icon-futbol-o:before{content:"\f1e3"}.oc-icon-hand-grab-o:before,.icon-hand-grab-o:before{content:"\f255"}.oc-icon-hand-lizard-o:before,.icon-hand-lizard-o:before{content:"\f258"}.oc-icon-hand-paper-o:before,.icon-hand-paper-o:before{content:"\f256"}.oc-icon-hand-peace-o:before,.icon-hand-peace-o:before{content:"\f25b"}.oc-icon-hand-pointer-o:before,.icon-hand-pointer-o:before{content:"\f25a"}.oc-icon-hand-rock-o:before,.icon-hand-rock-o:before{content:"\f257"}.oc-icon-hand-scissors-o:before,.icon-hand-scissors-o:before{content:"\f259"}.oc-icon-hand-spock-o:before,.icon-hand-spock-o:before{content:"\f25c"}.oc-icon-hand-stop-o:before,.icon-hand-stop-o:before{content:"\f25d"}.oc-icon-handshake-o:before,.icon-handshake-o:before{content:"\f2b8"}.oc-icon-hdd-o:before,.icon-hdd-o:before{content:"\f0a0"}.oc-icon-heart-o:before,.icon-heart-o:before{content:"\f004"}.oc-icon-hospital-o:before,.icon-hospital-o:before{content:"\f0f8"}.oc-icon-hourglass-o:before,.icon-hourglass-o:before{content:"\f250"}.oc-icon-id-card-o:before,.icon-id-card-o:before{content:"\f2c6"}.oc-icon-keyboard-o:before,.icon-keyboard-o:before{content:"\f11c"}.oc-icon-lemon-o:before,.icon-lemon-o:before{content:"\f094"}.oc-icon-lightbulb-o:before,.icon-lightbulb-o:before{content:"\f0eb"}.oc-icon-map-o:before,.icon-map-o:before{content:"\f278"}.oc-icon-meh-o:before,.icon-meh-o:before{content:"\f11a"}.oc-icon-minus-square-o:before,.icon-minus-square-o:before{content:"\f147"}.oc-icon-moon-o:before,.icon-moon-o:before{content:"\f186"}.oc-icon-newspaper-o:before,.icon-newspaper-o:before{content:"\f1ea"}.oc-icon-paper-plane-o:before,.icon-paper-plane-o:before{content:"\f1dd"}.oc-icon-pause-circle-o:before,.icon-pause-circle-o:before{content:"\f28c"}.oc-icon-pencil-square-o:before,.icon-pencil-square-o:before{content:"\f14b"}.oc-icon-picture-o:before,.icon-picture-o:before{content:"\f03f"}.oc-icon-play-circle-o:before,.icon-play-circle-o:before{content:"\f144"}.oc-icon-plus-square-o:before,.icon-plus-square-o:before{content:"\f196"}.oc-icon-question-circle-o:before,.icon-question-circle-o:before{content:"\f059"}.oc-icon-send-o:before,.icon-send-o:before{content:"\f1e7"}.oc-icon-share-square-o:before,.icon-share-square-o:before{content:"\f14d"}.oc-icon-smile-o:before,.icon-smile-o:before{content:"\f118"}.oc-icon-snowflake-o:before,.icon-snowflake-o:before{content:"\f2dc"}.oc-icon-soccer-ball-o:before,.icon-soccer-ball-o:before{content:"\f1ef"}.oc-icon-square-o:before,.icon-square-o:before{content:"\f0d2"}.oc-icon-star-half-o:before,.icon-star-half-o:before{content:"\f12f"}.oc-icon-star-o:before,.icon-star-o:before{content:"\f006"}.oc-icon-sticky-note-o:before,.icon-sticky-note-o:before{content:"\f26d"}.oc-icon-stop-circle-o:before,.icon-stop-circle-o:before{content:"\f28e"}.oc-icon-sun-o:before,.icon-sun-o:before{content:"\f189"}.oc-icon-times-circle-o:before,.icon-times-circle-o:before{content:"\f057"}.oc-icon-times-rectangle-o:before,.icon-times-rectangle-o:before{content:"\f2de"}.oc-icon-trash-o:before,.icon-trash-o:before{content:"\f1f8"}.oc-icon-user-circle-o:before,.icon-user-circle-o:before{content:"\f2be"}.oc-icon-user-o:before,.icon-user-o:before{content:"\f007"}.oc-icon-vcard-o:before,.icon-vcard-o:before{content:"\f2df"}.oc-icon-window-close-o:before,.icon-window-close-o:before{content:"\f2e1"}.storm-icon{background-size:300px 63px;background-image:url('../foundation/migrate/images/storm-icons.png')}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.storm-icon{background-image:url('../foundation/migrate/images/storm-icons@2x.png')}}.storm-icon-pseudo:before{content:'';background-size:300px 63px;background-image:url('../foundation/migrate/images/storm-icons.png')}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.storm-icon-pseudo:before{background-image:url('../foundation/migrate/images/storm-icons@2x.png')}}.control-breadcrumb ul{padding:0 0 20px 0;margin:0;font-size:0}.control-breadcrumb ul li{font-size:14px;list-style:none;margin:0;padding:0;display:inline-block;position:relative;color:var(--bs-link-color)}.control-breadcrumb ul li a{display:inline-block;color:var(--bs-link-color);text-decoration:underline}.control-breadcrumb ul li a:hover{color:var(--bs-link-color)}.control-breadcrumb ul li:after{content:var(--bs-breadcrumb-divider, "/");position:relative;display:inline-block;margin:0 5px;color:var(--bs-secondary-color)}.control-breadcrumb ul li:last-child{background-color:transparent;color:var(--bs-secondary-color)}.control-breadcrumb ul li:last-child:after{display:none}body.breadcrumb-flush .control-breadcrumb,.control-breadcrumb.breadcrumb-flush{margin-bottom:0}body.compact-container .control-breadcrumb{margin-top:20px;margin-left:20px;margin-right:20px}body.compact-container .control-breadcrumb>ul{padding-bottom:0}body.slim-container .control-breadcrumb{margin-left:20px;margin-right:20px}.modal-content .modal-header.flex-row-reverse{justify-content:space-between}@font-face{font-family:'octo-icon-migrate';src:url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb&v=1.0.1');src:url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb#iefix&v=1.0.1') format('embedded-opentype'),url('../foundation/migrate/vendor/octoicons/octo-icon.ttf?symvb&v=1.0.1') format('truetype'),url('../foundation/migrate/vendor/octoicons/octo-icon.woff?symvb&v=1.0.1') format('woff'),url('../foundation/migrate/vendor/octoicons/octo-icon.svg?symvb#octo-icon&v=1.0.1') format('svg');font-weight:normal;font-style:normal;font-display:block}[class^="octo-icon-"],[class*=" octo-icon-"]{font-family:'octo-icon-migrate' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.octo-icon-size-20{font-size:20px}.octo-icon-earth:before{content:"\eb55"}.octo-icon-language-letters:before{content:"\eb56"}.octo-icon-database-flash:before{content:"\eb54"}.octo-icon-collapse:before{content:"\eb26"}.octo-icon-music:before{content:"\e964"}.octo-icon-envelope:before{content:"\e965"}.octo-icon-heart:before{content:"\e966"}.octo-icon-star:before{content:"\e967"}.octo-icon-user:before{content:"\e968"}.octo-icon-film:before{content:"\e969"}.octo-icon-check:before{content:"\e96a"}.octo-icon-remove:before{content:"\e96b"}.octo-icon-close:before{content:"\e96c"}.octo-icon-search-minus:before{content:"\e96d"}.octo-icon-search-plus:before{content:"\e96e"}.octo-icon-power-off:before{content:"\e96f"}.octo-icon-signal:before{content:"\e970"}.octo-icon-gear:before{content:"\e971"}.octo-icon-cog:before{content:"\e972"}.octo-icon-home:before{content:"\e973"}.octo-icon-file:before{content:"\e974"}.octo-icon-clock:before{content:"\e975"}.octo-icon-road:before{content:"\e976"}.octo-icon-arrow-circle-o-down:before{content:"\e977"}.octo-icon-arrow-circle-o-up:before{content:"\e978"}.octo-icon-inbox:before{content:"\e979"}.octo-icon-play-circle:before{content:"\e97a"}.octo-icon-rotate-right:before{content:"\e97b"}.octo-icon-repeat:before{content:"\e97c"}.octo-icon-refresh:before{content:"\e97d"}.octo-icon-list-alt:before{content:"\e97e"}.octo-icon-headphones:before{content:"\e97f"}.octo-icon-volume-off:before{content:"\e980"}.octo-icon-volume-down:before{content:"\e981"}.octo-icon-volume-up:before{content:"\e982"}.octo-icon-qrcode:before{content:"\e983"}.octo-icon-barcode:before{content:"\e984"}.octo-icon-tags:before{content:"\e985"}.octo-icon-book:before{content:"\e986"}.octo-icon-bookmark:before{content:"\e987"}.octo-icon-print:before{content:"\e988"}.octo-icon-camera:before{content:"\e989"}.octo-icon-font:before{content:"\e98a"}.octo-icon-text-height:before{content:"\e98b"}.octo-icon-text-width:before{content:"\e98c"}.octo-icon-video-camera:before{content:"\e98d"}.octo-icon-photo:before{content:"\e98e"}.octo-icon-image:before{content:"\e98f"}.octo-icon-picture:before{content:"\e990"}.octo-icon-pencil:before{content:"\e991"}.octo-icon-map-marker:before{content:"\e992"}.octo-icon-adjust:before{content:"\e993"}.octo-icon-edit:before{content:"\e994"}.octo-icon-pencil-square:before{content:"\e995"}.octo-icon-share-square:before{content:"\e996"}.octo-icon-check-square:before{content:"\e997"}.octo-icon-arrows:before{content:"\e998"}.octo-icon-pause:before{content:"\e999"}.octo-icon-stop:before{content:"\e99a"}.octo-icon-eject:before{content:"\e99b"}.octo-icon-chevron-right:before{content:"\e99c"}.octo-icon-plus-circle:before{content:"\e99d"}.octo-icon-minus-circle:before{content:"\e99e"}.octo-icon-times-circle:before{content:"\e99f"}.octo-icon-check-circle:before{content:"\e9a0"}.octo-icon-question-circle:before{content:"\e9a1"}.octo-icon-info-circle:before{content:"\e9a2"}.octo-icon-crosshairs:before{content:"\e9a3"}.octo-icon-times-circle-o:before{content:"\e9a4"}.octo-icon-check-circle-o:before{content:"\e9a5"}.octo-icon-ban:before{content:"\e9a6"}.octo-icon-arrow-left:before{content:"\e9a7"}.octo-icon-arrow-right:before{content:"\e9a8"}.octo-icon-arrow-up:before{content:"\e9a9"}.octo-icon-arrow-down:before{content:"\e9aa"}.octo-icon-mail-forward:before{content:"\e9ab"}.octo-icon-share:before{content:"\e9ac"}.octo-icon-expand:before{content:"\e9ad"}.octo-icon-compress:before{content:"\e9ae"}.octo-icon-minus:before{content:"\e9af"}.octo-icon-asterisk:before{content:"\e9b0"}.octo-icon-exclamation-circle:before{content:"\e9b1"}.octo-icon-gift:before{content:"\e9b2"}.octo-icon-leaf:before{content:"\e9b3"}.octo-icon-fire:before{content:"\e9b4"}.octo-icon-eye:before{content:"\e9b5"}.octo-icon-eye-slash:before{content:"\e9b6"}.octo-icon-calendar:before{content:"\e9b7"}.octo-icon-comment:before{content:"\e9b8"}.octo-icon-chevron-down:before{content:"\e9b9"}.octo-icon-retweet:before{content:"\e9ba"}.octo-icon-shopping-cart:before{content:"\e9bb"}.octo-icon-folder:before{content:"\e9bc"}.octo-icon-folder-open:before{content:"\e9bd"}.octo-icon-arrows-v:before{content:"\e9be"}.octo-icon-arrows-h:before{content:"\e9bf"}.octo-icon-bar-chart-o:before{content:"\e9c0"}.octo-icon-bar-chart:before{content:"\e9c1"}.octo-icon-twitter-square:before{content:"\e9c2"}.octo-icon-facebook-square:before{content:"\e9c3"}.octo-icon-camera-retro:before{content:"\e9c4"}.octo-icon-key:before{content:"\e9c5"}.octo-icon-cogs:before{content:"\e9c6"}.octo-icon-comments:before{content:"\e9c7"}.octo-icon-thumbs-o-down:before{content:"\e9c8"}.octo-icon-heart-o:before{content:"\e9c9"}.octo-icon-sign-out:before{content:"\e9ca"}.octo-icon-linkedin-square:before{content:"\e9cb"}.octo-icon-thumb-tack:before{content:"\e9cc"}.octo-icon-external-link:before{content:"\e9cd"}.octo-icon-sign-in:before{content:"\e9ce"}.octo-icon-trophy:before{content:"\e9cf"}.octo-icon-upload:before{content:"\e9d0"}.octo-icon-lemon-o:before{content:"\e9d1"}.octo-icon-phone:before{content:"\e9d2"}.octo-icon-square-o:before{content:"\e9d3"}.octo-icon-bookmark-o:before{content:"\e9d4"}.octo-icon-phone-square:before{content:"\e9d5"}.octo-icon-twitter:before{content:"\e9d6"}.octo-icon-facebook-f:before{content:"\e9d7"}.octo-icon-facebook:before{content:"\e9d8"}.octo-icon-unlock:before{content:"\e9d9"}.octo-icon-credit-card:before{content:"\e9da"}.octo-icon-feed:before{content:"\e9db"}.octo-icon-rss:before{content:"\e9dc"}.octo-icon-hdd-o:before{content:"\e9dd"}.octo-icon-certificate:before{content:"\e9de"}.octo-icon-arrow-circle-left:before{content:"\e9df"}.octo-icon-arrow-circle-down:before{content:"\e9e0"}.octo-icon-wrench:before{content:"\e9e1"}.octo-icon-tasks:before{content:"\e9e2"}.octo-icon-filter:before{content:"\e9e3"}.octo-icon-briefcase:before{content:"\e9e4"}.octo-icon-arrows-alt:before{content:"\e9e5"}.octo-icon-group:before{content:"\e9e6"}.octo-icon-chain:before{content:"\e9e7"}.octo-icon-flask:before{content:"\e9e8"}.octo-icon-cut:before{content:"\e9e9"}.octo-icon-scissors:before{content:"\e9ea"}.octo-icon-copy:before{content:"\e9eb"}.octo-icon-files-o:before{content:"\e9ec"}.octo-icon-square:before{content:"\e9ed"}.octo-icon-navicon:before{content:"\e9ee"}.octo-icon-reorder:before{content:"\e9ef"}.octo-icon-bars:before{content:"\e9f0"}.octo-icon-list-ul:before{content:"\e9f1"}.octo-icon-list-ol:before{content:"\e9f2"}.octo-icon-strikethrough:before{content:"\e9f3"}.octo-icon-magic:before{content:"\e9f4"}.octo-icon-truck:before{content:"\e9f5"}.octo-icon-pinterest:before{content:"\e9f6"}.octo-icon-pinterest-square:before{content:"\e9f7"}.octo-icon-google-plus-square:before{content:"\e9f8"}.octo-icon-google-plus:before{content:"\e9f9"}.octo-icon-caret-down:before{content:"\e9fa"}.octo-icon-caret-up:before{content:"\e9fb"}.octo-icon-caret-left:before{content:"\e9fc"}.octo-icon-caret-right:before{content:"\e9fd"}.octo-icon-columns:before{content:"\e9fe"}.octo-icon-sort:before{content:"\e9ff"}.octo-icon-sort-down:before{content:"\ea00"}.octo-icon-sort-desc:before{content:"\ea01"}.octo-icon-sort-up:before{content:"\ea02"}.octo-icon-sort-asc:before{content:"\ea03"}.octo-icon-linkedin:before{content:"\ea04"}.octo-icon-rotate-left:before{content:"\ea05"}.octo-icon-legal:before{content:"\ea06"}.octo-icon-gavel:before{content:"\ea07"}.octo-icon-dashboard:before{content:"\ea08"}.octo-icon-tachometer:before{content:"\ea09"}.octo-icon-comment-o:before{content:"\ea0a"}.octo-icon-comments-o:before{content:"\ea0b"}.octo-icon-sitemap:before{content:"\ea0c"}.octo-icon-umbrella:before{content:"\ea0d"}.octo-icon-clipboard:before{content:"\ea0e"}.octo-icon-lightbulb-o:before{content:"\ea0f"}.octo-icon-exchange:before{content:"\ea10"}.octo-icon-user-md:before{content:"\ea11"}.octo-icon-stethoscope:before{content:"\ea12"}.octo-icon-suitcase:before{content:"\ea13"}.octo-icon-bell-o:before{content:"\ea14"}.octo-icon-coffee:before{content:"\ea15"}.octo-icon-file-text-o:before{content:"\ea16"}.octo-icon-building-o:before{content:"\ea17"}.octo-icon-hospital-o:before{content:"\ea18"}.octo-icon-ambulance:before{content:"\ea19"}.octo-icon-medkit:before{content:"\ea1a"}.octo-icon-fighter-jet:before{content:"\ea1b"}.octo-icon-beer:before{content:"\ea1c"}.octo-icon-h-square:before{content:"\ea1d"}.octo-icon-plus-square:before{content:"\ea1e"}.octo-icon-angle-double-left:before{content:"\ea1f"}.octo-icon-angle-double-right:before{content:"\ea20"}.octo-icon-angle-double-up:before{content:"\ea21"}.octo-icon-angle-double-down:before{content:"\ea22"}.octo-icon-angle-left:before{content:"\ea23"}.octo-icon-angle-right:before{content:"\ea24"}.octo-icon-desktop:before{content:"\ea25"}.octo-icon-laptop:before{content:"\ea26"}.octo-icon-tablet:before{content:"\ea27"}.octo-icon-mobile-phone:before{content:"\ea28"}.octo-icon-mobile:before{content:"\ea29"}.octo-icon-circle-o:before{content:"\ea2a"}.octo-icon-quote-left:before{content:"\ea2b"}.octo-icon-quote-right:before{content:"\ea2c"}.octo-icon-spinner:before{content:"\ea2d"}.octo-icon-circle:before{content:"\ea2e"}.octo-icon-mail-reply:before{content:"\ea2f"}.octo-icon-reply:before{content:"\ea30"}.octo-icon-folder-o:before{content:"\ea31"}.octo-icon-folder-open-o:before{content:"\ea32"}.octo-icon-smile-o:before{content:"\ea33"}.octo-icon-frown-o:before{content:"\ea34"}.octo-icon-meh-o:before{content:"\ea35"}.octo-icon-keyboard-o:before{content:"\ea36"}.octo-icon-flag-checkered:before{content:"\ea37"}.octo-icon-terminal:before{content:"\ea38"}.octo-icon-code:before{content:"\ea39"}.octo-icon-mail-reply-all:before{content:"\ea3a"}.octo-icon-reply-all:before{content:"\ea3b"}.octo-icon-location-arrow:before{content:"\ea3c"}.octo-icon-crop:before{content:"\ea3d"}.octo-icon-chain-broken:before{content:"\ea3e"}.octo-icon-question:before{content:"\ea3f"}.octo-icon-exclamation:before{content:"\ea40"}.octo-icon-superscript:before{content:"\ea41"}.octo-icon-subscript:before{content:"\ea42"}.octo-icon-puzzle-piece:before{content:"\ea43"}.octo-icon-microphone:before{content:"\ea44"}.octo-icon-microphone-slash:before{content:"\ea45"}.octo-icon-shield:before{content:"\ea46"}.octo-icon-calendar-o:before{content:"\ea47"}.octo-icon-fire-extinguisher:before{content:"\ea48"}.octo-icon-rocket:before{content:"\ea49"}.octo-icon-chevron-circle-left:before{content:"\ea4a"}.octo-icon-chevron-circle-right:before{content:"\ea4b"}.octo-icon-chevron-circle-up:before{content:"\ea4c"}.octo-icon-chevron-circle-down:before{content:"\ea4d"}.octo-icon-html5:before{content:"\ea4e"}.octo-icon-css3:before{content:"\ea4f"}.octo-icon-anchor:before{content:"\ea50"}.octo-icon-unlock-alt:before{content:"\ea51"}.octo-icon-bullseye:before{content:"\ea52"}.octo-icon-rss-square:before{content:"\ea53"}.octo-icon-minus-square:before{content:"\ea54"}.octo-icon-minus-square-o:before{content:"\ea55"}.octo-icon-level-down:before{content:"\ea56"}.octo-icon-toggle-down:before{content:"\ea57"}.octo-icon-caret-square-o-down:before{content:"\ea58"}.octo-icon-toggle-up:before{content:"\ea59"}.octo-icon-caret-square-o-up:before{content:"\ea5a"}.octo-icon-caret-square-o-right:before{content:"\ea5b"}.octo-icon-euro:before{content:"\ea5c"}.octo-icon-sort-numeric-asc:before{content:"\ea5d"}.octo-icon-sort-numeric-desc:before{content:"\ea5e"}.octo-icon-eur:before{content:"\ea5f"}.octo-icon-gbp:before{content:"\ea60"}.octo-icon-dollar:before{content:"\ea61"}.octo-icon-usd:before{content:"\ea62"}.octo-icon-bitcoin:before{content:"\ea63"}.octo-icon-btc:before{content:"\ea64"}.octo-icon-file-text:before{content:"\ea65"}.octo-icon-thumbs-up:before{content:"\ea66"}.octo-icon-thumbs-down:before{content:"\ea67"}.octo-icon-youtube-square:before{content:"\ea68"}.octo-icon-youtube:before{content:"\ea69"}.octo-icon-xing:before{content:"\ea6a"}.octo-icon-xing-square:before{content:"\ea6b"}.octo-icon-youtube-play:before{content:"\ea6c"}.octo-icon-dropbox:before{content:"\ea6d"}.octo-icon-stack-overflow:before{content:"\ea6e"}.octo-icon-instagram:before{content:"\ea6f"}.octo-icon-flickr:before{content:"\ea70"}.octo-icon-tumblr:before{content:"\ea71"}.octo-icon-tumblr-square:before{content:"\ea72"}.octo-icon-long-arrow-down:before{content:"\ea73"}.octo-icon-long-arrow-up:before{content:"\ea74"}.octo-icon-long-arrow-left:before{content:"\ea75"}.octo-icon-long-arrow-right:before{content:"\ea76"}.octo-icon-apple:before{content:"\ea77"}.octo-icon-windows:before{content:"\ea78"}.octo-icon-android:before{content:"\ea79"}.octo-icon-dribbble:before{content:"\ea7a"}.octo-icon-foursquare:before{content:"\ea7b"}.octo-icon-female:before{content:"\ea7c"}.octo-icon-male:before{content:"\ea7d"}.octo-icon-sun-o:before{content:"\ea7e"}.octo-icon-moon-o:before{content:"\ea7f"}.octo-icon-archive:before{content:"\ea80"}.octo-icon-bug:before{content:"\ea81"}.octo-icon-vk:before{content:"\ea82"}.octo-icon-weibo:before{content:"\ea83"}.octo-icon-renren:before{content:"\ea84"}.octo-icon-arrow-circle-o-right:before{content:"\ea85"}.octo-icon-arrow-circle-o-left:before{content:"\ea86"}.octo-icon-caret-square-o-left:before{content:"\ea87"}.octo-icon-dot-circle-o:before{content:"\ea88"}.octo-icon-wheelchair:before{content:"\ea89"}.octo-icon-plus-square-o:before{content:"\ea8a"}.octo-icon-space-shuttle:before{content:"\ea8b"}.octo-icon-envelope-square:before{content:"\ea8c"}.octo-icon-institution:before{content:"\ea8d"}.octo-icon-bank:before{content:"\ea8e"}.octo-icon-university:before{content:"\ea8f"}.octo-icon-mortar-board:before{content:"\ea90"}.octo-icon-yahoo:before{content:"\ea91"}.octo-icon-reddit:before{content:"\ea92"}.octo-icon-reddit-square:before{content:"\ea93"}.octo-icon-delicious:before{content:"\ea94"}.octo-icon-digg:before{content:"\ea95"}.octo-icon-drupal:before{content:"\ea96"}.octo-icon-language:before{content:"\ea97"}.octo-icon-building:before{content:"\ea98"}.octo-icon-paw:before{content:"\ea99"}.octo-icon-spoon:before{content:"\ea9a"}.octo-icon-steam:before{content:"\ea9b"}.octo-icon-steam-square:before{content:"\ea9c"}.octo-icon-automobile:before{content:"\ea9d"}.octo-icon-car:before{content:"\ea9e"}.octo-icon-cab:before{content:"\ea9f"}.octo-icon-taxi:before{content:"\eaa0"}.octo-icon-tree:before{content:"\eaa1"}.octo-icon-database:before{content:"\eaa2"}.octo-icon-file-pdf-o:before{content:"\eaa3"}.octo-icon-file-word-o:before{content:"\eaa4"}.octo-icon-file-excel-o:before{content:"\eaa5"}.octo-icon-file-powerpoint-o:before{content:"\eaa6"}.octo-icon-file-photo-o:before{content:"\eaa7"}.octo-icon-file-picture-o:before{content:"\eaa8"}.octo-icon-file-image-o:before{content:"\eaa9"}.octo-icon-file-zip-o:before{content:"\eaaa"}.octo-icon-file-archive-o:before{content:"\eaab"}.octo-icon-file-sound-o:before{content:"\eaac"}.octo-icon-file-audio-o:before{content:"\eaad"}.octo-icon-file-video-o:before{content:"\eaae"}.octo-icon-file-code-o:before{content:"\eaaf"}.octo-icon-vine:before{content:"\eab0"}.octo-icon-life-bouy:before{content:"\eab1"}.octo-icon-life-buoy:before{content:"\eab2"}.octo-icon-life-saver:before{content:"\eab3"}.octo-icon-support:before{content:"\eab4"}.octo-icon-life-ring:before{content:"\eab5"}.octo-icon-ra:before{content:"\eab6"}.octo-icon-empire:before{content:"\eab7"}.octo-icon-tencent-weibo:before{content:"\eab8"}.octo-icon-send:before{content:"\eab9"}.octo-icon-paper-plane:before{content:"\eaba"}.octo-icon-send-o:before{content:"\eabb"}.octo-icon-paper-plane-o:before{content:"\eabc"}.octo-icon-history:before{content:"\eabd"}.octo-icon-circle-thin:before{content:"\eabe"}.octo-icon-paragraph:before{content:"\eabf"}.octo-icon-sliders:before{content:"\eac0"}.octo-icon-share-alt:before{content:"\eac1"}.octo-icon-share-alt-square:before{content:"\eac2"}.octo-icon-bomb:before{content:"\eac3"}.octo-icon-soccer-ball-o:before{content:"\eac4"}.octo-icon-futbol-o:before{content:"\eac5"}.octo-icon-tty:before{content:"\eac6"}.octo-icon-binoculars:before{content:"\eac7"}.octo-icon-twitch:before{content:"\eac8"}.octo-icon-yelp:before{content:"\eac9"}.octo-icon-newspaper-o:before{content:"\eaca"}.octo-icon-wifi:before{content:"\eacb"}.octo-icon-calculator:before{content:"\eacc"}.octo-icon-paypal:before{content:"\eacd"}.octo-icon-cc-visa:before{content:"\eace"}.octo-icon-cc-mastercard:before{content:"\eacf"}.octo-icon-cc-discover:before{content:"\ead0"}.octo-icon-cc-amex:before{content:"\ead1"}.octo-icon-cc-paypal:before{content:"\ead2"}.octo-icon-cc-stripe:before{content:"\ead3"}.octo-icon-bell-slash:before{content:"\ead4"}.octo-icon-bell-slash-o:before{content:"\ead5"}.octo-icon-at:before{content:"\ead6"}.octo-icon-paint-brush:before{content:"\ead7"}.octo-icon-birthday-cake:before{content:"\ead8"}.octo-icon-area-chart:before{content:"\ead9"}.octo-icon-pie-chart:before{content:"\eada"}.octo-icon-line-chart:before{content:"\eadb"}.octo-icon-lastfm:before{content:"\eadc"}.octo-icon-lastfm-square:before{content:"\eadd"}.octo-icon-toggle-off:before{content:"\eade"}.octo-icon-toggle-on:before{content:"\eadf"}.octo-icon-bicycle:before{content:"\eae0"}.octo-icon-bus:before{content:"\eae1"}.octo-icon-cc:before{content:"\eae2"}.octo-icon-cart-plus:before{content:"\eae3"}.octo-icon-cart-arrow-down:before{content:"\eae4"}.octo-icon-diamond:before{content:"\eae5"}.octo-icon-ship:before{content:"\eae6"}.octo-icon-street-view:before{content:"\eae7"}.octo-icon-heartbeat:before{content:"\eae8"}.octo-icon-venus:before{content:"\eae9"}.octo-icon-mars:before{content:"\eaea"}.octo-icon-transgender:before{content:"\eaeb"}.octo-icon-transgender-alt:before{content:"\eaec"}.octo-icon-facebook-official:before{content:"\eaed"}.octo-icon-pinterest-p:before{content:"\eaee"}.octo-icon-whatsapp:before{content:"\eaef"}.octo-icon-server:before{content:"\eaf0"}.octo-icon-user-plus:before{content:"\eaf1"}.octo-icon-hotel:before{content:"\eaf2"}.octo-icon-bed:before{content:"\eaf3"}.octo-icon-train:before{content:"\eaf4"}.octo-icon-subway:before{content:"\eaf5"}.octo-icon-battery-4:before{content:"\eaf6"}.octo-icon-battery:before{content:"\eaf7"}.octo-icon-battery-full:before{content:"\eaf8"}.octo-icon-battery-3:before{content:"\eaf9"}.octo-icon-battery-three-quarters:before{content:"\eafa"}.octo-icon-battery-2:before{content:"\eafb"}.octo-icon-battery-half:before{content:"\eafc"}.octo-icon-battery-1:before{content:"\eafd"}.octo-icon-battery-quarter:before{content:"\eafe"}.octo-icon-battery-0:before{content:"\eaff"}.octo-icon-battery-empty:before{content:"\eb00"}.octo-icon-mouse-pointer:before{content:"\eb01"}.octo-icon-i-cursor:before{content:"\eb02"}.octo-icon-clone:before{content:"\eb03"}.octo-icon-balance-scale:before{content:"\eb04"}.octo-icon-hourglass-1:before{content:"\eb05"}.octo-icon-hourglass-start:before{content:"\eb06"}.octo-icon-hourglass-half:before{content:"\eb07"}.octo-icon-odnoklassniki:before{content:"\eb08"}.octo-icon-odnoklassniki-square:before{content:"\eb09"}.octo-icon-wikipedia-w:before{content:"\eb0a"}.octo-icon-tv:before{content:"\eb0b"}.octo-icon-television:before{content:"\eb0c"}.octo-icon-px:before{content:"\eb0d"}.octo-icon-amazon:before{content:"\eb0e"}.octo-icon-calendar-plus-o:before{content:"\eb0f"}.octo-icon-calendar-minus-o:before{content:"\eb10"}.octo-icon-calendar-times-o:before{content:"\eb11"}.octo-icon-calendar-check-o:before{content:"\eb12"}.octo-icon-industry:before{content:"\eb13"}.octo-icon-map-signs:before{content:"\eb14"}.octo-icon-commenting:before{content:"\eb15"}.octo-icon-black-tie:before{content:"\eb16"}.octo-icon-reddit-alien:before{content:"\eb17"}.octo-icon-credit-card-alt:before{content:"\eb18"}.octo-icon-scribd:before{content:"\eb19"}.octo-icon-usb:before{content:"\eb1a"}.octo-icon-pause-circle:before{content:"\eb1b"}.octo-icon-pause-circle-o:before{content:"\eb1c"}.octo-icon-stop-circle:before{content:"\eb1d"}.octo-icon-stop-circle-o:before{content:"\eb1e"}.octo-icon-shopping-bag:before{content:"\eb1f"}.octo-icon-shopping-basket:before{content:"\eb20"}.octo-icon-hashtag:before{content:"\eb21"}.octo-icon-bluetooth-b:before{content:"\eb22"}.octo-icon-wheelchair-alt:before{content:"\eb23"}.octo-icon-question-circle-o:before{content:"\eb24"}.octo-icon-blind:before{content:"\eb25"}.octo-icon-volume-control-phone:before{content:"\eb26"}.octo-icon-braille:before{content:"\eb27"}.octo-icon-snapchat:before{content:"\eb28"}.octo-icon-snapchat-ghost:before{content:"\eb29"}.octo-icon-snapchat-square:before{content:"\eb2a"}.octo-icon-google-plus-circle:before{content:"\eb2b"}.octo-icon-google-plus-official:before{content:"\eb2c"}.octo-icon-handshake-o:before{content:"\eb2d"}.octo-icon-envelope-open:before{content:"\eb2e"}.octo-icon-envelope-open-o:before{content:"\eb2f"}.octo-icon-address-book:before{content:"\eb30"}.octo-icon-address-book-o:before{content:"\eb31"}.octo-icon-vcard:before{content:"\eb32"}.octo-icon-address-card:before{content:"\eb33"}.octo-icon-vcard-o:before{content:"\eb34"}.octo-icon-address-card-o:before{content:"\eb35"}.octo-icon-user-circle:before{content:"\eb36"}.octo-icon-user-circle-o:before{content:"\eb37"}.octo-icon-user-o:before{content:"\eb38"}.octo-icon-id-badge:before{content:"\eb39"}.octo-icon-drivers-license:before{content:"\eb3a"}.octo-icon-id-card:before{content:"\eb3b"}.octo-icon-drivers-license-o:before{content:"\eb3c"}.octo-icon-id-card-o:before{content:"\eb3d"}.octo-icon-quora:before{content:"\eb3e"}.octo-icon-thermometer-4:before{content:"\eb3f"}.octo-icon-thermometer:before{content:"\eb40"}.octo-icon-thermometer-3:before{content:"\eb41"}.octo-icon-thermometer-full:before{content:"\eb42"}.octo-icon-thermometer-three-quarters:before{content:"\eb43"}.octo-icon-thermometer-half:before{content:"\eb44"}.octo-icon-thermometer-2:before{content:"\eb45"}.octo-icon-thermometer-1:before{content:"\eb46"}.octo-icon-thermometer-quarter:before{content:"\eb47"}.octo-icon-thermometer-0:before{content:"\eb48"}.octo-icon-thermometer-empty:before{content:"\eb49"}.octo-icon-shower:before{content:"\eb4a"}.octo-icon-window-maximize:before{content:"\eb4b"}.octo-icon-window-minimize:before{content:"\eb4c"}.octo-icon-window-restore:before{content:"\eb4d"}.octo-icon-window-close:before{content:"\eb4e"}.octo-icon-etsy:before{content:"\eb4f"}.octo-icon-imdb:before{content:"\eb50"}.octo-icon-microchip:before{content:"\eb51"}.octo-icon-snowflake-o:before{content:"\eb52"}.octo-icon-meetup:before{content:"\eb53"}.octo-icon-add-bold:before{content:"\e962"}.octo-icon-layers-grid-add:before{content:"\e963"}.octo-icon-common-file-star:before{content:"\e961"}.octo-icon-set-parent:before{content:"\e960"}.octo-icon-common-file-remove:before{content:"\e95c"}.octo-icon-common-file-sync:before{content:"\e95d"}.octo-icon-harddrive-upload:before{content:"\e95e"}.octo-icon-common-file-upload:before{content:"\e95f"}.octo-icon-list-reorder:before{content:"\e95b"}.octo-icon-keyboard-return:before{content:"\e95a"}.octo-icon-calendar-add:before{content:"\e951"}.octo-icon-calendar-3:before{content:"\e952"}.octo-icon-calendar-disable:before{content:"\e953"}.octo-icon-calendar-check:before{content:"\e954"}.octo-icon-calendar-clock:before{content:"\e955"}.octo-icon-notes-edit-active .path1:before{content:"\e956";color:#ff9c09}.octo-icon-notes-edit-active .path2:before{content:"\e957";margin-left:-1em;color:#536061}.octo-icon-notes-edit:before{content:"\e958"}.octo-icon-calendar-check-1:before{content:"\e959"}.octo-icon-user-actions-key:before{content:"\e950"}.octo-icon-id-card-1:before{content:"\e94e"}.octo-icon-user-group:before{content:"\e94f"}.octo-icon-translate:before{content:"\e94c"}.octo-icon-globe:before{content:"\e94d"}.octo-icon-code-snippet:before{content:"\e94b"}.octo-icon-log-settings:before{content:"\e941"}.octo-icon-lock:before{content:"\e949"}.octo-icon-users:before{content:"\e94a"}.octo-icon-power:before{content:"\e942"}.octo-icon-paint-brush-1:before{content:"\e943"}.octo-icon-mail-templates:before{content:"\e947"}.octo-icon-mail-messages:before{content:"\e945"}.octo-icon-mail-settings:before{content:"\e946"}.octo-icon-mail-branding:before{content:"\e944"}.octo-icon-download:before{content:"\e948"}.octo-icon-plus:before{content:"\e940"}.octo-icon-cross:before{content:"\e93e"}.octo-icon-callout-danger:before{content:"\e93d"}.octo-icon-callout-success:before{content:"\e93c"}.octo-icon-callout-info:before{content:"\e93f"}.octo-icon-add-above:before{content:"\e93a"}.octo-icon-add-below:before{content:"\e93b"}.octo-icon-check-multi:before{content:"\e939"}.octo-icon-unlink:before{content:"\e938"}.octo-icon-list-add:before{content:"\e935"}.octo-icon-list-remove:before{content:"\e936"}.octo-icon-create:before{content:"\e937"}.octo-icon-preview:before{content:"\e933"}.octo-icon-window-split:before{content:"\e934"}.octo-icon-eraser:before{content:"\e92e"}.octo-icon-text-code-block:before{content:"\e932"}.octo-icon-text-h1:before{content:"\e92f"}.octo-icon-text-h3:before{content:"\e930"}.octo-icon-text-h2:before{content:"\e931"}.octo-icon-text-insert-table:before{content:"\e915"}.octo-icon-text-colors:before{content:"\e91e"}.octo-icon-text-emoticons:before{content:"\e91f"}.octo-icon-text-inline-style:before{content:"\e924"}.octo-icon-volume:before{content:"\e925"}.octo-icon-text-video:before{content:"\e926"}.octo-icon-edit-code:before{content:"\e92b"}.octo-icon-text-subscript:before{content:"\e920"}.octo-icon-text-superscript:before{content:"\e921"}.octo-icon-link:before{content:"\e91b"}.octo-icon-text-strikethrough:before{content:"\e91d"}.octo-icon-text-increase-indent:before{content:"\e922"}.octo-icon-text-decrease-indent:before{content:"\e923"}.octo-icon-text-image:before{content:"\e927"}.octo-icon-redo:before{content:"\e928"}.octo-icon-undo:before{content:"\e929"}.octo-icon-attachment:before{content:"\e92a"}.octo-icon-cursor-arrow:before{content:"\e92c"}.octo-icon-text-clear-formatting:before{content:"\e92d"}.octo-icon-quote:before{content:"\e919"}.octo-icon-text-format-ul:before{content:"\e90c"}.octo-icon-text-format-ol:before{content:"\e90d"}.octo-icon-text-justify:before{content:"\e916"}.octo-icon-magic-wand:before{content:"\e918"}.octo-icon-horizontal-line:before{content:"\e91a"}.octo-icon-bold:before{content:"\e90f"}.octo-icon-text-left:before{content:"\e910"}.octo-icon-text-right:before{content:"\e911"}.octo-icon-text-center:before{content:"\e912"}.octo-icon-italic:before{content:"\e913"}.octo-icon-underline:before{content:"\e914"}.octo-icon-info:before{content:"\e917"}.octo-icon-components:before{content:"\e91c"}.octo-icon-fullscreen-collapse:before{content:"\e90e"}.octo-icon-angle-down:before{content:"\e90a"}.octo-icon-angle-up:before{content:"\e90b"}.octo-icon-search:before{content:"\e909"}.octo-icon-settings:before{content:"\e904"}.octo-icon-delete:before{content:"\e905"}.octo-icon-fullscreen:before{content:"\e906"}.octo-icon-save:before{content:"\e907"}.octo-icon-search-code:before{content:"\e908"}.octo-icon-exit:before{content:"\e901"}.octo-icon-app-window:before{content:"\e902"}.octo-icon-user-account:before{content:"\e903"}.octo-icon-triangle-down:before{content:"\e900"}.octo-icon-location-target:before{content:"\1f32b"}.list-hidden-drag-ghost{opacity:0 !important}table.table.data tr:hover .list-reorder span.list-reorder-handle{display:block}table.table.data tbody.tree-drag-mode,table.table.data tbody.tree-drag-mode *{cursor:move!important}table.table.data tbody.tree-drag-mode td.list-reorder span.list-reorder-handle{display:none}table.table.data tbody.tree-drag-mode tr.sortable-chosen td.list-reorder span.list-reorder-handle{display:block}table.table.data tbody.tree-drag-updated td.list-reorder span.list-reorder-handle{display:none !important}table.table.data th.list-reorder,table.table.data td.list-reorder{width:24px;min-width:24px;padding-left:0;padding-right:0}table.table.data td.list-reorder{vertical-align:middle;position:relative}table.table.data td.list-reorder span.list-reorder-handle{display:none;background:var(--oc-toolbar-bg);text-align:center;cursor:move;left:-6px;width:24px;height:24px;position:absolute;top:calc(50% - 12px);border-radius:3px;text-decoration:none}table.table.data td.list-reorder span.list-reorder-handle i{font-size:24px;top:2px}table.table.data td.list-reorder span.list-reorder-handle:active{background:var(--oc-toolbar-hover-bg)}table.table.data td.list-cell-tree{vertical-align:middle;position:relative;-webkit-transition:padding .3s ease;transition:padding .3s ease}table.table.data td.list-cell-tree a.tree-expand-collapse{width:24px;height:24px;display:block;position:absolute;top:calc(50% - 12px);border-radius:3px;text-decoration:none}table.table.data td.list-cell-tree a.tree-expand-collapse{margin-left:-25px}table.table.data td.list-cell-tree a.tree-expand-collapse>span{position:absolute;display:inline-block;left:0;top:0;width:24px;height:24px}table.table.data td.list-cell-tree a.tree-expand-collapse>span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f105";position:absolute;left:calc(100% - 15px);top:5px;width:24px;height:24px;font-size:15px;color:var(--bs-body-color);text-indent:0}table.table.data td.list-cell-tree a.tree-expand-collapse.is-expanded span:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f107";left:calc(100% - 17px)}.control-list.list-checkboxes table.table.data th.list-reorder,.control-list.list-checkboxes table.table.data td.list-reorder{width:18px}.control-list.list-checkboxes table.table.data td.list-reorder span.list-reorder-handle{left:-13px}tr.rowlink:not(.nolink) td{cursor:pointer}tr.rowlink:not(.nolink) td.nolink{cursor:auto}a.rowlink{color:inherit;font:inherit;text-decoration:inherit}.control-list table.table.data thead td,.control-list table.table.data thead th{border:none}.control-list .table>:not(:first-child){border-top:none}.control-list .table>:not(caption)>*>*{border-bottom-width:0}table.table.data{font-size:14px;border-bottom:1px solid var(--bs-border-color)}table.table.data.no-offset-bottom{margin-bottom:0 !important}table.table.data thead{background:var(--bs-tertiary-bg)}table.table.data thead td,table.table.data thead th{border-width:1px;border-top:1px solid var(--bs-border-color) !important;border-bottom:1px solid var(--bs-border-color) !important;border-color:var(--bs-border-color);padding:0;font-weight:600;font-size:14px;white-space:nowrap;background-color:inherit}table.table.data thead td>a,table.table.data thead th>a,table.table.data thead td>span,table.table.data thead th>span{display:block;padding:10px 15px;color:var(--bs-body-color);text-decoration:none}table.table.data thead td>a:hover,table.table.data thead th>a:hover,table.table.data thead td>span:hover,table.table.data thead th>span:hover{color:var(--bs-emphasis-color)}table.table.data thead td.explicit-left-padding>a,table.table.data thead th.explicit-left-padding>a,table.table.data thead td.explicit-left-padding>span,table.table.data thead th.explicit-left-padding>span{padding-left:0}table.table.data thead td.sort-desc>span:after,table.table.data thead th.sort-desc>span:after,table.table.data thead td.sort-desc>a:after,table.table.data thead th.sort-desc>a:after{font-size:14px;line-height:14px;display:inline-block;margin-left:6px;vertical-align:baseline;opacity:.4;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f107"}table.table.data thead td.sort-desc>span:hover:after,table.table.data thead th.sort-desc>span:hover:after,table.table.data thead td.sort-desc>a:hover:after,table.table.data thead th.sort-desc>a:hover:after{opacity:.8}table.table.data thead td.sort-asc>span:after,table.table.data thead th.sort-asc>span:after,table.table.data thead td.sort-asc>a:after,table.table.data thead th.sort-asc>a:after{font-size:14px;line-height:14px;display:inline-block;margin-left:6px;vertical-align:baseline;opacity:.4;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f106"}table.table.data thead td.sort-asc>span:hover:after,table.table.data thead th.sort-asc>span:hover:after,table.table.data thead td.sort-asc>a:hover:after,table.table.data thead th.sort-asc>a:hover:after{opacity:.8}table.table.data thead td.has-tooltip>a,table.table.data thead th.has-tooltip>a,table.table.data thead td.has-tooltip>span,table.table.data thead th.has-tooltip>span{padding-left:20px;padding-right:10px}table.table.data thead td.has-tooltip .list-tooltip,table.table.data thead th.has-tooltip .list-tooltip{float:left;position:relative;left:-5px}table.table.data thead td.active,table.table.data thead th.active{text-decoration:underline;color:var(--bs-emphasis-color)}table.table.data thead td.active:hover,table.table.data thead th.active:hover{text-decoration:none}table.table.data thead td.active>span:after,table.table.data thead th.active>span:after,table.table.data thead td.active>a:after,table.table.data thead th.active>a:after{text-decoration:none;color:#c63e26;opacity:1 !important}table.table.data thead tr th:last-child a{padding-right:25px}table.table.data thead .list-checkbox .custom-checkbox{top:-22px}table.table.data tbody tr{background-color:var(--bs-table-bg)}table.table.data tbody tr:nth-child(even) td,table.table.data tbody tr:nth-child(even) th{background-color:var(--bs-table-striped-bg)}table.table.data tbody td,table.table.data tbody th{padding:10px 15px;color:var(--bs-table-color);border-top:1px solid var(--bs-table-border-color)}table.table.data tbody td strong,table.table.data tbody th strong{font-weight:600}table.table.data tbody td div.progress,table.table.data tbody th div.progress{position:relative;overflow:visible;height:auto;margin-bottom:0;background-color:transparent;border-radius:0;box-shadow:none}table.table.data tbody td div.progress div.bar,table.table.data tbody th div.progress div.bar{position:absolute;left:-15px;top:-11px;bottom:-11px;background:#0181b9;opacity:.3}table.table.data tbody td div.progress a,table.table.data tbody th div.progress a{position:relative}table.table.data tbody tr:first-child th,table.table.data tbody tr:first-child td{border-top:none}table.table.data tbody tr.active:not(.no-data) td,table.table.data tbody tr.selected:not(.no-data) td{color:var(--bs-table-hover-color);background-color:var(--bs-table-hover-bg)}table.table.data tbody:not(.tree-drag-mode) tr.rowlink:not(.nolink):not(.active):hover td,table.table.data tbody:not(.tree-drag-mode) tr:not(.no-data):not(.active).selected td{color:var(--bs-table-hover-color);background-color:var(--bs-table-hover-bg)}table.table.data tbody:not(.tree-drag-mode) tr.rowlink:not(.nolink).active:hover td,table.table.data tbody:not(.tree-drag-mode) tr:not(.no-data).active.selected td{background:var(--oc-table-active-bg)}table.table.data tbody tr.sortable-chosen{position:relative;z-index:1}table.table.data tbody tr.sortable-chosen td{color:var(--bs-table-hover-color);background-color:var(--bs-table-hover-bg)}table.table.data tbody tr:focus{outline:none}table.table.data tbody tr.hidden td,table.table.data tbody tr.hidden th,table.table.data tbody tr.hidden td a,table.table.data tbody tr.hidden th a{display:none}table.table.data tbody tr.strike td,table.table.data tbody tr.strike th,table.table.data tbody tr.strike td a,table.table.data tbody tr.strike th a{text-decoration:line-through}table.table.data tbody tr.frozen td,table.table.data tbody tr.frozen th,table.table.data tbody tr.frozen td a,table.table.data tbody tr.frozen th a{color:#337ab7}table.table.data tbody tr.processing td,table.table.data tbody tr.processing th,table.table.data tbody tr.processing td a,table.table.data tbody tr.processing th a{color:#666666}table.table.data tbody tr.negative td,table.table.data tbody tr.negative th,table.table.data tbody tr.negative td a,table.table.data tbody tr.negative th a{color:#b2341c}table.table.data tbody tr.positive td,table.table.data tbody tr.positive th,table.table.data tbody tr.positive td a,table.table.data tbody tr.positive th a{color:#278731}table.table.data tbody tr.disabled td,table.table.data tbody tr.deleted td,table.table.data tbody tr.disabled th,table.table.data tbody tr.deleted th,table.table.data tbody tr.disabled td a,table.table.data tbody tr.deleted td a,table.table.data tbody tr.disabled th a,table.table.data tbody tr.deleted th a{color:#888888}table.table.data tbody tr.new td,table.table.data tbody tr.important td,table.table.data tbody tr.new th,table.table.data tbody tr.important th,table.table.data tbody tr.new td a,table.table.data tbody tr.important td a,table.table.data tbody tr.new th a,table.table.data tbody tr.important th a{font-weight:600}table.table.data tbody tr.safe td,table.table.data tbody tr.special td,table.table.data tbody tr.safe th,table.table.data tbody tr.special th,table.table.data tbody tr.safe td a,table.table.data tbody tr.special td a,table.table.data tbody tr.safe th a,table.table.data tbody tr.special th a{color:#98a7a8}table.table.data tbody td.column-break-word{word-wrap:break-word;word-break:break-all}table.table.data tbody td.column-single-line{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}table.table.data tbody td.column-slim{padding-left:0;padding-right:0}table.table.data tbody td.column-compact{padding:0}table.table.data tbody td.column-button{padding:5px}table.table.data tbody.icons td i[class^="icon-"]{display:inline-block;margin-right:7px;font-size:15px;color:#95a5a6;position:relative;top:1px}table.table.data tbody.clickable{cursor:pointer;user-select:none}table.table.data.no-active-indicator tbody tr td:first-child{border-left:none}table.table.data tfoot a{color:var(--bs-table-color);text-decoration:none}table.table.data tfoot td,table.table.data tfoot th{border-color:var(--bs-border-color);padding:10px 15px}table.table.data th.list-cell-type-switch,table.table.data td.list-cell-type-switch{text-align:center}table.table.data th.list-cell-type-number,table.table.data td.list-cell-type-number{text-align:right}table.table.data th.list-cell-align-left,table.table.data td.list-cell-align-left{text-align:left}table.table.data th.list-cell-align-right,table.table.data td.list-cell-align-right{text-align:right}table.table.data th.list-cell-align-center,table.table.data td.list-cell-align-center{text-align:center}table.table.data th.list-cell-type-selectable,table.table.data td.list-cell-type-selectable{white-space:nowrap}table.table.data th.list-cell-type-colorpicker,table.table.data td.list-cell-type-colorpicker{width:20px}table.table.data .list-badge{display:inline-block;position:relative;top:0;margin:0 5px 0 0;padding:1px 0 0 0;font-size:10px;width:15px;height:15px;text-align:center;border-radius:4px;color:#fff}table.table.data .list-badge>i{position:relative;top:-1px}table.table.data .list-badge.badge-default{background:#98A0A0}table.table.data .list-badge.badge-primary{background:var(--bs-primary)}table.table.data .list-badge.badge-success{background:var(--bs-success)}table.table.data .list-badge.badge-info{background:var(--bs-info)}table.table.data .list-badge.badge-warning{background:var(--bs-warning)}table.table.data .list-badge.badge-danger{background:var(--bs-danger)}table.table.data .list-switch{border-radius:100px;display:inline-block;width:20px;height:20px;text-align:center}table.table.data .list-switch.is-true{background-color:var(--bs-success);color:#fff}table.table.data .list-switch.is-false{background-color:var(--bs-secondary-bg);color:var(--bs-body-color)}table.table.data ul.list-link-list{list-style:none;padding:0;margin:0}table.table.data ul.list-link-list>li{display:inline-block}table.table.data ul.list-link-list>li:after{content:', '}table.table.data ul.list-link-list>li:last-child{padding-right:0}table.table.data ul.list-link-list>li:last-child:after{content:''}table.table.data ul.list-link-list>li a{text-decoration:underline}table.table.data .list-image-thumbs{margin-top:-7px;margin-bottom:-7px}table.table.data .list-image-thumb{display:inline-block;position:relative;margin-top:1px;margin-bottom:1px}table.table.data .list-image-thumb:after{content:'';display:block;position:absolute;box-shadow:inset 0 0 0 1px rgba(127,140,141,0.25);top:0;bottom:0;right:0;left:0;z-index:2;border-radius:4px}table.table.data .list-image-thumb>img{border-radius:4px}table.table.data .list-image-thumb.is-default-size{width:34px;height:34px}table.table.data .list-image-thumb.is-default-size>img{height:100%;width:100%;object-fit:cover}table.table.data .list-file-items{margin-top:-7px;margin-bottom:-7px}table.table.data .list-file-item{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;margin:1px;background:var(--oc-toolbar-bg);border:1px solid var(--oc-toolbar-border);border-radius:4px;color:var(--bs-secondary-color);text-decoration:none}table.table.data .list-file-item>i{font-size:18px}table.table.data .list-selectable{background:var(--oc-toolbar-bg);border:1px solid var(--oc-toolbar-border);border-radius:6px;display:inline-block;padding:0 8px;height:28px;line-height:26px;margin-top:-10px;margin-bottom:-10px;white-space:nowrap}table.table.data .list-selectable i{display:inline-block;margin-right:3px;margin-left:3px;text-align:center}table.table.data .list-colorpicker{width:0;height:0;background-color:transparent;border-right-color:var(--background-color);border-top-color:var(--background-color);border-bottom-color:var(--background-color);border-left-color:var(--background-color);border-width:10px;border-style:solid;border-radius:20px;display:inline-block;position:relative;margin-top:-5px;margin-bottom:-5px}table.table.data .list-colorpicker:after{content:"";top:-10px;left:-10px;width:20px;height:20px;position:absolute;box-shadow:inset 0 0 0 1px rgba(53,66,91,0.15);border-radius:20px}table.table.data .list-colorpicker.is-twotone{border-top-color:var(--foreground-color);border-left-color:var(--foreground-color)}table.table.data .list-checkbox{width:42px;vertical-align:top;border-right:1px solid var(--bs-table-border-color)}table.table.data tbody tr td.list-checkbox{padding-left:15px}table.table.data thead tr th.list-checkbox{padding:10.5px 0 0 15px}.list-preview{padding:0;margin-bottom:20px;background:white;border:1px solid var(--bs-border-color)}.list-preview .list-header:first-child{padding-top:20px}.list-preview .control-list:last-child{margin-bottom:0}.list-preview .control-list:last-child>table{border-bottom:none}.list-flush table.table.data thead tr th{border-top:none !important}.list-with-sidebar{display:flex}.list-with-sidebar .sidebar-area{flex-shrink:0;flex-basis:180px;width:180px}.list-with-sidebar .sidebar-list{flex-grow:1;width:0}@media (max-width:991px){.list-with-sidebar{display:block}.list-with-sidebar .sidebar-area{width:auto;flex-shrink:inherit;flex-basis:inherit;margin:0 20px 20px}.list-with-sidebar .sidebar-list{flex-grow:inherit;width:auto}}.control-list{margin-bottom:20px}.control-list p.no-data{padding:18px 20px;margin:0 20px;color:var(--bs-secondary-color);font-size:14px;text-align:center;border-radius:4px}.control-list table.table.data{margin-bottom:0}.control-list table.table.data .list-setup{width:48px;vertical-align:middle}.control-list table.table.data .list-setup a{padding:8px 15px}.control-list table.table.data .list-setup a>span{display:block;color:var(--oc-toolbar-color);background:var(--oc-toolbar-bg);width:24px;height:24px;text-align:center;border-radius:3px}.control-list table.table.data .list-setup a>span:before{font-size:14px;line-height:14px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f0ca";display:inline-block;vertical-align:middle}.control-list table.table.data .list-setup a:hover>span{color:var(--oc-toolbar-hover-color);background:var(--oc-toolbar-hover-bg)}.control-list table.table.data .list-setup.setup-show-structure a>span:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f0f0"}.control-list.list-rowlink tbody td a:not(.btn,.dropdown-item),.control-list.list-rowlink tbody th a:not(.btn,.dropdown-item){color:var(--bs-table-color)}.control-list.list-rowlink tbody td a:not(.btn,.dropdown-item):hover,.control-list.list-rowlink tbody th a:not(.btn,.dropdown-item):hover{text-decoration:none}.list-widget-container{border-radius:6px;border:1px solid var(--bs-border-color);overflow:hidden}.list-widget-container>.control-filter{background-color:var(--oc-form-control-bg);border-top:none}.list-widget-container>.control-filter>.filter-group>.filter-scope{padding:10px}.list-widget-container>.list-widget table.table.data thead th{border-top:none !important}.list-widget-container>.list-widget .control-list table.table.data{border-bottom:none}.list-widget-container{margin:0 20px 20px}.list-widget-container>.list-widget>.control-list{margin-bottom:0}@media (max-width:767px){.list-widget-container{margin:0 0 20px;border-radius:0;border:none}}.list-header{background-color:transparent;padding:0 20px 1px 20px}.list-header h3{font-size:14px;color:#7e8c8d;text-transform:uppercase;font-weight:600;margin-top:0;margin-bottom:15px}.list-footer{padding:5px 10px;border-top:1px solid var(--bs-border-color)}.list-footer a{color:var(--bs-table-color);text-decoration:none}.list-footer .list-pagination{display:flex}.list-footer .list-pagination .list-pagination-summary{padding:.475rem 5px;font-size:.9rem}.list-footer .list-pagination .list-pagination-links ul.pagination{margin-bottom:0}.list-footer .list-pagination .list-pagination-links ul.pagination .page-link{border-radius:4px;border-color:transparent;box-shadow:none}.list-footer .list-pagination .list-pagination-links ul.pagination li.disabled .page-link{color:#98a7a8;background-color:transparent}@media (max-width:992px){.list-footer .list-pagination{flex-direction:column-reverse}.list-footer .list-pagination .list-pagination-links{margin-bottom:.5rem}}.report-widget .table-container{margin:-15px}.report-widget .table-container table.table.data{margin-bottom:0}.report-widget .table-container table.table.data thead tr th{border-top:none !important}.report-widget .table-container table.table.data tbody tr:nth-child(even) td,.report-widget .table-container table.table.data tbody tr:nth-child(even) th{background-color:transparent}.list-scrollable-container{touch-action:auto;position:relative}.list-scrollable-container>.list-scrollable{position:relative}.list-scrollable-container>.list-scrollable:after,.list-scrollable-container>.list-scrollable:before{content:'';position:absolute;top:0;bottom:0;width:10px;z-index:2;opacity:0;transition:opacity .1s ease-out}.list-scrollable-container>.list-scrollable:before{background:transparent linear-gradient(90deg, #000 0%, rgba(0,0,0,0) 100%);left:10px}.list-scrollable-container>.list-scrollable:after{background:transparent linear-gradient(270deg, #000 0%, rgba(0,0,0,0) 100%);right:-10px}.list-scrollable-container>.list-scrollable.scroll-before:before{opacity:.15}.list-scrollable-container>.list-scrollable.scroll-after:after{opacity:.15}.list-scrollable-container>.list-scrollable:after,.list-scrollable-container>.list-scrollable:before{bottom:auto;height:40.5px}.list-scrollable-container>.list-scrollable:before{left:0}.list-scrollable-container>.list-scrollable:after{right:0}.list-scrollable-container>.list-scrollable.scroll-after th,.list-scrollable-container>.list-scrollable.scroll-before th{cursor:move}.list-scrollable-container>.list-scrollable.scroll-after th a,.list-scrollable-container>.list-scrollable.scroll-before th a{cursor:pointer}.list-scrollable-container>.list-scrollable>.list-content{overflow-x:auto}.control-filter .form-check .form-check-input{position:relative;top:1px}.control-filter .form-check label{font-size:14px;color:var(--bs-secondary-color)}.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check,.control-filter>.filter-group>.filter-scope.form-check{padding-left:29px}.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check,.control-filter>.filter-group>.filter-scope.form-check,.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check label,.control-filter>.filter-group>.filter-scope.form-check label{margin-bottom:0}.control-filter>.filter-group>.filter-scope.scope-checkbox.form-check:after,.control-filter>.filter-group>.filter-scope.form-check:after{content:''}.control-filter>.filter-group>.filter-scope.scope-checkbox:hover.form-check label,.control-filter>.filter-group>.filter-scope:hover.form-check label,.control-filter>.filter-group>.filter-scope.scope-checkbox.active.form-check label,.control-filter>.filter-group>.filter-scope.active.form-check label{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope.scope-dropdown,.control-filter>.filter-group>.filter-scope.dropdown{padding:8px 0 4px}.control-filter>.filter-group>.filter-scope.scope-dropdown:after,.control-filter>.filter-group>.filter-scope.dropdown:after{content:''}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container,.control-filter>.filter-group>.filter-scope.dropdown .select2-container{width:100%;display:inline-block;position:relative;top:-2px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection{height:29px;line-height:29px;padding:0 3px 0 12px;border:none;font-size:12px;border-radius:0;box-shadow:none;background-color:transparent}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection.select2-default,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection.select2-default{font-weight:normal}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection:focus-visible,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection:focus-visible{outline:auto 1px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .loading-indicator>span,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .loading-indicator>span{top:15px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container.select2-container--open,.control-filter>.filter-group>.filter-scope.dropdown .select2-container.select2-container--open{border-radius:0;border:none}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection__arrow{font-size:14px;top:1px;right:10px}.control-filter>.filter-group>.filter-scope.scope-dropdown .select2-container .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.dropdown .select2-container .select2-selection__rendered{padding:0 28px 0 0;font-size:14px;color:var(--bs-secondary-color)}.control-filter>.filter-group>.filter-scope.scope-dropdown:hover .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown:hover .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.scope-dropdown.active .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.dropdown.active .select2-selection__arrow,.control-filter>.filter-group>.filter-scope.scope-dropdown:hover .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.dropdown:hover .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.scope-dropdown.active .select2-selection__rendered,.control-filter>.filter-group>.filter-scope.dropdown.active .select2-selection__rendered{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope.scope-inline{padding:0;display:flex;align-items:center}.control-filter>.filter-group>.filter-scope.scope-inline:after{content:''}.control-filter-popover .filter-search{min-height:36px;position:relative}.control-filter-popover .filter-search input{height:auto;border:none;border-bottom:1px solid var(--bs-border-color);border-bottom-right-radius:0;border-bottom-left-radius:0;box-shadow:none;background:transparent !important;padding-top:6px;padding-bottom:6px;padding-right:35px}.control-filter-popover .filter-search .close{display:none}.control-filter-popover .filter-search .filter-items,.control-filter-popover .filter-search .filter-active-items{color:var(--bs-secondary-color);font-size:13px}.control-filter-popover .filter-search .filter-items ul,.control-filter-popover .filter-search .filter-active-items ul,.control-filter-popover .filter-search .filter-items li,.control-filter-popover .filter-search .filter-active-items li{list-style-type:none;margin:0;padding:0}.control-filter-popover .filter-search .filter-items li,.control-filter-popover .filter-search .filter-active-items li{transition:color .6s,background-color .3s}.control-filter-popover .filter-search .filter-items a,.control-filter-popover .filter-search .filter-active-items a{text-decoration:none;color:var(--bs-secondary-color);display:block;padding:7px 9px}.control-filter-popover .filter-search .filter-items a:before,.control-filter-popover .filter-search .filter-active-items a:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;margin-right:4px;position:relative;top:1px;display:inline-block;vertical-align:baseline;text-align:center;border-radius:100px}.control-filter-popover .filter-search .filter-items a:hover,.control-filter-popover .filter-search .filter-active-items a:hover{background-color:var(--oc-selection);color:white}.control-filter-popover .filter-search .filter-items{max-height:200px;overflow:auto}.control-filter-popover .filter-search .filter-items a:before{content:"\f067"}.control-filter-popover .filter-search .filter-items li.loading{padding:7px}.control-filter-popover .filter-search .filter-items li.loading>span{--loader-size:20px;display:block;width:var(--loader-size);height:var(--loader-size);border:2px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.control-filter-popover .filter-search .filter-items li.animate-enter{animation:fadeInUp .3s}.control-filter-popover .filter-search .filter-buttons{border-top:none}.control-filter-popover .filter-search .filter-active-items{border-top:1px solid var(--bs-border-color)}.control-filter-popover .filter-search .filter-active-items a{font-weight:600;color:var(--bs-body-color)}.control-filter-popover .filter-search .filter-active-items a:before{background-color:var(--bs-secondary-bg);color:var(--bs-body-color);content:"\e93e";left:-1px}.control-filter-popover .filter-search .filter-active-items a:hover:before{color:#c63e26;background-color:white}.control-filter-popover .filter-search .filter-active-items li.animate-enter{animation:fadeInDown .3s}.control-filter-popover .filter-search .filter-active-items li:last-child{border-bottom:1px solid var(--bs-border-color)}.control-filter-popover .filter-box .filter-facet{padding:10px 5px;display:flex}.control-filter-popover .filter-box .filter-facet .facet-item{white-space:nowrap;padding-left:5px;padding-right:5px;line-height:1.8}.control-filter-popover .filter-box .filter-facet .facet-item>span{font-size:12px;color:var(--bs-secondary-color)}.control-filter-popover .filter-box .filter-facet .facet-item.is-grow{flex-grow:1}.control-filter-popover .filter-box .filter-facet+.filter-facet{padding-top:0}.control-filter{padding:0 10px;color:var(--bs-secondary-color);background-color:var(--bs-body-bg);border-top:1px solid var(--bs-border-color);border-bottom:1px solid var(--bs-border-color);font-size:14px}.control-filter a{text-decoration:none;color:var(--bs-secondary-color)}.control-filter>.filter-setup{padding:6px 0}.control-filter>.filter-setup>a>span{margin-left:-2px;margin-right:-2px;display:block;color:var(--oc-toolbar-color);width:24px;height:24px;text-align:center;border-radius:3px}.control-filter>.filter-setup>a>span>i{position:relative;top:2px;font-size:20px}.control-filter>.filter-setup>a:hover>span{color:var(--oc-toolbar-hover-color);background:var(--oc-toolbar-hover-bg)}.control-filter>.filter-group{display:inline-block;vertical-align:middle}.control-filter>.filter-group>.filter-scope{padding:8px;display:block}.control-filter>.filter-group>.filter-scope .filter-label{margin-right:5px}.control-filter>.filter-group>.filter-scope .filter-setting{display:inline-block;margin-right:5px;-webkit-transition:color .6s;transition:color .6s}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress{pointer-events:none;cursor:default}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress .loading-indicator{background:transparent}.control-filter>.filter-group>.filter-scope.loading-indicator-container.in-progress .loading-indicator>span{left:unset;right:0;top:10px;background-color:var(--bs-body-bg);border-radius:50%;margin-top:0;width:20px;height:20px;background-size:15px 15px}.control-filter>.filter-group>.filter-scope:after{font-size:14px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f107"}.control-filter>.filter-group>.filter-scope.active .filter-setting{padding-left:5px;padding-right:5px;color:#FFF;background-color:var(--bs-success);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-transition:color 1s, background-color 1s;transition:color 1s, background-color 1s}.control-filter>.filter-group>.filter-scope:hover,.control-filter>.filter-group>.filter-scope.active{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope:hover .filter-label,.control-filter>.filter-group>.filter-scope.active .filter-label{color:var(--bs-emphasis-color)}.control-filter>.filter-group>.filter-scope:hover.active .filter-setting,.control-filter>.filter-group>.filter-scope.active.active .filter-setting{background-color:var(--bs-success)}.control-filter>.filter-group>.filter-has-popover{display:inline-block;padding:10px}.control-filter>.filter-group>.filter-has-popover .filter-setting{display:inline-block;-webkit-transition:color .6s;transition:color .6s}.control-filter>.filter-group>.filter-has-popover:after{font-size:14px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f107"}.control-filter>.filter-group>.filter-has-popover.active .filter-setting{padding-left:5px;padding-right:5px;color:#FFF;background-color:var(--bs-success);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;transition:color 1s,background-color 1s}.control-filter>.filter-group>.filter-has-popover:hover{color:#000}.control-filter>.filter-group>.filter-has-popover:hover .filter-label{color:var(--bs-secondary-color)}.control-filter>.filter-group>.filter-has-popover:hover.active .filter-setting{background-color:#79c035}.control-filter.is-loading{cursor:wait}.control-filter.is-loading>.filter-group{pointer-events:none;opacity:.7}.control-filter.is-loading>.filter-setup>a{opacity:0}.control-filter.is-loading>.filter-setup:after{--loader-size:20px;content:'';position:absolute;left:50%;top:50%;width:var(--loader-size);height:var(--loader-size);margin-top:calc(var(--loader-size) / -2);margin-left:calc(var(--loader-size) / -2);border:2px solid var(--oc-primary-border);border-top-color:var(--oc-accent);border-radius:50%;animation:spin .8s linear infinite}.control-filter-popover{min-width:275px}.control-filter-popover>.loading-indicator-container>.loading-indicator{border-radius:4px}.control-filter-popover>.loading-indicator-container>.loading-indicator>span{left:10px}.control-filter-popover input[type="number"]{-moz-appearance:textfield}.control-filter-popover input[type="number"]::-webkit-inner-spin-button,.control-filter-popover input[type="number"]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.control-filter-popover .filter-buttons{border-top:1px solid var(--bs-border-color);padding:10px;display:flex;border-bottom-left-radius:5px;border-bottom-right-radius:5px}.control-filter-popover .filter-buttons>div{flex-grow:1}.control-filter-popover .filter-buttons>.btn{text-align:center}.form-preview{padding:20px;margin-bottom:20px;background:var(--oc-primary-bg);border:1px solid var(--oc-primary-border)}.form-preview>.form-group:last-child{padding-bottom:0}.form-preview>.form-group:last-child .form-check{margin-bottom:0}.form-preview.form-flush{border-top:none}.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li a>span.title:before,.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li a>span.title:after,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li a>span.title:after,.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li a>span.title:after{background:var(--oc-primary-bg)}.form-preview .control-tabs.primary-tabs>ul.nav-tabs>li.active a:before,.form-preview .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a:before,.form-preview .control-tabs.primary-tabs>div>div>ul.nav-tabs>li.active a:before{background-color:var(--oc-primary-bg)}.form-elements:before,.form-tabless-fields:before,.form-elements:after,.form-tabless-fields:after{content:" ";display:table}.form-elements:after,.form-tabless-fields:after{clear:both}.form-elements:before,.form-tabless-fields:before,.form-elements:after,.form-tabless-fields:after{content:" ";display:table}.form-elements:after,.form-tabless-fields:after{clear:both}.form-control{position:relative;-webkit-appearance:none}.form-control:focus{border:1px solid var(--oc-border-focus);box-shadow:none}.form-control.growable,.form-control.is-growable{width:110px}.form-control.growable:focus,.form-control.is-growable:focus,.form-control.growable:active,.form-control.is-growable:active{width:200px !important}@media (max-width:576px){.form-control.growable,.form-control.is-growable{width:40px;text-indent:-999px}.form-control.growable:focus,.form-control.is-growable:focus,.form-control.growable:active,.form-control.is-growable:active{text-indent:0;width:100px !important}.form-control.growable.icon,.form-control.is-growable.icon{padding-right:0 !important}}.form-control.is-searchable{border-radius:100px}.search-input-container{position:relative}.search-input-container:before{position:absolute;width:16px;height:16px;background-position:0 -38px;z-index:1;right:8px;top:11px}.form-group{position:relative;box-sizing:border-box}.form-group:empty{display:none}.form-group,.form-group.layout-item{padding-bottom:20px;margin-bottom:0}.form-group.is-required>label:after{background-color:var(--bs-danger);width:5px;height:5px;margin-left:3px;vertical-align:super;font-size:60%;content:"";display:inline-block;border-radius:8px}.form-group .form-translatable{display:inline-block;position:relative;height:20px;width:25px;border-radius:5px;background-color:var(--oc-input-translatable-bg);color:var(--oc-input-translatable-color);margin-bottom:-5px;margin-left:2px}.form-group .form-translatable i{font-size:16px;position:absolute;top:2px;left:4px;cursor:pointer}.form-group .form-translatable.no-label{position:absolute;top:1px;right:0;left:auto;z-index:2}.form-group.span-full{width:100%;float:left}.form-group.span-left{float:left;width:48.5%;clear:left}.form-group.span-right{float:right;width:48.5%;clear:right}.form-group.clear-full{clear:both}.form-group.clear-left{clear:left}.form-group.clear-right{clear:right}.form-group.layout-relative{padding-bottom:0}.form-group.checkbox-field{padding-bottom:5px}.form-group.checkbox-field>.form-check{margin-bottom:10px}.form-group.radio-field>.form-check{margin-bottom:10px}.form-group.number-field>.form-control{text-align:right}.form-group.radio-align{padding-left:23px;margin-top:-20px}.form-group.checkbox-align{padding-left:23px;margin-top:-5px}.form-group.field-align-above{margin-top:-5px}.form-group.field-slim.span-left,.form-group.field-slim.span-right{width:50%}.form-group.field-indent{padding-left:23px}.form-group.input-sidebar-control{padding-right:35px}.form-group.input-sidebar-control .sidebar-control{position:absolute;right:8px;top:34px;font-size:16px;color:#C4C4C4}.form-group.input-sidebar-control .sidebar-control:hover,.form-group.input-sidebar-control .sidebar-control:focus{text-decoration:none;color:var(--bs-link-color);outline:none}.form-horizontal .col-horizontal{width:155px}.form-horizontal .form-group.checkbox-field{padding-bottom:20px}.form-group-preview .form-control{background-color:var(--oc-form-control-disabled-bg);height:auto;min-height:38px;word-break:break-word;box-shadow:none}.form-group-preview .custom-checkbox label,.form-group-preview .custom-radio label{cursor:default}.col-form-label,.form-label{font-weight:600}.form-text{margin-bottom:0}.form-text.before-field{margin-top:-0.135rem;margin-bottom:.385rem}.control-disabled .form-text{opacity:.5}.input-with-icon{position:relative}.input-with-icon>.icon{position:absolute;z-index:10;padding:10px;pointer-events:none;color:#bdbdbd;font-size:15px;margin-top:1px}.input-with-icon.right-align>.icon{right:0}.input-with-icon.right-align input{padding-right:32px !important}.input-with-icon.left-align>.icon{left:0}.input-with-icon.left-align input{padding-left:32px !important}.input-with-icon.size-sm>.icon{margin-top:0;padding:5px 8px}.input-no-spinner{-moz-appearance:textfield}.input-no-spinner::-webkit-inner-spin-button,.input-no-spinner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.field-section{border-bottom:1px solid var(--bs-border-color);padding-top:3px;padding-bottom:7px}.field-section>h4{font-weight:400;font-size:1.3rem}.field-section>p:first-child,.field-section>h4:first-child{margin:0}.field-section.is-collapsible{cursor:pointer}.field-section.is-collapsible>h4:before{display:inline-block;vertical-align:baseline;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f077";font-size:12px;margin:2px 8px 0;float:right;color:rgba(0,0,0,0.4);-webkit-transition:all .3s;transition:all .3s;-webkit-transform:scale(1, 1);transform:scale(1, 1)}.field-section.is-collapsible:hover{border-bottom:1px solid #b0bdcd}.field-section.is-collapsible:hover>h4:before{color:inherit}.field-action{border-bottom:1px solid var(--bs-border-color);padding:10px 0 5px;margin-top:-20px}.field-action h5{margin-bottom:.35rem;margin-top:.75rem;font-weight:400;font-size:1rem}.field-action p{color:var(--bs-secondary-color);margin-bottom:0;font-size:.9rem}.field-action .field-action-button{margin-top:15px;margin-bottom:10px}@media (min-width:992px){.field-action .field-action-button{text-align:right}}.form-group.section-field.collapsed .field-section.is-collapsible>h4:before{-webkit-transform:scale(1, -1);transform:scale(1, -1)}.field-horizontalrule hr{height:1px;background:#000;margin:0;opacity:.1}.field-textarea{resize:vertical}.field-textarea.size-tiny{min-height:50px}.field-textarea.size-small{min-height:100px}.field-textarea.size-large{min-height:200px}.field-textarea.size-huge{min-height:250px}.field-textarea.size-giant{min-height:350px}.field-checkboxlist .field-checkboxlist-inner{border-radius:4px;background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color)}.field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:15px 15px 2px 15px}.field-checkboxlist .checkboxlist-controls{padding:3px;font-size:0;white-space:nowrap;background:var(--oc-form-control-bg);border-top:1px solid var(--bs-border-color);border-left:1px solid var(--bs-border-color);border-right:1px solid var(--bs-border-color);border-top-left-radius:4px;border-top-right-radius:4px}.field-checkboxlist .checkboxlist-controls+.field-checkboxlist-inner{border-top-left-radius:0;border-top-right-radius:0;border-top-color:var(--oc-toolbar-border)}.field-checkboxlist .form-check{margin-bottom:10px}.field-checkboxlist .checkboxlist-group{margin:0;padding-left:1.1rem;list-style:none}.field-checkboxlist .checkboxlist-group:not(:has(*)),.field-checkboxlist .checkboxlist-group-item:not(:has(*)){display:none}.field-checkboxlist-scrollable{height:300px}.field-checkboxlist-scrollable .form-check{margin-left:15px;margin-top:15px;margin-bottom:10px}.field-checkboxlist-scrollable .form-check~.form-check{margin-top:0}.form-group.inline-options .field-checkboxlist:not(.is-scrollable) .field-checkboxlist-inner{padding:15px 15px 5px 15px}.form-group.inline-options .form-check{display:inline-block;margin-right:15px}.form-buttons{padding-bottom:20px;font-size:0;width:100%}.form-buttons:before,.form-buttons:after{content:" ";display:table}.form-buttons:after{clear:both}.form-buttons:before,.form-buttons:after{content:" ";display:table}.form-buttons:after{clear:both}.form-buttons.is-horizontal{padding-left:155px}.form-buttons .btn{margin-right:7px}.form-buttons .btn.no-margin-right{margin-right:0}.form-buttons .btn-group{margin-right:7px}.form-buttons .btn-group .btn{margin-right:0}.form-buttons .pull-right{margin-right:0;margin-left:7px}.form-buttons.buttons-offset{padding-left:20px}body.slim-container .form-buttons{padding:0 20px 20px}body .modal-footer .form-buttons{padding:0}@media (max-width:769px){.form-group.span-left,.form-group.span-right{width:100%;clear:none}}body.compact-container .form-fatal-error{padding:1rem 20px 0 20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border:none}.select2-dropdown{z-index:10400}[data-control~=toolbar] .form-control{display:inline-block;margin-right:15px}[data-control~=toolbar] input[type=text].form-control,[data-control~=toolbar] label{position:relative;top:5px}[data-control~=toolbar] label{margin-right:7px}[data-control~=toolbar] label.standalone{margin-right:15px}[data-control~=toolbar] .select2-container{display:inline-block;width:auto;height:36px;margin-right:15px}[data-control~=toolbar] .select2-container .select2-selection__rendered{line-height:17px}[data-control~=toolbar] .select2-container .select2-selection--single{height:36px}[data-control~=toolbar] select.form-control.custom-select{display:none}.control-simplelist{padding:20px 20px 2px 20px;margin-bottom:20px;border:1px solid var(--bs-border-color);background:var(--oc-form-control-bg);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px}.control-simplelist ul{padding-left:15px}.control-simplelist.form-control ul{margin-bottom:0}.control-simplelist.form-control li{padding-top:5px;padding-bottom:5px}.control-simplelist.with-icons ul,.control-simplelist.with-checkboxes ul,.control-simplelist.is-divided ul,.control-simplelist.is-selectable ul{list-style-type:none;padding-left:0}.control-simplelist.with-icons li>i{margin-right:5px}.control-simplelist.with-checkboxes li div.custom-checkbox,.control-simplelist.with-checkboxes li div.form-check{display:inline-block}.control-simplelist.with-checkboxes li:first-child{margin-top:0}.control-simplelist.with-checkboxes li:last-child div.custom-checkbox,.control-simplelist.with-checkboxes li:last-child div.form-check{margin-bottom:0}.control-simplelist.with-checkboxes li:last-child div.custom-checkbox label,.control-simplelist.with-checkboxes li:last-child div.form-check label{margin-bottom:5px}.control-simplelist.is-sortable li{position:relative;padding:2px 0 2px 24px}.control-simplelist.is-sortable li .drag-handle{width:24px;height:24px;cursor:move;text-align:center;color:var(--oc-toolbar-color);background:var(--oc-toolbar-bg);border-radius:3px;text-decoration:none;position:absolute;top:1px;left:-6px}.control-simplelist.is-sortable li .drag-handle>i{font-size:24px}.control-simplelist.is-sortable li.sortable-chosen.sortable-ghost{position:relative}.control-simplelist.is-sortable li.sortable-chosen.sortable-ghost .drag-handle{background:var(--oc-toolbar-hover-bg)}.control-simplelist.is-scrollable{height:200px}.control-simplelist.is-scrollable.size-tiny{min-height:250px}.control-simplelist.is-scrollable.size-small{min-height:300px}.control-simplelist.is-scrollable.size-large{min-height:400px}.control-simplelist.is-scrollable.size-huge{min-height:450px}.control-simplelist.is-scrollable.size-giant{min-height:550px}.control-simplelist.is-divided,.control-simplelist.is-selectable,.control-simplelist.is-selectable-box{padding:0}.control-simplelist.is-divided li .heading,.control-simplelist.is-selectable li .heading,.control-simplelist.is-selectable-box li .heading{font-size:14px;font-weight:600;margin-top:10px}.control-simplelist.is-divided li,.control-simplelist.is-selectable li{padding:5px 10px;border-bottom:1px solid var(--bs-border-color)}.control-simplelist.is-divided li:last-child,.control-simplelist.is-selectable li:last-child{border-bottom:none}.control-simplelist.is-selectable li a{padding:5px 10px;margin:-5px -10px;display:block;color:var(--bs-body-color)}.control-simplelist.is-selectable li:hover{background:var(--bs-primary);cursor:pointer}.control-simplelist.is-selectable li:hover,.control-simplelist.is-selectable li:hover a,.control-simplelist.is-selectable li:hover .heading,.control-simplelist.is-selectable li:hover .description{color:white}.control-simplelist.is-selectable li:hover a{text-decoration:none}.control-simplelist.is-selectable li.active a{background:#f0f0f0}.control-simplelist.is-selectable li.active a:hover{background:var(--bs-primary)}.control-simplelist.is-selectable-box{padding-top:15px;margin-bottom:0;background:transparent}.control-simplelist.is-selectable-box.is-flush{padding:0;margin-left:-8px}.control-simplelist.is-selectable-box.is-flush ul{padding-left:0}.control-simplelist.is-selectable-box li{width:155px;margin:8px;display:inline-block;text-align:center;vertical-align:top}.control-simplelist.is-selectable-box li a{text-decoration:none;display:block;color:var(--bs-body-color)}.control-simplelist.is-selectable-box li a .box{display:block;width:155px;height:155px;border:3px solid rgba(0,0,0,0.1);position:relative;background:var(--oc-form-control-bg);-webkit-transition:border .3s ease;transition:border .3s ease}.control-simplelist.is-selectable-box li a .image{display:block;width:56px;height:56px;position:absolute;top:50%;left:50%;margin-top:-28px;margin-left:-28px}.control-simplelist.is-selectable-box li a .image>i{font-size:56px;color:rgba(0,0,0,0.25)}.control-simplelist.is-selectable-box li a .heading{margin:7px 0;padding:0}.control-simplelist.is-selectable-box li a .description{font-size:12px}.control-simplelist.is-selectable-box li a:hover .box{border-color:rgba(0,0,0,0.2)}.control-simplelist.is-selectable-box li a:hover .image>i{color:rgba(0,0,0,0.45)}.control-simplelist.is-selectable-box li.active a .box{border-color:var(--oc-selection)}.control-simplelist.is-selectable-box li.active a .image>i{color:rgba(0,0,0,0.45)}.list-preview .control-simplelist.is-selectable ul{margin-bottom:0}.drag-noselect{user-select:none}.control-scrollbar{position:relative;overflow:hidden;height:100%}.control-scrollbar>.scrollbar-scrollbar{position:absolute;z-index:100}.control-scrollbar>.scrollbar-scrollbar .scrollbar-track{background-color:transparent;position:relative;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}.control-scrollbar>.scrollbar-scrollbar .scrollbar-track .scrollbar-thumb{background-color:rgba(0,0,0,0.35);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;cursor:pointer;overflow:hidden;position:absolute}.control-scrollbar>.scrollbar-scrollbar.disabled{display:none !important}.control-scrollbar.vertical>.scrollbar-scrollbar{right:0;margin-right:5px;width:6px}.control-scrollbar.vertical>.scrollbar-scrollbar .scrollbar-track{height:100%;width:6px}.control-scrollbar.vertical>.scrollbar-scrollbar .scrollbar-track .scrollbar-thumb{height:20px;width:6px;top:0;left:0}.control-scrollbar.vertical>.scrollbar-scrollbar:active,.control-scrollbar.vertical>.scrollbar-scrollbar:hover{width:8px;-webkit-transition:width .3s;transition:width .3s}.control-scrollbar.vertical>.scrollbar-scrollbar:active .scrollbar-track,.control-scrollbar.vertical>.scrollbar-scrollbar:hover .scrollbar-track,.control-scrollbar.vertical>.scrollbar-scrollbar:active .scrollbar-thumb,.control-scrollbar.vertical>.scrollbar-scrollbar:hover .scrollbar-thumb{width:8px;-webkit-transition:width .3s;transition:width .3s}.control-scrollbar.horizontal>.scrollbar-scrollbar{margin:0 0 5px;clear:both;height:6px}.control-scrollbar.horizontal>.scrollbar-scrollbar .scrollbar-track{width:100%;height:6px}.control-scrollbar.horizontal>.scrollbar-scrollbar .scrollbar-track .scrollbar-thumb{height:6px;margin:2px 0;left:0;top:0}.control-scrollbar.horizontal>.scrollbar-scrollbar:active,.control-scrollbar.horizontal>.scrollbar-scrollbar:hover{height:8px;-webkit-transition:height .3s;transition:height .3s}.control-scrollbar.horizontal>.scrollbar-scrollbar:active .scrollbar-track,.control-scrollbar.horizontal>.scrollbar-scrollbar:hover .scrollbar-track,.control-scrollbar.horizontal>.scrollbar-scrollbar:active .scrollbar-thumb,.control-scrollbar.horizontal>.scrollbar-scrollbar:hover .scrollbar-thumb{height:8px;-webkit-transition:height .3s;transition:height .3s}@media (pointer:coarse){.control-scrollbar{overflow:auto}}.no-touch .control-scrollbar>.scrollbar-scrollbar{opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.no-touch .control-scrollbar:active>.scrollbar-scrollbar,.no-touch .control-scrollbar:hover>.scrollbar-scrollbar{opacity:1}.scrollable-panel-container{position:relative}.scrollable-panel-container:before{content:'';position:absolute;top:0;left:0;width:100%;height:0;background:transparent url(../images/scrollable-panel-shadow.png) repeat-x left top;transition:height .1s,width .1s}.scrollable-panel-container.scrolled:before{height:9px}.scrollable-panel-container.horizontal:before{top:0;width:0;height:100%}.scrollable-panel-container.horizontal.scrolled:before:before{width:9px;background:transparent url(../images/scrollable-panel-shadow-horizontal.png) repeat-x left top}.scrollable-panel-container .scrollable{position:absolute;left:0;top:0;height:100%;width:100%}.control-filelist p.no-data{padding:22px 0;margin:0;color:#666666;font-size:14px;text-align:center;font-weight:normal;border-radius:4px}.control-filelist ul{padding:0;margin:0}.control-filelist ul li{font-weight:normal;line-height:150%;position:relative;list-style:none}.control-filelist ul li a:hover{background:var(--oc-toolbar-hover-bg)}.control-filelist ul li.active>a{background:var(--oc-selection);position:relative}.control-filelist ul li.active>a span.title,.control-filelist ul li.active>a span.description{color:#ffffff}.control-filelist ul li a{display:block;padding:10px 45px 10px 20px;outline:none}.control-filelist ul li a:hover,.control-filelist ul li a:focus,.control-filelist ul li a:active{text-decoration:none}.control-filelist ul li a span{display:block}.control-filelist ul li a span.title{font-weight:normal;color:var(--oc-toolbar-color);font-size:14px}.control-filelist ul li a span.description{color:var(--oc-primary-color);font-size:12px;white-space:nowrap;font-weight:normal;overflow:hidden;text-overflow:ellipsis}.control-filelist ul li a span.description strong{color:var(--oc-toolbar-color);font-weight:normal}.control-filelist ul li.group>h4,.control-filelist ul li.group>div.group>h4{font-weight:normal;font-size:14px;margin-top:0;margin-bottom:0;position:relative}.control-filelist ul li.group>h4 a,.control-filelist ul li.group>div.group>h4 a{padding:10px 20px 10px 53px;color:var(--oc-toolbar-color);position:relative;outline:none}.control-filelist ul li.group>h4 a:hover,.control-filelist ul li.group>div.group>h4 a:hover{background:transparent}.control-filelist ul li.group>h4 a:before,.control-filelist ul li.group>div.group>h4 a:before,.control-filelist ul li.group>h4 a:after,.control-filelist ul li.group>div.group>h4 a:after{width:10px;height:10px;display:block;position:absolute;top:1px}.control-filelist ul li.group>h4 a:after,.control-filelist ul li.group>div.group>h4 a:after{left:33px;top:9px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f114";color:#a1aab1;font-size:16px}.control-filelist ul li.group>h4 a:before,.control-filelist ul li.group>div.group>h4 a:before{left:20px;top:9px;color:#cfcfcf;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f0da";transform:rotate(90deg) translate(5px, 0);transition:all .1s ease}.control-filelist ul li.group>ul>li>a{padding-left:52px}.control-filelist ul li.group>ul>li.group{padding-left:20px}.control-filelist ul li.group>ul>li.group>ul>li>a{padding-left:324px;margin-left:-270px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:297px;margin-left:-243px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:270px;margin-left:-216px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:243px;margin-left:-189px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:216px;margin-left:-162px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:189px;margin-left:-135px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:162px;margin-left:-108px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:135px;margin-left:-81px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:108px;margin-left:-54px}.control-filelist ul li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li.group>ul>li>a{padding-left:81px;margin-left:-27px}.control-filelist ul li.group[data-status=collapsed]>h4 a:before,.control-filelist ul li.group[data-status=collapsed]>div.group>h4 a:before{transform:rotate(0deg) translate(3px, 0)}.control-filelist ul li.group[data-status=collapsed]>ul,.control-filelist ul li.group[data-status=collapsed]>div.subitems{display:none}.control-filelist ul li>div.controls{position:absolute;right:19px;top:6px}.control-filelist ul li>div.controls .dropdown{width:14px;height:21px}.control-filelist ul li>div.controls .dropdown.open a.control{display:block!important}.control-filelist ul li>div.controls .dropdown.open a.control:before{visibility:visible;display:block}.control-filelist ul li>div.controls a.control{color:var(--oc-toolbar-color);font-size:14px;visibility:hidden;overflow:hidden;width:14px;height:21px;display:none;text-decoration:none;cursor:pointer;padding:0;opacity:.5}.control-filelist ul li>div.controls a.control:before{visibility:visible;display:block;margin-right:0}.control-filelist ul li>div.controls a.control:hover{opacity:1}.control-filelist ul li:hover>div.controls,.control-filelist ul li:hover>a.control{display:block!important}.control-filelist ul li:hover>div.controls>a.control,.control-filelist ul li:hover>a.control>a.control{display:block!important}.control-filelist ul li .checkbox{position:absolute;top:-5px;right:0}.control-filelist ul li .checkbox label{margin-right:0}.control-filelist ul li .checkbox label:before{border-color:#cccccc}.control-filelist.single-line ul li a span.title{text-overflow:ellipsis;overflow:hidden;white-space:nowrap}.control-filelist.filelist-hero ul li{background:var(--oc-primary-bg);border-bottom:none}.control-filelist.filelist-hero ul li>a{padding:11px 45px 10px 50px;font-size:13px;border-bottom:1px solid var(--oc-toolbar-border)}.control-filelist.filelist-hero ul li>a span.title{font-size:14px;font-weight:normal;color:var(--oc-primary-color)}.control-filelist.filelist-hero ul li>a span.description{font-size:13px}.control-filelist.filelist-hero ul li>a .list-icon{position:absolute;left:14px;top:9px;font-size:22px;color:#b7c0c2}.control-filelist.filelist-hero ul li>a .list-description{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:16px;color:var(--oc-primary-color);cursor:help;opacity:.7;transition:opacity .15s ease}.control-filelist.filelist-hero ul li>a .list-description:hover{opacity:1}.control-filelist.filelist-hero ul li>a:hover{background:var(--oc-dropdown-hover-bg);border-bottom:1px solid var(--oc-dropdown-hover-bg) !important}.control-filelist.filelist-hero ul li>a:hover span.title,.control-filelist.filelist-hero ul li>a:hover span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:hover .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:hover .list-description{color:var(--oc-dropdown-hover-color)}.control-filelist.filelist-hero ul li>a:active{background:var(--oc-dropdown-active-bg);border-bottom:1px solid var(--oc-dropdown-active-bg) !important}.control-filelist.filelist-hero ul li>a:active span.title,.control-filelist.filelist-hero ul li>a:active span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:active .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>a:active .list-description{color:var(--oc-dropdown-hover-color)}.control-filelist.filelist-hero ul li .checkbox{top:-4px;right:0}.control-filelist.filelist-hero ul li.no-description .list-icon{top:10px}.control-filelist.filelist-hero ul li.has-description>a{padding-right:40px}.control-filelist.filelist-hero ul li.active>a{border-bottom:1px solid var(--oc-selection)}.control-filelist.filelist-hero ul li.active>a:after{display:none}.control-filelist.filelist-hero ul li.active>a>span.borders:before{content:' ';position:absolute;width:100%;height:1px;display:block;left:0;background-color:var(--oc-selection)}.control-filelist.filelist-hero ul li.active>a>span.borders:before{top:-1px}.control-filelist.filelist-hero ul li.active>a:hover>span.borders:before{background-color:var(--oc-dropdown-hover-bg)}.control-filelist.filelist-hero ul li.active>a:active>span.borders:before{background-color:var(--oc-dropdown-active-bg)}.control-filelist.filelist-hero ul li.active>a span.title,.control-filelist.filelist-hero ul li.active>a span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li.active>a .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero ul li>h4{padding-top:7px;padding-bottom:6px;border-bottom:1px solid var(--oc-toolbar-border)}.control-filelist.filelist-hero ul li>div.controls{display:none;position:absolute;right:16px;top:15px}.control-filelist.filelist-hero ul li>div.controls>a.control{width:16px;height:23px;background:transparent;overflow:hidden;display:inline-block;color:var(--oc-dropdown-hover-color) !important;padding:0}.control-filelist.filelist-hero ul li>div.controls>a.control:before{font-size:17px}.control-filelist.filelist-hero ul li:hover>div.controls{display:block}.control-filelist.filelist-hero ul li.separator{position:relative;border-bottom:1px solid var(--bs-border-color);padding:12px 15px 13px 15px}.control-filelist.filelist-hero ul li.separator:before{z-index:31;content:'';display:block;width:0;height:0;border-left:9.5px solid transparent;border-right:9.5px solid transparent;border-top:11px solid var(--oc-primary-bg);border-bottom-width:0;position:absolute;left:13px;bottom:-8px}.control-filelist.filelist-hero ul li.separator:after{z-index:30;content:'';display:block;width:0;height:0;border-left:8.5px solid transparent;border-right:8.5px solid transparent;border-top:9px solid var(--bs-border-color);border-bottom-width:0;position:absolute;left:14px;bottom:-9px}.control-filelist.filelist-hero ul li.separator h5{color:var(--bs-heading-color);font-size:14px;margin:0;font-weight:normal;padding:0}.control-filelist.filelist-hero ul>li.group>ul>li>a{padding-left:66px}.control-filelist.filelist-hero.single-level ul li:hover{background:var(--oc-dropdown-hover-bg)}.control-filelist.filelist-hero.single-level ul li:hover>a{background:var(--oc-dropdown-hover-bg);border-bottom:1px solid var(--oc-dropdown-hover-bg) !important}.control-filelist.filelist-hero.single-level ul li:hover>a span.title,.control-filelist.filelist-hero.single-level ul li:hover>a span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero.single-level ul li:hover>a .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero.single-level ul li:active{background:var(--oc-dropdown-active-bg)}.control-filelist.filelist-hero.single-level ul li:active>a{background:var(--oc-dropdown-active-bg);border-bottom:1px solid var(--oc-dropdown-active-bg) !important}.control-filelist.filelist-hero.single-level ul li:active>a span.title,.control-filelist.filelist-hero.single-level ul li:active>a span.description{color:var(--oc-dropdown-hover-color) !important}.control-filelist.filelist-hero.single-level ul li:active>a .list-icon{color:var(--oc-dropdown-hover-color) !important}.control-filelist.snippet-list li>a{position:relative;color:var(--oc-toolbar-color)}.control-filelist.snippet-list li>a:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e94b";font-size:19.5px;position:absolute;width:17px;height:19px;left:18px;top:12px}.control-filelist.snippet-list li>a:hover:before{color:var(--oc-dropdown-hover-color)}.control-filelist.snippet-list li.group ul li>a:before{left:34px}.oc-progress-bar{background-color:var(--oc-accent, #0076ff)}.control-scrollpanel{position:relative;background:var(--bs-tertiary-bg)}.control-scrollpanel .control-scrollbar.vertical>.scrollbar-scrollbar{right:0}.tooltip .tooltip-inner{text-align:left;padding:5px 8px}.tooltip.show{opacity:1}.status-indicator{width:10px;height:10px;border-radius:20px;display:inline-block;margin-right:3px;border:1px solid rgba(var(--bs-body-bg-rgb), .9)}.oc-logo-white{background-image:url(../images/october-logo-white.svg);background-position:50% 50%;background-repeat:no-repeat;background-size:contain}.oc-logo,.october-cms-logo-grey{background-image:url(../images/october-logo.svg);background-position:50% 50%;background-repeat:no-repeat;background-size:contain}.layout.control-tabs.oc-logo-transparent:not(.has-tabs),.flex-layout-column.oc-logo-transparent:not(.has-tabs),.layout-cell.oc-logo-transparent{background-size:auto 38px;background-repeat:no-repeat;background-image:url(../images/october-logo.svg);background-position:50% 50%;position:relative}.report-widget{padding:15px;background:var(--oc-popup-bg);box-sizing:border-box;border-radius:6px;font-size:14px}.report-widget h3{font-size:14px;color:#7e8c8d;text-transform:uppercase;font-weight:600;margin-top:0;margin-bottom:30px}.report-widget .height-100{height:100px}.report-widget .height-200{height:200px}.report-widget .height-300{height:300px}.report-widget .height-400{height:400px}.report-widget .height-500{height:500px}.report-widget p.report-description{margin-bottom:0;margin-top:15px;font-size:12px;line-height:190%;color:#7e8c8d}.report-widget a:not(.btn){color:#7e8c8d;text-decoration:none}.report-widget a:not(.btn):hover{color:var(--bs-link-color);text-decoration:none}.report-widget p.flash-message.static{margin-bottom:0}.report-widget .icon-circle.success,.report-widget .icon-circle-full.success{color:var(--bs-success)}.report-widget .icon-circle.primary,.report-widget .icon-circle-full.primary{color:var(--bs-primary)}.report-widget .icon-circle.warning,.report-widget .icon-circle-full.warning{color:var(--bs-warning)}.report-widget .icon-circle.danger,.report-widget .icon-circle-full.danger{color:var(--bs-danger)}.report-widget .icon-circle.info,.report-widget .icon-circle-full.info{color:var(--bs-info)}.control-treelist ol{padding:0;margin:0;list-style:none}.control-treelist ol ol{margin:0;margin-left:15px;padding-left:15px;border-left:1px solid #dbdee0}.control-treelist>ol>li>div.record:before{display:none}.control-treelist li{margin:0;padding:0}.control-treelist li>div.record{margin:0;font-size:14px;margin-bottom:5px;position:relative;display:block}.control-treelist li>div.record:before{color:#bdc3c7;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f10c";font-size:6px;position:absolute;left:-18px;top:11px}.control-treelist li>div.record>a.move{display:inline-block;padding:7px 0 7px 10px;text-decoration:none;color:#bdc3c7}.control-treelist li>div.record>a.move:hover{color:rgba(215,225,234,0.7)}.control-treelist li>div.record>a.move:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f0c9"}.control-treelist li>div.record>span{color:var(--bs-table-color);display:inline-block;padding:7px 15px 7px 5px}.control-treelist li.dragged{position:absolute;z-index:2000;width:auto !important;height:auto !important}.control-treelist li.dragged>div.record{opacity:.5;background:rgba(215,225,234,0.7) !important}.control-treelist li.dragged>div.record>a.move:before,.control-treelist li.dragged>div.record>span{color:white}.control-treelist li.dragged>div.record:before{display:none}.control-treelist li.placeholder{display:inline-block;position:relative;background:rgba(215,225,234,0.7) !important;height:25px;margin-bottom:5px}.control-treelist li.placeholder:before{display:block;position:absolute;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f053";color:#d35714;left:-10px;top:8px;z-index:2000}html .sidenav-tree{background:var(--oc-settings-bg)}.sidenav-tree{width:300px;flex-shrink:0;border-right:1px solid var(--oc-primary-border)}.sidenav-tree .sidenav-tree-scroll-canvas{position:absolute;top:0;bottom:0;left:0;right:0}.sidenav-tree .settings-search-toolbar-item{display:block;background:var(--oc-form-control-bg);position:relative}.sidenav-tree .settings-search-toolbar-item:before{display:block;width:15px;height:15px;position:absolute;background-position:-238px 0;top:13px;right:15px;font-size:0}.sidenav-tree .settings-search-toolbar-item input.form-control{border:none;outline:none;padding:1px 35px 1px 10px;border-bottom:1px solid var(--oc-primary-border);height:40px;background:transparent;border-radius:0}.sidenav-tree .settings-search-toolbar-item input.form-control.search{background-position:right -78px}.sidenav-tree ul{padding:0;margin:0;list-style:none}.sidenav-tree div.scrollbar-thumb{background:rgba(0,0,0,0.2) !important}.sidenav-tree ul.top-level>li[data-status=collapsed]>div.group h3:before{transform:rotate(0deg) translate(2px, -2px)}.sidenav-tree ul.top-level>li[data-status=collapsed]>div.group:before,.sidenav-tree ul.top-level>li[data-status=collapsed]>div.group:after{display:none}.sidenav-tree ul.top-level>li[data-status=collapsed] ul{display:none}.sidenav-tree ul.top-level>li>div.group{position:relative;position:sticky;top:0;z-index:1}.sidenav-tree ul.top-level>li>div.group h3{user-select:none;font-size:14px;font-weight:600;padding:9px 15px 7px 25px;margin:0;position:relative;cursor:pointer}.sidenav-tree ul.top-level>li>div.group h3:before{display:block;position:absolute;width:10px;height:10px;left:10px;top:10px;font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f105";transform:rotate(90deg) translate(5px, -3px);transition:all .1s ease;font-size:16px}.sidenav-tree ul.top-level>li>ul li{padding:5px}.sidenav-tree ul.top-level>li>ul li a{display:block;position:relative;padding:10px 5px 15px 44px;text-decoration:none !important;border-radius:6px}.sidenav-tree ul.top-level>li>ul li a i{position:absolute;left:11px;top:11px;font-size:22px}.sidenav-tree ul.top-level>li>ul li a span{display:block;line-height:150%}.sidenav-tree ul.top-level>li>ul li a span.header{margin-bottom:3px}.sidenav-tree ul.top-level>li>ul li a span.description{font-size:.875em}.sidenav-tree ul.top-level>li>ul li a:hover,.sidenav-tree ul.top-level>li>ul li.active a{opacity:1;text-decoration:none}.system-home-link{display:block;padding:13px 15px;background:var(--bs-secondary);color:white;font-size:14px;line-height:14px;text-decoration:none}.system-home-link i{display:inline-block;margin-right:10px}.system-home-link i:before{content:'';width:24px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-52px 0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.system-home-link i:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}.system-home-link:hover{color:white;text-decoration:none}.system-home-link.back-link-other{display:none;margin-bottom:20px}@media (max-width:768px){.system-home-link.back-link-other{display:block}}.layout-container .system-home-link.back-link-other{margin:-20px -20px 20px -20px}body.slim-container .layout-container .system-home-link.back-link-other{margin:-20px 0 20px 0}body.compact-container .layout-container .system-home-link.back-link-other{margin:0}@media (max-width:768px){.sidenav-tree{border-right:none;width:100%;height:auto;display:none !important}body.has-sidenav-tree #layout-body{display:block}}body.sidenav-tree-expanded #layout-body{display:none !important}body.sidenav-tree-expanded .sidenav-tree{display:block !important;margin:0 auto;border-right:none;border-left:none;flex-shrink:inherit;width:100%;padding:30px 10px 50px 10px}body.sidenav-tree-expanded .sidenav-tree .scrollbar-scrollbar{display:none !important}body.sidenav-tree-expanded .sidenav-tree .system-home-link{display:none !important}body.sidenav-tree-expanded .sidenav-tree .sidenav-tree-scroll-canvas{position:relative}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>div.group{margin-top:10px}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>div.group h3{background:transparent}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:flex-start;align-items:stretch;align-content:stretch}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li{display:inline-block;padding:10px;width:350px}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li a{background:var(--oc-settings-item);padding-top:12px;padding-right:15px;padding-bottom:15px;padding-left:54px;min-height:100px;height:100%;overflow:hidden}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li a i{top:15px;left:12px;font-size:28px}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li a:hover{background:var(--oc-settings-hover-bg)}body.sidenav-tree-expanded .settings-search-toolbar-item{margin:0px 10px 10px 10px;border-radius:20px !important}body.sidenav-tree-expanded .settings-search-toolbar-item input.form-control{border:1px solid var(--bs-border-color);border-radius:20px !important;padding-left:15px;line-height:40px;height:40px}body.sidenav-tree-expanded .settings-search-toolbar-item input.form-control:focus{border-color:var(--oc-border-focus)}.sidenav-tree ul.top-level>li>div.group h3{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>div.group h3:before{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a span.header{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a span.description{color:var(--oc-settings-color);opacity:.7}.sidenav-tree ul.top-level>li>ul li a:hover{background:var(--oc-settings-hover-bg);color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a:hover span.header{color:var(--oc-settings-color)}.sidenav-tree ul.top-level>li>ul li a:hover span.description{color:var(--oc-settings-color);opacity:1}.sidenav-tree ul.top-level>li>ul li.active a{color:var(--oc-settings-active-color);background:var(--oc-settings-active-bg)}.sidenav-tree ul.top-level>li>ul li.active a span.header{color:var(--oc-settings-active-color)}.sidenav-tree ul.top-level>li>ul li.active a span.description{color:var(--oc-settings-active-color);opacity:1}@media (max-width:768px){.sidenav-tree-expanded #layout-body{display:none !important}}@media (max-width:767px){body.sidenav-tree-expanded .sidenav-tree{width:100%}body.sidenav-tree-expanded .sidenav-tree ul.top-level>li>ul>li{width:100%}}body:not(.sidenav-tree-expanded) .sidenav-tree .is-inactive-group{display:none}body:not(.sidenav-tree-expanded) .sidenav-tree.is-searching .is-inactive-group{display:block}div.panel,div.media-panel{padding:20px}div.panel.no-padding,div.media-panel.no-padding{padding:0}div.panel.padding-top,div.media-panel.padding-top{padding-top:20px}div.panel.padding-less,div.media-panel.padding-less{padding:15px}div.panel.transparent,div.media-panel.transparent{background:transparent}div.panel.border-left,div.media-panel.border-left{border-left:1px solid var(--oc-primary-border)}div.panel.border-right,div.media-panel.border-right{border-right:1px solid var(--oc-primary-border)}div.panel.border-bottom,div.media-panel.border-bottom{border-bottom:1px solid var(--oc-primary-border)}div.panel.border-top,div.media-panel.border-top{border-top:1px solid var(--oc-primary-border)}div.panel h3.section,div.media-panel h3.section,div.panel>label,div.media-panel>label{color:var(--oc-primary-color);font-size:13px;font-weight:600}div.panel>label,div.media-panel>label{margin-bottom:5px}div.panel .nav.selector-group,div.media-panel .nav.selector-group{margin:0 -20px 20px -20px}.nav.selector-group{font-size:13px;letter-spacing:.01em;margin-bottom:20px}.nav.selector-group li{padding:0 3px;margin:0}.nav.selector-group li a{padding:7px 20px 7px 23px;color:var(--oc-toolbar-color);border-radius:4px}.nav.selector-group li a:hover{background-color:var(--oc-toolbar-hover-bg)}.nav.selector-group li.active a{background:var(--oc-selection);padding-left:20px;color:white}.nav.selector-group li i[class^="icon-"]{font-size:17px;margin-right:6px;position:relative;top:1px}ul.tree-path{list-style:none;padding:0;margin-bottom:0}ul.tree-path li{display:inline-block;margin-right:1px;font-size:13px}ul.tree-path li:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f105";display:inline-block;font-size:13px;margin-left:5px;position:relative;top:1px;color:#95a5a6}ul.tree-path li:last-child a{cursor:default}ul.tree-path li:last-child:after{display:none}ul.tree-path li.go-up{font-size:12px;margin-right:7px}ul.tree-path li.go-up a{color:#95a5a6}ul.tree-path li.go-up a:hover{color:var(--bs-link-color)}ul.tree-path li.go-up:after{display:none}ul.tree-path li.root a{font-weight:600;color:var(--oc-primary-color)}ul.tree-path li a{color:#95a5a6}ul.tree-path li a:hover{text-decoration:none}table.name-value-list{border-collapse:collapse;font-size:13px}table.name-value-list th,table.name-value-list td{padding:4px 0 4px 0;vertical-align:top}table.name-value-list tr:first-child th,table.name-value-list tr:first-child td{padding-top:0}table.name-value-list th{font-weight:600;color:var(--oc-primary-color);padding-right:15px;text-transform:uppercase}table.name-value-list td{color:var(--bs-body-color);word-wrap:break-word}.scrollpad-scrollbar-size-tester{width:50px;height:50px;overflow-y:scroll;position:absolute;top:-200px;left:-200px}.scrollpad-scrollbar-size-tester div{height:100px}.scrollpad-scrollbar-size-tester::-webkit-scrollbar{width:0;height:0}div.control-scrollpad{position:relative;width:100%;height:100%;overflow:hidden}div.control-scrollpad>div{overflow:hidden;overflow-y:scroll;height:100%}div.control-scrollpad>div::-webkit-scrollbar{width:0;height:0}div.control-scrollpad[data-direction=horizontal]>div{overflow-x:scroll;overflow-y:hidden;width:100%}div.control-scrollpad[data-direction=horizontal]>div::-webkit-scrollbar{width:auto;height:0}div.control-scrollpad>.scrollpad-scrollbar{z-index:199;position:absolute;top:0;right:0;bottom:0;width:11px;background-color:transparent;opacity:0;overflow:hidden;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-transition:opacity .3s;transition:opacity .3s}div.control-scrollpad>.scrollpad-scrollbar .drag-handle{position:absolute;right:2px;min-height:10px;width:7px;background-color:rgba(0,0,0,0.35);-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px}div.control-scrollpad>.scrollpad-scrollbar:hover{opacity:.7;transition:opacity 0 linear}div.control-scrollpad>.scrollpad-scrollbar[data-visible]{opacity:.7}div.control-scrollpad>.scrollpad-scrollbar[data-hidden]{display:none}div.control-scrollpad[data-direction=horizontal]>.scrollpad-scrollbar{top:auto;left:0;width:auto;height:11px}div.control-scrollpad[data-direction=horizontal]>.scrollpad-scrollbar .drag-handle{right:auto;top:2px;height:7px;min-height:0;min-width:10px;width:auto}.svg-icon-container img.svg-icon{display:inline-block}.svg-icon-container.svg-active-effects img.svg-icon{filter:grayscale(100%)}.svg-icon-container.svg-active-effects.active img.svg-icon{filter:none}body:not(.drag) .svg-icon-container.svg-active-effects:hover img.svg-icon{filter:none}.october-snackbar{padding:14px 40px 0 16px;background:#323232;font-size:14px;border-radius:4px;box-shadow:0 1px 3px rgba(0,0,0,0.3);max-width:100%;margin-right:16px;position:fixed;z-index:10600;left:16px;bottom:16px;color:white;opacity:0}.october-snackbar.enter{transition:opacity .2s}.october-snackbar.show-snackbar{opacity:1}.october-snackbar .snackbar-label{float:left;margin-right:16px;margin-bottom:14px}.october-snackbar button{outline:none;-webkit-appearance:none;background:transparent;border-radius:3px;border:none;color:#FFD422;font-weight:600}.october-snackbar button:focus{background:rgba(215,225,234,0.2)}.october-snackbar .snackbar-dismiss{font-size:0;color:transparent;width:22px;height:22px;position:absolute;right:10px;top:14px}.october-snackbar .snackbar-dismiss:before{content:'';width:7px;height:7px;left:7px;top:8px;display:block;position:absolute;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-156px -10px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.october-snackbar .snackbar-dismiss:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}.october-snackbar .snackbar-action{float:left;margin:0 0 14px -8px;padding:1px 8px;text-transform:uppercase}.october-tooltip{display:inline-block;padding:4px 8px 5px;position:absolute;border-radius:4px;max-width:200px;transition:opacity .15s ease-out,transform .15s ease-out;transform:scale(1);opacity:1;color:#fff;background:#536061;font-size:13px;line-height:140%;z-index:10700}.october-tooltip .tooltip-hotkey{display:inline-block;margin-left:5px;letter-spacing:1px}.october-tooltip .tooltip-hotkey:empty{display:none}.october-tooltip .tooltip-hotkey i{font-style:normal;margin-left:5px;padding:0 2px;display:inline-block;border-radius:3px;background:rgba(255,255,255,0.11);color:rgba(255,255,255,0.6)}.october-tooltip .tooltip-hotkey i:last-child{margin-right:-3px}.october-tooltip.tooltip-hidden{display:none}.october-tooltip.tooltip-invisible{opacity:0;transform:scale(.95)}#flotTip,#chart-tooltip{white-space:nowrap;padding:4px 8px 5px;background:#536061;position:absolute;z-index:10700;color:#fff;border-radius:4px;font-size:13px;opacity:1}.backend-toolbar-button .badge{display:block;z-index:9;width:8px;height:8px;position:absolute;top:5px;right:-3px;border-radius:50%;background-color:#dd1100;padding:0}button.backend-toolbar-button,a.backend-toolbar-button{line-height:inherit;display:inline-block;color:inherit;padding:0 6px;min-width:40px;text-align:center;text-decoration:none !important;border-radius:4px;outline:none;box-shadow:none;-webkit-appearance:none;border:none;background:transparent}button.backend-toolbar-button.control-button,a.backend-toolbar-button.control-button{color:var(--oc-toolbar-color);font-size:14px;margin-right:8px;line-height:30px}button.backend-toolbar-button.icon-only,a.backend-toolbar-button.icon-only{min-width:30px}button.backend-toolbar-button[disabled],a.backend-toolbar-button[disabled]{cursor:default}button.backend-toolbar-button[disabled]>i,a.backend-toolbar-button[disabled]>i,button.backend-toolbar-button[disabled]>span,a.backend-toolbar-button[disabled]>span,button.backend-toolbar-button[disabled]:after,a.backend-toolbar-button[disabled]:after{opacity:.5}button.backend-toolbar-button i,a.backend-toolbar-button i{display:inline-block;position:relative;font-size:16px;top:1px}button.backend-toolbar-button i+span.button-label,a.backend-toolbar-button i+span.button-label{margin-left:6px}button.backend-toolbar-button:not([disabled]):hover,a.backend-toolbar-button:not([disabled]):hover{background:var(--oc-toolbar-hover-bg)}button.backend-toolbar-button:not([disabled]):focus,a.backend-toolbar-button:not([disabled]):focus{background:var(--oc-toolbar-hover-bg)}button.backend-toolbar-button.has-menu:after,a.backend-toolbar-button.has-menu:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e90a";font-size:16px;vertical-align:middle;margin-left:0;margin-right:-3px;position:relative;top:-1px}@media (hover:hover){button.backend-toolbar-button:focus:not([disabled]),a.backend-toolbar-button:focus:not([disabled]){background:var(--oc-toolbar-hover-bg)}}div.control-simplelist.is-selectable-box.menu-mode-selector{margin-left:0;margin-top:10px;border:none}div.control-simplelist.is-selectable-box.menu-mode-selector li{margin:0 16px 16px 0;width:175px}div.control-simplelist.is-selectable-box.menu-mode-selector li.active .menu-mode-box{border-color:var(--oc-accent)}div.control-simplelist.is-selectable-box.menu-mode-selector li .heading{margin:0;text-align:left;padding:18px 17px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box{display:block;border:2px solid var(--bs-border-color);background:var(--oc-form-control-bg);border-radius:10px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box .mode-image{display:block;height:42px;border-bottom:1px solid var(--bs-border-color);position:relative}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box .mode-image:before{position:absolute;left:17px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-inline .mode-image:before{content:'';width:131px;height:10px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -100px;top:15px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-inline .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-text .mode-image:before{content:'';width:137px;height:6px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -120px;top:17px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-text .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-tiles .mode-image:before{content:'';width:126px;height:20px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -139px;top:10px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-tiles .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-icons .mode-image:before{content:'';width:79px;height:10px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-61px -169px;top:15px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-icons .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:before{content:'';width:35px;height:10px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 -170px;top:15px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:after{position:absolute;right:17px;top:13px;content:'';width:10px;height:16px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-44px -167px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-collapsed .mode-image:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left{height:98px}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .mode-image{width:42px;height:93px;float:left;border-bottom:none;border-right:1px solid var(--bs-border-color)}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .mode-image:before{top:17px;content:'';width:10px;height:56px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-148px -100px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .mode-image:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}div.control-simplelist.is-selectable-box.menu-mode-selector .menu-mode-box.menu-mode-box-left .heading{margin-left:42px;text-align:left;padding:18px 17px}div.control-simplelist.is-selectable-box.color-mode-selector{margin-left:0;margin-top:10px;border:none;margin-bottom:-16px}div.control-simplelist.is-selectable-box.color-mode-selector ul{margin-bottom:0}div.control-simplelist.is-selectable-box.color-mode-selector li{margin:0 16px 16px 0;width:215px}div.control-simplelist.is-selectable-box.color-mode-selector li.active .color-mode-box{border-color:var(--oc-accent)}div.control-simplelist.is-selectable-box.color-mode-selector li .heading{margin:0;text-align:left;padding:18px 17px}div.control-simplelist.is-selectable-box.color-mode-selector .color-mode-box{display:block;border:2px solid var(--bs-border-color);background:var(--oc-form-control-bg);border-radius:10px}.modal-content .onboarding-modal{margin:-1px;border-radius:15px}.modal-content .onboarding-modal .modal-header{height:132px;border-bottom:none;background-image:url('../images/license-header.png');background-size:cover;background-repeat:no-repeat}.modal-content .onboarding-modal .modal-header .onboarding-logo{width:248px;height:41px}.modal-content .onboarding-modal .modal-header .btn-close{position:absolute;width:19px;height:19px;top:15px;right:15px;border:none;background-color:transparent;background-image:url('../images/license-header-close.png');background-size:cover;background-size:20px 20px;opacity:1}.modal-content .onboarding-modal .modal-footer .btn{border-radius:44px}body.onboarding-popup-visible .onboarding-popup-collapsed{display:none}.onboarding-popup-collapsed{display:block;position:fixed;cursor:pointer;width:60px;height:60px;right:55px;bottom:40px;border-radius:60px;background-color:#E67E21;z-index:1049}.onboarding-popup-collapsed:after{content:'';width:30px;height:40px;position:absolute;top:10px;left:15px;background-image:url('../images/october-leaf-white.svg');background-size:cover}.onboarding-popup-collapsed>div{position:absolute;width:70px;height:70px;left:-5px;top:-5px;transform:rotate(0);display:none}.onboarding-popup-collapsed>div:before{content:'';width:38px;height:38px;position:absolute;bottom:-4px;right:-1px;opacity:1;background-image:url('../images/license-spinner.png');background-size:39px 39px}.onboarding-popup-collapsed.onboarding-popup-just-collapsed>div{transform:rotate(720deg);transition:transform 2s linear}.onboarding-popup-collapsed.onboarding-popup-just-collapsed>div:before{opacity:0;transition:opacity .5s;transition-delay:1s}.onboarding-popup-collapsed.onboarding-popup-collapse-animation-start>div{display:block}@media (max-height:740px){.onboarding-popup-collapsed{right:35px;bottom:10px}}:root,[data-bs-theme="light"]{--oc-page-size-outer-bg:var(--bs-tertiary-bg);--oc-page-size-inner-bg:var(--bs-body-bg);--oc-page-size-border:var(--bs-border-color)}[data-bs-theme="dark"]{--oc-page-size-outer-bg:var(--bs-tertiary-bg);--oc-page-size-inner-bg:var(--bs-body-bg);--oc-page-size-border:var(--bs-border-color)}@media (pointer:fine){body.drag *{cursor:grab !important}}body.dragging,body.dragging *{cursor:move !important}body.loading,body.loading *{cursor:wait !important}body.no-select{user-select:none;cursor:default !important}html,body{height:100%;font-size:14px;line-height:1.42857143}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body.has-page-size{background:var(--oc-page-size-outer-bg)}body.has-page-size #layout-body{background:var(--oc-page-size-inner-bg)}body.has-page-size.has-sidenav-tree #layout-body{border-right:1px solid var(--oc-page-size-border)}#layout-canvas{min-height:100%;height:100%}#layout-body{width:0}.layout-container,.padded-container{padding:20px 20px 0 20px}.layout-container .container-flush,.padded-container .container-flush{padding-top:0}.layout-container .padded-container-inset,.padded-container .padded-container-inset{margin-left:-20px;margin-right:-20px}.whiteboard{background:white}[data-bs-theme="dark"] .whiteboard{background:#181a1e}.layout-fill-container{position:absolute;left:0;top:0;width:100%;height:100%}[data-calculate-width]>form,[data-calculate-width]>div{display:inline-block}body.compact-container .layout-container{padding:0 !important}body.slim-container .layout-container{padding-left:0 !important;padding-right:0 !important}.flex-layout-column{display:flex;flex-direction:column}.flex-layout-column.absolute{position:absolute !important}.flex-layout-column.fill-container{position:absolute;left:0;top:0;width:100%;height:100%}.flex-layout-row{display:flex;flex-direction:row}.flex-layout-column.justify-center,.flex-layout-row.justify-center{justify-content:center}.flex-layout-column.align-center,.flex-layout-row.align-center{align-items:center;align-content:center}.flex-layout-column.full-height,.flex-layout-row.full-height{min-height:100%}.flex-layout-column.full-width,.flex-layout-row.full-width{width:100%}.flex-layout-column.full-height-strict,.flex-layout-row.full-height-strict{height:100%}.flex-layout-item{margin:0}.flex-layout-item.fix{flex:0 0 auto}.flex-layout-item.stretch{flex:1 1 auto}.flex-layout-item.stretch-constrain{flex:1}.flex-layout-item.center{align-self:center}.flex-layout-item.relative{position:relative}.flex-layout-item.layout-container{max-width:none}ul.mainmenu-items{padding:0;margin:0;font-size:0;white-space:nowrap;user-select:none}ul.mainmenu-items>li.mainmenu-item{display:block}.mainmenu-item{display:inline-block;position:relative;vertical-align:top;user-select:none}.mainmenu-item>a,.mainmenu-item>.mainmenu-item-container{display:flex;flex-direction:row;align-items:baseline;text-decoration:none!important;outline:none;color:var(--oc-mainnav-color)}.mainmenu-item>a:after,.mainmenu-item>.mainmenu-item-container:after{opacity:.5}.mainmenu-item .nav-label{opacity:.5;font-size:14px;white-space:nowrap;text-overflow:ellipsis;flex:1 1 auto}.mainmenu-item .nav-icon{opacity:.5;position:absolute;top:0;display:inline-block;height:100%;color:var(--oc-mainnav-icon-color)}.mainmenu-item .nav-icon .svg-icon{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:relative}.mainmenu-item .nav-icon i{vertical-align:middle;display:block;height:100%}.mainmenu-item .nav-icon i:before{position:relative}.mainmenu-item span.counter{flex:0 0 auto;position:relative;top:1px;padding:2px 2px;background-color:#ff3e1d;color:#ffffff;font-size:14px;line-height:100%;opacity:1;border-radius:4px;transform:scale(1);transition:transform .3s;margin-left:6px}.mainmenu-item span.counter.empty{transform:scale(0);opacity:0;padding:0;margin-left:0!important}.mainmenu-item.has-subitems>a:after,.mainmenu-item.has-subitems>.mainmenu-item-container:after{display:inline-block}.mainmenu-item.has-subitems span.counter{right:17px}.mainmenu-item.mainmenu-account .nav-icon{opacity:1;width:42px}.mainmenu-item.active .nav-label,.mainmenu-item.active-dropdown .nav-label,.mainmenu-item.active .nav-icon,.mainmenu-item.active-dropdown .nav-icon,.mainmenu-item.active>a:after,.mainmenu-item.active-dropdown>a:after{opacity:1}.mainmenu-item.has-solidicon .nav-icon{opacity:1}body:not(.drag) .mainmenu-item:hover .nav-label,body:not(.drag) .mainmenu-item:hover .nav-icon,body:not(.drag) .mainmenu-item:hover>a:after{opacity:1}body:not(.drag) ul.mainmenu-items.hover-effects li>a:hover{background:var(--bs-primary);color:white}@media (pointer:coarse){.mainmenu-item .nav-label{font-size:16px}}.layout-mainmenu .navbar{padding:0 20px 0 0;height:70px;background-color:var(--oc-mainnav-bg)}.layout-mainmenu .navbar [data-control="toolbar"]{position:absolute}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]{margin-left:20px;margin-top:7px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item{display:inline-block;margin-right:15px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item:last-child{margin-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a{height:50px;padding:15px 10px 0 38px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems .nav-label{padding-right:17px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems>a:after{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\e90a";position:absolute;right:6px;top:19.4px;font-size:19.5px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{font-size:16px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon{line-height:52px;left:0;width:30px;text-align:center}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .svg-icon{height:30px;width:30px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i{line-height:inherit;font-size:30px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .nav-colorpicker{width:0;height:0;background-color:transparent;border-right-color:var(--background-color);border-bottom-color:var(--background-color);border-top-color:var(--foreground-color);border-left-color:var(--foreground-color);border-width:10px;border-style:solid;border-radius:20px;display:inline-block;position:relative;top:10px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .nav-colorpicker:after{content:"";top:-10px;left:-10px;width:20px;height:20px;position:absolute;box-shadow:inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), .2);border-radius:20px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview>a{padding-left:34px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview:not(.has-nolabel)>a{padding-right:15px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview:not(.has-nolabel)>a:after{right:11px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-taskbar>a{padding-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras{margin-left:10px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview{margin-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar .nav-icon,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview .nav-icon{left:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar .nav-icon i,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview .nav-icon i{font-size:20px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-taskbar .nav-icon i:before,.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview .nav-icon i:before{top:1px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account{margin-right:0}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account>a{padding:0;margin-top:2px;width:42px}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account>a:after{display:none}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-account .nav-icon{left:0;width:auto;position:static}.layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle{display:none}@media (min-width:768px){.layout-mainmenu .navbar.navbar-mode-icons ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems>a:after,.layout-mainmenu .navbar.navbar-mode-icons ul.mainmenu-items[data-main-menu] .nav-label{display:none}.layout-mainmenu .navbar.navbar-mode-icons ul.mainmenu-items[data-main-menu] .nav-icon{text-align:center}.layout-mainmenu .navbar.navbar-mode-tile{height:78px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]{margin-top:0}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item{text-align:center}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a{padding:11px 15px 10px;height:auto;display:block}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{display:block;overflow:hidden;max-width:150px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems .nav-label{padding-right:17px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems a:after{margin:0;top:auto;right:11px;bottom:8.9px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon{display:block;height:30px;width:auto;position:static;line-height:1;margin-bottom:4px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .svg-icon,.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i{display:inline-block}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i:before{margin-right:0}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon .nav-colorpicker{top:7px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item span.counter{margin:0;position:absolute;top:8px;left:50%}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account>a{padding:12px 0 0 0;margin-top:1px;width:auto}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account .nav-icon{height:auto}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account div.mainmenu-account-avatar{width:52px;height:52px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account div.mainmenu-account-avatar img{width:50px;height:50px}.layout-mainmenu .navbar.navbar-mode-tile ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-preview.has-nolabel>a{width:auto;margin-top:14px}.layout-mainmenu .navbar.navbar-mode-text ul.mainmenu-items.mainmenu-general>li.mainmenu-item>a{padding:15px 10px 0 10px}.layout-mainmenu .navbar.navbar-mode-text ul.mainmenu-items.mainmenu-general>li.mainmenu-item .nav-icon{display:none}}@media (max-width:767px){#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item:not(.active){display:none}#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item>a{cursor:default;pointer-events:none}#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item span.counter,#layout-mainmenu .navbar ul.mainmenu-items.mainmenu-general>li.mainmenu-item.has-subitems>a:after{display:none}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle{display:inline-block;margin-right:-10px}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;width:50px;position:relative;opacity:.7}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{content:'';width:20px;height:18px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0;position:absolute;top:19px;left:18px}#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:hover{opacity:1}}@media (max-width:767px) and (-webkit-min-device-pixel-ratio:2),(max-width:767px) and (min-resolution:192dpi){#layout-mainmenu .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item:not(.active){display:none}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item>a{cursor:default;pointer-events:none}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item span.counter,#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items.mainmenu-general>li.mainmenu-item.has-subitems>a:after{display:none}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle{display:inline-block;margin-right:-10px}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;width:50px;position:relative;opacity:.7}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{content:'';width:20px;height:18px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:0 0;position:absolute;top:19px;left:18px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:before{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu .navbar.navbar-mode-collapse ul.mainmenu-items[data-main-menu].mainmenu-extras li.mainmenu-toggle>a:hover{opacity:1}body.main-menu-left #layout-mainmenu .main-menu-container{display:none}div.mainmenu-account-avatar{overflow:hidden;border-radius:9px;border:1px solid rgba(236,240,241,0.1);display:inline-block;width:42px;height:42px;vertical-align:middle}div.mainmenu-account-avatar img{width:42px;height:42px;display:block}.mainmenu-account.active-dropdown div.mainmenu-account-avatar{box-shadow:0 0 4px 0 var(--bs-link-color)}.layout-mainmenu .control-toolbar .toolbar-item.toolbar-primary:before{left:0}.layout-mainmenu .control-toolbar .toolbar-item.toolbar-primary:after{right:0}.left-side-menu-container{display:none !important;width:63px}.left-side-menu-container .layout-mainmenu{position:fixed;height:100%;width:63px}.left-side-menu-container .layout-mainmenu .main-menu-container{position:absolute;width:100%;height:100%}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar{position:absolute;padding-right:0;width:100%;height:100%;flex-direction:column}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar{padding-bottom:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar [data-control=toolbar]{width:auto}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item{padding-right:0;padding-bottom:20px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item:last-child{padding-bottom:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item:before{display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item:after{content:'';position:absolute;bottom:-5px;left:0;width:100%;height:9px;top:auto;display:block!important;background:transparent url(../../images/scrollable-panel-shadow.png) repeat-x left top;transition:opacity .1s;opacity:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item.scroll-after:after{opacity:1}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar .toolbar-item.fix-width:after{display:none !important}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar.control-toolbar [data-control="toolbar"]{height:100%}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]{margin-left:10px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-general{margin-left:15px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a{padding-left:0}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a:after{top:27px;right:15px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-label{padding-left:13px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-icon{left:5px;position:static;width:40px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-icon i{position:relative;top:-15px;width:40px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu].mainmenu-extras>li.mainmenu-item.mainmenu-preview>a .nav-icon .nav-colorpicker{top:5px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item{display:block;margin-right:0;margin-bottom:15px;text-align:center}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-toggle{display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account .nav-label{position:relative;top:5px;padding-left:11px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account>a:after{top:17px;right:15px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account .nav-label,.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.mainmenu-account>a:after{display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-icon i{display:inline-block}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{padding-left:10px;text-align:left;display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a{padding-right:15px;width:100%}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a>span.counter{left:-20px}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a:after{top:18.4px;display:none}.left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item.has-subitems>a:after{transform:rotate(-90deg)}.left-side-menu-container.width-check .layout-mainmenu .main-menu-container .navbar.control-toolbar div[data-control="toolbar"]{width:auto !important}.left-side-menu-container.width-check .layout-mainmenu .main-menu-container .navbar.control-toolbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label,.left-side-menu-container.width-check .layout-mainmenu .main-menu-container .navbar.control-toolbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a:after{visibility:hidden;display:block}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu{z-index:599;box-shadow:10px 0 10px rgba(0,0,0,0.2)}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar [data-control="toolbar"]{width:100%}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item .nav-label{display:block}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item a:after{display:block}body.reveal-left-side-menu .left-side-menu-container .layout-mainmenu .main-menu-container .navbar ul.mainmenu-items[data-main-menu]>li.mainmenu-item>a>span.counter{left:-10px}body.left-menu-submenu-displayed{overflow:hidden}body.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown{box-shadow:10px 0 15px rgba(0,0,0,0.3);border-bottom-left-radius:0;border-top-right-radius:6px;margin-top:10px}body.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown li:last-child{margin-bottom:6px}body.left-menu-submenu-displayed ul.mainmenu-items.mainmenu-submenu-dropdown li:first-child{margin-top:6px}body.main-menu-left .left-side-menu-container{display:block !important}div.mainmenu-leftmenu-overlay{z-index:598 !important}ul.mainmenu-items.mainmenu-submenu-dropdown{display:none;position:absolute;background:var(--oc-mainnav-bg);box-shadow:0 10px 15px rgba(0,0,0,0.3);z-index:601;border-bottom-left-radius:6px;border-bottom-right-radius:6px;user-select:none;padding:0;margin:0}ul.mainmenu-items.mainmenu-submenu-dropdown.show{display:block}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item a{padding:7px 17px 7px 47px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-label,ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon{opacity:1}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon{left:17px;width:20px;line-height:34px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon .svg-icon{width:20px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon i{font-size:20px;line-height:inherit}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item span.counter{font-size:12px;padding:2px 3px;margin:2px 0 0 10px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item:last-child{margin-bottom:6px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.divider{height:1px;margin:5px 0;background:rgba(255,255,255,0.1)}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.section-title{color:white;padding:7px 17px;white-space:nowrap;font-weight:600}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.section-title .nav-label{margin-right:0;display:block;overflow:hidden;max-width:250px;vertical-align:middle}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-bullet.is-selected a:before{content:"";background-color:white;border-radius:10px;position:absolute;top:50%;left:21px;height:8px;width:8px;margin-top:-4px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-flag .nav-label{padding-right:25px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-flag .nav-icon.nav-icon-flag{top:2px;left:auto;right:17px}ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item.has-flag .nav-icon.nav-icon-flag i{opacity:1;font-size:14px;display:inline-block;height:14px;border-radius:2px;box-shadow:inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), .2)}div.mainmenu-submenu-overlay,div.mainmenu-leftmenu-overlay{position:fixed;z-index:600;left:0;top:0;width:100%;height:100%;display:none;background:rgba(0,0,0,0.01);opacity:.01}div.mainmenu-submenu-overlay.show{display:block}@media (pointer:coarse){ul.mainmenu-items.mainmenu-submenu-dropdown>li.mainmenu-item .nav-icon{line-height:38px}}#layout-mainmenu-responsive-container{position:fixed;top:0;right:0;width:0;max-width:100%;height:100%;z-index:601;overflow:hidden;transition:width .25s ease-in-out}#layout-mainmenu-responsive-container nav.responsive-menu-pane{z-index:602;background-color:var(--oc-mainnav-bg);transition:margin .25s ease-in-out;position:absolute;top:0;right:0;width:100%;height:100%;border-left:1px solid rgba(255,255,255,0.1);display:flex;flex-direction:column}#layout-mainmenu-responsive-container nav.responsive-menu-pane.mainmenu-pane{box-shadow:-10px 0 10px rgba(0,0,0,0.2)}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header{padding:25px;flex:0 0 auto}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container{padding-left:50px;white-space:nowrap}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .nav-icon{left:0}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .company-name,#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name{text-overflow:ellipsis;overflow:hidden}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .company-name{font-size:16px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name{color:rgba(255,255,255,0.7);cursor:pointer}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name:hover{color:var(--oc-mainnav-color)}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a{cursor:default;pointer-events:none;padding:7px 10px 7px 43px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-icon{line-height:34px;left:0;width:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-icon .svg-icon{height:30px;width:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-icon i{line-height:inherit;font-size:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .counter{display:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item>a .nav-label{display:block;overflow:hidden;width:100%}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .mainmenu-item.has-subitems .mainmenu-item-container:after{bottom:4px;cursor:pointer}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .mainmenu-item{margin-left:36px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .go-back-link{display:block;width:24px;height:34px;position:absolute;left:25px;top:24px;z-index:603;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .go-back-link:after{content:'';width:24px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-52px 0;position:absolute;left:0;top:12px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header.has-back-link .go-back-link:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .close-link{display:none;position:absolute;width:24px;height:24px;left:19px;top:33px;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;z-index:603}#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .close-link:after{content:'';width:11px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-96px 0;position:absolute;left:6px;top:7px}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu-responsive-container nav.responsive-menu-pane .menu-header .close-link:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu-responsive-container nav.responsive-menu-pane .scrollable-panel-container{flex:1 1 auto}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>a,#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>.mainmenu-item-container{padding-right:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>a:after,#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>.mainmenu-item-container:after{content:'';width:24px;height:11px;display:inline-block;background-image:url('../foundation/elements/backendicons/backend-icons.png');background-size:300px 300px;background-position:-22px 0;position:absolute;right:0}@media (-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>a:after,#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-item.has-subitems>.mainmenu-item-container:after{background-image:url('../foundation/elements/backendicons/backend-icons@2x.png')}}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items.scrollable{overflow:hidden}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item{margin-bottom:6px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item>a{padding:7px 25px 7px 60px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item.has-subitems>a{padding-right:55px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item.has-subitems>a:after{right:25px;top:11px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-label{display:block;overflow:hidden}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon{left:25px;width:20px;line-height:34px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon .svg-icon{width:24px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon i{font-size:24px;line-height:inherit}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .counter{top:0}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane{z-index:603;margin-right:-100%;box-shadow:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header[data-submenu-index=account] .go-back-link{top:30px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header[data-submenu-index=account] .mainmenu-item{height:42px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header .mainmenu-item .mainmenu-item-container .company-name{display:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .menu-header .mainmenu-item .mainmenu-item-container .user-name{color:var(--oc-mainnav-color);position:relative;top:11px;cursor:default}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.section-user-title{display:none}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.divider{height:1px;margin:5px 0;background:rgba(255,255,255,0.1)}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.section-title{color:white;padding:7px 17px;white-space:nowrap;font-weight:600}#layout-mainmenu-responsive-container nav.responsive-menu-pane.submenu-pane .mainmenu-item.section-title .nav-label{opacity:.5;margin-right:0;display:block;overflow:hidden;max-width:250px;vertical-align:middle}body.responsive-submenu-displayed #layout-mainmenu-responsive-container .responsive-menu-pane.mainmenu-pane{margin-right:100%}body.responsive-submenu-displayed #layout-mainmenu-responsive-container .responsive-menu-pane.submenu-pane{margin-right:0}body.responsive-menu-displayed{overflow:hidden}body.responsive-menu-displayed #layout-mainmenu-responsive-container{width:300px;box-shadow:-10px 0 10px rgba(0,0,0,0.2)}@media (pointer:coarse){#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item{margin-bottom:12px}#layout-mainmenu-responsive-container nav.responsive-menu-pane .mainmenu-items>.mainmenu-item .nav-icon{line-height:38px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.mainmenu-pane .menu-header{padding-left:60px}#layout-mainmenu-responsive-container nav.responsive-menu-pane.mainmenu-pane .menu-header .close-link{display:block}}@media (max-width:414px){body.responsive-menu-displayed #layout-mainmenu-responsive-container{width:414px}}:root{--oc-nav-logo-offset-top:-2px;--oc-nav-logo-offset-start:0;--oc-nav-logo-opacity:.5}.layout-mainmenu .navbar.has-logo .toolbar-logo{position:relative}.layout-mainmenu .navbar.has-logo ul.mainmenu-items[data-main-menu]{margin-left:10px}.layout-mainmenu .navbar.has-logo ul.mainmenu-items[data-main-menu] li.is-dashboard{display:none}.layout-mainmenu .navbar.has-logo .toolbar-item.toolbar-primary:before{left:-5px}.layout-mainmenu .navbar.has-logo.navbar-mode-tile .mainmenu-logo{padding-top:20px}.mainmenu-logo{display:block;padding-top:15px;padding-left:20px;padding-right:10px}.mainmenu-logo .nav-logo{height:40px;position:relative;top:var(--oc-nav-logo-offset-top);left:var(--oc-nav-logo-offset-start);opacity:var(--oc-nav-logo-opacity)}.mainmenu-logo.active .nav-logo,.mainmenu-logo.active-dropdown .nav-logo,.mainmenu-logo:hover .nav-logo{opacity:1}@media (max-width:768px){.mainmenu-logo{display:none}}.layout-sidenav-container>.layout-sidenav-spacer{position:relative;height:100%;width:240px}nav.layout-sidenav{position:absolute;height:100%;width:100%;box-sizing:border-box;font-size:14px;background:var(--oc-sidebar-bg)}nav.layout-sidenav ul{position:relative;margin:0;padding:25px 25px 25px 0;height:100%;overflow:hidden}nav.layout-sidenav ul>li.mainmenu-item{margin:0 0 10px 0}nav.layout-sidenav ul>li.mainmenu-item>a{padding:7px 10px 7px 58px;border-top-right-radius:20px;border-bottom-right-radius:20px;margin:0;transition:padding .1s;display:flex;flex-direction:row}nav.layout-sidenav ul>li.mainmenu-item>a:hover{background:transparent}nav.layout-sidenav ul>li.mainmenu-item>a .nav-icon{left:25px;width:20px;line-height:34px;opacity:1;text-align:center}nav.layout-sidenav ul>li.mainmenu-item>a .nav-icon .svg-icon{width:20px;-webkit-filter:grayscale(100%) invert(100%);filter:grayscale(100%) invert(100%)}nav.layout-sidenav ul>li.mainmenu-item>a .nav-icon i{font-size:20px;line-height:inherit;color:var(--oc-sidebar-color)}nav.layout-sidenav ul>li.mainmenu-item>a .nav-label{color:var(--oc-sidebar-color);font-size:14px;opacity:1;overflow:hidden}nav.layout-sidenav ul>li.mainmenu-item>a span.counter{position:absolute;top:10px;right:10px;font-size:12px;transition:all .1s}nav.layout-sidenav ul>li.mainmenu-item.has-counter>a{padding-right:25px}nav.layout-sidenav ul>li.mainmenu-item:last-child{margin-bottom:0}nav.layout-sidenav ul>li.mainmenu-item.divider{height:1px;margin:5px 0 10px;background:var(--oc-primary-border);margin-right:-25px}nav.layout-sidenav ul>li.mainmenu-item.section-title{color:var(--oc-sidebar-color);padding:7px 0 7px 17px;white-space:nowrap;font-weight:600;margin-bottom:0;transition:margin .1s ease-in-out;transition-delay:.25s}nav.layout-sidenav ul>li.mainmenu-item.section-title .nav-label{opacity:1;margin-right:0;display:block;overflow:hidden;max-width:250px;vertical-align:middle}nav.layout-sidenav ul>li.mainmenu-item.active>a{background:var(--oc-sidebar-active-bg) !important;border-left:3px solid var(--oc-sidebar-active-border);padding-left:55px}nav.layout-sidenav ul>li.mainmenu-item.active>a .nav-label{color:var(--oc-sidebar-active-color);font-weight:600}nav.layout-sidenav ul>li.mainmenu-item.active>a .nav-icon{opacity:1}nav.layout-sidenav ul>li.mainmenu-item.active>a .nav-icon i{color:var(--oc-sidebar-active-color)}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button{margin-bottom:25px}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a{margin-left:15px;background:var(--bs-primary);padding:9px 38px 0 13px;border-radius:5px;transition:all .1s ease-in-out;transition-property:border-radius,padding;height:40px;box-shadow:0 0 10px rgba(0,0,0,0.27);min-width:40px}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a:hover{background:#5A5CEF}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a:active{box-shadow:none}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-icon{transition:width .1s ease-in-out;transition-delay:.25s;width:40px;top:3px;right:0;left:auto;text-align:center}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-icon .svg-icon,nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-icon i{color:white}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button>a .nav-label{transition:opacity .1s ease-in-out;transition-delay:.25s;opacity:1;color:white;font-weight:600}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button.active>a{background:var(--bs-primary) !important}nav.layout-sidenav ul>li.mainmenu-item.sidebar-button.active>a:hover{background:#5A5CEF !important}@media (max-width:1199px){.layout-sidenav-container>.layout-sidenav-spacer{width:70px}#layout-sidenav{transition:width .1s,box-shadow .1s ease-in-out;box-shadow:none}#layout-sidenav:not(:hover) ul>li.mainmenu-item>a{padding-right:0}#layout-sidenav:not(:hover) ul>li.mainmenu-item>a .nav-label{visibility:hidden}#layout-sidenav:not(:hover) ul>li.mainmenu-item>a span.counter{top:-8px;right:1px}#layout-sidenav:not(:hover) ul>li.mainmenu-item.section-title{transition:none;margin-right:-15px}#layout-sidenav:not(:hover) ul>li.mainmenu-item.sidebar-button>a{margin-left:15px;border-radius:25px;width:40px;padding:9px 13px 0 0}#layout-sidenav:not(:hover) ul>li.mainmenu-item.sidebar-button>a .nav-label{transition:none;opacity:0}#layout-sidenav:not(:hover) ul>li.mainmenu-item.sidebar-button>a .nav-icon{transition:none;width:20px}#layout-sidenav:hover{z-index:20;width:240px;box-shadow:5px 0 5px rgba(0,0,0,0.1);transition-delay:.25s}#layout-sidenav:hover ul>li.mainmenu-item>a{transition-delay:.25s}#layout-sidenav:hover ul>li.mainmenu-item>a span.counter{top:9px;right:10px;transition-delay:.25s}}body:not(.drag) #layout-sidenav ul>li.mainmenu-item:not(.sidebar-button)>a:hover{background:var(--oc-sidebar-hover-bg)}body.sidenav-responsive .layout-sidenav-container{display:none!important}@media (max-width:767px){.layout-sidenav-container{display:none!important}}.layout-sidenav.sidenav-responsive{position:static;height:60px}.layout-sidenav.sidenav-responsive ul{padding:13px 20px 0 20px;overflow:visible}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item{display:inline-block;margin:0 10px 0 0}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item>a span.counter{position:relative;top:0;right:0}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.divider{height:60px;width:1.4px;margin:-13px 10px 0 0;border-left:1px solid var(--bs-border-color)}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.divider+.section-title{margin-left:-10px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.sidebar-button{margin-bottom:0;margin-right:25px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.sidebar-button>a{margin:0;height:34px;padding:7px 33px 0 13px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item.sidebar-button>a .nav-icon{top:0}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button)>a{border-radius:20px;padding:7px 10px 7px 41px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button)>a .nav-icon{left:15px}.layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button).active>a{border-left:none}.responsive-sidebar-toolbar{background:var(--oc-sidebar-bg)}.responsive-sidebar-toolbar:before,.responsive-sidebar-toolbar:after{display:none !important}.secondary-nav>.control-toolbar{padding-bottom:0}.secondary-nav{display:none}body:not(.drag) .layout-sidenav.sidenav-responsive ul>li.mainmenu-item:not(.sidebar-button)>a:hover{background:var(--oc-sidebar-hover-bg)}body.sidenav-responsive .secondary-nav{display:block}@media (max-width:767px){.secondary-nav{display:block}}#layout-side-panel{border-right:1px solid var(--oc-primary-border)}#layout-side-panel .sidepanel-content-header{background:#d7e1eA;font-size:15px;padding:12px 20px 13px;position:relative}body.display-side-panel #layout-side-panel{display:block;position:absolute;z-index:600;width:350px;border-right:none;-webkit-box-shadow:3px 0 3px 0 rgba(0,0,0,0.1);box-shadow:3px 0 3px 0 rgba(0,0,0,0.1)}[data-bs-theme="dark"] #layout-side-panel .sidepanel-content-header{background:var(--bs-secondary-bg)}#layout-footer{width:100%;z-index:100;height:60px;position:fixed;bottom:0;color:#666666;background-color:rgba(255,255,255,0.8);border-top:1px solid #dfdfdf}#layout-footer .brand,#layout-footer .tagline{margin:10px;height:40px;line-height:40px}#layout-footer .brand{float:left;font-size:16px}#layout-footer .brand .logo{margin:0 10px}#layout-footer .tagline{float:right}#layout-footer .tagline p{color:#999}html body.outer{background:white}body.outer .outer-form-cell{width:350px;padding:40px;border-right:1px solid #ECF0F1;vertical-align:top}body.outer .outer-theme-cell{background-color:#FEF6EB;vertical-align:middle;text-align:center;overflow:hidden}body.outer .outer-theme-cell img{display:inline-block;margin:0 auto}body.outer h1{margin:0 0 20px 0;padding:0;text-align:center;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}body.outer h1 img{max-width:180px;width:100%;display:inline-block}body.outer .outer-form-container{margin:0 auto}body.outer .outer-form-container p{color:#2C3E4F}body.outer .outer-form-container h2{font-size:22px;font-family:serif;margin:0;padding:10px 0 30px 0;color:#2C3E4F;text-align:center}body.outer .outer-form-container h2:empty{padding:0}body.outer .outer-form-container h2:after{content:'';display:block;height:2px;width:60px;margin:30px auto 20px;background:#536061}body.outer .outer-form-container .forgot-password{margin-top:8px}body.outer .outer-form-container .forgot-password a{color:#536061;text-decoration:underline}body.outer .outer-form-container .horizontal-form input.form-control{margin-bottom:20px}body.outer .outer-form-container .horizontal-form+.pull-right.forgot-password{margin-top:-47px;position:relative}body.outer.setup .outer-form-cell{width:500px}@media (max-width:576px){body.outer .outer-form-cell{width:100% !important}body.outer .outer-theme-cell{display:none}}:root,[data-bs-theme="light"]{--oc-fancy-tabs-bg:var(--bs-secondary)}[data-bs-theme="dark"]{--oc-fancy-tabs-bg:var(--oc-editor-tab-bg)}body.breadcrumb-fancy .control-breadcrumb,.control-breadcrumb.breadcrumb-fancy{margin-bottom:0;margin-left:15px;margin-top:10px;margin-bottom:10px}.fancy-layout .tab-collapse-icon{position:absolute;display:block;text-decoration:none;outline:none;opacity:.6;transition:all .3s;font-size:12px;color:var(--bs-body-color);right:11px}.fancy-layout .tab-collapse-icon:hover{text-decoration:none;opacity:1}.fancy-layout .tab-collapse-icon.primary{color:var(--bs-body-bg);bottom:-25px;z-index:100;-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .tab-collapse-icon.primary i{position:relative;display:block}.fancy-layout .tab-collapse-icon.tabless{display:none}.fancy-layout .control-tabs.master-tabs:before,.fancy-layout.control-tabs.master-tabs:before,.fancy-layout .control-tabs.master-tabs:after,.fancy-layout.control-tabs.master-tabs:after{top:13px;font-size:14px;color:rgba(255,255,255,0.5)}.fancy-layout .control-tabs.master-tabs:before,.fancy-layout.control-tabs.master-tabs:before{left:8px}.fancy-layout .control-tabs.master-tabs:after,.fancy-layout.control-tabs.master-tabs:after{right:8px}.fancy-layout .control-tabs.master-tabs.scroll-before:before,.fancy-layout.control-tabs.master-tabs.scroll-before:before{color:var(--bs-body-color)}.fancy-layout .control-tabs.master-tabs.scroll-after:after,.fancy-layout.control-tabs.master-tabs.scroll-after:after{color:var(--bs-body-color)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container{background:var(--oc-fancy-tabs-bg);padding-left:20px;padding-right:20px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs{margin-left:-8px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li{margin-left:-5px;padding-top:3px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close{top:14px;right:-5px;left:auto;z-index:110;font-family:sans-serif;color:rgba(255,255,255,0.3)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close i,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close i{top:4px;right:1px;font-style:normal;font-weight:bold;font-size:16px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close:hover,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li span.tab-close:hover{color:white !important}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a{border-bottom:none;background:transparent;font-size:14px;color:rgba(255,255,255,0.5);padding:6px 0 0 24px!important;overflow:visible;text-decoration:none}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:hover,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:hover{color:white}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title{position:relative;display:inline-block;padding:12px 5px 0 5px;height:38px;font-size:14px;z-index:100;background-color:transparent}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before,.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after{content:' ';position:absolute;width:20px;display:block;height:37px;top:0;z-index:100;background-color:transparent}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:before{left:-14px;border-radius:8px 0 0 0;transform:skewX(-10deg)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title:after{right:-14px;border-radius:0 8px 0 0;transform:skewX(10deg)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title span,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a>span.title span{border-top:none;padding:0;margin-top:0;overflow:visible}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a:before{z-index:110;position:absolute;top:18px;left:22px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a[class*=icon]>span.title,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li a[class*=icon]>span.title{padding-left:18px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active{top:1px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a{z-index:107;color:var(--bs-body-color)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close{color:rgba(var(--bs-body-color-rgb), .3)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close:hover,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active span.tab-close:hover{color:var(--bs-body-color) !important}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title{background-color:var(--bs-body-bg);z-index:105}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:before{z-index:107;background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:after,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li.active a>span.title:after{background-color:var(--bs-body-bg);z-index:107}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i{top:5px;font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0;color:inherit}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i:before,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li[data-modified] span.tab-close i:before{font-family:'octo-icon' !important;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f111";font-size:9px}.fancy-layout .control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li:first-child,.fancy-layout.control-tabs.master-tabs>div>div.tabs-container>ul.nav-tabs>li:first-child{margin-left:0}.fancy-layout .control-tabs.master-tabs[data-closable]>div>div.tabs-container>ul.nav-tabs>li a>span.title,.fancy-layout.control-tabs.master-tabs[data-closable]>div>div.tabs-container>ul.nav-tabs>li a>span.title{padding-right:10px}.fancy-layout .control-tabs.master-tabs.has-tabs:before,.fancy-layout.control-tabs.master-tabs.has-tabs:before,.fancy-layout .control-tabs.master-tabs.has-tabs:after,.fancy-layout.control-tabs.master-tabs.has-tabs:after{display:block}.fancy-layout .control-tabs.secondary-tabs:before,.fancy-layout.control-tabs.secondary-tabs:before{left:5px}.fancy-layout .control-tabs.secondary-tabs:after,.fancy-layout.control-tabs.secondary-tabs:after{right:5px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs{position:relative;border-top:1px solid var(--oc-primary-border);background:var(--bs-body-bg);padding-top:10px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs:before{position:absolute;bottom:0;height:1px;width:100%;z-index:9;content:' ';border-bottom:2px solid var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li{border-right:none;padding-right:0;margin-right:-10px;vertical-align:top}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a{font-size:14px;font-weight:600;padding-bottom:3px;margin:0;position:relative;top:-1px;z-index:11;background:transparent;overflow:visible;border-bottom:1px solid transparent}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span{position:relative;display:inline-block;padding:4px 25px 0px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before,.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after{content:'';display:none;border-top:2px solid var(--oc-primary-border);position:absolute;background:transparent;top:0;z-index:-1;width:20px;bottom:-2px;transform-origin:bottom}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:before{left:0;border-left:2px solid var(--oc-primary-border);-webkit-border-radius:8px 0 0 0;-moz-border-radius:8px 0 0 0;border-radius:8px 0 0 0;-webkit-transform:skewX(-10deg);-ms-transform:skewX(-10deg);transform:skewX(-10deg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span:after{right:0;border-right:2px solid var(--oc-primary-border);-webkit-border-radius:0 8px 0 0;-moz-border-radius:0 8px 0 0;border-radius:0 8px 0 0;-webkit-transform:skewX(10deg);-ms-transform:skewX(10deg);transform:skewX(10deg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li a span span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li a span span{border-top:2px solid transparent;margin-top:-4px;padding-left:0;padding-right:0;padding-top:7px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li:hover a,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li:hover a{color:var(--bs-body-color)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li:first-child,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li:first-child{padding-left:10px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li:last-child,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li:last-child{margin-right:0}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a{z-index:13;top:0}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title{border-top-color:var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:before,.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title:after{display:block;border-color:var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a>span.title span{border-top-color:var(--oc-primary-border)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active a:before{position:absolute;bottom:-1px;height:2.2px;right:2px;left:2px;content:' ';background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:before,.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:after,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title:after{background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title span,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a span.title span{background-color:var(--bs-body-bg);margin-left:-6px;padding-left:6px;margin-right:-6px;padding-right:6px;margin-bottom:-6px;padding-bottom:6px}.fancy-layout .control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a:before,.fancy-layout.control-tabs.secondary-tabs>div>ul.nav-tabs>li.active.tab-content-bg a:before{background-color:var(--bs-body-bg)}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon{position:absolute;display:block;text-decoration:none;outline:none;opacity:.6;transition:all .3s;font-size:12px;color:var(--bs-body-color);right:11px}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon:hover,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon:hover{text-decoration:none;opacity:1}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.primary,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.primary{color:var(--bs-body-bg);bottom:-25px;z-index:100;-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.primary i,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.primary i{position:relative;display:block}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.tabless,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.tabless{display:none}.fancy-layout .control-tabs.secondary-tabs .tab-collapse-icon.primary,.fancy-layout.control-tabs.secondary-tabs .tab-collapse-icon.primary{color:var(--bs-body-color);top:15px;right:11px;bottom:auto}.fancy-layout .control-tabs.secondary-tabs.primary-collapsed .tab-collapse-icon.primary,.fancy-layout.control-tabs.secondary-tabs.primary-collapsed .tab-collapse-icon.primary{-webkit-transform:scale(1, 1);transform:scale(1, 1)}.fancy-layout .control-tabs.primary-tabs,.fancy-layout.control-tabs.primary-tabs{border-top:1px solid var(--oc-primary-border)}.fancy-layout .control-tabs.primary-tabs.master-area>div>ul.nav-tabs,.fancy-layout.control-tabs.primary-tabs.master-area>div>ul.nav-tabs{-webkit-transition:background-color .5s;transition:background-color .5s;background:var(--bs-body-bg)}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs{background:#7F8C8D;margin-left:0 !important;margin-right:0 !important}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs:before{border-bottom-width:1px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li{background:transparent;border:none;margin-right:-8px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li:first-child,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li:first-child{margin-left:-15px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a{background:transparent;border:none;padding:3px 10px 3px;font-size:14px;font-weight:400;color:#536061;top:2px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title{border-bottom:2px solid transparent;border-top:none;padding:0 7px 6px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:before,.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:after,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title:after{display:none !important}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title span,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a span.title span{border-width:0;vertical-align:top}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li a:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li a:before{top:2px;bottom:-6px}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li.active a{color:var(--bs-body-color);font-weight:600}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a:before,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li.active a:before{display:none}.fancy-layout .control-tabs.primary-tabs>div>ul.nav-tabs>li.active a span.title,.fancy-layout.control-tabs.primary-tabs>div>ul.nav-tabs>li.active a span.title{border-bottom-color:var(--bs-primary)}.fancy-layout .control-tabs.primary-tabs>.tab-content>.tab-pane,.fancy-layout.control-tabs.primary-tabs>.tab-content>.tab-pane{padding:20px 20px 0 20px}.fancy-layout .control-tabs.primary-tabs>.tab-content>.tab-pane.pane-compact,.fancy-layout.control-tabs.primary-tabs>.tab-content>.tab-pane.pane-compact{padding:0}.fancy-layout .control-tabs.primary-tabs.collapsed,.fancy-layout.control-tabs.primary-tabs.collapsed{display:none}.fancy-layout .control-tabs.has-tabs>div.tab-content,.fancy-layout.control-tabs.has-tabs>div.tab-content{background:var(--bs-body-bg)}.fancy-layout .control-tabs>div.tab-content>div.tab-pane,.fancy-layout.control-tabs>div.tab-content>div.tab-pane{padding:0}.fancy-layout .control-tabs>div.tab-content>div.tab-pane.padded-pane,.fancy-layout.control-tabs>div.tab-content>div.tab-pane.padded-pane{padding:20px 20px 0 20px}.fancy-layout .form-tabless-fields:not(.not-fancy){position:relative;background:var(--bs-body-bg);padding:10px 15px 0 15px}.fancy-layout .form-tabless-fields:not(.not-fancy):before,.fancy-layout .form-tabless-fields:not(.not-fancy):after{content:" ";display:table}.fancy-layout .form-tabless-fields:not(.not-fancy):after{clear:both}.fancy-layout .form-tabless-fields:not(.not-fancy):before,.fancy-layout .form-tabless-fields:not(.not-fancy):after{content:" ";display:table}.fancy-layout .form-tabless-fields:not(.not-fancy):after{clear:both}.fancy-layout .form-tabless-fields:not(.not-fancy) label{text-transform:uppercase;font-size:12px;color:var(--oc-primary-color);margin-bottom:0}.fancy-layout .form-tabless-fields:not(.not-fancy) input[type=text]{background:transparent;border:none;color:var(--bs-body-color);font-size:24px;font-weight:400;height:auto;padding:0;box-shadow:none;border:1px solid transparent}.fancy-layout .form-tabless-fields:not(.not-fancy) input[type=text]:focus,.fancy-layout .form-tabless-fields:not(.not-fancy) input[type=text]:hover{border:1px solid var(--oc-primary-border)}.fancy-layout .form-tabless-fields:not(.not-fancy) .form-group{padding-bottom:0}.fancy-layout .form-tabless-fields:not(.not-fancy) .form-group.is-required>label:after{display:none}.fancy-layout .form-tabless-fields:not(.not-fancy) .form-group .form-translatable{position:absolute;margin:0;right:3px;top:28px}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon{position:absolute;display:block;text-decoration:none;outline:none;opacity:.6;transition:all .3s;font-size:12px;color:var(--bs-body-color);right:11px}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon:hover{text-decoration:none;opacity:1}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.primary{color:var(--bs-body-bg);bottom:-25px;z-index:100;-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.primary i{position:relative;display:block}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.tabless{display:none}.fancy-layout .form-tabless-fields:not(.not-fancy) .tab-collapse-icon.tabless{top:14px}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed{padding:5px 23px 0 10px}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed .tab-collapse-icon.tabless{-webkit-transform:scale(1, -1);transform:scale(1, -1)}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed .form-group:not(.collapse-visible){display:none}.fancy-layout .form-tabless-fields:not(.not-fancy).collapsed .form-buttons{margin-left:10px;padding-bottom:0}.fancy-layout .form-tabless-fields:not(.not-fancy) .loading-indicator-container .loading-indicator{background-color:var(--bs-body-bg);color:var(--oc-primary-color)}.fancy-layout .form-tabless-fields:not(.not-fancy) .loading-indicator-container .loading-indicator>span,.fancy-layout .form-tabless-fields:not(.not-fancy) .loading-indicator-container .loading-indicator>div{margin-left:15px}.fancy-layout .form-buttons{margin-top:10px;padding-top:5px;padding-bottom:3px;margin-left:-15px;margin-right:-15px;padding-left:10px;padding-right:10px;border-top:1px solid var(--oc-primary-border)}.fancy-layout .form-buttons.loading-indicator-container.in-progress{overflow:hidden}.fancy-layout .form-buttons .btn{padding:6px;margin-right:8px;background:transparent;color:var(--oc-toolbar-color);font-size:14px;font-weight:normal;box-shadow:none}.fancy-layout .form-buttons .btn:before{margin-right:2px}.fancy-layout .form-buttons .btn:hover{background:var(--oc-toolbar-hover-bg)}.fancy-layout .form-buttons .btn:last-child{margin-right:0}.fancy-layout .form-buttons .btn[class^="oc-icon-"]:before,.fancy-layout .form-buttons .btn[class*=" oc-icon-"]:before{opacity:1}.fancy-layout form.oc-data-changed .btn.save{opacity:1}.fancy-layout .field-codeeditor{border:none !important;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.fancy-layout .field-codeeditor .editor-code{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.fancy-layout .field-markdowneditor{border:none !important}.fancy-layout .field-richeditor{border:none}.fancy-layout .field-richeditor,.fancy-layout .field-richeditor .fr-toolbar,.fancy-layout .field-richeditor .fr-wrapper{-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;border-top-right-radius:0;border-top-left-radius:0}.fancy-layout .secondary-content-tabs .field-richeditor .fr-toolbar{background:var(--bs-body-bg)}body.side-panel-not-fixed .fancy-layout .field-richeditor{border-left:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs{padding:13px 0;background:var(--oc-document-tabs-bg);border-bottom:1px solid var(--oc-primary-border)}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs:before{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li{border-right:1px solid var(--oc-primary-border);border-bottom:none;margin:0!important;padding:0}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li:first-child{margin-left:-12px !important}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li:last-child{border-right:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a{padding:2px 12px 0;height:24px;border:none;top:0}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a:before{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title{padding:0;margin:0}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title:before,.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title:after{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title>span{margin:0;padding:0;border-top:none;color:inherit;background-color:transparent}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title>span:before,.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li a>span.title>span:after{display:none}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)>div>ul.nav-tabs>li.active a{color:var(--bs-primary)}.form-document-layout .control-tabs.primary-tabs:not(.is-nested)[data-single-tab]>div>ul.nav-tabs{display:none!important}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-label,.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-translatable{display:none}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-control{display:block;font-size:24px;width:100%;border:1px solid var(--bs-body-bg);outline:none;background:transparent;color:var(--bs-body-color);padding:1px}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-control:not([disabled]):hover,.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field .form-control:not([disabled]):focus{border:1px solid var(--bs-border-color);box-shadow:none}.form-document-layout .document-header .form-tabless-fields .form-group.primary-title-field span.form-control{opacity:.5}.form-document-layout div.primary-tabs-container>div>.layout-row{display:table-cell}.form-document-layout div.primary-tabs-container>div>.layout-row .tab-pane.is-adaptive{padding-top:0}.form-document-layout .component-backend-document .document-progress-indicator{z-index:1}.form-document-layout .form-group.span-adaptive{margin-left:-20px;margin-right:-20px}.form-document-layout .form-group.span-adaptive>.form-label,.form-document-layout .form-group.span-adaptive>.form-translatable{display:none}.form-document-layout .record-management-controls{padding-left:20px;padding-bottom:20px}.form-with-sidebar .form-with-sidebar-canvas{position:absolute;top:0;bottom:0;left:0;right:0}.form-with-sidebar>.form-sidebar{width:300px;background:var(--bs-tertiary-bg);border-left:1px solid var(--oc-primary-border)}.form-with-sidebar.sidebar-width-350>.form-sidebar{width:350px}.form-with-sidebar.sidebar-width-400>.form-sidebar{width:400px}.form-with-sidebar.sidebar-width-450>.form-sidebar{width:450px}.form-with-sidebar.sidebar-width-500>.form-sidebar{width:500px}.form-with-sidebar.sidebar-width-550>.form-sidebar{width:550px}.form-with-sidebar.sidebar-width-600>.form-sidebar{width:600px}.form-with-sidebar.sidebar-width-650>.form-sidebar{width:650px}.form-with-sidebar.sidebar-width-700>.form-sidebar{width:700px}.form-with-sidebar.sidebar-width-750>.form-sidebar{width:750px}@media (max-width:992px){.form-with-sidebar{flex-direction:column-reverse}.form-with-sidebar .form-with-sidebar-canvas{position:relative}.form-with-sidebar>.form-contents{height:auto}.form-with-sidebar>.form-contents .control-breadcrumb{display:none}.form-with-sidebar>.form-sidebar{width:100% !important;height:auto;border-left:none;border-bottom:1px solid var(--oc-primary-border)}.form-with-sidebar>.form-sidebar .control-scrollbar{overflow:visible;height:auto}.form-with-sidebar>.form-sidebar .control-scrollbar .scrollbar-scrollbar{display:none !important}}.flyout-container>.flyout-content{overflow:hidden;width:0;left:0!important;transition:width .1s}.flyout-overlay{width:100%;height:100%;top:0;z-index:5000;position:absolute;background-color:rgba(0,0,0,0);transition:background-color .3s}.flyout-toggle{position:absolute;top:20px;left:0;width:23px;height:25px;background:#35425b;cursor:pointer;border-bottom-right-radius:4px;border-top-right-radius:4px;color:#bdc3c7;font-size:10px}.flyout-toggle i{margin:7px 0 0 6px;display:inline-block}.flyout-toggle:hover i{color:#ffffff}body.flyout-visible{overflow:hidden}body.flyout-visible .flyout-overlay{background-color:rgba(0,0,0,0.3)}#layout-sidenav-responsive.has-toggle{position:relative}#layout-sidenav-responsive.has-toggle ul.nav{padding-left:35px}#layout-sidenav-responsive.has-toggle .flyout-toggle{top:18px} ================================================ FILE: modules/backend/assets/foundation/controls/autocomplete/README.md ================================================ # Autocomplete ### Autocomplete Autocomplete control. ## JavaScript API ```js $('input').autocomplete({ source: { something: 'Something', else: 'Else' } }) ``` ================================================ FILE: modules/backend/assets/foundation/controls/autocomplete/autocomplete.js ================================================ /* * The autcomplete plugin, a forked version of Bootstrap's original typeahead plugin. * * Data attributes: * - data-control="autocomplete" - enables the autocomplete plugin * * JavaScript API: * $('input').autocomplete() * * Forked by daftspunk: * * - Source can be an object [{ value: 'something', label: 'Something' }, { value: 'else', label: 'Something Else' }] * - Source can also be { something: 'Something', else: 'Else' } */ !function($){ "use strict"; // jshint ;_; /* AUTOCOMPLETE PUBLIC CLASS DEFINITION * ================================= */ var Autocomplete = function (element, options) { this.$element = $(element) this.options = $.extend({}, $.fn.autocomplete.defaults, options) this.matcher = this.options.matcher || this.matcher this.sorter = this.options.sorter || this.sorter this.highlighter = this.options.highlighter || this.highlighter this.updater = this.options.updater || this.updater this.source = this.options.source this.$menu = $(this.options.menu) this.shown = false this.listen() } Autocomplete.prototype = { constructor: Autocomplete, select: function () { var val = this.$menu.find('.active').attr('data-value') this.$element .val(this.updater(val)) .change() return this.hide() }, updater: function (item) { return item }, show: function () { var offset = this.options.bodyContainer ? this.$element.offset() : this.$element.position(), pos = $.extend({}, offset, { height: this.$element[0].offsetHeight }), cssOptions = { top: pos.top + pos.height , left: pos.left } if (this.options.matchWidth) { cssOptions.width = this.$element[0].offsetWidth } this.$menu.css(cssOptions) if (this.options.bodyContainer) { $(document.body).append(this.$menu) } else { this.$menu.insertAfter(this.$element) } this.$menu.show() this.shown = true return this }, hide: function () { this.$menu.hide() this.shown = false return this }, lookup: function (event) { var items this.query = this.$element.val() if (!this.query || this.query.length < this.options.minLength) { return this.shown ? this.hide() : this } items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source return items ? this.process(items) : this }, itemValue: function (item) { if (typeof item === 'object') return item.value; return item; }, itemLabel: function (item) { if (typeof item === 'object') return item.label; return item; }, itemsToArray: function (items) { var newArray = [] $.each(items, function(value, label){ newArray.push({ label: label, value: value }) }) return newArray }, process: function (items) { var that = this if (typeof items == 'object') items = this.itemsToArray(items) items = $.grep(items, function (item) { return that.matcher(item) }) items = this.sorter(items) if (!items.length) { return this.shown ? this.hide() : this } return this.render(items.slice(0, this.options.items)).show() }, matcher: function (item) { return ~this.itemValue(item).toLowerCase().indexOf(this.query.toLowerCase()) }, sorter: function (items) { var beginswith = [], caseSensitive = [], caseInsensitive = [], item, itemValue while (item = items.shift()) { itemValue = this.itemValue(item) if (!itemValue.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item) else if (~itemValue.indexOf(this.query)) caseSensitive.push(item) else caseInsensitive.push(item) } return beginswith.concat(caseSensitive, caseInsensitive) }, highlighter: function (item) { var query = this.query.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, '\\$&') return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) { return '' + match + '' }) }, render: function (items) { var that = this items = $(items).map(function (i, item) { i = $(that.options.item).attr('data-value', that.itemValue(item)) i.find('a').html(that.highlighter(that.itemLabel(item))) return i[0] }) items.first().addClass('active') this.$menu.html(items) return this }, next: function (event) { var active = this.$menu.find('.active').removeClass('active'), next = active.next() if (!next.length) { next = $(this.$menu.find('li')[0]) } next.addClass('active') }, prev: function (event) { var active = this.$menu.find('.active').removeClass('active'), prev = active.prev() if (!prev.length) { prev = this.$menu.find('li').last() } prev.addClass('active') }, listen: function () { this.$element .on('focus.autocomplete', $.proxy(this.focus, this)) .on('blur.autocomplete', $.proxy(this.blur, this)) .on('keypress.autocomplete', $.proxy(this.keypress, this)) .on('keyup.autocomplete', $.proxy(this.keyup, this)) if (this.eventSupported('keydown')) { this.$element.on('keydown.autocomplete', $.proxy(this.keydown, this)) } this.$menu .on('click.autocomplete', $.proxy(this.click, this)) .on('mouseenter.autocomplete', 'li', $.proxy(this.mouseenter, this)) .on('mouseleave.autocomplete', 'li', $.proxy(this.mouseleave, this)) }, eventSupported: function(eventName) { var isSupported = eventName in this.$element if (!isSupported) { this.$element.setAttribute(eventName, 'return;') isSupported = typeof this.$element[eventName] === 'function' } return isSupported }, move: function (e) { if (!this.shown) return switch(e.key) { case 'Tab': case 'Enter': case 'Escape': e.preventDefault() break case 'ArrowUp': e.preventDefault() this.prev() break case 'ArrowDown': e.preventDefault() this.next() break } e.stopPropagation() }, keydown: function (e) { this.suppressKeyPressRepeat = ~$.inArray(e.key, ['ArrowDown','ArrowUp','Tab','Enter','Escape']) this.move(e) }, keypress: function (e) { if (this.suppressKeyPressRepeat) return this.move(e) }, keyup: function (e) { switch(e.keyCode) { case 40: // down arrow case 38: // up arrow case 16: // shift case 17: // ctrl case 18: // alt break case 9: // tab case 13: // enter if (!this.shown) return this.select() break case 27: // escape if (!this.shown) return this.hide() break default: this.lookup() } e.stopPropagation() e.preventDefault() }, focus: function (e) { this.focused = true }, blur: function (e) { this.focused = false if (!this.mousedover && this.shown) this.hide() }, click: function (e) { e.stopPropagation() e.preventDefault() this.select() this.$element.focus() }, mouseenter: function (e) { this.mousedover = true this.$menu.find('.active').removeClass('active') $(e.currentTarget).addClass('active') }, mouseleave: function (e) { this.mousedover = false if (!this.focused && this.shown) this.hide() }, destroy: function() { this.hide() this.$element.removeData('autocomplete') this.$menu.remove() this.$element.off('.autocomplete') this.$menu.off('.autocomplete') this.$element = null this.$menu = null } } /* AUTOCOMPLETE PLUGIN DEFINITION * =========================== */ var old = $.fn.autocomplete $.fn.autocomplete = function (option) { return this.each(function () { var $this = $(this) , data = $this.data('autocomplete') , options = typeof option == 'object' && option if (!data) $this.data('autocomplete', (data = new Autocomplete(this, options))) if (typeof option == 'string') data[option]() }) } $.fn.autocomplete.defaults = { source: [], items: 8, menu: '', item: '
  • ', minLength: 1, bodyContainer: false } $.fn.autocomplete.Constructor = Autocomplete /* AUTOCOMPLETE NO CONFLICT * =================== */ $.fn.autocomplete.noConflict = function () { $.fn.autocomplete = old return this } /* AUTOCOMPLETE DATA-API * ================== */ function paramToObj(name, value) { if (value === undefined) value = '' if (typeof value == 'object') return value try { return oc.parseJSON("{" + value + "}") } catch (e) { throw new Error('Error parsing the '+name+' attribute value. '+e) } } $(document).on('focus.autocomplete.data-api', '[data-control="autocomplete"]', function (e) { var $this = $(this) if ($this.data('autocomplete')) return var opts = $this.data() if (opts.source) { opts.source = paramToObj('data-source', opts.source) } $this.autocomplete(opts) }) }(window.jQuery); /* ============================================================= * bootstrap-autocomplete.js v2.3.1 * http://twitter.github.com/bootstrap/javascript.html#autocomplete * ============================================================= * Copyright 2012 Twitter, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================ */ ================================================ FILE: modules/backend/assets/foundation/controls/autocomplete/autocomplete.less ================================================ .autocomplete.dropdown-menu { background: @dropdown-bg; li a { padding: 3px 12px; } } ================================================ FILE: modules/backend/assets/foundation/controls/balloon-selector/README.md ================================================ # Balloon selector
    • One
    • Two
    • Three
    If you don't define `data-control="balloon-selector"` then the control will act as a static list of labels.
    • Monday
    • Tuesday
    • Happy days!
    ================================================ FILE: modules/backend/assets/foundation/controls/balloon-selector/balloon-selector.js ================================================ /* * Balloon selector control. * * Data attributes: * - data-control="balloon-selector" - enables the plugin * */ +function ($) { "use strict"; var BalloonSelector = function (element, options) { this.$el = $(element); this.$field = $('input', this.$el); this.options = options || {}; this.allowEmpty = 'selectorAllowEmpty' in this.$el.get(0).dataset; var self = this; $('li', this.$el).click(function(){ if (self.$el.hasClass('control-disabled')) { return; } if (self.allowEmpty && $(this).hasClass('active')) { $(this).removeClass('active'); self.$field .val('') .trigger('change'); return; } $('li', self.$el).removeClass('active'); $(this).addClass('active'); self.$field .val($(this).data('value')) .trigger('change'); }); oc.Events.on(this.$el.get(0), 'trigger:empty', function() { $('li', self.$el).removeClass('active'); self.$field.val('').trigger('change'); }); oc.Events.on(this.$el.get(0), 'trigger:fill', function(ev) { var fillValue = ev.detail.fillValue; $('li', self.$el).removeClass('active'); $('li[data-value="'+fillValue+'"]', self.$el).addClass('active'); self.$field.val(fillValue).trigger('change'); }); oc.Events.on(this.$el.get(0), 'trigger:disable', function(ev) { var status = ev.detail.status; self.$field.prop('disabled', status); }); } BalloonSelector.DEFAULTS = {} // BALLOON SELECTOR PLUGIN DEFINITION // =================================== var old = $.fn.balloonSelector; $.fn.balloonSelector = function (option) { return this.each(function () { var $this = $(this); var data = $this.data('oc.balloon-selector'); var options = $.extend({}, BalloonSelector.DEFAULTS, $this.data(), typeof option == 'object' && option); if (!data) $this.data('oc.balloon-selector', (data = new BalloonSelector(this, options))); }); } $.fn.balloonSelector.Constructor = BalloonSelector; // BALLOON SELECTOR NO CONFLICT // =================================== $.fn.balloonSelector.noConflict = function () { $.fn.balloonSelector = old; return this; } // BALLOON SELECTOR DATA-API // =================================== $(document).on('render', function(){ $('div[data-control=balloon-selector]').balloonSelector(); }); }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/balloon-selector/balloon-selector.less ================================================ // // Balloon selector // -------------------------------------------------- @color-balloon-control-default-text: @input-color; @color-balloon-control-hover-bg: @toolbar-hover-bg; @color-balloon-control-active-bg: @brand-selection; body .control-balloon-selector { ul { padding: 0; display: inline-block; // background: white; font-size: 0; li { list-style: none; line-height: 36px; display: inline-block; background-color: @input-bg; color: @color-balloon-control-default-text; font-size: @input-font-size; padding: 0 14px; border: 1px solid @input-border; &:first-child { border-top-left-radius: @border-radius-base; border-bottom-left-radius: @border-radius-base; } &:last-child { border-top-right-radius: @border-radius-base; border-bottom-right-radius: @border-radius-base; } &.active { background: @color-balloon-control-active-bg !important; color: white; border-color: @color-balloon-control-active-bg; position: relative; z-index: 1; } + li { margin-left: -1px; } } } &.control-disabled { ul li.active { background-color: @color-grey-2!important; border-color: @color-grey-2!important; } } &:not(.control-disabled) ul { li:hover { background: @color-balloon-control-hover-bg; cursor: pointer; } } &.form-control-sm { li { font-size: @font-size-small; padding: 0 10px; line-height: 27px; } } } .form-group { .control-balloon-selector ul { margin-bottom: 0; } } ================================================ FILE: modules/backend/assets/foundation/controls/build.less ================================================ // // Controls // -------------------------------------------------- @import "autocomplete/autocomplete.less"; @import "balloon-selector/balloon-selector.less"; @import "callout/callout.less"; @import "chart/chart.less"; @import "dropdown/dropdown.less"; @import "flashmessage/flashmessage.less"; @import "inspector/inspector.less"; @import "popover/popover.less"; @import "popup/popup.less"; @import "toolbar/toolbar.less"; @import "tooltip/tooltip.less"; @import "checkbox/checkbox.less"; ================================================ FILE: modules/backend/assets/foundation/controls/callout/README.md ================================================ # Callout ### Callout Displays a detailed message to the user, also allowing it to be dismissed.

    Warning warning

    My arms are flailing wildly

    Insert coin(s) to begin play

    ### No sub-header Include the `no-subheader` class to omit the sub heading.

    Incoming unicorn

    ### No icon Include the `no-icon` class to omit the icon.

    There was a hull breach

    • Get to the chopper
    ### No header

    Something good happened

    • You found a pony
    ### Data attributes: - data-dismiss="callout" - when assigned to an element, the callout hides on click ## JavaScript API ### Events - close.oc.callout - triggered when the callout is closed ================================================ FILE: modules/backend/assets/foundation/controls/callout/callout.js ================================================ /* * Callout * * - Documentation: ../docs/callout.md */ +function ($) { 'use strict'; // CALLOUT CLASS DEFINITION // ====================== var dismiss = '[data-dismiss="callout"]'; var Callout = function (el) { $(el).on('click', dismiss, this.close); } Callout.prototype.close = function (e) { var $this = $(this); var selector = $this.attr('data-target'); if (!selector) { selector = $this.attr('href'); } var $parent = $(selector); if (e) { e.preventDefault(); } if (!$parent.length) { $parent = $this.hasClass('callout') ? $this : $this.parent(); } $parent.trigger(e = $.Event('close.oc.callout')); if (e.isDefaultPrevented()) { return; } $parent.removeClass('show'); function removeElement() { $parent.trigger('closed.oc.callout').remove(); } $parent.hasClass('fade') ? $parent.one('transitionend', removeElement) : removeElement(); } // CALLOUT PLUGIN DEFINITION // ======================= var old = $.fn.callout $.fn.callout = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('oc.callout') if (!data) $this.data('oc.callout', (data = new Callout(this))) if (typeof option == 'string') data[option].call($this) }) } $.fn.callout.Constructor = Callout // CALLOUT NO CONFLICT // ================= $.fn.callout.noConflict = function () { $.fn.callout = old; return this; } // CALLOUT DATA-API // ============== $(document).on('click.oc.callout.data-api', dismiss, Callout.prototype.close); }(jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/callout/callout.less ================================================ // // Callouts // -------------------------------------------------- @callout-color: var(--bs-body-color); @callout-info-bg: var(--oc-callout-info-bg); @callout-info-icon: var(--oc-callout-info-icon); @callout-warning-bg: var(--oc-callout-warning-bg); @callout-warning-icon: var(--oc-callout-warning-icon); @callout-danger-bg: var(--oc-callout-danger-bg); @callout-danger-icon: var(--oc-callout-danger-icon); @callout-success-bg: var(--oc-callout-success-bg); @callout-success-icon: var(--oc-callout-success-icon); :root, [data-bs-theme="light"] { --oc-callout-info-bg: #e6e7fc; --oc-callout-info-icon: #6a6cf7; --oc-callout-warning-bg: #faf6e2; --oc-callout-warning-icon: #e1b810; --oc-callout-danger-bg: #fadad7; --oc-callout-danger-content-bg: #fadad7; --oc-callout-danger-icon: #ff3e1d; --oc-callout-success-bg: #ecf7da; --oc-callout-success-icon: #86cb43; } [data-bs-theme="dark"] { --oc-callout-info-bg: #12262c; --oc-callout-warning-bg: #302310; --oc-callout-danger-bg: #330c06; --oc-callout-success-bg: #1b290d; } .callout { font-size: @font-size-base; margin-bottom: @line-height-computed; &.fade { opacity: 0; transition: all 0.5s, width 0s; transform: scale(0.9); } &.fade.show { opacity: 1; transform: scale(1); } > .close { width: 22px; height: 22px; margin: 15px 15px 0; position: relative; .hide-text(); opacity: 1; &:before { .icon-OctoFont(); content: @icon-cross; color: @callout-color; font-size: 16px; position: relative; } &:hover:before { color: @brand-danger; } } > .action { float: right; padding: 10px; } > .header + .content { border-top: none; } > .header { padding: 15px 20px 5px; border-radius: 4px 4px 0 0; color: @callout-color; margin-bottom: -1px; > .custom-icon { width: 27.5px; text-align: center; font-size: 22px; float: left; position: relative; top: -5px; left: -5px; } // // Default icon // > i, > .custom-icon { display: none; } &:before { .icon-OctoFont(); float: left; font-size: 22px; position: relative; left: -3px; } h3 { letter-spacing: 0; font-size: @font-size-base; font-weight: 600; line-height: 150%; margin: 0; } h3, p, ul, ol { margin-left: 32px; margin-bottom: 7px; } ul, ol { padding-left: @padding-standard; } &:last-child { border-radius: 4px; margin-bottom: 0; } } > .content { color: @callout-color; padding: 0 20px 15px 52px; border-radius: 0 0 4px 4px; h1, h2, h3, h4, h5, h6 { color: @callout-color; text-transform: none; margin: 20px 0 5px 0; line-height: 150%; font-weight: 600; } h1 { font-size: 30px; } h2 { font-size: 26px; } h3 { font-size: 24px; } h4 { font-size: 20px; } h5 { font-size: 18px; } h6 { font-size: 16px; } *:last-child { margin-bottom: 0; } ul, ol { padding-left: @padding-standard; li { margin-bottom: 5px; } } .action-panel { padding: 10px 0 0 0; } } // // Modifiers // &.has-custom-icon { > .header { > .custom-icon { display: block; } &:before { display: none; } } } &.no-title { > .content { padding-top: 15px; border-radius: 4px; } } &.no-subheader { > .header { padding-bottom: 10px; } > .header + .content { margin-top: -5px; } } &.no-icon { > .header { h3, p, ul, ol { margin-left: 0; } &:before { display: none; } } > .content { padding-left: 20px; } } // // Styles // &.callout-danger { > .header { background: @callout-danger-bg; > .custom-icon { color: @callout-danger-icon; } &:before { content: @icon-callout-danger; color: @callout-danger-icon; } } > .content { background: @callout-danger-bg; } } &.callout-info { > .header { background: @callout-info-bg; > .custom-icon { color: @callout-info-icon; } &:before { content: @icon-callout-info; color: @callout-info-icon; } } > .content { background: @callout-info-bg; } } &.callout-success { > .header { background: @callout-success-bg; > .custom-icon { color: @callout-success-icon; } &:before { content: @icon-callout-success; color: @callout-success-icon; } } > .content { background: @callout-success-bg; } } &.callout-warning { > .header { background: @callout-warning-bg; > .custom-icon { color: @callout-warning-icon; } &:before { content: @icon-callout-danger; color: @callout-warning-icon; } } > .content { background: @callout-warning-bg; } } &.is-flush { margin-bottom: 0; > .content { border-bottom-left-radius: 0; border-bottom-right-radius: 0; } } } .form-group > .callout { margin-bottom: 0; } ================================================ FILE: modules/backend/assets/foundation/controls/chart/README.md ================================================ # Chart ## Pie chart The pie chart outputs information as a circle diagram, with optional label in the center. Example markup:
    • Label 1 100
    • Label 2 100
    • Label 3 100
    ![image](https://github.com/octobercms/docs/blob/develop/images/traffic-sources.png?raw=true) {.img-responsive .frame} ## Line chart The next example shows a line chart markup. Data sets are defined with the SPAN elements inside the chart element.
    ![image](https://github.com/octobercms/docs/blob/develop/images/line-chart.png?raw=true) {.img-responsive .frame} ## Bar chart The next example shows a bar chart markup. The **wrap-legend** class is optional, it manages the legend layout. The **data-height** and **data-full-width** attributes are optional as well.
    • Label 1 100
    • Label 2 100
    • Label 3 100
    ![image](https://github.com/octobercms/docs/blob/develop/images/bar-chart.png?raw=true) {.img-responsive .frame} # Example
    • Label 1 100
    • Label 2 100
    • Label 3 100
    • Label 1 100
    • Label 2 100
    • Label 3 100
    ## Status list A list of statuses and values # Example
    • Software is up to date Update
    • Some issues need attention View
    • System build 313
    • Event log items 200
    • Online since 4th April 2014
    ================================================ FILE: modules/backend/assets/foundation/controls/chart/chart.bar.js ================================================ /* * The bar chart plugin. * * Data attributes: * - data-control="chart-bar" - enables the bar chart plugin * - data-height="200" - optional, height of the graph * - data-full-width="1" - optional, determines whether the chart should use the full width of the container * * JavaScript API: * $('.scoreboard .chart').barChart() * * Dependencies: * - Raphaël (raphael-min.js) */ +function ($) { "use strict"; var BarChart = function (element, options) { this.options = options || {} var $el = this.$el = $(element), size = this.size = $el.height(), self = this, values = $.oc.chartUtils.loadListValues($('ul', $el)), $legend = $.oc.chartUtils.createLegend($('ul', $el)), indicators = $.oc.chartUtils.initLegendColorIndicators($legend), isFullWidth = this.isFullWidth(), chartHeight = this.options.height !== undefined ? this.options.height : size, chartWidth = isFullWidth ? this.$el.width() : size, barWidth = (chartWidth - (values.values.length-1)*this.options.gap)/values.values.length var $canvas = $('
    ').addClass('canvas').height(chartHeight).width(isFullWidth ? '100%' : chartWidth) $el.prepend($canvas) $el.toggleClass('full-width', isFullWidth) Raphael($canvas.get(0), isFullWidth ? '100%' : chartWidth, chartHeight, function(){ self.paper = this self.bars = this.set() self.paper.customAttributes.bar = function (start, height) { return { path: [ ["M", start, chartHeight], ["L", start, chartHeight-height], ["L", start + barWidth, chartHeight-height], ["L", start + barWidth, chartHeight], ["Z"] ] } } // Add bars var start = 0 $.each(values.values, function(index, valueInfo) { var color = valueInfo.color !== undefined ? valueInfo.color : $.oc.chartUtils.getColor(index), path = self.paper.path().attr({"stroke-width": 0}).attr({bar: [start, 0]}).attr({fill: color}) self.bars.push(path) indicators[index].css('background-color', color) start += barWidth + self.options.gap path.hover(function(ev){ $.oc.chartUtils.showTooltip(ev.pageX, ev.pageY, $.trim($.oc.chartUtils.getLegendLabel($legend, index)) + ': '+valueInfo.value+'') }, function() { $.oc.chartUtils.hideTooltip() }) }) // Animate bars start = 0 $.each(values.values, function(index, valueInfo) { var height = (values.max && valueInfo.value) ? chartHeight/values.max * valueInfo.value : 0 self.bars[index].animate({bar: [start, height]}, 1000, "bounce") start += barWidth + self.options.gap }) // Update the full-width chart when the window is redized if (isFullWidth) { $(window).on('resize', function(){ chartWidth = self.$el.width() barWidth = (chartWidth - (values.values.length-1)*self.options.gap)/values.values.length var start = 0 $.each(values.values, function(index, valueInfo) { var height = (values.max && valueInfo.value) ? chartHeight/values.max * valueInfo.value : 0 self.bars[index].animate({bar: [start, height]}, 10, "bounce") start += barWidth + self.options.gap }) }) } }) } BarChart.prototype.isFullWidth = function() { return this.options.fullWidth !== undefined && this.options.fullWidth } BarChart.DEFAULTS = { gap: 2 } // BARCHART PLUGIN DEFINITION // ============================ var old = $.fn.barChart $.fn.barChart = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('oc.barChart') var options = $.extend({}, BarChart.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.barChart', new BarChart(this, options)) }) } $.fn.barChart.Constructor = BarChart // BARCHART NO CONFLICT // ================= $.fn.barChart.noConflict = function () { $.fn.barChart = old return this } // BARCHART DATA-API // =============== $(document).render(function () { $('[data-control=chart-bar]').barChart() }) }(window.jQuery) ================================================ FILE: modules/backend/assets/foundation/controls/chart/chart.less ================================================ // // Chart // -------------------------------------------------- @color-status-list-text: #7e8c8d; @color-chart-tooltip-bg: #000000; @color-chart-tooltip-text: #ffffff; // // Chart // -------------------------------------------------- .control-chart { div.canvas { display: inline-block; margin-right: 20px; margin-bottom: 20px; position: relative; span.center { position: absolute; display: block; text-align: center; width: 100%; top: 50%; margin-top: -21px; font-size: 30px; font-weight: 100; color: var(--bs-heading-color); z-index: @zindex-chart - 1; } svg { z-index: @zindex-chart; } } &.full-width div.canvas { margin-right: 0 !important; } ul { display: inline-block; height: inherit; margin: 0; padding: 0; list-style: none; position: relative; vertical-align: top; li { width: 120px; white-space: normal; display: block; text-transform: uppercase; color: var(--bs-heading-color); font-weight: 300; font-size: 12px; margin-bottom: 10px; span { float: right; font-weight: 600; } &:last-child { margin-bottom: 0; } } } div.chart-legend { display: inline-block; vertical-align: top; text-align: left; table { font-size: 12px; color: var(--bs-body-color); tr { td { padding: 0 0 7px 0; vertical-align: top; &.value { padding-left: 10px; font-weight: 600; color: var(--bs-secondary-color); } i { display: inline-block; width: 13px; height: 13px; border-radius: @border-radius-base; text-indent: -100000em; margin-right: 5px; position: relative; top: 2px; } &.indicator { width: 20px; } } &:last-child td { padding-bottom: 0; } } } } text-align: left; .canvas { margin-right: 20px; display: inline-block; } &.centered { text-align: center; .canvas { margin-right: 0; display: block; margin-left: auto; margin-right: auto; } } &.wrap-legend div.chart-legend table tr { display: inline-block; white-space: nowrap; margin-right: 20px; &:last-child td { padding-bottom: 7px; } } } .report-container .wrapped .control-chart { text-align: left; .canvas { margin-right: 20px; display: inline-block; } } .tickLabel, .flot-tick-label { color: #545454; } [data-bs-theme="dark"] { .tickLabel, .flot-tick-label { color: #e0e0e0; } } .title-value { span.goal-meter-indicator { float: left; height: 24px; width: 10px; margin-right: 5px; position: relative; top: 9px; background: var(--oc-color-negative); > span { text-indent: -10000em; display: block; position: absolute; width: 10px; left: 0; bottom: 0; background: var(--oc-color-positive); height: 0; .transition(all 0.2s); } } &.goal-meter-inverse { span.goal-meter-indicator { background: var(--oc-color-positive); > span { background: var(--oc-color-negative); } } } } .report-container { .title-value { margin-top: -18px; p { font-weight: 100; font-size: 40px; &.description { font-size: 12px; margin-top: 9px; } &:before { font-size: 30px; margin-right: 10px; } &.negative, &.positive { &:after { top: -8px; } } } span.goal-meter-indicator { height: 31px; top: 4px; width: 15px; margin-right: 10px; span { width: 15px; } } } } // // Status list // -------------------------------------------------- .control-status-list > ul { margin-bottom: 0; padding: 0; li { margin: 0; padding: 7px 15px 6px; list-style: none; display: block; font-size: @font-size-base - 1; color: @color-status-list-text; border-bottom: 1px solid @border-color; &:last-child { border-bottom: none; } a:not(.btn) { color: @color-status-list-text; text-decoration: none; &:hover { color: @link-color; text-decoration: none; } } a.btn:hover { color: white; } .status-text { margin: 0 5px; &.muted { color: @text-muted; } &.primary { color: @brand-primary; } &.success { color: @state-success-text; } &.info { color: @state-info-text; } &.warning { color: @state-warning-text; } &.danger { color: @state-danger-text; } } .status-label { display: block; float: right; padding: 1px 10px; &.btn { border-radius: 20px; } } .status-icon { display: inline-block; text-align: center; color: white; width: 22px; height: 22px; position: relative; top: -1px; .border-radius(100px); > i { font-size: 12px; line-height: 22px; } } .status-icon { background: #999; &.success { background: @brand-success; } &.primary { background: @brand-primary; } &.warning { background: @brand-warning; } &.danger { background: @brand-danger; } &.info { background: @brand-info; } &.link { background: transparent; } } } } .report-container { .control-status-list > ul { margin: -15px; } } ================================================ FILE: modules/backend/assets/foundation/controls/chart/chart.line.js ================================================ /* * Line Chart Plugin * * Data attributes: * - data-control="chart-line" - enables the line chart plugin * - data-reset-zoom-link="#reset-zoom" - specifies a link to reset zoom * - data-zoomable - indicates that the chart is zoomable * - data-time-mode="weeks" - if the "weeks" value is specified and the xaxis mode is "time", the X axis labels will be displayed as week end dates. * - data-chart-options="xaxis: {mode: 'time'}" - specifies the Flot configuration in JSON format. See https://github.com/flot/flot/blob/master/API.md for details. * * Data sets are defined with the SPAN elements inside the chart element: * Data set elements could contain data attributes with names in the format "data-set-color". The names for the data set * attributes are described in the Flot documentation: https://github.com/flot/flot/blob/master/API.md#data-format * * JavaScript API: * $('.chart').chartLine({ resetZoomLink:'#reset-zoom' }) * * Dependencies: * - Flot (jquery.flot.js) * - Flot Tooltip (jquery.flot.tooltip.js) * - Flot Resize (jquery.flot.resize.js) * - Flot Time (jquery.flot.time.js) */ +function ($) { "use strict"; // LINE CHART CLASS DEFINITION // ============================ var ChartLine = function(element, options) { var self = this; var isDark = document.documentElement.getAttribute('data-bs-theme') === 'dark'; var colorBackground = '#fff', colorMarkings = 'rgba(0,0,0,0.02)'; if (isDark) { colorBackground = '#1e2227'; colorMarkings = 'rgba(255,255,255,0.02)'; } // Flot options this.chartOptions = { xaxis: { mode: "time", tickLength: 5 }, selection: { mode: "x" }, grid: { markingsColor: colorMarkings, backgroundColor: { colors: [colorBackground, colorBackground] }, borderColor: "#7bafcc", borderWidth: 0, color: colorBackground, hoverable: true, clickable: true, labelMargin: 10 }, series: { lines: { show: true, fill: true }, points: { show: true } }, tooltip: true, tooltipOpts: { defaultTheme: false, content: "%x: %y", dateFormat: "%y-%0m-%0d", shifts: { x: 10, y: 20 } }, legend: { show: true, noColumns: 2 } } this.defaultDataSetOptions = { shadowSize: 0 } var parsedOptions = {} try { parsedOptions = oc.parseJSON("{" + options.chartOptions + "}"); } catch (e) { throw new Error('Error parsing the data-chart-options attribute value. '+e); } this.chartOptions = $.extend({}, this.chartOptions, parsedOptions) this.options = options this.$el = $(element) this.fullDataSet = [] this.resetZoomLink = $(options.resetZoomLink) this.$el.trigger('oc.chartLineInit', [this]) /* * Bind Events */ this.resetZoomLink.on('click', $.proxy(this.clearZoom, this)); if (this.options.zoomable) { this.$el.on("plotselected", function (event, ranges) { var newCoords = { xaxis: { min: ranges.xaxis.from, max: ranges.xaxis.to } } $.plot(self.$el, self.fullDataSet, $.extend(true, {}, self.chartOptions, newCoords)) self.resetZoomLink.show() }); } /* * Markings Helper */ if (this.chartOptions.xaxis.mode == "time" && this.options.timeMode == "weeks") this.chartOptions.markings = weekendAreas function weekendAreas(axes) { var markings = [], d = new Date(axes.xaxis.min); // Go to the first Saturday d.setUTCDate(d.getUTCDate() - ((d.getUTCDay() + 1) % 7)) d.setUTCSeconds(0) d.setUTCMinutes(0) d.setUTCHours(0) var i = d.getTime() do { // When we don't set yaxis, the rectangle automatically // extends to infinity upwards and downwards markings.push({ xaxis: { from: i, to: i + 2 * 24 * 60 * 60 * 1000 } }) i += 7 * 24 * 60 * 60 * 1000 } while (i < axes.xaxis.max) return markings } /* * Process the datasets */ this.initializing = true this.$el.find('>[data-chart="dataset"]').each(function(){ var data = $(this).data(), processedData = {}; for (var key in data) { var normalizedKey = key.substring(3), value = data[key]; normalizedKey = normalizedKey.charAt(0).toLowerCase() + normalizedKey.slice(1); if (normalizedKey == 'data') value = Array.isArray(value) ? [value] : JSON.parse('['+value+']'); processedData[normalizedKey] = value; } self.addDataSet($.extend({}, self.defaultDataSetOptions, processedData)); }) /* * Build chart */ this.initializing = false this.rebuildChart() } ChartLine.DEFAULTS = { chartOptions: "", timeMode: null, zoomable: false } /* * Adds a data set to the chart. * See https://github.com/flot/flot/blob/master/API.md#data-format for the list * of supported data set options. */ ChartLine.prototype.addDataSet = function (dataSet) { this.fullDataSet.push(dataSet) if (!this.initializing) this.rebuildChart() } ChartLine.prototype.rebuildChart = function() { this.$el.trigger('oc.beforeChartLineRender', [this]) $.plot(this.$el, this.fullDataSet, this.chartOptions) } ChartLine.prototype.clearZoom = function() { this.rebuildChart() this.resetZoomLink.hide() } // LINE CHART PLUGIN DEFINITION // ============================ var old = $.fn.chartLine $.fn.chartLine = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('october.chartLine') var options = $.extend({}, ChartLine.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('october.chartLine', (data = new ChartLine(this, options))) if (typeof option == 'string') data[option].call($this) }) } $.fn.chartLine.Constructor = ChartLine // LINE CHART NO CONFLICT // ================= $.fn.chartLine.noConflict = function () { $.fn.chartLine = old return this } // LINE CHART DATA-API // =============== $(document).render(function () { $('[data-control="chart-line"]').chartLine() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/chart/chart.meter.js ================================================ /* * The goal meter plugin. * * Applies the goal meter style to a scoreboard item. * * Data attributes: * - data-control="goal-meter" - enables the goal meter plugin * - data-value - sets the value, in percents * * JavaScript API: * $('.scoreboard .goal-meter').goalMeter({value: 20}) * $('.scoreboard .goal-meter').goalMeter(10) // Sets the current value */ +function ($) { "use strict"; var GoalMeter = function (element, options) { var $el = this.$el = $(element), self = this; this.options = options || {}; // Canvas already drawn var $canvas = $('span.goal-meter-indicator', $el); if ($canvas.length > 0) { return; } this.$indicatorBar = $('').text(this.options.value + '%'); this.$indicatorOuter = $('').addClass('goal-meter-indicator').append(this.$indicatorBar); $('p', this.$el).first().before(this.$indicatorOuter); window.setTimeout(function(){ self.update(self.options.value); }, 200); } GoalMeter.prototype.update = function(value) { this.$indicatorBar.css('height', value + '%'); } GoalMeter.DEFAULTS = { value: 50 } // GOALMETER PLUGIN DEFINITION // ============================ var old = $.fn.goalMeter $.fn.goalMeter = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('oc.goalMeter') var options = $.extend({}, GoalMeter.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.goalMeter', (data = new GoalMeter(this, options))) else data.update(option) }) } $.fn.goalMeter.Constructor = GoalMeter // GOALMETER NO CONFLICT // ================= $.fn.goalMeter.noConflict = function () { $.fn.goalMeter = old return this } // GOALMETER DATA-API // =============== $(document).render(function () { $('[data-control=goal-meter]').goalMeter() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/chart/chart.pie.js ================================================ /* * The pie chart plugin. * * Data attributes: * - data-control="chart-pie" - enables the pie chart plugin * - data-size="200" - optional, size of the graph * - data-center-text - text to display inside the graph * * JavaScript API: * $('.scoreboard .chart').pieChart() * * Dependencies: * - Raphaël (raphael-min.js) * - October chart utilities (chart.utils.js) */ +function ($) { "use strict"; var PieChart = function (element, options) { this.options = options || {} var $el = this.$el = $(element), size = this.size = (this.options.size !== undefined ? this.options.size : $el.height()), outerRadius = size/2 - 1, innerRadius = outerRadius - outerRadius/3.5, values = $.oc.chartUtils.loadListValues($('ul', $el)), $legend = $.oc.chartUtils.createLegend($('ul', $el)), indicators = $.oc.chartUtils.initLegendColorIndicators($legend), self = this; // Canvas already drawn var $canvas = $('div.canvas', $el); if ($canvas.length > 0) { return; } var $canvas = $('
    ').addClass('canvas').width(size).height(size); $el.prepend($canvas); // Truncate scoreboard in cases where there are more than 3 items $legend.height(size).css('overflow', 'hidden'); Raphael($canvas.get(0), size, size, function(){ self.paper = this; self.segments = this.set(); self.paper.customAttributes.segment = function (startAngle, endAngle) { var p1 = self.arcCoords(outerRadius, startAngle), p2 = self.arcCoords(outerRadius, endAngle), p3 = self.arcCoords(innerRadius, endAngle), p4 = self.arcCoords(innerRadius, startAngle), flag = (endAngle - startAngle) > 180, path = [ ["M", p1.x, p1.y], ["A", outerRadius, outerRadius, 0, +flag, 0, p2.x, p2.y], ["L", p3.x, p3.y], ["A", innerRadius, innerRadius, 0, +flag, 1, p4.x, p4.y], ["Z"] ]; return {path: path}; }; // Draw the background self.paper.circle(size/2, size/2, innerRadius + (outerRadius - innerRadius)/2) .attr({"stroke-width": outerRadius - innerRadius - 0.5}) .attr({stroke: $.oc.chartUtils.defaultValueColor}); // Add segments $.each(values.values, function(index, valueInfo) { var color = valueInfo.color !== undefined ? valueInfo.color : $.oc.chartUtils.getColor(index), path = self.paper.path().attr({"stroke-width": 0}).attr({segment: [0, 0]}).attr({fill: color}) self.segments.push(path) indicators[index].css('background-color', color) path.hover(function(ev){ $.oc.chartUtils.showTooltip(ev.pageX, ev.pageY, $.trim($.oc.chartUtils.getLegendLabel($legend, index)) + ': '+valueInfo.value+'') }, function() { $.oc.chartUtils.hideTooltip() }) }); // Animate segments var start = self.options.startAngle $.each(values.values, function(index, valueInfo) { var length = (values.total && valueInfo.value) ? 360/values.total * valueInfo.value : 0 if (length == 360) length-- self.segments[index].animate({segment: [start, start + length]}, 1000, "bounce") start += length }); }) if (this.options.centerText !== undefined) { var $text = $('').addClass('center').html(this.options.centerText); $canvas.append($text); } } PieChart.prototype.arcCoords = function(radius, angle) { var a = Raphael.rad(angle), x = this.size/2 + radius * Math.cos(a), y = this.size/2 - radius * Math.sin(a); return {'x': x, 'y': y}; } PieChart.DEFAULTS = { startAngle: 45 } // PIECHART PLUGIN DEFINITION // ============================ var old = $.fn.pieChart $.fn.pieChart = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('oc.pieChart') var options = $.extend({}, PieChart.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.pieChart', new PieChart(this, options)) }) } $.fn.pieChart.Constructor = PieChart // PIECHART NO CONFLICT // ================= $.fn.pieChart.noConflict = function () { $.fn.pieChart = old return this } // PIECHART DATA-API // =============== $(document).render(function () { $('[data-control=chart-pie]').pieChart() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/chart/chart.utils.js ================================================ /* * October charting utilities. */ +function ($) { "use strict"; var ChartUtils = function() {}; ChartUtils.prototype.defaultValueColor = '#b8b8b8'; ChartUtils.prototype.getColor = function(index) { var colors = [ '#95b753', '#cc3300', '#e5a91a', '#3366ff', '#ff0f00', '#ff6600', '#ff9e01', '#fcd202', '#f8ff01', '#b0de09', '#04d215', '#0d8ecf', '#0d52d1', '#2a0cd0', '#8a0ccf', '#cd0d74', '#754deb', '#dddddd', '#999999', '#333333', '#000000', '#57032a', '#ca9726', '#990000', '#4b0c25' ], colorIndex = index % (colors.length-1); return colors[colorIndex]; } ChartUtils.prototype.loadListValues = function($list) { var result = { values: [], total: 0, max: 0 }; $('> li', $list).each(function() { var value = $(this).data('value') ? parseFloat($(this).data('value')) : parseFloat($('span', this).text()); // Negative values present as positive in charts if (value < 0) { value = value * -1; } result.total += value; result.values.push({value: value, color: $(this).data('color')}); result.max = Math.max(result.max, value); }); return result; } ChartUtils.prototype.getLegendLabel = function($legend, index) { return $('tr:eq('+index+') td:eq(1)', $legend).html(); } ChartUtils.prototype.initLegendColorIndicators = function($legend) { var indicators = []; $('tr > td:first-child', $legend).each(function() { var indicator = $(''); $(this).prepend(indicator); indicators.push(indicator); }); return indicators; } ChartUtils.prototype.createLegend = function($list) { var $legend = $('
    ').addClass('chart-legend'), $table = $('') $legend.append($table) $('> li', $list).each(function() { var label = $(this).clone().children().remove().end().html(); $table.append( $('') .append($(''); fragments.push(''); rowStarted = true; } fragments.push( '' + '' ); } if (rowStarted) fragments.push(''); if (fragments.length == 0) return; var table = '
    ')) .append($('').html(label)) .append($('').addClass('value').html($('span', this).html())) ); }); $legend.insertAfter($list); $list.remove(); return $legend; } ChartUtils.prototype.showTooltip = function(x, y, text) { var $tooltip = $('#chart-tooltip'); if ($tooltip.length) { $tooltip.remove(); } $tooltip = $('
    ') .html(text) .css('visibility', 'hidden'); x += 10; y += 10; $(document.body).append($tooltip) var tooltipWidth = $tooltip.outerWidth() if ((x + tooltipWidth) > $(window).width()) x = $(window).width() - tooltipWidth - 10; $tooltip.css({top: y, left: x, visibility: 'visible'}); } ChartUtils.prototype.hideTooltip = function() { $('#chart-tooltip').remove(); } if ($.oc === undefined) $.oc = {} $.oc.chartUtils = new ChartUtils(); }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/checkbox/checkbox.js ================================================ /* * Checkbox control */ (function($) { // // Intermediate checkboxes // $(document).render(function() { $('.form-check.is-indeterminate > input').each(function() { var $el = $(this), checked = $el.data('checked'); switch (checked) { // Unchecked case 1: $el.prop('indeterminate', true); break; // Checked case 2: $el.prop('indeterminate', false); $el.prop('checked', true); break; // Unchecked default: $el.prop('indeterminate', false); $el.prop('checked', false); } }) }) $(document).on('click', '.form-check.is-indeterminate > input', function() { var $el = $(this), checked = $el.data('checked'); if (checked === undefined) { checked = $el.is(':checked') ? 1 : 0; } switch (checked) { // Unchecked, going indeterminate case 0: $el.data('checked', 1); $el.prop('indeterminate', true); break; // Indeterminate, going checked case 1: $el.data('checked', 2); $el.prop('indeterminate', false); $el.prop('checked', true); break; // Checked, going unchecked default: $el.data('checked', 0); $el.prop('indeterminate', false); $el.prop('checked', false); } }); // // Checkbox Ranges // oc.checkboxRangeDetail = { lastCheckbox: null, isLastChecked: true }; oc.checkboxRangeRegisterClick = function(ev, containerSelector, checkboxSelector) { var el = ev.target, detail = oc.checkboxRangeDetail; var selectCheckboxesIn = function(rows, isChecked) { rows.forEach(function(row) { row.querySelectorAll(checkboxSelector).forEach(function(el) { el.checked = isChecked; $(el).trigger('change'); // @todo needs triggerNativeChange? }); }); } var selectCheckboxRange = function($el, $prevEl) { var $item = $el.closest(containerSelector), $prevItem = $prevEl.closest(containerSelector), toSelect = []; var $nextRow = $item; while ($nextRow) { if ($nextRow === $prevItem) { selectCheckboxesIn(toSelect, detail.isLastChecked); return; } toSelect.push($nextRow); $nextRow = $nextRow.nextElementSibling; } toSelect = []; var $prevRow = $item; while ($prevRow) { if ($prevRow === $prevItem) { selectCheckboxesIn(toSelect, detail.isLastChecked); return; } toSelect.push($prevRow); $prevRow = $prevRow.previousElementSibling; } } if (detail.lastCheckbox && ev.shiftKey) { selectCheckboxRange(el, detail.lastCheckbox); } else { detail.lastCheckbox = el; detail.isLastChecked = el.checked; } } })(jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/checkbox/checkbox.less ================================================ // Styles are provided by Bootstrap and the Form widget .form-check-input:checked, .form-check-input[type=checkbox]:indeterminate { background-color: var(--bs-primary); border-color: var(--bs-primary); } ================================================ FILE: modules/backend/assets/foundation/controls/dropdown/README.md ================================================ Customized dropdown menu ### Small dropdown ### Drop "up" Add the `dropup` class to the dropdown container and the dropdown will appear in an upward direction. ### Large dropdown ================================================ FILE: modules/backend/assets/foundation/controls/dropdown/dropdown.js ================================================ /* * Dropdown menus. * * This script customizes the Twitter Bootstrap drop-downs. * * Require: * - bootstrap/dropdown */ +function ($) { "use strict"; $(document).on('shown.bs.dropdown', '.dropdown', function(ev) { $(document.body).addClass('dropdown-open'); var dropdown = $(ev.relatedTarget).siblings('.dropdown-menu'), dropdownContainer = $(this).data('dropdown-container'); // The dropdown menu should be a sibling of the triggering element (above) // otherwise, look for any dropdown menu within this context. if (dropdown.length === 0) { dropdown = $('.dropdown-menu', this); } if (!dropdown.hasClass('control-dropdown')) { $('li > a', dropdown).addClass('dropdown-item'); $('li:first-child', dropdown).addClass('first-item'); $('li:last-child', dropdown).addClass('last-item'); dropdown.addClass('control-dropdown'); } if (dropdownContainer !== undefined && dropdownContainer == 'body') { $(this).data('oc.dropdown', dropdown); $(document.body).append(dropdown); dropdown.css({ 'visibility': 'hidden', 'left': 0, 'top' : 0, 'display': 'block' }); var targetOffset = $(this).offset(), targetHeight = $(this).height(), targetWidth = $(this).width(), position = { x: targetOffset.left, y: targetOffset.top + targetHeight }, leftOffset = targetWidth < 30 ? -16 : 0, documentHeight = $(document).height(), dropdownHeight = dropdown.height(); if ((dropdownHeight + position.y) > documentHeight) { position.y = targetOffset.top - dropdownHeight - 12; dropdown.addClass('top'); } else { dropdown.removeClass('top'); } dropdown.css({ 'left': position.x + leftOffset, 'top': position.y, 'visibility': 'visible' }); } if ($('.dropdown-overlay', document.body).length == 0) { $(document.body).prepend($('
    ').addClass('dropdown-overlay')); } }) $(document).on('hidden.bs.dropdown', '.dropdown', function() { var dropdown = $(this).data('oc.dropdown'); if (dropdown !== undefined) { dropdown.css('display', 'none'); $(this).append(dropdown); } $(document.body).removeClass('dropdown-open'); }) /* * Fixed positioned dropdowns * - Useful for dropdowns inside hidden overflow containers */ var $dropdown, $container, $target; function fixDropdownPosition() { var position = $container.offset(), top = position.top - $(window).scrollTop() + $target.outerHeight() + 1, left = position.left; // Waiting for https://github.com/twbs/bootstrap/pull/34120 $dropdown.css({ position: 'fixed', inset: '0px auto auto 0px', transform: 'translate('+left+'px, '+top+'px)' }); } $(document).on('shown.bs.dropdown', '.dropdown.dropdown-fixed', function (ev) { $container = $(this); $dropdown = $('.dropdown-menu', $container); $target = $(ev.relatedTarget); $dropdown.addClass('is-fixed'); $(window).on('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition); setTimeout(fixDropdownPosition, 0); fixDropdownPosition(); }) $(document).on('hidden.bs.dropdown', '.dropdown.dropdown-fixed', function() { $(window).off('scroll.oc.dropdown, resize.oc.dropdown', fixDropdownPosition); }); }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/dropdown/dropdown.less ================================================ // // Dropdown // -------------------------------------------------- @import "dropdown.variables.less"; .dropdown-menu.backend-dropdownmenu .dropdown-container > ul, .control-dropdown.dropdown-menu { padding: 0; list-style: none; background-color: @dropdown-bg; position: relative; border: @popup-border; box-shadow: @box-shadow-z1; border-radius: @border-radius-base; &.is-fixed { position: fixed !important; } &.offset-left { left: 10px; } > li { a, button { outline: none; padding: 10px 15px; font-size: @font-size-base; display: block; color: @dropdown-link-color; position: relative; white-space: nowrap; text-decoration: none; &:hover, &:active, &:focus:active { color: @dropdown-hover-color; background-color: @dropdown-hover-bg !important; i { color: @dropdown-hover-color; } &[class^="oc-icon-"], &[class*=" oc-icon-"] { &:before { color: @dropdown-hover-color; } } } &:active, &:focus:active { background-color: @dropdown-active-bg !important; } &[class^="oc-icon-"], &[class*=" oc-icon-"] { padding-left: 30px; &:before { position: absolute; font-size: 14px; left: 9px; top: 14px; color: @dropdown-link-color-fade; } } > i { color: @dropdown-link-color-fade; font-size: 14px; margin-right: 4px; margin-left: -2px; } } &.first-item:not(.disabled) { a, button { &:hover, &:focus, &:active { border-top-left-radius: 4px; border-top-right-radius: 4px; } } } &.last-item:not(.disabled) { a, button { &:hover, &:focus, &:active { border-bottom-left-radius: 4px; border-bottom-right-radius: 4px; } } } &.dropdown-title { display: none; } &.dropdown-divider { margin: 0; } &.active > a { font-weight: bold; } &.disabled a, &.disabled button, a[disabled], button[disabled] { &, &:hover, &:active, &:focus:active { cursor: not-allowed; background-color: @dropdown-bg !important; color: @dropdown-link-disabled-color; > i { color: @dropdown-link-color-fade; } } &[class^="oc-icon-"], &[class*=" oc-icon-"] { &:before { color: @dropdown-link-color-fade; } } } } } // Adjustment for octo-icons // @deprecated // .control-dropdown.dropdown-menu > li { // a, button { // > i[class^="octo-icon-"] { // font-size: 16px; // position: relative; // top: 2px; // left: -2px; // } // } // } @media (hover: hover) { .control-dropdown.dropdown-menu > li { a, button { &:focus { background: @toolbar-focus-bg; } } } } .touch .control-dropdown.dropdown-menu > li { a:hover { color: @dropdown-link-color; background: white; } } body.dropdown-open { .dropdown-overlay { position: fixed; left: 0; top: 0; right: 0; bottom: 0; // background: rgba(0,0,0,0.1); z-index: @zindex-dropdown - 1; } } @media (max-width: @screen-sm) { body.dropdown-open { overflow: hidden; .dropdown-overlay { background: rgba(0,0,0,0.4); } .control-dropdown.dropdown-menu { overflow: auto; overflow-y: scroll; position: fixed !important; margin: 15px !important; top: auto !important; right: 0 !important; bottom: 0 !important; left: 0 !important; transform: none !important; z-index: @zindex-dropdown; border-radius: 8px; > li { a, button { font-size: 16px; // line-height: 50px; padding-top: 12px; padding-bottom: 12px; } &.first-item:not(.disabled) { a, button { &:hover, &:focus, &:active { border-top-left-radius: 8px; border-top-right-radius: 8px; } } } &.last-item:not(.disabled) { a, button { &:hover, &:focus, &:active { border-bottom-left-radius: 8px; border-bottom-right-radius: 8px; } } } } } } } ================================================ FILE: modules/backend/assets/foundation/controls/dropdown/dropdown.variables.less ================================================ @dropdown-border: @overlay-background; @dropdown-fallback-border: #ccc; @dropdown-divider-bg: #e5e5e5; @dropdown-link-color: @text-color; @dropdown-link-color-fade: rgba(var(--bs-body-color-rgb), 0.6); @dropdown-link-hover-color: @emphasis-color; @dropdown-link-hover-bg: @body-bg; @dropdown-link-active-color: @component-active-color; @dropdown-link-active-bg: @component-active-bg; @dropdown-link-disabled-color: @gray-light; @dropdown-header-color: @gray-light; @color-dropdown-title-border: #c9c9c9; @color-dropdown-title-text: @dropdown-link-color; ================================================ FILE: modules/backend/assets/foundation/controls/flashmessage/README.md ================================================ ## Flash message Displays a floating flash message on the screen. ### Display onload ```html
    This message is created from a static element. It will go away in 5 seconds.

    ``` ### Trigger ```html

    Show Success Show Error Show Warning

    ``` ### Display static A flash message can be rendered as a static element by attaching the `static` class. The `data-control` attribute is not needed. ```html

    Import completed successfully (success)

    Informative info box is informational (info)

    Phasers have been set to stun (warning)

    We couldn't help you with that (error)

    ``` ### Data attributes - data-control="flash-message" - enables the flash message plugin - data-interval="2" - the interval to display the message in seconds, optional. Default: 2 ### JavaScript API ```js oc.flashMsg({ 'text': 'Record saved.', 'type': 'success', 'interval': 3 }) ``` ================================================ FILE: modules/backend/assets/foundation/controls/flashmessage/flashmessage.less ================================================ // // Flash Messages // -------------------------------------------------- @color-flash-success-bg: @brand-success; @color-flash-error-bg: #cc3300; @color-flash-warning-bg: #f0ad4e; @color-flash-info-bg: #5fb6f5; @color-flash-text: #ffffff; .flash-message.static { color: @color-flash-text; font-size: 14px; padding: 10px 30px 10px 15px; word-wrap: break-word; text-align: left; border-radius: @border-radius-base; &.success { background: @color-flash-success-bg; } &.error { background: @color-flash-error-bg; } &.warning { background: @color-flash-warning-bg; } &.info { background: @color-flash-info-bg; } button { float: none; position: absolute; right: 10px; top: 12px; color: white; .hide-text(); opacity: 1; outline: none; &:before { .icon-OctoFont(); content: @icon-cross; color: white; font-size: 16px; position: relative; } &:hover { opacity: 1; } } } ================================================ FILE: modules/backend/assets/foundation/controls/inspector/README.md ================================================ # Inspector control Inspector is a visual configuration tool that is used in several places of October back-end. The most known usage of Inspector is the CMS components configuration feature, but Inspector is not limited with the CMS. In fact, it's a universal tool that can be used with any element on a back-end page. The Inspector loads the configuration schema from an inspectable element, builds the user interface, and writes values entered by users back to the inspectable element. The first version of Inspector was supporting only a few scalar value types - strings and Booleans, without an option to edit any complex data. The current version of Inspector allows to edit any imaginable data structures, including cases where users create enumerable data elements right in the Inspector interface. This section describes the client-side Inspector API without going into details about the back-end usage of the data Inspector generates. Inspector accepts the configuration schema in JSON format and generates values in JSON format as well. Providing the configuration and interpreting the generated values is up to developers. For example, the CMS module uses information returned from component's defineProperties() method to generate the configuration JSON string and converts JSON values generated by Inspector to the components configuration in CMS templates. In this document we are focusing only on the JSON format. ## Configuring inspectable elements Clicking an inspectable element displays Inspector for that element. Any HTML element could be made inspectable by adding data attributes to it. The required attributes are: * `data-inspectable` - indicates that Inspector should be created when the element is clicked. * `data-inspector-title` - sets the Inspector popup title. * `data-inspector-config` - contains the Inspector configuration JSON string. If this attribute is not specified, the configuration is loaded from the server, see the [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section below. Inspectable elements should also contain a hidden input element used by Inspector for reading and writing values. The input element should be marked with the `data-inspector-values` data attribute. Example inspectable element markup: ```html
    ``` ### Optional data attributes There are several optional data attributes and features that could be defined in an inspectable element or in elements around it: * `data-inspector-offset` - sets offset, in pixels, for the Inspector popup. * `data-inspector-offset-x` - sets horizontal offset, in pixels, for the Inspector popup. * `data-inspector-offset-y` - sets vertical offset, in pixels, for the Inspector popup. * `data-inspector-placement` - sets defines placement for the Inspector popup, optional. If omitted, Inspector evaluates a placement automatically. Supported values: top, bottom, left, top. * `data-inspector-fallback-placement` - sets less preferable placement for the Inspector popup, optional. This value is used if Inspector can't use the placement specified in data-inspector-placement. Supported values: top, bottom, left, top. * `data-inspector-external-parameters` - if this attribute exists in any parent element of the inspectable element, the external parameters editors will be enabled in Inspector (unless property-specific rules cancel the external editor). ### Dynamic configuration and dynamic items In case if the `data-inspector-config` attribute is missing in the inspectable element Inspector tries to load its configuration from the server. An important note - there should be a FORM element wrapping inspectable elements in order to use any dynamic features of Inspector. The AJAX request used for loading the configuration from the server is named `onGetInspectorConfiguration`. The handler should be defined in the back-end controller and should return an array containing the Inspector configuration (in the PHP equivalent of the JSON configuration structure described later in this section), inspector title and description. Example of a server-side AJAX dynamic configuration request handler: ```php public function onGetInspectorConfiguration() { // Load and use some values from the posted form // $someValue = Request::input('someValue'); // ... do some processing ... return [ 'configuration' => [ 'properties' => [list of properties], 'title' => 'Inspector title', 'description' => 'Inspector description' ] ]; } ``` Some Inspector editors - (drop-down, set, autocomplete) support static and dynamic options. Dynamic options are requested from the server, rather than being defined in the configuration JSON string. For using this feature, the inspectable element must have the `data-inspector-class` attribute defined. The attribute value should contain a name of a PHP class corresponding to the inspectable element. The server-side controller should use the `Backend\Traits\InspectableContainer` trait in order to provide the dynamic options loading. The inspectable PHP class (specified with `data-inspector-class`) must either have a method `get[Property]Options()`, where the [Property] part corresponds the name of the dynamic property, or `getPropertyOptions($propertyName)` method that is more universal and accepts the property name as a parameter. The methods should return the `options` array containing associative arrays with keys `option` and `value`. Example: ```php public function getContextOptions() { $optionsArray = []; $optionsArray[] = ['value' => 'create', 'title' => 'Create']; $optionsArray[] = ['value' => 'update', 'title' => 'Update']; $optionsArray[] = ['value' => 'delete', 'title' => 'Delete']; return [ 'options' => $optionsArray ]; } ``` ### Container and popups By default Inspector is displayed in a popup, but there's an option to display it right on the page, in a container element. To enable this option, all inspectable elements should be wrapped into another element with `data-inspector-container` attribute. The attribute value should be a CSS selector pointing to an element inside the wrapper. Example: ```html
    ``` The inner element will act as host element for Inspector when an inspectable element is clicked. The element should have the `inspector-container` class and can be optionally marked with `data-inspector-scrollable` attribute to make the Inspector scrollable. For the scrolling feature, the container element should have height defined explicitly. When the container is used, Inspector is still displayed in a popup by default, but users can click an icon in the Inspector header to move it to the container. ## Data schema configuration Inspector configuration, defined with `data-inspector-config` attribute or loaded from the server, should be an array containing a list of property definition. All examples in this section use JSON format. Below is an example of a configuration for two properties: ```json [ { "property": "firstName", "title": "First name", "type": "string" }, { "property": "lastName", "title": "Last name", "type": "string" } ] ``` This configuration creates two text fields with titles "First name" and "Last name". When the data is saved back to the inspectable element (to the `data-inspector-values` hidden input element), it would have the following format: ```json {"firstName":"John", "lastName":"Smith"} ``` Each property should have attributes `property`, `title` and `type`. The `type` attribute defines a type of an editor that should be created for the property. The supported editors are described further. Other attributes supported by all (or most of the) property types are: * `description` - description string, which is available in a tooltip displayed when a user overs the 'i' icon in the property editor. * `group` - allows to group multiple properties. The attribute should contain a group name. Groups could be collapsed by users, making the Inspector interface less cluttered. * `showExternalParam` - enables the inspector parameter editor for the property. External parameters are currently used only by the CMS. Note that some property types do not support external property editors. See also `data-inspector-external-parameters` attribute described above. * `placeholder` - text to display in the editor if property value is empty. * `validation` - validation configuration. See the complete validation description below. * `default` - default property value. The property value format depends on the property type - for the `string` type it's an array, for `stringList` type it's an array of strings. See more details below. All other configuration properties are specific for different property types. ### String editor String editor allows entering a single line of a text and represented with a simple input text field. The editor doesn't have any specific parameters. The optional `default` parameter for the editor should contain a string. ```json { "property": "firstName", "title": "First name", "type": "string", "default": "John" } ``` The editor generates string values: ```json {"firstName":"Sam"} ``` ### Text editor Text editor allows entering multi-line long text values in a popup window. The editor doesn't have any specific parameters. The optional `default` parameter for the editor should contain a string. ```json { "property": "description", "title": "Description", "type": "text", "default": "This is a default description" } ``` The editor generates string values: ```json {"description":"This is a description"} ``` ### String list editor Allows users to enter lists of strings. The editor opens in a popup window and displays a text area. Each line of text represents an element in the result array. The optional `default` parameter should contain an array of strings. Example: ```json { "property": "items", "title": "Items" "type": "stringList", "default": ["String 1", "String 2"] } ``` A value generated by the editor is an array of strings, for example: ```json {"items":["String 1","String 2","String 3"]} ``` ### Autocomplete editor This editor works like the `string` editor, but includes the autocomplete feature. Autocompletion options can be specified statically, with the `items` parameter or loaded dynamically. Example with static options: ```json { "property": "condition", "title": "Condition" "type": "autocomplete", "items": {"start": "Start", "end": "End"} } ``` The items are specified as a key-value object. The `items` parameter is optional, if it's not provided, the items will be loaded from the server - see [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section above. Values generated by the editor are strings. Example: ```json {"condition":"start"} ``` Fields of this type do not support external property editors. ### Checkbox editor Properties of this type are represented with a checkbox in the Inspector UI. This property doesn't have any special parameters. The `default` parameter, if specified, should contain a Boolean value or string values "true", "false", "1", "0". Example: ```json { "property": "enabled", "title": "Enabled", "type": "checkbox", "default": true } ``` Values generated by the editor are 0 (unchecked) or 1 (checked). Example: ```json {"enabled":1} ``` ### Dropdown editor Displays a drop-down list. Options for the drop-down list can be specified statically with the `options` attribute or loaded from the server dynamically. Example: ```json { "property": "action", "title": "Action", "type": "dropdown", "options": { "show": "Show", "hide": "Hide", "enable": "Enable", "disable": "Disable", "empty": "Empty" } } ``` The `options` attribute should be a key-value object. If the attribute is not specified, Inspector will try to load options from the server - see [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section above. The editor generates a string value corresponding to the selected option, for example: ```json {"action":"hide"} ``` ### Dictionary editor Dictionary editor allows to create key-value pairs with a simple user interface consisting of a table with two columns. The `default` parameter, if specified, should contain a key-value object. Example: ```json { "property": "options", "title": "Options", "type": "dictionary", "default": {"option1": "Option 1"} } ``` The editor generates an object value, for example: ```json {"options":{"option1":"Option 1","option2":"Option 2"}} ``` The dictionary editor supports validation for the entire set (`required` and `length` validators) and for keys and values separately. See the [validation description](#defining-the-validation-rules) further in this document. The `validationKey` and `validationValue` define validation for keys and values, for example: ```json { "property": "options", "title": "Options", "type": "dictionary", "validation": { "required": { "message": "Please create options" }, "length": { "min": { "value": 2, "message": "Create at least two options." } } }, "validationKey": { "regex": { "pattern": "^[a-z]+$", "message": "Keys can contain only lowercase Latin letters" } }, "validationValue": { "regex": { "pattern": "^[a-zA-Z0-9]+$", "message": "Values can contain only Latin letters and digits" } } } ``` ### Object editor Allows to define an object with specific properties editable by users. Object properties are specified with the `properties` attribute. The value of the attribute is an array, which has exactly the same structure as the Inspector properties array. ```json { "property": "address", "title": "Address", "type": "object", "properties": [ { "property": "streetAddress", "title": "Street address", "type": "string" }, { "property": "city", "title": "City", "type": "string" }, { "property": "country", "title": "Country", "type": "dropdown", "options": {"us": "US", "ca": "Canada"} } ] } ``` The example above creates an object with three properties. Two of them are displayed as text fields, and the third as a drop-down. Object editor values are objects. Example: ```json { "address": { "streetAddress":"321-210 Second ave", "city":"Springfield", "country":"us" } } ``` The object properties can be of any type supported by Inspector, including other objects. There's a way to exclude an object from Inspector values completely, if one of the object fields is empty. The field is identified with `ignoreIfPropertyEmpty` parameter. For example: ```json { "property": "address", "title": "Address", "type": "object", "ignoreIfPropertyEmpty": "title", "properties": [ { "property": "streetAddress", "title": "Street address", "type": "string" }, { "property": "city", "title": "City", "type": "string" } ] } ``` In the example above, if the street address is not specified, the object ("address") will be completely removed from the Inspector output. If there are any validation rules defined on other object properties and the required property is empty, those rules will be ignored. A `default` value for the editor, if specified, should be an object with the same properties as defined in the `properties` configuration parameter. Object editors do not support the external property editor feature. ### Object list editor The object list editor allows users to create multiple objects with a pre-defined structure. For example, it could be used for creating a list of person, where each person has a name and address. The properties of objects that can be created with the editor are defined with `itemProperties` parameter. The parameter should contain an array of properties, similar to Inspector configuration array. Another required parameter is `titleProperty`, which identifies a property that should be used as a title in Inspector UI. Example configuration: ```json { "property": "people", "title": "People", "type": "objectList", "titleProperty": "fullName", "itemProperties": [ { "property": "fullName", "title": "Full name", "type": "string" }, { "property": "address", "title": "Address", "type": "string" } ] } ``` The array of properties defined with `itemProperties` supports all property types. The Object List editor type doesn't support default values. By default the value created by the editor of this type is a non-associative array: ```json { "people":[ {"fullName":"John Smith","address":"Palo Alto"}, {"fullName":"Bart Simpson","address":"Springfield"} ] } ``` If the result value should be an associative array (object), use the `keyProperty` configuration option. The option value should refer to a property that should be used as a key. The key property can use only the string or drop-down editors, its value should be unique and cannot be empty. Example: ```json { "property": "people", "title": "People", "type": "objectList", "titleProperty": "fullName", "keyProperty": "login", "itemProperties": [ { "property": "fullName", "title": "Full name", "type": "string" }, { "property": "login", "title": "Login", "type": "string" }, { "property": "address", "title": "Address", "type": "string" } ] } ``` The `login` property in the example above will be used as a key in the result value: ```json { "people":{ "john":{"fullName":"John Smith","address":"Palo Alto"}, "bart":{"fullName":"Bart Simpson","address":"Springfield"} } } ``` ### Set editor The set editor allows users to select multiple predefined options with checkboxes. Set items can be specified statically with the configuration, using the `items` parameter, or loaded dynamically. Example with static items definition: ```json { "property": "context", "title": "Context", "type": "set", "items": { "create": "Create", "update": "Update", "preview": "Preview" }, "default": ["create", "update"] } ``` The `items` attribute should be a key-value object. If the attribute is not specified, Inspector will try to load options from the server - see [Dynamic configuration and dynamic items](#dynamic-configuration-and-dynamic-items) section above. The `default` parameter, if specified, should be an array listing item keys selected by default. Set editors do not support the external property editor feature. ## Defining the validation rules Inspector support several validation rules that can be applied to properties. Validation rules can be applied to top-level properties as well as to internal property definitions of object and object list editors. There are two ways to define validation rules - the legacy syntax and the new syntax. The legacy syntax is supported for the backwards compatibility with existing CMS components definitions. This syntax will always be supported, but it's limited, and cannot be mixed with the new syntax. Example of the legacy syntax: ```json { "property": "name", "title": "Name", "type": "string", "required": true, "validationPattern": "^[a-zA-Z]+$" "validationMessage": "The Name field is required and can contain only Latin letters.", } ``` The legacy syntax supports only two validation rules - required and regular expression. The new syntax is much more flexible and extendable: ```json { "property": "name", "title": "Name", "type": "string", "validation": { "required": { "message": "The Name field is required" }, "regex": { "message": "The Name field can contain only Latin letters.", "pattern": "^[a-zA-Z]+$" } } } ``` The key value in the `validation` object refers to a validator (see below). Validators are configured with objects, which properties depend on a validator. One property - `message` is common for all validators. ### required validator Checks if a value is not empty. The validator can be used with any editor, including complex editors (sets, dictionaries, object lists, etc.). Example: ```json { "property": "name", "title": "Name", "type": "string", "validation": { "required": { "message": "The Name field is required" } } } ``` ### regex validator Validates string values with a regular expression. The validator can be use only with string-typed editors. Example: ```json { "property": "name", "title": "Name", "type": "string", "validation": { "regex": { "message": "The Name field can contain only Latin letters", "pattern": "^[a-z]+$", "modifiers": "i" } } } ``` The regular expression is specified with the required `pattern` parameter. The `modifiers` parameter is optional and can be used for setting regular expression modifiers. ### integer validator Checks if the value is integer and can optionally validate if the value is within a specific interval. The validator can be used only with string-typed editors. Example: ```json { "property": "numOfColumns", "title": "Number of Columns", "type": "string", "validation": { "integer": { "message": "The Number of Columns field should contain an integer value", "allowNegative": true, "min": { "value": -10, "message": "The number of columns should not be less than -10." }, "max": { "value": 10, "message": "The number of columns should not be greater than 10." } } } } ``` Supported parameters: * `allowNegative` - optional, determines if negative values are allowed. By default negative values are not allowed. * `min` - optional object, defines the minimum allowed value and error message. Object fields: * `value` - defines the minimum value. * `message` - optional, defines the error message. * `max` - optional object, defines the maximum allowed value and error message. Object fields: * `value` - defines the maximum value. * `message` - optional, defines the error message. ### float validator Checks if the value is a floating point number. The parameters for this validator match the parameters of the **integer** validator described above. Example: ```json { "property": "amount", "title": "Amount", "type": "string", "validation": { "float": { "message": "The Amount field should contain a positive floating point value." } } } ``` Valid floating point number formats: * 10 * 10.302 * -10 (if `allowNegative` is `true`) * -10.84 (if `allowNegative` is `true`) ### length validator Checks if a string, array or object is not shorter or longer than specified values. This validator can work with the string, text, set, string list, dictionary and object list editors. In multiple-value editors (set, string list, dictionary and object list) it validates the number of items created in the editor. > **Note**: the `length` validator doesn't validate empty values. For example, if it's applied to a set editor, and the set is empty, the validation will pass regardless of the `min` and `max` parameter values. Use the `required` validator together with the `length` validator to make sure that the value is not empty before the length validation is applied. ```json { "property": "name", "title": "Name", "type": "string", "validation": { "length": { "min": { "value": 2, "message": "The name should not be shorter than two letters." }, "max": { "value": 10, "message": "name should not be longer than 10 letters." } } } } ``` Supported parameters: * `min` - optional object, defines the minimum allowed length and error message. Object fields: * `value` - defines the minimum value. * `message` - optional, defines the error message. * `max` - optional object, defines the maximum allowed length and error message. Object fields: * `value` - defines the maximum value. * `message` - optional, defines the error message. ## Inspector events Inspector triggers several events on the inspectable elements. ### change The `change` event is triggered after Inspector applies updated values to the inspectable element. The event is triggered only if the user has changed values in the Inspector UI. ### showing.oc.inspector The `showing.oc.inspector` event is triggered before Inspector is displayed. The event handler can optionally stop the process with calling `ev.isDefaultPrevented()`. Example - prevent Inspector showing: ```js $(document).on('showing.oc.inspector', 'div[data-inspectable]', function(ev, data){ ev.preventDefault() }) ``` The handler could perform any required processing, even asynchronous, and then call the callback function passed to the handler, to continue showing the Inspector. In this case the handler should call `ev.stopPropagation()` method to stop the default Inspector initialization. Example - continue showing after some processing: ```js $(document).on('showing.oc.inspector', 'div[data-inspectable]', function(ev, data){ ev.stopPropagation() // The callback function can be called asynchronously data.callback() }) ``` ### hiding.oc.inspector The `hiding.oc.inspector` is called before Inspector hiding process starts. The handler can stop the hiding with calling `ev.preventDefault()`. Example: ```js $(document).on('hiding.oc.inspector', 'div[data-inspectable]', function(ev, data){ if (!confirm('Allow hiding?')) { ev.preventDefault() } }) ``` The values entered in Inspector are available through the `values` element of the second handler argument: ```js $(document).on('hiding.oc.inspector', 'div[data-inspectable]', function(ev, data){ console.log(data.values) }) ``` ### hidden.oc.inspector The `hidden.oc.inspector` is triggered after Inspector is hidden. ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.datainteraction.js ================================================ /* * Inspector data interaction class. * * Provides methods for loading and writing Inspector configuration * and values form and to inspectable elements. */ +function ($) { "use strict"; // CLASS DEFINITION // ============================ var Base = $.oc.foundation.base, BaseProto = Base.prototype var DataInteraction = function(element) { this.element = element; Base.call(this); } DataInteraction.prototype = Object.create(BaseProto) DataInteraction.prototype.constructor = Base DataInteraction.prototype.dispose = function() { this.element = null BaseProto.dispose.call(this) } DataInteraction.prototype.getElementValuesInput = function() { return this.element.querySelector('input[data-inspector-values]') } DataInteraction.prototype.normalizePropertyCode = function(code, configuration) { var lowerCaseCode = code.toLowerCase() for (var index in configuration) { var propertyInfo = configuration[index] if (propertyInfo.property.toLowerCase() == lowerCaseCode) { return propertyInfo.property } } return code } DataInteraction.prototype.loadValues = function(configuration) { var valuesField = this.getElementValuesInput() if (valuesField) { var valuesStr = $.trim(valuesField.value) try { return valuesStr.length === 0 ? {} : JSON.parse(valuesStr) } catch (err) { throw new Error('Error parsing Inspector field values. ' + err) } } var values = {}, attributes = this.element.attributes for (var i=0, len = attributes.length; i < len; i++) { var attribute = attributes[i], matches = [] if (matches = attribute.name.match(/^data-property-(.*)$/)) { // Important - values contained in data-property-xxx attributes are // considered strings and never parsed with JSON. The use of the // data-property-xxx attributes is very limited - they're only // used in Pages for creating snippets from partials, where properties // are created with a table UI widget, which doesn't allow creating // properties of any complex types. // // There is no a technically reliable way to determine when a string // is a JSON data or a regular string. Users can enter a value // like [10], which is a proper JSON value, but meant to be a string. // // One possible way to resolve it, if to check the property type loaded // from the configuration and see if the corresponding editor expects // complex data. var normalizedPropertyName = normalizePropertyCode(matches[1], configuration) values[normalizedPropertyName] = attribute.value } } return values } DataInteraction.prototype.loadConfiguration = function(onComplete) { var configurationField = this.element.querySelector('input[data-inspector-config]'), result = { configuration: {}, title: null, description: null }, $element = $(this.element); result.title = $element.data('inspector-title'); result.description = $element.data('inspector-description'); if (configurationField) { result.configuration = this.parseConfiguration(configurationField.value); onComplete(result, this); return; } var $form = $element.closest('form'), data = $element.data(), self = this; $.oc.stripeLoadIndicator.show(); $form.request($.oc.inspector.helpers.getEventHandler($element, 'onGetInspectorConfiguration'), { data: data }) .done(function inspectorConfigurationRequestDoneClosure(data) { self.configurationRequestDone(data, onComplete, result); }) .always(function() { $.oc.stripeLoadIndicator.hide(); }); } // // Internal methods // DataInteraction.prototype.parseConfiguration = function(configuration) { if (!Array.isArray(configuration) && !$.isPlainObject(configuration)) { if ($.trim(configuration) === 0) { return {}; } try { return JSON.parse(configuration); } catch(err) { throw new Error('Error parsing Inspector configuration. ' + err); } } else { return configuration; } } DataInteraction.prototype.configurationRequestDone = function(data, onComplete, result) { result.configuration = this.parseConfiguration(data.configuration.properties); if (data.configuration.title !== undefined) { result.title = data.configuration.title; } if (data.configuration.description !== undefined) { result.description = data.configuration.description; } onComplete(result, this); } $.oc.inspector.dataInteraction = DataInteraction; }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.autocomplete.js ================================================ /* * Inspector autocomplete editor class. * * Depends on october.autocomplete.js */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.string, BaseProto = Base.prototype; var AutocompleteEditor = function(inspector, propertyDefinition, containerCell, group) { this.autoUpdateTimeout = null; Base.call(this, inspector, propertyDefinition, containerCell, group); } AutocompleteEditor.prototype = Object.create(BaseProto); AutocompleteEditor.prototype.constructor = Base; AutocompleteEditor.prototype.dispose = function() { this.clearAutoUpdateTimeout(); this.removeAutocomplete(); BaseProto.dispose.call(this); } AutocompleteEditor.prototype.build = function() { var container = document.createElement('div'), editor = document.createElement('input'), placeholder = this.propertyDefinition.placeholder !== undefined ? this.propertyDefinition.placeholder : '', value = this.inspector.getPropertyValue(this.propertyDefinition.property); editor.setAttribute('type', 'text'); editor.setAttribute('class', 'string-editor'); editor.setAttribute('placeholder', placeholder); container.setAttribute('class', 'autocomplete-container'); if (value === undefined) { value = this.propertyDefinition.default; } if (value === undefined) { value = ''; } editor.value = value; $.oc.foundation.element.addClass(this.containerCell, 'text autocomplete'); container.appendChild(editor); this.containerCell.appendChild(container); if (this.propertyDefinition.items !== undefined) { this.buildAutoComplete(this.propertyDefinition.items); } else { this.loadDynamicItems(); } } AutocompleteEditor.prototype.buildAutoComplete = function(items) { var input = this.getInput() if (items === undefined) { items = []; } var $input = $(input), autocomplete = $input.data('autocomplete') if (!autocomplete) { $input.autocomplete({ source: this.prepareItems(items), matchWidth: true }); } else { autocomplete.source = this.prepareItems(items); } } AutocompleteEditor.prototype.removeAutocomplete = function() { var input = this.getInput(); $(input).autocomplete('destroy'); } AutocompleteEditor.prototype.prepareItems = function(items) { var result = {}; if (Array.isArray(items)) { for (var i = 0, len = items.length; i < len; i++) { result[items[i]] = items[i]; } } else { result = items; } return result; } AutocompleteEditor.prototype.supportsExternalParameterEditor = function() { return false; } AutocompleteEditor.prototype.getContainer = function() { return this.getInput().parentNode; } AutocompleteEditor.prototype.registerHandlers = function() { BaseProto.registerHandlers.call(this); $(this.getInput()).on('change', this.proxy(this.onInputKeyUp)); } AutocompleteEditor.prototype.unregisterHandlers = function() { BaseProto.unregisterHandlers.call(this); $(this.getInput()).off('change', this.proxy(this.onInputKeyUp)); } AutocompleteEditor.prototype.saveDependencyValues = function() { this.prevDependencyValues = this.getDependencyValues(); } AutocompleteEditor.prototype.getDependencyValues = function() { var result = ''; for (var i = 0, len = this.propertyDefinition.depends.length; i < len; i++) { var property = this.propertyDefinition.depends[i], value = this.inspector.getPropertyValue(property); if (value === undefined) { value = ''; } result += property + ':' + value + '-'; } return result; } AutocompleteEditor.prototype.onInspectorPropertyChanged = function(property) { if (!this.propertyDefinition.depends || this.propertyDefinition.depends.indexOf(property) === -1) { return; } this.clearAutoUpdateTimeout(); if (this.prevDependencyValues === undefined || this.prevDependencyValues != dependencyValues) { this.autoUpdateTimeout = setTimeout(this.proxy(this.loadDynamicItems), 200); } } AutocompleteEditor.prototype.clearAutoUpdateTimeout = function() { if (this.autoUpdateTimeout !== null) { clearTimeout(this.autoUpdateTimeout); this.autoUpdateTimeout = null; } } // // Dynamic items // AutocompleteEditor.prototype.showLoadingIndicator = function() { $(this.getContainer()).loadIndicator(); } AutocompleteEditor.prototype.hideLoadingIndicator = function() { if (this.isDisposed()) { return; } var $container = $(this.getContainer()); $container.loadIndicator('hide'); $container.loadIndicator('destroy'); $container.removeClass('loading-indicator-container'); } AutocompleteEditor.prototype.loadDynamicItems = function() { if (this.isDisposed()) { return; } this.clearAutoUpdateTimeout(); var container = this.getContainer(), data = this.getRootSurface().getValues(), $form = $(container).closest('form'); $.oc.foundation.element.addClass(container, 'loading-indicator-container size-small'); this.showLoadingIndicator(); if (this.triggerGetItems(data) === false) { return; } data['inspectorProperty'] = this.getPropertyPath(); data['inspectorClassName'] = this.inspector.options.inspectorClass; $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), { data: data, progressBar: false }) .done(this.proxy(this.itemsRequestDone)) .always(this.proxy(this.hideLoadingIndicator)); } AutocompleteEditor.prototype.triggerGetItems = function(values) { var $inspectable = this.getInspectableElement(); if (!$inspectable) { return true; } var itemsEvent = $.Event('autocompleteitems.oc.inspector'); $inspectable.trigger(itemsEvent, [{ values: values, callback: this.proxy(this.itemsRequestDone), property: this.inspector.getPropertyPath(this.propertyDefinition.property), propertyDefinition: this.propertyDefinition }]); if (itemsEvent.isDefaultPrevented()) { return false; } return true; } AutocompleteEditor.prototype.itemsRequestDone = function(data) { if (this.isDisposed()) { // Handle the case when the asynchronous request finishes after // the editor is disposed return } this.hideLoadingIndicator(); var loadedItems = {}; if (data.options) { for (var i = data.options.length-1; i >= 0; i--) { loadedItems[data.options[i].value] = data.options[i].title; } } this.buildAutoComplete(loadedItems); } $.oc.inspector.propertyEditors.autocomplete = AutocompleteEditor; }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.base.js ================================================ /* * Inspector editor base class. */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc === undefined) { $.oc = {} } if ($.oc.inspector === undefined) { $.oc.inspector = {} } if ($.oc.inspector.propertyEditors === undefined) { $.oc.inspector.propertyEditors = {} } // CLASS DEFINITION // ============================ var Base = $.oc.foundation.base, BaseProto = Base.prototype var BaseEditor = function(inspector, propertyDefinition, containerCell, group) { this.inspector = inspector; this.propertyDefinition = propertyDefinition; this.containerCell = containerCell; this.containerRow = containerCell.parentNode; this.parentGroup = group; // Group created by a grouped editor, for example by the set editor this.group = null; this.childInspector = null; this.validationSet = null; this.disposed = false; Base.call(this); this.init(); } BaseEditor.prototype = Object.create(BaseProto) BaseEditor.prototype.constructor = Base BaseEditor.prototype.dispose = function() { // After this point editors can't rely on any DOM references this.disposed = true; this.disposeValidation(); if (this.childInspector) { this.childInspector.dispose(); } this.inspector = null; this.propertyDefinition = null; this.containerCell = null; this.containerRow = null; this.childInspector = null; this.parentGroup = null; this.group = null; this.validationSet = null; BaseProto.dispose.call(this) } BaseEditor.prototype.init = function() { this.build() this.registerHandlers() this.initValidation() } BaseEditor.prototype.build = function() { return null } BaseEditor.prototype.isDisposed = function() { return this.disposed } BaseEditor.prototype.registerHandlers = function() { } BaseEditor.prototype.onInspectorPropertyChanged = function(property, value) { } BaseEditor.prototype.notifyChildSurfacesPropertyChanged = function(property, value) { if (!this.hasChildSurface()) { return; } this.childInspector.notifyEditorsPropertyChanged(property, value) } BaseEditor.prototype.focus = function() { } BaseEditor.prototype.hasChildSurface = function() { return this.childInspector !== null } BaseEditor.prototype.getRootSurface = function() { return this.inspector.getRootSurface() } BaseEditor.prototype.getPropertyPath = function() { return this.inspector.getPropertyPath(this.propertyDefinition.property) } /** * Updates displayed value in the editor UI. The value is already set * in the Inspector and should be loaded from Inspector. */ BaseEditor.prototype.updateDisplayedValue = function(value) { } BaseEditor.prototype.getPropertyName = function() { return this.propertyDefinition.property } BaseEditor.prototype.getUndefinedValue = function() { return this.propertyDefinition.default === undefined ? undefined : this.propertyDefinition.default } BaseEditor.prototype.throwError = function(errorMessage) { throw new Error(errorMessage + ' Property: ' + this.propertyDefinition.property) } BaseEditor.prototype.getInspectableElement = function() { return this.getRootSurface().getInspectableElement() } BaseEditor.prototype.isEmptyValue = function(value) { return value === undefined || value === null || (typeof value == 'object' && $.isEmptyObject(value) ) || (typeof value == 'string' && $.trim(value).length === 0) || (Object.prototype.toString.call(value) === '[object Array]' && value.length === 0) } // // Validation // BaseEditor.prototype.initValidation = function() { this.validationSet = new $.oc.inspector.validationSet(this.propertyDefinition, this.propertyDefinition.property) } BaseEditor.prototype.disposeValidation = function() { this.validationSet.dispose() } BaseEditor.prototype.getValueToValidate = function() { return this.inspector.getPropertyValue(this.propertyDefinition.property) } BaseEditor.prototype.validate = function(silentMode) { var value = this.getValueToValidate() if (value === undefined) { value = this.getUndefinedValue() } var validationResult = this.validationSet.validate(value) if (validationResult !== null) { if (!silentMode) { $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5}) } return false } return true } BaseEditor.prototype.markInvalid = function() { $.oc.foundation.element.addClass(this.containerRow, 'invalid'); this.inspector.getGroupManager().markGroupRowInvalid(this.parentGroup, this.inspector.getRootTable()); this.inspector.getRootSurface().expandGroupParents(this.parentGroup); this.focus(); } // // External editor // BaseEditor.prototype.supportsExternalParameterEditor = function() { return true } BaseEditor.prototype.onExternalPropertyEditorHidden = function() { } // // Grouping // BaseEditor.prototype.isGroupedEditor = function() { return false } BaseEditor.prototype.initControlGroup = function() { this.group = this.inspector.getGroupManager().createGroup(this.propertyDefinition.property, this.parentGroup) } BaseEditor.prototype.createGroupedRow = function(property) { var row = this.inspector.buildRow(property, this.group), groupedClass = this.inspector.getGroupManager().isGroupExpanded(this.group) ? 'expanded' : 'collapsed' this.inspector.applyGroupLevelToRow(row, this.group) $.oc.foundation.element.addClass(row, 'property') $.oc.foundation.element.addClass(row, groupedClass) return row } $.oc.inspector.propertyEditors.base = BaseEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.checkbox.js ================================================ /* * Inspector checkbox editor class. * * This editor is used in $.oc.inspector.propertyEditors.set class. * If updates that affect references to this.inspector and propertyDefinition are done, * the propertyEditors.set class implementation should be reviewed. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.base, BaseProto = Base.prototype var CheckboxEditor = function(inspector, propertyDefinition, containerCell, group) { Base.call(this, inspector, propertyDefinition, containerCell, group) } CheckboxEditor.prototype = Object.create(BaseProto) CheckboxEditor.prototype.constructor = Base CheckboxEditor.prototype.dispose = function() { this.unregisterHandlers() BaseProto.dispose.call(this) } CheckboxEditor.prototype.build = function() { var editor = document.createElement('input'), container = document.createElement('div'), value = this.inspector.getPropertyValue(this.propertyDefinition.property), label = document.createElement('label'), isChecked = false, id = this.inspector.generateSequencedId(); container.setAttribute('tabindex', 0); container.setAttribute('class', 'form-check'); editor.setAttribute('type', 'checkbox'); editor.setAttribute('value', '1'); editor.setAttribute('placeholder', 'placeholder'); editor.setAttribute('id', id); editor.setAttribute('class', 'form-check-input'); container.appendChild(editor); if (value === undefined) { if (this.propertyDefinition.default !== undefined) { isChecked = this.normalizeCheckedValue(this.propertyDefinition.default); } } else { isChecked = this.normalizeCheckedValue(value); } editor.checked = isChecked; this.containerCell.appendChild(container); } CheckboxEditor.prototype.normalizeCheckedValue = function(value) { if (value == '0' || value == 'false') { return false; } return value; } CheckboxEditor.prototype.getInput = function() { return this.containerCell.querySelector('input'); } CheckboxEditor.prototype.focus = function() { this.getInput().parentNode.focus({ preventScroll: true }); } CheckboxEditor.prototype.updateDisplayedValue = function(value) { this.getInput().checked = this.normalizeCheckedValue(value); } CheckboxEditor.prototype.isEmptyValue = function(value) { if (value === 0 || value === '0' || value === 'false') { return true; } return BaseProto.isEmptyValue.call(this, value); } CheckboxEditor.prototype.registerHandlers = function() { var input = this.getInput() input.addEventListener('change', this.proxy(this.onInputChange)) } CheckboxEditor.prototype.unregisterHandlers = function() { var input = this.getInput() input.removeEventListener('change', this.proxy(this.onInputChange)) } CheckboxEditor.prototype.onInputChange = function() { var isChecked = this.getInput().checked this.inspector.setPropertyValue(this.propertyDefinition.property, isChecked ? 1 : 0) } $.oc.inspector.propertyEditors.checkbox = CheckboxEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.dictionary.js ================================================ /* * Inspector dictionary editor class. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.popupBase, BaseProto = Base.prototype var DictionaryEditor = function(inspector, propertyDefinition, containerCell, group) { this.keyValidationSet = null this.valueValidationSet = null Base.call(this, inspector, propertyDefinition, containerCell, group) } DictionaryEditor.prototype = Object.create(BaseProto) DictionaryEditor.prototype.constructor = Base DictionaryEditor.prototype.dispose = function() { this.disposeValidators() this.keyValidationSet = null this.valueValidationSet = null BaseProto.dispose.call(this) } DictionaryEditor.prototype.init = function() { this.initValidators() BaseProto.init.call(this) } DictionaryEditor.prototype.supportsExternalParameterEditor = function() { return false } // // Popup editor methods // DictionaryEditor.prototype.setLinkText = function(link, value) { var value = value !== undefined ? value : this.inspector.getPropertyValue(this.propertyDefinition.property) if (value === undefined) { value = this.propertyDefinition.default } if (value === undefined || $.isEmptyObject(value)) { var placeholder = this.propertyDefinition.placeholder if (placeholder !== undefined) { $.oc.foundation.element.addClass(link, 'cell-placeholder') link.textContent = placeholder } else { link.textContent = 'Items: 0' } } else { if (typeof value !== 'object') { this.throwError('Object list value should be an object.') } var itemCount = this.getValueKeys(value).length $.oc.foundation.element.removeClass(link, 'cell-placeholder') link.textContent = 'Items: ' + itemCount } } DictionaryEditor.prototype.getPopupContent = function() { return '
    \ \ \ \
    ' } DictionaryEditor.prototype.configurePopup = function(popup) { this.buildItemsTable(popup.get(0)) this.focusFirstInput() } DictionaryEditor.prototype.handleSubmit = function($form) { return this.applyValues() } // // Building and row management // DictionaryEditor.prototype.buildItemsTable = function(popup) { var table = popup.querySelector('table.inspector-dictionary-table'), tbody = document.createElement('tbody'), items = this.inspector.getPropertyValue(this.propertyDefinition.property), titleProperty = this.propertyDefinition.titleProperty if (items === undefined) { items = this.propertyDefinition.default } if (items === undefined || this.getValueKeys(items).length === 0) { var row = this.buildEmptyRow() tbody.appendChild(row) } else { for (var key in items) { var row = this.buildTableRow(key, items[key]) tbody.appendChild(row) } } table.appendChild(tbody) this.updateScrollpads() } DictionaryEditor.prototype.buildTableRow = function(key, value) { var row = document.createElement('tr'), keyCell = document.createElement('td'), valueCell = document.createElement('td') this.createInput(keyCell, key) this.createInput(valueCell, value) row.appendChild(keyCell) row.appendChild(valueCell) return row } DictionaryEditor.prototype.buildEmptyRow = function() { return this.buildTableRow(null, null) } DictionaryEditor.prototype.createInput = function(container, value) { var input = document.createElement('input'), controlContainer = document.createElement('div') input.setAttribute('type', 'text') input.setAttribute('class', 'form-control') input.value = value controlContainer.appendChild(input) container.appendChild(controlContainer) } DictionaryEditor.prototype.setActiveCell = function(input) { var activeCells = this.popup.querySelectorAll('td.active') for (var i = activeCells.length-1; i >= 0; i--) { $.oc.foundation.element.removeClass(activeCells[i], 'active') } var activeCell = input.parentNode.parentNode // input / div / td $.oc.foundation.element.addClass(activeCell, 'active') } DictionaryEditor.prototype.createItem = function() { var activeRow = this.getActiveRow(), newRow = this.buildEmptyRow(), tbody = this.getTableBody(), nextSibling = activeRow ? activeRow.nextElementSibling : null tbody.insertBefore(newRow, nextSibling) this.focusAndMakeActive(newRow.querySelector('input')) this.updateScrollpads() } DictionaryEditor.prototype.deleteItem = function() { var activeRow = this.getActiveRow(), tbody = this.getTableBody() if (!activeRow) { return } var nextRow = activeRow.nextElementSibling, prevRow = activeRow.previousElementSibling tbody.removeChild(activeRow) var newSelectedRow = nextRow ? nextRow : prevRow if (!newSelectedRow) { newSelectedRow = this.buildEmptyRow() tbody.appendChild(newSelectedRow) } this.focusAndMakeActive(newSelectedRow .querySelector('input')) this.updateScrollpads() } DictionaryEditor.prototype.applyValues = function() { var tbody = this.getTableBody(), dataRows = tbody.querySelectorAll('tr'), link = this.getLink(), result = {} for (var i = 0, len = dataRows.length; i < len; i++) { var dataRow = dataRows[i], keyInput = this.getRowInputByIndex(dataRow, 0), valueInput = this.getRowInputByIndex(dataRow, 1), key = $.trim(keyInput.value), value = $.trim(valueInput.value) if (key.length == 0 && value.length == 0) { continue } if (key.length == 0) { $.oc.flashMsg({text: 'The key cannot be empty.', 'class': 'error', 'interval': 3}) this.focusAndMakeActive(keyInput) return false } if (value.length == 0) { $.oc.flashMsg({text: 'The value cannot be empty.', 'class': 'error', 'interval': 3}) this.focusAndMakeActive(valueInput) return false } if (result[key] !== undefined) { $.oc.flashMsg({text: 'Keys should be unique.', 'class': 'error', 'interval': 3}) this.focusAndMakeActive(keyInput) return false } var validationResult = this.keyValidationSet.validate(key) if (validationResult !== null) { $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5}) return false } validationResult = this.valueValidationSet.validate(value) if (validationResult !== null) { $.oc.flashMsg({text: validationResult, 'class': 'error', 'interval': 5}) return false } result[key] = value } this.inspector.setPropertyValue(this.propertyDefinition.property, result) this.setLinkText(link, result) } // // Helpers // DictionaryEditor.prototype.getValueKeys = function(value) { var result = [] for (var key in value) { result.push(key) } return result } DictionaryEditor.prototype.getActiveRow = function() { var activeCell = this.popup.querySelector('td.active') if (!activeCell) { return null } return activeCell.parentNode } DictionaryEditor.prototype.getTableBody = function() { return this.popup.querySelector('table.inspector-dictionary-table tbody') } DictionaryEditor.prototype.updateScrollpads = function() { $('.control-scrollpad', this.popup).scrollpad('update') } DictionaryEditor.prototype.focusFirstInput = function() { var input = this.popup.querySelector('td input') if (input) { input.focus() this.setActiveCell(input) } } DictionaryEditor.prototype.getEditorCell = function(cell) { return cell.parentNode.parentNode // cell / div / td } DictionaryEditor.prototype.getEditorRow = function(cell) { return cell.parentNode.parentNode.parentNode // cell / div / td / tr } DictionaryEditor.prototype.focusAndMakeActive = function(input) { input.focus() this.setActiveCell(input) } DictionaryEditor.prototype.getRowInputByIndex = function(row, index) { return row.cells[index].querySelector('input') } // // Navigation // DictionaryEditor.prototype.navigateDown = function(ev) { var cell = this.getEditorCell(ev.currentTarget), row = this.getEditorRow(ev.currentTarget), nextRow = row.nextElementSibling if (!nextRow) { return } var newActiveEditor = nextRow.cells[cell.cellIndex].querySelector('input') this.focusAndMakeActive(newActiveEditor) } DictionaryEditor.prototype.navigateUp = function(ev) { var cell = this.getEditorCell(ev.currentTarget), row = this.getEditorRow(ev.currentTarget), prevRow = row.previousElementSibling if (!prevRow) { return } var newActiveEditor = prevRow.cells[cell.cellIndex].querySelector('input') this.focusAndMakeActive(newActiveEditor) } // // Validation // DictionaryEditor.prototype.initValidators = function() { this.keyValidationSet = new $.oc.inspector.validationSet({ validation: this.propertyDefinition.validationKey }, this.propertyDefinition.property+'.validationKey') this.valueValidationSet = new $.oc.inspector.validationSet({ validation: this.propertyDefinition.validationValue }, this.propertyDefinition.property+'.validationValue') } DictionaryEditor.prototype.disposeValidators = function() { this.keyValidationSet.dispose() this.valueValidationSet.dispose() } // // Event handlers // DictionaryEditor.prototype.onPopupShown = function(ev, link, popup) { BaseProto.onPopupShown.call(this,ev, link, popup ) popup.on('focus.inspector', 'td input', this.proxy(this.onFocus)) popup.on('keydown.inspector', 'td input', this.proxy(this.onKeyDown)) popup.on('click.inspector', '[data-cmd]', this.proxy(this.onCommand)) } DictionaryEditor.prototype.onPopupHidden = function(ev, link, popup) { popup.off('.inspector', 'td input') popup.off('.inspector', '[data-cmd]', this.proxy(this.onCommand)) BaseProto.onPopupHidden.call(this, ev, link, popup) } DictionaryEditor.prototype.onFocus = function(ev) { this.setActiveCell(ev.currentTarget) } DictionaryEditor.prototype.onCommand = function(ev) { var command = ev.currentTarget.getAttribute('data-cmd') switch (command) { case 'create-item' : this.createItem() break; case 'delete-item' : this.deleteItem() break; } } DictionaryEditor.prototype.onKeyDown = function(ev) { if (ev.key === 'ArrowDown') { return this.navigateDown(ev) } else if (ev.key === 'ArrowUp') { return this.navigateUp(ev) } } $.oc.inspector.propertyEditors.dictionary = DictionaryEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.dropdown.js ================================================ /* * Inspector checkbox dropdown class. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.base, BaseProto = Base.prototype var DropdownEditor = function(inspector, propertyDefinition, containerCell, group) { this.indicatorContainer = null Base.call(this, inspector, propertyDefinition, containerCell, group) } DropdownEditor.prototype = Object.create(BaseProto) DropdownEditor.prototype.constructor = Base DropdownEditor.prototype.init = function() { this.dynamicOptions = this.propertyDefinition.options ? false : true this.initialization = false BaseProto.init.call(this) } DropdownEditor.prototype.dispose = function() { this.unregisterHandlers() this.destroyCustomSelect() this.indicatorContainer = null BaseProto.dispose.call(this) } // // Building // DropdownEditor.prototype.build = function() { var select = document.createElement('select') $.oc.foundation.element.addClass(this.containerCell, 'dropdown') $.oc.foundation.element.addClass(select, 'custom-select') if (!this.dynamicOptions) { this.loadStaticOptions(select) } this.containerCell.appendChild(select) this.initCustomSelect() if (this.dynamicOptions) { this.loadDynamicOptions(true) } } DropdownEditor.prototype.formatSelectOption = function(state) { if (!state.id) return state.text; // optgroup var option = state.element, iconClass = option.getAttribute('data-icon'), imageSrc = option.getAttribute('data-image') if (iconClass) { return ' ' + state.text } if (imageSrc) { return ' ' + state.text } return state.text } DropdownEditor.prototype.createOption = function(select, title, value) { var option = document.createElement('option') if (title !== null) { if (!Array.isArray(title)) { option.textContent = title } else { if (title[1].indexOf('.') !== -1) { option.setAttribute('data-image', title[1]) } else { option.setAttribute('data-icon', title[1]) } option.textContent = title[0] } } if (value !== null) { option.value = value } select.appendChild(option) } DropdownEditor.prototype.createOptions = function(select, options) { for (var value in options) { this.createOption(select, options[value], value) } } DropdownEditor.prototype.initCustomSelect = function() { var select = this.getSelect() var options = { dropdownCssClass: 'ocInspectorDropdown' } if (this.propertyDefinition.emptyOption !== undefined) { options.placeholder = this.propertyDefinition.emptyOption } if (this.propertyDefinition.placeholder !== undefined) { options.placeholder = this.propertyDefinition.placeholder } options.templateResult = this.formatSelectOption options.templateSelection = this.formatSelectOption options.escapeMarkup = function(m) { return m } $(select).select2(options) if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) { this.indicatorContainer = $('.select2-container', this.containerCell) this.indicatorContainer.addClass('loading-indicator-container size-small') } } DropdownEditor.prototype.createPlaceholder = function(select) { var placeholder = this.propertyDefinition.placeholder || this.propertyDefinition.emptyOption var isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0 if (placeholder !== undefined && !isTouchDevice) { this.createOption(select, null, null) } if (placeholder !== undefined && isTouchDevice) { this.createOption(select, placeholder, null) } } // // Helpers // DropdownEditor.prototype.getSelect = function() { return this.containerCell.querySelector('select') } DropdownEditor.prototype.clearOptions = function(select) { while (select.firstChild) { select.removeChild(select.firstChild) } } DropdownEditor.prototype.hasOptionValue = function(select, value) { var options = select.children for (var i = 0, len = options.length; i < len; i++) { if (options[i].value == value) { return true } } return false } DropdownEditor.prototype.normalizeValue = function(value) { if (!this.propertyDefinition.booleanValues) { return value } var str = String(value) if (str.length === 0) { return '' } if (str === 'true') { return true } return false } // // Event handlers // DropdownEditor.prototype.registerHandlers = function() { var select = this.getSelect() $(select).on('change', this.proxy(this.onSelectionChange)) } DropdownEditor.prototype.onSelectionChange = function() { var select = this.getSelect() this.inspector.setPropertyValue(this.propertyDefinition.property, this.normalizeValue(select.value), this.initialization) } DropdownEditor.prototype.onInspectorPropertyChanged = function(property) { if (!this.propertyDefinition.depends || this.propertyDefinition.depends.indexOf(property) === -1) { return } var dependencyValues = this.getDependencyValues() if (this.prevDependencyValues === undefined || this.prevDependencyValues != dependencyValues) { this.loadDynamicOptions() } } DropdownEditor.prototype.onExternalPropertyEditorHidden = function() { if (this.dynamicOptions) { this.loadDynamicOptions(false) } } // // Editor API methods // DropdownEditor.prototype.updateDisplayedValue = function(value) { var select = this.getSelect() select.value = value } DropdownEditor.prototype.getUndefinedValue = function() { // Return default value if the default value is defined if (this.propertyDefinition.default !== undefined) { return this.propertyDefinition.default } // Return undefined if there's a placeholder value if (this.propertyDefinition.placeholder !== undefined) { return undefined } // Otherwise - return the first value in the list var select = this.getSelect() if (select) { return this.normalizeValue(select.value) } return undefined } DropdownEditor.prototype.isEmptyValue = function(value) { if (this.propertyDefinition.booleanValues) { if (value === '') { return true } return false } return BaseProto.isEmptyValue.call(this, value) } // // Disposing // DropdownEditor.prototype.destroyCustomSelect = function() { var $select = $(this.getSelect()) if ($select.data('select2') != null) { $select.select2('destroy') } } DropdownEditor.prototype.unregisterHandlers = function() { var select = this.getSelect() $(select).off('change', this.proxy(this.onSelectionChange)) } // // Static options // DropdownEditor.prototype.loadStaticOptions = function(select) { var value = this.inspector.getPropertyValue(this.propertyDefinition.property) this.createPlaceholder(select) this.createOptions(select, this.propertyDefinition.options) if (value === undefined) { value = this.propertyDefinition.default } select.value = value } // // Dynamic options // DropdownEditor.prototype.loadDynamicOptions = function(initialization) { var currentValue = this.inspector.getPropertyValue(this.propertyDefinition.property), data = this.getRootSurface().getValues(), self = this, $form = $(this.getSelect()).closest('form'), dependents = this.inspector.findDependentProperties(this.propertyDefinition.property) if (currentValue === undefined) { currentValue = this.propertyDefinition.default } var callback = function dropdownOptionsRequestDoneClosure(data) { self.hideLoadingIndicator(); self.optionsRequestDone(data, currentValue, true); if (dependents.length > 0 && self.inspector) { for (var i in dependents) { var editor = self.inspector.findPropertyEditor(dependents[i]) if (editor && typeof editor.onInspectorPropertyChanged === 'function') { editor.onInspectorPropertyChanged(self.propertyDefinition.property) } } } } if (this.propertyDefinition.depends) { this.saveDependencyValues(); } data['inspectorProperty'] = this.getPropertyPath(); data['inspectorClassName'] = this.inspector.options.inspectorClass; this.showLoadingIndicator(); if (this.triggerGetOptions(data, callback) === false) { return; } $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), { data: data, progressBar: false }) .done(callback).always(this.proxy(this.hideLoadingIndicator)); } DropdownEditor.prototype.triggerGetOptions = function(values, callback) { var $inspectable = this.getInspectableElement() if (!$inspectable) { return true } var optionsEvent = $.Event('dropdownoptions.oc.inspector') $inspectable.trigger(optionsEvent, [{ values: values, callback: callback, property: this.inspector.getPropertyPath(this.propertyDefinition.property), propertyDefinition: this.propertyDefinition }]) if (optionsEvent.isDefaultPrevented()) { return false } return true } DropdownEditor.prototype.saveDependencyValues = function() { this.prevDependencyValues = this.getDependencyValues() } DropdownEditor.prototype.getDependencyValues = function() { var result = '' for (var i = 0, len = this.propertyDefinition.depends.length; i < len; i++) { var property = this.propertyDefinition.depends[i], value = this.inspector.getPropertyValue(property) if (value === undefined) { value = ''; } result += property + ':' + value + '-' } return result } DropdownEditor.prototype.showLoadingIndicator = function() { if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) { this.indicatorContainer.loadIndicator() } } DropdownEditor.prototype.hideLoadingIndicator = function() { if (this.isDisposed()) { return } if (!('ontouchstart' in window || navigator.maxTouchPoints > 0)) { this.indicatorContainer.loadIndicator('hide') this.indicatorContainer.loadIndicator('destroy') } } DropdownEditor.prototype.optionsRequestDone = function(data, currentValue, initialization) { if (this.isDisposed()) { // Handle the case when the asynchronous request finishes after // the editor is disposed return } var select = this.getSelect() // Without destroying and recreating the custom select // there could be detached DOM nodes. this.destroyCustomSelect() this.clearOptions(select) this.initCustomSelect() this.createPlaceholder(select) if (data.options) { for (var i = 0, len = data.options.length; i < len; i++) { this.createOption(select, data.options[i].title, data.options[i].value) } } if (this.hasOptionValue(select, currentValue)) { select.value = currentValue } else { select.selectedIndex = this.propertyDefinition.placeholder === undefined ? 0 : -1 } this.initialization = initialization $(select).trigger('change') this.initialization = false } $.oc.inspector.propertyEditors.dropdown = DropdownEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.object.js ================================================ /* * Inspector object editor class. * * This class uses other editors. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.base, BaseProto = Base.prototype var ObjectEditor = function(inspector, propertyDefinition, containerCell, group) { if (propertyDefinition.properties === undefined) { this.throwError('The properties property should be specified in the object editor configuration.') } Base.call(this, inspector, propertyDefinition, containerCell, group) } ObjectEditor.prototype = Object.create(BaseProto) ObjectEditor.prototype.constructor = Base ObjectEditor.prototype.init = function() { this.initControlGroup() BaseProto.init.call(this) } // // Building // ObjectEditor.prototype.build = function() { var currentRow = this.containerCell.parentNode, inspectorContainer = document.createElement('div'), options = { enableExternalParameterEditor: false, onChange: this.proxy(this.onInspectorDataChange), inspectorClass: this.inspector.options.inspectorClass }, values = this.inspector.getPropertyValue(this.propertyDefinition.property) if (values === undefined) { values = {} } this.childInspector = new $.oc.inspector.surface(inspectorContainer, this.propertyDefinition.properties, values, this.inspector.getInspectorUniqueId() + '-' + this.propertyDefinition.property, options, this.inspector, this.group, this.propertyDefinition.property) this.inspector.mergeChildSurface(this.childInspector, currentRow) } // // Helpers // ObjectEditor.prototype.cleanUpValue = function(value) { if (value === undefined || typeof value !== 'object') { return undefined } if (this.propertyDefinition.ignoreIfPropertyEmpty === undefined) { return value } return this.getValueOrRemove(value) } ObjectEditor.prototype.getValueOrRemove = function(value) { if (this.propertyDefinition.ignoreIfPropertyEmpty === undefined) { return value } var targetProperty = this.propertyDefinition.ignoreIfPropertyEmpty, targetValue = value[targetProperty] if (this.isEmptyValue(targetValue)) { return $.oc.inspector.removedProperty } return value } // // Editor API methods // ObjectEditor.prototype.supportsExternalParameterEditor = function() { return false } ObjectEditor.prototype.isGroupedEditor = function() { return true } ObjectEditor.prototype.getUndefinedValue = function() { var result = {} for (var i = 0, len = this.propertyDefinition.properties.length; i < len; i++) { var propertyName = this.propertyDefinition.properties[i].property, editor = this.childInspector.findPropertyEditor(propertyName) if (editor) { result[propertyName] = editor.getUndefinedValue() } } return this.getValueOrRemove(result) } ObjectEditor.prototype.validate = function(silentMode) { var values = this.childInspector.getValues() if (this.cleanUpValue(values) === $.oc.inspector.removedProperty) { // Ignore any validation rules if the object's required // property is empty (ignoreIfPropertyEmpty) return true } return this.childInspector.validate(silentMode) } // // Event handlers // ObjectEditor.prototype.onInspectorDataChange = function(property, value) { var values = this.childInspector.getValues() this.inspector.setPropertyValue(this.propertyDefinition.property, this.cleanUpValue(values)) } $.oc.inspector.propertyEditors.object = ObjectEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.objectlist.js ================================================ /* * Inspector object list editor class. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.base, BaseProto = Base.prototype var ObjectListEditor = function(inspector, propertyDefinition, containerCell, group) { this.currentRowInspector = null this.popup = null if (propertyDefinition.titleProperty === undefined) { throw new Error('The titleProperty property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property) } if (propertyDefinition.itemProperties === undefined) { throw new Error('The itemProperties property should be specified in the objectList editor configuration. Property: ' + propertyDefinition.property) } Base.call(this, inspector, propertyDefinition, containerCell, group) } ObjectListEditor.prototype = Object.create(BaseProto) ObjectListEditor.prototype.constructor = Base ObjectListEditor.prototype.init = function() { if (this.isKeyValueMode()) { var keyProperty = this.getKeyProperty() if (!keyProperty) { throw new Error('Object list key property ' + this.propertyDefinition.keyProperty + ' is not defined in itemProperties. Property: ' + this.propertyDefinition.property) } } BaseProto.init.call(this) } ObjectListEditor.prototype.dispose = function() { this.unregisterHandlers() this.removeControls() this.currentRowInspector = null this.popup = null BaseProto.dispose.call(this) } ObjectListEditor.prototype.supportsExternalParameterEditor = function() { return false } // // Building // ObjectListEditor.prototype.build = function() { var link = document.createElement('a') $.oc.foundation.element.addClass(link, 'trigger') link.setAttribute('href', '#') this.setLinkText(link) $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell') this.containerCell.appendChild(link) } ObjectListEditor.prototype.setLinkText = function(link, value) { var value = value !== undefined && value !== null ? value : this.inspector.getPropertyValue(this.propertyDefinition.property) if (value === null) { value = undefined } if (value === undefined) { var placeholder = this.propertyDefinition.placeholder if (placeholder !== undefined) { $.oc.foundation.element.addClass(link, 'cell-placeholder') link.textContent = placeholder } else { link.textContent = 'Items: 0' } } else { var itemCount = 0 if (!this.isKeyValueMode()) { if (value.length === undefined) { throw new Error('Object list value should be an array. Property: ' + this.propertyDefinition.property) } itemCount = value.length } else { if (typeof value !== 'object') { throw new Error('Object list value should be an object. Property: ' + this.propertyDefinition.property) } itemCount = this.getValueKeys(value).length } $.oc.foundation.element.removeClass(link, 'cell-placeholder') link.textContent = 'Items: ' + itemCount } } ObjectListEditor.prototype.getPopupContent = function() { return '
    \ \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \ \ \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \ \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \
    \ \
    '; } ObjectListEditor.prototype.buildPopupContents = function(popup) { this.buildItemsTable(popup) } ObjectListEditor.prototype.buildItemsTable = function(popup) { var table = popup.querySelector('table'), tbody = document.createElement('tbody'), items = this.inspector.getPropertyValue(this.propertyDefinition.property), titleProperty = this.propertyDefinition.titleProperty if (items === undefined || this.getValueKeys(items).length === 0) { var row = this.buildEmptyRow() tbody.appendChild(row) } else { var firstRow = undefined for (var key in items) { var item = items[key], itemInspectorValue = this.addKeyProperty(key, item), itemText = item[titleProperty], row = this.buildTableRow(itemText, 'rowlink') row.setAttribute('data-inspector-values', JSON.stringify(itemInspectorValue)) tbody.appendChild(row) if (firstRow === undefined) { firstRow = row } } } table.appendChild(tbody) if (firstRow !== undefined) { this.selectRow(firstRow, true) } this.updateScrollpads() } ObjectListEditor.prototype.buildEmptyRow = function() { return this.buildTableRow('No items found', 'no-data', 'nolink') } ObjectListEditor.prototype.removeEmptyRow = function() { var tbody = this.getTableBody(), row = tbody.querySelector('tr.no-data') if (row) { tbody.removeChild(row) } } ObjectListEditor.prototype.buildTableRow = function(text, rowClass, cellClass) { var row = document.createElement('tr'), cell = document.createElement('td') cell.textContent = text if (rowClass !== undefined) { $.oc.foundation.element.addClass(row, rowClass) } if (cellClass !== undefined) { $.oc.foundation.element.addClass(cell, cellClass) } row.appendChild(cell) return row } ObjectListEditor.prototype.updateScrollpads = function() { $('.control-scrollpad', this.popup).scrollpad('update') } // // Built-in Inspector management // ObjectListEditor.prototype.selectRow = function(row, forceSelect) { var tbody = row.parentNode, inspectorContainer = this.getInspectorContainer(), selectedRow = this.getSelectedRow() if (selectedRow === row && !forceSelect) { return } if (selectedRow) { if (!this.validateKeyValue()) { return } if (this.currentRowInspector) { if (!this.currentRowInspector.validate()) { return } } this.applyDataToRow(selectedRow) $.oc.foundation.element.removeClass(selectedRow, 'active') } this.disposeInspector() $.oc.foundation.element.addClass(row, 'active') this.createInspectorForRow(row, inspectorContainer) } ObjectListEditor.prototype.createInspectorForRow = function(row, inspectorContainer) { var dataStr = row.getAttribute('data-inspector-values') if (dataStr === undefined || typeof dataStr !== 'string') { throw new Error('Values not found for the selected row.') } var properties = this.propertyDefinition.itemProperties, values = JSON.parse(dataStr), options = { enableExternalParameterEditor: false, onChange: this.proxy(this.onInspectorDataChange), inspectorClass: this.inspector.options.inspectorClass } this.currentRowInspector = new $.oc.inspector.surface(inspectorContainer, properties, values, $.oc.inspector.helpers.generateElementUniqueId(inspectorContainer), options) } ObjectListEditor.prototype.disposeInspector = function() { $.oc.foundation.controlUtils.disposeControls(this.popup.querySelector('[data-inspector-container]')) this.currentRowInspector = null } ObjectListEditor.prototype.applyDataToRow = function(row) { if (this.currentRowInspector === null) { return } var data = this.currentRowInspector.getValues() row.setAttribute('data-inspector-values', JSON.stringify(data)) } ObjectListEditor.prototype.updateRowText = function(property, value) { var selectedRow = this.getSelectedRow() if (!selectedRow) { throw new Exception('A row is not found for the updated data') } if (property !== this.propertyDefinition.titleProperty) { return } value = $.trim(value) if (value.length === 0) { value = '[No title]' $.oc.foundation.element.addClass(selectedRow, 'disabled') } else { $.oc.foundation.element.removeClass(selectedRow, 'disabled') } selectedRow.firstChild.textContent = value } ObjectListEditor.prototype.getSelectedRow = function() { if (!this.popup) { throw new Error('Trying to get selected row without a popup reference.') } var rows = this.getTableBody().children for (var i = 0, len = rows.length; i < len; i++) { if ($.oc.foundation.element.hasClass(rows[i], 'active')) { return rows[i] } } return null } ObjectListEditor.prototype.createItem = function() { var selectedRow = this.getSelectedRow() if (selectedRow) { if (!this.validateKeyValue()) { return } if (this.currentRowInspector) { if (!this.currentRowInspector.validate()) { return } } this.applyDataToRow(selectedRow) $.oc.foundation.element.removeClass(selectedRow, 'active') } this.disposeInspector() var title = 'New item', row = this.buildTableRow(title, 'rowlink active'), tbody = this.getTableBody(), data = {} data[this.propertyDefinition.titleProperty] = title row.setAttribute('data-inspector-values', JSON.stringify(data)) tbody.appendChild(row) this.selectRow(row, true) this.removeEmptyRow() this.updateScrollpads() } ObjectListEditor.prototype.deleteItem = function() { var selectedRow = this.getSelectedRow() if (!selectedRow) { return } var nextRow = selectedRow.nextElementSibling, prevRow = selectedRow.previousElementSibling, tbody = this.getTableBody() this.disposeInspector() tbody.removeChild(selectedRow) var newSelectedRow = nextRow ? nextRow : prevRow if (newSelectedRow) { this.selectRow(newSelectedRow) } else { tbody.appendChild(this.buildEmptyRow()) } this.updateScrollpads() } ObjectListEditor.prototype.applyDataToParentInspector = function() { var selectedRow = this.getSelectedRow(), tbody = this.getTableBody(), dataRows = tbody.querySelectorAll('tr[data-inspector-values]'), link = this.getLink(), result = this.getEmptyValue() if (selectedRow) { if (!this.validateKeyValue()) { return } if (this.currentRowInspector) { if (!this.currentRowInspector.validate()) { return } } this.applyDataToRow(selectedRow) } for (var i = 0, len = dataRows.length; i < len; i++) { var dataRow = dataRows[i], rowData = JSON.parse(dataRow.getAttribute('data-inspector-values')) if (!this.isKeyValueMode()) { result.push(rowData) } else { var rowKey = rowData[this.propertyDefinition.keyProperty] result[rowKey] = this.removeKeyProperty(rowData) } } this.inspector.setPropertyValue(this.propertyDefinition.property, result) this.setLinkText(link, result) $(link).popup('hide') return false } ObjectListEditor.prototype.validateKeyValue = function() { if (!this.isKeyValueMode()) { return true } if (this.currentRowInspector === null) { return true } var data = this.currentRowInspector.getValues(), keyProperty = this.propertyDefinition.keyProperty if (data[keyProperty] === undefined) { throw new Error('Key property ' + keyProperty + ' is not found in the Inspector data. Property: ' + this.propertyDefinition.property) } var keyPropertyValue = data[keyProperty], keyPropertyTitle = this.getKeyProperty().title if (typeof keyPropertyValue !== 'string') { throw new Error('Key property (' + keyProperty + ') value should be a string. Property: ' + this.propertyDefinition.property) } if ($.trim(keyPropertyValue).length === 0) { $.oc.flashMsg({text: 'The value of key property ' + keyPropertyTitle + ' cannot be empty.', 'class': 'error', 'interval': 3}) return false } var selectedRow = this.getSelectedRow(), tbody = this.getTableBody(), dataRows = tbody.querySelectorAll('tr[data-inspector-values]') for (var i = 0, len = dataRows.length; i < len; i++) { var dataRow = dataRows[i], rowData = JSON.parse(dataRow.getAttribute('data-inspector-values')) if (selectedRow == dataRow) { continue } if (rowData[keyProperty] == keyPropertyValue) { $.oc.flashMsg({text: 'The value of key property ' + keyPropertyTitle + ' should be unique.', 'class': 'error', 'interval': 3}) return false } } return true } // // Helpers // ObjectListEditor.prototype.getLink = function() { return this.containerCell.querySelector('a.trigger') } ObjectListEditor.prototype.getPopupFormElement = function() { var form = this.popup.querySelector('form') if (!form) { this.throwError('Cannot find form element in the popup window.') } return form } ObjectListEditor.prototype.getInspectorContainer = function() { return this.popup.querySelector('div[data-inspector-container]') } ObjectListEditor.prototype.getTableBody = function() { return this.popup.querySelector('table.inspector-table-list tbody') } ObjectListEditor.prototype.isKeyValueMode = function() { return this.propertyDefinition.keyProperty !== undefined } ObjectListEditor.prototype.getKeyProperty = function() { for (var i = 0, len = this.propertyDefinition.itemProperties.length; i < len; i++) { var property = this.propertyDefinition.itemProperties[i] if (property.property == this.propertyDefinition.keyProperty) { return property } } } ObjectListEditor.prototype.getValueKeys = function(value) { var result = [] for (var key in value) { result.push(key) } return result } ObjectListEditor.prototype.addKeyProperty = function(key, value) { if (!this.isKeyValueMode()) { return value } value[this.propertyDefinition.keyProperty] = key return value } ObjectListEditor.prototype.removeKeyProperty = function(value) { if (!this.isKeyValueMode()) { return value } var result = value if (result[this.propertyDefinition.keyProperty] !== undefined) { delete result[this.propertyDefinition.keyProperty] } return result } ObjectListEditor.prototype.getEmptyValue = function() { if (this.isKeyValueMode()) { return {} } else { return [] } } // // Event handlers // ObjectListEditor.prototype.registerHandlers = function() { var link = this.getLink(), $link = $(link) link.addEventListener('click', this.proxy(this.onTriggerClick)) $link.on('shown.oc.popup', this.proxy(this.onPopupShown)) $link.on('hidden.oc.popup', this.proxy(this.onPopupHidden)) } ObjectListEditor.prototype.unregisterHandlers = function() { var link = this.getLink(), $link = $(link) link.removeEventListener('click', this.proxy(this.onTriggerClick)) $link.off('shown.oc.popup', this.proxy(this.onPopupShown)) $link.off('hidden.oc.popup', this.proxy(this.onPopupHidden)) } ObjectListEditor.prototype.onTriggerClick = function(ev) { $.oc.foundation.event.stop(ev) var content = this.getPopupContent() content = content.replace('{{property}}', this.propertyDefinition.title) $(ev.target).popup({ content: content }) return false } ObjectListEditor.prototype.onPopupShown = function(ev, link, popup) { $(popup).on('submit.inspector', 'form', this.proxy(this.onSubmit)) $(popup).on('click', 'tr.rowlink', this.proxy(this.onRowClick)) $(popup).on('click.inspector', '[data-cmd]', this.proxy(this.onCommand)) this.popup = popup.get(0) this.buildPopupContents(this.popup) this.getRootSurface().popupDisplayed() } ObjectListEditor.prototype.onPopupHidden = function(ev, link, popup) { $(popup).off('.inspector', this.proxy(this.onSubmit)) $(popup).off('click', 'tr.rowlink', this.proxy(this.onRowClick)) $(popup).off('click.inspector', '[data-cmd]', this.proxy(this.onCommand)) this.disposeInspector() $.oc.foundation.controlUtils.disposeControls(this.popup) this.popup = null this.getRootSurface().popupHidden() } ObjectListEditor.prototype.onSubmit = function(ev) { this.applyDataToParentInspector() ev.preventDefault() return false } ObjectListEditor.prototype.onRowClick = function(ev) { this.selectRow(ev.currentTarget) } ObjectListEditor.prototype.onInspectorDataChange = function(property, value) { this.updateRowText(property, value) } ObjectListEditor.prototype.onCommand = function(ev) { var command = ev.currentTarget.getAttribute('data-cmd') switch (command) { case 'create-item' : this.createItem() break; case 'delete-item' : this.deleteItem() break; } } // // Disposing // ObjectListEditor.prototype.removeControls = function() { if (this.popup) { this.disposeInspector(this.popup) } } $.oc.inspector.propertyEditors.objectList = ObjectListEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.popupbase.js ================================================ /* * Base class for Inspector editors that create popups. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.base, BaseProto = Base.prototype var PopupBase = function(inspector, propertyDefinition, containerCell, group) { this.popup = null Base.call(this, inspector, propertyDefinition, containerCell, group) } PopupBase.prototype = Object.create(BaseProto) PopupBase.prototype.constructor = Base PopupBase.prototype.dispose = function() { this.unregisterHandlers() this.popup = null BaseProto.dispose.call(this) } PopupBase.prototype.build = function() { var link = document.createElement('a') $.oc.foundation.element.addClass(link, 'trigger') link.setAttribute('href', '#') this.setLinkText(link) $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell') this.containerCell.appendChild(link) } PopupBase.prototype.setLinkText = function(link, value) { } PopupBase.prototype.getPopupContent = function() { return '
    \ \ \ \
    ' } PopupBase.prototype.updateDisplayedValue = function(value) { this.setLinkText(this.getLink(), value) } PopupBase.prototype.registerHandlers = function() { var link = this.getLink(), $link = $(link) link.addEventListener('click', this.proxy(this.onTriggerClick)) $link.on('shown.oc.popup', this.proxy(this.onPopupShown)) $link.on('hidden.oc.popup', this.proxy(this.onPopupHidden)) } PopupBase.prototype.unregisterHandlers = function() { var link = this.getLink(), $link = $(link) link.removeEventListener('click', this.proxy(this.onTriggerClick)) $link.off('shown.oc.popup', this.proxy(this.onPopupShown)) $link.off('hidden.oc.popup', this.proxy(this.onPopupHidden)) } PopupBase.prototype.getLink = function() { return this.containerCell.querySelector('a.trigger') } PopupBase.prototype.configurePopup = function(popup) { } PopupBase.prototype.handleSubmit = function($form) { } PopupBase.prototype.hidePopup = function() { $(this.getLink()).popup('hide') } PopupBase.prototype.onTriggerClick = function(ev) { $.oc.foundation.event.stop(ev) var content = this.getPopupContent() content = content.replace('{{property}}', this.propertyDefinition.title) $(ev.target).popup({ content: content }) return false } PopupBase.prototype.onPopupShown = function(ev, link, popup) { $(popup).on('submit.inspector', 'form', this.proxy(this.onSubmit)) this.popup = popup.get(0) this.configurePopup(popup) this.getRootSurface().popupDisplayed() } PopupBase.prototype.onPopupHidden = function(ev, link, popup) { $(popup).off('.inspector', 'form', this.proxy(this.onSubmit)) this.popup = null this.getRootSurface().popupHidden() } PopupBase.prototype.onSubmit = function(ev) { ev.preventDefault() if (this.handleSubmit($(ev.target)) === false) { return false } this.setLinkText(this.getLink()) this.hidePopup() return false } $.oc.inspector.propertyEditors.popupBase = PopupBase }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.set.js ================================================ /* * Inspector set editor class. * * This class uses $.oc.inspector.propertyEditors.checkbox editor. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.base, BaseProto = Base.prototype var SetEditor = function(inspector, propertyDefinition, containerCell, group) { this.editors = [] this.loadedItems = null Base.call(this, inspector, propertyDefinition, containerCell, group) } SetEditor.prototype = Object.create(BaseProto) SetEditor.prototype.constructor = Base SetEditor.prototype.init = function() { this.initControlGroup() BaseProto.init.call(this) } SetEditor.prototype.dispose = function() { this.disposeEditors() this.disposeControls() this.editors = null BaseProto.dispose.call(this) } // // Building // SetEditor.prototype.build = function() { var link = document.createElement('a') $.oc.foundation.element.addClass(link, 'trigger') link.setAttribute('href', '#') this.setLinkText(link) $.oc.foundation.element.addClass(this.containerCell, 'trigger-cell') this.containerCell.appendChild(link) if (this.propertyDefinition.items !== undefined) { this.loadStaticItems() } else { this.loadDynamicItems() } } SetEditor.prototype.loadStaticItems = function() { var itemArray = [] for (var itemValue in this.propertyDefinition.items) { itemArray.push({ value: itemValue, title: this.propertyDefinition.items[itemValue] }) } for (var i = itemArray.length-1; i >=0; i--) { this.buildItemEditor(itemArray[i].value, itemArray[i].title) } } SetEditor.prototype.setLinkText = function(link, value) { var value = (value !== undefined && value !== null) ? value : this.getNormalizedValue(), text = '[ ]' if (value === undefined) { value = this.propertyDefinition.default } if (value !== undefined && value.length !== undefined && value.length > 0 && typeof value !== 'string') { var textValues = [] for (var i = 0, len = value.length; i < len; i++) { textValues.push(this.valueToText(value[i])) } text = '[' + textValues.join(', ') + ']' $.oc.foundation.element.removeClass(link, 'cell-placeholder') } else { text = this.propertyDefinition.placeholder if ((typeof text === 'string' && text.length == 0) || text === undefined) { text = '[ ]' } $.oc.foundation.element.addClass(link, 'cell-placeholder') } link.textContent = text } SetEditor.prototype.buildItemEditor = function(value, text) { var property = { title: text, itemType: 'property', groupIndex: this.group.getGroupIndex() }, newRow = this.createGroupedRow(property), currentRow = this.containerCell.parentNode, tbody = this.containerCell.parentNode.parentNode, // row / tbody cell = document.createElement('td') this.buildCheckbox(cell, value, text) newRow.appendChild(cell) tbody.insertBefore(newRow, currentRow.nextSibling) } SetEditor.prototype.buildCheckbox = function(cell, value, title) { var property = { property: value, title: title, default: this.isCheckedByDefault(value) }, editor = new $.oc.inspector.propertyEditors.checkbox(this, property, cell, this.group) this.editors.push[editor] } SetEditor.prototype.isCheckedByDefault = function(value) { if (!this.propertyDefinition.default) { return false } return this.propertyDefinition.default.indexOf(value) > -1 } // // Dynamic items // SetEditor.prototype.showLoadingIndicator = function() { $(this.getLink()).loadIndicator() } SetEditor.prototype.hideLoadingIndicator = function() { if (this.isDisposed()) { return } var $link = $(this.getLink()) $link.loadIndicator('hide') $link.loadIndicator('destroy') } SetEditor.prototype.loadDynamicItems = function() { var link = this.getLink(), data = this.inspector.getValues(), $form = $(link).closest('form'); $.oc.foundation.element.addClass(link, 'loading-indicator-container size-small'); this.showLoadingIndicator(); data['inspectorProperty'] = this.getPropertyPath(); data['inspectorClassName'] = this.inspector.options.inspectorClass; $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), { data: data, progressBar: false }) .done(this.proxy(this.itemsRequestDone)) .always(this.proxy(this.hideLoadingIndicator)); } SetEditor.prototype.itemsRequestDone = function(data, currentValue, initialization) { if (this.isDisposed()) { // Handle the case when the asynchronous request finishes after // the editor is disposed return } this.loadedItems = {} if (data.options) { for (var i = data.options.length-1; i >= 0; i--) { this.buildItemEditor(data.options[i].value, data.options[i].title) this.loadedItems[data.options[i].value] = data.options[i].title } } this.setLinkText(this.getLink()) } // // Helpers // SetEditor.prototype.getLink = function() { return this.containerCell.querySelector('a.trigger') } SetEditor.prototype.getItemsSource = function() { if (this.propertyDefinition.items !== undefined) { return this.propertyDefinition.items } return this.loadedItems } SetEditor.prototype.valueToText = function(value) { var source = this.getItemsSource() if (!source) { return value } for (var itemValue in source) { if (itemValue == value) { return source[itemValue] } } return value } /* * Removes items that don't exist in the defined items from * the value. */ SetEditor.prototype.cleanUpValue = function(value) { if (!value) { return value } var result = [], source = this.getItemsSource() for (var i = 0, len = value.length; i < len; i++) { var currentValue = value[i] if (source[currentValue] !== undefined) { result.push(currentValue) } } return result } SetEditor.prototype.getNormalizedValue = function() { var value = this.inspector.getPropertyValue(this.propertyDefinition.property); if (value === null) { value = undefined; } if (value === undefined) { return value; } if (value.length === undefined || typeof value === 'string') { return undefined; } return value; } // // Editor API methods // SetEditor.prototype.supportsExternalParameterEditor = function() { return false } SetEditor.prototype.isGroupedEditor = function() { return true } // // Inspector API methods // // This editor creates checkbox editor and acts as a container Inspector // for them. The methods in this section emulate and proxy some functionality // of the Inspector. // SetEditor.prototype.getPropertyValue = function(checkboxValue) { // When a checkbox requests the property value, we return // TRUE if the checkbox value is listed in the current values of // the set. // For example, the available set items are [create, update], the // current set value is [create] and checkboxValue is "create". // The result of the method will be TRUE. var value = this.getNormalizedValue(); if (value === undefined) { return this.isCheckedByDefault(checkboxValue); } if (!value) { return false; } return value.indexOf(checkboxValue) > -1; } SetEditor.prototype.setPropertyValue = function(checkboxValue, isChecked) { // In this method the Set Editor mimics the Surface. // It acts as a parent surface for the children checkboxes, // watching changes in them and updating the link text. var currentValue = this.getNormalizedValue() if (currentValue === undefined) { currentValue = this.propertyDefinition.default } if (!currentValue) { currentValue = [] } var resultValue = [], items = this.getItemsSource() for (var itemValue in items) { if (itemValue !== checkboxValue) { if (currentValue.indexOf(itemValue) !== -1) { resultValue.push(itemValue) } } else { if (isChecked) { resultValue.push(itemValue); } } } this.inspector.setPropertyValue(this.propertyDefinition.property, this.cleanUpValue(resultValue)); this.setLinkText(this.getLink()); } SetEditor.prototype.generateSequencedId = function() { return this.inspector.generateSequencedId() } // // Disposing // SetEditor.prototype.disposeEditors = function() { for (var i = 0, len = this.editors.length; i < len; i++) { var editor = this.editors[i] editor.dispose() } } SetEditor.prototype.disposeControls = function() { var link = this.getLink() if (this.propertyDefinition.items === undefined) { $(link).loadIndicator('destroy') } link.parentNode.removeChild(link) } $.oc.inspector.propertyEditors.set = SetEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.string.js ================================================ /* * Inspector string editor class. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.base, BaseProto = Base.prototype var StringEditor = function(inspector, propertyDefinition, containerCell, group) { Base.call(this, inspector, propertyDefinition, containerCell, group) } StringEditor.prototype = Object.create(BaseProto) StringEditor.prototype.constructor = Base StringEditor.prototype.dispose = function() { this.unregisterHandlers() BaseProto.dispose.call(this) } StringEditor.prototype.build = function() { var editor = document.createElement('input'), placeholder = this.propertyDefinition.placeholder !== undefined ? this.propertyDefinition.placeholder : '', value = this.inspector.getPropertyValue(this.propertyDefinition.property) editor.setAttribute('type', 'text') editor.setAttribute('class', 'string-editor') editor.setAttribute('placeholder', placeholder) if (value === undefined) { value = this.propertyDefinition.default } if (value === undefined) { value = '' } editor.value = value $.oc.foundation.element.addClass(this.containerCell, 'text') this.containerCell.appendChild(editor) } StringEditor.prototype.updateDisplayedValue = function(value) { this.getInput().value = value } StringEditor.prototype.getInput = function() { return this.containerCell.querySelector('input'); } StringEditor.prototype.focus = function() { this.getInput().focus({ preventScroll: true }); this.onInputFocus(); } StringEditor.prototype.registerHandlers = function() { var input = this.getInput(); input.addEventListener('focus', this.proxy(this.onInputFocus)); input.addEventListener('keyup', this.proxy(this.onInputKeyUp)); } StringEditor.prototype.unregisterHandlers = function() { var input = this.getInput(); input.removeEventListener('focus', this.proxy(this.onInputFocus)); input.removeEventListener('keyup', this.proxy(this.onInputKeyUp)); } StringEditor.prototype.onInputFocus = function(ev) { this.inspector.makeCellActive(this.containerCell); } StringEditor.prototype.onInputKeyUp = function() { var value = $.trim(this.getInput().value); this.inspector.setPropertyValue(this.propertyDefinition.property, value); } StringEditor.prototype.onExternalPropertyEditorHidden = function() { this.focus() } $.oc.inspector.propertyEditors.string = StringEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.stringlist.js ================================================ /* * Inspector string list editor class. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.text, BaseProto = Base.prototype var StringListEditor = function(inspector, propertyDefinition, containerCell, group) { Base.call(this, inspector, propertyDefinition, containerCell, group) } StringListEditor.prototype = Object.create(BaseProto) StringListEditor.prototype.constructor = Base StringListEditor.prototype.setLinkText = function(link, value) { var value = value !== undefined ? value : this.inspector.getPropertyValue(this.propertyDefinition.property) if (value === undefined) { value = this.propertyDefinition.default } this.checkValueType(value) if (!value) { value = this.propertyDefinition.placeholder $.oc.foundation.element.addClass(link, 'cell-placeholder') if (!value) { value = '[]' } link.textContent = value } else { $.oc.foundation.element.removeClass(link, 'cell-placeholder') link.textContent = '[' + value.join(', ') + ']' } } StringListEditor.prototype.checkValueType = function(value) { if (value && Object.prototype.toString.call(value) !== '[object Array]') { this.throwError('The string list value should be an array.') } } StringListEditor.prototype.configurePopup = function(popup) { var $textarea = $(popup).find('textarea'), value = this.inspector.getPropertyValue(this.propertyDefinition.property) if (this.propertyDefinition.placeholder) { $textarea.attr('placeholder', this.propertyDefinition.placeholder) } if (value === undefined) { value = this.propertyDefinition.default } this.checkValueType(value) if (value && value.length) { $textarea.val(value.join('\n')) } $textarea.focus() this.configureComment(popup) } StringListEditor.prototype.handleSubmit = function($form) { var $textarea = $form.find('textarea'), link = this.getLink(), value = $.trim($textarea.val()), arrayValue = [], resultValue = [] if (value.length) { value = value.replace(/\r\n/g, '\n') arrayValue = value.split('\n') for (var i = 0, len = arrayValue.length; i < len; i++) { var currentValue = $.trim(arrayValue[i]) if (currentValue.length > 0) { resultValue.push(currentValue) } } } this.inspector.setPropertyValue(this.propertyDefinition.property, resultValue) } $.oc.inspector.propertyEditors.stringList = StringListEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.stringlistautocomplete.js ================================================ /* * Inspector string list with autocompletion editor class. * * TODO: validation is not implemented in this editor. See the Dictionary editor for reference. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.popupBase, BaseProto = Base.prototype var StringListAutocomplete = function(inspector, propertyDefinition, containerCell, group) { this.items = null Base.call(this, inspector, propertyDefinition, containerCell, group) } StringListAutocomplete.prototype = Object.create(BaseProto) StringListAutocomplete.prototype.constructor = Base StringListAutocomplete.prototype.dispose = function() { BaseProto.dispose.call(this) } StringListAutocomplete.prototype.init = function() { BaseProto.init.call(this) } StringListAutocomplete.prototype.supportsExternalParameterEditor = function() { return false } StringListAutocomplete.prototype.setLinkText = function(link, value) { var value = value !== undefined ? value : this.inspector.getPropertyValue(this.propertyDefinition.property) if (value === undefined) { value = this.propertyDefinition.default } this.checkValueType(value) if (!value) { value = this.propertyDefinition.placeholder $.oc.foundation.element.addClass(link, 'cell-placeholder') if (!value) { value = '[]' } link.textContent = value } else { $.oc.foundation.element.removeClass(link, 'cell-placeholder') link.textContent = '[' + value.join(', ') + ']' } } StringListAutocomplete.prototype.checkValueType = function(value) { if (value && Object.prototype.toString.call(value) !== '[object Array]') { this.throwError('The string list value should be an array.') } } // // Popup editor methods // StringListAutocomplete.prototype.getPopupContent = function() { return '
    \ \ \ \
    ' } StringListAutocomplete.prototype.configurePopup = function(popup) { this.initAutocomplete() this.buildItemsTable(popup.get(0)) this.focusFirstInput() } StringListAutocomplete.prototype.handleSubmit = function($form) { return this.applyValues() } // // Building and row management // StringListAutocomplete.prototype.buildItemsTable = function(popup) { var table = popup.querySelector('table.inspector-dictionary-table'), tbody = document.createElement('tbody'), items = this.inspector.getPropertyValue(this.propertyDefinition.property) if (items === undefined) { items = this.propertyDefinition.default } if (items === undefined || this.getValueKeys(items).length === 0) { var row = this.buildEmptyRow() tbody.appendChild(row) } else { for (var key in items) { var row = this.buildTableRow(items[key]) tbody.appendChild(row) } } table.appendChild(tbody) this.updateScrollpads() } StringListAutocomplete.prototype.buildTableRow = function(value) { var row = document.createElement('tr'), valueCell = document.createElement('td') this.createInput(valueCell, value) row.appendChild(valueCell) return row } StringListAutocomplete.prototype.buildEmptyRow = function() { return this.buildTableRow(null) } StringListAutocomplete.prototype.createInput = function(container, value) { var input = document.createElement('input'), controlContainer = document.createElement('div') input.setAttribute('type', 'text') input.setAttribute('class', 'form-control') input.value = value controlContainer.appendChild(input) container.appendChild(controlContainer) } StringListAutocomplete.prototype.setActiveCell = function(input) { var activeCells = this.popup.querySelectorAll('td.active') for (var i = activeCells.length-1; i >= 0; i--) { $.oc.foundation.element.removeClass(activeCells[i], 'active') } var activeCell = input.parentNode.parentNode // input / div / td $.oc.foundation.element.addClass(activeCell, 'active') this.buildAutoComplete(input) } StringListAutocomplete.prototype.createItem = function() { var activeRow = this.getActiveRow(), newRow = this.buildEmptyRow(), tbody = this.getTableBody(), nextSibling = activeRow ? activeRow.nextElementSibling : null tbody.insertBefore(newRow, nextSibling) this.focusAndMakeActive(newRow.querySelector('input')) this.updateScrollpads() } StringListAutocomplete.prototype.deleteItem = function() { var activeRow = this.getActiveRow(), tbody = this.getTableBody() if (!activeRow) { return } var nextRow = activeRow.nextElementSibling, prevRow = activeRow.previousElementSibling, input = this.getRowInputByIndex(activeRow, 0) if (input) { this.removeAutocomplete(input) } tbody.removeChild(activeRow) var newSelectedRow = nextRow ? nextRow : prevRow if (!newSelectedRow) { newSelectedRow = this.buildEmptyRow() tbody.appendChild(newSelectedRow) } this.focusAndMakeActive(newSelectedRow.querySelector('input')) this.updateScrollpads() } StringListAutocomplete.prototype.applyValues = function() { var tbody = this.getTableBody(), dataRows = tbody.querySelectorAll('tr'), link = this.getLink(), result = [] for (var i = 0, len = dataRows.length; i < len; i++) { var dataRow = dataRows[i], valueInput = this.getRowInputByIndex(dataRow, 0), value = $.trim(valueInput.value) if (value.length == 0) { continue } result.push(value) } this.inspector.setPropertyValue(this.propertyDefinition.property, result) this.setLinkText(link, result) } // // Helpers // StringListAutocomplete.prototype.getValueKeys = function(value) { var result = [] for (var key in value) { result.push(key) } return result } StringListAutocomplete.prototype.getActiveRow = function() { var activeCell = this.popup.querySelector('td.active') if (!activeCell) { return null } return activeCell.parentNode } StringListAutocomplete.prototype.getTableBody = function() { return this.popup.querySelector('table.inspector-dictionary-table tbody') } StringListAutocomplete.prototype.updateScrollpads = function() { $('.control-scrollpad', this.popup).scrollpad('update') } StringListAutocomplete.prototype.focusFirstInput = function() { var input = this.popup.querySelector('td input') if (input) { input.focus() this.setActiveCell(input) } } StringListAutocomplete.prototype.getEditorCell = function(cell) { return cell.parentNode.parentNode // cell / div / td } StringListAutocomplete.prototype.getEditorRow = function(cell) { return cell.parentNode.parentNode.parentNode // cell / div / td / tr } StringListAutocomplete.prototype.focusAndMakeActive = function(input) { input.focus() this.setActiveCell(input) } StringListAutocomplete.prototype.getRowInputByIndex = function(row, index) { return row.cells[index].querySelector('input') } // // Navigation // StringListAutocomplete.prototype.navigateDown = function(ev) { var cell = this.getEditorCell(ev.currentTarget), row = this.getEditorRow(ev.currentTarget), nextRow = row.nextElementSibling if (!nextRow) { return } var newActiveEditor = nextRow.cells[cell.cellIndex].querySelector('input') this.focusAndMakeActive(newActiveEditor) } StringListAutocomplete.prototype.navigateUp = function(ev) { var cell = this.getEditorCell(ev.currentTarget), row = this.getEditorRow(ev.currentTarget), prevRow = row.previousElementSibling if (!prevRow) { return } var newActiveEditor = prevRow.cells[cell.cellIndex].querySelector('input') this.focusAndMakeActive(newActiveEditor) } // // Autocomplete // StringListAutocomplete.prototype.initAutocomplete = function() { if (this.propertyDefinition.items !== undefined) { this.items = this.prepareItems(this.propertyDefinition.items) this.initializeAutocompleteForCurrentInput() } else { this.loadDynamicItems() } } StringListAutocomplete.prototype.initializeAutocompleteForCurrentInput = function() { var activeElement = document.activeElement if (!activeElement) { return } var inputs = this.popup.querySelectorAll('td input.form-control') if (!inputs) { return } for (var i=inputs.length-1; i>=0; i--) { if (inputs[i] === activeElement) { this.buildAutoComplete(inputs[i]) return } } } StringListAutocomplete.prototype.buildAutoComplete = function(input) { if (this.items === null) { return } $(input).autocomplete({ source: this.items, matchWidth: true, menu: '', bodyContainer: true }) } StringListAutocomplete.prototype.removeAutocomplete = function(input) { var $input = $(input) if (!$input.data('autocomplete')) { return } $input.autocomplete('destroy') } StringListAutocomplete.prototype.prepareItems = function(items) { var result = {} if (Array.isArray(items)) { for (var i = 0, len = items.length; i < len; i++) { result[items[i]] = items[i] } } else { result = items } return result } StringListAutocomplete.prototype.loadDynamicItems = function() { if (this.isDisposed()) { return; } var data = this.getRootSurface().getValues(), $form = $(this.popup).find('form'); if (this.triggerGetItems(data) === false) { return; } data['inspectorProperty'] = this.getPropertyPath(); data['inspectorClassName'] = this.inspector.options.inspectorClass; $form.request(this.inspector.getEventHandler('onInspectableGetOptions'), { data: data, progressBar: false }) .done(this.proxy(this.itemsRequestDone)); } StringListAutocomplete.prototype.triggerGetItems = function(values) { var $inspectable = this.getInspectableElement() if (!$inspectable) { return true } var itemsEvent = $.Event('autocompleteitems.oc.inspector') $inspectable.trigger(itemsEvent, [{ values: values, callback: this.proxy(this.itemsRequestDone), property: this.inspector.getPropertyPath(this.propertyDefinition.property), propertyDefinition: this.propertyDefinition }]) if (itemsEvent.isDefaultPrevented()) { return false } return true } StringListAutocomplete.prototype.itemsRequestDone = function(data) { if (this.isDisposed()) { // Handle the case when the asynchronous request finishes after // the editor is disposed return } var loadedItems = {} if (data.options) { for (var i = data.options.length-1; i >= 0; i--) { loadedItems[data.options[i].value] = data.options[i].title } } this.items = this.prepareItems(loadedItems) this.initializeAutocompleteForCurrentInput() } StringListAutocomplete.prototype.removeAutocompleteFromAllRows = function() { var inputs = this.popup.querySelector('td input.form-control') for (var i=inputs.length-1; i>=0; i--) { this.removeAutocomplete(inputs[i]) } } // // Event handlers // StringListAutocomplete.prototype.onPopupShown = function(ev, link, popup) { BaseProto.onPopupShown.call(this,ev, link, popup) popup.on('focus.inspector', 'td input', this.proxy(this.onFocus)) popup.on('blur.inspector', 'td input', this.proxy(this.onBlur)) popup.on('keydown.inspector', 'td input', this.proxy(this.onKeyDown)) popup.on('click.inspector', '[data-cmd]', this.proxy(this.onCommand)) } StringListAutocomplete.prototype.onPopupHidden = function(ev, link, popup) { popup.off('.inspector', 'td input') popup.off('.inspector', '[data-cmd]', this.proxy(this.onCommand)) this.removeAutocompleteFromAllRows() this.items = null BaseProto.onPopupHidden.call(this, ev, link, popup) } StringListAutocomplete.prototype.onFocus = function(ev) { this.setActiveCell(ev.currentTarget) } StringListAutocomplete.prototype.onBlur = function(ev) { if ($(ev.relatedTarget).closest('ul.inspector-autocomplete').length > 0) { // Do not close the autocomplete results if a drop-down // menu item was clicked return } this.removeAutocomplete(ev.currentTarget) } StringListAutocomplete.prototype.onCommand = function(ev) { var command = ev.currentTarget.getAttribute('data-cmd') switch (command) { case 'create-item' : this.createItem() break; case 'delete-item' : this.deleteItem() break; } } StringListAutocomplete.prototype.onKeyDown = function(ev) { if (ev.key === 'ArrowDown') { return this.navigateDown(ev) } else if (ev.key === 'ArrowUp') { return this.navigateUp(ev) } } $.oc.inspector.propertyEditors.stringListAutocomplete = StringListAutocomplete }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.editor.text.js ================================================ /* * Inspector text editor class. */ +function ($) { "use strict"; var Base = $.oc.inspector.propertyEditors.popupBase, BaseProto = Base.prototype var TextEditor = function(inspector, propertyDefinition, containerCell, group) { Base.call(this, inspector, propertyDefinition, containerCell, group) } TextEditor.prototype = Object.create(BaseProto) TextEditor.prototype.constructor = Base TextEditor.prototype.setLinkText = function(link, value) { var value = value !== undefined ? value : this.inspector.getPropertyValue(this.propertyDefinition.property) if (value === undefined) { value = this.propertyDefinition.default } if (!value) { value = this.propertyDefinition.placeholder $.oc.foundation.element.addClass(link, 'cell-placeholder') } else { $.oc.foundation.element.removeClass(link, 'cell-placeholder') } if (typeof value === 'string') { value = value.replace(/(?:\r\n|\r|\n)/g, ' '); value = $.trim(value) value = value.substring(0, 300); } link.textContent = value } TextEditor.prototype.getPopupContent = function() { return '
    \ \ \ \
    ' } TextEditor.prototype.configureComment = function(popup) { if (!this.propertyDefinition.description) { return } var descriptionElement = $(popup).find('p.inspector-field-comment') descriptionElement.text(this.propertyDefinition.description) } TextEditor.prototype.configurePopup = function(popup) { var $textarea = $(popup).find('textarea'), value = this.inspector.getPropertyValue(this.propertyDefinition.property) if (this.propertyDefinition.placeholder) { $textarea.attr('placeholder', this.propertyDefinition.placeholder) } if (value === undefined) { value = this.propertyDefinition.default } $textarea.val(value) $textarea.focus() this.configureComment(popup) } TextEditor.prototype.handleSubmit = function($form) { var $textarea = $form.find('textarea'), link = this.getLink(), value = $.trim($textarea.val()) this.inspector.setPropertyValue(this.propertyDefinition.property, value) } $.oc.inspector.propertyEditors.text = TextEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.engine.js ================================================ /* * Inspector engine helpers. * * The helpers are used mostly by the Inspector Surface. * */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc === undefined) $.oc = {} if ($.oc.inspector === undefined) $.oc.inspector = {} $.oc.inspector.engine = {} // CLASS DEFINITION // ============================ function findGroup(group, properties) { for (var i = 0, len = properties.length; i < len; i++) { var property = properties[i] if (property.itemType !== undefined && property.itemType == 'group' && property.title == group) { return property } } return null } $.oc.inspector.engine.processPropertyGroups = function(properties) { var fields = [], result = { hasGroups: false, properties: [] }, groupIndex = 0 for (var i = 0, len = properties.length; i < len; i++) { var property = properties[i] if (property['sortOrder'] === undefined) { property['sortOrder'] = (i+1)*20 } } properties.sort(function(a, b){ return a['sortOrder'] - b['sortOrder'] }) for (var i = 0, len = properties.length; i < len; i++) { var property = properties[i] property.itemType = 'property' if (property.group === undefined) { fields.push(property) } else { var group = findGroup(property.group, fields) if (!group) { group = { itemType: 'group', title: property.group, properties: [], groupIndex: groupIndex } groupIndex++ fields.push(group) } property.groupIndex = group.groupIndex group.properties.push(property) } } for (var i = 0, len = fields.length; i < len; i++) { var property = fields[i] result.properties.push(property) if (property.itemType == 'group') { result.hasGroups = true for (var j = 0, propertiesLen = property.properties.length; j < propertiesLen; j++) { result.properties.push(property.properties[j]) } delete property.properties } } return result } }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.externalparametereditor.js ================================================ /* * External parameter editor for Inspector. * * The external parameter editor allows to use URL and * other external parameters as values for the inspectable * properties. * */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc === undefined) $.oc = {} if ($.oc.inspector === undefined) $.oc.inspector = {} // CLASS DEFINITION // ============================ var Base = $.oc.foundation.base, BaseProto = Base.prototype var ExternalParameterEditor = function(inspector, propertyDefinition, containerCell, initialValue) { this.inspector = inspector this.propertyDefinition = propertyDefinition this.containerCell = containerCell this.initialValue = initialValue Base.call(this) this.init() } ExternalParameterEditor.prototype = Object.create(BaseProto) ExternalParameterEditor.prototype.constructor = Base ExternalParameterEditor.prototype.dispose = function() { this.disposeControls() this.unregisterHandlers() this.inspector = null this.propertyDefinition = null this.containerCell = null this.initialValue = null BaseProto.dispose.call(this) } ExternalParameterEditor.prototype.init = function() { this.tooltipText = 'Click to enter the external parameter name to load the property value from' this.build() this.registerHandlers() this.setInitialValue() } /** * Builds the external parameter editor markup: * *
    * <-- original property editing input/markup *
    *
    * * * * *
    *
    *
    */ ExternalParameterEditor.prototype.build = function() { var container = document.createElement('div'), editor = document.createElement('div'), controls = document.createElement('div'), input = document.createElement('input'), link = document.createElement('a'), icon = document.createElement('i') container.setAttribute('class', 'external-param-editor-container') editor.setAttribute('class', 'external-editor') controls.setAttribute('class', 'controls') input.setAttribute('type', 'text') input.setAttribute('tabindex', '-1') link.setAttribute('href', '#') link.setAttribute('class', 'external-editor-link') link.setAttribute('tabindex', '-1') link.setAttribute('title', this.tooltipText) $(link).tooltip({'container': 'body', delay: 500}) icon.setAttribute('class', 'oc-icon-terminal') link.appendChild(icon) controls.appendChild(input) controls.appendChild(link) editor.appendChild(controls) while (this.containerCell.firstChild) { var child = this.containerCell.firstChild container.appendChild(child) } container.appendChild(editor) this.containerCell.appendChild(container) } ExternalParameterEditor.prototype.setInitialValue = function() { if (!this.initialValue) { return } if (typeof this.initialValue !== 'string') { return } var matches = [] if (matches = this.initialValue.match(/^\{\{([^\}]+)\}\}$/)) { var value = $.trim(matches[1]) if (value.length > 0) { this.showEditor(true) this.getInput().value = value this.inspector.setPropertyValue(this.propertyDefinition.property, null, true, true) } } } ExternalParameterEditor.prototype.showEditor = function(building) { var editor = this.getEditor(), input = this.getInput(), container = this.getContainer(), link = this.getLink() var position = $(editor).position() if (!building) { editor.style.right = 0 editor.style.left = position.left + 'px' } else { editor.style.right = 0 } setTimeout(this.proxy(this.repositionEditor), 0) $.oc.foundation.element.addClass(container, 'editor-visible') link.setAttribute('data-original-title', 'Click to enter the property value') this.toggleEditorVisibility(false) input.setAttribute('tabindex', 0) if (!building) { input.focus() } } ExternalParameterEditor.prototype.repositionEditor = function() { this.getEditor().style.left = 0; this.containerCell.scrollTop = 0; } ExternalParameterEditor.prototype.hideEditor = function() { var editor = this.getEditor(), container = this.getContainer(); editor.style.left = 'auto'; editor.style.right = '30px'; $.oc.foundation.element.removeClass(container, 'editor-visible'); $.oc.foundation.element.removeClass(this.containerCell, 'active'); var propertyEditor = this.inspector.findPropertyEditor(this.propertyDefinition.property); if (propertyEditor) { propertyEditor.onExternalPropertyEditorHidden(); } } ExternalParameterEditor.prototype.toggleEditor = function(ev) { $.oc.foundation.event.stop(ev); var link = this.getLink(), container = this.getContainer(), editor = this.getEditor(); $(link).tooltip('hide'); if (!this.isEditorVisible()) { this.showEditor(); return; } var left = container.offsetWidth; editor.style.left = left + 'px'; link.setAttribute('data-original-title', this.tooltipText); this.getInput().setAttribute('tabindex', '-1'); this.toggleEditorVisibility(true) setTimeout(this.proxy(this.hideEditor), 200) } ExternalParameterEditor.prototype.toggleEditorVisibility = function(show) { var container = this.getContainer(), children = container.children, height = 0; if (!show) { height = this.containerCell.getAttribute('data-inspector-cell-height') if (!height) { height = $(this.containerCell).height() this.containerCell.setAttribute('data-inspector-cell-height', height) } } // Fixed value instead of trying to get the container cell height. // If the editor is contained in initially hidden editor (collapsed group), // the container cell will be unknown. height = Math.max(height, 19); for (var i = 0, len = children.length; i < len; i++) { var element = children[i] if ($.oc.foundation.element.hasClass(element, 'external-editor')) { continue } if (show) { $.oc.foundation.element.removeClass(element, 'oc-hide'); } else { container.style.height = height + 'px' $.oc.foundation.element.addClass(element, 'oc-hide'); } } } ExternalParameterEditor.prototype.focus = function() { this.getInput().focus({ preventScroll: true }); } ExternalParameterEditor.prototype.validate = function(silentMode) { var value = $.trim(this.getValue()); if (value.length === 0) { if (!silentMode) { $.oc.flashMsg({text: 'Please enter the external parameter name.', 'class': 'error', 'interval': 5}); this.focus(); } return false; } return true; } // // Event handlers // ExternalParameterEditor.prototype.registerHandlers = function() { var input = this.getInput(); this.getLink().addEventListener('click', this.proxy(this.toggleEditor)); input.addEventListener('focus', this.proxy(this.onInputFocus)); input.addEventListener('change', this.proxy(this.onInputChange)); } ExternalParameterEditor.prototype.onInputFocus = function() { this.inspector.makeCellActive(this.containerCell); } ExternalParameterEditor.prototype.onInputChange = function() { this.inspector.markPropertyChanged(this.propertyDefinition.property, true); } // // Disposing // ExternalParameterEditor.prototype.unregisterHandlers = function() { var input = this.getInput() this.getLink().removeEventListener('click', this.proxy(this.toggleEditor)) input.removeEventListener('focus', this.proxy(this.onInputFocus)) input.removeEventListener('change', this.proxy(this.onInputChange)) } ExternalParameterEditor.prototype.disposeControls = function() { $(this.getLink()).tooltip('dispose'); } // // Helpers // ExternalParameterEditor.prototype.getInput = function() { return this.containerCell.querySelector('div.external-editor input') } ExternalParameterEditor.prototype.getValue = function() { return this.getInput().value } ExternalParameterEditor.prototype.getLink = function() { return this.containerCell.querySelector('a.external-editor-link') } ExternalParameterEditor.prototype.getContainer = function() { return this.containerCell.querySelector('div.external-param-editor-container') } ExternalParameterEditor.prototype.getEditor = function() { return this.containerCell.querySelector('div.external-editor') } ExternalParameterEditor.prototype.getPropertyName = function() { return this.propertyDefinition.property } ExternalParameterEditor.prototype.isEditorVisible = function() { return $.oc.foundation.element.hasClass(this.getContainer(), 'editor-visible') } $.oc.inspector.externalParameterEditor = ExternalParameterEditor }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.groups.js ================================================ /* * Inspector grouping support. * */ +function ($) { "use strict"; // GROUP MANAGER CLASS // ============================ var GroupManager = function(controlId) { this.controlId = controlId this.rootGroup = null this.cachedGroupStatuses = null } GroupManager.prototype.createGroup = function(groupId, parentGroup) { var group = new Group(groupId) if (parentGroup) { parentGroup.groups.push(group) group.parentGroup = parentGroup // Circular reference, but memory leaks are not noticed } else { this.rootGroup = group } return group } GroupManager.prototype.getGroupIndex = function(group) { return group.getGroupIndex() } GroupManager.prototype.isParentGroupExpanded = function(group) { if (!group.parentGroup) { // The root group is always expanded return true } return this.isGroupExpanded(group.parentGroup) } GroupManager.prototype.isGroupExpanded = function(group) { if (!group.parentGroup) { // The root group is always expanded return true } var groupIndex = this.getGroupIndex(group), statuses = this.readGroupStatuses() if (statuses[groupIndex] !== undefined) { return statuses[groupIndex] } return false } GroupManager.prototype.setGroupStatus = function(groupIndex, expanded) { var statuses = this.readGroupStatuses() statuses[groupIndex] = expanded this.writeGroupStatuses(statuses) } GroupManager.prototype.readGroupStatuses = function() { if (this.cachedGroupStatuses !== null) { return this.cachedGroupStatuses } var statuses = getInspectorGroupStatuses() if (statuses[this.controlId] !== undefined) { this.cachedGroupStatuses = statuses[this.controlId] } else { this.cachedGroupStatuses = {} } return this.cachedGroupStatuses } GroupManager.prototype.writeGroupStatuses = function(updatedStatuses) { var statuses = getInspectorGroupStatuses() statuses[this.controlId] = updatedStatuses setInspectorGroupStatuses(statuses) this.cachedGroupStatuses = updatedStatuses } GroupManager.prototype.findGroupByIndex = function(index) { return this.rootGroup.findGroupByIndex(index) } GroupManager.prototype.findGroupRows = function(table, index, ignoreCollapsedSubgroups) { var group = this.findGroupByIndex(index) if (!group) { throw new Error('Cannot find the requested row group.') } return group.findGroupRows(table, ignoreCollapsedSubgroups, this) } GroupManager.prototype.markGroupRowInvalid = function(group, table) { var currentGroup = group while (currentGroup) { var row = currentGroup.findGroupRow(table) if (row) { $.oc.foundation.element.addClass(row, 'invalid') } currentGroup = currentGroup.parentGroup } } GroupManager.prototype.unmarkInvalidGroups = function(table) { var rows = table.querySelectorAll('tr.invalid') for (var i = rows.length-1; i >= 0; i--) { $.oc.foundation.element.removeClass(rows[i], 'invalid') } } GroupManager.prototype.isRowVisible = function(table, rowGroupIndex) { var group = this.findGroupByIndex(index) if (!group) { throw new Error('Cannot find the requested row group.') } var current = group while (current) { if (!this.isGroupExpanded(current)) { return false } current = current.parentGroup } return true } // // Internal functions // function getInspectorGroupStatuses() { var statuses = document.body.getAttribute('data-inspector-group-statuses') if (statuses !== null) { return JSON.parse(statuses) } return {} } function setInspectorGroupStatuses(statuses) { document.body.setAttribute('data-inspector-group-statuses', JSON.stringify(statuses)) } // GROUP CLASS // ============================ var Group = function(groupId) { this.groupId = groupId this.parentGroup = null this.groupIndex = null this.groups = [] } Group.prototype.getGroupIndex = function() { if (this.groupIndex !== null) { return this.groupIndex } var result = '', current = this while (current) { if (result.length > 0) { result = current.groupId + '-' + result } else { result = String(current.groupId) } current = current.parentGroup } this.groupIndex = result return result } Group.prototype.findGroupByIndex = function(index) { if (this.getGroupIndex() == index) { return this } for (var i = this.groups.length-1; i >= 0; i--) { var groupResult = this.groups[i].findGroupByIndex(index) if (groupResult !== null) { return groupResult } } return null } Group.prototype.getLevel = function() { var current = this, level = -1 while (current) { level++ current = current.parentGroup } return level } Group.prototype.getGroupAndAllParents = function() { var current = this, result = [] while (current) { result.push(current) current = current.parentGroup } return result } Group.prototype.findGroupRows = function(table, ignoreCollapsedSubgroups, groupManager) { var groupIndex = this.getGroupIndex(), rows = table.querySelectorAll('tr[data-parent-group-index="'+groupIndex+'"]'), result = Array.prototype.slice.call(rows) // Convert node list to array for (var i = 0, len = this.groups.length; i < len; i++) { var subgroup = this.groups[i] if (ignoreCollapsedSubgroups && !groupManager.isGroupExpanded(subgroup)) { continue } var subgroupRows = subgroup.findGroupRows(table, ignoreCollapsedSubgroups, groupManager) for (var j = 0, subgroupLen = subgroupRows.length; j < subgroupLen; j++) { result.push(subgroupRows[j]) } } return result } Group.prototype.findGroupRow = function(table) { return table.querySelector('tr[data-group-index="'+this.groupIndex+'"]') } $.oc.inspector.groupManager = GroupManager }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.helpers.js ================================================ /* * Inspector helper functions. * */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc === undefined) $.oc = {} if ($.oc.inspector === undefined) $.oc.inspector = {} $.oc.inspector.helpers = {} $.oc.inspector.helpers.generateElementUniqueId = function(element) { if (element.hasAttribute('data-inspector-id')) { return element.getAttribute('data-inspector-id'); } var id = $.oc.inspector.helpers.generateUniqueId(); element.setAttribute('data-inspector-id', id); return id; } $.oc.inspector.helpers.generateUniqueId = function() { return "inspectorid-" + Math.floor(Math.random() * new Date().getTime()); } $.oc.inspector.helpers.getEventHandler = function(element, handler) { if (element instanceof jQuery){ element = element.get(0); } var handlerAlias = element.dataset.inspectorHandlerAlias; if (handlerAlias) { return handlerAlias + '::' + handler; } return handler; } }(window.jQuery) ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.less ================================================ // // Inspector // -------------------------------------------------- @color-inspector-bg: @input-bg; @color-inspector-color: @primary-color; @color-inspector-border: @primary-border; @color-inspector-label-bg: @input-bg; @color-inspector-value-bg: @input-bg; @color-inspector-value-color: @input-color; @color-inspector-active-bg: @input-bg; @color-inspector-changed: #c03f31; // // Inspector // -------------------------------------------------- .inspector-autocomplete-list() { background: @dropdown-bg; font-size: 12px; z-index: @zindex-inspector; li a { padding: 5px 12px; white-space: normal; word-wrap: break-word; } } .inspector-fields { min-width: 220px; border-collapse: collapse; width: 100%; table-layout: fixed; .border-bottom-radius(2px); td, th { padding: 5px 12px; font-size: 12px; border-bottom: 1px solid @color-inspector-border; text-align: left; } th { color: @color-inspector-color; width: 45%; } td { color: @color-inspector-value-color; width: 55%; } tr:last-child { td, th { border-bottom: none; } td { &, input[type=text] { border-radius: 0 0 2px 0; } } } tr.group { user-select: none; th { // background: @tertiary-bg; font-weight: 600; cursor: pointer; } } tr.invalid th { color: #c03f31!important; } tr.control-group { user-select: none; th, td { cursor: pointer; } } tr { &.collapsed { display: none; } &.expanded { display: table-row; } } &.has-groups { th { padding-left: 20px; } tr.grouped th { padding-left: 35px; } } &:not(:hover) td { border-left-color: transparent; } th { background: @color-inspector-label-bg; } td { font-weight: 400; border-left: 1px solid @color-inspector-border; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; background: @color-inspector-value-bg; transition: border-left-color 0.35s; &.text { input[type=text] { background: @color-inspector-value-bg; color: @color-inspector-value-color; text-overflow: ellipsis; &::placeholder { font-weight: normal!important; color: #b5babd; } } &.active { background: @color-inspector-active-bg; } } &.autocomplete { padding: 0; position: relative; overflow: visible; .autocomplete-container { input[type=text] { padding: 5px 12px; } ul.dropdown-menu { .inspector-autocomplete-list(); } .loading-indicator { span { margin-top: -12px; right: 10px; left: auto; } } } } &.trigger-cell { padding: 0!important; a.trigger { display: block; padding: 5px 12px 7px 12px; overflow: hidden; min-height: 29px; text-overflow: ellipsis; color: @color-inspector-color; text-decoration: none; &.cell-placeholder { color: #b5babd; } .loading-indicator { background-color: @color-inspector-bg; span { margin-top: -12px; right: 10px; left: auto; } } } } &.dropdown { padding: 0!important; } select { width: 90%; } div.external-param-editor-container { position: relative; padding-right: 25px; div.external-editor { bottom: 0; margin: -5px -12px; right: 30px; left: auto; top: 0; position: absolute; transition: left 0.2s; transform: translateZ(0); will-change: transform; div.controls { position: absolute; width: 100%; height: 100%; left: 0; top: 0; a { position: absolute; left: 0; top: 0; display: inline-block; height: 100%; width: 30px; color: @primary-color; outline: none; i { display: inline-block; position: relative; left: 7px; top: 5px; font-size: 1rem; } } input { position: absolute; display: block; border: none; width: 100%; height: 100%; left: 0; top: 0; padding-left: 30px; padding-right: 12px; background: transparent; color: @color-inspector-value-color; } } } &.editor-visible { div.external-editor { div.controls { input { background: @color-inspector-bg; } } } } } &.active { div.external-param-editor-container { div.external-editor { div.controls { input { background: @secondary-bg; } } } } } &.dropdown, &.trigger-cell { div.external-param-editor-container div.external-editor { height: 100%; margin: 0; bottom: auto; } } } th { font-weight: 600; > div { position: relative; > div { white-space: nowrap; padding-right: 10px; text-overflow: ellipsis; overflow: hidden; width: 100%; span.info { display: inline-block; position: absolute; right: 3px; top: 3px; font-size: 14px; width: 10px; height: 12px; line-height: 80%; color: #999; &:before { margin-left: 3px; } &:hover { color: @emphasis-color; } } } a.expandControl { display: block; position: absolute; width: 12px; height: 12px; left: -15px; top: 2px; text-indent: -100000em; span { position: absolute; display: inline-block; left: 0; top: 0; width: 12px; height: 12px; &:after { .icon(@icon-angle-right); position: absolute; left: 4px; top: -2px; width: 12px; height: 12px; font-size: 13px; color: @primary-color; text-indent: 0; } } &.expanded span:after { .icon(@icon-angle-down); left: 2px; } } } } input[type=text] { display: block; width: 100%; border: none; outline: none; } div.form-check { position: relative; top: 1px; font-size: 1rem; } .select2-container { width: 100% !important; .select2-selection { height: 29px; line-height: 29px; padding: 0 3px 0 12px; border: none !important; font-size: 12px; .border-radius(0) !important; .box-shadow(none) !important; &.select2-default { font-weight: normal !important; } } .loading-indicator { > span { top: 15px; } } &.select2-container--open { .border-radius(0) !important; border: none !important; .select2-selection {} } .select2-selection__rendered { padding: 0 22px 0 0; color: @color-inspector-value-color; } } tr.changed { td { font-weight: 600; input[type=text] { font-weight: 600; } .select2-container .select2-selection { font-weight: 600; } } } } div.control-popover { &.control-inspector { > div { background: @color-inspector-bg; border: none; &:before, &:after { display: none; } } > div > form { padding: 5px 20px 10px; } .popover-head { padding-left: 20px; padding-right: 20px; } .inspector-fields { th { padding-left: 0; } } } &.hero { > div { border-radius: 8px; } .popover-head { .border-top-radius(8px); h3 { font-weight: normal; font-size: 18px; } .btn-close { top: 16px; right: 17px; } } .inspector-fields { th, td { padding: 9px 12px; font-weight: 600!important; font-size: 13px; } th { padding-left: 0; } td { font-weight: 400!important; } div.custom-select.select2-container .select2-selection { height: 36px; line-height: 36px; } } } &.inspector-temporary-placement { visibility: hidden; left: 0!important; top: 0!important; } } .inspector-columns-editor { min-height: 400px; margin-bottom: 20px; border-bottom: 1px solid @color-inspector-border; .items-column { width: 250px; } .inspector-wrapper { background: @color-inspector-bg; border-left: 2px solid @color-inspector-border; } .toolbar { padding: 20px; } } .inspector-table-list { border-top: 1px solid @border-color; user-select: none; } div.inspector-dictionary-container { border: 1px solid @border-color; .values { height: 300px; } table.headers { width: 100%; border: none; td { width: 50%; padding: 7px 5px; font-size: 13px; text-transform: uppercase; font-weight: 600; color: @primary-color; background: @primary-bg; border-bottom: 1px solid @border-color; &:first-child { border-right: 1px solid @border-color; } } } table.inspector-dictionary-table { width: 100%; border: none; tbody tr { td { width: 50%; padding: 0!important; border-bottom: 1px solid @border-color; div { border: 1px solid transparent; } &.active div { border-color: @brand-accent; } input { width: 100%; height: 100%; display: block; outline: none; border: none; padding: 7px 5px; box-shadow: none; &:focus { border: none; outline: none; } } &:first-child { border-right: 1px solid @border-color; } } &:last-child td { border-bottom: none; } } } } .inspector-header { background: @color-popover-head-bg; padding: 14px 16px; position: relative; color: @color-popover-head-text; border-bottom: 1px solid @color-popover-border; h3 { font-size: @font-size-base + 1; font-weight: 600; margin-top: 0; margin-bottom: 0; padding-right: 15px; line-height: 130%; } p { font-size: @font-size-base - 2; font-weight: normal; margin: 5px 0 0 0; &:empty { display: none; } } span, a { text-decoration: none; position: absolute; top: 12px; float: none; color: @close-color; cursor: pointer; line-height: 1; opacity: .4; &:hover { opacity: 1; color: @close-color; } } .detach { right: 26px; line-height: 22px; } .close { right: 11px; font-size: 21px; } } .inspector-container { &:empty { display: none; } .control-scrollpad { position: absolute; } } .inspector-field-comment { &:empty { display: none; } } ul.autocomplete.dropdown-menu.inspector-autocomplete { .inspector-autocomplete-list(); } .select2-dropdown { &.ocInspectorDropdown { font-size: 12px; .border-radius(0) !important; border: none !important; > .select2-results { > .select2-results__options { font-size: 12px; } > li > div { padding: 5px 12px 5px; } li.select2-no-results { padding: 5px 12px 5px; } li > i, li > img { margin-left: 6px; } } .select2-search { min-height: 26px; position: relative; border-bottom: 1px solid @border-color; &:after { position: absolute; .icon(@icon-search); right: 10px; top: 10px; color: #95a5a6; } input.select2-search__field { min-height: 26px; background: transparent !important; font-size: @font-size-base - 1; padding-left: 4px; padding-right: 20px; border: none; } } } } ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.manager.js ================================================ /* * Inspector management functions. * * Watches inspectable elements clicks and creates Inspector surfaces in popups * and containers. */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var InspectorManager = function() { Base.call(this); this.init(); } InspectorManager.prototype = Object.create(BaseProto); InspectorManager.prototype.constructor = Base; InspectorManager.prototype.init = function() { $(document).on('click', '[data-inspectable]', this.proxy(this.onInspectableClicked)); } InspectorManager.prototype.getContainerElement = function($element) { var $containerHolder = $element.closest('[data-inspector-container]'); if ($containerHolder.length === 0) { return null; } var $container = $containerHolder.find($containerHolder.data('inspector-container')); if ($container.length === 0) { throw new Error('Inspector container ' + $containerHolder.data['inspector-container'] + ' element is not found.'); } return $container; } InspectorManager.prototype.loadElementOptions = function($element) { var options = {}; // Only specific options are allowed, don't load all options with data() if ($element.data('inspector-css-class')) { options.inspectorCssClass = $element.data('inspector-css-class'); } return options; } InspectorManager.prototype.createInspectorPopup = function($element, containerSupported) { var options = $.extend(this.loadElementOptions($element), { containerSupported: containerSupported }); new $.oc.inspector.wrappers.popup($element, null, options); } InspectorManager.prototype.createInspectorContainer = function($element, $container) { var options = $.extend(this.loadElementOptions($element), { containerSupported: true, container: $container }); new $.oc.inspector.wrappers.container($element, null, options); } InspectorManager.prototype.switchToPopup = function(wrapper) { var options = $.extend(this.loadElementOptions(wrapper.$element), { containerSupported: true }) new $.oc.inspector.wrappers.popup(wrapper.$element, wrapper, options) wrapper.cleanupAfterSwitch(); this.setContainerPreference(false); } InspectorManager.prototype.switchToContainer = function(wrapper) { var $container = this.getContainerElement(wrapper.$element), options = $.extend(this.loadElementOptions(wrapper.$element), { containerSupported: true, container: $container }); if (!$container) { throw new Error('Cannot switch to container: a container element is not found'); } new $.oc.inspector.wrappers.container(wrapper.$element, wrapper, options); wrapper.cleanupAfterSwitch(); this.setContainerPreference(true); } InspectorManager.prototype.createInspector = function(element) { var $element = $(element); if ($element.data('oc.inspectorVisible')) { return false; } var $container = this.getContainerElement($element); // If there's no container option, create the Inspector popup if (!$container) { this.createInspectorPopup($element, false); } else { // If the container is already in use, apply values to the inspectable elements if (!this.applyValuesFromContainer($container) || !this.containerHidingAllowed($container)) { return; } // Dispose existing container wrapper, if any $.oc.foundation.controlUtils.disposeControls($container.get(0)); if (!this.getContainerPreference()) { // If container is not a preferred option, create Inspector popup this.createInspectorPopup($element, true); } else { // Otherwise, create Inspector in the container this.createInspectorContainer($element, $container); } } } InspectorManager.prototype.getContainerPreference = function() { try { return localStorage.getItem('oc.inspectorUseContainer') === "true"; } catch (e) { return false; } } InspectorManager.prototype.setContainerPreference = function(value) { try { localStorage.setItem('oc.inspectorUseContainer', value ? "true" : "false"); } catch (e) { // localStorage not available } } InspectorManager.prototype.applyValuesFromContainer = function($container) { var applyEvent = $.Event('apply.oc.inspector'); $container.trigger(applyEvent); return !applyEvent.isDefaultPrevented(); } InspectorManager.prototype.containerHidingAllowed = function($container) { var allowedEvent = $.Event('beforeContainerHide.oc.inspector'); $container.trigger(allowedEvent); return !allowedEvent.isDefaultPrevented(); } InspectorManager.prototype.onInspectableClicked = function(ev) { var $element = $(ev.currentTarget); if (this.createInspector($element) === false) { return false; } ev.stopPropagation(); return false; } $.oc.inspector.manager = new InspectorManager(); $.fn.inspector = function () { return this.each(function () { $.oc.inspector.manager.createInspector(this); }) } }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.surface.js ================================================ /* * Inspector Surface class. * * The class creates Inspector user interface and all the editors * corresponding to the passed configuration in a specified container * element. * */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc === undefined) $.oc = {} if ($.oc.inspector === undefined) $.oc.inspector = {} // CLASS DEFINITION // ============================ var Base = $.oc.foundation.base, BaseProto = Base.prototype /** * Creates the Inspector surface in a container. * - containerElement container DOM element * - properties array (array of objects) * - values - property values, an object * - inspectorUniqueId - a string containing the unique inspector identifier. * The identifier should be a constant for an inspectable element. Use * $.oc.inspector.helpers.generateElementUniqueId(element) to generate a persistent ID * for an element. Use $.oc.inspector.helpers.generateUniqueId() to generate an ID * not associated with an element. Inspector uses the ID for storing configuration * related to an element in the document DOM. */ var Surface = function(containerElement, properties, values, inspectorUniqueId, options, parentSurface, group, propertyName) { if (inspectorUniqueId === undefined) { throw new Error('Inspector surface unique ID should be defined.') } this.options = $.extend({}, Surface.DEFAULTS, typeof options == 'object' && options) this.rawProperties = properties this.parsedProperties = $.oc.inspector.engine.processPropertyGroups(properties) this.container = containerElement this.inspectorUniqueId = inspectorUniqueId this.values = values !== null ? values : {} this.originalValues = $.extend(true, {}, this.values) // Clone the values hash this.idCounter = 1 this.popupCounter = 0 this.parentSurface = parentSurface this.propertyName = propertyName this.editors = [] this.externalParameterEditors = [] this.tableContainer = null this.groupManager = null this.group = null if (group !== undefined) { this.group = group } if (!this.parentSurface) { this.groupManager = new $.oc.inspector.groupManager(this.inspectorUniqueId) } Base.call(this) this.init() } Surface.prototype = Object.create(BaseProto) Surface.prototype.constructor = Surface Surface.prototype.dispose = function() { this.unregisterHandlers() this.disposeControls() this.disposeEditors() this.removeElements() this.disposeExternalParameterEditors() this.container = null this.tableContainer = null this.rawProperties = null this.parsedProperties = null this.editors = null this.externalParameterEditors = null this.values = null this.originalValues = null this.options.onChange = null this.options.onPopupDisplayed = null this.options.onPopupHidden = null this.options.onGetInspectableElement = null this.parentSurface = null this.groupManager = null this.group = null BaseProto.dispose.call(this) } // INTERNAL METHODS // ============================ Surface.prototype.init = function() { if (this.groupManager && !this.group) { this.group = this.groupManager.createGroup('root') } this.build() if (!this.parentSurface) { $.oc.foundation.controlUtils.markDisposable(this.tableContainer) } this.registerHandlers() } Surface.prototype.registerHandlers = function() { if (!this.parentSurface) { $(this.tableContainer).one('dispose-control', this.proxy(this.dispose)) $(this.tableContainer).on('click', 'tr.group, tr.control-group', this.proxy(this.onGroupClick)) $(this.tableContainer).on('focus-control', this.proxy(this.focusFirstEditor)) } } Surface.prototype.unregisterHandlers = function() { if (!this.parentSurface) { $(this.tableContainer).off('dispose-control', this.proxy(this.dispose)) $(this.tableContainer).off('click', 'tr.group, tr.control-group', this.proxy(this.onGroupClick)) $(this.tableContainer).off('focus-control', this.proxy(this.focusFirstEditor)) } } Surface.prototype.getEventHandler = function(handler) { return $.oc.inspector.helpers.getEventHandler(this.getInspectableElement(), handler); } // // Building // /** * Builds the Inspector table. The markup generated by this method looks * like this: * *
    * * * * * * * *
    *
    *
    * * Expand/Collapse * Label * *
    *
    *
    * Editor markup *
    *
    */ Surface.prototype.build = function() { this.tableContainer = document.createElement('div') var dataTable = document.createElement('table'), tbody = document.createElement('tbody') $.oc.foundation.element.addClass(dataTable, 'inspector-fields') if (this.parsedProperties.hasGroups) { $.oc.foundation.element.addClass(dataTable, 'has-groups') } var currentGroup = this.group for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) { var property = this.parsedProperties.properties[i] if (property.itemType == 'group') { currentGroup = this.getGroupManager().createGroup(property.groupIndex, this.group) } else { if (property.groupIndex === undefined) { currentGroup = this.group } } var row = this.buildRow(property, currentGroup) if (property.itemType == 'group') { this.applyGroupLevelToRow(row, currentGroup.parentGroup) } else { this.applyGroupLevelToRow(row, currentGroup) } tbody.appendChild(row) // Editor // this.buildEditor(row, property, dataTable, currentGroup) } dataTable.appendChild(tbody) this.tableContainer.appendChild(dataTable) this.container.appendChild(this.tableContainer) if (this.options.enableExternalParameterEditor) { this.buildExternalParameterEditor(tbody) } if (!this.parentSurface) { this.focusFirstEditor() } } Surface.prototype.moveToContainer = function(newContainer) { this.container = newContainer this.container.appendChild(this.tableContainer) } Surface.prototype.buildRow = function(property, group) { var row = document.createElement('tr'), th = document.createElement('th'), titleSpan = document.createElement('span'), description = this.buildPropertyDescription(property) // Table row // if (property.property) { row.setAttribute('data-property', property.property) row.setAttribute('data-property-path', this.getPropertyPath(property.property)) } this.applyGroupIndexAttribute(property, row, group) $.oc.foundation.element.addClass(row, this.getRowCssClass(property, group)) // Property head // this.applyHeadColspan(th, property) titleSpan.setAttribute('class', 'title-element') titleSpan.setAttribute('title', this.escapeJavascriptString(property.title)) this.buildGroupExpandControl(titleSpan, property, false, false, group) titleSpan.innerHTML += this.escapeJavascriptString(property.title) var outerDiv = document.createElement('div'), innerDiv = document.createElement('div') innerDiv.appendChild(titleSpan) if (description) { innerDiv.appendChild(description) } outerDiv.appendChild(innerDiv) th.appendChild(outerDiv) row.appendChild(th) return row } Surface.prototype.focusFirstEditor = function() { if (this.editors.length == 0) { return } var groupManager = this.getGroupManager(); for (var i = 0, len = this.editors.length; i < len; i++) { var editor = this.editors[i], group = editor.parentGroup; if (group && !this.groupManager.isGroupExpanded(group) ) { continue; } var externalParameterEditor = this.findExternalParameterEditor(editor.getPropertyName()) if (externalParameterEditor && externalParameterEditor.isEditorVisible()) { externalParameterEditor.focus(); return; } editor.focus(); return; } } Surface.prototype.getRowCssClass = function(property, group) { var result = property.itemType if (property.itemType == 'property') { // result += ' grouped' if (group.parentGroup) { result += this.getGroupManager().isGroupExpanded(group) ? ' expanded' : ' collapsed' } } if (property.itemType == 'property' && !property.showExternalParam) { result += ' no-external-parameter' } return result } Surface.prototype.applyHeadColspan = function(th, property) { if (property.itemType == 'group') { th.setAttribute('colspan', 2) } } Surface.prototype.buildGroupExpandControl = function(titleSpan, property, force, hasChildSurface, group) { if (property.itemType !== 'group' && !force) { return } var groupIndex = this.getGroupManager().getGroupIndex(group), statusClass = this.getGroupManager().isGroupExpanded(group) ? 'expanded' : '', anchor = document.createElement('a') anchor.setAttribute('class', 'expandControl ' + statusClass) anchor.setAttribute('href', 'javascript:;') anchor.innerHTML = 'Expand/collapse' titleSpan.appendChild(anchor) } Surface.prototype.buildPropertyDescription = function(property) { if (property.description === undefined || property.description === null) { return null; } var span = document.createElement('span'); span.setAttribute('data-tooltip-text', this.escapeJavascriptString(property.description)); span.setAttribute('class', 'info icon-info-circle-1 with-tooltip'); return span; } Surface.prototype.buildExternalParameterEditor = function(tbody) { var rows = tbody.children for (var i = 0, len = rows.length; i < len; i++) { var row = rows[i], property = row.getAttribute('data-property') if ($.oc.foundation.element.hasClass(row, 'no-external-parameter') || !property) { continue } var propertyEditor = this.findPropertyEditor(property) if (propertyEditor && !propertyEditor.supportsExternalParameterEditor()) { continue } var cell = row.querySelector('td'), propertyDefinition = this.findPropertyDefinition(property), initialValue = this.getPropertyValue(property) if (initialValue === undefined) { initialValue = propertyEditor.getUndefinedValue() } var editor = new $.oc.inspector.externalParameterEditor(this, propertyDefinition, cell, initialValue) this.externalParameterEditors.push(editor) } } // // Field grouping // Surface.prototype.applyGroupIndexAttribute = function(property, row, group, isGroupedControl) { if (property.itemType == 'group' || isGroupedControl) { row.setAttribute('data-group-index', this.getGroupManager().getGroupIndex(group)) row.setAttribute('data-parent-group-index', this.getGroupManager().getGroupIndex(group.parentGroup)) } else { if (group.parentGroup) { row.setAttribute('data-parent-group-index', this.getGroupManager().getGroupIndex(group)) } } } Surface.prototype.applyGroupLevelToRow = function(row, group) { if (row.hasAttribute('data-group-level')) { return; } var th = this.getRowHeadElement(row); if (th === null) { throw new Error('Cannot find TH element for the Inspector row'); } var groupLevel = group.getLevel(); row.setAttribute('data-group-level', groupLevel) th.children[0].style.marginLeft = groupLevel*10 + 'px' } Surface.prototype.toggleGroup = function(row, forceExpand) { var link = row.querySelector('a'), groupIndex = row.getAttribute('data-group-index'), table = this.getRootTable(), groupManager = this.getGroupManager(), collapse = true if ($.oc.foundation.element.hasClass(link, 'expanded') && !forceExpand) { $.oc.foundation.element.removeClass(link, 'expanded') } else { $.oc.foundation.element.addClass(link, 'expanded') collapse = false } var propertyRows = groupManager.findGroupRows(table, groupIndex, !collapse), duration = Math.round(50 / propertyRows.length) this.expandOrCollapseRows(propertyRows, collapse, duration, forceExpand) groupManager.setGroupStatus(groupIndex, !collapse) } Surface.prototype.expandGroupParents = function(group) { var groups = group.getGroupAndAllParents(), table = this.getRootTable() for (var i = groups.length-1; i >= 0; i--) { var row = groups[i].findGroupRow(table) if (row) { this.toggleGroup(row, true) } } } Surface.prototype.expandOrCollapseRows = function(rows, collapse, duration, noAnimation) { var row = rows.pop(), self = this if (row) { if (!noAnimation) { setTimeout(function toggleRow() { $.oc.foundation.element.toggleClass(row, 'collapsed', collapse) $.oc.foundation.element.toggleClass(row, 'expanded', !collapse) self.expandOrCollapseRows(rows, collapse, duration, noAnimation) }, duration) } else { $.oc.foundation.element.toggleClass(row, 'collapsed', collapse) $.oc.foundation.element.toggleClass(row, 'expanded', !collapse) self.expandOrCollapseRows(rows, collapse, duration, noAnimation) } } } Surface.prototype.getGroupManager = function() { return this.getRootSurface().groupManager } // // Editors // Surface.prototype.buildEditor = function(row, property, dataTable, group) { if (property.itemType !== 'property') { return } this.validateEditorType(property.type) var cell = document.createElement('td'), type = property.type row.appendChild(cell) if (type === undefined) { type = 'string' } var editor = new $.oc.inspector.propertyEditors[type](this, property, cell, group) if (editor.isGroupedEditor()) { $.oc.foundation.element.addClass(dataTable, 'has-groups') $.oc.foundation.element.addClass(row, 'control-group') this.applyGroupIndexAttribute(property, row, editor.group, true) this.buildGroupExpandControl(row.querySelector('span.title-element'), property, true, editor.hasChildSurface(), editor.group) if (cell.children.length == 0) { // If the editor hasn't added any elements to the cell, // and it's a grouped control, remove the cell and // make the group title full-width. row.querySelector('th').setAttribute('colspan', 2) row.removeChild(cell) } } this.editors.push(editor) } Surface.prototype.generateSequencedId = function() { this.idCounter ++ return this.inspectorUniqueId + '-' + this.idCounter } // // Internal API for the editors // Surface.prototype.getPropertyValue = function(property) { return this.values[property] } Surface.prototype.setPropertyValue = function(property, value, supressChangeEvents, forceEditorUpdate) { if (value !== undefined) { this.values[property] = value } else { if (this.values[property] !== undefined) { delete this.values[property] } } if (!supressChangeEvents) { if (this.originalValues[property] === undefined || !this.comparePropertyValues(this.originalValues[property], value)) { this.markPropertyChanged(property, true) } else { this.markPropertyChanged(property, false) } var propertyPath = this.getPropertyPath(property) this.getRootSurface().notifyEditorsPropertyChanged(propertyPath, value) if (this.options.onChange !== null) { this.options.onChange(property, value) } } if (forceEditorUpdate) { var editor = this.findPropertyEditor(property) if (editor) { editor.updateDisplayedValue(value) } } return value } Surface.prototype.notifyEditorsPropertyChanged = function(propertyPath, value) { // Editors use this event to watch changes in properties // they depend on. All editors should be notified, including // editors in nested surfaces. The property name is passed as a // path object.property (if the property is nested), so that // property depenencies could be defined as // ['property', 'object.property'] for (var i = 0, len = this.editors.length; i < len; i++) { var editor = this.editors[i] editor.onInspectorPropertyChanged(propertyPath, value) editor.notifyChildSurfacesPropertyChanged(propertyPath, value) } } Surface.prototype.makeCellActive = function(cell) { var tbody = cell.parentNode.parentNode.parentNode, // cell / row / tbody cells = tbody.querySelectorAll('tr td') for (var i = 0, len = cells.length; i < len; i++) { $.oc.foundation.element.removeClass(cells[i], 'active') } $.oc.foundation.element.addClass(cell, 'active') } Surface.prototype.markPropertyChanged = function(property, changed) { var propertyPath = this.getPropertyPath(property), row = this.tableContainer.querySelector('tr[data-property-path="'+propertyPath+'"]') if (changed) { $.oc.foundation.element.addClass(row, 'changed') } else { $.oc.foundation.element.removeClass(row, 'changed') } } Surface.prototype.findPropertyEditor = function(property) { for (var i = 0, len = this.editors.length; i < len; i++) { if (this.editors[i].getPropertyName() == property) { return this.editors[i] } } return null } Surface.prototype.findExternalParameterEditor = function(property) { for (var i = 0, len = this.externalParameterEditors.length; i < len; i++) { if (this.externalParameterEditors[i].getPropertyName() == property) { return this.externalParameterEditors[i] } } return null } Surface.prototype.findPropertyDefinition = function(property) { for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) { var definition = this.parsedProperties.properties[i] if (definition.property == property) { return definition } } return null } Surface.prototype.validateEditorType = function(type) { if (type === undefined) { type = 'string' } if ($.oc.inspector.propertyEditors[type] === undefined) { throw new Error('The Inspector editor class "' + type + '" is not defined in the $.oc.inspector.propertyEditors namespace.') } } Surface.prototype.popupDisplayed = function() { if (this.popupCounter === 0 && this.options.onPopupDisplayed !== null) { this.options.onPopupDisplayed() } this.popupCounter++ } Surface.prototype.popupHidden = function() { this.popupCounter-- if (this.popupCounter < 0) { this.popupCounter = 0 } if (this.popupCounter === 0 && this.options.onPopupHidden !== null) { this.options.onPopupHidden() } } Surface.prototype.getInspectableElement = function() { if (this.options.onGetInspectableElement !== null) { return this.options.onGetInspectableElement() } } Surface.prototype.getPropertyPath = function(propertyName) { var result = [], current = this result.push(propertyName) while (current) { if (current.propertyName) { result.push(current.propertyName) } current = current.parentSurface } result.reverse() return result.join('.') } Surface.prototype.findDependentProperties = function(propertyName) { var dependents = [] for (var i in this.rawProperties) { var property = this.rawProperties[i] if (!property.depends) { continue } if (property.depends.indexOf(propertyName) !== -1) { dependents.push(property.property) } } return dependents } // // Nested surfaces support // Surface.prototype.mergeChildSurface = function(surface, mergeAfterRow) { var rows = surface.tableContainer.querySelectorAll('table.inspector-fields > tbody > tr') surface.tableContainer = this.getRootSurface().tableContainer for (var i = rows.length-1; i >= 0; i--) { var row = rows[i] mergeAfterRow.parentNode.insertBefore(row, mergeAfterRow.nextSibling) this.applyGroupLevelToRow(row, surface.group) } } Surface.prototype.getRowHeadElement = function(row) { for (var i = row.children.length-1; i >= 0; i--) { var element = row.children[i] if (element.tagName === 'TH') { return element } } return null } Surface.prototype.getInspectorUniqueId = function() { return this.inspectorUniqueId } Surface.prototype.getRootSurface = function() { var current = this while (current) { if (!current.parentSurface) { return current } current = current.parentSurface } } // // Disposing // Surface.prototype.removeElements = function() { if (!this.parentSurface) { this.tableContainer.parentNode.removeChild(this.tableContainer); } } Surface.prototype.disposeEditors = function() { for (var i = 0, len = this.editors.length; i < len; i++) { var editor = this.editors[i] editor.dispose() } } Surface.prototype.disposeExternalParameterEditors = function() { for (var i = 0, len = this.externalParameterEditors.length; i < len; i++) { var editor = this.externalParameterEditors[i] editor.dispose() } } Surface.prototype.disposeControls = function() { var tooltipControls = this.tableContainer.querySelectorAll('.with-tooltip') for (var i = 0, len = tooltipControls.length; i < len; i++) { $(tooltipControls[i]).tooltip('dispose'); } } // // Helpers // Surface.prototype.escapeJavascriptString = function(str) { var div = document.createElement('div') div.appendChild(document.createTextNode(str)) return div.innerHTML } Surface.prototype.comparePropertyValues = function(oldValue, newValue) { if (oldValue === undefined && newValue !== undefined) { return false } if (oldValue !== undefined && newValue === undefined) { return false } if (typeof oldValue == 'object' && typeof newValue == 'object') { return JSON.stringify(oldValue) == JSON.stringify(newValue) } return oldValue == newValue } Surface.prototype.getRootTable = function() { return this.getRootSurface().container.querySelector('table.inspector-fields') } // // External API // Surface.prototype.getValues = function() { var result = {} for (var i=0, len = this.parsedProperties.properties.length; i < len; i++) { var property = this.parsedProperties.properties[i] if (property.itemType !== 'property') { continue } var value = null, externalParameterEditor = this.findExternalParameterEditor(property.property) if (!externalParameterEditor || !externalParameterEditor.isEditorVisible()) { value = this.getPropertyValue(property.property) var editor = this.findPropertyEditor(property.property) if (value === undefined) { if (editor) { value = editor.getUndefinedValue() } else { value = property.default } } if (value === $.oc.inspector.removedProperty) { continue } if (property.ignoreIfEmpty !== undefined && (property.ignoreIfEmpty === true || property.ignoreIfEmpty === "true") && editor) { if (editor.isEmptyValue(value)) { continue } } if (property.ignoreIfDefault !== undefined && (property.ignoreIfDefault === true || property.ignoreIfDefault === "true") && editor) { if (property.default === undefined) { throw new Error('The ignoreIfDefault feature cannot be used without the default property value.') } if (this.comparePropertyValues(value, property.default)) { continue } } } else { value = externalParameterEditor.getValue() value = '{{ ' + value + ' }}' } result[property.property] = value } return result } Surface.prototype.getValidValues = function() { var allValues = this.getValues(), result = {} for (var property in allValues) { var editor = this.findPropertyEditor(property) if (!editor) { throw new Error('Cannot find editor for property ' + property) } var externalEditor = this.findExternalParameterEditor(property) if (externalEditor && externalEditor.isEditorVisible() && !externalEditor.validate(true)) { result[property] = $.oc.inspector.invalidProperty continue } if (!editor.validate(true)) { result[property] = $.oc.inspector.invalidProperty continue } result[property] = allValues[property] } return result } Surface.prototype.validate = function(silentMode) { this.getGroupManager().unmarkInvalidGroups(this.getRootTable()) for (var i = 0, len = this.editors.length; i < len; i++) { var editor = this.editors[i], externalEditor = this.findExternalParameterEditor(editor.propertyDefinition.property) if (externalEditor && externalEditor.isEditorVisible()) { if (!externalEditor.validate(silentMode)) { if (!silentMode) { editor.markInvalid() } return false } else { continue } } if (!editor.validate(silentMode)) { if (!silentMode) { editor.markInvalid() } return false } } return true } Surface.prototype.hasChanges = function(originalValues) { var values = originalValues !== undefined ? originalValues : this.originalValues return !this.comparePropertyValues(values, this.getValues()) } // EVENT HANDLERS // Surface.prototype.onGroupClick = function(ev) { var row = ev.currentTarget this.toggleGroup(row) $.oc.foundation.event.stop(ev) return false } // DEFAULT OPTIONS // ============================ Surface.DEFAULTS = { enableExternalParameterEditor: false, onChange: null, onPopupDisplayed: null, onPopupHidden: null, onGetInspectableElement: null } // REGISTRATION // ============================ $.oc.inspector.surface = Surface $.oc.inspector.removedProperty = {removed: true} $.oc.inspector.invalidProperty = {invalid: true} }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validationset.js ================================================ /* * Inspector validation set class. */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc.inspector.validators === undefined) $.oc.inspector.validators = {} // CLASS DEFINITION // ============================ var Base = $.oc.foundation.base, BaseProto = Base.prototype var ValidationSet = function(options, propertyName) { this.validators = [] this.options = options this.propertyName = propertyName Base.call(this) this.createValidators() } ValidationSet.prototype = Object.create(BaseProto) ValidationSet.prototype.constructor = Base ValidationSet.prototype.dispose = function() { this.disposeValidators() this.validators = null BaseProto.dispose.call(this) } ValidationSet.prototype.disposeValidators = function() { for (var i = 0, len = this.validators.length; i < len; i++) { this.validators[i].dispose() } } ValidationSet.prototype.throwError = function(errorMessage) { throw new Error(errorMessage + ' Property: ' + this.propertyName) } ValidationSet.prototype.createValidators = function() { // Handle legacy validation syntax properties: // // - required // - validationPattern // - validationMessage if ((this.options.required !== undefined || this.options.validationPattern !== undefined || this.options.validationMessage !== undefined) && this.options.validation !== undefined) { this.throwError('Legacy and new validation syntax should not be mixed.') } if (this.options.required !== undefined && this.options.required) { var validator = new $.oc.inspector.validators.required({ message: this.options.validationMessage }) this.validators.push(validator) } if (this.options.validationPattern !== undefined) { var validator = new $.oc.inspector.validators.regex({ message: this.options.validationMessage, pattern: this.options.validationPattern }) this.validators.push(validator) } // // Handle new validation syntax // if (this.options.validation === undefined) { return } for (var validatorName in this.options.validation) { if ($.oc.inspector.validators[validatorName] == undefined) { this.throwError('Inspector validator "' + validatorName + '" is not found in the $.oc.inspector.validators namespace.') } var validator = new $.oc.inspector.validators[validatorName]( this.options.validation[validatorName] ) this.validators.push(validator) } } ValidationSet.prototype.validate = function(value) { try { for (var i = 0, len = this.validators.length; i < len; i++) { var validator = this.validators[i], errorMessage = validator.isValid(value) if (typeof errorMessage === 'string') { return errorMessage } } return null } catch (err) { this.throwError(err) } } $.oc.inspector.validationSet = ValidationSet }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validator.base.js ================================================ /* * Inspector validator base class. */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc.inspector.validators === undefined) $.oc.inspector.validators = {} // CLASS DEFINITION // ============================ var Base = $.oc.foundation.base, BaseProto = Base.prototype var BaseValidator = function(options) { this.options = options this.defaultMessage = 'Invalid property value.' Base.call(this) } BaseValidator.prototype = Object.create(BaseProto) BaseValidator.prototype.constructor = Base BaseValidator.prototype.dispose = function() { this.defaultMessage = null BaseProto.dispose.call(this) } BaseValidator.prototype.getMessage = function(defaultMessage) { if (this.options.message !== undefined) { return this.options.message } if (defaultMessage !== undefined) { return defaultMessage } return this.defaultMessage } BaseValidator.prototype.isScalar = function(value) { if (value === undefined || value === null) { return true } return !!(typeof value === 'string' || typeof value == 'number' || typeof value == 'boolean'); } BaseValidator.prototype.isValid = function(value) { return null } $.oc.inspector.validators.base = BaseValidator }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validator.basenumber.js ================================================ /* * Base class for Inspector numeric validators. */ +function ($) { "use strict"; var Base = $.oc.inspector.validators.base, BaseProto = Base.prototype var BaseNumber = function(options) { Base.call(this, options) } BaseNumber.prototype = Object.create(BaseProto) BaseNumber.prototype.constructor = Base BaseNumber.prototype.doCommonChecks = function(value) { if (this.options.min !== undefined || this.options.max !== undefined) { if (this.options.min !== undefined) { if (this.options.min.value === undefined) { throw new Error('The min.value parameter is not defined in the Inspector validator configuration') } if (value < this.options.min.value) { return this.options.min.message !== undefined ? this.options.min.message : "The value should not be less than " + this.options.min.value } } if (this.options.max !== undefined) { if (this.options.max.value === undefined) { throw new Error('The max.value parameter is not defined in the table Inspector validator configuration') } if (value > this.options.max.value) { return this.options.max.message !== undefined ? this.options.max.message : "The value should not be greater than " + this.options.max.value } } } } $.oc.inspector.validators.baseNumber = BaseNumber }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validator.float.js ================================================ /* * Inspector float validator. */ +function ($) { "use strict"; var Base = $.oc.inspector.validators.baseNumber, BaseProto = Base.prototype var FloatValidator = function(options) { Base.call(this, options) } FloatValidator.prototype = Object.create(BaseProto) FloatValidator.prototype.constructor = Base FloatValidator.prototype.isValid = function(value) { if (!this.isScalar(value) || typeof value == 'boolean') { this.throwError('The Float Inspector validator can only be used with string values.') } if (value === undefined || value === null) { return null } var string = $.trim(String(value)) if (string.length === 0) { return null } var testResult = this.options.allowNegative ? /^[-]?([0-9]+\.[0-9]+|[0-9]+)$/.test(string) : /^([0-9]+\.[0-9]+|[0-9]+)$/.test(string) if (!testResult) { var defaultMessage = this.options.allowNegative ? 'The value should be a floating point number.' : 'The value should be a positive floating point number.'; return this.getMessage(defaultMessage) } return this.doCommonChecks(parseFloat(string)) } $.oc.inspector.validators.float = FloatValidator }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validator.integer.js ================================================ /* * Inspector integer validator. */ +function ($) { "use strict"; var Base = $.oc.inspector.validators.baseNumber, BaseProto = Base.prototype var IntegerValidator = function(options) { Base.call(this, options) } IntegerValidator.prototype = Object.create(BaseProto) IntegerValidator.prototype.constructor = Base IntegerValidator.prototype.isValid = function(value) { if (!this.isScalar(value) || typeof value == 'boolean') { this.throwError('The Integer Inspector validator can only be used with string values.') } if (value === undefined || value === null) { return null } var string = $.trim(String(value)) if (string.length === 0) { return null } var testResult = this.options.allowNegative ? /^\-?[0-9]*$/.test(string) : /^[0-9]*$/.test(string) if (!testResult) { var defaultMessage = this.options.allowNegative ? 'The value should be an integer.' : 'The value should be a positive integer.'; return this.getMessage(defaultMessage) } return this.doCommonChecks(parseInt(string)) } $.oc.inspector.validators.integer = IntegerValidator }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validator.length.js ================================================ /* * Inspector length validator. */ +function ($) { "use strict"; var Base = $.oc.inspector.validators.base, BaseProto = Base.prototype var LengthValidator = function(options) { Base.call(this, options) } LengthValidator.prototype = Object.create(BaseProto) LengthValidator.prototype.constructor = Base LengthValidator.prototype.isValid = function(value) { if (value === undefined || value === null) { return null } if (typeof value == 'boolean') { this.throwError('The Length Inspector validator cannot work with Boolean values.') } var length = null if(Object.prototype.toString.call(value) === '[object Array]' || typeof value === 'string') { length = value.length } else if (typeof value === 'object') { length = this.getObjectLength(value) } if (this.options.min !== undefined || this.options.max !== undefined) { if (this.options.min !== undefined) { if (this.options.min.value === undefined) { throw new Error('The min.value parameter is not defined in the Length Inspector validator configuration.') } if (length < this.options.min.value) { return this.options.min.message !== undefined ? this.options.min.message : "The value should not be shorter than " + this.options.min.value } } if (this.options.max !== undefined) { if (this.options.max.value === undefined) throw new Error('The max.value parameter is not defined in the Length Inspector validator configuration.') if (length > this.options.max.value) { return this.options.max.message !== undefined ? this.options.max.message : "The value should not be longer than " + this.options.max.value } } } } LengthValidator.prototype.getObjectLength = function(value) { var result = 0 for (var key in value) { result++ } return result } $.oc.inspector.validators.length = LengthValidator }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validator.regex.js ================================================ /* * Inspector regex validator. */ +function ($) { "use strict"; var Base = $.oc.inspector.validators.base, BaseProto = Base.prototype var RegexValidator = function(options) { Base.call(this, options) } RegexValidator.prototype = Object.create(BaseProto) RegexValidator.prototype.constructor = Base RegexValidator.prototype.isValid = function(value) { if (this.options.pattern === undefined) { this.throwError('The pattern parameter is not defined in the Regex Inspector validator configuration.') } if (!this.isScalar(value)) { this.throwError('The Regex Inspector validator can only be used with string values.') } if (value === undefined || value === null) { return null } var string = $.trim(String(value)) if (string.length === 0) { return null } var regexObj = new RegExp(this.options.pattern, this.options.modifiers) return regexObj.test(string) ? null : this.getMessage() } $.oc.inspector.validators.regex = RegexValidator }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.validator.required.js ================================================ /* * Inspector required validator. */ +function ($) { "use strict"; var Base = $.oc.inspector.validators.base, BaseProto = Base.prototype var RequiredValidator = function(options) { Base.call(this, options) this.defaultMessage = 'The property is required.' } RequiredValidator.prototype = Object.create(BaseProto) RequiredValidator.prototype.constructor = Base RequiredValidator.prototype.isValid = function(value) { if (value === undefined || value === null) { return this.getMessage() } if (typeof value === 'boolean') { return value ? null : this.getMessage() } if (typeof value === 'object') { return !$.isEmptyObject(value) ? null : this.getMessage() } return $.trim(String(value)).length > 0 ? null : this.getMessage() } $.oc.inspector.validators.required = RequiredValidator }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.wrapper.base.js ================================================ /* * Inspector wrapper base class. */ +function ($) { "use strict"; // NAMESPACES // ============================ if ($.oc.inspector === undefined) $.oc.inspector = {} if ($.oc.inspector.wrappers === undefined) $.oc.inspector.wrappers = {} // CLASS DEFINITION // ============================ var Base = $.oc.foundation.base, BaseProto = Base.prototype var BaseWrapper = function($element, sourceWrapper, options) { this.$element = $element this.options = $.extend({}, BaseWrapper.DEFAULTS, typeof options == 'object' && options) this.switched = false this.configuration = null Base.call(this) if (!sourceWrapper) { if (!this.triggerShowingAndInit()) { // this.init() is called inside triggerShowing() return } this.surface = null this.title = null this.description = null } else { this.surface = sourceWrapper.surface this.title = sourceWrapper.title this.description = sourceWrapper.description sourceWrapper = null this.init() } } BaseWrapper.prototype = Object.create(BaseProto) BaseWrapper.prototype.constructor = Base BaseWrapper.prototype.dispose = function() { if (!this.switched) { this.$element.removeClass('inspector-open'); this.setInspectorVisibleFlag(false); this.$element.trigger('hidden.oc.inspector'); } if (this.surface !== null && this.surface.options.onGetInspectableElement === this.proxy(this.onGetInspectableElement)) { this.surface.options.onGetInspectableElement = null; } this.surface = null; this.$element = null; this.title = null; this.description = null; this.configuration = null; BaseProto.dispose.call(this) } BaseWrapper.prototype.init = function() { // Wrappers can create a new surface or inject an existing // surface to the UI they manage. // // If there is no surface provided in the wrapper constructor, // the wrapper first loads the Inspector configuration and values // and then calls the createSurfaceAndUi() method with all information // required for creating a new Inspector surface and UI. if (!this.surface) { this.loadConfiguration() } else { this.adoptSurface() } this.$element.addClass('inspector-open') this.$element.trigger('showed.oc.inspector') } // // Helper methods // BaseWrapper.prototype.getElementValuesInput = function() { return this.$element.find('> input[data-inspector-values]') } BaseWrapper.prototype.normalizePropertyCode = function(code, configuration) { var lowerCaseCode = code.toLowerCase() for (var index in configuration) { var propertyInfo = configuration[index] if (propertyInfo.property.toLowerCase() == lowerCaseCode) { return propertyInfo.property } } return code } BaseWrapper.prototype.isExternalParametersEditorEnabled = function() { return this.$element.closest('[data-inspector-external-parameters]').length > 0 } BaseWrapper.prototype.initSurface = function(containerElement, properties, values) { var options = this.$element.data() || {} options.enableExternalParameterEditor = this.isExternalParametersEditorEnabled() options.onGetInspectableElement = this.proxy(this.onGetInspectableElement) this.surface = new $.oc.inspector.surface( containerElement, properties, values, $.oc.inspector.helpers.generateElementUniqueId(this.$element.get(0)), options) } BaseWrapper.prototype.isLiveUpdateEnabled = function() { return false } // // Wrapper API // BaseWrapper.prototype.createSurfaceAndUi = function(properties, values) { } BaseWrapper.prototype.setInspectorVisibleFlag = function(value) { this.$element.data('oc.inspectorVisible', value) } BaseWrapper.prototype.adoptSurface = function() { this.surface.options.onGetInspectableElement = this.proxy(this.onGetInspectableElement) } BaseWrapper.prototype.cleanupAfterSwitch = function() { this.switched = true this.dispose() } // // Values // BaseWrapper.prototype.loadValues = function(configuration) { var $valuesField = this.getElementValuesInput(); if ($valuesField.length > 0) { var valuesStr = $.trim($valuesField.val()); try { return valuesStr.length === 0 ? {} : JSON.parse(valuesStr); } catch (err) { throw new Error('Error parsing Inspector field values. ' + err); } } var values = {}, attributes = this.$element.get(0).attributes; for (var i=0, len = attributes.length; i < len; i++) { var attribute = attributes[i], matches = []; if (matches = attribute.name.match(/^data-property-(.*)$/)) { // Important - values contained in data-property-xxx attributes are // considered strings and only parsed with JSON when they begin with // the json: protocol prefix. var normalizedPropertyName = this.normalizePropertyCode(matches[1], configuration), attrVal = attribute.value; if (attrVal.startsWith('json:')) { try { attrVal = JSON.parse(decodeURIComponent(attrVal.substring(5))); } catch (e) { attrVal = ''; } } values[normalizedPropertyName] = attrVal; } } return values; } BaseWrapper.prototype.applyValues = function(liveUpdateMode) { var $valuesField = this.getElementValuesInput(), values = liveUpdateMode ? this.surface.getValidValues() : this.surface.getValues(); if (liveUpdateMode) { // In the live update mode, when only valid values are applied, // we don't want to change all other values (invalid properties). var existingValues = this.loadValues(this.configuration); for (var property in values) { if (values[property] !== $.oc.inspector.invalidProperty) { existingValues[property] = values[property]; } } // Properties that use settings like ignoreIfPropertyEmpty could // be removed from the list returned by getValidValues(). Removed // properties should be removed from the result list. var filteredValues = {}; for (var property in existingValues) { if (values.hasOwnProperty(property)) { filteredValues[property] = existingValues[property]; } } values = filteredValues; } if ($valuesField.length > 0) { $valuesField.val(JSON.stringify(values)); } else { for (var property in values) { var value = values[property]; if (Array.isArray(value) || $.isPlainObject(value)) { value = 'json:' + encodeURIComponent(JSON.stringify(value)); } this.$element.attr('data-property-' + property, value); } } // In the live update mode the livechange event is triggered // regardless of whether Surface properties match or don't match // the original properties of the inspectable element. Without it // there could be undesirable side effects. if (liveUpdateMode) { this.$element.trigger('livechange'); } else { var hasChanges = false; if (this.isLiveUpdateEnabled()) { var currentValues = this.loadValues(this.configuration); // If the Inspector setup supports the live update mode, // evaluate changes as a difference between the current element // properties and internal properties stored in the Surface. // If there is no differences, the properties have already // been applied with a preceding live update. hasChanges = this.surface.hasChanges(currentValues); } else { hasChanges = this.surface.hasChanges(); } if (hasChanges) { this.$element.trigger('change'); } } } // // Configuration // BaseWrapper.prototype.loadConfiguration = function() { var configString = this.$element.data('inspector-config'), result = { properties: {}, title: null, description: null }; result.title = this.$element.data('inspector-title'); result.description = this.$element.data('inspector-description'); if (configString !== undefined) { result.properties = this.parseConfiguration(configString); this.configurationLoaded(result); return; } var $configurationField = this.$element.find('> input[data-inspector-config]'); if ($configurationField.length > 0) { result.properties = this.parseConfiguration($configurationField.val()); this.configurationLoaded(result); return; } var $form = this.$element.closest('form'), data = this.$element.data(), self = this; $.oc.stripeLoadIndicator.show(); $form.request($.oc.inspector.helpers.getEventHandler(this.$element, 'onGetInspectorConfiguration'), { data: data }) .done(function inspectorConfigurationRequestDoneClosure(data) { self.onConfigurationRequestDone(data, result); }) .fail(function inspectorConfigurationRequestErrorClosure(data) { self.$element.trigger('error.oc.inspector'); }) .always(function() { $.oc.stripeLoadIndicator.hide(); }); } BaseWrapper.prototype.parseConfiguration = function(configuration) { if (!Array.isArray(configuration) && !$.isPlainObject(configuration)) { if ($.trim(configuration) === 0) { return {}; } try { return JSON.parse(configuration); } catch(err) { throw new Error('Error parsing Inspector configuration. ' + err); } } else { return configuration; } } BaseWrapper.prototype.configurationLoaded = function(configuration) { var values = this.loadValues(configuration.properties); this.title = configuration.title; this.description = configuration.description; this.configuration = configuration; this.createSurfaceAndUi(configuration.properties, values); } BaseWrapper.prototype.onConfigurationRequestDone = function(data, result) { result.properties = this.parseConfiguration(data.configuration.properties) if (data.configuration.title !== undefined) { result.title = data.configuration.title } if (data.configuration.description !== undefined) { result.description = data.configuration.description } this.configurationLoaded(result) } // // Events // BaseWrapper.prototype.triggerShowingAndInit = function() { var e = $.Event('showing.oc.inspector'); this.$element.trigger(e, [{callback: this.proxy(this.init)}]); if (e.isDefaultPrevented()) { this.$element = null; return false; } if (!e.isPropagationStopped()) { this.init(); } } BaseWrapper.prototype.triggerHiding = function() { var hidingEvent = $.Event('hiding.oc.inspector'), values = this.surface.getValues() this.$element.trigger(hidingEvent, [{values: values}]) return !hidingEvent.isDefaultPrevented(); } BaseWrapper.prototype.onGetInspectableElement = function() { return this.$element; } BaseWrapper.DEFAULTS = { containerSupported: false }; $.oc.inspector.wrappers.base = BaseWrapper; }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.wrapper.container.js ================================================ /* * Inspector container wrapper. */ +function ($) { "use strict"; // CLASS DEFINITION // ============================ var Base = $.oc.inspector.wrappers.base, BaseProto = Base.prototype var InspectorContainer = function($element, surface, options) { if (!options.container) { throw new Error('Cannot create Inspector container wrapper without a container element.') } this.surfaceContainer = null Base.call(this, $element, surface, options) } InspectorContainer.prototype = Object.create(BaseProto) InspectorContainer.prototype.constructor = Base InspectorContainer.prototype.init = function() { this.registerHandlers() BaseProto.init.call(this) } InspectorContainer.prototype.dispose = function() { this.unregisterHandlers() this.removeControls() this.surfaceContainer = null BaseProto.dispose.call(this) } InspectorContainer.prototype.createSurfaceAndUi = function(properties, values) { this.buildUi() this.initSurface(this.surfaceContainer, properties, values) if (this.isLiveUpdateEnabled()) { this.surface.options.onChange = this.proxy(this.onLiveUpdate) } } InspectorContainer.prototype.adoptSurface = function() { this.buildUi() this.surface.moveToContainer(this.surfaceContainer) if (this.isLiveUpdateEnabled()) { this.surface.options.onChange = this.proxy(this.onLiveUpdate) } BaseProto.adoptSurface.call(this) } InspectorContainer.prototype.buildUi = function() { var scrollable = this.isScrollable(), head = this.buildHead(), layoutElements = this.buildLayout() layoutElements.headContainer.appendChild(head) if (scrollable) { var scrollpad = this.buildScrollpad() this.surfaceContainer = scrollpad.container layoutElements.bodyContainer.appendChild(scrollpad.scrollpad) $(scrollpad.scrollpad).scrollpad() } else { this.surfaceContainer = layoutElements.bodyContainer } this.setInspectorVisibleFlag(true) } InspectorContainer.prototype.buildHead = function() { var container = document.createElement('div'), header = document.createElement('h3'), paragraph = document.createElement('p'), detachButton = document.createElement('span'), closeButton = document.createElement('span') container.setAttribute('class', 'inspector-header') detachButton.setAttribute('class', 'oc-icon-external-link-square detach') closeButton.setAttribute('class', 'close') header.textContent = this.title paragraph.textContent = this.description closeButton.innerHTML = '×'; container.appendChild(header) container.appendChild(paragraph) container.appendChild(detachButton) container.appendChild(closeButton) return container } InspectorContainer.prototype.buildScrollpad = function() { var scrollpad = document.createElement('div'), scrollWrapper = document.createElement('div'), scrollableContainer = document.createElement('div') scrollpad.setAttribute('class', 'control-scrollpad') scrollpad.setAttribute('data-control', 'scrollpad') scrollWrapper.setAttribute('class', 'scroll-wrapper inspector-wrapper') scrollpad.appendChild(scrollWrapper) scrollWrapper.appendChild(scrollableContainer) return { scrollpad: scrollpad, container: scrollableContainer } } InspectorContainer.prototype.buildLayout = function() { var layout = document.createElement('div'), headRow = document.createElement('div'), bodyRow = document.createElement('div') layout.setAttribute('class', 'flex-layout-column fill-container') headRow.setAttribute('class', 'flex-layout-item fix') bodyRow.setAttribute('class', 'flex-layout-item stretch relative') layout.appendChild(headRow) layout.appendChild(bodyRow) this.options.container.get(0).appendChild(layout) $.oc.foundation.controlUtils.markDisposable(layout) this.registerLayoutHandlers(layout) return { headContainer: headRow, bodyContainer: bodyRow } } InspectorContainer.prototype.validateAndApply = function() { if (!this.surface.validate()) { return false } this.applyValues() return true } InspectorContainer.prototype.isScrollable = function() { return this.options.container.data('inspector-scrollable') !== undefined } InspectorContainer.prototype.isLiveUpdateEnabled = function() { return this.options.container.data('inspector-live-update') !== undefined } InspectorContainer.prototype.getLayout = function() { return this.options.container.get(0).querySelector('div.flex-layout-column') } InspectorContainer.prototype.registerLayoutHandlers = function(layout) { var $layout = $(layout) $layout.one('dispose-control', this.proxy(this.dispose)) $layout.on('click', 'span.close', this.proxy(this.onClose)) $layout.on('click', 'span.detach', this.proxy(this.onDetach)) } InspectorContainer.prototype.registerHandlers = function() { this.options.container.on('apply.oc.inspector', this.proxy(this.onApplyValues)) this.options.container.on('beforeContainerHide.oc.inspector', this.proxy(this.onBeforeHide)) } InspectorContainer.prototype.unregisterHandlers = function() { var $layout = $(this.getLayout()) this.options.container.off('apply.oc.inspector', this.proxy(this.onApplyValues)) this.options.container.off('beforeContainerHide.oc.inspector', this.proxy(this.onBeforeHide)) $layout.off('dispose-control', this.proxy(this.dispose)) $layout.off('click', 'span.close', this.proxy(this.onClose)) $layout.off('click', 'span.detach', this.proxy(this.onDetach)) if (this.surface !== null && this.surface.options.onChange === this.proxy(this.onLiveUpdate)) { this.surface.options.onChange = null } } InspectorContainer.prototype.removeControls = function() { if (this.isScrollable()) { this.options.container.find('.control-scrollpad').scrollpad('dispose') } var layout = this.getLayout() layout.parentNode.removeChild(layout) } InspectorContainer.prototype.onApplyValues = function(ev) { if (!this.validateAndApply()) { ev.preventDefault() return false } } InspectorContainer.prototype.onBeforeHide = function(ev) { if (!this.triggerHiding()) { ev.preventDefault() return false } } InspectorContainer.prototype.onClose = function(ev) { if (!this.validateAndApply()) { ev.preventDefault() return false } if (!this.triggerHiding()) { ev.preventDefault() return false } this.surface.dispose() this.dispose() } InspectorContainer.prototype.onLiveUpdate = function() { this.applyValues(true) } InspectorContainer.prototype.onDetach = function() { $.oc.inspector.manager.switchToPopup(this) } $.oc.inspector.wrappers.container = InspectorContainer }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/inspector/inspector.wrapper.popup.js ================================================ /* * Inspector popup wrapper. */ +function ($) { "use strict"; // CLASS DEFINITION // ============================ var Base = $.oc.inspector.wrappers.base, BaseProto = Base.prototype var InspectorPopup = function($element, surface, options) { this.$popoverContainer = null this.popoverObj = null this.cleaningUp = false Base.call(this, $element, surface, options) } InspectorPopup.prototype = Object.create(BaseProto) InspectorPopup.prototype.constructor = Base InspectorPopup.prototype.dispose = function() { this.unregisterHandlers(); this.$popoverContainer = null; this.popoverObj = null; BaseProto.dispose.call(this); } InspectorPopup.prototype.createSurfaceAndUi = function(properties, values, title, description) { this.showPopover(); this.initSurface(this.$popoverContainer.find('[data-surface-container]').get(0), properties, values); this.repositionPopover(); this.registerPopupHandlers(); } InspectorPopup.prototype.adoptSurface = function() { this.showPopover(); this.surface.moveToContainer(this.$popoverContainer.find('[data-surface-container]').get(0)); this.repositionPopover(); this.registerPopupHandlers(); BaseProto.adoptSurface.call(this); } InspectorPopup.prototype.cleanupAfterSwitch = function() { this.cleaningUp = true; this.switched = true; this.forceClose(); // The parent cleanupAfterSwitch() is not called because // disposing happens in onHide() triggered by forceClose() } InspectorPopup.prototype.getPopoverContents = function() { return '
    \

    \

    \ \
    \
    \
    \ ' } InspectorPopup.prototype.showPopover = function() { var offset = this.$element.data('inspector-offset'), offsetX = this.$element.data('inspector-offset-x'), offsetY = this.$element.data('inspector-offset-y'), placement = this.$element.data('inspector-placement'), fallbackPlacement = this.$element.data('inspector-fallback-placement'); if (offset === undefined) { offset = 15; } if (placement === undefined) { placement = 'bottom'; } if (fallbackPlacement === undefined) { fallbackPlacement = 'bottom'; } this.$element.ocPopover({ content: this.getPopoverContents(), highlightModalTarget: true, modal: true, placement: placement, fallbackPlacement: fallbackPlacement, containerClass: 'control-inspector', container: this.$element.data('inspector-container'), offset: offset, offsetX: offsetX, offsetY: offsetY, width: 450 }); this.setInspectorVisibleFlag(true); this.popoverObj = this.$element.data('oc.popover'); this.$popoverContainer = this.popoverObj.$container; this.$popoverContainer.addClass('inspector-temporary-placement'); if (this.options.inspectorCssClass !== undefined) { this.$popoverContainer.addClass(this.options.inspectorCssClass); } if (this.options.containerSupported) { var moveToContainerButton = $(''); this.$popoverContainer.find('.popover-head').append(moveToContainerButton); } this.$popoverContainer.find('[data-inspector-title]').text(this.title); this.$popoverContainer.find('[data-inspector-description]').text(this.description); } InspectorPopup.prototype.repositionPopover = function() { this.popoverObj.reposition(); this.$popoverContainer.removeClass('inspector-temporary-placement'); this.$popoverContainer.find('div[data-surface-container] > div').trigger('focus-control'); } InspectorPopup.prototype.forceClose = function() { this.$popoverContainer.trigger('close.oc.popover') } InspectorPopup.prototype.registerPopupHandlers = function() { this.surface.options.onPopupDisplayed = this.proxy(this.onPopupEditorDisplayed) this.surface.options.onPopupHidden = this.proxy(this.onPopupEditorHidden) this.popoverObj.options.onCheckDocumentClickTarget = this.proxy(this.onCheckDocumentClickTarget) this.$element.on('hiding.oc.popover', this.proxy(this.onBeforeHide)) this.$element.on('hide.oc.popover', this.proxy(this.onHide)) this.$popoverContainer.on('keydown', this.proxy(this.onPopoverKeyDown)) if (this.options.containerSupported) { this.$popoverContainer.on('click', 'span.inspector-move-to-container', this.proxy(this.onMoveToContainer)) } } InspectorPopup.prototype.unregisterHandlers = function() { this.popoverObj.options.onCheckDocumentClickTarget = null this.$element.off('hiding.oc.popover', this.proxy(this.onBeforeHide)) this.$element.off('hide.oc.popover', this.proxy(this.onHide)) this.$popoverContainer.off('keydown', this.proxy(this.onPopoverKeyDown)) if (this.options.containerSupported) { this.$popoverContainer.off('click', 'span.inspector-move-to-container', this.proxy(this.onMoveToContainer)) } this.surface.options.onPopupDisplayed = null this.surface.options.onPopupHidden = null } InspectorPopup.prototype.onBeforeHide = function(ev) { if (this.cleaningUp) { return } if (!this.surface.validate()) { ev.preventDefault() return false } if (!this.triggerHiding()) { ev.preventDefault() return false } this.applyValues() } InspectorPopup.prototype.onHide = function(ev) { this.dispose() } InspectorPopup.prototype.onPopoverKeyDown = function(ev) { if(ev.key === 'Enter') { $(ev.currentTarget).trigger('close.oc.popover') } } InspectorPopup.prototype.onPopupEditorDisplayed = function() { this.popoverObj.options.closeOnPageClick = false this.popoverObj.options.closeOnEsc = false } InspectorPopup.prototype.onPopupEditorHidden = function() { this.popoverObj.options.closeOnPageClick = true this.popoverObj.options.closeOnEsc = true } InspectorPopup.prototype.onCheckDocumentClickTarget = function(element) { if ($.contains(this.$element, element) || this.$element.get(0) === element) { return true } } InspectorPopup.prototype.onMoveToContainer = function() { $.oc.inspector.manager.switchToContainer(this) } $.oc.inspector.wrappers.popup = InspectorPopup }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/popover/README.md ================================================ # Popover Renders a richer version of a tooltip, called a popover. ## Examples ### Basic usage You may add `data-control="popover"` to an anchor or button to activate a popover. Use the `data-content` attribute to specify the contents. Basic popover ### Template content Define the popover content as a template and reference it with `data-content-from="#myPopoverContent"`. ```html ``` Template popover ### Event specified content ```js $('#btn1').on('showing.oc.popover', function(e, popover) { popover.options.content = '
    Some other content
    ' }) ``` Event content popover ## JavaScript API ```js $('#element').ocPopover({ content: '

    This is a popover

    ' placement: 'top' }) ``` ### Supported methods `.ocPopover('hide')` Closes the popover. There are 3 ways to close the popover: call it's `hide()` method, trigger the `close.oc.popover` on any element inside the popover or click an element with attribute `data-dismiss="popover"` inside the popover. ### Supported options - `placement`: top | bottom | left | right | center. The placement could automatically be changed if the popover doesn't fit into the desired position. - `fallbackPlacement`: top | bottom | left | right. The placement to use if the default placement and all other possible placements do not work. The default value is "bottom". - `content`: content HTML string or callback - `contentFrom`: selector to source the content HTML - `width`: content width, optional. If not specified, the content width will be used. - `modal`: make the popover modal - `highlightModalTarget`: "pop" the popover target above the overlay, making it highlighted. The feature assigns the target position relative. - `closeOnPageClick`: close the popover if the page was clicked outside the popover area. - `container`: the popover container selector or element. The default container is the document body. The container must be relative positioned. - `containerClass` - a CSS class to apply to the popover container element - `offset` - offset in pixels to add to the calculated position, to make the position more "random" - `offsetX` - X offset in pixels to add to the calculated position, to make the position more "random". If specified, overrides the offset property for the bottom and top popover placement. - `offsetY` - Y offset in pixels to add to the calculated position, to make the position more "random". If specified, overrides the offset property for the left and right popover placement. - `useAnimation`: adds animation to the open and close sequence, the equivalent of adding the CSS class 'fade' to the containerClass. ### Supported events - `showing.oc.popover` - triggered before the popover is displayed. Allows to override the popover options (for example the content) or cancel the action with e.preventDefault() - `show.oc.popover` - triggered after the popover is displayed. - `hiding.oc.popover` - triggered before the popover is closed. Allows to cancel the action with e.preventDefault() - `hide.oc.popover` - triggered after the popover is hidden. ================================================ FILE: modules/backend/assets/foundation/controls/popover/popover.js ================================================ /* * Popover plugin * * Documentation: ../docs/popover.md */ +function ($) { "use strict"; var Popover = function (element, options) { this.$el = $(element); this.options = options || {}; this.arrowSize = 15; this.docClickHandler = null; this.show(); } Popover.prototype.hide = function() { var e = $.Event('hiding.oc.popover', { relatedTarget: this.$el }); this.$el.trigger(e, this); if (e.isDefaultPrevented()) { return; } this.$container.removeClass('show'); if (this.options.modal) { this.$overlay.removeClass('show'); } this.disposeControls(); if (this.$container.hasClass('fade')) { this.$container.one('transitionend', $.proxy(this.hidePopover, this)); } else { this.hidePopover(); } } Popover.prototype.disposeControls = function() { if (this.$container) { $.oc.foundation.controlUtils.disposeControls(this.$container.get(0)); } } Popover.prototype.hidePopover = function() { this.$container.remove(); if (this.$overlay) { this.$overlay.remove(); } this.$el.removeClass('popover-highlight'); this.$el.trigger('hide.oc.popover'); this.$overlay = false; this.$container = false; this.$el.data('oc.popover', null); $(document.body).removeClass('popover-open'); $(document).unbind('mousedown', this.docClickHandler); $(document).off('.oc.popover'); this.docClickHandler = null; this.options.onCheckDocumentClickTarget = null; } Popover.prototype.show = function(options) { var self = this; // Trigger the show event var e = $.Event('showing.oc.popover', { relatedTarget: this.$el }) this.$el.trigger(e, this) if (e.isDefaultPrevented()) { return; } // Create the popover container and overlay this.$container = $('
    ').addClass('control-popover'); if (this.options.containerClass) { this.$container.addClass(this.options.containerClass); } if (this.options.useAnimation) { this.$container.addClass('fade'); } var $content = $('
    ').html(this.getContent()); this.$container.append($content); if (this.options.width) { this.$container.width(this.options.width); } // Create overlay this.$overlay = $('
    ').addClass('popover-overlay'); $(document.body).append(this.$overlay); if (this.options.highlightModalTarget) { this.$el.addClass('popover-highlight'); this.$el.blur(); } if (this.options.container) { $(this.options.container).append(this.$container); } else { $(document.body).append(this.$container); } // Determine the popover position this.reposition(); $(window).on('resize', function() { if (self.$container) { self.reposition(); } }); // Display the popover this.$container.addClass('show'); if (this.options.modal) { this.$overlay.addClass('show'); } $(document.body).addClass('popover-open'); var showEvent = jQuery.Event('show.oc.popover', { relatedTarget: this.$container.get(0) }); this.$el.trigger(showEvent); // Autofocus implementation $('[data-popover-autofocus]:first', this.$container).focus(); // Bind events this.$container.on('close.oc.popover', function(e){ self.hide(); }); this.$container.on('click', '[data-dismiss=popover]', function(e){ self.hide(); return false; }); this.docClickHandler = $.proxy(this.onDocumentClick, this); $(document).bind('mousedown', this.docClickHandler); if (this.options.closeOnEsc) { $(document).on('keyup.oc.popover', function(e){ if ($(e.target).hasClass('select2-offscreen')) { return false; } // The value of the option could be changed after the popover is displayed if (!self.options.closeOnEsc) { return false; } if (e.key === 'Escape') { self.hide(); return false; } }); } } Popover.prototype.reposition = function() { var placement = this.calcPlacement(), position = this.calcPosition(placement); this.$container.removeClass('placement-center placement-bottom placement-top placement-left placement-right'); this.$container.css({ left: position.x, top: position.y }).addClass('placement-'+placement); } Popover.prototype.getContainer = function () { return this.$container.get(0); } Popover.prototype.getContent = function () { if (this.options.contentFrom) { return $(this.options.contentFrom).html(); } if (typeof this.options.content == 'function') { return this.options.content.call(this.$el[0], this); } return this.options.content; } Popover.prototype.calcDimensions = function() { var documentWidth = $(document).width(), documentHeight = $(document).height(), targetOffset = this.$el.offset(), targetWidth = this.$el.outerWidth(), targetHeight = this.$el.outerHeight(); return { containerWidth: this.$container.outerWidth() + this.arrowSize, containerHeight: this.$container.outerHeight() + this.arrowSize, targetOffset: targetOffset, targetHeight: targetHeight, targetWidth: targetWidth, spaceLeft: targetOffset.left, spaceRight: documentWidth - (targetWidth + targetOffset.left), spaceTop: targetOffset.top, spaceBottom: documentHeight - (targetHeight + targetOffset.top), spaceHorizontalBottom: documentHeight - targetOffset.top, spaceVerticalRight: documentWidth - targetOffset.left, documentWidth: documentWidth }; } Popover.prototype.fitsLeft = function(dimensions) { return dimensions.spaceLeft >= dimensions.containerWidth && dimensions.spaceHorizontalBottom >= dimensions.containerHeight; } Popover.prototype.fitsRight = function(dimensions) { return dimensions.spaceRight >= dimensions.containerWidth && dimensions.spaceHorizontalBottom >= dimensions.containerHeight; } Popover.prototype.fitsBottom = function(dimensions) { return dimensions.spaceBottom >= dimensions.containerHeight && dimensions.spaceVerticalRight >= dimensions.containerWidth; } Popover.prototype.fitsTop = function(dimensions) { return dimensions.spaceTop >= dimensions.containerHeight && dimensions.spaceVerticalRight >= dimensions.containerWidth; } Popover.prototype.calcPlacement = function() { var placement = this.options.placement, dimensions = this.calcDimensions(); if (placement == 'center') { return placement; } if (placement != 'bottom' && placement != 'top' && placement != 'left' && placement != 'right') { placement = 'bottom'; } var placementFunctions = { top: this.fitsTop, bottom: this.fitsBottom, left: this.fitsLeft, right: this.fitsRight }; if (placementFunctions[placement](dimensions)) { return placement; } for (var index in placementFunctions) { if (placementFunctions[index](dimensions)) { return index; } } return this.options.fallbackPlacement; } Popover.prototype.calcPosition = function(placement) { var dimensions = this.calcDimensions(), result; switch (placement) { case 'left': var realOffset = this.options.offsetY === undefined ? this.options.offset : this.options.offsetY; result = {x: (dimensions.targetOffset.left - dimensions.containerWidth), y: dimensions.targetOffset.top + realOffset}; break; case 'top': var realOffset = this.options.offsetX === undefined ? this.options.offset : this.options.offsetX; result = {x: dimensions.targetOffset.left + realOffset, y: (dimensions.targetOffset.top - dimensions.containerHeight)}; break; case 'bottom': var realOffset = this.options.offsetX === undefined ? this.options.offset : this.options.offsetX; result = {x: dimensions.targetOffset.left + realOffset, y: (dimensions.targetOffset.top + dimensions.targetHeight + this.arrowSize)}; break; case 'right': var realOffset = this.options.offsetY === undefined ? this.options.offset : this.options.offsetY; result = {x: (dimensions.targetOffset.left + dimensions.targetWidth + this.arrowSize), y: dimensions.targetOffset.top + realOffset}; break; case 'center' : var windowHeight = $(window).height(); result = {x: (dimensions.documentWidth/2 - dimensions.containerWidth/2), y: (windowHeight/2 - dimensions.containerHeight/2)}; if (result.y < 40) { result.y = 40; } break; } if (!this.options.container) { return result; } var $container = $(this.options.container), containerOffset = $container.offset(); result.x -= containerOffset.left; result.y -= containerOffset.top; return result; } Popover.prototype.onDocumentClick = function(e) { if (!this.options.closeOnPageClick) { return; } if (this.options.onCheckDocumentClickTarget && this.options.onCheckDocumentClickTarget(e.target)) { return; } if ($.contains(this.$container.get(0), e.target)) { return; } this.hide(); } Popover.DEFAULTS = { placement: 'bottom', fallbackPlacement: 'bottom', content: '

    Popover content

    ', contentFrom: null, width: false, modal: false, highlightModalTarget: false, closeOnPageClick: true, closeOnEsc: true, container: false, containerClass: null, offset: 15, useAnimation: false, onCheckDocumentClickTarget: null } // POPOVER PLUGIN DEFINITION // ============================ var old = $.fn.ocPopover; $.fn.ocPopover = function (option) { var args = Array.prototype.slice.call(arguments, 1), result this.each(function () { var $this = $(this) var data = $this.data('oc.popover') var options = $.extend({}, Popover.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.popover', (data = new Popover(this, options))) if (typeof option == 'string') result = data[option].apply(data, args); if (typeof result != 'undefined') return false; }); return result ? result : this; } $.fn.ocPopover.Constructor = Popover; // POPOVER NO CONFLICT // ================= $.fn.ocPopover.noConflict = function () { $.fn.ocPopover = old; return this; } // POPOVER DATA-API // =============== $(document).on('click', '[data-control=popover]', function(e){ $(this).ocPopover(); return false; }) }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/controls/popover/popover.less ================================================ // // Popover // -------------------------------------------------- @color-popover-bg: @popup-bg; @color-popover-border: rgba(0,0,0,.15); @color-popover-head-bg: @popup-bg; // @tertiary-bg @color-popover-head-text: @primary-color; @color-popover-danger-bg: #ab2a1c; div.control-popover { position: absolute; background-clip: content-box; left: 0; top: 0; z-index: @zindex-popover; visibility: hidden; &.fade, &.show { visibility: visible; } &.fade { & > div { opacity: 0; transition: all 0.3s, width 0s; transform: scale(0.7); } } &.fade.show { & > div { opacity: 1; transform: scale(1); } } & > div { position: relative; background: @color-popover-bg; box-shadow: @overlay-box-shadow; border-radius: 6px; &:after, &:before { position: absolute; } &:after { z-index: @zindex-popover + 1; } &:before { z-index: @zindex-popover; } } &.placement-bottom { > div { &:after { .triangle(up, 15px, 8px, @color-popover-bg); left: 15px; top: -8px; } &:before { .triangle(up, 17px, 9px, @color-popover-border); left: 14px; top: -9px; } } &.placement-bottom-right > div { &:after { left: auto; right: 15px; } &:before { left: auto; right: 14px; } } } &.placement-top > div { &:after { .triangle(down, 15px, 8px, @color-popover-bg); left: 15px; bottom: -8px; } &:before { .triangle(down, 17px, 9px, @color-popover-border); left: 14px; bottom: -9px; } } &.placement-left > div { &:after { .triangle(right, 8px, 15px, @color-popover-bg); right: -8px; top: 7px; } &:before { .triangle(right, 9px, 17px, @color-popover-border); right: -9px; top: 6px; } } &.placement-right > div { &:after { .triangle(left, 8px, 15px, @color-popover-bg); left: -8px; top: 7px; } &:before { .triangle(left, 9px, 17px, @color-popover-border); left: -9px; top: 6px; } } div.popover-body { padding: 15px; &.form-container { padding-bottom: 0; } } div.popover-footer { padding: 0 20px 20px 20px; } .popover-head { background: @color-popover-head-bg; padding: 14px 16px; position: relative; color: @color-popover-head-text; .border-top-radius(6px); border-bottom: 1px solid @color-popover-border; &:before { z-index: @zindex-popover + 2; position: absolute; } h3 { font-size: @font-size-base; font-weight: 600; margin-top: 0; margin-bottom: 0; padding-right: 15px; line-height: 130%; } p { font-size: @font-size-base - 2; font-weight: normal; margin: 5px 0 0 0; &:empty { display: none; } } .btn-close, .close { float: none; position: absolute; right: 11px; top: 12px; color: @color-popover-head-text; outline: none; opacity: .4; &:hover { opacity: 1; } } .inspector-move-to-container { opacity: .4; position: absolute; top: 14px; right: 26px; float: none; color: @close-color; cursor: pointer; text-decoration: none; line-height: 17px; &:hover { opacity: 1; color: @close-color; } &:before { .transform(~'rotate(270deg)'); } } } &.placement-bottom .popover-head:before { .triangle(up, 15px, 8px, @color-popover-head-bg); left: 15px; top: -8px; } &.placement-left .popover-head:before { .triangle(right, 8px, 15px, @color-popover-head-bg); right: -8px; top: 7px; } &.placement-right .popover-head:before { .triangle(left, 8px, 15px, @color-popover-head-bg); left: -8px; top: 7px; } &.popover-danger { > div { color: #fff; background-color: @color-popover-danger-bg; .popover-head { p, h3 { color: #fff; } .btn-close { filter: var(--bs-btn-close-white-filter); } } } &.placement-top { > div:after { .triangle(down, 15px, 8px, @color-popover-danger-bg); } } &.placement-bottom { > div:after, .popover-head:before { .triangle(up, 15px, 8px, @color-popover-danger-bg); } } &.placement-left { > div:after, .popover-head:before { .triangle(right, 8px, 15px, @color-popover-danger-bg); } } &.placement-right { > div:after, .popover-head:before { .triangle(left, 8px, 15px, @color-popover-danger-bg); } } .popover-head { color: #fff; background-color: @color-popover-danger-bg; border-bottom: 2px solid rgba(255,255,255,.15); .close { color: #fff; text-shadow: none; } } } div.popover-fixed-height { height: 300px; } } .popover-highlight { position: relative; z-index: (@zindex-popover - 2) !important; &:hover, &:active, &:focus { z-index: (@zindex-popover - 2) !important; } } div.popover-overlay-container { position: fixed; left: 0; top: 0; right: 0; bottom: 0; z-index: @zindex-popover - 3; font-size: @font-size-base; > div.control-popover { > div { border-radius: @border-radius-base; } } } div.popover-overlay { position: fixed; left: 0; top: 0; right: 0; bottom: 0; background: @overlay-background; z-index: @zindex-popover - 3; display: none; &.show { display: block; } } @media (max-width: @screen-sm) { body.popover-open { overflow: hidden; .control-popover { overflow: auto; overflow-y: scroll; position: fixed; margin: 0; padding: 10px; width: 100% !important; z-index: @zindex-popover + 3; top: auto !important; right: 0 !important; bottom: 0 !important; left: 0 !important; > div { padding: 0; // min-height: 100%; &:before, &:after { display: none; } } div.popover-fixed-height { height: 100%; min-height: 100%; } .popover-head:before { display: none; } } } div.popover-overlay { display: block; } } ================================================ FILE: modules/backend/assets/foundation/controls/popup/README.md ================================================ # Popups Displays a modal popup, based on the Bootstrap modal implementation. - [Examples](#examples) - [Inline popups](#inline-popups) - [Remote popups](#remote-popups) - [API documentation](#api-docs) ## Examples Launch basic content

    Launch Confirmation dialog ## Inline popups An inline popup places the popup content inside the current page, hidden from the view. For example, this container will not be visible on the page. ```html ``` Use the `data-toggle="modal"` HTML attribute to launch this container as a popup. ```html Launch basic content ``` ## Remote popups Content for the popup can be loaded remotely using an AJAX request. Use the `data-handler` attribute to populate a popup with the contents of an AJAX handler. ```html Launch Ajax Form ``` Using the `data-ajax` attribute you can refer to an external file or URL directly. ```html Launch Ajax Form ``` The partial for your rendered popup should follow this structure: ```html ``` ## API documentation ### Options: - content: content HTML string or callback ### Data attributes - data-control="popup" - enables the ajax popup plugin - data-ajax="popup-content.htm" - ajax content to load - data-handler="onLoadContent" - October ajax request name - data-keyboard="false" - Allow popup to be closed with the keyboard - data-extra-data="file_id: 1" - October ajax request data - data-size="large" - Popup size, available sizes: giant, huge, large, small, tiny ### JavaScript API ```js $('a#someLink').popup({ ajax: 'popup-content.htm' }) $('a#someLink').popup({ handler: 'onLoadSomePopup' }) $('a#someLink').popup({ handler: 'onLoadSomePopup', extraData: { id: 3 } }) ``` ================================================ FILE: modules/backend/assets/foundation/controls/popup/popup.js ================================================ /* * Ajax Popup plugin * * Documentation: ../docs/popup.md * * Require: * - bootstrap/modal */ +function($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype // POPUP CLASS DEFINITION // ============================ var Popup = function(element, options) { this.options = options; this.$el = $(element); this.$container = null; this.$modal = null; this.$backdrop = null; this.isOpen = false; this.isLoading = false; this.firstDiv = null; this.allowHide = true; this.$container = this.createPopupContainer() this.$content = $('.modal-content:first', this.$container); this.$dialog = $('.modal-dialog:first', this.$container); this.$modal = this.$container.modal({ show: false, backdrop: false, keyboard: this.options.keyboard, focus: false }); $.oc.foundation.controlUtils.markDisposable(element); Base.call(this); this.initEvents(); this.init(); } Popup.prototype = Object.create(BaseProto) Popup.prototype.constructor = Popup Popup.DEFAULTS = { ajax: null, handler: null, keyboard: true, extraData: {}, content: null, size: null, adaptiveHeight: false, zIndex: null } Popup.prototype.init = function() { var self = this; // Do not allow the same popup to open twice if (self.isOpen) { return; } // Show loading panel this.setBackdrop(true); if (!this.options.content) { this.setLoading(true); } // October AJAX if (this.options.handler) { this.$el.request(this.options.handler, { data: paramToObj('data-extra-data', this.options.extraData), success: function(data, statusCode, xhr) { if (data instanceof Blob) { if (self.isLoading) { self.hideLoading(); } else { self.hide(); } self.triggerEvent('popup:download'); this.success(data, statusCode, xhr); return; } this.success(data, statusCode, xhr).done(function() { self.setContent(data.result); $(window).trigger('ajaxUpdateComplete', [this, data, statusCode, xhr]); self.triggerEvent('popupComplete'); self.triggerEvent('complete.oc.popup'); }); }, error: function(data, statusCode, xhr) { this.error(data, statusCode, xhr).done(function() { if (self.isLoading) { self.hideLoading(); } else { self.hide(); } self.triggerEvent('popupError'); self.triggerEvent('error.oc.popup'); }); }, cancel: function() { if (self.isLoading) { self.hideLoading(); } else { self.hide(); } } }); } // Regular AJAX else if (this.options.ajax) { $.ajax({ url: this.options.ajax, data: paramToObj('data-extra-data', this.options.extraData), success: function(data) { self.setContent(data) }, cache: false }); } // Specified content else if (this.options.content) { var content = typeof this.options.content == 'function' ? this.options.content.call(this.$el[0], this) : this.options.content; this.setContent(content); } } Popup.prototype.initEvents = function() { var self = this; // Duplicate the popup reference on the .control-popup container this.$container.data('oc.popup', this); // Hook in to BS Modal events this.$modal.on('hide.bs.modal', function() { self.triggerEvent('hide.oc.popup'); self.isOpen = false; self.setBackdrop(false); }); this.$modal.on('hidden.bs.modal', function() { self.triggerEvent('hidden.oc.popup'); $.oc.foundation.controlUtils.disposeControls(self.$container.get(0)); self.$container.remove(); $(document.body).removeClass('modal-open'); self.dispose(); }); this.$modal.on('show.bs.modal', function() { self.isOpen = true; self.setBackdrop(true); $(document.body).addClass('modal-open'); }); this.$modal.on('shown.bs.modal', function() { self.triggerEvent('shown.oc.popup'); }); this.$modal.on('close.oc.popup', function() { self.hide(); return false; }); oc.Events.dispatch('popup:show'); } Popup.prototype.dispose = function() { this.$modal.off('hide.bs.modal'); this.$modal.off('hidden.bs.modal'); this.$modal.off('show.bs.modal'); this.$modal.off('shown.bs.modal'); this.$modal.off('close.oc.popup'); this.$el.off('dispose-control', this.proxy(this.dispose)); this.$el.removeData('oc.popup'); this.$container.removeData('oc.popup'); this.$container = null; this.$content = null; this.$dialog = null; this.$modal = null; this.$el = null; // In some cases options could contain callbacks, // so it's better to clean them up too. this.options = null; BaseProto.dispose.call(this); } Popup.prototype.createPopupContainer = function() { var modal = $('
    ').prop({ class: 'control-popup modal fade', role: 'dialog', tabindex: -1 }), modalDialog = $('
    ').addClass('modal-dialog'), modalContent = $('
    ').addClass('modal-content'); if (this.options.size) { modalDialog.addClass('size-' + this.options.size); } if (this.options.adaptiveHeight) { modalDialog.addClass('adaptive-height'); } if (this.options.zIndex !== null) { modal.css('z-index', this.options.zIndex + 20); } return modal.append(modalDialog.append(modalContent)); } Popup.prototype.setContent = function(contents) { var contentNode = $(contents); // Set the popup size from the inner contents instead // of needing it from the calling code if (contentNode.data('popup-size')) { this.$dialog.addClass('size-' + contentNode.data('popup-size')); } else { var $defaultSize = $('[data-popup-size]', contentNode); if ($defaultSize.length > 0) { this.$dialog.addClass('size-' + $defaultSize.data('popup-size')); } } this.setLoading(false); this.$modal.modal('show'); this.$content.html(contentNode); this.triggerShowEvent(); // Duplicate the popup object reference on to the first div // inside the popup. Eg: $('#firstDiv').popup('hide') this.firstDiv = this.$content.find('>div:first'); if (this.firstDiv.length > 0) { this.firstDiv.data('oc.popup', this) } var $defaultFocus = $('[default-focus],[autofocus]', this.$content); if ($defaultFocus.is(":visible")) { window.setTimeout(function() { $defaultFocus.focus(); $defaultFocus = null; }, 300); } } Popup.prototype.setBackdrop = function(val) { if (val && !this.$backdrop) { this.$backdrop = $('
    ' + entry.label + '
    ' + fragments.join("") + '
    '; if (options.legend.container != null) $(options.legend.container).html(table); else { var pos = "", p = options.legend.position, m = options.legend.margin; if (m[0] == null) m = [m, m]; if (p.charAt(0) == "n") pos += 'top:' + (m[1] + plotOffset.top) + 'px;'; else if (p.charAt(0) == "s") pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;'; if (p.charAt(1) == "e") pos += 'right:' + (m[0] + plotOffset.right) + 'px;'; else if (p.charAt(1) == "w") pos += 'left:' + (m[0] + plotOffset.left) + 'px;'; var legend = $('
    ' + table.replace('style="', 'style="position:absolute;' + pos +';') + '
    ').appendTo(placeholder); if (options.legend.backgroundOpacity != 0.0) { // put in the transparent background // separately to avoid blended labels and // label boxes var c = options.legend.backgroundColor; if (c == null) { c = options.grid.backgroundColor; if (c && typeof c == "string") c = $.color.parse(c); else c = $.color.extract(legend, 'background-color'); c.a = 1; c = c.toString(); } var div = legend.children(); $('
    ').prependTo(legend).css('opacity', options.legend.backgroundOpacity); } } } // interactive features var highlights = [], redrawTimeout = null; // returns the data item the mouse is over, or null if none is found function findNearbyItem(mouseX, mouseY, seriesFilter) { var maxDistance = options.grid.mouseActiveRadius, smallestDistance = maxDistance * maxDistance + 1, item = null, foundPoint = false, i, j, ps; for (i = series.length - 1; i >= 0; --i) { if (!seriesFilter(series[i])) continue; var s = series[i], axisx = s.xaxis, axisy = s.yaxis, points = s.datapoints.points, mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster my = axisy.c2p(mouseY), maxx = maxDistance / axisx.scale, maxy = maxDistance / axisy.scale; ps = s.datapoints.pointsize; // with inverse transforms, we can't use the maxx/maxy // optimization, sadly if (axisx.options.inverseTransform) maxx = Number.MAX_VALUE; if (axisy.options.inverseTransform) maxy = Number.MAX_VALUE; if (s.lines.show || s.points.show) { for (j = 0; j < points.length; j += ps) { var x = points[j], y = points[j + 1]; if (x == null) continue; // For points and lines, the cursor must be within a // certain distance to the data point if (x - mx > maxx || x - mx < -maxx || y - my > maxy || y - my < -maxy) continue; // We have to calculate distances in pixels, not in // data units, because the scales of the axes may be different var dx = Math.abs(axisx.p2c(x) - mouseX), dy = Math.abs(axisy.p2c(y) - mouseY), dist = dx * dx + dy * dy; // we save the sqrt // use <= to ensure last point takes precedence // (last generally means on top of) if (dist < smallestDistance) { smallestDistance = dist; item = [i, j / ps]; } } } if (s.bars.show && !item) { // no other point can be nearby var barLeft = s.bars.align == "left" ? 0 : -s.bars.barWidth/2, barRight = barLeft + s.bars.barWidth; for (j = 0; j < points.length; j += ps) { var x = points[j], y = points[j + 1], b = points[j + 2]; if (x == null) continue; // for a bar graph, the cursor must be inside the bar if (series[i].bars.horizontal ? (mx <= Math.max(b, x) && mx >= Math.min(b, x) && my >= y + barLeft && my <= y + barRight) : (mx >= x + barLeft && mx <= x + barRight && my >= Math.min(b, y) && my <= Math.max(b, y))) item = [i, j / ps]; } } } if (item) { i = item[0]; j = item[1]; ps = series[i].datapoints.pointsize; return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps), dataIndex: j, series: series[i], seriesIndex: i }; } return null; } function onMouseMove(e) { if (options.grid.hoverable) triggerClickHoverEvent("plothover", e, function (s) { return s["hoverable"] != false; }); } function onMouseLeave(e) { if (options.grid.hoverable) triggerClickHoverEvent("plothover", e, function (s) { return false; }); } function onClick(e) { triggerClickHoverEvent("plotclick", e, function (s) { return s["clickable"] != false; }); } // trigger click or hover event (they send the same parameters // so we share their code) function triggerClickHoverEvent(eventname, event, seriesFilter) { var offset = eventHolder.offset(), canvasX = event.pageX - offset.left - plotOffset.left, canvasY = event.pageY - offset.top - plotOffset.top, pos = canvasToAxisCoords({ left: canvasX, top: canvasY }); pos.pageX = event.pageX; pos.pageY = event.pageY; var item = findNearbyItem(canvasX, canvasY, seriesFilter); if (item) { // fill in mouse pos for any listeners out there item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left, 10); item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top, 10); } if (options.grid.autoHighlight) { // clear auto-highlights for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.auto == eventname && !(item && h.series == item.series && h.point[0] == item.datapoint[0] && h.point[1] == item.datapoint[1])) unhighlight(h.series, h.point); } if (item) highlight(item.series, item.datapoint, eventname); } placeholder.trigger(eventname, [ pos, item ]); } function triggerRedrawOverlay() { var t = options.interaction.redrawOverlayInterval; if (t == -1) { // skip event queue drawOverlay(); return; } if (!redrawTimeout) redrawTimeout = setTimeout(drawOverlay, t); } function drawOverlay() { redrawTimeout = null; // draw highlights octx.save(); overlay.clear(); octx.translate(plotOffset.left, plotOffset.top); var i, hi; for (i = 0; i < highlights.length; ++i) { hi = highlights[i]; if (hi.series.bars.show) drawBarHighlight(hi.series, hi.point); else drawPointHighlight(hi.series, hi.point); } octx.restore(); executeHooks(hooks.drawOverlay, [octx]); } function highlight(s, point, auto) { if (typeof s == "number") s = series[s]; if (typeof point == "number") { var ps = s.datapoints.pointsize; point = s.datapoints.points.slice(ps * point, ps * (point + 1)); } var i = indexOfHighlight(s, point); if (i == -1) { highlights.push({ series: s, point: point, auto: auto }); triggerRedrawOverlay(); } else if (!auto) highlights[i].auto = false; } function unhighlight(s, point) { if (s == null && point == null) { highlights = []; triggerRedrawOverlay(); return; } if (typeof s == "number") s = series[s]; if (typeof point == "number") { var ps = s.datapoints.pointsize; point = s.datapoints.points.slice(ps * point, ps * (point + 1)); } var i = indexOfHighlight(s, point); if (i != -1) { highlights.splice(i, 1); triggerRedrawOverlay(); } } function indexOfHighlight(s, p) { for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.series == s && h.point[0] == p[0] && h.point[1] == p[1]) return i; } return -1; } function drawPointHighlight(series, point) { var x = point[0], y = point[1], axisx = series.xaxis, axisy = series.yaxis, highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(); if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) return; var pointRadius = series.points.radius + series.points.lineWidth / 2; octx.lineWidth = pointRadius; octx.strokeStyle = highlightColor; var radius = 1.5 * pointRadius; x = axisx.p2c(x); y = axisy.p2c(y); octx.beginPath(); if (series.points.symbol == "circle") octx.arc(x, y, radius, 0, 2 * Math.PI, false); else series.points.symbol(octx, x, y, radius, false); octx.closePath(); octx.stroke(); } function drawBarHighlight(series, point) { var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(), fillStyle = highlightColor, barLeft = series.bars.align == "left" ? 0 : -series.bars.barWidth/2; octx.lineWidth = series.bars.lineWidth; octx.strokeStyle = highlightColor; drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth, 0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth); } function getColorOrGradient(spec, bottom, top, defaultColor) { if (typeof spec == "string") return spec; else { // assume this is a gradient spec; IE currently only // supports a simple vertical gradient properly, so that's // what we support too var gradient = ctx.createLinearGradient(0, top, 0, bottom); for (var i = 0, l = spec.colors.length; i < l; ++i) { var c = spec.colors[i]; if (typeof c != "string") { var co = $.color.parse(defaultColor); if (c.brightness != null) co = co.scale('rgb', c.brightness); if (c.opacity != null) co.a *= c.opacity; c = co.toString(); } gradient.addColorStop(i / (l - 1), c); } return gradient; } } } // Add the plot function to the top level of the jQuery object $.plot = function(placeholder, data, options) { //var t0 = new Date(); var plot = new Plot($(placeholder), data, options, $.plot.plugins); //(window.console ? console.log : alert)("time used (msecs): " + ((new Date()).getTime() - t0.getTime())); return plot; }; $.plot.version = "0.8.2-alpha"; $.plot.plugins = []; // Also add the plot function as a chainable property $.fn.plot = function(data, options) { return this.each(function() { $.plot(this, data, options); }); }; // round to nearby lower multiple of base function floorInBase(n, base) { return base * Math.floor(n / base); } })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.navigate.js ================================================ /* Flot plugin for adding the ability to pan and zoom the plot. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. The default behaviour is double click and scrollwheel up/down to zoom in, drag to pan. The plugin defines plot.zoom({ center }), plot.zoomOut() and plot.pan( offset ) so you easily can add custom controls. It also fires "plotpan" and "plotzoom" events, useful for synchronizing plots. The plugin supports these options: zoom: { interactive: false trigger: "dblclick" // or "click" for single click amount: 1.5 // 2 = 200% (zoom in), 0.5 = 50% (zoom out) } pan: { interactive: false cursor: "move" // CSS mouse cursor value used when dragging, e.g. "pointer" frameRate: 20 } xaxis, yaxis, x2axis, y2axis: { zoomRange: null // or [ number, number ] (min range, max range) or false panRange: null // or [ number, number ] (min, max) or false } "interactive" enables the built-in drag/click behaviour. If you enable interactive for pan, then you'll have a basic plot that supports moving around; the same for zoom. "amount" specifies the default amount to zoom in (so 1.5 = 150%) relative to the current viewport. "cursor" is a standard CSS mouse cursor string used for visual feedback to the user when dragging. "frameRate" specifies the maximum number of times per second the plot will update itself while the user is panning around on it (set to null to disable intermediate pans, the plot will then not update until the mouse button is released). "zoomRange" is the interval in which zooming can happen, e.g. with zoomRange: [1, 100] the zoom will never scale the axis so that the difference between min and max is smaller than 1 or larger than 100. You can set either end to null to ignore, e.g. [1, null]. If you set zoomRange to false, zooming on that axis will be disabled. "panRange" confines the panning to stay within a range, e.g. with panRange: [-10, 20] panning stops at -10 in one end and at 20 in the other. Either can be null, e.g. [-10, null]. If you set panRange to false, panning on that axis will be disabled. Example API usage: plot = $.plot(...); // zoom default amount in on the pixel ( 10, 20 ) plot.zoom({ center: { left: 10, top: 20 } }); // zoom out again plot.zoomOut({ center: { left: 10, top: 20 } }); // zoom 200% in on the pixel (10, 20) plot.zoom({ amount: 2, center: { left: 10, top: 20 } }); // pan 100 pixels to the left and 20 down plot.pan({ left: -100, top: 20 }) Here, "center" specifies where the center of the zooming should happen. Note that this is defined in pixel space, not the space of the data points (you can use the p2c helpers on the axes in Flot to help you convert between these). "amount" is the amount to zoom the viewport relative to the current range, so 1 is 100% (i.e. no change), 1.5 is 150% (zoom in), 0.7 is 70% (zoom out). You can set the default in the options. */ // First two dependencies, jquery.event.drag.js and // jquery.mousewheel.js, we put them inline here to save people the // effort of downloading them. /* jquery.event.drag.js ~ v1.5 ~ Copyright (c) 2008, Three Dub Media (http://threedubmedia.com) Licensed under the MIT License ~ http://threedubmedia.googlecode.com/files/MIT-LICENSE.txt */ (function(a){function e(h){var k,j=this,l=h.data||{};if(l.elem)j=h.dragTarget=l.elem,h.dragProxy=d.proxy||j,h.cursorOffsetX=l.pageX-l.left,h.cursorOffsetY=l.pageY-l.top,h.offsetX=h.pageX-h.cursorOffsetX,h.offsetY=h.pageY-h.cursorOffsetY;else if(d.dragging||l.which>0&&h.which!=l.which||a(h.target).is(l.not))return;switch(h.type){case"mousedown":return a.extend(l,a(j).offset(),{elem:j,target:h.target,pageX:h.pageX,pageY:h.pageY}),b.add(document,"mousemove mouseup",e,l),i(j,!1),d.dragging=null,!1;case!d.dragging&&"mousemove":if(g(h.pageX-l.pageX)+g(h.pageY-l.pageY) max) { // make sure min < max var tmp = min; min = max; max = tmp; } //Check that we are in panRange if (pr) { if (pr[0] != null && min < pr[0]) { min = pr[0]; } if (pr[1] != null && max > pr[1]) { max = pr[1]; } } var range = max - min; if (zr && ((zr[0] != null && range < zr[0]) || (zr[1] != null && range > zr[1]))) return; opts.min = min; opts.max = max; }); plot.setupGrid(); plot.draw(); if (!args.preventEvent) plot.getPlaceholder().trigger("plotzoom", [ plot, args ]); }; plot.pan = function (args) { var delta = { x: +args.left, y: +args.top }; if (isNaN(delta.x)) delta.x = 0; if (isNaN(delta.y)) delta.y = 0; $.each(plot.getAxes(), function (_, axis) { var opts = axis.options, min, max, d = delta[axis.direction]; min = axis.c2p(axis.p2c(axis.min) + d), max = axis.c2p(axis.p2c(axis.max) + d); var pr = opts.panRange; if (pr === false) // no panning on this axis return; if (pr) { // check whether we hit the wall if (pr[0] != null && pr[0] > min) { d = pr[0] - min; min += d; max += d; } if (pr[1] != null && pr[1] < max) { d = pr[1] - max; min += d; max += d; } } opts.min = min; opts.max = max; }); plot.setupGrid(); plot.draw(); if (!args.preventEvent) plot.getPlaceholder().trigger("plotpan", [ plot, args ]); }; function shutdown(plot, eventHolder) { eventHolder.unbind(plot.getOptions().zoom.trigger, onZoomClick); eventHolder.unbind("mousewheel", onMouseWheel); eventHolder.unbind("dragstart", onDragStart); eventHolder.unbind("drag", onDrag); eventHolder.unbind("dragend", onDragEnd); if (panTimeout) clearTimeout(panTimeout); } plot.hooks.bindEvents.push(bindEvents); plot.hooks.shutdown.push(shutdown); } $.plot.plugins.push({ init: init, options: options, name: 'navigate', version: '1.3' }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.pie.js ================================================ /* Flot plugin for rendering pie charts. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. The plugin assumes that each series has a single data value, and that each value is a positive integer or zero. Negative numbers don't make sense for a pie chart, and have unpredictable results. The values do NOT need to be passed in as percentages; the plugin will calculate the total and per-slice percentages internally. * Created by Brian Medendorp * Updated with contributions from btburnett3, Anthony Aragues and Xavi Ivars The plugin supports these options: series: { pie: { show: true/false radius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto' innerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect startAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result tilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show) offset: { top: integer value to move the pie up or down left: integer value to move the pie left or right, or 'auto' }, stroke: { color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF') width: integer pixel width of the stroke }, label: { show: true/false, or 'auto' formatter: a user-defined function that modifies the text/style of the label text radius: 0-1 for percentage of fullsize, or a specified pixel length background: { color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000') opacity: 0-1 }, threshold: 0-1 for the percentage value at which to hide labels (if they're too small) }, combine: { threshold: 0-1 for the percentage value at which to combine slices (if they're too small) color: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined label: any text value of what the combined slice should be labeled } highlight: { opacity: 0-1 } } } More detail and specific examples can be found in the included HTML file. */ (function($) { // Maximum redraw attempts when fitting labels within the plot var REDRAW_ATTEMPTS = 10; // Factor by which to shrink the pie when fitting labels within the plot var REDRAW_SHRINK = 0.95; function init(plot) { var canvas = null, target = null, maxRadius = null, centerLeft = null, centerTop = null, processed = false, ctx = null; // interactive variables var highlights = []; // add hook to determine if pie plugin in enabled, and then perform necessary operations plot.hooks.processOptions.push(function(plot, options) { if (options.series.pie.show) { options.grid.show = false; // set labels.show if (options.series.pie.label.show == "auto") { if (options.legend.show) { options.series.pie.label.show = false; } else { options.series.pie.label.show = true; } } // set radius if (options.series.pie.radius == "auto") { if (options.series.pie.label.show) { options.series.pie.radius = 3/4; } else { options.series.pie.radius = 1; } } // ensure sane tilt if (options.series.pie.tilt > 1) { options.series.pie.tilt = 1; } else if (options.series.pie.tilt < 0) { options.series.pie.tilt = 0; } } }); plot.hooks.bindEvents.push(function(plot, eventHolder) { var options = plot.getOptions(); if (options.series.pie.show) { if (options.grid.hoverable) { eventHolder.unbind("mousemove").mousemove(onMouseMove); } if (options.grid.clickable) { eventHolder.unbind("click").click(onClick); } } }); plot.hooks.processDatapoints.push(function(plot, series, data, datapoints) { var options = plot.getOptions(); if (options.series.pie.show) { processDatapoints(plot, series, data, datapoints); } }); plot.hooks.drawOverlay.push(function(plot, octx) { var options = plot.getOptions(); if (options.series.pie.show) { drawOverlay(plot, octx); } }); plot.hooks.draw.push(function(plot, newCtx) { var options = plot.getOptions(); if (options.series.pie.show) { draw(plot, newCtx); } }); function processDatapoints(plot, series, datapoints) { if (!processed) { processed = true; canvas = plot.getCanvas(); target = $(canvas).parent(); options = plot.getOptions(); plot.setData(combine(plot.getData())); } } function combine(data) { var total = 0, combined = 0, numCombined = 0, color = options.series.pie.combine.color, newdata = []; // Fix up the raw data from Flot, ensuring the data is numeric for (var i = 0; i < data.length; ++i) { var value = data[i].data; // If the data is an array, we'll assume that it's a standard // Flot x-y pair, and are concerned only with the second value. // Note how we use the original array, rather than creating a // new one; this is more efficient and preserves any extra data // that the user may have stored in higher indexes. if ($.isArray(value) && value.length == 1) { value = value[0]; } if ($.isArray(value)) { // Equivalent to $.isNumeric() but compatible with jQuery < 1.7 if (!isNaN(parseFloat(value[1])) && isFinite(value[1])) { value[1] = +value[1]; } else { value[1] = 0; } } else if (!isNaN(parseFloat(value)) && isFinite(value)) { value = [1, +value]; } else { value = [1, 0]; } data[i].data = [value]; } // Sum up all the slices, so we can calculate percentages for each for (var i = 0; i < data.length; ++i) { total += data[i].data[0][1]; } // Count the number of slices with percentages below the combine // threshold; if it turns out to be just one, we won't combine. for (var i = 0; i < data.length; ++i) { var value = data[i].data[0][1]; if (value / total <= options.series.pie.combine.threshold) { combined += value; numCombined++; if (!color) { color = data[i].color; } } } for (var i = 0; i < data.length; ++i) { var value = data[i].data[0][1]; if (numCombined < 2 || value / total > options.series.pie.combine.threshold) { newdata.push({ data: [[1, value]], color: data[i].color, label: data[i].label, angle: value * Math.PI * 2 / total, percent: value / (total / 100) }); } } if (numCombined > 1) { newdata.push({ data: [[1, combined]], color: color, label: options.series.pie.combine.label, angle: combined * Math.PI * 2 / total, percent: combined / (total / 100) }); } return newdata; } function draw(plot, newCtx) { if (!target) { return; // if no series were passed } var canvasWidth = plot.getPlaceholder().width(), canvasHeight = plot.getPlaceholder().height(), legendWidth = target.children().filter(".legend").children().width() || 0; ctx = newCtx; // WARNING: HACK! REWRITE THIS CODE AS SOON AS POSSIBLE! // When combining smaller slices into an 'other' slice, we need to // add a new series. Since Flot gives plugins no way to modify the // list of series, the pie plugin uses a hack where the first call // to processDatapoints results in a call to setData with the new // list of series, then subsequent processDatapoints do nothing. // The plugin-global 'processed' flag is used to control this hack; // it starts out false, and is set to true after the first call to // processDatapoints. // Unfortunately this turns future setData calls into no-ops; they // call processDatapoints, the flag is true, and nothing happens. // To fix this we'll set the flag back to false here in draw, when // all series have been processed, so the next sequence of calls to // processDatapoints once again starts out with a slice-combine. // This is really a hack; in 0.9 we need to give plugins a proper // way to modify series before any processing begins. processed = false; // calculate maximum radius and center point maxRadius = Math.min(canvasWidth, canvasHeight / options.series.pie.tilt) / 2; centerTop = canvasHeight / 2 + options.series.pie.offset.top; centerLeft = canvasWidth / 2; if (options.series.pie.offset.left == "auto") { if (options.legend.position.match("w")) { centerLeft += legendWidth / 2; } else { centerLeft -= legendWidth / 2; } } else { centerLeft += options.series.pie.offset.left; } if (centerLeft < maxRadius) { centerLeft = maxRadius; } else if (centerLeft > canvasWidth - maxRadius) { centerLeft = canvasWidth - maxRadius; } var slices = plot.getData(), attempts = 0; // Keep shrinking the pie's radius until drawPie returns true, // indicating that all the labels fit, or we try too many times. do { if (attempts > 0) { maxRadius *= REDRAW_SHRINK; } attempts += 1; clear(); if (options.series.pie.tilt <= 0.8) { drawShadow(); } } while (!drawPie() && attempts < REDRAW_ATTEMPTS) if (attempts >= REDRAW_ATTEMPTS) { clear(); target.prepend("
    Could not draw pie with labels contained inside canvas
    "); } if (plot.setSeries && plot.insertLegend) { plot.setSeries(slices); plot.insertLegend(); } // we're actually done at this point, just defining internal functions at this point function clear() { ctx.clearRect(0, 0, canvasWidth, canvasHeight); target.children().filter(".pieLabel, .pieLabelBackground").remove(); } function drawShadow() { var shadowLeft = options.series.pie.shadow.left; var shadowTop = options.series.pie.shadow.top; var edge = 10; var alpha = options.series.pie.shadow.alpha; var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; if (radius >= canvasWidth / 2 - shadowLeft || radius * options.series.pie.tilt >= canvasHeight / 2 - shadowTop || radius <= edge) { return; // shadow would be outside canvas, so don't draw it } ctx.save(); ctx.translate(shadowLeft,shadowTop); ctx.globalAlpha = alpha; ctx.fillStyle = "#000"; // center and rotate to starting position ctx.translate(centerLeft,centerTop); ctx.scale(1, options.series.pie.tilt); //radius -= edge; for (var i = 1; i <= edge; i++) { ctx.beginPath(); ctx.arc(0, 0, radius, 0, Math.PI * 2, false); ctx.fill(); radius -= i; } ctx.restore(); } function drawPie() { var startAngle = Math.PI * options.series.pie.startAngle; var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; // center and rotate to starting position ctx.save(); ctx.translate(centerLeft,centerTop); ctx.scale(1, options.series.pie.tilt); //ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera // draw slices ctx.save(); var currentAngle = startAngle; for (var i = 0; i < slices.length; ++i) { slices[i].startAngle = currentAngle; drawSlice(slices[i].angle, slices[i].color, true); } ctx.restore(); // draw slice outlines if (options.series.pie.stroke.width > 0) { ctx.save(); ctx.lineWidth = options.series.pie.stroke.width; currentAngle = startAngle; for (var i = 0; i < slices.length; ++i) { drawSlice(slices[i].angle, options.series.pie.stroke.color, false); } ctx.restore(); } // draw donut hole drawDonutHole(ctx); ctx.restore(); // Draw the labels, returning true if they fit within the plot if (options.series.pie.label.show) { return drawLabels(); } else return true; function drawSlice(angle, color, fill) { if (angle <= 0 || isNaN(angle)) { return; } if (fill) { ctx.fillStyle = color; } else { ctx.strokeStyle = color; ctx.lineJoin = "round"; } ctx.beginPath(); if (Math.abs(angle - Math.PI * 2) > 0.000000001) { ctx.moveTo(0, 0); // Center of the pie } //ctx.arc(0, 0, radius, 0, angle, false); // This doesn't work properly in Opera ctx.arc(0, 0, radius,currentAngle, currentAngle + angle / 2, false); ctx.arc(0, 0, radius,currentAngle + angle / 2, currentAngle + angle, false); ctx.closePath(); //ctx.rotate(angle); // This doesn't work properly in Opera currentAngle += angle; if (fill) { ctx.fill(); } else { ctx.stroke(); } } function drawLabels() { var currentAngle = startAngle; var radius = options.series.pie.label.radius > 1 ? options.series.pie.label.radius : maxRadius * options.series.pie.label.radius; for (var i = 0; i < slices.length; ++i) { if (slices[i].percent >= options.series.pie.label.threshold * 100) { if (!drawLabel(slices[i], currentAngle, i)) { return false; } } currentAngle += slices[i].angle; } return true; function drawLabel(slice, startAngle, index) { if (slice.data[0][1] == 0) { return true; } // format label text var lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter; if (lf) { text = lf(slice.label, slice); } else { text = slice.label; } if (plf) { text = plf(text, slice); } var halfAngle = ((startAngle + slice.angle) + startAngle) / 2; var x = centerLeft + Math.round(Math.cos(halfAngle) * radius); var y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt; var html = "" + text + ""; target.append(html); var label = target.children("#pieLabel" + index); var labelTop = (y - label.height() / 2); var labelLeft = (x - label.width() / 2); label.css("top", labelTop); label.css("left", labelLeft); // check to make sure that the label is not outside the canvas if (0 - labelTop > 0 || 0 - labelLeft > 0 || canvasHeight - (labelTop + label.height()) < 0 || canvasWidth - (labelLeft + label.width()) < 0) { return false; } if (options.series.pie.label.background.opacity != 0) { // put in the transparent background separately to avoid blended labels and label boxes var c = options.series.pie.label.background.color; if (c == null) { c = slice.color; } var pos = "top:" + labelTop + "px;left:" + labelLeft + "px;"; $("
    ") .css("opacity", options.series.pie.label.background.opacity) .insertBefore(label); } return true; } // end individual label function } // end drawLabels function } // end drawPie function } // end draw function // Placed here because it needs to be accessed from multiple locations function drawDonutHole(layer) { if (options.series.pie.innerRadius > 0) { // subtract the center layer.save(); var innerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius; layer.globalCompositeOperation = "destination-out"; // this does not work with excanvas, but it will fall back to using the stroke color layer.beginPath(); layer.fillStyle = options.series.pie.stroke.color; layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false); layer.fill(); layer.closePath(); layer.restore(); // add inner stroke layer.save(); layer.beginPath(); layer.strokeStyle = options.series.pie.stroke.color; layer.arc(0, 0, innerRadius, 0, Math.PI * 2, false); layer.stroke(); layer.closePath(); layer.restore(); // TODO: add extra shadow inside hole (with a mask) if the pie is tilted. } } //-- Additional Interactive related functions -- function isPointInPoly(poly, pt) { for(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) ((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1])) && (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0]) && (c = !c); return c; } function findNearbySlice(mouseX, mouseY) { var slices = plot.getData(), options = plot.getOptions(), radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius, x, y; for (var i = 0; i < slices.length; ++i) { var s = slices[i]; if (s.pie.show) { ctx.save(); ctx.beginPath(); ctx.moveTo(0, 0); // Center of the pie //ctx.scale(1, options.series.pie.tilt); // this actually seems to break everything when here. ctx.arc(0, 0, radius, s.startAngle, s.startAngle + s.angle / 2, false); ctx.arc(0, 0, radius, s.startAngle + s.angle / 2, s.startAngle + s.angle, false); ctx.closePath(); x = mouseX - centerLeft; y = mouseY - centerTop; if (ctx.isPointInPath) { if (ctx.isPointInPath(mouseX - centerLeft, mouseY - centerTop)) { ctx.restore(); return { datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i }; } } else { // excanvas for IE doesn;t support isPointInPath, this is a workaround. var p1X = radius * Math.cos(s.startAngle), p1Y = radius * Math.sin(s.startAngle), p2X = radius * Math.cos(s.startAngle + s.angle / 4), p2Y = radius * Math.sin(s.startAngle + s.angle / 4), p3X = radius * Math.cos(s.startAngle + s.angle / 2), p3Y = radius * Math.sin(s.startAngle + s.angle / 2), p4X = radius * Math.cos(s.startAngle + s.angle / 1.5), p4Y = radius * Math.sin(s.startAngle + s.angle / 1.5), p5X = radius * Math.cos(s.startAngle + s.angle), p5Y = radius * Math.sin(s.startAngle + s.angle), arrPoly = [[0, 0], [p1X, p1Y], [p2X, p2Y], [p3X, p3Y], [p4X, p4Y], [p5X, p5Y]], arrPoint = [x, y]; // TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt? if (isPointInPoly(arrPoly, arrPoint)) { ctx.restore(); return { datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i }; } } ctx.restore(); } } return null; } function onMouseMove(e) { triggerClickHoverEvent("plothover", e); } function onClick(e) { triggerClickHoverEvent("plotclick", e); } // trigger click or hover event (they send the same parameters so we share their code) function triggerClickHoverEvent(eventname, e) { var offset = plot.offset(); var canvasX = parseInt(e.pageX - offset.left); var canvasY = parseInt(e.pageY - offset.top); var item = findNearbySlice(canvasX, canvasY); if (options.grid.autoHighlight) { // clear auto-highlights for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.auto == eventname && !(item && h.series == item.series)) { unhighlight(h.series); } } } // highlight the slice if (item) { highlight(item.series, eventname); } // trigger any hover bind events var pos = { pageX: e.pageX, pageY: e.pageY }; target.trigger(eventname, [pos, item]); } function highlight(s, auto) { //if (typeof s == "number") { // s = series[s]; //} var i = indexOfHighlight(s); if (i == -1) { highlights.push({ series: s, auto: auto }); plot.triggerRedrawOverlay(); } else if (!auto) { highlights[i].auto = false; } } function unhighlight(s) { if (s == null) { highlights = []; plot.triggerRedrawOverlay(); } //if (typeof s == "number") { // s = series[s]; //} var i = indexOfHighlight(s); if (i != -1) { highlights.splice(i, 1); plot.triggerRedrawOverlay(); } } function indexOfHighlight(s) { for (var i = 0; i < highlights.length; ++i) { var h = highlights[i]; if (h.series == s) return i; } return -1; } function drawOverlay(plot, octx) { var options = plot.getOptions(); var radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius; octx.save(); octx.translate(centerLeft, centerTop); octx.scale(1, options.series.pie.tilt); for (var i = 0; i < highlights.length; ++i) { drawHighlight(highlights[i].series); } drawDonutHole(octx); octx.restore(); function drawHighlight(series) { if (series.angle <= 0 || isNaN(series.angle)) { return; } //octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString(); octx.fillStyle = "rgba(255, 255, 255, " + options.series.pie.highlight.opacity + ")"; // this is temporary until we have access to parseColor octx.beginPath(); if (Math.abs(series.angle - Math.PI * 2) > 0.000000001) { octx.moveTo(0, 0); // Center of the pie } octx.arc(0, 0, radius, series.startAngle, series.startAngle + series.angle / 2, false); octx.arc(0, 0, radius, series.startAngle + series.angle / 2, series.startAngle + series.angle, false); octx.closePath(); octx.fill(); } } } // end init (plugin body) // define pie specific options and their default values var options = { series: { pie: { show: false, radius: "auto", // actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value) innerRadius: 0, /* for donut */ startAngle: 3/2, tilt: 1, shadow: { left: 5, // shadow left offset top: 15, // shadow top offset alpha: 0.02 // shadow alpha }, offset: { top: 0, left: "auto" }, stroke: { color: "#fff", width: 1 }, label: { show: "auto", formatter: function(label, slice) { return "
    " + label + "
    " + Math.round(slice.percent) + "%
    "; }, // formatter function radius: 1, // radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value) background: { color: null, opacity: 0 }, threshold: 0 // percentage at which to hide the label (i.e. the slice is too narrow) }, combine: { threshold: -1, // percentage at which to combine little slices into one larger slice color: null, // color to give the new slice (auto-generated if null) label: "Other" // label to give the new slice }, highlight: { //color: "#fff", // will add this functionality once parseColor is available opacity: 0.5 } } } }; $.plot.plugins.push({ init: init, options: options, name: "pie", version: "1.1" }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.resize.js ================================================ /* Flot plugin for automatically redrawing plots as the placeholder resizes. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. It works by listening for changes on the placeholder div (through the jQuery resize event plugin) - if the size changes, it will redraw the plot. There are no options. If you need to disable the plugin for some plots, you can just fix the size of their placeholders. */ /* Inline dependency: * jQuery resize event - v1.1 - 3/14/2010 * http://benalman.com/projects/jquery-resize-plugin/ * * Copyright (c) 2010 "Cowboy" Ben Alman * Dual licensed under the MIT and GPL licenses. * http://benalman.com/about/license/ */ /* * The plugin depends on jQuery.Resize plugin https://github.com/cowboy/jquery-resize * which causes the memory leaking. The plugin dependency was replaced with the native * window.resize event as we don't need the jQuery.Resize functionality anyways. * -ab March 1, 2015 */ // (function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k="setTimeout",j="resize",d=j+"-special-event",b="delay",f="throttleWindow";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this); (function ($) { var options = { }; // no options function init(plot) { function onResize() { var placeholder = plot.getPlaceholder(); // somebody might have hidden us and we can't plot // when we don't have the dimensions if (placeholder.width() == 0 || placeholder.height() == 0) return; plot.resize(); plot.setupGrid(); plot.draw(); } function bindEvents(plot, eventHolder) { //plot.getPlaceholder().resize(onResize); $(window).bind('resize', onResize) } function shutdown(plot, eventHolder) { //plot.getPlaceholder().unbind("resize", onResize); $(window).unbind('resize', onResize) } plot.hooks.bindEvents.push(bindEvents); plot.hooks.shutdown.push(shutdown); } $.plot.plugins.push({ init: init, options: options, name: 'resize', version: '1.0' }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.selection.js ================================================ /* Flot plugin for selecting regions of a plot. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. The plugin supports these options: selection: { mode: null or "x" or "y" or "xy", color: color, shape: "round" or "miter" or "bevel", minSize: number of pixels } Selection support is enabled by setting the mode to one of "x", "y" or "xy". In "x" mode, the user will only be able to specify the x range, similarly for "y" mode. For "xy", the selection becomes a rectangle where both ranges can be specified. "color" is color of the selection (if you need to change the color later on, you can get to it with plot.getOptions().selection.color). "shape" is the shape of the corners of the selection. "minSize" is the minimum size a selection can be in pixels. This value can be customized to determine the smallest size a selection can be and still have the selection rectangle be displayed. When customizing this value, the fact that it refers to pixels, not axis units must be taken into account. Thus, for example, if there is a bar graph in time mode with BarWidth set to 1 minute, setting "minSize" to 1 will not make the minimum selection size 1 minute, but rather 1 pixel. Note also that setting "minSize" to 0 will prevent "plotunselected" events from being fired when the user clicks the mouse without dragging. When selection support is enabled, a "plotselected" event will be emitted on the DOM element you passed into the plot function. The event handler gets a parameter with the ranges selected on the axes, like this: placeholder.bind( "plotselected", function( event, ranges ) { alert("You selected " + ranges.xaxis.from + " to " + ranges.xaxis.to) // similar for yaxis - with multiple axes, the extra ones are in // x2axis, x3axis, ... }); The "plotselected" event is only fired when the user has finished making the selection. A "plotselecting" event is fired during the process with the same parameters as the "plotselected" event, in case you want to know what's happening while it's happening, A "plotunselected" event with no arguments is emitted when the user clicks the mouse to remove the selection. As stated above, setting "minSize" to 0 will destroy this behavior. The plugin allso adds the following methods to the plot object: - setSelection( ranges, preventEvent ) Set the selection rectangle. The passed in ranges is on the same form as returned in the "plotselected" event. If the selection mode is "x", you should put in either an xaxis range, if the mode is "y" you need to put in an yaxis range and both xaxis and yaxis if the selection mode is "xy", like this: setSelection({ xaxis: { from: 0, to: 10 }, yaxis: { from: 40, to: 60 } }); setSelection will trigger the "plotselected" event when called. If you don't want that to happen, e.g. if you're inside a "plotselected" handler, pass true as the second parameter. If you are using multiple axes, you can specify the ranges on any of those, e.g. as x2axis/x3axis/... instead of xaxis, the plugin picks the first one it sees. - clearSelection( preventEvent ) Clear the selection rectangle. Pass in true to avoid getting a "plotunselected" event. - getSelection() Returns the current selection in the same format as the "plotselected" event. If there's currently no selection, the function returns null. */ (function ($) { function init(plot) { var selection = { first: { x: -1, y: -1}, second: { x: -1, y: -1}, show: false, active: false }; // FIXME: The drag handling implemented here should be // abstracted out, there's some similar code from a library in // the navigation plugin, this should be massaged a bit to fit // the Flot cases here better and reused. Doing this would // make this plugin much slimmer. var savedhandlers = {}; var mouseUpHandler = null; function onMouseMove(e) { if (selection.active) { updateSelection(e); plot.getPlaceholder().trigger("plotselecting", [ getSelection() ]); } } function onMouseDown(e) { if (e.which != 1) // only accept left-click return; // cancel out any text selections document.body.focus(); // prevent text selection and drag in old-school browsers if (document.onselectstart !== undefined && savedhandlers.onselectstart == null) { savedhandlers.onselectstart = document.onselectstart; document.onselectstart = function () { return false; }; } if (document.ondrag !== undefined && savedhandlers.ondrag == null) { savedhandlers.ondrag = document.ondrag; document.ondrag = function () { return false; }; } setSelectionPos(selection.first, e); selection.active = true; // this is a bit silly, but we have to use a closure to be // able to whack the same handler again mouseUpHandler = function (e) { onMouseUp(e); }; $(document).one("mouseup", mouseUpHandler); } function onMouseUp(e) { mouseUpHandler = null; // revert drag stuff for old-school browsers if (document.onselectstart !== undefined) document.onselectstart = savedhandlers.onselectstart; if (document.ondrag !== undefined) document.ondrag = savedhandlers.ondrag; // no more dragging selection.active = false; updateSelection(e); if (selectionIsSane()) triggerSelectedEvent(); else { // this counts as a clear plot.getPlaceholder().trigger("plotunselected", [ ]); plot.getPlaceholder().trigger("plotselecting", [ null ]); } return false; } function getSelection() { if (!selectionIsSane()) return null; if (!selection.show) return null; var r = {}, c1 = selection.first, c2 = selection.second; $.each(plot.getAxes(), function (name, axis) { if (axis.used) { var p1 = axis.c2p(c1[axis.direction]), p2 = axis.c2p(c2[axis.direction]); r[name] = { from: Math.min(p1, p2), to: Math.max(p1, p2) }; } }); return r; } function triggerSelectedEvent() { var r = getSelection(); plot.getPlaceholder().trigger("plotselected", [ r ]); // backwards-compat stuff, to be removed in future if (r.xaxis && r.yaxis) plot.getPlaceholder().trigger("selected", [ { x1: r.xaxis.from, y1: r.yaxis.from, x2: r.xaxis.to, y2: r.yaxis.to } ]); } function clamp(min, value, max) { return value < min ? min: (value > max ? max: value); } function setSelectionPos(pos, e) { var o = plot.getOptions(); var offset = plot.getPlaceholder().offset(); var plotOffset = plot.getPlotOffset(); pos.x = clamp(0, e.pageX - offset.left - plotOffset.left, plot.width()); pos.y = clamp(0, e.pageY - offset.top - plotOffset.top, plot.height()); if (o.selection.mode == "y") pos.x = pos == selection.first ? 0 : plot.width(); if (o.selection.mode == "x") pos.y = pos == selection.first ? 0 : plot.height(); } function updateSelection(pos) { if (pos.pageX == null) return; setSelectionPos(selection.second, pos); if (selectionIsSane()) { selection.show = true; plot.triggerRedrawOverlay(); } else clearSelection(true); } function clearSelection(preventEvent) { if (selection.show) { selection.show = false; plot.triggerRedrawOverlay(); if (!preventEvent) plot.getPlaceholder().trigger("plotunselected", [ ]); } } // function taken from markings support in Flot function extractRange(ranges, coord) { var axis, from, to, key, axes = plot.getAxes(); for (var k in axes) { axis = axes[k]; if (axis.direction == coord) { key = coord + axis.n + "axis"; if (!ranges[key] && axis.n == 1) key = coord + "axis"; // support x1axis as xaxis if (ranges[key]) { from = ranges[key].from; to = ranges[key].to; break; } } } // backwards-compat stuff - to be removed in future if (!ranges[key]) { axis = coord == "x" ? plot.getXAxes()[0] : plot.getYAxes()[0]; from = ranges[coord + "1"]; to = ranges[coord + "2"]; } // auto-reverse as an added bonus if (from != null && to != null && from > to) { var tmp = from; from = to; to = tmp; } return { from: from, to: to, axis: axis }; } function setSelection(ranges, preventEvent) { var axis, range, o = plot.getOptions(); if (o.selection.mode == "y") { selection.first.x = 0; selection.second.x = plot.width(); } else { range = extractRange(ranges, "x"); selection.first.x = range.axis.p2c(range.from); selection.second.x = range.axis.p2c(range.to); } if (o.selection.mode == "x") { selection.first.y = 0; selection.second.y = plot.height(); } else { range = extractRange(ranges, "y"); selection.first.y = range.axis.p2c(range.from); selection.second.y = range.axis.p2c(range.to); } selection.show = true; plot.triggerRedrawOverlay(); if (!preventEvent && selectionIsSane()) triggerSelectedEvent(); } function selectionIsSane() { var minSize = plot.getOptions().selection.minSize; return Math.abs(selection.second.x - selection.first.x) >= minSize && Math.abs(selection.second.y - selection.first.y) >= minSize; } plot.clearSelection = clearSelection; plot.setSelection = setSelection; plot.getSelection = getSelection; plot.hooks.bindEvents.push(function(plot, eventHolder) { var o = plot.getOptions(); if (o.selection.mode != null) { eventHolder.mousemove(onMouseMove); eventHolder.mousedown(onMouseDown); } }); plot.hooks.drawOverlay.push(function (plot, ctx) { // draw selection if (selection.show && selectionIsSane()) { var plotOffset = plot.getPlotOffset(); var o = plot.getOptions(); ctx.save(); ctx.translate(plotOffset.left, plotOffset.top); var c = $.color.parse(o.selection.color); ctx.strokeStyle = c.scale('a', 0.8).toString(); ctx.lineWidth = 1; ctx.lineJoin = o.selection.shape; ctx.fillStyle = c.scale('a', 0.4).toString(); var x = Math.min(selection.first.x, selection.second.x) + 0.5, y = Math.min(selection.first.y, selection.second.y) + 0.5, w = Math.abs(selection.second.x - selection.first.x) - 1, h = Math.abs(selection.second.y - selection.first.y) - 1; ctx.fillRect(x, y, w, h); ctx.strokeRect(x, y, w, h); ctx.restore(); } }); plot.hooks.shutdown.push(function (plot, eventHolder) { eventHolder.unbind("mousemove", onMouseMove); eventHolder.unbind("mousedown", onMouseDown); if (mouseUpHandler) $(document).unbind("mouseup", mouseUpHandler); }); } $.plot.plugins.push({ init: init, options: { selection: { mode: null, // one of null, "x", "y" or "xy" color: "#e8cfac", shape: "round", // one of "round", "miter", or "bevel" minSize: 5 // minimum number of pixels } }, name: 'selection', version: '1.1' }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.stack.js ================================================ /* Flot plugin for stacking data sets rather than overlyaing them. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. The plugin assumes the data is sorted on x (or y if stacking horizontally). For line charts, it is assumed that if a line has an undefined gap (from a null point), then the line above it should have the same gap - insert zeros instead of "null" if you want another behaviour. This also holds for the start and end of the chart. Note that stacking a mix of positive and negative values in most instances doesn't make sense (so it looks weird). Two or more series are stacked when their "stack" attribute is set to the same key (which can be any number or string or just "true"). To specify the default stack, you can set the stack option like this: series: { stack: null/false, true, or a key (number/string) } You can also specify it for a single series, like this: $.plot( $("#placeholder"), [{ data: [ ... ], stack: true }]) The stacking order is determined by the order of the data series in the array (later series end up on top of the previous). Internally, the plugin modifies the datapoints in each series, adding an offset to the y value. For line series, extra data points are inserted through interpolation. If there's a second y value, it's also adjusted (e.g for bar charts or filled areas). */ (function ($) { var options = { series: { stack: null } // or number/string }; function init(plot) { function findMatchingSeries(s, allseries) { var res = null; for (var i = 0; i < allseries.length; ++i) { if (s == allseries[i]) break; if (allseries[i].stack == s.stack) res = allseries[i]; } return res; } function stackData(plot, s, datapoints) { if (s.stack == null || s.stack === false) return; var other = findMatchingSeries(s, plot.getData()); if (!other) return; var ps = datapoints.pointsize, points = datapoints.points, otherps = other.datapoints.pointsize, otherpoints = other.datapoints.points, newpoints = [], px, py, intery, qx, qy, bottom, withlines = s.lines.show, horizontal = s.bars.horizontal, withbottom = ps > 2 && (horizontal ? datapoints.format[2].x : datapoints.format[2].y), withsteps = withlines && s.lines.steps, fromgap = true, keyOffset = horizontal ? 1 : 0, accumulateOffset = horizontal ? 0 : 1, i = 0, j = 0, l, m; while (true) { if (i >= points.length) break; l = newpoints.length; if (points[i] == null) { // copy gaps for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); i += ps; } else if (j >= otherpoints.length) { // for lines, we can't use the rest of the points if (!withlines) { for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); } i += ps; } else if (otherpoints[j] == null) { // oops, got a gap for (m = 0; m < ps; ++m) newpoints.push(null); fromgap = true; j += otherps; } else { // cases where we actually got two points px = points[i + keyOffset]; py = points[i + accumulateOffset]; qx = otherpoints[j + keyOffset]; qy = otherpoints[j + accumulateOffset]; bottom = 0; if (px == qx) { for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); newpoints[l + accumulateOffset] += qy; bottom = qy; i += ps; j += otherps; } else if (px > qx) { // we got past point below, might need to // insert interpolated extra point if (withlines && i > 0 && points[i - ps] != null) { intery = py + (points[i - ps + accumulateOffset] - py) * (qx - px) / (points[i - ps + keyOffset] - px); newpoints.push(qx); newpoints.push(intery + qy); for (m = 2; m < ps; ++m) newpoints.push(points[i + m]); bottom = qy; } j += otherps; } else { // px < qx if (fromgap && withlines) { // if we come from a gap, we just skip this point i += ps; continue; } for (m = 0; m < ps; ++m) newpoints.push(points[i + m]); // we might be able to interpolate a point below, // this can give us a better y if (withlines && j > 0 && otherpoints[j - otherps] != null) bottom = qy + (otherpoints[j - otherps + accumulateOffset] - qy) * (px - qx) / (otherpoints[j - otherps + keyOffset] - qx); newpoints[l + accumulateOffset] += bottom; i += ps; } fromgap = false; if (l != newpoints.length && withbottom) newpoints[l + 2] += bottom; } // maintain the line steps invariant if (withsteps && l != newpoints.length && l > 0 && newpoints[l] != null && newpoints[l] != newpoints[l - ps] && newpoints[l + 1] != newpoints[l - ps + 1]) { for (m = 0; m < ps; ++m) newpoints[l + ps + m] = newpoints[l + m]; newpoints[l + 1] = newpoints[l - ps + 1]; } } datapoints.points = newpoints; } plot.hooks.processDatapoints.push(stackData); } $.plot.plugins.push({ init: init, options: options, name: 'stack', version: '1.2' }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.symbol.js ================================================ /* Flot plugin that adds some extra symbols for plotting points. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. The symbols are accessed as strings through the standard symbol options: series: { points: { symbol: "square" // or "diamond", "triangle", "cross" } } */ (function ($) { function processRawData(plot, series, datapoints) { // we normalize the area of each symbol so it is approximately the // same as a circle of the given radius var handlers = { square: function (ctx, x, y, radius, shadow) { // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 var size = radius * Math.sqrt(Math.PI) / 2; ctx.rect(x - size, y - size, size + size, size + size); }, diamond: function (ctx, x, y, radius, shadow) { // pi * r^2 = 2s^2 => s = r * sqrt(pi/2) var size = radius * Math.sqrt(Math.PI / 2); ctx.moveTo(x - size, y); ctx.lineTo(x, y - size); ctx.lineTo(x + size, y); ctx.lineTo(x, y + size); ctx.lineTo(x - size, y); }, triangle: function (ctx, x, y, radius, shadow) { // pi * r^2 = 1/2 * s^2 * sin (pi / 3) => s = r * sqrt(2 * pi / sin(pi / 3)) var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3)); var height = size * Math.sin(Math.PI / 3); ctx.moveTo(x - size/2, y + height/2); ctx.lineTo(x + size/2, y + height/2); if (!shadow) { ctx.lineTo(x, y - height/2); ctx.lineTo(x - size/2, y + height/2); } }, cross: function (ctx, x, y, radius, shadow) { // pi * r^2 = (2s)^2 => s = r * sqrt(pi)/2 var size = radius * Math.sqrt(Math.PI) / 2; ctx.moveTo(x - size, y - size); ctx.lineTo(x + size, y + size); ctx.moveTo(x - size, y + size); ctx.lineTo(x + size, y - size); } }; var s = series.points.symbol; if (handlers[s]) series.points.symbol = handlers[s]; } function init(plot) { plot.hooks.processDatapoints.push(processRawData); } $.plot.plugins.push({ init: init, name: 'symbols', version: '1.0' }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.threshold.js ================================================ /* Flot plugin for thresholding data. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. The plugin supports these options: series: { threshold: { below: number color: colorspec } } It can also be applied to a single series, like this: $.plot( $("#placeholder"), [{ data: [ ... ], threshold: { ... } }]) An array can be passed for multiple thresholding, like this: threshold: [{ below: number1 color: color1 },{ below: number2 color: color2 }] These multiple threshold objects can be passed in any order since they are sorted by the processing function. The data points below "below" are drawn with the specified color. This makes it easy to mark points below 0, e.g. for budget data. Internally, the plugin works by splitting the data into two series, above and below the threshold. The extra series below the threshold will have its label cleared and the special "originSeries" attribute set to the original series. You may need to check for this in hover events. */ (function ($) { var options = { series: { threshold: null } // or { below: number, color: color spec} }; function init(plot) { function thresholdData(plot, s, datapoints, below, color) { var ps = datapoints.pointsize, i, x, y, p, prevp, thresholded = $.extend({}, s); // note: shallow copy thresholded.datapoints = { points: [], pointsize: ps, format: datapoints.format }; thresholded.label = null; thresholded.color = color; thresholded.threshold = null; thresholded.originSeries = s; thresholded.data = []; var origpoints = datapoints.points, addCrossingPoints = s.lines.show; var threspoints = []; var newpoints = []; var m; for (i = 0; i < origpoints.length; i += ps) { x = origpoints[i]; y = origpoints[i + 1]; prevp = p; if (y < below) p = threspoints; else p = newpoints; if (addCrossingPoints && prevp != p && x != null && i > 0 && origpoints[i - ps] != null) { var interx = x + (below - y) * (x - origpoints[i - ps]) / (y - origpoints[i - ps + 1]); prevp.push(interx); prevp.push(below); for (m = 2; m < ps; ++m) prevp.push(origpoints[i + m]); p.push(null); // start new segment p.push(null); for (m = 2; m < ps; ++m) p.push(origpoints[i + m]); p.push(interx); p.push(below); for (m = 2; m < ps; ++m) p.push(origpoints[i + m]); } p.push(x); p.push(y); for (m = 2; m < ps; ++m) p.push(origpoints[i + m]); } datapoints.points = newpoints; thresholded.datapoints.points = threspoints; if (thresholded.datapoints.points.length > 0) { var origIndex = $.inArray(s, plot.getData()); // Insert newly-generated series right after original one (to prevent it from becoming top-most) plot.getData().splice(origIndex + 1, 0, thresholded); } // FIXME: there are probably some edge cases left in bars } function processThresholds(plot, s, datapoints) { if (!s.threshold) return; if (s.threshold instanceof Array) { s.threshold.sort(function(a, b) { return a.below - b.below; }); $(s.threshold).each(function(i, th) { thresholdData(plot, s, datapoints, th.below, th.color); }); } else { thresholdData(plot, s, datapoints, s.threshold.below, s.threshold.color); } } plot.hooks.processDatapoints.push(processThresholds); } $.plot.plugins.push({ init: init, options: options, name: 'threshold', version: '1.2' }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.time.js ================================================ /* Pretty handling of time axes. Copyright (c) 2007-2013 IOLA and Ole Laursen. Licensed under the MIT license. Set axis.mode to "time" to enable. See the section "Time series data" in API.txt for details. */ (function($) { var options = { xaxis: { timezone: null, // "browser" for local to the client or timezone for timezone-js timeformat: null, // format string to use twelveHourClock: false, // 12 or 24 time in time mode monthNames: null // list of names of months } }; // round to nearby lower multiple of base function floorInBase(n, base) { return base * Math.floor(n / base); } // Returns a string with the date d formatted according to fmt. // A subset of the Open Group's strftime format is supported. function formatDate(d, fmt, monthNames, dayNames) { if (typeof d.strftime == "function") { return d.strftime(fmt); } var leftPad = function(n, pad) { n = "" + n; pad = "" + (pad == null ? "0" : pad); return n.length == 1 ? pad + n : n; }; var r = []; var escape = false; var hours = d.getHours(); var isAM = hours < 12; if (monthNames == null) { monthNames = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; } if (dayNames == null) { dayNames = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; } var hours12; if (hours > 12) { hours12 = hours - 12; } else if (hours == 0) { hours12 = 12; } else { hours12 = hours; } for (var i = 0; i < fmt.length; ++i) { var c = fmt.charAt(i); if (escape) { switch (c) { case 'a': c = "" + dayNames[d.getDay()]; break; case 'b': c = "" + monthNames[d.getMonth()]; break; case 'd': c = leftPad(d.getDate()); break; case 'e': c = leftPad(d.getDate(), " "); break; case 'h': // For back-compat with 0.7; remove in 1.0 case 'H': c = leftPad(hours); break; case 'I': c = leftPad(hours12); break; case 'l': c = leftPad(hours12, " "); break; case 'm': c = leftPad(d.getMonth() + 1); break; case 'M': c = leftPad(d.getMinutes()); break; // quarters not in Open Group's strftime specification case 'q': c = "" + (Math.floor(d.getMonth() / 3) + 1); break; case 'S': c = leftPad(d.getSeconds()); break; case 'y': c = leftPad(d.getFullYear() % 100); break; case 'Y': c = "" + d.getFullYear(); break; case 'p': c = (isAM) ? ("" + "am") : ("" + "pm"); break; case 'P': c = (isAM) ? ("" + "AM") : ("" + "PM"); break; case 'w': c = "" + d.getDay(); break; } r.push(c); escape = false; } else { if (c == "%") { escape = true; } else { r.push(c); } } } return r.join(""); } // To have a consistent view of time-based data independent of which time // zone the client happens to be in we need a date-like object independent // of time zones. This is done through a wrapper that only calls the UTC // versions of the accessor methods. function makeUtcWrapper(d) { function addProxyMethod(sourceObj, sourceMethod, targetObj, targetMethod) { sourceObj[sourceMethod] = function() { return targetObj[targetMethod].apply(targetObj, arguments); }; }; var utc = { date: d }; // support strftime, if found if (d.strftime != undefined) { addProxyMethod(utc, "strftime", d, "strftime"); } addProxyMethod(utc, "getTime", d, "getTime"); addProxyMethod(utc, "setTime", d, "setTime"); var props = ["Date", "Day", "FullYear", "Hours", "Milliseconds", "Minutes", "Month", "Seconds"]; for (var p = 0; p < props.length; p++) { addProxyMethod(utc, "get" + props[p], d, "getUTC" + props[p]); addProxyMethod(utc, "set" + props[p], d, "setUTC" + props[p]); } return utc; }; // select time zone strategy. This returns a date-like object tied to the // desired timezone function dateGenerator(ts, opts) { if (opts.timezone == "browser") { return new Date(ts); } else if (!opts.timezone || opts.timezone == "utc") { return makeUtcWrapper(new Date(ts)); } else if (typeof timezoneJS != "undefined" && typeof timezoneJS.Date != "undefined") { var d = new timezoneJS.Date(); // timezone-js is fickle, so be sure to set the time zone before // setting the time. d.setTimezone(opts.timezone); d.setTime(ts); return d; } else { return makeUtcWrapper(new Date(ts)); } } // map of app. size of time units in milliseconds var timeUnitSize = { "second": 1000, "minute": 60 * 1000, "hour": 60 * 60 * 1000, "day": 24 * 60 * 60 * 1000, "month": 30 * 24 * 60 * 60 * 1000, "quarter": 3 * 30 * 24 * 60 * 60 * 1000, "year": 365.2425 * 24 * 60 * 60 * 1000 }; // the allowed tick sizes, after 1 year we use // an integer algorithm var baseSpec = [ [1, "second"], [2, "second"], [5, "second"], [10, "second"], [30, "second"], [1, "minute"], [2, "minute"], [5, "minute"], [10, "minute"], [30, "minute"], [1, "hour"], [2, "hour"], [4, "hour"], [8, "hour"], [12, "hour"], [1, "day"], [2, "day"], [3, "day"], [0.25, "month"], [0.5, "month"], [1, "month"], [2, "month"] ]; // we don't know which variant(s) we'll need yet, but generating both is // cheap var specMonths = baseSpec.concat([[3, "month"], [6, "month"], [1, "year"]]); var specQuarters = baseSpec.concat([[1, "quarter"], [2, "quarter"], [1, "year"]]); function init(plot) { plot.hooks.processOptions.push(function (plot, options) { $.each(plot.getAxes(), function(axisName, axis) { var opts = axis.options; if (opts.mode == "time") { axis.tickGenerator = function(axis) { var ticks = []; var d = dateGenerator(axis.min, opts); var minSize = 0; // make quarter use a possibility if quarters are // mentioned in either of these options var spec = (opts.tickSize && opts.tickSize[1] === "quarter") || (opts.minTickSize && opts.minTickSize[1] === "quarter") ? specQuarters : specMonths; if (opts.minTickSize != null) { if (typeof opts.tickSize == "number") { minSize = opts.tickSize; } else { minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]]; } } for (var i = 0; i < spec.length - 1; ++i) { if (axis.delta < (spec[i][0] * timeUnitSize[spec[i][1]] + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2 && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize) { break; } } var size = spec[i][0]; var unit = spec[i][1]; // special-case the possibility of several years if (unit == "year") { // if given a minTickSize in years, just use it, // ensuring that it's an integer if (opts.minTickSize != null && opts.minTickSize[1] == "year") { size = Math.floor(opts.minTickSize[0]); } else { var magn = Math.pow(10, Math.floor(Math.log(axis.delta / timeUnitSize.year) / Math.LN10)); var norm = (axis.delta / timeUnitSize.year) / magn; if (norm < 1.5) { size = 1; } else if (norm < 3) { size = 2; } else if (norm < 7.5) { size = 5; } else { size = 10; } size *= magn; } // minimum size for years is 1 if (size < 1) { size = 1; } } axis.tickSize = opts.tickSize || [size, unit]; var tickSize = axis.tickSize[0]; unit = axis.tickSize[1]; var step = tickSize * timeUnitSize[unit]; if (unit == "second") { d.setSeconds(floorInBase(d.getSeconds(), tickSize)); } else if (unit == "minute") { d.setMinutes(floorInBase(d.getMinutes(), tickSize)); } else if (unit == "hour") { d.setHours(floorInBase(d.getHours(), tickSize)); } else if (unit == "month") { d.setMonth(floorInBase(d.getMonth(), tickSize)); } else if (unit == "quarter") { d.setMonth(3 * floorInBase(d.getMonth() / 3, tickSize)); } else if (unit == "year") { d.setFullYear(floorInBase(d.getFullYear(), tickSize)); } // reset smaller components d.setMilliseconds(0); if (step >= timeUnitSize.minute) { d.setSeconds(0); } if (step >= timeUnitSize.hour) { d.setMinutes(0); } if (step >= timeUnitSize.day) { d.setHours(0); } if (step >= timeUnitSize.day * 4) { d.setDate(1); } if (step >= timeUnitSize.month * 2) { d.setMonth(floorInBase(d.getMonth(), 3)); } if (step >= timeUnitSize.quarter * 2) { d.setMonth(floorInBase(d.getMonth(), 6)); } if (step >= timeUnitSize.year) { d.setMonth(0); } var carry = 0; var v = Number.NaN; var prev; do { prev = v; v = d.getTime(); ticks.push(v); if (unit == "month" || unit == "quarter") { if (tickSize < 1) { // a bit complicated - we'll divide the // month/quarter up but we need to take // care of fractions so we don't end up in // the middle of a day d.setDate(1); var start = d.getTime(); d.setMonth(d.getMonth() + (unit == "quarter" ? 3 : 1)); var end = d.getTime(); d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize); carry = d.getHours(); d.setHours(0); } else { d.setMonth(d.getMonth() + tickSize * (unit == "quarter" ? 3 : 1)); } } else if (unit == "year") { d.setFullYear(d.getFullYear() + tickSize); } else { d.setTime(v + step); } } while (v < axis.max && v != prev); return ticks; }; axis.tickFormatter = function (v, axis) { var d = dateGenerator(v, axis.options); // first check global format if (opts.timeformat != null) { return formatDate(d, opts.timeformat, opts.monthNames, opts.dayNames); } // possibly use quarters if quarters are mentioned in // any of these places var useQuarters = (axis.options.tickSize && axis.options.tickSize[1] == "quarter") || (axis.options.minTickSize && axis.options.minTickSize[1] == "quarter"); var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]]; var span = axis.max - axis.min; var suffix = (opts.twelveHourClock) ? " %p" : ""; var hourCode = (opts.twelveHourClock) ? "%I" : "%H"; var fmt; if (t < timeUnitSize.minute) { fmt = hourCode + ":%M:%S" + suffix; } else if (t < timeUnitSize.day) { if (span < 2 * timeUnitSize.day) { fmt = hourCode + ":%M" + suffix; } else { fmt = "%b %d " + hourCode + ":%M" + suffix; } } else if (t < timeUnitSize.month) { fmt = "%b %d"; } else if ((useQuarters && t < timeUnitSize.quarter) || (!useQuarters && t < timeUnitSize.year)) { if (span < timeUnitSize.year) { fmt = "%b"; } else { fmt = "%b %Y"; } } else if (useQuarters && t < timeUnitSize.year) { if (span < timeUnitSize.year) { fmt = "Q%q"; } else { fmt = "Q%q %Y"; } } else { fmt = "%Y"; } var rt = formatDate(d, fmt, opts.monthNames, opts.dayNames); return rt; }; } }); }); } $.plot.plugins.push({ init: init, options: options, name: 'time', version: '1.0' }); // Time-axis support used to be in Flot core, which exposed the // formatDate function on the plot object. Various plugins depend // on the function, so we need to re-expose it here. $.plot.formatDate = formatDate; })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/flot/jquery.flot.tooltip.js ================================================ /* * jquery.flot.tooltip * * description: easy-to-use tooltips for Flot charts * version: 0.6.1 * author: Krzysztof Urbas @krzysu [myviews.pl] * website: https://github.com/krzysu/flot.tooltip * * build on 2013-04-12 * released under MIT License, 2012 */ (function ($) { // plugin options, default values var defaultOptions = { tooltip: false, tooltipOpts: { content: "%s | X: %x | Y: %y", // allowed templates are: // %s -> series label, // %x -> X value, // %y -> Y value, // %x.2 -> precision of X value, // %p -> percent xDateFormat: null, yDateFormat: null, shifts: { x: 10, y: 20 }, defaultTheme: true, // callbacks onHover: function(flotItem, $tooltipEl) {} } }; // object var FlotTooltip = function(plot) { // variables this.tipPosition = {x: 0, y: 0}; this.init(plot); }; // main plugin function FlotTooltip.prototype.init = function(plot) { var that = this; plot.hooks.bindEvents.push(function (plot, eventHolder) { // get plot options that.plotOptions = plot.getOptions(); // if not enabled return if (that.plotOptions.tooltip === false || typeof that.plotOptions.tooltip === 'undefined') return; // shortcut to access tooltip options that.tooltipOptions = that.plotOptions.tooltipOpts; // create tooltip DOM element var $tip = that.getDomElement(); // bind event $( plot.getPlaceholder() ).bind("plothover", function (event, pos, item) { if (item) { var tipText; // convert tooltip content template to real tipText tipText = that.stringFormat(that.tooltipOptions.content, item); $tip.html( tipText ); that.updateTooltipPosition({ x: pos.pageX, y: pos.pageY }); $tip.css({ left: that.tipPosition.x + that.tooltipOptions.shifts.x, top: that.tipPosition.y + that.tooltipOptions.shifts.y }) .show(); // run callback if(typeof that.tooltipOptions.onHover === 'function') { that.tooltipOptions.onHover(item, $tip); } } else { $tip.hide().html(''); } }); eventHolder.mousemove( function(e) { var pos = {}; pos.x = e.pageX; pos.y = e.pageY; that.updateTooltipPosition(pos); }); }); }; /** * get or create tooltip DOM element * @return jQuery object */ FlotTooltip.prototype.getDomElement = function() { var $tip; if( $('#flotTip').length > 0 ){ $tip = $('#flotTip'); } else { $tip = $('
    ').attr('id', 'flotTip'); $tip.appendTo('body').hide().css({position: 'absolute'}); if(this.tooltipOptions.defaultTheme) { $tip.css({ 'background': '#fff', 'z-index': '100', 'padding': '0.4em 0.6em', 'border-radius': '0.5em', 'font-size': '0.8em', 'border': '1px solid #111', 'display': 'inline-block', 'white-space': 'nowrap' }); } } return $tip; }; // as the name says FlotTooltip.prototype.updateTooltipPosition = function(pos) { var totalTipWidth = $("#flotTip").outerWidth() + this.tooltipOptions.shifts.x; var totalTipHeight = $("#flotTip").outerHeight() + this.tooltipOptions.shifts.y; if ((pos.x - $(window).scrollLeft()) > ($(window).innerWidth() - totalTipWidth)) { pos.x -= totalTipWidth; } if ((pos.y - $(window).scrollTop()) > ($(window).innerHeight() - totalTipHeight)) { pos.y -= totalTipHeight; } this.tipPosition.x = pos.x; this.tipPosition.y = pos.y; }; /** * core function, create tooltip content * @param {string} content - template with tooltip content * @param {object} item - Flot item * @return {string} real tooltip content for current item */ FlotTooltip.prototype.stringFormat = function(content, item) { var percentPattern = /%p\.{0,1}(\d{0,})/; var seriesPattern = /%s/; var xPattern = /%x\.{0,1}(\d{0,})/; var yPattern = /%y\.{0,1}(\d{0,})/; // if it is a function callback get the content string if( typeof(content) === 'function' ) { content = content(item.series.data[item.dataIndex][0], item.series.data[item.dataIndex][1]); } // percent match for pie charts if( typeof (item.series.percent) !== 'undefined' ) { content = this.adjustValPrecision(percentPattern, content, item.series.percent); } // series match if( typeof(item.series.label) !== 'undefined' ) { content = content.replace(seriesPattern, item.series.label); } // time mode axes with custom dateFormat if(this.isTimeMode('xaxis', item) && this.isXDateFormat(item)) { content = content.replace(xPattern, this.timestampToDate(item.series.data[item.dataIndex][0], this.tooltipOptions.xDateFormat)); } if(this.isTimeMode('yaxis', item) && this.isYDateFormat(item)) { content = content.replace(yPattern, this.timestampToDate(item.series.data[item.dataIndex][1], this.tooltipOptions.yDateFormat)); } // set precision if defined if( typeof item.series.data[item.dataIndex][0] === 'number' ) { content = this.adjustValPrecision(xPattern, content, item.series.data[item.dataIndex][0]); } if( typeof item.series.data[item.dataIndex][1] === 'number' ) { content = this.adjustValPrecision(yPattern, content, item.series.data[item.dataIndex][1]); } // if no value customization, use tickFormatter by default if(typeof item.series.xaxis.tickFormatter !== 'undefined') { content = content.replace(xPattern, item.series.xaxis.tickFormatter(item.series.data[item.dataIndex][0], item.series.xaxis)); } if(typeof item.series.yaxis.tickFormatter !== 'undefined') { content = content.replace(yPattern, item.series.yaxis.tickFormatter(item.series.data[item.dataIndex][1], item.series.yaxis)); } return content; }; // helpers just for readability FlotTooltip.prototype.isTimeMode = function(axisName, item) { return (typeof item.series[axisName].options.mode !== 'undefined' && item.series[axisName].options.mode === 'time'); }; FlotTooltip.prototype.isXDateFormat = function(item) { return (typeof this.tooltipOptions.xDateFormat !== 'undefined' && this.tooltipOptions.xDateFormat !== null); }; FlotTooltip.prototype.isYDateFormat = function(item) { return (typeof this.tooltipOptions.yDateFormat !== 'undefined' && this.tooltipOptions.yDateFormat !== null); }; // FlotTooltip.prototype.timestampToDate = function(tmst, dateFormat) { var theDate = new Date(tmst); return $.plot.formatDate(theDate, dateFormat); }; // FlotTooltip.prototype.adjustValPrecision = function(pattern, content, value) { var precision; if( content.match(pattern) !== null ) { if(RegExp.$1 !== '') { precision = RegExp.$1; value = value.toFixed(precision); // only replace content if precision exists content = content.replace(pattern, value); } } return content; }; // var init = function(plot) { new FlotTooltip(plot); }; // define Flot plugin $.plot.plugins.push({ init: init, options: defaultOptions, name: 'tooltip', version: '0.6.1' }); })(jQuery); ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/octoicons/octoicons.less ================================================ @icon-font-version: "1.0.1"; @font-face { font-family: 'octo-icon-migrate'; src: url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb&v=@{icon-font-version}'); src: url('../foundation/migrate/vendor/octoicons/octo-icon.eot?symvb#iefix&v=@{icon-font-version}') format('embedded-opentype'), url('../foundation/migrate/vendor/octoicons/octo-icon.ttf?symvb&v=@{icon-font-version}') format('truetype'), url('../foundation/migrate/vendor/octoicons/octo-icon.woff?symvb&v=@{icon-font-version}') format('woff'), url('../foundation/migrate/vendor/octoicons/octo-icon.svg?symvb#octo-icon&v=@{icon-font-version}') format('svg'); font-weight: normal; font-style: normal; font-display: block; } [class^="octo-icon-"], [class*=" octo-icon-"] { .icon-OctoFontMigrate(); } .octo-icon-size-20 { font-size: 20px; } // // The code below is generated by Icomoon // .octo-icon-earth { &:before { content: @octo-icon-earth; } } .octo-icon-language-letters { &:before { content: @octo-icon-language-letters; } } .octo-icon-database-flash { &:before { content: @octo-icon-database-flash; } } .octo-icon-collapse { &:before { content: @octo-icon-collapse; } } .octo-icon-music { &:before { content: @octo-icon-music; } } .octo-icon-envelope { &:before { content: @octo-icon-envelope; } } .octo-icon-heart { &:before { content: @octo-icon-heart; } } .octo-icon-star { &:before { content: @octo-icon-star; } } .octo-icon-user { &:before { content: @octo-icon-user; } } .octo-icon-film { &:before { content: @octo-icon-film; } } .octo-icon-check { &:before { content: @octo-icon-check; } } .octo-icon-remove { &:before { content: @octo-icon-remove; } } .octo-icon-close { &:before { content: @octo-icon-close; } } .octo-icon-search-minus { &:before { content: @octo-icon-search-minus; } } .octo-icon-search-plus { &:before { content: @octo-icon-search-plus; } } .octo-icon-power-off { &:before { content: @octo-icon-power-off; } } .octo-icon-signal { &:before { content: @octo-icon-signal; } } .octo-icon-gear { &:before { content: @octo-icon-gear; } } .octo-icon-cog { &:before { content: @octo-icon-cog; } } .octo-icon-home { &:before { content: @octo-icon-home; } } .octo-icon-file { &:before { content: @octo-icon-file; } } .octo-icon-clock { &:before { content: @octo-icon-clock; } } .octo-icon-road { &:before { content: @octo-icon-road; } } .octo-icon-arrow-circle-o-down { &:before { content: @octo-icon-arrow-circle-o-down; } } .octo-icon-arrow-circle-o-up { &:before { content: @octo-icon-arrow-circle-o-up; } } .octo-icon-inbox { &:before { content: @octo-icon-inbox; } } .octo-icon-play-circle { &:before { content: @octo-icon-play-circle; } } .octo-icon-rotate-right { &:before { content: @octo-icon-rotate-right; } } .octo-icon-repeat { &:before { content: @octo-icon-repeat; } } .octo-icon-refresh { &:before { content: @octo-icon-refresh; } } .octo-icon-list-alt { &:before { content: @octo-icon-list-alt; } } .octo-icon-headphones { &:before { content: @octo-icon-headphones; } } .octo-icon-volume-off { &:before { content: @octo-icon-volume-off; } } .octo-icon-volume-down { &:before { content: @octo-icon-volume-down; } } .octo-icon-volume-up { &:before { content: @octo-icon-volume-up; } } .octo-icon-qrcode { &:before { content: @octo-icon-qrcode; } } .octo-icon-barcode { &:before { content: @octo-icon-barcode; } } .octo-icon-tags { &:before { content: @octo-icon-tags; } } .octo-icon-book { &:before { content: @octo-icon-book; } } .octo-icon-bookmark { &:before { content: @octo-icon-bookmark; } } .octo-icon-print { &:before { content: @octo-icon-print; } } .octo-icon-camera { &:before { content: @octo-icon-camera; } } .octo-icon-font { &:before { content: @octo-icon-font; } } .octo-icon-text-height { &:before { content: @octo-icon-text-height; } } .octo-icon-text-width { &:before { content: @octo-icon-text-width; } } .octo-icon-video-camera { &:before { content: @octo-icon-video-camera; } } .octo-icon-photo { &:before { content: @octo-icon-photo; } } .octo-icon-image { &:before { content: @octo-icon-image; } } .octo-icon-picture { &:before { content: @octo-icon-picture; } } .octo-icon-pencil { &:before { content: @octo-icon-pencil; } } .octo-icon-map-marker { &:before { content: @octo-icon-map-marker; } } .octo-icon-adjust { &:before { content: @octo-icon-adjust; } } .octo-icon-edit { &:before { content: @octo-icon-edit; } } .octo-icon-pencil-square { &:before { content: @octo-icon-pencil-square; } } .octo-icon-share-square { &:before { content: @octo-icon-share-square; } } .octo-icon-check-square { &:before { content: @octo-icon-check-square; } } .octo-icon-arrows { &:before { content: @octo-icon-arrows; } } .octo-icon-pause { &:before { content: @octo-icon-pause; } } .octo-icon-stop { &:before { content: @octo-icon-stop; } } .octo-icon-eject { &:before { content: @octo-icon-eject; } } .octo-icon-chevron-right { &:before { content: @octo-icon-chevron-right; } } .octo-icon-plus-circle { &:before { content: @octo-icon-plus-circle; } } .octo-icon-minus-circle { &:before { content: @octo-icon-minus-circle; } } .octo-icon-times-circle { &:before { content: @octo-icon-times-circle; } } .octo-icon-check-circle { &:before { content: @octo-icon-check-circle; } } .octo-icon-question-circle { &:before { content: @octo-icon-question-circle; } } .octo-icon-info-circle { &:before { content: @octo-icon-info-circle; } } .octo-icon-crosshairs { &:before { content: @octo-icon-crosshairs; } } .octo-icon-times-circle-o { &:before { content: @octo-icon-times-circle-o; } } .octo-icon-check-circle-o { &:before { content: @octo-icon-check-circle-o; } } .octo-icon-ban { &:before { content: @octo-icon-ban; } } .octo-icon-arrow-left { &:before { content: @octo-icon-arrow-left; } } .octo-icon-arrow-right { &:before { content: @octo-icon-arrow-right; } } .octo-icon-arrow-up { &:before { content: @octo-icon-arrow-up; } } .octo-icon-arrow-down { &:before { content: @octo-icon-arrow-down; } } .octo-icon-mail-forward { &:before { content: @octo-icon-mail-forward; } } .octo-icon-share { &:before { content: @octo-icon-share; } } .octo-icon-expand { &:before { content: @octo-icon-expand; } } .octo-icon-compress { &:before { content: @octo-icon-compress; } } .octo-icon-minus { &:before { content: @octo-icon-minus; } } .octo-icon-asterisk { &:before { content: @octo-icon-asterisk; } } .octo-icon-exclamation-circle { &:before { content: @octo-icon-exclamation-circle; } } .octo-icon-gift { &:before { content: @octo-icon-gift; } } .octo-icon-leaf { &:before { content: @octo-icon-leaf; } } .octo-icon-fire { &:before { content: @octo-icon-fire; } } .octo-icon-eye { &:before { content: @octo-icon-eye; } } .octo-icon-eye-slash { &:before { content: @octo-icon-eye-slash; } } .octo-icon-calendar { &:before { content: @octo-icon-calendar; } } .octo-icon-comment { &:before { content: @octo-icon-comment; } } .octo-icon-chevron-down { &:before { content: @octo-icon-chevron-down; } } .octo-icon-retweet { &:before { content: @octo-icon-retweet; } } .octo-icon-shopping-cart { &:before { content: @octo-icon-shopping-cart; } } .octo-icon-folder { &:before { content: @octo-icon-folder; } } .octo-icon-folder-open { &:before { content: @octo-icon-folder-open; } } .octo-icon-arrows-v { &:before { content: @octo-icon-arrows-v; } } .octo-icon-arrows-h { &:before { content: @octo-icon-arrows-h; } } .octo-icon-bar-chart-o { &:before { content: @octo-icon-bar-chart-o; } } .octo-icon-bar-chart { &:before { content: @octo-icon-bar-chart; } } .octo-icon-twitter-square { &:before { content: @octo-icon-twitter-square; } } .octo-icon-facebook-square { &:before { content: @octo-icon-facebook-square; } } .octo-icon-camera-retro { &:before { content: @octo-icon-camera-retro; } } .octo-icon-key { &:before { content: @octo-icon-key; } } .octo-icon-cogs { &:before { content: @octo-icon-cogs; } } .octo-icon-comments { &:before { content: @octo-icon-comments; } } .octo-icon-thumbs-o-down { &:before { content: @octo-icon-thumbs-o-down; } } .octo-icon-heart-o { &:before { content: @octo-icon-heart-o; } } .octo-icon-sign-out { &:before { content: @octo-icon-sign-out; } } .octo-icon-linkedin-square { &:before { content: @octo-icon-linkedin-square; } } .octo-icon-thumb-tack { &:before { content: @octo-icon-thumb-tack; } } .octo-icon-external-link { &:before { content: @octo-icon-external-link; } } .octo-icon-sign-in { &:before { content: @octo-icon-sign-in; } } .octo-icon-trophy { &:before { content: @octo-icon-trophy; } } .octo-icon-upload { &:before { content: @octo-icon-upload; } } .octo-icon-lemon-o { &:before { content: @octo-icon-lemon-o; } } .octo-icon-phone { &:before { content: @octo-icon-phone; } } .octo-icon-square-o { &:before { content: @octo-icon-square-o; } } .octo-icon-bookmark-o { &:before { content: @octo-icon-bookmark-o; } } .octo-icon-phone-square { &:before { content: @octo-icon-phone-square; } } .octo-icon-twitter { &:before { content: @octo-icon-twitter; } } .octo-icon-facebook-f { &:before { content: @octo-icon-facebook-f; } } .octo-icon-facebook { &:before { content: @octo-icon-facebook; } } .octo-icon-unlock { &:before { content: @octo-icon-unlock; } } .octo-icon-credit-card { &:before { content: @octo-icon-credit-card; } } .octo-icon-feed { &:before { content: @octo-icon-feed; } } .octo-icon-rss { &:before { content: @octo-icon-rss; } } .octo-icon-hdd-o { &:before { content: @octo-icon-hdd-o; } } .octo-icon-certificate { &:before { content: @octo-icon-certificate; } } .octo-icon-arrow-circle-left { &:before { content: @octo-icon-arrow-circle-left; } } .octo-icon-arrow-circle-down { &:before { content: @octo-icon-arrow-circle-down; } } .octo-icon-wrench { &:before { content: @octo-icon-wrench; } } .octo-icon-tasks { &:before { content: @octo-icon-tasks; } } .octo-icon-filter { &:before { content: @octo-icon-filter; } } .octo-icon-briefcase { &:before { content: @octo-icon-briefcase; } } .octo-icon-arrows-alt { &:before { content: @octo-icon-arrows-alt; } } .octo-icon-group { &:before { content: @octo-icon-group; } } .octo-icon-chain { &:before { content: @octo-icon-chain; } } .octo-icon-flask { &:before { content: @octo-icon-flask; } } .octo-icon-cut { &:before { content: @octo-icon-cut; } } .octo-icon-scissors { &:before { content: @octo-icon-scissors; } } .octo-icon-copy { &:before { content: @octo-icon-copy; } } .octo-icon-files-o { &:before { content: @octo-icon-files-o; } } .octo-icon-square { &:before { content: @octo-icon-square; } } .octo-icon-navicon { &:before { content: @octo-icon-navicon; } } .octo-icon-reorder { &:before { content: @octo-icon-reorder; } } .octo-icon-bars { &:before { content: @octo-icon-bars; } } .octo-icon-list-ul { &:before { content: @octo-icon-list-ul; } } .octo-icon-list-ol { &:before { content: @octo-icon-list-ol; } } .octo-icon-strikethrough { &:before { content: @octo-icon-strikethrough; } } .octo-icon-magic { &:before { content: @octo-icon-magic; } } .octo-icon-truck { &:before { content: @octo-icon-truck; } } .octo-icon-pinterest { &:before { content: @octo-icon-pinterest; } } .octo-icon-pinterest-square { &:before { content: @octo-icon-pinterest-square; } } .octo-icon-google-plus-square { &:before { content: @octo-icon-google-plus-square; } } .octo-icon-google-plus { &:before { content: @octo-icon-google-plus; } } .octo-icon-caret-down { &:before { content: @octo-icon-caret-down; } } .octo-icon-caret-up { &:before { content: @octo-icon-caret-up; } } .octo-icon-caret-left { &:before { content: @octo-icon-caret-left; } } .octo-icon-caret-right { &:before { content: @octo-icon-caret-right; } } .octo-icon-columns { &:before { content: @octo-icon-columns; } } .octo-icon-sort { &:before { content: @octo-icon-sort; } } .octo-icon-sort-down { &:before { content: @octo-icon-sort-down; } } .octo-icon-sort-desc { &:before { content: @octo-icon-sort-desc; } } .octo-icon-sort-up { &:before { content: @octo-icon-sort-up; } } .octo-icon-sort-asc { &:before { content: @octo-icon-sort-asc; } } .octo-icon-linkedin { &:before { content: @octo-icon-linkedin; } } .octo-icon-rotate-left { &:before { content: @octo-icon-rotate-left; } } .octo-icon-legal { &:before { content: @octo-icon-legal; } } .octo-icon-gavel { &:before { content: @octo-icon-gavel; } } .octo-icon-dashboard { &:before { content: @octo-icon-dashboard; } } .octo-icon-tachometer { &:before { content: @octo-icon-tachometer; } } .octo-icon-comment-o { &:before { content: @octo-icon-comment-o; } } .octo-icon-comments-o { &:before { content: @octo-icon-comments-o; } } .octo-icon-sitemap { &:before { content: @octo-icon-sitemap; } } .octo-icon-umbrella { &:before { content: @octo-icon-umbrella; } } .octo-icon-clipboard { &:before { content: @octo-icon-clipboard; } } .octo-icon-lightbulb-o { &:before { content: @octo-icon-lightbulb-o; } } .octo-icon-exchange { &:before { content: @octo-icon-exchange; } } .octo-icon-user-md { &:before { content: @octo-icon-user-md; } } .octo-icon-stethoscope { &:before { content: @octo-icon-stethoscope; } } .octo-icon-suitcase { &:before { content: @octo-icon-suitcase; } } .octo-icon-bell-o { &:before { content: @octo-icon-bell-o; } } .octo-icon-coffee { &:before { content: @octo-icon-coffee; } } .octo-icon-file-text-o { &:before { content: @octo-icon-file-text-o; } } .octo-icon-building-o { &:before { content: @octo-icon-building-o; } } .octo-icon-hospital-o { &:before { content: @octo-icon-hospital-o; } } .octo-icon-ambulance { &:before { content: @octo-icon-ambulance; } } .octo-icon-medkit { &:before { content: @octo-icon-medkit; } } .octo-icon-fighter-jet { &:before { content: @octo-icon-fighter-jet; } } .octo-icon-beer { &:before { content: @octo-icon-beer; } } .octo-icon-h-square { &:before { content: @octo-icon-h-square; } } .octo-icon-plus-square { &:before { content: @octo-icon-plus-square; } } .octo-icon-angle-double-left { &:before { content: @octo-icon-angle-double-left; } } .octo-icon-angle-double-right { &:before { content: @octo-icon-angle-double-right; } } .octo-icon-angle-double-up { &:before { content: @octo-icon-angle-double-up; } } .octo-icon-angle-double-down { &:before { content: @octo-icon-angle-double-down; } } .octo-icon-angle-left { &:before { content: @octo-icon-angle-left; } } .octo-icon-angle-right { &:before { content: @octo-icon-angle-right; } } .octo-icon-desktop { &:before { content: @octo-icon-desktop; } } .octo-icon-laptop { &:before { content: @octo-icon-laptop; } } .octo-icon-tablet { &:before { content: @octo-icon-tablet; } } .octo-icon-mobile-phone { &:before { content: @octo-icon-mobile-phone; } } .octo-icon-mobile { &:before { content: @octo-icon-mobile; } } .octo-icon-circle-o { &:before { content: @octo-icon-circle-o; } } .octo-icon-quote-left { &:before { content: @octo-icon-quote-left; } } .octo-icon-quote-right { &:before { content: @octo-icon-quote-right; } } .octo-icon-spinner { &:before { content: @octo-icon-spinner; } } .octo-icon-circle { &:before { content: @octo-icon-circle; } } .octo-icon-mail-reply { &:before { content: @octo-icon-mail-reply; } } .octo-icon-reply { &:before { content: @octo-icon-reply; } } .octo-icon-folder-o { &:before { content: @octo-icon-folder-o; } } .octo-icon-folder-open-o { &:before { content: @octo-icon-folder-open-o; } } .octo-icon-smile-o { &:before { content: @octo-icon-smile-o; } } .octo-icon-frown-o { &:before { content: @octo-icon-frown-o; } } .octo-icon-meh-o { &:before { content: @octo-icon-meh-o; } } .octo-icon-keyboard-o { &:before { content: @octo-icon-keyboard-o; } } .octo-icon-flag-checkered { &:before { content: @octo-icon-flag-checkered; } } .octo-icon-terminal { &:before { content: @octo-icon-terminal; } } .octo-icon-code { &:before { content: @octo-icon-code; } } .octo-icon-mail-reply-all { &:before { content: @octo-icon-mail-reply-all; } } .octo-icon-reply-all { &:before { content: @octo-icon-reply-all; } } .octo-icon-location-arrow { &:before { content: @octo-icon-location-arrow; } } .octo-icon-crop { &:before { content: @octo-icon-crop; } } .octo-icon-chain-broken { &:before { content: @octo-icon-chain-broken; } } .octo-icon-question { &:before { content: @octo-icon-question; } } .octo-icon-exclamation { &:before { content: @octo-icon-exclamation; } } .octo-icon-superscript { &:before { content: @octo-icon-superscript; } } .octo-icon-subscript { &:before { content: @octo-icon-subscript; } } .octo-icon-puzzle-piece { &:before { content: @octo-icon-puzzle-piece; } } .octo-icon-microphone { &:before { content: @octo-icon-microphone; } } .octo-icon-microphone-slash { &:before { content: @octo-icon-microphone-slash; } } .octo-icon-shield { &:before { content: @octo-icon-shield; } } .octo-icon-calendar-o { &:before { content: @octo-icon-calendar-o; } } .octo-icon-fire-extinguisher { &:before { content: @octo-icon-fire-extinguisher; } } .octo-icon-rocket { &:before { content: @octo-icon-rocket; } } .octo-icon-chevron-circle-left { &:before { content: @octo-icon-chevron-circle-left; } } .octo-icon-chevron-circle-right { &:before { content: @octo-icon-chevron-circle-right; } } .octo-icon-chevron-circle-up { &:before { content: @octo-icon-chevron-circle-up; } } .octo-icon-chevron-circle-down { &:before { content: @octo-icon-chevron-circle-down; } } .octo-icon-html5 { &:before { content: @octo-icon-html5; } } .octo-icon-css3 { &:before { content: @octo-icon-css3; } } .octo-icon-anchor { &:before { content: @octo-icon-anchor; } } .octo-icon-unlock-alt { &:before { content: @octo-icon-unlock-alt; } } .octo-icon-bullseye { &:before { content: @octo-icon-bullseye; } } .octo-icon-rss-square { &:before { content: @octo-icon-rss-square; } } .octo-icon-minus-square { &:before { content: @octo-icon-minus-square; } } .octo-icon-minus-square-o { &:before { content: @octo-icon-minus-square-o; } } .octo-icon-level-down { &:before { content: @octo-icon-level-down; } } .octo-icon-toggle-down { &:before { content: @octo-icon-toggle-down; } } .octo-icon-caret-square-o-down { &:before { content: @octo-icon-caret-square-o-down; } } .octo-icon-toggle-up { &:before { content: @octo-icon-toggle-up; } } .octo-icon-caret-square-o-up { &:before { content: @octo-icon-caret-square-o-up; } } .octo-icon-caret-square-o-right { &:before { content: @octo-icon-caret-square-o-right; } } .octo-icon-euro { &:before { content: @octo-icon-euro; } } .octo-icon-sort-numeric-asc { &:before { content: @octo-icon-sort-numeric-asc; } } .octo-icon-sort-numeric-desc { &:before { content: @octo-icon-sort-numeric-desc; } } .octo-icon-eur { &:before { content: @octo-icon-eur; } } .octo-icon-gbp { &:before { content: @octo-icon-gbp; } } .octo-icon-dollar { &:before { content: @octo-icon-dollar; } } .octo-icon-usd { &:before { content: @octo-icon-usd; } } .octo-icon-bitcoin { &:before { content: @octo-icon-bitcoin; } } .octo-icon-btc { &:before { content: @octo-icon-btc; } } .octo-icon-file-text { &:before { content: @octo-icon-file-text; } } .octo-icon-thumbs-up { &:before { content: @octo-icon-thumbs-up; } } .octo-icon-thumbs-down { &:before { content: @octo-icon-thumbs-down; } } .octo-icon-youtube-square { &:before { content: @octo-icon-youtube-square; } } .octo-icon-youtube { &:before { content: @octo-icon-youtube; } } .octo-icon-xing { &:before { content: @octo-icon-xing; } } .octo-icon-xing-square { &:before { content: @octo-icon-xing-square; } } .octo-icon-youtube-play { &:before { content: @octo-icon-youtube-play; } } .octo-icon-dropbox { &:before { content: @octo-icon-dropbox; } } .octo-icon-stack-overflow { &:before { content: @octo-icon-stack-overflow; } } .octo-icon-instagram { &:before { content: @octo-icon-instagram; } } .octo-icon-flickr { &:before { content: @octo-icon-flickr; } } .octo-icon-tumblr { &:before { content: @octo-icon-tumblr; } } .octo-icon-tumblr-square { &:before { content: @octo-icon-tumblr-square; } } .octo-icon-long-arrow-down { &:before { content: @octo-icon-long-arrow-down; } } .octo-icon-long-arrow-up { &:before { content: @octo-icon-long-arrow-up; } } .octo-icon-long-arrow-left { &:before { content: @octo-icon-long-arrow-left; } } .octo-icon-long-arrow-right { &:before { content: @octo-icon-long-arrow-right; } } .octo-icon-apple { &:before { content: @octo-icon-apple; } } .octo-icon-windows { &:before { content: @octo-icon-windows; } } .octo-icon-android { &:before { content: @octo-icon-android; } } .octo-icon-dribbble { &:before { content: @octo-icon-dribbble; } } .octo-icon-foursquare { &:before { content: @octo-icon-foursquare; } } .octo-icon-female { &:before { content: @octo-icon-female; } } .octo-icon-male { &:before { content: @octo-icon-male; } } .octo-icon-sun-o { &:before { content: @octo-icon-sun-o; } } .octo-icon-moon-o { &:before { content: @octo-icon-moon-o; } } .octo-icon-archive { &:before { content: @octo-icon-archive; } } .octo-icon-bug { &:before { content: @octo-icon-bug; } } .octo-icon-vk { &:before { content: @octo-icon-vk; } } .octo-icon-weibo { &:before { content: @octo-icon-weibo; } } .octo-icon-renren { &:before { content: @octo-icon-renren; } } .octo-icon-arrow-circle-o-right { &:before { content: @octo-icon-arrow-circle-o-right; } } .octo-icon-arrow-circle-o-left { &:before { content: @octo-icon-arrow-circle-o-left; } } .octo-icon-caret-square-o-left { &:before { content: @octo-icon-caret-square-o-left; } } .octo-icon-dot-circle-o { &:before { content: @octo-icon-dot-circle-o; } } .octo-icon-wheelchair { &:before { content: @octo-icon-wheelchair; } } .octo-icon-plus-square-o { &:before { content: @octo-icon-plus-square-o; } } .octo-icon-space-shuttle { &:before { content: @octo-icon-space-shuttle; } } .octo-icon-envelope-square { &:before { content: @octo-icon-envelope-square; } } .octo-icon-institution { &:before { content: @octo-icon-institution; } } .octo-icon-bank { &:before { content: @octo-icon-bank; } } .octo-icon-university { &:before { content: @octo-icon-university; } } .octo-icon-mortar-board { &:before { content: @octo-icon-mortar-board; } } .octo-icon-yahoo { &:before { content: @octo-icon-yahoo; } } .octo-icon-reddit { &:before { content: @octo-icon-reddit; } } .octo-icon-reddit-square { &:before { content: @octo-icon-reddit-square; } } .octo-icon-delicious { &:before { content: @octo-icon-delicious; } } .octo-icon-digg { &:before { content: @octo-icon-digg; } } .octo-icon-drupal { &:before { content: @octo-icon-drupal; } } .octo-icon-language { &:before { content: @octo-icon-language; } } .octo-icon-building { &:before { content: @octo-icon-building; } } .octo-icon-paw { &:before { content: @octo-icon-paw; } } .octo-icon-spoon { &:before { content: @octo-icon-spoon; } } .octo-icon-steam { &:before { content: @octo-icon-steam; } } .octo-icon-steam-square { &:before { content: @octo-icon-steam-square; } } .octo-icon-automobile { &:before { content: @octo-icon-automobile; } } .octo-icon-car { &:before { content: @octo-icon-car; } } .octo-icon-cab { &:before { content: @octo-icon-cab; } } .octo-icon-taxi { &:before { content: @octo-icon-taxi; } } .octo-icon-tree { &:before { content: @octo-icon-tree; } } .octo-icon-database { &:before { content: @octo-icon-database; } } .octo-icon-file-pdf-o { &:before { content: @octo-icon-file-pdf-o; } } .octo-icon-file-word-o { &:before { content: @octo-icon-file-word-o; } } .octo-icon-file-excel-o { &:before { content: @octo-icon-file-excel-o; } } .octo-icon-file-powerpoint-o { &:before { content: @octo-icon-file-powerpoint-o; } } .octo-icon-file-photo-o { &:before { content: @octo-icon-file-photo-o; } } .octo-icon-file-picture-o { &:before { content: @octo-icon-file-picture-o; } } .octo-icon-file-image-o { &:before { content: @octo-icon-file-image-o; } } .octo-icon-file-zip-o { &:before { content: @octo-icon-file-zip-o; } } .octo-icon-file-archive-o { &:before { content: @octo-icon-file-archive-o; } } .octo-icon-file-sound-o { &:before { content: @octo-icon-file-sound-o; } } .octo-icon-file-audio-o { &:before { content: @octo-icon-file-audio-o; } } .octo-icon-file-video-o { &:before { content: @octo-icon-file-video-o; } } .octo-icon-file-code-o { &:before { content: @octo-icon-file-code-o; } } .octo-icon-vine { &:before { content: @octo-icon-vine; } } .octo-icon-life-bouy { &:before { content: @octo-icon-life-bouy; } } .octo-icon-life-buoy { &:before { content: @octo-icon-life-buoy; } } .octo-icon-life-saver { &:before { content: @octo-icon-life-saver; } } .octo-icon-support { &:before { content: @octo-icon-support; } } .octo-icon-life-ring { &:before { content: @octo-icon-life-ring; } } .octo-icon-ra { &:before { content: @octo-icon-ra; } } .octo-icon-empire { &:before { content: @octo-icon-empire; } } .octo-icon-tencent-weibo { &:before { content: @octo-icon-tencent-weibo; } } .octo-icon-send { &:before { content: @octo-icon-send; } } .octo-icon-paper-plane { &:before { content: @octo-icon-paper-plane; } } .octo-icon-send-o { &:before { content: @octo-icon-send-o; } } .octo-icon-paper-plane-o { &:before { content: @octo-icon-paper-plane-o; } } .octo-icon-history { &:before { content: @octo-icon-history; } } .octo-icon-circle-thin { &:before { content: @octo-icon-circle-thin; } } .octo-icon-paragraph { &:before { content: @octo-icon-paragraph; } } .octo-icon-sliders { &:before { content: @octo-icon-sliders; } } .octo-icon-share-alt { &:before { content: @octo-icon-share-alt; } } .octo-icon-share-alt-square { &:before { content: @octo-icon-share-alt-square; } } .octo-icon-bomb { &:before { content: @octo-icon-bomb; } } .octo-icon-soccer-ball-o { &:before { content: @octo-icon-soccer-ball-o; } } .octo-icon-futbol-o { &:before { content: @octo-icon-futbol-o; } } .octo-icon-tty { &:before { content: @octo-icon-tty; } } .octo-icon-binoculars { &:before { content: @octo-icon-binoculars; } } .octo-icon-twitch { &:before { content: @octo-icon-twitch; } } .octo-icon-yelp { &:before { content: @octo-icon-yelp; } } .octo-icon-newspaper-o { &:before { content: @octo-icon-newspaper-o; } } .octo-icon-wifi { &:before { content: @octo-icon-wifi; } } .octo-icon-calculator { &:before { content: @octo-icon-calculator; } } .octo-icon-paypal { &:before { content: @octo-icon-paypal; } } .octo-icon-cc-visa { &:before { content: @octo-icon-cc-visa; } } .octo-icon-cc-mastercard { &:before { content: @octo-icon-cc-mastercard; } } .octo-icon-cc-discover { &:before { content: @octo-icon-cc-discover; } } .octo-icon-cc-amex { &:before { content: @octo-icon-cc-amex; } } .octo-icon-cc-paypal { &:before { content: @octo-icon-cc-paypal; } } .octo-icon-cc-stripe { &:before { content: @octo-icon-cc-stripe; } } .octo-icon-bell-slash { &:before { content: @octo-icon-bell-slash; } } .octo-icon-bell-slash-o { &:before { content: @octo-icon-bell-slash-o; } } .octo-icon-at { &:before { content: @octo-icon-at; } } .octo-icon-paint-brush { &:before { content: @octo-icon-paint-brush; } } .octo-icon-birthday-cake { &:before { content: @octo-icon-birthday-cake; } } .octo-icon-area-chart { &:before { content: @octo-icon-area-chart; } } .octo-icon-pie-chart { &:before { content: @octo-icon-pie-chart; } } .octo-icon-line-chart { &:before { content: @octo-icon-line-chart; } } .octo-icon-lastfm { &:before { content: @octo-icon-lastfm; } } .octo-icon-lastfm-square { &:before { content: @octo-icon-lastfm-square; } } .octo-icon-toggle-off { &:before { content: @octo-icon-toggle-off; } } .octo-icon-toggle-on { &:before { content: @octo-icon-toggle-on; } } .octo-icon-bicycle { &:before { content: @octo-icon-bicycle; } } .octo-icon-bus { &:before { content: @octo-icon-bus; } } .octo-icon-cc { &:before { content: @octo-icon-cc; } } .octo-icon-cart-plus { &:before { content: @octo-icon-cart-plus; } } .octo-icon-cart-arrow-down { &:before { content: @octo-icon-cart-arrow-down; } } .octo-icon-diamond { &:before { content: @octo-icon-diamond; } } .octo-icon-ship { &:before { content: @octo-icon-ship; } } .octo-icon-street-view { &:before { content: @octo-icon-street-view; } } .octo-icon-heartbeat { &:before { content: @octo-icon-heartbeat; } } .octo-icon-venus { &:before { content: @octo-icon-venus; } } .octo-icon-mars { &:before { content: @octo-icon-mars; } } .octo-icon-transgender { &:before { content: @octo-icon-transgender; } } .octo-icon-transgender-alt { &:before { content: @octo-icon-transgender-alt; } } .octo-icon-facebook-official { &:before { content: @octo-icon-facebook-official; } } .octo-icon-pinterest-p { &:before { content: @octo-icon-pinterest-p; } } .octo-icon-whatsapp { &:before { content: @octo-icon-whatsapp; } } .octo-icon-server { &:before { content: @octo-icon-server; } } .octo-icon-user-plus { &:before { content: @octo-icon-user-plus; } } .octo-icon-hotel { &:before { content: @octo-icon-hotel; } } .octo-icon-bed { &:before { content: @octo-icon-bed; } } .octo-icon-train { &:before { content: @octo-icon-train; } } .octo-icon-subway { &:before { content: @octo-icon-subway; } } .octo-icon-battery-4 { &:before { content: @octo-icon-battery-4; } } .octo-icon-battery { &:before { content: @octo-icon-battery; } } .octo-icon-battery-full { &:before { content: @octo-icon-battery-full; } } .octo-icon-battery-3 { &:before { content: @octo-icon-battery-3; } } .octo-icon-battery-three-quarters { &:before { content: @octo-icon-battery-three-quarters; } } .octo-icon-battery-2 { &:before { content: @octo-icon-battery-2; } } .octo-icon-battery-half { &:before { content: @octo-icon-battery-half; } } .octo-icon-battery-1 { &:before { content: @octo-icon-battery-1; } } .octo-icon-battery-quarter { &:before { content: @octo-icon-battery-quarter; } } .octo-icon-battery-0 { &:before { content: @octo-icon-battery-0; } } .octo-icon-battery-empty { &:before { content: @octo-icon-battery-empty; } } .octo-icon-mouse-pointer { &:before { content: @octo-icon-mouse-pointer; } } .octo-icon-i-cursor { &:before { content: @octo-icon-i-cursor; } } .octo-icon-clone { &:before { content: @octo-icon-clone; } } .octo-icon-balance-scale { &:before { content: @octo-icon-balance-scale; } } .octo-icon-hourglass-1 { &:before { content: @octo-icon-hourglass-1; } } .octo-icon-hourglass-start { &:before { content: @octo-icon-hourglass-start; } } .octo-icon-hourglass-half { &:before { content: @octo-icon-hourglass-half; } } .octo-icon-odnoklassniki { &:before { content: @octo-icon-odnoklassniki; } } .octo-icon-odnoklassniki-square { &:before { content: @octo-icon-odnoklassniki-square; } } .octo-icon-wikipedia-w { &:before { content: @octo-icon-wikipedia-w; } } .octo-icon-tv { &:before { content: @octo-icon-tv; } } .octo-icon-television { &:before { content: @octo-icon-television; } } .octo-icon-px { &:before { content: @octo-icon-px; } } .octo-icon-amazon { &:before { content: @octo-icon-amazon; } } .octo-icon-calendar-plus-o { &:before { content: @octo-icon-calendar-plus-o; } } .octo-icon-calendar-minus-o { &:before { content: @octo-icon-calendar-minus-o; } } .octo-icon-calendar-times-o { &:before { content: @octo-icon-calendar-times-o; } } .octo-icon-calendar-check-o { &:before { content: @octo-icon-calendar-check-o; } } .octo-icon-industry { &:before { content: @octo-icon-industry; } } .octo-icon-map-signs { &:before { content: @octo-icon-map-signs; } } .octo-icon-commenting { &:before { content: @octo-icon-commenting; } } .octo-icon-black-tie { &:before { content: @octo-icon-black-tie; } } .octo-icon-reddit-alien { &:before { content: @octo-icon-reddit-alien; } } .octo-icon-credit-card-alt { &:before { content: @octo-icon-credit-card-alt; } } .octo-icon-scribd { &:before { content: @octo-icon-scribd; } } .octo-icon-usb { &:before { content: @octo-icon-usb; } } .octo-icon-pause-circle { &:before { content: @octo-icon-pause-circle; } } .octo-icon-pause-circle-o { &:before { content: @octo-icon-pause-circle-o; } } .octo-icon-stop-circle { &:before { content: @octo-icon-stop-circle; } } .octo-icon-stop-circle-o { &:before { content: @octo-icon-stop-circle-o; } } .octo-icon-shopping-bag { &:before { content: @octo-icon-shopping-bag; } } .octo-icon-shopping-basket { &:before { content: @octo-icon-shopping-basket; } } .octo-icon-hashtag { &:before { content: @octo-icon-hashtag; } } .octo-icon-bluetooth-b { &:before { content: @octo-icon-bluetooth-b; } } .octo-icon-wheelchair-alt { &:before { content: @octo-icon-wheelchair-alt; } } .octo-icon-question-circle-o { &:before { content: @octo-icon-question-circle-o; } } .octo-icon-blind { &:before { content: @octo-icon-blind; } } .octo-icon-volume-control-phone { &:before { content: @octo-icon-volume-control-phone; } } .octo-icon-braille { &:before { content: @octo-icon-braille; } } .octo-icon-snapchat { &:before { content: @octo-icon-snapchat; } } .octo-icon-snapchat-ghost { &:before { content: @octo-icon-snapchat-ghost; } } .octo-icon-snapchat-square { &:before { content: @octo-icon-snapchat-square; } } .octo-icon-google-plus-circle { &:before { content: @octo-icon-google-plus-circle; } } .octo-icon-google-plus-official { &:before { content: @octo-icon-google-plus-official; } } .octo-icon-handshake-o { &:before { content: @octo-icon-handshake-o; } } .octo-icon-envelope-open { &:before { content: @octo-icon-envelope-open; } } .octo-icon-envelope-open-o { &:before { content: @octo-icon-envelope-open-o; } } .octo-icon-address-book { &:before { content: @octo-icon-address-book; } } .octo-icon-address-book-o { &:before { content: @octo-icon-address-book-o; } } .octo-icon-vcard { &:before { content: @octo-icon-vcard; } } .octo-icon-address-card { &:before { content: @octo-icon-address-card; } } .octo-icon-vcard-o { &:before { content: @octo-icon-vcard-o; } } .octo-icon-address-card-o { &:before { content: @octo-icon-address-card-o; } } .octo-icon-user-circle { &:before { content: @octo-icon-user-circle; } } .octo-icon-user-circle-o { &:before { content: @octo-icon-user-circle-o; } } .octo-icon-user-o { &:before { content: @octo-icon-user-o; } } .octo-icon-id-badge { &:before { content: @octo-icon-id-badge; } } .octo-icon-drivers-license { &:before { content: @octo-icon-drivers-license; } } .octo-icon-id-card { &:before { content: @octo-icon-id-card; } } .octo-icon-drivers-license-o { &:before { content: @octo-icon-drivers-license-o; } } .octo-icon-id-card-o { &:before { content: @octo-icon-id-card-o; } } .octo-icon-quora { &:before { content: @octo-icon-quora; } } .octo-icon-thermometer-4 { &:before { content: @octo-icon-thermometer-4; } } .octo-icon-thermometer { &:before { content: @octo-icon-thermometer; } } .octo-icon-thermometer-3 { &:before { content: @octo-icon-thermometer-3; } } .octo-icon-thermometer-full { &:before { content: @octo-icon-thermometer-full; } } .octo-icon-thermometer-three-quarters { &:before { content: @octo-icon-thermometer-three-quarters; } } .octo-icon-thermometer-half { &:before { content: @octo-icon-thermometer-half; } } .octo-icon-thermometer-2 { &:before { content: @octo-icon-thermometer-2; } } .octo-icon-thermometer-1 { &:before { content: @octo-icon-thermometer-1; } } .octo-icon-thermometer-quarter { &:before { content: @octo-icon-thermometer-quarter; } } .octo-icon-thermometer-0 { &:before { content: @octo-icon-thermometer-0; } } .octo-icon-thermometer-empty { &:before { content: @octo-icon-thermometer-empty; } } .octo-icon-shower { &:before { content: @octo-icon-shower; } } .octo-icon-window-maximize { &:before { content: @octo-icon-window-maximize; } } .octo-icon-window-minimize { &:before { content: @octo-icon-window-minimize; } } .octo-icon-window-restore { &:before { content: @octo-icon-window-restore; } } .octo-icon-window-close { &:before { content: @octo-icon-window-close; } } .octo-icon-etsy { &:before { content: @octo-icon-etsy; } } .octo-icon-imdb { &:before { content: @octo-icon-imdb; } } .octo-icon-microchip { &:before { content: @octo-icon-microchip; } } .octo-icon-snowflake-o { &:before { content: @octo-icon-snowflake-o; } } .octo-icon-meetup { &:before { content: @octo-icon-meetup; } } .octo-icon-add-bold { &:before { content: @octo-icon-add-bold; } } .octo-icon-layers-grid-add { &:before { content: @octo-icon-layers-grid-add; } } .octo-icon-common-file-star { &:before { content: @octo-icon-common-file-star; } } .octo-icon-set-parent { &:before { content: @octo-icon-set-parent; } } .octo-icon-common-file-remove { &:before { content: @octo-icon-common-file-remove; } } .octo-icon-common-file-sync { &:before { content: @octo-icon-common-file-sync; } } .octo-icon-harddrive-upload { &:before { content: @octo-icon-harddrive-upload; } } .octo-icon-common-file-upload { &:before { content: @octo-icon-common-file-upload; } } .octo-icon-list-reorder { &:before { content: @octo-icon-list-reorder; } } .octo-icon-keyboard-return { &:before { content: @octo-icon-keyboard-return; } } .octo-icon-calendar-add { &:before { content: @octo-icon-calendar-add; } } .octo-icon-calendar-3 { &:before { content: @octo-icon-calendar-3; } } .octo-icon-calendar-disable { &:before { content: @octo-icon-calendar-disable; } } .octo-icon-calendar-check { &:before { content: @octo-icon-calendar-check; } } .octo-icon-calendar-clock { &:before { content: @octo-icon-calendar-clock; } } .octo-icon-notes-edit-active .path1 { &:before { content: @octo-icon-notes-edit-active-path1; color: rgb(255, 156, 9); } } .octo-icon-notes-edit-active .path2 { &:before { content: @octo-icon-notes-edit-active-path2; margin-left: -1em; color: rgb(83, 96, 97); } } .octo-icon-notes-edit { &:before { content: @octo-icon-notes-edit; } } .octo-icon-calendar-check-1 { &:before { content: @octo-icon-calendar-check-1; } } .octo-icon-user-actions-key { &:before { content: @octo-icon-user-actions-key; } } .octo-icon-id-card-1 { &:before { content: @octo-icon-id-card-1; } } .octo-icon-user-group { &:before { content: @octo-icon-user-group; } } .octo-icon-translate { &:before { content: @octo-icon-translate; } } .octo-icon-globe { &:before { content: @octo-icon-globe; } } .octo-icon-code-snippet { &:before { content: @octo-icon-code-snippet; } } .octo-icon-log-settings { &:before { content: @octo-icon-log-settings; } } .octo-icon-lock { &:before { content: @octo-icon-lock; } } .octo-icon-users { &:before { content: @octo-icon-users; } } .octo-icon-power { &:before { content: @octo-icon-power; } } .octo-icon-paint-brush-1 { &:before { content: @octo-icon-paint-brush-1; } } .octo-icon-mail-templates { &:before { content: @octo-icon-mail-templates; } } .octo-icon-mail-messages { &:before { content: @octo-icon-mail-messages; } } .octo-icon-mail-settings { &:before { content: @octo-icon-mail-settings; } } .octo-icon-mail-branding { &:before { content: @octo-icon-mail-branding; } } .octo-icon-download { &:before { content: @octo-icon-download; } } .octo-icon-plus { &:before { content: @octo-icon-plus; } } .octo-icon-cross { &:before { content: @octo-icon-cross; } } .octo-icon-callout-danger { &:before { content: @octo-icon-callout-danger; } } .octo-icon-callout-success { &:before { content: @octo-icon-callout-success; } } .octo-icon-callout-info { &:before { content: @octo-icon-callout-info; } } .octo-icon-add-above { &:before { content: @octo-icon-add-above; } } .octo-icon-add-below { &:before { content: @octo-icon-add-below; } } .octo-icon-check-multi { &:before { content: @octo-icon-check-multi; } } .octo-icon-unlink { &:before { content: @octo-icon-unlink; } } .octo-icon-list-add { &:before { content: @octo-icon-list-add; } } .octo-icon-list-remove { &:before { content: @octo-icon-list-remove; } } .octo-icon-create { &:before { content: @octo-icon-create; } } .octo-icon-preview { &:before { content: @octo-icon-preview; } } .octo-icon-window-split { &:before { content: @octo-icon-window-split; } } .octo-icon-eraser { &:before { content: @octo-icon-eraser; } } .octo-icon-text-code-block { &:before { content: @octo-icon-text-code-block; } } .octo-icon-text-h1 { &:before { content: @octo-icon-text-h1; } } .octo-icon-text-h3 { &:before { content: @octo-icon-text-h3; } } .octo-icon-text-h2 { &:before { content: @octo-icon-text-h2; } } .octo-icon-text-insert-table { &:before { content: @octo-icon-text-insert-table; } } .octo-icon-text-colors { &:before { content: @octo-icon-text-colors; } } .octo-icon-text-emoticons { &:before { content: @octo-icon-text-emoticons; } } .octo-icon-text-inline-style { &:before { content: @octo-icon-text-inline-style; } } .octo-icon-volume { &:before { content: @octo-icon-volume; } } .octo-icon-text-video { &:before { content: @octo-icon-text-video; } } .octo-icon-edit-code { &:before { content: @octo-icon-edit-code; } } .octo-icon-text-subscript { &:before { content: @octo-icon-text-subscript; } } .octo-icon-text-superscript { &:before { content: @octo-icon-text-superscript; } } .octo-icon-link { &:before { content: @octo-icon-link; } } .octo-icon-text-strikethrough { &:before { content: @octo-icon-text-strikethrough; } } .octo-icon-text-increase-indent { &:before { content: @octo-icon-text-increase-indent; } } .octo-icon-text-decrease-indent { &:before { content: @octo-icon-text-decrease-indent; } } .octo-icon-text-image { &:before { content: @octo-icon-text-image; } } .octo-icon-redo { &:before { content: @octo-icon-redo; } } .octo-icon-undo { &:before { content: @octo-icon-undo; } } .octo-icon-attachment { &:before { content: @octo-icon-attachment; } } .octo-icon-cursor-arrow { &:before { content: @octo-icon-cursor-arrow; } } .octo-icon-text-clear-formatting { &:before { content: @octo-icon-text-clear-formatting; } } .octo-icon-quote { &:before { content: @octo-icon-quote; } } .octo-icon-text-format-ul { &:before { content: @octo-icon-text-format-ul; } } .octo-icon-text-format-ol { &:before { content: @octo-icon-text-format-ol; } } .octo-icon-text-justify { &:before { content: @octo-icon-text-justify; } } .octo-icon-magic-wand { &:before { content: @octo-icon-magic-wand; } } .octo-icon-horizontal-line { &:before { content: @octo-icon-horizontal-line; } } .octo-icon-bold { &:before { content: @octo-icon-bold; } } .octo-icon-text-left { &:before { content: @octo-icon-text-left; } } .octo-icon-text-right { &:before { content: @octo-icon-text-right; } } .octo-icon-text-center { &:before { content: @octo-icon-text-center; } } .octo-icon-italic { &:before { content: @octo-icon-italic; } } .octo-icon-underline { &:before { content: @octo-icon-underline; } } .octo-icon-info { &:before { content: @octo-icon-info; } } .octo-icon-components { &:before { content: @octo-icon-components; } } .octo-icon-fullscreen-collapse { &:before { content: @octo-icon-fullscreen-collapse; } } .octo-icon-angle-down { &:before { content: @octo-icon-angle-down; } } .octo-icon-angle-up { &:before { content: @octo-icon-angle-up; } } .octo-icon-search { &:before { content: @octo-icon-search; } } .octo-icon-settings { &:before { content: @octo-icon-settings; } } .octo-icon-delete { &:before { content: @octo-icon-delete; } } .octo-icon-fullscreen { &:before { content: @octo-icon-fullscreen; } } .octo-icon-save { &:before { content: @octo-icon-save; } } .octo-icon-search-code { &:before { content: @octo-icon-search-code; } } .octo-icon-exit { &:before { content: @octo-icon-exit; } } .octo-icon-app-window { &:before { content: @octo-icon-app-window; } } .octo-icon-user-account { &:before { content: @octo-icon-user-account; } } .octo-icon-triangle-down { &:before { content: @octo-icon-triangle-down; } } .octo-icon-location-target { &:before { content: @octo-icon-location-target; } } ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/octoicons/octoicons.mixins.less ================================================ .icon-OctoFontMigrate() { // use !important to prevent issues with browser extensions that change fonts font-family: 'octo-icon-migrate' !important; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; // Better Font Rendering =========== -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/octoicons/octoicons.variables.less ================================================ // // Generated by Icomoon // @octo-icon-earth: "\eb55"; @octo-icon-language-letters: "\eb56"; @octo-icon-database-flash: "\eb54"; @octo-icon-collapse: "\eb26"; @octo-icon-music: "\e964"; @octo-icon-envelope: "\e965"; @octo-icon-heart: "\e966"; @octo-icon-star: "\e967"; @octo-icon-user: "\e968"; @octo-icon-film: "\e969"; @octo-icon-check: "\e96a"; @octo-icon-remove: "\e96b"; @octo-icon-close: "\e96c"; @octo-icon-search-minus: "\e96d"; @octo-icon-search-plus: "\e96e"; @octo-icon-power-off: "\e96f"; @octo-icon-signal: "\e970"; @octo-icon-gear: "\e971"; @octo-icon-cog: "\e972"; @octo-icon-home: "\e973"; @octo-icon-file: "\e974"; @octo-icon-clock: "\e975"; @octo-icon-road: "\e976"; @octo-icon-arrow-circle-o-down: "\e977"; @octo-icon-arrow-circle-o-up: "\e978"; @octo-icon-inbox: "\e979"; @octo-icon-play-circle: "\e97a"; @octo-icon-rotate-right: "\e97b"; @octo-icon-repeat: "\e97c"; @octo-icon-refresh: "\e97d"; @octo-icon-list-alt: "\e97e"; @octo-icon-headphones: "\e97f"; @octo-icon-volume-off: "\e980"; @octo-icon-volume-down: "\e981"; @octo-icon-volume-up: "\e982"; @octo-icon-qrcode: "\e983"; @octo-icon-barcode: "\e984"; @octo-icon-tags: "\e985"; @octo-icon-book: "\e986"; @octo-icon-bookmark: "\e987"; @octo-icon-print: "\e988"; @octo-icon-camera: "\e989"; @octo-icon-font: "\e98a"; @octo-icon-text-height: "\e98b"; @octo-icon-text-width: "\e98c"; @octo-icon-video-camera: "\e98d"; @octo-icon-photo: "\e98e"; @octo-icon-image: "\e98f"; @octo-icon-picture: "\e990"; @octo-icon-pencil: "\e991"; @octo-icon-map-marker: "\e992"; @octo-icon-adjust: "\e993"; @octo-icon-edit: "\e994"; @octo-icon-pencil-square: "\e995"; @octo-icon-share-square: "\e996"; @octo-icon-check-square: "\e997"; @octo-icon-arrows: "\e998"; @octo-icon-pause: "\e999"; @octo-icon-stop: "\e99a"; @octo-icon-eject: "\e99b"; @octo-icon-chevron-right: "\e99c"; @octo-icon-plus-circle: "\e99d"; @octo-icon-minus-circle: "\e99e"; @octo-icon-times-circle: "\e99f"; @octo-icon-check-circle: "\e9a0"; @octo-icon-question-circle: "\e9a1"; @octo-icon-info-circle: "\e9a2"; @octo-icon-crosshairs: "\e9a3"; @octo-icon-times-circle-o: "\e9a4"; @octo-icon-check-circle-o: "\e9a5"; @octo-icon-ban: "\e9a6"; @octo-icon-arrow-left: "\e9a7"; @octo-icon-arrow-right: "\e9a8"; @octo-icon-arrow-up: "\e9a9"; @octo-icon-arrow-down: "\e9aa"; @octo-icon-mail-forward: "\e9ab"; @octo-icon-share: "\e9ac"; @octo-icon-expand: "\e9ad"; @octo-icon-compress: "\e9ae"; @octo-icon-minus: "\e9af"; @octo-icon-asterisk: "\e9b0"; @octo-icon-exclamation-circle: "\e9b1"; @octo-icon-gift: "\e9b2"; @octo-icon-leaf: "\e9b3"; @octo-icon-fire: "\e9b4"; @octo-icon-eye: "\e9b5"; @octo-icon-eye-slash: "\e9b6"; @octo-icon-calendar: "\e9b7"; @octo-icon-comment: "\e9b8"; @octo-icon-chevron-down: "\e9b9"; @octo-icon-retweet: "\e9ba"; @octo-icon-shopping-cart: "\e9bb"; @octo-icon-folder: "\e9bc"; @octo-icon-folder-open: "\e9bd"; @octo-icon-arrows-v: "\e9be"; @octo-icon-arrows-h: "\e9bf"; @octo-icon-bar-chart-o: "\e9c0"; @octo-icon-bar-chart: "\e9c1"; @octo-icon-twitter-square: "\e9c2"; @octo-icon-facebook-square: "\e9c3"; @octo-icon-camera-retro: "\e9c4"; @octo-icon-key: "\e9c5"; @octo-icon-cogs: "\e9c6"; @octo-icon-comments: "\e9c7"; @octo-icon-thumbs-o-down: "\e9c8"; @octo-icon-heart-o: "\e9c9"; @octo-icon-sign-out: "\e9ca"; @octo-icon-linkedin-square: "\e9cb"; @octo-icon-thumb-tack: "\e9cc"; @octo-icon-external-link: "\e9cd"; @octo-icon-sign-in: "\e9ce"; @octo-icon-trophy: "\e9cf"; @octo-icon-upload: "\e9d0"; @octo-icon-lemon-o: "\e9d1"; @octo-icon-phone: "\e9d2"; @octo-icon-square-o: "\e9d3"; @octo-icon-bookmark-o: "\e9d4"; @octo-icon-phone-square: "\e9d5"; @octo-icon-twitter: "\e9d6"; @octo-icon-facebook-f: "\e9d7"; @octo-icon-facebook: "\e9d8"; @octo-icon-unlock: "\e9d9"; @octo-icon-credit-card: "\e9da"; @octo-icon-feed: "\e9db"; @octo-icon-rss: "\e9dc"; @octo-icon-hdd-o: "\e9dd"; @octo-icon-certificate: "\e9de"; @octo-icon-arrow-circle-left: "\e9df"; @octo-icon-arrow-circle-down: "\e9e0"; @octo-icon-wrench: "\e9e1"; @octo-icon-tasks: "\e9e2"; @octo-icon-filter: "\e9e3"; @octo-icon-briefcase: "\e9e4"; @octo-icon-arrows-alt: "\e9e5"; @octo-icon-group: "\e9e6"; @octo-icon-chain: "\e9e7"; @octo-icon-flask: "\e9e8"; @octo-icon-cut: "\e9e9"; @octo-icon-scissors: "\e9ea"; @octo-icon-copy: "\e9eb"; @octo-icon-files-o: "\e9ec"; @octo-icon-square: "\e9ed"; @octo-icon-navicon: "\e9ee"; @octo-icon-reorder: "\e9ef"; @octo-icon-bars: "\e9f0"; @octo-icon-list-ul: "\e9f1"; @octo-icon-list-ol: "\e9f2"; @octo-icon-strikethrough: "\e9f3"; @octo-icon-magic: "\e9f4"; @octo-icon-truck: "\e9f5"; @octo-icon-pinterest: "\e9f6"; @octo-icon-pinterest-square: "\e9f7"; @octo-icon-google-plus-square: "\e9f8"; @octo-icon-google-plus: "\e9f9"; @octo-icon-caret-down: "\e9fa"; @octo-icon-caret-up: "\e9fb"; @octo-icon-caret-left: "\e9fc"; @octo-icon-caret-right: "\e9fd"; @octo-icon-columns: "\e9fe"; @octo-icon-sort: "\e9ff"; @octo-icon-sort-down: "\ea00"; @octo-icon-sort-desc: "\ea01"; @octo-icon-sort-up: "\ea02"; @octo-icon-sort-asc: "\ea03"; @octo-icon-linkedin: "\ea04"; @octo-icon-rotate-left: "\ea05"; @octo-icon-legal: "\ea06"; @octo-icon-gavel: "\ea07"; @octo-icon-dashboard: "\ea08"; @octo-icon-tachometer: "\ea09"; @octo-icon-comment-o: "\ea0a"; @octo-icon-comments-o: "\ea0b"; @octo-icon-sitemap: "\ea0c"; @octo-icon-umbrella: "\ea0d"; @octo-icon-clipboard: "\ea0e"; @octo-icon-lightbulb-o: "\ea0f"; @octo-icon-exchange: "\ea10"; @octo-icon-user-md: "\ea11"; @octo-icon-stethoscope: "\ea12"; @octo-icon-suitcase: "\ea13"; @octo-icon-bell-o: "\ea14"; @octo-icon-coffee: "\ea15"; @octo-icon-file-text-o: "\ea16"; @octo-icon-building-o: "\ea17"; @octo-icon-hospital-o: "\ea18"; @octo-icon-ambulance: "\ea19"; @octo-icon-medkit: "\ea1a"; @octo-icon-fighter-jet: "\ea1b"; @octo-icon-beer: "\ea1c"; @octo-icon-h-square: "\ea1d"; @octo-icon-plus-square: "\ea1e"; @octo-icon-angle-double-left: "\ea1f"; @octo-icon-angle-double-right: "\ea20"; @octo-icon-angle-double-up: "\ea21"; @octo-icon-angle-double-down: "\ea22"; @octo-icon-angle-left: "\ea23"; @octo-icon-angle-right: "\ea24"; @octo-icon-desktop: "\ea25"; @octo-icon-laptop: "\ea26"; @octo-icon-tablet: "\ea27"; @octo-icon-mobile-phone: "\ea28"; @octo-icon-mobile: "\ea29"; @octo-icon-circle-o: "\ea2a"; @octo-icon-quote-left: "\ea2b"; @octo-icon-quote-right: "\ea2c"; @octo-icon-spinner: "\ea2d"; @octo-icon-circle: "\ea2e"; @octo-icon-mail-reply: "\ea2f"; @octo-icon-reply: "\ea30"; @octo-icon-folder-o: "\ea31"; @octo-icon-folder-open-o: "\ea32"; @octo-icon-smile-o: "\ea33"; @octo-icon-frown-o: "\ea34"; @octo-icon-meh-o: "\ea35"; @octo-icon-keyboard-o: "\ea36"; @octo-icon-flag-checkered: "\ea37"; @octo-icon-terminal: "\ea38"; @octo-icon-code: "\ea39"; @octo-icon-mail-reply-all: "\ea3a"; @octo-icon-reply-all: "\ea3b"; @octo-icon-location-arrow: "\ea3c"; @octo-icon-crop: "\ea3d"; @octo-icon-chain-broken: "\ea3e"; @octo-icon-question: "\ea3f"; @octo-icon-exclamation: "\ea40"; @octo-icon-superscript: "\ea41"; @octo-icon-subscript: "\ea42"; @octo-icon-puzzle-piece: "\ea43"; @octo-icon-microphone: "\ea44"; @octo-icon-microphone-slash: "\ea45"; @octo-icon-shield: "\ea46"; @octo-icon-calendar-o: "\ea47"; @octo-icon-fire-extinguisher: "\ea48"; @octo-icon-rocket: "\ea49"; @octo-icon-chevron-circle-left: "\ea4a"; @octo-icon-chevron-circle-right: "\ea4b"; @octo-icon-chevron-circle-up: "\ea4c"; @octo-icon-chevron-circle-down: "\ea4d"; @octo-icon-html5: "\ea4e"; @octo-icon-css3: "\ea4f"; @octo-icon-anchor: "\ea50"; @octo-icon-unlock-alt: "\ea51"; @octo-icon-bullseye: "\ea52"; @octo-icon-rss-square: "\ea53"; @octo-icon-minus-square: "\ea54"; @octo-icon-minus-square-o: "\ea55"; @octo-icon-level-down: "\ea56"; @octo-icon-toggle-down: "\ea57"; @octo-icon-caret-square-o-down: "\ea58"; @octo-icon-toggle-up: "\ea59"; @octo-icon-caret-square-o-up: "\ea5a"; @octo-icon-caret-square-o-right: "\ea5b"; @octo-icon-euro: "\ea5c"; @octo-icon-sort-numeric-asc: "\ea5d"; @octo-icon-sort-numeric-desc: "\ea5e"; @octo-icon-eur: "\ea5f"; @octo-icon-gbp: "\ea60"; @octo-icon-dollar: "\ea61"; @octo-icon-usd: "\ea62"; @octo-icon-bitcoin: "\ea63"; @octo-icon-btc: "\ea64"; @octo-icon-file-text: "\ea65"; @octo-icon-thumbs-up: "\ea66"; @octo-icon-thumbs-down: "\ea67"; @octo-icon-youtube-square: "\ea68"; @octo-icon-youtube: "\ea69"; @octo-icon-xing: "\ea6a"; @octo-icon-xing-square: "\ea6b"; @octo-icon-youtube-play: "\ea6c"; @octo-icon-dropbox: "\ea6d"; @octo-icon-stack-overflow: "\ea6e"; @octo-icon-instagram: "\ea6f"; @octo-icon-flickr: "\ea70"; @octo-icon-tumblr: "\ea71"; @octo-icon-tumblr-square: "\ea72"; @octo-icon-long-arrow-down: "\ea73"; @octo-icon-long-arrow-up: "\ea74"; @octo-icon-long-arrow-left: "\ea75"; @octo-icon-long-arrow-right: "\ea76"; @octo-icon-apple: "\ea77"; @octo-icon-windows: "\ea78"; @octo-icon-android: "\ea79"; @octo-icon-dribbble: "\ea7a"; @octo-icon-foursquare: "\ea7b"; @octo-icon-female: "\ea7c"; @octo-icon-male: "\ea7d"; @octo-icon-sun-o: "\ea7e"; @octo-icon-moon-o: "\ea7f"; @octo-icon-archive: "\ea80"; @octo-icon-bug: "\ea81"; @octo-icon-vk: "\ea82"; @octo-icon-weibo: "\ea83"; @octo-icon-renren: "\ea84"; @octo-icon-arrow-circle-o-right: "\ea85"; @octo-icon-arrow-circle-o-left: "\ea86"; @octo-icon-caret-square-o-left: "\ea87"; @octo-icon-dot-circle-o: "\ea88"; @octo-icon-wheelchair: "\ea89"; @octo-icon-plus-square-o: "\ea8a"; @octo-icon-space-shuttle: "\ea8b"; @octo-icon-envelope-square: "\ea8c"; @octo-icon-institution: "\ea8d"; @octo-icon-bank: "\ea8e"; @octo-icon-university: "\ea8f"; @octo-icon-mortar-board: "\ea90"; @octo-icon-yahoo: "\ea91"; @octo-icon-reddit: "\ea92"; @octo-icon-reddit-square: "\ea93"; @octo-icon-delicious: "\ea94"; @octo-icon-digg: "\ea95"; @octo-icon-drupal: "\ea96"; @octo-icon-language: "\ea97"; @octo-icon-building: "\ea98"; @octo-icon-paw: "\ea99"; @octo-icon-spoon: "\ea9a"; @octo-icon-steam: "\ea9b"; @octo-icon-steam-square: "\ea9c"; @octo-icon-automobile: "\ea9d"; @octo-icon-car: "\ea9e"; @octo-icon-cab: "\ea9f"; @octo-icon-taxi: "\eaa0"; @octo-icon-tree: "\eaa1"; @octo-icon-database: "\eaa2"; @octo-icon-file-pdf-o: "\eaa3"; @octo-icon-file-word-o: "\eaa4"; @octo-icon-file-excel-o: "\eaa5"; @octo-icon-file-powerpoint-o: "\eaa6"; @octo-icon-file-photo-o: "\eaa7"; @octo-icon-file-picture-o: "\eaa8"; @octo-icon-file-image-o: "\eaa9"; @octo-icon-file-zip-o: "\eaaa"; @octo-icon-file-archive-o: "\eaab"; @octo-icon-file-sound-o: "\eaac"; @octo-icon-file-audio-o: "\eaad"; @octo-icon-file-video-o: "\eaae"; @octo-icon-file-code-o: "\eaaf"; @octo-icon-vine: "\eab0"; @octo-icon-life-bouy: "\eab1"; @octo-icon-life-buoy: "\eab2"; @octo-icon-life-saver: "\eab3"; @octo-icon-support: "\eab4"; @octo-icon-life-ring: "\eab5"; @octo-icon-ra: "\eab6"; @octo-icon-empire: "\eab7"; @octo-icon-tencent-weibo: "\eab8"; @octo-icon-send: "\eab9"; @octo-icon-paper-plane: "\eaba"; @octo-icon-send-o: "\eabb"; @octo-icon-paper-plane-o: "\eabc"; @octo-icon-history: "\eabd"; @octo-icon-circle-thin: "\eabe"; @octo-icon-paragraph: "\eabf"; @octo-icon-sliders: "\eac0"; @octo-icon-share-alt: "\eac1"; @octo-icon-share-alt-square: "\eac2"; @octo-icon-bomb: "\eac3"; @octo-icon-soccer-ball-o: "\eac4"; @octo-icon-futbol-o: "\eac5"; @octo-icon-tty: "\eac6"; @octo-icon-binoculars: "\eac7"; @octo-icon-twitch: "\eac8"; @octo-icon-yelp: "\eac9"; @octo-icon-newspaper-o: "\eaca"; @octo-icon-wifi: "\eacb"; @octo-icon-calculator: "\eacc"; @octo-icon-paypal: "\eacd"; @octo-icon-cc-visa: "\eace"; @octo-icon-cc-mastercard: "\eacf"; @octo-icon-cc-discover: "\ead0"; @octo-icon-cc-amex: "\ead1"; @octo-icon-cc-paypal: "\ead2"; @octo-icon-cc-stripe: "\ead3"; @octo-icon-bell-slash: "\ead4"; @octo-icon-bell-slash-o: "\ead5"; @octo-icon-at: "\ead6"; @octo-icon-paint-brush: "\ead7"; @octo-icon-birthday-cake: "\ead8"; @octo-icon-area-chart: "\ead9"; @octo-icon-pie-chart: "\eada"; @octo-icon-line-chart: "\eadb"; @octo-icon-lastfm: "\eadc"; @octo-icon-lastfm-square: "\eadd"; @octo-icon-toggle-off: "\eade"; @octo-icon-toggle-on: "\eadf"; @octo-icon-bicycle: "\eae0"; @octo-icon-bus: "\eae1"; @octo-icon-cc: "\eae2"; @octo-icon-cart-plus: "\eae3"; @octo-icon-cart-arrow-down: "\eae4"; @octo-icon-diamond: "\eae5"; @octo-icon-ship: "\eae6"; @octo-icon-street-view: "\eae7"; @octo-icon-heartbeat: "\eae8"; @octo-icon-venus: "\eae9"; @octo-icon-mars: "\eaea"; @octo-icon-transgender: "\eaeb"; @octo-icon-transgender-alt: "\eaec"; @octo-icon-facebook-official: "\eaed"; @octo-icon-pinterest-p: "\eaee"; @octo-icon-whatsapp: "\eaef"; @octo-icon-server: "\eaf0"; @octo-icon-user-plus: "\eaf1"; @octo-icon-hotel: "\eaf2"; @octo-icon-bed: "\eaf3"; @octo-icon-train: "\eaf4"; @octo-icon-subway: "\eaf5"; @octo-icon-battery-4: "\eaf6"; @octo-icon-battery: "\eaf7"; @octo-icon-battery-full: "\eaf8"; @octo-icon-battery-3: "\eaf9"; @octo-icon-battery-three-quarters: "\eafa"; @octo-icon-battery-2: "\eafb"; @octo-icon-battery-half: "\eafc"; @octo-icon-battery-1: "\eafd"; @octo-icon-battery-quarter: "\eafe"; @octo-icon-battery-0: "\eaff"; @octo-icon-battery-empty: "\eb00"; @octo-icon-mouse-pointer: "\eb01"; @octo-icon-i-cursor: "\eb02"; @octo-icon-clone: "\eb03"; @octo-icon-balance-scale: "\eb04"; @octo-icon-hourglass-1: "\eb05"; @octo-icon-hourglass-start: "\eb06"; @octo-icon-hourglass-half: "\eb07"; @octo-icon-odnoklassniki: "\eb08"; @octo-icon-odnoklassniki-square: "\eb09"; @octo-icon-wikipedia-w: "\eb0a"; @octo-icon-tv: "\eb0b"; @octo-icon-television: "\eb0c"; @octo-icon-px: "\eb0d"; @octo-icon-amazon: "\eb0e"; @octo-icon-calendar-plus-o: "\eb0f"; @octo-icon-calendar-minus-o: "\eb10"; @octo-icon-calendar-times-o: "\eb11"; @octo-icon-calendar-check-o: "\eb12"; @octo-icon-industry: "\eb13"; @octo-icon-map-signs: "\eb14"; @octo-icon-commenting: "\eb15"; @octo-icon-black-tie: "\eb16"; @octo-icon-reddit-alien: "\eb17"; @octo-icon-credit-card-alt: "\eb18"; @octo-icon-scribd: "\eb19"; @octo-icon-usb: "\eb1a"; @octo-icon-pause-circle: "\eb1b"; @octo-icon-pause-circle-o: "\eb1c"; @octo-icon-stop-circle: "\eb1d"; @octo-icon-stop-circle-o: "\eb1e"; @octo-icon-shopping-bag: "\eb1f"; @octo-icon-shopping-basket: "\eb20"; @octo-icon-hashtag: "\eb21"; @octo-icon-bluetooth-b: "\eb22"; @octo-icon-wheelchair-alt: "\eb23"; @octo-icon-question-circle-o: "\eb24"; @octo-icon-blind: "\eb25"; @octo-icon-volume-control-phone: "\eb26"; @octo-icon-braille: "\eb27"; @octo-icon-snapchat: "\eb28"; @octo-icon-snapchat-ghost: "\eb29"; @octo-icon-snapchat-square: "\eb2a"; @octo-icon-google-plus-circle: "\eb2b"; @octo-icon-google-plus-official: "\eb2c"; @octo-icon-handshake-o: "\eb2d"; @octo-icon-envelope-open: "\eb2e"; @octo-icon-envelope-open-o: "\eb2f"; @octo-icon-address-book: "\eb30"; @octo-icon-address-book-o: "\eb31"; @octo-icon-vcard: "\eb32"; @octo-icon-address-card: "\eb33"; @octo-icon-vcard-o: "\eb34"; @octo-icon-address-card-o: "\eb35"; @octo-icon-user-circle: "\eb36"; @octo-icon-user-circle-o: "\eb37"; @octo-icon-user-o: "\eb38"; @octo-icon-id-badge: "\eb39"; @octo-icon-drivers-license: "\eb3a"; @octo-icon-id-card: "\eb3b"; @octo-icon-drivers-license-o: "\eb3c"; @octo-icon-id-card-o: "\eb3d"; @octo-icon-quora: "\eb3e"; @octo-icon-thermometer-4: "\eb3f"; @octo-icon-thermometer: "\eb40"; @octo-icon-thermometer-3: "\eb41"; @octo-icon-thermometer-full: "\eb42"; @octo-icon-thermometer-three-quarters: "\eb43"; @octo-icon-thermometer-half: "\eb44"; @octo-icon-thermometer-2: "\eb45"; @octo-icon-thermometer-1: "\eb46"; @octo-icon-thermometer-quarter: "\eb47"; @octo-icon-thermometer-0: "\eb48"; @octo-icon-thermometer-empty: "\eb49"; @octo-icon-shower: "\eb4a"; @octo-icon-window-maximize: "\eb4b"; @octo-icon-window-minimize: "\eb4c"; @octo-icon-window-restore: "\eb4d"; @octo-icon-window-close: "\eb4e"; @octo-icon-etsy: "\eb4f"; @octo-icon-imdb: "\eb50"; @octo-icon-microchip: "\eb51"; @octo-icon-snowflake-o: "\eb52"; @octo-icon-meetup: "\eb53"; @octo-icon-add-bold: "\e962"; @octo-icon-layers-grid-add: "\e963"; @octo-icon-common-file-star: "\e961"; @octo-icon-set-parent: "\e960"; @octo-icon-common-file-remove: "\e95c"; @octo-icon-common-file-sync: "\e95d"; @octo-icon-harddrive-upload: "\e95e"; @octo-icon-common-file-upload: "\e95f"; @octo-icon-list-reorder: "\e95b"; @octo-icon-keyboard-return: "\e95a"; @octo-icon-calendar-add: "\e951"; @octo-icon-calendar-3: "\e952"; @octo-icon-calendar-disable: "\e953"; @octo-icon-calendar-check: "\e954"; @octo-icon-calendar-clock: "\e955"; @octo-icon-notes-edit-active-path1: "\e956"; @octo-icon-notes-edit-active-path2: "\e957"; @octo-icon-notes-edit: "\e958"; @octo-icon-calendar-check-1: "\e959"; @octo-icon-user-actions-key: "\e950"; @octo-icon-id-card-1: "\e94e"; @octo-icon-user-group: "\e94f"; @octo-icon-globe: "\e94d"; @octo-icon-translate: "\e94c"; @octo-icon-code-snippet: "\e94b"; @octo-icon-log-settings: "\e941"; @octo-icon-lock: "\e949"; @octo-icon-users: "\e94a"; @octo-icon-mail-branding: "\e944"; @octo-icon-mail-settings: "\e946"; @octo-icon-mail-templates: "\e947"; @octo-icon-power: "\e942"; @octo-icon-paint-brush-1: "\e943"; @octo-icon-mail-messages: "\e945"; @octo-icon-download: "\e948"; @octo-icon-plus: "\e940"; @octo-icon-cross: "\e93e"; @octo-icon-callout-danger: "\e93d"; @octo-icon-callout-success: "\e93c"; @octo-icon-callout-info: "\e93f"; @octo-icon-add-above: "\e93a"; @octo-icon-add-below: "\e93b"; @octo-icon-check-multi: "\e939"; @octo-icon-unlink: "\e938"; @octo-icon-list-add: "\e935"; @octo-icon-list-remove: "\e936"; @octo-icon-create: "\e937"; @octo-icon-preview: "\e933"; @octo-icon-window-split: "\e934"; @octo-icon-eraser: "\e92e"; @octo-icon-text-code-block: "\e932"; @octo-icon-text-h1: "\e92f"; @octo-icon-text-h3: "\e930"; @octo-icon-text-h2: "\e931"; @octo-icon-text-insert-table: "\e915"; @octo-icon-text-colors: "\e91e"; @octo-icon-text-emoticons: "\e91f"; @octo-icon-text-inline-style: "\e924"; @octo-icon-volume: "\e925"; @octo-icon-text-video: "\e926"; @octo-icon-edit-code: "\e92b"; @octo-icon-text-subscript: "\e920"; @octo-icon-text-superscript: "\e921"; @octo-icon-link: "\e91b"; @octo-icon-text-strikethrough: "\e91d"; @octo-icon-text-increase-indent: "\e922"; @octo-icon-text-decrease-indent: "\e923"; @octo-icon-text-image: "\e927"; @octo-icon-redo: "\e928"; @octo-icon-undo: "\e929"; @octo-icon-attachment: "\e92a"; @octo-icon-cursor-arrow: "\e92c"; @octo-icon-text-clear-formatting: "\e92d"; @octo-icon-quote: "\e919"; @octo-icon-text-format-ul: "\e90c"; @octo-icon-text-format-ol: "\e90d"; @octo-icon-text-justify: "\e916"; @octo-icon-magic-wand: "\e918"; @octo-icon-horizontal-line: "\e91a"; @octo-icon-bold: "\e90f"; @octo-icon-text-left: "\e910"; @octo-icon-text-right: "\e911"; @octo-icon-text-center: "\e912"; @octo-icon-italic: "\e913"; @octo-icon-underline: "\e914"; @octo-icon-info: "\e917"; @octo-icon-components: "\e91c"; @octo-icon-fullscreen-collapse: "\e90e"; @octo-icon-angle-down: "\e90a"; @octo-icon-angle-up: "\e90b"; @octo-icon-search: "\e909"; @octo-icon-settings: "\e904"; @octo-icon-delete: "\e905"; @octo-icon-fullscreen: "\e906"; @octo-icon-save: "\e907"; @octo-icon-search-code: "\e908"; @octo-icon-exit: "\e901"; @octo-icon-app-window: "\e902"; @octo-icon-user-account: "\e903"; @octo-icon-triangle-down: "\e900"; @octo-icon-location-target: "\1f32b"; ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/raphael/raphael.js ================================================ // ┌────────────────────────────────────────────────────────────────────┐ \\ // │ Raphaël 2.2.7 - JavaScript Vector Library │ \\ // ├────────────────────────────────────────────────────────────────────┤ \\ // │ Copyright © 2008-2012 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ // │ Copyright © 2008-2012 Sencha Labs (http://sencha.com) │ \\ // ├────────────────────────────────────────────────────────────────────┤ \\ // │ Licensed under the MIT (http://raphaeljs.com/license.html) license.│ \\ // └────────────────────────────────────────────────────────────────────┘ \\ // Copyright (c) 2017 Adobe Systems Incorporated. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ┌────────────────────────────────────────────────────────────┐ \\ // │ Eve 0.5.4 - JavaScript Events Library │ \\ // ├────────────────────────────────────────────────────────────┤ \\ // │ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\ // └────────────────────────────────────────────────────────────┘ \\ // Link: https://github.com/adobe-webplatform/eve (function (glob) { var version = "0.5.4", has = "hasOwnProperty", separator = /[\.\/]/, comaseparator = /\s*,\s*/, wildcard = "*", numsort = function (a, b) { return a - b; }, current_event, stop, events = {n: {}}, firstDefined = function () { for (var i = 0, ii = this.length; i < ii; i++) { if (typeof this[i] != "undefined") { return this[i]; } } }, lastDefined = function () { var i = this.length; while (--i) { if (typeof this[i] != "undefined") { return this[i]; } } }, objtos = Object.prototype.toString, Str = String, isArray = Array.isArray || function (ar) { return ar instanceof Array || objtos.call(ar) == "[object Array]"; }, /*\ * eve [ method ] * Fires event with given `name`, given scope and other parameters. - name (string) name of the *event*, dot (`.`) or slash (`/`) separated - scope (object) context for the event handlers - varargs (...) the rest of arguments will be sent to event handlers = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value. \*/ eve = function (name, scope) { var oldstop = stop, args = Array.prototype.slice.call(arguments, 2), listeners = eve.listeners(name), z = 0, l, indexed = [], queue = {}, out = [], ce = current_event; out.firstDefined = firstDefined; out.lastDefined = lastDefined; current_event = name; stop = 0; for (var i = 0, ii = listeners.length; i < ii; i++) if ("zIndex" in listeners[i]) { indexed.push(listeners[i].zIndex); if (listeners[i].zIndex < 0) { queue[listeners[i].zIndex] = listeners[i]; } } indexed.sort(numsort); while (indexed[z] < 0) { l = queue[indexed[z++]]; out.push(l.apply(scope, args)); if (stop) { stop = oldstop; return out; } } for (i = 0; i < ii; i++) { l = listeners[i]; if ("zIndex" in l) { if (l.zIndex == indexed[z]) { out.push(l.apply(scope, args)); if (stop) { break; } do { z++; l = queue[indexed[z]]; l && out.push(l.apply(scope, args)); if (stop) { break; } } while (l) } else { queue[l.zIndex] = l; } } else { out.push(l.apply(scope, args)); if (stop) { break; } } } stop = oldstop; current_event = ce; return out; }; // Undocumented. Debug only. eve._events = events; /*\ * eve.listeners [ method ] * Internal method which gives you array of all event handlers that will be triggered by the given `name`. - name (string) name of the event, dot (`.`) or slash (`/`) separated = (array) array of event handlers \*/ eve.listeners = function (name) { var names = isArray(name) ? name : name.split(separator), e = events, item, items, k, i, ii, j, jj, nes, es = [e], out = []; for (i = 0, ii = names.length; i < ii; i++) { nes = []; for (j = 0, jj = es.length; j < jj; j++) { e = es[j].n; items = [e[names[i]], e[wildcard]]; k = 2; while (k--) { item = items[k]; if (item) { nes.push(item); out = out.concat(item.f || []); } } } es = nes; } return out; }; /*\ * eve.separator [ method ] * If for some reasons you don’t like default separators (`.` or `/`) you can specify yours * here. Be aware that if you pass a string longer than one character it will be treated as * a list of characters. - separator (string) new separator. Empty string resets to default: `.` or `/`. \*/ eve.separator = function (sep) { if (sep) { sep = Str(sep).replace(/(?=[\.\^\]\[\-])/g, "\\"); sep = "[" + sep + "]"; separator = new RegExp(sep); } else { separator = /[\.\/]/; } }; /*\ * eve.on [ method ] ** * Binds given event handler with a given name. You can use wildcards “`*`” for the names: | eve.on("*.under.*", f); | eve("mouse.under.floor"); // triggers f * Use @eve to trigger the listener. ** - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards - f (function) event handler function ** - name (array) if you don’t want to use separators, you can use array of strings - f (function) event handler function ** = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment. > Example: | eve.on("mouse", eatIt)(2); | eve.on("mouse", scream); | eve.on("mouse", catchIt)(1); * This will ensure that `catchIt` function will be called before `eatIt`. * * If you want to put your handler before non-indexed handlers, specify a negative value. * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”. \*/ eve.on = function (name, f) { if (typeof f != "function") { return function () {}; } var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator); for (var i = 0, ii = names.length; i < ii; i++) { (function (name) { var names = isArray(name) ? name : Str(name).split(separator), e = events, exist; for (var i = 0, ii = names.length; i < ii; i++) { e = e.n; e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}}); } e.f = e.f || []; for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) { exist = true; break; } !exist && e.f.push(f); }(names[i])); } return function (zIndex) { if (+zIndex == +zIndex) { f.zIndex = +zIndex; } }; }; /*\ * eve.f [ method ] ** * Returns function that will fire given event with optional arguments. * Arguments that will be passed to the result function will be also * concated to the list of final arguments. | el.onclick = eve.f("click", 1, 2); | eve.on("click", function (a, b, c) { | console.log(a, b, c); // 1, 2, [event object] | }); - event (string) event name - varargs (…) and any other arguments = (function) possible event handler function \*/ eve.f = function (event) { var attrs = [].slice.call(arguments, 1); return function () { eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0))); }; }; /*\ * eve.stop [ method ] ** * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing. \*/ eve.stop = function () { stop = 1; }; /*\ * eve.nt [ method ] ** * Could be used inside event handler to figure out actual name of the event. ** - subname (string) #optional subname of the event ** = (string) name of the event, if `subname` is not specified * or = (boolean) `true`, if current event’s name contains `subname` \*/ eve.nt = function (subname) { var cur = isArray(current_event) ? current_event.join(".") : current_event; if (subname) { return new RegExp("(?:\\.|\\/|^)" + subname + "(?:\\.|\\/|$)").test(cur); } return cur; }; /*\ * eve.nts [ method ] ** * Could be used inside event handler to figure out actual name of the event. ** ** = (array) names of the event \*/ eve.nts = function () { return isArray(current_event) ? current_event : current_event.split(separator); }; /*\ * eve.off [ method ] ** * Removes given function from the list of event listeners assigned to given name. * If no arguments specified all the events will be cleared. ** - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards - f (function) event handler function \*/ /*\ * eve.unbind [ method ] ** * See @eve.off \*/ eve.off = eve.unbind = function (name, f) { if (!name) { eve._events = events = {n: {}}; return; } var names = isArray(name) ? isArray(name[0]) ? name : [name] : Str(name).split(comaseparator); if (names.length > 1) { for (var i = 0, ii = names.length; i < ii; i++) { eve.off(names[i], f); } return; } names = isArray(name) ? name : Str(name).split(separator); var e, key, splice, i, ii, j, jj, cur = [events], inodes = []; for (i = 0, ii = names.length; i < ii; i++) { for (j = 0; j < cur.length; j += splice.length - 2) { splice = [j, 1]; e = cur[j].n; if (names[i] != wildcard) { if (e[names[i]]) { splice.push(e[names[i]]); inodes.unshift({ n: e, name: names[i] }); } } else { for (key in e) if (e[has](key)) { splice.push(e[key]); inodes.unshift({ n: e, name: key }); } } cur.splice.apply(cur, splice); } } for (i = 0, ii = cur.length; i < ii; i++) { e = cur[i]; while (e.n) { if (f) { if (e.f) { for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) { e.f.splice(j, 1); break; } !e.f.length && delete e.f; } for (key in e.n) if (e.n[has](key) && e.n[key].f) { var funcs = e.n[key].f; for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) { funcs.splice(j, 1); break; } !funcs.length && delete e.n[key].f; } } else { delete e.f; for (key in e.n) if (e.n[has](key) && e.n[key].f) { delete e.n[key].f; } } e = e.n; } } // prune inner nodes in path prune: for (i = 0, ii = inodes.length; i < ii; i++) { e = inodes[i]; for (key in e.n[e.name].f) { // not empty (has listeners) continue prune; } for (key in e.n[e.name].n) { // not empty (has children) continue prune; } // is empty delete e.n[e.name]; } }; /*\ * eve.once [ method ] ** * Binds given event handler with a given name to only run once then unbind itself. | eve.once("login", f); | eve("login"); // triggers f | eve("login"); // no listeners * Use @eve to trigger the listener. ** - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards - f (function) event handler function ** = (function) same return function as @eve.on \*/ eve.once = function (name, f) { var f2 = function () { eve.off(name, f2); return f.apply(this, arguments); }; return eve.on(name, f2); }; /*\ * eve.version [ property (string) ] ** * Current version of the library. \*/ eve.version = version; eve.toString = function () { return "You are running Eve " + version; }; glob.eve = eve; typeof module != "undefined" && module.exports ? module.exports = eve : typeof define === "function" && define.amd ? define("eve", [], function () { return eve; }) : glob.eve = eve; })(typeof window != "undefined" ? window : this); // ┌─────────────────────────────────────────────────────────────────────┐ \\ // │ "Raphaël 2.2.7" - JavaScript Vector Library │ \\ // ├─────────────────────────────────────────────────────────────────────┤ \\ // │ Copyright (c) 2008-2016 Dmitry Baranovskiy (http://raphaeljs.com) │ \\ // │ Copyright (c) 2008-2016 Sencha Labs (http://sencha.com) │ \\ // │ Licensed under the MIT (http://raphaeljs.com/license.html) license. │ \\ // └─────────────────────────────────────────────────────────────────────┘ \\ (function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(); else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') exports["Raphael"] = factory(); else root["Raphael"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1), __webpack_require__(3), __webpack_require__(4)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) { return R; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(2)], __WEBPACK_AMD_DEFINE_RESULT__ = function(eve) { /*\ * Raphael [ method ] ** * Creates a canvas object on which to draw. * You must do this first, as all future calls to drawing methods * from this instance will be bound to this canvas. > Parameters ** - container (HTMLElement|string) DOM element or its ID which is going to be a parent for drawing surface - width (number) - height (number) - callback (function) #optional callback function which is going to be executed in the context of newly created paper * or - x (number) - y (number) - width (number) - height (number) - callback (function) #optional callback function which is going to be executed in the context of newly created paper * or - all (array) (first 3 or 4 elements in the array are equal to [containerID, width, height] or [x, y, width, height]. The rest are element descriptions in format {type: type, }). See @Paper.add. - callback (function) #optional callback function which is going to be executed in the context of newly created paper * or - onReadyCallback (function) function that is going to be called on DOM ready event. You can also subscribe to this event via Eve’s “DOMLoad” event. In this case method returns `undefined`. = (object) @Paper > Usage | // Each of the following examples create a canvas | // that is 320px wide by 200px high. | // Canvas is created at the viewport’s 10,50 coordinate. | var paper = Raphael(10, 50, 320, 200); | // Canvas is created at the top left corner of the #notepad element | // (or its top right corner in dir="rtl" elements) | var paper = Raphael(document.getElementById("notepad"), 320, 200); | // Same as above | var paper = Raphael("notepad", 320, 200); | // Image dump | var set = Raphael(["notepad", 320, 200, { | type: "rect", | x: 10, | y: 10, | width: 25, | height: 25, | stroke: "#f00" | }, { | type: "text", | x: 30, | y: 40, | text: "Dump" | }]); \*/ function R(first) { if (R.is(first, "function")) { return loaded ? first() : eve.on("raphael.DOMload", first); } else if (R.is(first, array)) { return R._engine.create[apply](R, first.splice(0, 3 + R.is(first[0], nu))).add(first); } else { var args = Array.prototype.slice.call(arguments, 0); if (R.is(args[args.length - 1], "function")) { var f = args.pop(); return loaded ? f.call(R._engine.create[apply](R, args)) : eve.on("raphael.DOMload", function () { f.call(R._engine.create[apply](R, args)); }); } else { return R._engine.create[apply](R, arguments); } } } R.version = "2.2.0"; R.eve = eve; var loaded, separator = /[, ]+/, elements = {circle: 1, rect: 1, path: 1, ellipse: 1, text: 1, image: 1}, formatrg = /\{(\d+)\}/g, proto = "prototype", has = "hasOwnProperty", g = { doc: document, win: window }, oldRaphael = { was: Object.prototype[has].call(g.win, "Raphael"), is: g.win.Raphael }, Paper = function () { /*\ * Paper.ca [ property (object) ] ** * Shortcut for @Paper.customAttributes \*/ /*\ * Paper.customAttributes [ property (object) ] ** * If you have a set of attributes that you would like to represent * as a function of some number you can do it easily with custom attributes: > Usage | paper.customAttributes.hue = function (num) { | num = num % 1; | return {fill: "hsb(" + num + ", 0.75, 1)"}; | }; | // Custom attribute “hue” will change fill | // to be given hue with fixed saturation and brightness. | // Now you can use it like this: | var c = paper.circle(10, 10, 10).attr({hue: .45}); | // or even like this: | c.animate({hue: 1}, 1e3); | | // You could also create custom attribute | // with multiple parameters: | paper.customAttributes.hsb = function (h, s, b) { | return {fill: "hsb(" + [h, s, b].join(",") + ")"}; | }; | c.attr({hsb: "0.5 .8 1"}); | c.animate({hsb: [1, 0, 0.5]}, 1e3); \*/ this.ca = this.customAttributes = {}; }, paperproto, appendChild = "appendChild", apply = "apply", concat = "concat", supportsTouch = ('ontouchstart' in g.win) || g.win.DocumentTouch && g.doc instanceof DocumentTouch, //taken from Modernizr touch test E = "", S = " ", Str = String, split = "split", events = "click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[split](S), touchMap = { mousedown: "touchstart", mousemove: "touchmove", mouseup: "touchend" }, lowerCase = Str.prototype.toLowerCase, math = Math, mmax = math.max, mmin = math.min, abs = math.abs, pow = math.pow, PI = math.PI, nu = "number", string = "string", array = "array", toString = "toString", fillString = "fill", objectToString = Object.prototype.toString, paper = {}, push = "push", ISURL = R._ISURL = /^url\(['"]?(.+?)['"]?\)$/i, colourRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i, isnan = {"NaN": 1, "Infinity": 1, "-Infinity": 1}, bezierrg = /^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/, round = math.round, setAttribute = "setAttribute", toFloat = parseFloat, toInt = parseInt, upperCase = Str.prototype.toUpperCase, availableAttrs = R._availableAttrs = { "arrow-end": "none", "arrow-start": "none", blur: 0, "clip-rect": "0 0 1e9 1e9", cursor: "default", cx: 0, cy: 0, fill: "#fff", "fill-opacity": 1, font: '10px "Arial"', "font-family": '"Arial"', "font-size": "10", "font-style": "normal", "font-weight": 400, gradient: 0, height: 0, href: "http://raphaeljs.com/", "letter-spacing": 0, opacity: 1, path: "M0,0", r: 0, rx: 0, ry: 0, src: "", stroke: "#000", "stroke-dasharray": "", "stroke-linecap": "butt", "stroke-linejoin": "butt", "stroke-miterlimit": 0, "stroke-opacity": 1, "stroke-width": 1, target: "_blank", "text-anchor": "middle", title: "Raphael", transform: "", width: 0, x: 0, y: 0, "class": "" }, availableAnimAttrs = R._availableAnimAttrs = { blur: nu, "clip-rect": "csv", cx: nu, cy: nu, fill: "colour", "fill-opacity": nu, "font-size": nu, height: nu, opacity: nu, path: "path", r: nu, rx: nu, ry: nu, stroke: "colour", "stroke-opacity": nu, "stroke-width": nu, transform: "transform", width: nu, x: nu, y: nu }, whitespace = /[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]/g, commaSpaces = /[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/, hsrg = {hs: 1, rg: 1}, p2s = /,?([achlmqrstvxz]),?/gi, pathCommand = /([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig, tCommand = /([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/ig, pathValues = /(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/ig, radial_gradient = R._radial_gradient = /^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/, eldata = {}, sortByKey = function (a, b) { return a.key - b.key; }, sortByNumber = function (a, b) { return toFloat(a) - toFloat(b); }, fun = function () {}, pipe = function (x) { return x; }, rectPath = R._rectPath = function (x, y, w, h, r) { if (r) { return [["M", x + r, y], ["l", w - r * 2, 0], ["a", r, r, 0, 0, 1, r, r], ["l", 0, h - r * 2], ["a", r, r, 0, 0, 1, -r, r], ["l", r * 2 - w, 0], ["a", r, r, 0, 0, 1, -r, -r], ["l", 0, r * 2 - h], ["a", r, r, 0, 0, 1, r, -r], ["z"]]; } return [["M", x, y], ["l", w, 0], ["l", 0, h], ["l", -w, 0], ["z"]]; }, ellipsePath = function (x, y, rx, ry) { if (ry == null) { ry = rx; } return [["M", x, y], ["m", 0, -ry], ["a", rx, ry, 0, 1, 1, 0, 2 * ry], ["a", rx, ry, 0, 1, 1, 0, -2 * ry], ["z"]]; }, getPath = R._getPath = { path: function (el) { return el.attr("path"); }, circle: function (el) { var a = el.attrs; return ellipsePath(a.cx, a.cy, a.r); }, ellipse: function (el) { var a = el.attrs; return ellipsePath(a.cx, a.cy, a.rx, a.ry); }, rect: function (el) { var a = el.attrs; return rectPath(a.x, a.y, a.width, a.height, a.r); }, image: function (el) { var a = el.attrs; return rectPath(a.x, a.y, a.width, a.height); }, text: function (el) { var bbox = el._getBBox(); return rectPath(bbox.x, bbox.y, bbox.width, bbox.height); }, set : function(el) { var bbox = el._getBBox(); return rectPath(bbox.x, bbox.y, bbox.width, bbox.height); } }, /*\ * Raphael.mapPath [ method ] ** * Transform the path string with given matrix. > Parameters - path (string) path string - matrix (object) see @Matrix = (string) transformed path string \*/ mapPath = R.mapPath = function (path, matrix) { if (!matrix) { return path; } var x, y, i, j, ii, jj, pathi; path = path2curve(path); for (i = 0, ii = path.length; i < ii; i++) { pathi = path[i]; for (j = 1, jj = pathi.length; j < jj; j += 2) { x = matrix.x(pathi[j], pathi[j + 1]); y = matrix.y(pathi[j], pathi[j + 1]); pathi[j] = x; pathi[j + 1] = y; } } return path; }; R._g = g; /*\ * Raphael.type [ property (string) ] ** * Can be “SVG”, “VML” or empty, depending on browser support. \*/ R.type = (g.win.SVGAngle || g.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") ? "SVG" : "VML"); if (R.type == "VML") { var d = g.doc.createElement("div"), b; d.innerHTML = ''; b = d.firstChild; b.style.behavior = "url(#default#VML)"; if (!(b && typeof b.adj == "object")) { return (R.type = E); } d = null; } /*\ * Raphael.svg [ property (boolean) ] ** * `true` if browser supports SVG. \*/ /*\ * Raphael.vml [ property (boolean) ] ** * `true` if browser supports VML. \*/ R.svg = !(R.vml = R.type == "VML"); R._Paper = Paper; /*\ * Raphael.fn [ property (object) ] ** * You can add your own method to the canvas. For example if you want to draw a pie chart, * you can create your own pie chart function and ship it as a Raphaël plugin. To do this * you need to extend the `Raphael.fn` object. You should modify the `fn` object before a * Raphaël instance is created, otherwise it will take no effect. Please note that the * ability for namespaced plugins was removed in Raphael 2.0. It is up to the plugin to * ensure any namespacing ensures proper context. > Usage | Raphael.fn.arrow = function (x1, y1, x2, y2, size) { | return this.path( ... ); | }; | // or create namespace | Raphael.fn.mystuff = { | arrow: function () {…}, | star: function () {…}, | // etc… | }; | var paper = Raphael(10, 10, 630, 480); | // then use it | paper.arrow(10, 10, 30, 30, 5).attr({fill: "#f00"}); | paper.mystuff.arrow(); | paper.mystuff.star(); \*/ R.fn = paperproto = Paper.prototype = R.prototype; R._id = 0; /*\ * Raphael.is [ method ] ** * Handful of replacements for `typeof` operator. > Parameters - o (…) any object or primitive - type (string) name of the type, i.e. “string”, “function”, “number”, etc. = (boolean) is given value is of given type \*/ R.is = function (o, type) { type = lowerCase.call(type); if (type == "finite") { return !isnan[has](+o); } if (type == "array") { return o instanceof Array; } return (type == "null" && o === null) || (type == typeof o && o !== null) || (type == "object" && o === Object(o)) || (type == "array" && Array.isArray && Array.isArray(o)) || objectToString.call(o).slice(8, -1).toLowerCase() == type; }; function clone(obj) { if (typeof obj == "function" || Object(obj) !== obj) { return obj; } var res = new obj.constructor; for (var key in obj) if (obj[has](key)) { res[key] = clone(obj[key]); } return res; } /*\ * Raphael.angle [ method ] ** * Returns angle between two or three points > Parameters - x1 (number) x coord of first point - y1 (number) y coord of first point - x2 (number) x coord of second point - y2 (number) y coord of second point - x3 (number) #optional x coord of third point - y3 (number) #optional y coord of third point = (number) angle in degrees. \*/ R.angle = function (x1, y1, x2, y2, x3, y3) { if (x3 == null) { var x = x1 - x2, y = y1 - y2; if (!x && !y) { return 0; } return (180 + math.atan2(-y, -x) * 180 / PI + 360) % 360; } else { return R.angle(x1, y1, x3, y3) - R.angle(x2, y2, x3, y3); } }; /*\ * Raphael.rad [ method ] ** * Transform angle to radians > Parameters - deg (number) angle in degrees = (number) angle in radians. \*/ R.rad = function (deg) { return deg % 360 * PI / 180; }; /*\ * Raphael.deg [ method ] ** * Transform angle to degrees > Parameters - rad (number) angle in radians = (number) angle in degrees. \*/ R.deg = function (rad) { return Math.round ((rad * 180 / PI% 360)* 1000) / 1000; }; /*\ * Raphael.snapTo [ method ] ** * Snaps given value to given grid. > Parameters - values (array|number) given array of values or step of the grid - value (number) value to adjust - tolerance (number) #optional tolerance for snapping. Default is `10`. = (number) adjusted value. \*/ R.snapTo = function (values, value, tolerance) { tolerance = R.is(tolerance, "finite") ? tolerance : 10; if (R.is(values, array)) { var i = values.length; while (i--) if (abs(values[i] - value) <= tolerance) { return values[i]; } } else { values = +values; var rem = value % values; if (rem < tolerance) { return value - rem; } if (rem > values - tolerance) { return value - rem + values; } } return value; }; /*\ * Raphael.createUUID [ method ] ** * Returns RFC4122, version 4 ID \*/ var createUUID = R.createUUID = (function (uuidRegEx, uuidReplacer) { return function () { return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(uuidRegEx, uuidReplacer).toUpperCase(); }; })(/[xy]/g, function (c) { var r = math.random() * 16 | 0, v = c == "x" ? r : (r & 3 | 8); return v.toString(16); }); /*\ * Raphael.setWindow [ method ] ** * Used when you need to draw in `<iframe>`. Switched window to the iframe one. > Parameters - newwin (window) new window object \*/ R.setWindow = function (newwin) { eve("raphael.setWindow", R, g.win, newwin); g.win = newwin; g.doc = g.win.document; if (R._engine.initWin) { R._engine.initWin(g.win); } }; var toHex = function (color) { if (R.vml) { // http://dean.edwards.name/weblog/2009/10/convert-any-colour-value-to-hex-in-msie/ var trim = /^\s+|\s+$/g; var bod; try { var docum = new ActiveXObject("htmlfile"); docum.write(""); docum.close(); bod = docum.body; } catch(e) { bod = createPopup().document.body; } var range = bod.createTextRange(); toHex = cacher(function (color) { try { bod.style.color = Str(color).replace(trim, E); var value = range.queryCommandValue("ForeColor"); value = ((value & 255) << 16) | (value & 65280) | ((value & 16711680) >>> 16); return "#" + ("000000" + value.toString(16)).slice(-6); } catch(e) { return "none"; } }); } else { var i = g.doc.createElement("i"); i.title = "Rapha\xebl Colour Picker"; i.style.display = "none"; g.doc.body.appendChild(i); toHex = cacher(function (color) { i.style.color = color; return g.doc.defaultView.getComputedStyle(i, E).getPropertyValue("color"); }); } return toHex(color); }, hsbtoString = function () { return "hsb(" + [this.h, this.s, this.b] + ")"; }, hsltoString = function () { return "hsl(" + [this.h, this.s, this.l] + ")"; }, rgbtoString = function () { return this.hex; }, prepareRGB = function (r, g, b) { if (g == null && R.is(r, "object") && "r" in r && "g" in r && "b" in r) { b = r.b; g = r.g; r = r.r; } if (g == null && R.is(r, string)) { var clr = R.getRGB(r); r = clr.r; g = clr.g; b = clr.b; } if (r > 1 || g > 1 || b > 1) { r /= 255; g /= 255; b /= 255; } return [r, g, b]; }, packageRGB = function (r, g, b, o) { r *= 255; g *= 255; b *= 255; var rgb = { r: r, g: g, b: b, hex: R.rgb(r, g, b), toString: rgbtoString }; R.is(o, "finite") && (rgb.opacity = o); return rgb; }; /*\ * Raphael.color [ method ] ** * Parses the color string and returns object with all values for the given color. > Parameters - clr (string) color string in one of the supported formats (see @Raphael.getRGB) = (object) Combined RGB & HSB object in format: o { o r (number) red, o g (number) green, o b (number) blue, o hex (string) color in HTML/CSS format: #••••••, o error (boolean) `true` if string can’t be parsed, o h (number) hue, o s (number) saturation, o v (number) value (brightness), o l (number) lightness o } \*/ R.color = function (clr) { var rgb; if (R.is(clr, "object") && "h" in clr && "s" in clr && "b" in clr) { rgb = R.hsb2rgb(clr); clr.r = rgb.r; clr.g = rgb.g; clr.b = rgb.b; clr.hex = rgb.hex; } else if (R.is(clr, "object") && "h" in clr && "s" in clr && "l" in clr) { rgb = R.hsl2rgb(clr); clr.r = rgb.r; clr.g = rgb.g; clr.b = rgb.b; clr.hex = rgb.hex; } else { if (R.is(clr, "string")) { clr = R.getRGB(clr); } if (R.is(clr, "object") && "r" in clr && "g" in clr && "b" in clr) { rgb = R.rgb2hsl(clr); clr.h = rgb.h; clr.s = rgb.s; clr.l = rgb.l; rgb = R.rgb2hsb(clr); clr.v = rgb.b; } else { clr = {hex: "none"}; clr.r = clr.g = clr.b = clr.h = clr.s = clr.v = clr.l = -1; } } clr.toString = rgbtoString; return clr; }; /*\ * Raphael.hsb2rgb [ method ] ** * Converts HSB values to RGB object. > Parameters - h (number) hue - s (number) saturation - v (number) value or brightness = (object) RGB object in format: o { o r (number) red, o g (number) green, o b (number) blue, o hex (string) color in HTML/CSS format: #•••••• o } \*/ R.hsb2rgb = function (h, s, v, o) { if (this.is(h, "object") && "h" in h && "s" in h && "b" in h) { v = h.b; s = h.s; o = h.o; h = h.h; } h *= 360; var R, G, B, X, C; h = (h % 360) / 60; C = v * s; X = C * (1 - abs(h % 2 - 1)); R = G = B = v - C; h = ~~h; R += [C, X, 0, 0, X, C][h]; G += [X, C, C, X, 0, 0][h]; B += [0, 0, X, C, C, X][h]; return packageRGB(R, G, B, o); }; /*\ * Raphael.hsl2rgb [ method ] ** * Converts HSL values to RGB object. > Parameters - h (number) hue - s (number) saturation - l (number) luminosity = (object) RGB object in format: o { o r (number) red, o g (number) green, o b (number) blue, o hex (string) color in HTML/CSS format: #•••••• o } \*/ R.hsl2rgb = function (h, s, l, o) { if (this.is(h, "object") && "h" in h && "s" in h && "l" in h) { l = h.l; s = h.s; h = h.h; } if (h > 1 || s > 1 || l > 1) { h /= 360; s /= 100; l /= 100; } h *= 360; var R, G, B, X, C; h = (h % 360) / 60; C = 2 * s * (l < .5 ? l : 1 - l); X = C * (1 - abs(h % 2 - 1)); R = G = B = l - C / 2; h = ~~h; R += [C, X, 0, 0, X, C][h]; G += [X, C, C, X, 0, 0][h]; B += [0, 0, X, C, C, X][h]; return packageRGB(R, G, B, o); }; /*\ * Raphael.rgb2hsb [ method ] ** * Converts RGB values to HSB object. > Parameters - r (number) red - g (number) green - b (number) blue = (object) HSB object in format: o { o h (number) hue o s (number) saturation o b (number) brightness o } \*/ R.rgb2hsb = function (r, g, b) { b = prepareRGB(r, g, b); r = b[0]; g = b[1]; b = b[2]; var H, S, V, C; V = mmax(r, g, b); C = V - mmin(r, g, b); H = (C == 0 ? null : V == r ? (g - b) / C : V == g ? (b - r) / C + 2 : (r - g) / C + 4 ); H = ((H + 360) % 6) * 60 / 360; S = C == 0 ? 0 : C / V; return {h: H, s: S, b: V, toString: hsbtoString}; }; /*\ * Raphael.rgb2hsl [ method ] ** * Converts RGB values to HSL object. > Parameters - r (number) red - g (number) green - b (number) blue = (object) HSL object in format: o { o h (number) hue o s (number) saturation o l (number) luminosity o } \*/ R.rgb2hsl = function (r, g, b) { b = prepareRGB(r, g, b); r = b[0]; g = b[1]; b = b[2]; var H, S, L, M, m, C; M = mmax(r, g, b); m = mmin(r, g, b); C = M - m; H = (C == 0 ? null : M == r ? (g - b) / C : M == g ? (b - r) / C + 2 : (r - g) / C + 4); H = ((H + 360) % 6) * 60 / 360; L = (M + m) / 2; S = (C == 0 ? 0 : L < .5 ? C / (2 * L) : C / (2 - 2 * L)); return {h: H, s: S, l: L, toString: hsltoString}; }; R._path2string = function () { return this.join(",").replace(p2s, "$1"); }; function repush(array, item) { for (var i = 0, ii = array.length; i < ii; i++) if (array[i] === item) { return array.push(array.splice(i, 1)[0]); } } function cacher(f, scope, postprocessor) { function newf() { var arg = Array.prototype.slice.call(arguments, 0), args = arg.join("\u2400"), cache = newf.cache = newf.cache || {}, count = newf.count = newf.count || []; if (cache[has](args)) { repush(count, args); return postprocessor ? postprocessor(cache[args]) : cache[args]; } count.length >= 1e3 && delete cache[count.shift()]; count.push(args); cache[args] = f[apply](scope, arg); return postprocessor ? postprocessor(cache[args]) : cache[args]; } return newf; } var preload = R._preload = function (src, f) { var img = g.doc.createElement("img"); img.style.cssText = "position:absolute;left:-9999em;top:-9999em"; img.onload = function () { f.call(this); this.onload = null; g.doc.body.removeChild(this); }; img.onerror = function () { g.doc.body.removeChild(this); }; g.doc.body.appendChild(img); img.src = src; }; function clrToString() { return this.hex; } /*\ * Raphael.getRGB [ method ] ** * Parses colour string as RGB object > Parameters - colour (string) colour string in one of formats: #
      #
    • Colour name (“red”, “green”, “cornflowerblue”, etc)
    • #
    • #••• — shortened HTML colour: (“#000”, “#fc0”, etc)
    • #
    • #•••••• — full length HTML colour: (“#000000”, “#bd2300”)
    • #
    • rgb(•••, •••, •••) — red, green and blue channels’ values: (“rgb(200, 100, 0)”)
    • #
    • rgb(•••%, •••%, •••%) — same as above, but in %: (“rgb(100%, 175%, 0%)”)
    • #
    • hsb(•••, •••, •••) — hue, saturation and brightness values: (“hsb(0.5, 0.25, 1)”)
    • #
    • hsb(•••%, •••%, •••%) — same as above, but in %
    • #
    • hsl(•••, •••, •••) — same as hsb
    • #
    • hsl(•••%, •••%, •••%) — same as hsb
    • #
    = (object) RGB object in format: o { o r (number) red, o g (number) green, o b (number) blue o hex (string) color in HTML/CSS format: #••••••, o error (boolean) true if string can’t be parsed o } \*/ R.getRGB = cacher(function (colour) { if (!colour || !!((colour = Str(colour)).indexOf("-") + 1)) { return {r: -1, g: -1, b: -1, hex: "none", error: 1, toString: clrToString}; } if (colour == "none") { return {r: -1, g: -1, b: -1, hex: "none", toString: clrToString}; } !(hsrg[has](colour.toLowerCase().substring(0, 2)) || colour.charAt() == "#") && (colour = toHex(colour)); var res, red, green, blue, opacity, t, values, rgb = colour.match(colourRegExp); if (rgb) { if (rgb[2]) { blue = toInt(rgb[2].substring(5), 16); green = toInt(rgb[2].substring(3, 5), 16); red = toInt(rgb[2].substring(1, 3), 16); } if (rgb[3]) { blue = toInt((t = rgb[3].charAt(3)) + t, 16); green = toInt((t = rgb[3].charAt(2)) + t, 16); red = toInt((t = rgb[3].charAt(1)) + t, 16); } if (rgb[4]) { values = rgb[4][split](commaSpaces); red = toFloat(values[0]); values[0].slice(-1) == "%" && (red *= 2.55); green = toFloat(values[1]); values[1].slice(-1) == "%" && (green *= 2.55); blue = toFloat(values[2]); values[2].slice(-1) == "%" && (blue *= 2.55); rgb[1].toLowerCase().slice(0, 4) == "rgba" && (opacity = toFloat(values[3])); values[3] && values[3].slice(-1) == "%" && (opacity /= 100); } if (rgb[5]) { values = rgb[5][split](commaSpaces); red = toFloat(values[0]); values[0].slice(-1) == "%" && (red *= 2.55); green = toFloat(values[1]); values[1].slice(-1) == "%" && (green *= 2.55); blue = toFloat(values[2]); values[2].slice(-1) == "%" && (blue *= 2.55); (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360); rgb[1].toLowerCase().slice(0, 4) == "hsba" && (opacity = toFloat(values[3])); values[3] && values[3].slice(-1) == "%" && (opacity /= 100); return R.hsb2rgb(red, green, blue, opacity); } if (rgb[6]) { values = rgb[6][split](commaSpaces); red = toFloat(values[0]); values[0].slice(-1) == "%" && (red *= 2.55); green = toFloat(values[1]); values[1].slice(-1) == "%" && (green *= 2.55); blue = toFloat(values[2]); values[2].slice(-1) == "%" && (blue *= 2.55); (values[0].slice(-3) == "deg" || values[0].slice(-1) == "\xb0") && (red /= 360); rgb[1].toLowerCase().slice(0, 4) == "hsla" && (opacity = toFloat(values[3])); values[3] && values[3].slice(-1) == "%" && (opacity /= 100); return R.hsl2rgb(red, green, blue, opacity); } rgb = {r: red, g: green, b: blue, toString: clrToString}; rgb.hex = "#" + (16777216 | blue | (green << 8) | (red << 16)).toString(16).slice(1); R.is(opacity, "finite") && (rgb.opacity = opacity); return rgb; } return {r: -1, g: -1, b: -1, hex: "none", error: 1, toString: clrToString}; }, R); /*\ * Raphael.hsb [ method ] ** * Converts HSB values to hex representation of the colour. > Parameters - h (number) hue - s (number) saturation - b (number) value or brightness = (string) hex representation of the colour. \*/ R.hsb = cacher(function (h, s, b) { return R.hsb2rgb(h, s, b).hex; }); /*\ * Raphael.hsl [ method ] ** * Converts HSL values to hex representation of the colour. > Parameters - h (number) hue - s (number) saturation - l (number) luminosity = (string) hex representation of the colour. \*/ R.hsl = cacher(function (h, s, l) { return R.hsl2rgb(h, s, l).hex; }); /*\ * Raphael.rgb [ method ] ** * Converts RGB values to hex representation of the colour. > Parameters - r (number) red - g (number) green - b (number) blue = (string) hex representation of the colour. \*/ R.rgb = cacher(function (r, g, b) { function round(x) { return (x + 0.5) | 0; } return "#" + (16777216 | round(b) | (round(g) << 8) | (round(r) << 16)).toString(16).slice(1); }); /*\ * Raphael.getColor [ method ] ** * On each call returns next colour in the spectrum. To reset it back to red call @Raphael.getColor.reset > Parameters - value (number) #optional brightness, default is `0.75` = (string) hex representation of the colour. \*/ R.getColor = function (value) { var start = this.getColor.start = this.getColor.start || {h: 0, s: 1, b: value || .75}, rgb = this.hsb2rgb(start.h, start.s, start.b); start.h += .075; if (start.h > 1) { start.h = 0; start.s -= .2; start.s <= 0 && (this.getColor.start = {h: 0, s: 1, b: start.b}); } return rgb.hex; }; /*\ * Raphael.getColor.reset [ method ] ** * Resets spectrum position for @Raphael.getColor back to red. \*/ R.getColor.reset = function () { delete this.start; }; // http://schepers.cc/getting-to-the-point function catmullRom2bezier(crp, z) { var d = []; for (var i = 0, iLen = crp.length; iLen - 2 * !z > i; i += 2) { var p = [ {x: +crp[i - 2], y: +crp[i - 1]}, {x: +crp[i], y: +crp[i + 1]}, {x: +crp[i + 2], y: +crp[i + 3]}, {x: +crp[i + 4], y: +crp[i + 5]} ]; if (z) { if (!i) { p[0] = {x: +crp[iLen - 2], y: +crp[iLen - 1]}; } else if (iLen - 4 == i) { p[3] = {x: +crp[0], y: +crp[1]}; } else if (iLen - 2 == i) { p[2] = {x: +crp[0], y: +crp[1]}; p[3] = {x: +crp[2], y: +crp[3]}; } } else { if (iLen - 4 == i) { p[3] = p[2]; } else if (!i) { p[0] = {x: +crp[i], y: +crp[i + 1]}; } } d.push(["C", (-p[0].x + 6 * p[1].x + p[2].x) / 6, (-p[0].y + 6 * p[1].y + p[2].y) / 6, (p[1].x + 6 * p[2].x - p[3].x) / 6, (p[1].y + 6*p[2].y - p[3].y) / 6, p[2].x, p[2].y ]); } return d; } /*\ * Raphael.parsePathString [ method ] ** * Utility method ** * Parses given path string into an array of arrays of path segments. > Parameters - pathString (string|array) path string or array of segments (in the last case it will be returned straight away) = (array) array of segments. \*/ R.parsePathString = function (pathString) { if (!pathString) { return null; } var pth = paths(pathString); if (pth.arr) { return pathClone(pth.arr); } var paramCounts = {a: 7, c: 6, h: 1, l: 2, m: 2, r: 4, q: 4, s: 4, t: 2, v: 1, z: 0}, data = []; if (R.is(pathString, array) && R.is(pathString[0], array)) { // rough assumption data = pathClone(pathString); } if (!data.length) { Str(pathString).replace(pathCommand, function (a, b, c) { var params = [], name = b.toLowerCase(); c.replace(pathValues, function (a, b) { b && params.push(+b); }); if (name == "m" && params.length > 2) { data.push([b][concat](params.splice(0, 2))); name = "l"; b = b == "m" ? "l" : "L"; } if (name == "r") { data.push([b][concat](params)); } else while (params.length >= paramCounts[name]) { data.push([b][concat](params.splice(0, paramCounts[name]))); if (!paramCounts[name]) { break; } } }); } data.toString = R._path2string; pth.arr = pathClone(data); return data; }; /*\ * Raphael.parseTransformString [ method ] ** * Utility method ** * Parses given path string into an array of transformations. > Parameters - TString (string|array) transform string or array of transformations (in the last case it will be returned straight away) = (array) array of transformations. \*/ R.parseTransformString = cacher(function (TString) { if (!TString) { return null; } var paramCounts = {r: 3, s: 4, t: 2, m: 6}, data = []; if (R.is(TString, array) && R.is(TString[0], array)) { // rough assumption data = pathClone(TString); } if (!data.length) { Str(TString).replace(tCommand, function (a, b, c) { var params = [], name = lowerCase.call(b); c.replace(pathValues, function (a, b) { b && params.push(+b); }); data.push([b][concat](params)); }); } data.toString = R._path2string; return data; }); // PATHS var paths = function (ps) { var p = paths.ps = paths.ps || {}; if (p[ps]) { p[ps].sleep = 100; } else { p[ps] = { sleep: 100 }; } setTimeout(function () { for (var key in p) if (p[has](key) && key != ps) { p[key].sleep--; !p[key].sleep && delete p[key]; } }); return p[ps]; }; /*\ * Raphael.findDotsAtSegment [ method ] ** * Utility method ** * Find dot coordinates on the given cubic bezier curve at the given t. > Parameters - p1x (number) x of the first point of the curve - p1y (number) y of the first point of the curve - c1x (number) x of the first anchor of the curve - c1y (number) y of the first anchor of the curve - c2x (number) x of the second anchor of the curve - c2y (number) y of the second anchor of the curve - p2x (number) x of the second point of the curve - p2y (number) y of the second point of the curve - t (number) position on the curve (0..1) = (object) point information in format: o { o x: (number) x coordinate of the point o y: (number) y coordinate of the point o m: { o x: (number) x coordinate of the left anchor o y: (number) y coordinate of the left anchor o } o n: { o x: (number) x coordinate of the right anchor o y: (number) y coordinate of the right anchor o } o start: { o x: (number) x coordinate of the start of the curve o y: (number) y coordinate of the start of the curve o } o end: { o x: (number) x coordinate of the end of the curve o y: (number) y coordinate of the end of the curve o } o alpha: (number) angle of the curve derivative at the point o } \*/ R.findDotsAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) { var t1 = 1 - t, t13 = pow(t1, 3), t12 = pow(t1, 2), t2 = t * t, t3 = t2 * t, x = t13 * p1x + t12 * 3 * t * c1x + t1 * 3 * t * t * c2x + t3 * p2x, y = t13 * p1y + t12 * 3 * t * c1y + t1 * 3 * t * t * c2y + t3 * p2y, mx = p1x + 2 * t * (c1x - p1x) + t2 * (c2x - 2 * c1x + p1x), my = p1y + 2 * t * (c1y - p1y) + t2 * (c2y - 2 * c1y + p1y), nx = c1x + 2 * t * (c2x - c1x) + t2 * (p2x - 2 * c2x + c1x), ny = c1y + 2 * t * (c2y - c1y) + t2 * (p2y - 2 * c2y + c1y), ax = t1 * p1x + t * c1x, ay = t1 * p1y + t * c1y, cx = t1 * c2x + t * p2x, cy = t1 * c2y + t * p2y, alpha = (90 - math.atan2(mx - nx, my - ny) * 180 / PI); (mx > nx || my < ny) && (alpha += 180); return { x: x, y: y, m: {x: mx, y: my}, n: {x: nx, y: ny}, start: {x: ax, y: ay}, end: {x: cx, y: cy}, alpha: alpha }; }; /*\ * Raphael.bezierBBox [ method ] ** * Utility method ** * Return bounding box of a given cubic bezier curve > Parameters - p1x (number) x of the first point of the curve - p1y (number) y of the first point of the curve - c1x (number) x of the first anchor of the curve - c1y (number) y of the first anchor of the curve - c2x (number) x of the second anchor of the curve - c2y (number) y of the second anchor of the curve - p2x (number) x of the second point of the curve - p2y (number) y of the second point of the curve * or - bez (array) array of six points for bezier curve = (object) point information in format: o { o min: { o x: (number) x coordinate of the left point o y: (number) y coordinate of the top point o } o max: { o x: (number) x coordinate of the right point o y: (number) y coordinate of the bottom point o } o } \*/ R.bezierBBox = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) { if (!R.is(p1x, "array")) { p1x = [p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y]; } var bbox = curveDim.apply(null, p1x); return { x: bbox.min.x, y: bbox.min.y, x2: bbox.max.x, y2: bbox.max.y, width: bbox.max.x - bbox.min.x, height: bbox.max.y - bbox.min.y }; }; /*\ * Raphael.isPointInsideBBox [ method ] ** * Utility method ** * Returns `true` if given point is inside bounding boxes. > Parameters - bbox (string) bounding box - x (string) x coordinate of the point - y (string) y coordinate of the point = (boolean) `true` if point inside \*/ R.isPointInsideBBox = function (bbox, x, y) { return x >= bbox.x && x <= bbox.x2 && y >= bbox.y && y <= bbox.y2; }; /*\ * Raphael.isBBoxIntersect [ method ] ** * Utility method ** * Returns `true` if two bounding boxes intersect > Parameters - bbox1 (string) first bounding box - bbox2 (string) second bounding box = (boolean) `true` if they intersect \*/ R.isBBoxIntersect = function (bbox1, bbox2) { var i = R.isPointInsideBBox; return i(bbox2, bbox1.x, bbox1.y) || i(bbox2, bbox1.x2, bbox1.y) || i(bbox2, bbox1.x, bbox1.y2) || i(bbox2, bbox1.x2, bbox1.y2) || i(bbox1, bbox2.x, bbox2.y) || i(bbox1, bbox2.x2, bbox2.y) || i(bbox1, bbox2.x, bbox2.y2) || i(bbox1, bbox2.x2, bbox2.y2) || (bbox1.x < bbox2.x2 && bbox1.x > bbox2.x || bbox2.x < bbox1.x2 && bbox2.x > bbox1.x) && (bbox1.y < bbox2.y2 && bbox1.y > bbox2.y || bbox2.y < bbox1.y2 && bbox2.y > bbox1.y); }; function base3(t, p1, p2, p3, p4) { var t1 = -3 * p1 + 9 * p2 - 9 * p3 + 3 * p4, t2 = t * t1 + 6 * p1 - 12 * p2 + 6 * p3; return t * t2 - 3 * p1 + 3 * p2; } function bezlen(x1, y1, x2, y2, x3, y3, x4, y4, z) { if (z == null) { z = 1; } z = z > 1 ? 1 : z < 0 ? 0 : z; var z2 = z / 2, n = 12, Tvalues = [-0.1252,0.1252,-0.3678,0.3678,-0.5873,0.5873,-0.7699,0.7699,-0.9041,0.9041,-0.9816,0.9816], Cvalues = [0.2491,0.2491,0.2335,0.2335,0.2032,0.2032,0.1601,0.1601,0.1069,0.1069,0.0472,0.0472], sum = 0; for (var i = 0; i < n; i++) { var ct = z2 * Tvalues[i] + z2, xbase = base3(ct, x1, x2, x3, x4), ybase = base3(ct, y1, y2, y3, y4), comb = xbase * xbase + ybase * ybase; sum += Cvalues[i] * math.sqrt(comb); } return z2 * sum; } function getTatLen(x1, y1, x2, y2, x3, y3, x4, y4, ll) { if (ll < 0 || bezlen(x1, y1, x2, y2, x3, y3, x4, y4) < ll) { return; } var t = 1, step = t / 2, t2 = t - step, l, e = .01; l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2); while (abs(l - ll) > e) { step /= 2; t2 += (l < ll ? 1 : -1) * step; l = bezlen(x1, y1, x2, y2, x3, y3, x4, y4, t2); } return t2; } function intersect(x1, y1, x2, y2, x3, y3, x4, y4) { if ( mmax(x1, x2) < mmin(x3, x4) || mmin(x1, x2) > mmax(x3, x4) || mmax(y1, y2) < mmin(y3, y4) || mmin(y1, y2) > mmax(y3, y4) ) { return; } var nx = (x1 * y2 - y1 * x2) * (x3 - x4) - (x1 - x2) * (x3 * y4 - y3 * x4), ny = (x1 * y2 - y1 * x2) * (y3 - y4) - (y1 - y2) * (x3 * y4 - y3 * x4), denominator = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4); if (!denominator) { return; } var px = nx / denominator, py = ny / denominator, px2 = +px.toFixed(2), py2 = +py.toFixed(2); if ( px2 < +mmin(x1, x2).toFixed(2) || px2 > +mmax(x1, x2).toFixed(2) || px2 < +mmin(x3, x4).toFixed(2) || px2 > +mmax(x3, x4).toFixed(2) || py2 < +mmin(y1, y2).toFixed(2) || py2 > +mmax(y1, y2).toFixed(2) || py2 < +mmin(y3, y4).toFixed(2) || py2 > +mmax(y3, y4).toFixed(2) ) { return; } return {x: px, y: py}; } function inter(bez1, bez2) { return interHelper(bez1, bez2); } function interCount(bez1, bez2) { return interHelper(bez1, bez2, 1); } function interHelper(bez1, bez2, justCount) { var bbox1 = R.bezierBBox(bez1), bbox2 = R.bezierBBox(bez2); if (!R.isBBoxIntersect(bbox1, bbox2)) { return justCount ? 0 : []; } var l1 = bezlen.apply(0, bez1), l2 = bezlen.apply(0, bez2), n1 = mmax(~~(l1 / 5), 1), n2 = mmax(~~(l2 / 5), 1), dots1 = [], dots2 = [], xy = {}, res = justCount ? 0 : []; for (var i = 0; i < n1 + 1; i++) { var p = R.findDotsAtSegment.apply(R, bez1.concat(i / n1)); dots1.push({x: p.x, y: p.y, t: i / n1}); } for (i = 0; i < n2 + 1; i++) { p = R.findDotsAtSegment.apply(R, bez2.concat(i / n2)); dots2.push({x: p.x, y: p.y, t: i / n2}); } for (i = 0; i < n1; i++) { for (var j = 0; j < n2; j++) { var di = dots1[i], di1 = dots1[i + 1], dj = dots2[j], dj1 = dots2[j + 1], ci = abs(di1.x - di.x) < .001 ? "y" : "x", cj = abs(dj1.x - dj.x) < .001 ? "y" : "x", is = intersect(di.x, di.y, di1.x, di1.y, dj.x, dj.y, dj1.x, dj1.y); if (is) { if (xy[is.x.toFixed(4)] == is.y.toFixed(4)) { continue; } xy[is.x.toFixed(4)] = is.y.toFixed(4); var t1 = di.t + abs((is[ci] - di[ci]) / (di1[ci] - di[ci])) * (di1.t - di.t), t2 = dj.t + abs((is[cj] - dj[cj]) / (dj1[cj] - dj[cj])) * (dj1.t - dj.t); if (t1 >= 0 && t1 <= 1.001 && t2 >= 0 && t2 <= 1.001) { if (justCount) { res++; } else { res.push({ x: is.x, y: is.y, t1: mmin(t1, 1), t2: mmin(t2, 1) }); } } } } } return res; } /*\ * Raphael.pathIntersection [ method ] ** * Utility method ** * Finds intersections of two paths > Parameters - path1 (string) path string - path2 (string) path string = (array) dots of intersection o [ o { o x: (number) x coordinate of the point o y: (number) y coordinate of the point o t1: (number) t value for segment of path1 o t2: (number) t value for segment of path2 o segment1: (number) order number for segment of path1 o segment2: (number) order number for segment of path2 o bez1: (array) eight coordinates representing beziér curve for the segment of path1 o bez2: (array) eight coordinates representing beziér curve for the segment of path2 o } o ] \*/ R.pathIntersection = function (path1, path2) { return interPathHelper(path1, path2); }; R.pathIntersectionNumber = function (path1, path2) { return interPathHelper(path1, path2, 1); }; function interPathHelper(path1, path2, justCount) { path1 = R._path2curve(path1); path2 = R._path2curve(path2); var x1, y1, x2, y2, x1m, y1m, x2m, y2m, bez1, bez2, res = justCount ? 0 : []; for (var i = 0, ii = path1.length; i < ii; i++) { var pi = path1[i]; if (pi[0] == "M") { x1 = x1m = pi[1]; y1 = y1m = pi[2]; } else { if (pi[0] == "C") { bez1 = [x1, y1].concat(pi.slice(1)); x1 = bez1[6]; y1 = bez1[7]; } else { bez1 = [x1, y1, x1, y1, x1m, y1m, x1m, y1m]; x1 = x1m; y1 = y1m; } for (var j = 0, jj = path2.length; j < jj; j++) { var pj = path2[j]; if (pj[0] == "M") { x2 = x2m = pj[1]; y2 = y2m = pj[2]; } else { if (pj[0] == "C") { bez2 = [x2, y2].concat(pj.slice(1)); x2 = bez2[6]; y2 = bez2[7]; } else { bez2 = [x2, y2, x2, y2, x2m, y2m, x2m, y2m]; x2 = x2m; y2 = y2m; } var intr = interHelper(bez1, bez2, justCount); if (justCount) { res += intr; } else { for (var k = 0, kk = intr.length; k < kk; k++) { intr[k].segment1 = i; intr[k].segment2 = j; intr[k].bez1 = bez1; intr[k].bez2 = bez2; } res = res.concat(intr); } } } } } return res; } /*\ * Raphael.isPointInsidePath [ method ] ** * Utility method ** * Returns `true` if given point is inside a given closed path. > Parameters - path (string) path string - x (number) x of the point - y (number) y of the point = (boolean) true, if point is inside the path \*/ R.isPointInsidePath = function (path, x, y) { var bbox = R.pathBBox(path); return R.isPointInsideBBox(bbox, x, y) && interPathHelper(path, [["M", x, y], ["H", bbox.x2 + 10]], 1) % 2 == 1; }; R._removedFactory = function (methodname) { return function () { eve("raphael.log", null, "Rapha\xebl: you are calling to method \u201c" + methodname + "\u201d of removed object", methodname); }; }; /*\ * Raphael.pathBBox [ method ] ** * Utility method ** * Return bounding box of a given path > Parameters - path (string) path string = (object) bounding box o { o x: (number) x coordinate of the left top point of the box o y: (number) y coordinate of the left top point of the box o x2: (number) x coordinate of the right bottom point of the box o y2: (number) y coordinate of the right bottom point of the box o width: (number) width of the box o height: (number) height of the box o cx: (number) x coordinate of the center of the box o cy: (number) y coordinate of the center of the box o } \*/ var pathDimensions = R.pathBBox = function (path) { var pth = paths(path); if (pth.bbox) { return clone(pth.bbox); } if (!path) { return {x: 0, y: 0, width: 0, height: 0, x2: 0, y2: 0}; } path = path2curve(path); var x = 0, y = 0, X = [], Y = [], p; for (var i = 0, ii = path.length; i < ii; i++) { p = path[i]; if (p[0] == "M") { x = p[1]; y = p[2]; X.push(x); Y.push(y); } else { var dim = curveDim(x, y, p[1], p[2], p[3], p[4], p[5], p[6]); X = X[concat](dim.min.x, dim.max.x); Y = Y[concat](dim.min.y, dim.max.y); x = p[5]; y = p[6]; } } var xmin = mmin[apply](0, X), ymin = mmin[apply](0, Y), xmax = mmax[apply](0, X), ymax = mmax[apply](0, Y), width = xmax - xmin, height = ymax - ymin, bb = { x: xmin, y: ymin, x2: xmax, y2: ymax, width: width, height: height, cx: xmin + width / 2, cy: ymin + height / 2 }; pth.bbox = clone(bb); return bb; }, pathClone = function (pathArray) { var res = clone(pathArray); res.toString = R._path2string; return res; }, pathToRelative = R._pathToRelative = function (pathArray) { var pth = paths(pathArray); if (pth.rel) { return pathClone(pth.rel); } if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption pathArray = R.parsePathString(pathArray); } var res = [], x = 0, y = 0, mx = 0, my = 0, start = 0; if (pathArray[0][0] == "M") { x = pathArray[0][1]; y = pathArray[0][2]; mx = x; my = y; start++; res.push(["M", x, y]); } for (var i = start, ii = pathArray.length; i < ii; i++) { var r = res[i] = [], pa = pathArray[i]; if (pa[0] != lowerCase.call(pa[0])) { r[0] = lowerCase.call(pa[0]); switch (r[0]) { case "a": r[1] = pa[1]; r[2] = pa[2]; r[3] = pa[3]; r[4] = pa[4]; r[5] = pa[5]; r[6] = +(pa[6] - x).toFixed(3); r[7] = +(pa[7] - y).toFixed(3); break; case "v": r[1] = +(pa[1] - y).toFixed(3); break; case "m": mx = pa[1]; my = pa[2]; default: for (var j = 1, jj = pa.length; j < jj; j++) { r[j] = +(pa[j] - ((j % 2) ? x : y)).toFixed(3); } } } else { r = res[i] = []; if (pa[0] == "m") { mx = pa[1] + x; my = pa[2] + y; } for (var k = 0, kk = pa.length; k < kk; k++) { res[i][k] = pa[k]; } } var len = res[i].length; switch (res[i][0]) { case "z": x = mx; y = my; break; case "h": x += +res[i][len - 1]; break; case "v": y += +res[i][len - 1]; break; default: x += +res[i][len - 2]; y += +res[i][len - 1]; } } res.toString = R._path2string; pth.rel = pathClone(res); return res; }, pathToAbsolute = R._pathToAbsolute = function (pathArray) { var pth = paths(pathArray); if (pth.abs) { return pathClone(pth.abs); } if (!R.is(pathArray, array) || !R.is(pathArray && pathArray[0], array)) { // rough assumption pathArray = R.parsePathString(pathArray); } if (!pathArray || !pathArray.length) { return [["M", 0, 0]]; } var res = [], x = 0, y = 0, mx = 0, my = 0, start = 0; if (pathArray[0][0] == "M") { x = +pathArray[0][1]; y = +pathArray[0][2]; mx = x; my = y; start++; res[0] = ["M", x, y]; } var crz = pathArray.length == 3 && pathArray[0][0] == "M" && pathArray[1][0].toUpperCase() == "R" && pathArray[2][0].toUpperCase() == "Z"; for (var r, pa, i = start, ii = pathArray.length; i < ii; i++) { res.push(r = []); pa = pathArray[i]; if (pa[0] != upperCase.call(pa[0])) { r[0] = upperCase.call(pa[0]); switch (r[0]) { case "A": r[1] = pa[1]; r[2] = pa[2]; r[3] = pa[3]; r[4] = pa[4]; r[5] = pa[5]; r[6] = +(pa[6] + x); r[7] = +(pa[7] + y); break; case "V": r[1] = +pa[1] + y; break; case "H": r[1] = +pa[1] + x; break; case "R": var dots = [x, y][concat](pa.slice(1)); for (var j = 2, jj = dots.length; j < jj; j++) { dots[j] = +dots[j] + x; dots[++j] = +dots[j] + y; } res.pop(); res = res[concat](catmullRom2bezier(dots, crz)); break; case "M": mx = +pa[1] + x; my = +pa[2] + y; default: for (j = 1, jj = pa.length; j < jj; j++) { r[j] = +pa[j] + ((j % 2) ? x : y); } } } else if (pa[0] == "R") { dots = [x, y][concat](pa.slice(1)); res.pop(); res = res[concat](catmullRom2bezier(dots, crz)); r = ["R"][concat](pa.slice(-2)); } else { for (var k = 0, kk = pa.length; k < kk; k++) { r[k] = pa[k]; } } switch (r[0]) { case "Z": x = mx; y = my; break; case "H": x = r[1]; break; case "V": y = r[1]; break; case "M": mx = r[r.length - 2]; my = r[r.length - 1]; default: x = r[r.length - 2]; y = r[r.length - 1]; } } res.toString = R._path2string; pth.abs = pathClone(res); return res; }, l2c = function (x1, y1, x2, y2) { return [x1, y1, x2, y2, x2, y2]; }, q2c = function (x1, y1, ax, ay, x2, y2) { var _13 = 1 / 3, _23 = 2 / 3; return [ _13 * x1 + _23 * ax, _13 * y1 + _23 * ay, _13 * x2 + _23 * ax, _13 * y2 + _23 * ay, x2, y2 ]; }, a2c = function (x1, y1, rx, ry, angle, large_arc_flag, sweep_flag, x2, y2, recursive) { // for more information of where this math came from visit: // http://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes var _120 = PI * 120 / 180, rad = PI / 180 * (+angle || 0), res = [], xy, rotate = cacher(function (x, y, rad) { var X = x * math.cos(rad) - y * math.sin(rad), Y = x * math.sin(rad) + y * math.cos(rad); return {x: X, y: Y}; }); if (!recursive) { xy = rotate(x1, y1, -rad); x1 = xy.x; y1 = xy.y; xy = rotate(x2, y2, -rad); x2 = xy.x; y2 = xy.y; var cos = math.cos(PI / 180 * angle), sin = math.sin(PI / 180 * angle), x = (x1 - x2) / 2, y = (y1 - y2) / 2; var h = (x * x) / (rx * rx) + (y * y) / (ry * ry); if (h > 1) { h = math.sqrt(h); rx = h * rx; ry = h * ry; } var rx2 = rx * rx, ry2 = ry * ry, k = (large_arc_flag == sweep_flag ? -1 : 1) * math.sqrt(abs((rx2 * ry2 - rx2 * y * y - ry2 * x * x) / (rx2 * y * y + ry2 * x * x))), cx = k * rx * y / ry + (x1 + x2) / 2, cy = k * -ry * x / rx + (y1 + y2) / 2, f1 = math.asin(((y1 - cy) / ry).toFixed(9)), f2 = math.asin(((y2 - cy) / ry).toFixed(9)); f1 = x1 < cx ? PI - f1 : f1; f2 = x2 < cx ? PI - f2 : f2; f1 < 0 && (f1 = PI * 2 + f1); f2 < 0 && (f2 = PI * 2 + f2); if (sweep_flag && f1 > f2) { f1 = f1 - PI * 2; } if (!sweep_flag && f2 > f1) { f2 = f2 - PI * 2; } } else { f1 = recursive[0]; f2 = recursive[1]; cx = recursive[2]; cy = recursive[3]; } var df = f2 - f1; if (abs(df) > _120) { var f2old = f2, x2old = x2, y2old = y2; f2 = f1 + _120 * (sweep_flag && f2 > f1 ? 1 : -1); x2 = cx + rx * math.cos(f2); y2 = cy + ry * math.sin(f2); res = a2c(x2, y2, rx, ry, angle, 0, sweep_flag, x2old, y2old, [f2, f2old, cx, cy]); } df = f2 - f1; var c1 = math.cos(f1), s1 = math.sin(f1), c2 = math.cos(f2), s2 = math.sin(f2), t = math.tan(df / 4), hx = 4 / 3 * rx * t, hy = 4 / 3 * ry * t, m1 = [x1, y1], m2 = [x1 + hx * s1, y1 - hy * c1], m3 = [x2 + hx * s2, y2 - hy * c2], m4 = [x2, y2]; m2[0] = 2 * m1[0] - m2[0]; m2[1] = 2 * m1[1] - m2[1]; if (recursive) { return [m2, m3, m4][concat](res); } else { res = [m2, m3, m4][concat](res).join()[split](","); var newres = []; for (var i = 0, ii = res.length; i < ii; i++) { newres[i] = i % 2 ? rotate(res[i - 1], res[i], rad).y : rotate(res[i], res[i + 1], rad).x; } return newres; } }, findDotAtSegment = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t) { var t1 = 1 - t; return { x: pow(t1, 3) * p1x + pow(t1, 2) * 3 * t * c1x + t1 * 3 * t * t * c2x + pow(t, 3) * p2x, y: pow(t1, 3) * p1y + pow(t1, 2) * 3 * t * c1y + t1 * 3 * t * t * c2y + pow(t, 3) * p2y }; }, curveDim = cacher(function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y) { var a = (c2x - 2 * c1x + p1x) - (p2x - 2 * c2x + c1x), b = 2 * (c1x - p1x) - 2 * (c2x - c1x), c = p1x - c1x, t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a, t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a, y = [p1y, p2y], x = [p1x, p2x], dot; abs(t1) > "1e12" && (t1 = .5); abs(t2) > "1e12" && (t2 = .5); if (t1 > 0 && t1 < 1) { dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1); x.push(dot.x); y.push(dot.y); } if (t2 > 0 && t2 < 1) { dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2); x.push(dot.x); y.push(dot.y); } a = (c2y - 2 * c1y + p1y) - (p2y - 2 * c2y + c1y); b = 2 * (c1y - p1y) - 2 * (c2y - c1y); c = p1y - c1y; t1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 / a; t2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 / a; abs(t1) > "1e12" && (t1 = .5); abs(t2) > "1e12" && (t2 = .5); if (t1 > 0 && t1 < 1) { dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t1); x.push(dot.x); y.push(dot.y); } if (t2 > 0 && t2 < 1) { dot = findDotAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, t2); x.push(dot.x); y.push(dot.y); } return { min: {x: mmin[apply](0, x), y: mmin[apply](0, y)}, max: {x: mmax[apply](0, x), y: mmax[apply](0, y)} }; }), path2curve = R._path2curve = cacher(function (path, path2) { var pth = !path2 && paths(path); if (!path2 && pth.curve) { return pathClone(pth.curve); } var p = pathToAbsolute(path), p2 = path2 && pathToAbsolute(path2), attrs = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, attrs2 = {x: 0, y: 0, bx: 0, by: 0, X: 0, Y: 0, qx: null, qy: null}, processPath = function (path, d, pcom) { var nx, ny, tq = {T:1, Q:1}; if (!path) { return ["C", d.x, d.y, d.x, d.y, d.x, d.y]; } !(path[0] in tq) && (d.qx = d.qy = null); switch (path[0]) { case "M": d.X = path[1]; d.Y = path[2]; break; case "A": path = ["C"][concat](a2c[apply](0, [d.x, d.y][concat](path.slice(1)))); break; case "S": if (pcom == "C" || pcom == "S") { // In "S" case we have to take into account, if the previous command is C/S. nx = d.x * 2 - d.bx; // And reflect the previous ny = d.y * 2 - d.by; // command's control point relative to the current point. } else { // or some else or nothing nx = d.x; ny = d.y; } path = ["C", nx, ny][concat](path.slice(1)); break; case "T": if (pcom == "Q" || pcom == "T") { // In "T" case we have to take into account, if the previous command is Q/T. d.qx = d.x * 2 - d.qx; // And make a reflection similar d.qy = d.y * 2 - d.qy; // to case "S". } else { // or something else or nothing d.qx = d.x; d.qy = d.y; } path = ["C"][concat](q2c(d.x, d.y, d.qx, d.qy, path[1], path[2])); break; case "Q": d.qx = path[1]; d.qy = path[2]; path = ["C"][concat](q2c(d.x, d.y, path[1], path[2], path[3], path[4])); break; case "L": path = ["C"][concat](l2c(d.x, d.y, path[1], path[2])); break; case "H": path = ["C"][concat](l2c(d.x, d.y, path[1], d.y)); break; case "V": path = ["C"][concat](l2c(d.x, d.y, d.x, path[1])); break; case "Z": path = ["C"][concat](l2c(d.x, d.y, d.X, d.Y)); break; } return path; }, fixArc = function (pp, i) { if (pp[i].length > 7) { pp[i].shift(); var pi = pp[i]; while (pi.length) { pcoms1[i]="A"; // if created multiple C:s, their original seg is saved p2 && (pcoms2[i]="A"); // the same as above pp.splice(i++, 0, ["C"][concat](pi.splice(0, 6))); } pp.splice(i, 1); ii = mmax(p.length, p2 && p2.length || 0); } }, fixM = function (path1, path2, a1, a2, i) { if (path1 && path2 && path1[i][0] == "M" && path2[i][0] != "M") { path2.splice(i, 0, ["M", a2.x, a2.y]); a1.bx = 0; a1.by = 0; a1.x = path1[i][1]; a1.y = path1[i][2]; ii = mmax(p.length, p2 && p2.length || 0); } }, pcoms1 = [], // path commands of original path p pcoms2 = [], // path commands of original path p2 pfirst = "", // temporary holder for original path command pcom = ""; // holder for previous path command of original path for (var i = 0, ii = mmax(p.length, p2 && p2.length || 0); i < ii; i++) { p[i] && (pfirst = p[i][0]); // save current path command if (pfirst != "C") // C is not saved yet, because it may be result of conversion { pcoms1[i] = pfirst; // Save current path command i && ( pcom = pcoms1[i-1]); // Get previous path command pcom } p[i] = processPath(p[i], attrs, pcom); // Previous path command is inputted to processPath if (pcoms1[i] != "A" && pfirst == "C") pcoms1[i] = "C"; // A is the only command // which may produce multiple C:s // so we have to make sure that C is also C in original path fixArc(p, i); // fixArc adds also the right amount of A:s to pcoms1 if (p2) { // the same procedures is done to p2 p2[i] && (pfirst = p2[i][0]); if (pfirst != "C") { pcoms2[i] = pfirst; i && (pcom = pcoms2[i-1]); } p2[i] = processPath(p2[i], attrs2, pcom); if (pcoms2[i]!="A" && pfirst=="C") pcoms2[i]="C"; fixArc(p2, i); } fixM(p, p2, attrs, attrs2, i); fixM(p2, p, attrs2, attrs, i); var seg = p[i], seg2 = p2 && p2[i], seglen = seg.length, seg2len = p2 && seg2.length; attrs.x = seg[seglen - 2]; attrs.y = seg[seglen - 1]; attrs.bx = toFloat(seg[seglen - 4]) || attrs.x; attrs.by = toFloat(seg[seglen - 3]) || attrs.y; attrs2.bx = p2 && (toFloat(seg2[seg2len - 4]) || attrs2.x); attrs2.by = p2 && (toFloat(seg2[seg2len - 3]) || attrs2.y); attrs2.x = p2 && seg2[seg2len - 2]; attrs2.y = p2 && seg2[seg2len - 1]; } if (!p2) { pth.curve = pathClone(p); } return p2 ? [p, p2] : p; }, null, pathClone), parseDots = R._parseDots = cacher(function (gradient) { var dots = []; for (var i = 0, ii = gradient.length; i < ii; i++) { var dot = {}, par = gradient[i].match(/^([^:]*):?([\d\.]*)/); dot.color = R.getRGB(par[1]); if (dot.color.error) { return null; } dot.opacity = dot.color.opacity; dot.color = dot.color.hex; par[2] && (dot.offset = par[2] + "%"); dots.push(dot); } for (i = 1, ii = dots.length - 1; i < ii; i++) { if (!dots[i].offset) { var start = toFloat(dots[i - 1].offset || 0), end = 0; for (var j = i + 1; j < ii; j++) { if (dots[j].offset) { end = dots[j].offset; break; } } if (!end) { end = 100; j = ii; } end = toFloat(end); var d = (end - start) / (j - i + 1); for (; i < j; i++) { start += d; dots[i].offset = start + "%"; } } } return dots; }), tear = R._tear = function (el, paper) { el == paper.top && (paper.top = el.prev); el == paper.bottom && (paper.bottom = el.next); el.next && (el.next.prev = el.prev); el.prev && (el.prev.next = el.next); }, tofront = R._tofront = function (el, paper) { if (paper.top === el) { return; } tear(el, paper); el.next = null; el.prev = paper.top; paper.top.next = el; paper.top = el; }, toback = R._toback = function (el, paper) { if (paper.bottom === el) { return; } tear(el, paper); el.next = paper.bottom; el.prev = null; paper.bottom.prev = el; paper.bottom = el; }, insertafter = R._insertafter = function (el, el2, paper) { tear(el, paper); el2 == paper.top && (paper.top = el); el2.next && (el2.next.prev = el); el.next = el2.next; el.prev = el2; el2.next = el; }, insertbefore = R._insertbefore = function (el, el2, paper) { tear(el, paper); el2 == paper.bottom && (paper.bottom = el); el2.prev && (el2.prev.next = el); el.prev = el2.prev; el2.prev = el; el.next = el2; }, /*\ * Raphael.toMatrix [ method ] ** * Utility method ** * Returns matrix of transformations applied to a given path > Parameters - path (string) path string - transform (string|array) transformation string = (object) @Matrix \*/ toMatrix = R.toMatrix = function (path, transform) { var bb = pathDimensions(path), el = { _: { transform: E }, getBBox: function () { return bb; } }; extractTransform(el, transform); return el.matrix; }, /*\ * Raphael.transformPath [ method ] ** * Utility method ** * Returns path transformed by a given transformation > Parameters - path (string) path string - transform (string|array) transformation string = (string) path \*/ transformPath = R.transformPath = function (path, transform) { return mapPath(path, toMatrix(path, transform)); }, extractTransform = R._extractTransform = function (el, tstr) { if (tstr == null) { return el._.transform; } tstr = Str(tstr).replace(/\.{3}|\u2026/g, el._.transform || E); var tdata = R.parseTransformString(tstr), deg = 0, dx = 0, dy = 0, sx = 1, sy = 1, _ = el._, m = new Matrix; _.transform = tdata || []; if (tdata) { for (var i = 0, ii = tdata.length; i < ii; i++) { var t = tdata[i], tlen = t.length, command = Str(t[0]).toLowerCase(), absolute = t[0] != command, inver = absolute ? m.invert() : 0, x1, y1, x2, y2, bb; if (command == "t" && tlen == 3) { if (absolute) { x1 = inver.x(0, 0); y1 = inver.y(0, 0); x2 = inver.x(t[1], t[2]); y2 = inver.y(t[1], t[2]); m.translate(x2 - x1, y2 - y1); } else { m.translate(t[1], t[2]); } } else if (command == "r") { if (tlen == 2) { bb = bb || el.getBBox(1); m.rotate(t[1], bb.x + bb.width / 2, bb.y + bb.height / 2); deg += t[1]; } else if (tlen == 4) { if (absolute) { x2 = inver.x(t[2], t[3]); y2 = inver.y(t[2], t[3]); m.rotate(t[1], x2, y2); } else { m.rotate(t[1], t[2], t[3]); } deg += t[1]; } } else if (command == "s") { if (tlen == 2 || tlen == 3) { bb = bb || el.getBBox(1); m.scale(t[1], t[tlen - 1], bb.x + bb.width / 2, bb.y + bb.height / 2); sx *= t[1]; sy *= t[tlen - 1]; } else if (tlen == 5) { if (absolute) { x2 = inver.x(t[3], t[4]); y2 = inver.y(t[3], t[4]); m.scale(t[1], t[2], x2, y2); } else { m.scale(t[1], t[2], t[3], t[4]); } sx *= t[1]; sy *= t[2]; } } else if (command == "m" && tlen == 7) { m.add(t[1], t[2], t[3], t[4], t[5], t[6]); } _.dirtyT = 1; el.matrix = m; } } /*\ * Element.matrix [ property (object) ] ** * Keeps @Matrix object, which represents element transformation \*/ el.matrix = m; _.sx = sx; _.sy = sy; _.deg = deg; _.dx = dx = m.e; _.dy = dy = m.f; if (sx == 1 && sy == 1 && !deg && _.bbox) { _.bbox.x += +dx; _.bbox.y += +dy; } else { _.dirtyT = 1; } }, getEmpty = function (item) { var l = item[0]; switch (l.toLowerCase()) { case "t": return [l, 0, 0]; case "m": return [l, 1, 0, 0, 1, 0, 0]; case "r": if (item.length == 4) { return [l, 0, item[2], item[3]]; } else { return [l, 0]; } case "s": if (item.length == 5) { return [l, 1, 1, item[3], item[4]]; } else if (item.length == 3) { return [l, 1, 1]; } else { return [l, 1]; } } }, equaliseTransform = R._equaliseTransform = function (t1, t2) { t2 = Str(t2).replace(/\.{3}|\u2026/g, t1); t1 = R.parseTransformString(t1) || []; t2 = R.parseTransformString(t2) || []; var maxlength = mmax(t1.length, t2.length), from = [], to = [], i = 0, j, jj, tt1, tt2; for (; i < maxlength; i++) { tt1 = t1[i] || getEmpty(t2[i]); tt2 = t2[i] || getEmpty(tt1); if ((tt1[0] != tt2[0]) || (tt1[0].toLowerCase() == "r" && (tt1[2] != tt2[2] || tt1[3] != tt2[3])) || (tt1[0].toLowerCase() == "s" && (tt1[3] != tt2[3] || tt1[4] != tt2[4])) ) { return; } from[i] = []; to[i] = []; for (j = 0, jj = mmax(tt1.length, tt2.length); j < jj; j++) { j in tt1 && (from[i][j] = tt1[j]); j in tt2 && (to[i][j] = tt2[j]); } } return { from: from, to: to }; }; R._getContainer = function (x, y, w, h) { var container; container = h == null && !R.is(x, "object") ? g.doc.getElementById(x) : x; if (container == null) { return; } if (container.tagName) { if (y == null) { return { container: container, width: container.style.pixelWidth || container.offsetWidth, height: container.style.pixelHeight || container.offsetHeight }; } else { return { container: container, width: y, height: w }; } } return { container: 1, x: x, y: y, width: w, height: h }; }; /*\ * Raphael.pathToRelative [ method ] ** * Utility method ** * Converts path to relative form > Parameters - pathString (string|array) path string or array of segments = (array) array of segments. \*/ R.pathToRelative = pathToRelative; R._engine = {}; /*\ * Raphael.path2curve [ method ] ** * Utility method ** * Converts path to a new path where all segments are cubic bezier curves. > Parameters - pathString (string|array) path string or array of segments = (array) array of segments. \*/ R.path2curve = path2curve; /*\ * Raphael.matrix [ method ] ** * Utility method ** * Returns matrix based on given parameters. > Parameters - a (number) - b (number) - c (number) - d (number) - e (number) - f (number) = (object) @Matrix \*/ R.matrix = function (a, b, c, d, e, f) { return new Matrix(a, b, c, d, e, f); }; function Matrix(a, b, c, d, e, f) { if (a != null) { this.a = +a; this.b = +b; this.c = +c; this.d = +d; this.e = +e; this.f = +f; } else { this.a = 1; this.b = 0; this.c = 0; this.d = 1; this.e = 0; this.f = 0; } } (function (matrixproto) { /*\ * Matrix.add [ method ] ** * Adds given matrix to existing one. > Parameters - a (number) - b (number) - c (number) - d (number) - e (number) - f (number) or - matrix (object) @Matrix \*/ matrixproto.add = function (a, b, c, d, e, f) { var out = [[], [], []], m = [[this.a, this.c, this.e], [this.b, this.d, this.f], [0, 0, 1]], matrix = [[a, c, e], [b, d, f], [0, 0, 1]], x, y, z, res; if (a && a instanceof Matrix) { matrix = [[a.a, a.c, a.e], [a.b, a.d, a.f], [0, 0, 1]]; } for (x = 0; x < 3; x++) { for (y = 0; y < 3; y++) { res = 0; for (z = 0; z < 3; z++) { res += m[x][z] * matrix[z][y]; } out[x][y] = res; } } this.a = out[0][0]; this.b = out[1][0]; this.c = out[0][1]; this.d = out[1][1]; this.e = out[0][2]; this.f = out[1][2]; }; /*\ * Matrix.invert [ method ] ** * Returns inverted version of the matrix = (object) @Matrix \*/ matrixproto.invert = function () { var me = this, x = me.a * me.d - me.b * me.c; return new Matrix(me.d / x, -me.b / x, -me.c / x, me.a / x, (me.c * me.f - me.d * me.e) / x, (me.b * me.e - me.a * me.f) / x); }; /*\ * Matrix.clone [ method ] ** * Returns copy of the matrix = (object) @Matrix \*/ matrixproto.clone = function () { return new Matrix(this.a, this.b, this.c, this.d, this.e, this.f); }; /*\ * Matrix.translate [ method ] ** * Translate the matrix > Parameters - x (number) - y (number) \*/ matrixproto.translate = function (x, y) { this.add(1, 0, 0, 1, x, y); }; /*\ * Matrix.scale [ method ] ** * Scales the matrix > Parameters - x (number) - y (number) #optional - cx (number) #optional - cy (number) #optional \*/ matrixproto.scale = function (x, y, cx, cy) { y == null && (y = x); (cx || cy) && this.add(1, 0, 0, 1, cx, cy); this.add(x, 0, 0, y, 0, 0); (cx || cy) && this.add(1, 0, 0, 1, -cx, -cy); }; /*\ * Matrix.rotate [ method ] ** * Rotates the matrix > Parameters - a (number) - x (number) - y (number) \*/ matrixproto.rotate = function (a, x, y) { a = R.rad(a); x = x || 0; y = y || 0; var cos = +math.cos(a).toFixed(9), sin = +math.sin(a).toFixed(9); this.add(cos, sin, -sin, cos, x, y); this.add(1, 0, 0, 1, -x, -y); }; /*\ * Matrix.x [ method ] ** * Return x coordinate for given point after transformation described by the matrix. See also @Matrix.y > Parameters - x (number) - y (number) = (number) x \*/ matrixproto.x = function (x, y) { return x * this.a + y * this.c + this.e; }; /*\ * Matrix.y [ method ] ** * Return y coordinate for given point after transformation described by the matrix. See also @Matrix.x > Parameters - x (number) - y (number) = (number) y \*/ matrixproto.y = function (x, y) { return x * this.b + y * this.d + this.f; }; matrixproto.get = function (i) { return +this[Str.fromCharCode(97 + i)].toFixed(4); }; matrixproto.toString = function () { return R.svg ? "matrix(" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)].join() + ")" : [this.get(0), this.get(2), this.get(1), this.get(3), 0, 0].join(); }; matrixproto.toFilter = function () { return "progid:DXImageTransform.Microsoft.Matrix(M11=" + this.get(0) + ", M12=" + this.get(2) + ", M21=" + this.get(1) + ", M22=" + this.get(3) + ", Dx=" + this.get(4) + ", Dy=" + this.get(5) + ", sizingmethod='auto expand')"; }; matrixproto.offset = function () { return [this.e.toFixed(4), this.f.toFixed(4)]; }; function norm(a) { return a[0] * a[0] + a[1] * a[1]; } function normalize(a) { var mag = math.sqrt(norm(a)); a[0] && (a[0] /= mag); a[1] && (a[1] /= mag); } /*\ * Matrix.split [ method ] ** * Splits matrix into primitive transformations = (object) in format: o dx (number) translation by x o dy (number) translation by y o scalex (number) scale by x o scaley (number) scale by y o shear (number) shear o rotate (number) rotation in deg o isSimple (boolean) could it be represented via simple transformations \*/ matrixproto.split = function () { var out = {}; // translation out.dx = this.e; out.dy = this.f; // scale and shear var row = [[this.a, this.c], [this.b, this.d]]; out.scalex = math.sqrt(norm(row[0])); normalize(row[0]); out.shear = row[0][0] * row[1][0] + row[0][1] * row[1][1]; row[1] = [row[1][0] - row[0][0] * out.shear, row[1][1] - row[0][1] * out.shear]; out.scaley = math.sqrt(norm(row[1])); normalize(row[1]); out.shear /= out.scaley; // rotation var sin = -row[0][1], cos = row[1][1]; if (cos < 0) { out.rotate = R.deg(math.acos(cos)); if (sin < 0) { out.rotate = 360 - out.rotate; } } else { out.rotate = R.deg(math.asin(sin)); } out.isSimple = !+out.shear.toFixed(9) && (out.scalex.toFixed(9) == out.scaley.toFixed(9) || !out.rotate); out.isSuperSimple = !+out.shear.toFixed(9) && out.scalex.toFixed(9) == out.scaley.toFixed(9) && !out.rotate; out.noRotation = !+out.shear.toFixed(9) && !out.rotate; return out; }; /*\ * Matrix.toTransformString [ method ] ** * Return transform string that represents given matrix = (string) transform string \*/ matrixproto.toTransformString = function (shorter) { var s = shorter || this[split](); if (s.isSimple) { s.scalex = +s.scalex.toFixed(4); s.scaley = +s.scaley.toFixed(4); s.rotate = +s.rotate.toFixed(4); return (s.dx || s.dy ? "t" + [s.dx, s.dy] : E) + (s.scalex != 1 || s.scaley != 1 ? "s" + [s.scalex, s.scaley, 0, 0] : E) + (s.rotate ? "r" + [s.rotate, 0, 0] : E); } else { return "m" + [this.get(0), this.get(1), this.get(2), this.get(3), this.get(4), this.get(5)]; } }; })(Matrix.prototype); var preventDefault = function () { this.returnValue = false; }, preventTouch = function () { return this.originalEvent.preventDefault(); }, stopPropagation = function () { this.cancelBubble = true; }, stopTouch = function () { return this.originalEvent.stopPropagation(); }, getEventPosition = function (e) { var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop, scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft; return { x: e.clientX + scrollX, y: e.clientY + scrollY }; }, addEvent = (function () { if (g.doc.addEventListener) { return function (obj, type, fn, element) { var f = function (e) { var pos = getEventPosition(e); return fn.call(element, e, pos.x, pos.y); }; obj.addEventListener(type, f, false); if (supportsTouch && touchMap[type]) { var _f = function (e) { var pos = getEventPosition(e), olde = e; for (var i = 0, ii = e.targetTouches && e.targetTouches.length; i < ii; i++) { if (e.targetTouches[i].target == obj) { e = e.targetTouches[i]; e.originalEvent = olde; e.preventDefault = preventTouch; e.stopPropagation = stopTouch; break; } } return fn.call(element, e, pos.x, pos.y); }; obj.addEventListener(touchMap[type], _f, false); } return function () { obj.removeEventListener(type, f, false); if (supportsTouch && touchMap[type]) obj.removeEventListener(touchMap[type], _f, false); return true; }; }; } else if (g.doc.attachEvent) { return function (obj, type, fn, element) { var f = function (e) { e = e || g.win.event; var scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop, scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft, x = e.clientX + scrollX, y = e.clientY + scrollY; e.preventDefault = e.preventDefault || preventDefault; e.stopPropagation = e.stopPropagation || stopPropagation; return fn.call(element, e, x, y); }; obj.attachEvent("on" + type, f); var detacher = function () { obj.detachEvent("on" + type, f); return true; }; return detacher; }; } })(), drag = [], dragMove = function (e) { var x = e.clientX, y = e.clientY, scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop, scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft, dragi, j = drag.length; while (j--) { dragi = drag[j]; if (supportsTouch && e.touches) { var i = e.touches.length, touch; while (i--) { touch = e.touches[i]; if (touch.identifier == dragi.el._drag.id) { x = touch.clientX; y = touch.clientY; (e.originalEvent ? e.originalEvent : e).preventDefault(); break; } } } else { e.preventDefault(); } var node = dragi.el.node, o, next = node.nextSibling, parent = node.parentNode, display = node.style.display; g.win.opera && parent.removeChild(node); node.style.display = "none"; o = dragi.el.paper.getElementByPoint(x, y); node.style.display = display; g.win.opera && (next ? parent.insertBefore(node, next) : parent.appendChild(node)); o && eve("raphael.drag.over." + dragi.el.id, dragi.el, o); x += scrollX; y += scrollY; eve("raphael.drag.move." + dragi.el.id, dragi.move_scope || dragi.el, x - dragi.el._drag.x, y - dragi.el._drag.y, x, y, e); } }, dragUp = function (e) { R.unmousemove(dragMove).unmouseup(dragUp); var i = drag.length, dragi; while (i--) { dragi = drag[i]; dragi.el._drag = {}; eve("raphael.drag.end." + dragi.el.id, dragi.end_scope || dragi.start_scope || dragi.move_scope || dragi.el, e); } drag = []; }, /*\ * Raphael.el [ property (object) ] ** * You can add your own method to elements. This is useful when you want to hack default functionality or * want to wrap some common transformation or attributes in one method. In difference to canvas methods, * you can redefine element method at any time. Expending element methods wouldn’t affect set. > Usage | Raphael.el.red = function () { | this.attr({fill: "#f00"}); | }; | // then use it | paper.circle(100, 100, 20).red(); \*/ elproto = R.el = {}; /*\ * Element.click [ method ] ** * Adds event handler for click for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.unclick [ method ] ** * Removes event handler for click for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.dblclick [ method ] ** * Adds event handler for double click for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.undblclick [ method ] ** * Removes event handler for double click for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.mousedown [ method ] ** * Adds event handler for mousedown for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.unmousedown [ method ] ** * Removes event handler for mousedown for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.mousemove [ method ] ** * Adds event handler for mousemove for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.unmousemove [ method ] ** * Removes event handler for mousemove for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.mouseout [ method ] ** * Adds event handler for mouseout for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.unmouseout [ method ] ** * Removes event handler for mouseout for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.mouseover [ method ] ** * Adds event handler for mouseover for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.unmouseover [ method ] ** * Removes event handler for mouseover for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.mouseup [ method ] ** * Adds event handler for mouseup for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.unmouseup [ method ] ** * Removes event handler for mouseup for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.touchstart [ method ] ** * Adds event handler for touchstart for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.untouchstart [ method ] ** * Removes event handler for touchstart for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.touchmove [ method ] ** * Adds event handler for touchmove for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.untouchmove [ method ] ** * Removes event handler for touchmove for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.touchend [ method ] ** * Adds event handler for touchend for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.untouchend [ method ] ** * Removes event handler for touchend for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ /*\ * Element.touchcancel [ method ] ** * Adds event handler for touchcancel for the element. > Parameters - handler (function) handler for the event = (object) @Element \*/ /*\ * Element.untouchcancel [ method ] ** * Removes event handler for touchcancel for the element. > Parameters - handler (function) #optional handler for the event = (object) @Element \*/ for (var i = events.length; i--;) { (function (eventName) { R[eventName] = elproto[eventName] = function (fn, scope) { if (R.is(fn, "function")) { this.events = this.events || []; this.events.push({name: eventName, f: fn, unbind: addEvent(this.shape || this.node || g.doc, eventName, fn, scope || this)}); } return this; }; R["un" + eventName] = elproto["un" + eventName] = function (fn) { var events = this.events || [], l = events.length; while (l--){ if (events[l].name == eventName && (R.is(fn, "undefined") || events[l].f == fn)) { events[l].unbind(); events.splice(l, 1); !events.length && delete this.events; } } return this; }; })(events[i]); } /*\ * Element.data [ method ] ** * Adds or retrieves given value associated with given key. ** * See also @Element.removeData > Parameters - key (string) key to store data - value (any) #optional value to store = (object) @Element * or, if value is not specified: = (any) value * or, if key and value are not specified: = (object) Key/value pairs for all the data associated with the element. > Usage | for (var i = 0, i < 5, i++) { | paper.circle(10 + 15 * i, 10, 10) | .attr({fill: "#000"}) | .data("i", i) | .click(function () { | alert(this.data("i")); | }); | } \*/ elproto.data = function (key, value) { var data = eldata[this.id] = eldata[this.id] || {}; if (arguments.length == 0) { return data; } if (arguments.length == 1) { if (R.is(key, "object")) { for (var i in key) if (key[has](i)) { this.data(i, key[i]); } return this; } eve("raphael.data.get." + this.id, this, data[key], key); return data[key]; } data[key] = value; eve("raphael.data.set." + this.id, this, value, key); return this; }; /*\ * Element.removeData [ method ] ** * Removes value associated with an element by given key. * If key is not provided, removes all the data of the element. > Parameters - key (string) #optional key = (object) @Element \*/ elproto.removeData = function (key) { if (key == null) { eldata[this.id] = {}; } else { eldata[this.id] && delete eldata[this.id][key]; } return this; }; /*\ * Element.getData [ method ] ** * Retrieves the element data = (object) data \*/ elproto.getData = function () { return clone(eldata[this.id] || {}); }; /*\ * Element.hover [ method ] ** * Adds event handlers for hover for the element. > Parameters - f_in (function) handler for hover in - f_out (function) handler for hover out - icontext (object) #optional context for hover in handler - ocontext (object) #optional context for hover out handler = (object) @Element \*/ elproto.hover = function (f_in, f_out, scope_in, scope_out) { return this.mouseover(f_in, scope_in).mouseout(f_out, scope_out || scope_in); }; /*\ * Element.unhover [ method ] ** * Removes event handlers for hover for the element. > Parameters - f_in (function) handler for hover in - f_out (function) handler for hover out = (object) @Element \*/ elproto.unhover = function (f_in, f_out) { return this.unmouseover(f_in).unmouseout(f_out); }; var draggable = []; /*\ * Element.drag [ method ] ** * Adds event handlers for drag of the element. > Parameters - onmove (function) handler for moving - onstart (function) handler for drag start - onend (function) handler for drag end - mcontext (object) #optional context for moving handler - scontext (object) #optional context for drag start handler - econtext (object) #optional context for drag end handler * Additionally following `drag` events will be triggered: `drag.start.` on start, * `drag.end.` on end and `drag.move.` on every move. When element will be dragged over another element * `drag.over.` will be fired as well. * * Start event and start handler will be called in specified context or in context of the element with following parameters: o x (number) x position of the mouse o y (number) y position of the mouse o event (object) DOM event object * Move event and move handler will be called in specified context or in context of the element with following parameters: o dx (number) shift by x from the start point o dy (number) shift by y from the start point o x (number) x position of the mouse o y (number) y position of the mouse o event (object) DOM event object * End event and end handler will be called in specified context or in context of the element with following parameters: o event (object) DOM event object = (object) @Element \*/ elproto.drag = function (onmove, onstart, onend, move_scope, start_scope, end_scope) { function start(e) { (e.originalEvent || e).preventDefault(); var x = e.clientX, y = e.clientY, scrollY = g.doc.documentElement.scrollTop || g.doc.body.scrollTop, scrollX = g.doc.documentElement.scrollLeft || g.doc.body.scrollLeft; this._drag.id = e.identifier; if (supportsTouch && e.touches) { var i = e.touches.length, touch; while (i--) { touch = e.touches[i]; this._drag.id = touch.identifier; if (touch.identifier == this._drag.id) { x = touch.clientX; y = touch.clientY; break; } } } this._drag.x = x + scrollX; this._drag.y = y + scrollY; !drag.length && R.mousemove(dragMove).mouseup(dragUp); drag.push({el: this, move_scope: move_scope, start_scope: start_scope, end_scope: end_scope}); onstart && eve.on("raphael.drag.start." + this.id, onstart); onmove && eve.on("raphael.drag.move." + this.id, onmove); onend && eve.on("raphael.drag.end." + this.id, onend); eve("raphael.drag.start." + this.id, start_scope || move_scope || this, e.clientX + scrollX, e.clientY + scrollY, e); } this._drag = {}; draggable.push({el: this, start: start}); this.mousedown(start); return this; }; /*\ * Element.onDragOver [ method ] ** * Shortcut for assigning event handler for `drag.over.` event, where id is id of the element (see @Element.id). > Parameters - f (function) handler for event, first argument would be the element you are dragging over \*/ elproto.onDragOver = function (f) { f ? eve.on("raphael.drag.over." + this.id, f) : eve.unbind("raphael.drag.over." + this.id); }; /*\ * Element.undrag [ method ] ** * Removes all drag event handlers from given element. \*/ elproto.undrag = function () { var i = draggable.length; while (i--) if (draggable[i].el == this) { this.unmousedown(draggable[i].start); draggable.splice(i, 1); eve.unbind("raphael.drag.*." + this.id); } !draggable.length && R.unmousemove(dragMove).unmouseup(dragUp); drag = []; }; /*\ * Paper.circle [ method ] ** * Draws a circle. ** > Parameters ** - x (number) x coordinate of the centre - y (number) y coordinate of the centre - r (number) radius = (object) Raphaël element object with type “circle” ** > Usage | var c = paper.circle(50, 50, 40); \*/ paperproto.circle = function (x, y, r) { var out = R._engine.circle(this, x || 0, y || 0, r || 0); this.__set__ && this.__set__.push(out); return out; }; /*\ * Paper.rect [ method ] * * Draws a rectangle. ** > Parameters ** - x (number) x coordinate of the top left corner - y (number) y coordinate of the top left corner - width (number) width - height (number) height - r (number) #optional radius for rounded corners, default is 0 = (object) Raphaël element object with type “rect” ** > Usage | // regular rectangle | var c = paper.rect(10, 10, 50, 50); | // rectangle with rounded corners | var c = paper.rect(40, 40, 50, 50, 10); \*/ paperproto.rect = function (x, y, w, h, r) { var out = R._engine.rect(this, x || 0, y || 0, w || 0, h || 0, r || 0); this.__set__ && this.__set__.push(out); return out; }; /*\ * Paper.ellipse [ method ] ** * Draws an ellipse. ** > Parameters ** - x (number) x coordinate of the centre - y (number) y coordinate of the centre - rx (number) horizontal radius - ry (number) vertical radius = (object) Raphaël element object with type “ellipse” ** > Usage | var c = paper.ellipse(50, 50, 40, 20); \*/ paperproto.ellipse = function (x, y, rx, ry) { var out = R._engine.ellipse(this, x || 0, y || 0, rx || 0, ry || 0); this.__set__ && this.__set__.push(out); return out; }; /*\ * Paper.path [ method ] ** * Creates a path element by given path data string. > Parameters - pathString (string) #optional path string in SVG format. * Path string consists of one-letter commands, followed by comma seprarated arguments in numercal form. Example: | "M10,20L30,40" * Here we can see two commands: “M”, with arguments `(10, 20)` and “L” with arguments `(30, 40)`. Upper case letter mean command is absolute, lower case—relative. * #

    Here is short list of commands available, for more details see SVG path string format.

    # # # # # # # # # # # #
    CommandNameParameters
    Mmoveto(x y)+
    Zclosepath(none)
    Llineto(x y)+
    Hhorizontal linetox+
    Vvertical linetoy+
    Ccurveto(x1 y1 x2 y2 x y)+
    Ssmooth curveto(x2 y2 x y)+
    Qquadratic Bézier curveto(x1 y1 x y)+
    Tsmooth quadratic Bézier curveto(x y)+
    Aelliptical arc(rx ry x-axis-rotation large-arc-flag sweep-flag x y)+
    RCatmull-Rom curveto*x1 y1 (x y)+
    * * “Catmull-Rom curveto” is a not standard SVG command and added in 2.0 to make life easier. * Note: there is a special case when path consist of just three commands: “M10,10R…z”. In this case path will smoothly connects to its beginning. > Usage | var c = paper.path("M10 10L90 90"); | // draw a diagonal line: | // move to 10,10, line to 90,90 * For example of path strings, check out these icons: http://raphaeljs.com/icons/ \*/ paperproto.path = function (pathString) { pathString && !R.is(pathString, string) && !R.is(pathString[0], array) && (pathString += E); var out = R._engine.path(R.format[apply](R, arguments), this); this.__set__ && this.__set__.push(out); return out; }; /*\ * Paper.image [ method ] ** * Embeds an image into the surface. ** > Parameters ** - src (string) URI of the source image - x (number) x coordinate position - y (number) y coordinate position - width (number) width of the image - height (number) height of the image = (object) Raphaël element object with type “image” ** > Usage | var c = paper.image("apple.png", 10, 10, 80, 80); \*/ paperproto.image = function (src, x, y, w, h) { var out = R._engine.image(this, src || "about:blank", x || 0, y || 0, w || 0, h || 0); this.__set__ && this.__set__.push(out); return out; }; /*\ * Paper.text [ method ] ** * Draws a text string. If you need line breaks, put “\n” in the string. ** > Parameters ** - x (number) x coordinate position - y (number) y coordinate position - text (string) The text string to draw = (object) Raphaël element object with type “text” ** > Usage | var t = paper.text(50, 50, "Raphaël\nkicks\nbutt!"); \*/ paperproto.text = function (x, y, text) { var out = R._engine.text(this, x || 0, y || 0, Str(text)); this.__set__ && this.__set__.push(out); return out; }; /*\ * Paper.set [ method ] ** * Creates array-like object to keep and operate several elements at once. * Warning: it doesn’t create any elements for itself in the page, it just groups existing elements. * Sets act as pseudo elements — all methods available to an element can be used on a set. = (object) array-like object that represents set of elements ** > Usage | var st = paper.set(); | st.push( | paper.circle(10, 10, 5), | paper.circle(30, 10, 5) | ); | st.attr({fill: "red"}); // changes the fill of both circles \*/ paperproto.set = function (itemsArray) { !R.is(itemsArray, "array") && (itemsArray = Array.prototype.splice.call(arguments, 0, arguments.length)); var out = new Set(itemsArray); this.__set__ && this.__set__.push(out); out["paper"] = this; out["type"] = "set"; return out; }; /*\ * Paper.setStart [ method ] ** * Creates @Paper.set. All elements that will be created after calling this method and before calling * @Paper.setFinish will be added to the set. ** > Usage | paper.setStart(); | paper.circle(10, 10, 5), | paper.circle(30, 10, 5) | var st = paper.setFinish(); | st.attr({fill: "red"}); // changes the fill of both circles \*/ paperproto.setStart = function (set) { this.__set__ = set || this.set(); }; /*\ * Paper.setFinish [ method ] ** * See @Paper.setStart. This method finishes catching and returns resulting set. ** = (object) set \*/ paperproto.setFinish = function (set) { var out = this.__set__; delete this.__set__; return out; }; /*\ * Paper.getSize [ method ] ** * Obtains current paper actual size. ** = (object) \*/ paperproto.getSize = function () { var container = this.canvas.parentNode; return { width: container.offsetWidth, height: container.offsetHeight }; }; /*\ * Paper.setSize [ method ] ** * If you need to change dimensions of the canvas call this method ** > Parameters ** - width (number) new width of the canvas - height (number) new height of the canvas \*/ paperproto.setSize = function (width, height) { return R._engine.setSize.call(this, width, height); }; /*\ * Paper.setViewBox [ method ] ** * Sets the view box of the paper. Practically it gives you ability to zoom and pan whole paper surface by * specifying new boundaries. ** > Parameters ** - x (number) new x position, default is `0` - y (number) new y position, default is `0` - w (number) new width of the canvas - h (number) new height of the canvas - fit (boolean) `true` if you want graphics to fit into new boundary box \*/ paperproto.setViewBox = function (x, y, w, h, fit) { return R._engine.setViewBox.call(this, x, y, w, h, fit); }; /*\ * Paper.top [ property ] ** * Points to the topmost element on the paper \*/ /*\ * Paper.bottom [ property ] ** * Points to the bottom element on the paper \*/ paperproto.top = paperproto.bottom = null; /*\ * Paper.raphael [ property ] ** * Points to the @Raphael object/function \*/ paperproto.raphael = R; var getOffset = function (elem) { var box = elem.getBoundingClientRect(), doc = elem.ownerDocument, body = doc.body, docElem = doc.documentElement, clientTop = docElem.clientTop || body.clientTop || 0, clientLeft = docElem.clientLeft || body.clientLeft || 0, top = box.top + (g.win.pageYOffset || docElem.scrollTop || body.scrollTop ) - clientTop, left = box.left + (g.win.pageXOffset || docElem.scrollLeft || body.scrollLeft) - clientLeft; return { y: top, x: left }; }; /*\ * Paper.getElementByPoint [ method ] ** * Returns you topmost element under given point. ** = (object) Raphaël element object > Parameters ** - x (number) x coordinate from the top left corner of the window - y (number) y coordinate from the top left corner of the window > Usage | paper.getElementByPoint(mouseX, mouseY).attr({stroke: "#f00"}); \*/ paperproto.getElementByPoint = function (x, y) { var paper = this, svg = paper.canvas, target = g.doc.elementFromPoint(x, y); if (g.win.opera && target.tagName == "svg") { var so = getOffset(svg), sr = svg.createSVGRect(); sr.x = x - so.x; sr.y = y - so.y; sr.width = sr.height = 1; var hits = svg.getIntersectionList(sr, null); if (hits.length) { target = hits[hits.length - 1]; } } if (!target) { return null; } while (target.parentNode && target != svg.parentNode && !target.raphael) { target = target.parentNode; } target == paper.canvas.parentNode && (target = svg); target = target && target.raphael ? paper.getById(target.raphaelid) : null; return target; }; /*\ * Paper.getElementsByBBox [ method ] ** * Returns set of elements that have an intersecting bounding box ** > Parameters ** - bbox (object) bbox to check with = (object) @Set \*/ paperproto.getElementsByBBox = function (bbox) { var set = this.set(); this.forEach(function (el) { if (R.isBBoxIntersect(el.getBBox(), bbox)) { set.push(el); } }); return set; }; /*\ * Paper.getById [ method ] ** * Returns you element by its internal ID. ** > Parameters ** - id (number) id = (object) Raphaël element object \*/ paperproto.getById = function (id) { var bot = this.bottom; while (bot) { if (bot.id == id) { return bot; } bot = bot.next; } return null; }; /*\ * Paper.forEach [ method ] ** * Executes given function for each element on the paper * * If callback function returns `false` it will stop loop running. ** > Parameters ** - callback (function) function to run - thisArg (object) context object for the callback = (object) Paper object > Usage | paper.forEach(function (el) { | el.attr({ stroke: "blue" }); | }); \*/ paperproto.forEach = function (callback, thisArg) { var bot = this.bottom; while (bot) { if (callback.call(thisArg, bot) === false) { return this; } bot = bot.next; } return this; }; /*\ * Paper.getElementsByPoint [ method ] ** * Returns set of elements that have common point inside ** > Parameters ** - x (number) x coordinate of the point - y (number) y coordinate of the point = (object) @Set \*/ paperproto.getElementsByPoint = function (x, y) { var set = this.set(); this.forEach(function (el) { if (el.isPointInside(x, y)) { set.push(el); } }); return set; }; function x_y() { return this.x + S + this.y; } function x_y_w_h() { return this.x + S + this.y + S + this.width + " \xd7 " + this.height; } /*\ * Element.isPointInside [ method ] ** * Determine if given point is inside this element’s shape ** > Parameters ** - x (number) x coordinate of the point - y (number) y coordinate of the point = (boolean) `true` if point inside the shape \*/ elproto.isPointInside = function (x, y) { var rp = this.realPath = getPath[this.type](this); if (this.attr('transform') && this.attr('transform').length) { rp = R.transformPath(rp, this.attr('transform')); } return R.isPointInsidePath(rp, x, y); }; /*\ * Element.getBBox [ method ] ** * Return bounding box for a given element ** > Parameters ** - isWithoutTransform (boolean) flag, `true` if you want to have bounding box before transformations. Default is `false`. = (object) Bounding box object: o { o x: (number) top left corner x o y: (number) top left corner y o x2: (number) bottom right corner x o y2: (number) bottom right corner y o width: (number) width o height: (number) height o } \*/ elproto.getBBox = function (isWithoutTransform) { if (this.removed) { return {}; } var _ = this._; if (isWithoutTransform) { if (_.dirty || !_.bboxwt) { this.realPath = getPath[this.type](this); _.bboxwt = pathDimensions(this.realPath); _.bboxwt.toString = x_y_w_h; _.dirty = 0; } return _.bboxwt; } if (_.dirty || _.dirtyT || !_.bbox) { if (_.dirty || !this.realPath) { _.bboxwt = 0; this.realPath = getPath[this.type](this); } _.bbox = pathDimensions(mapPath(this.realPath, this.matrix)); _.bbox.toString = x_y_w_h; _.dirty = _.dirtyT = 0; } return _.bbox; }; /*\ * Element.clone [ method ] ** = (object) clone of a given element ** \*/ elproto.clone = function () { if (this.removed) { return null; } var out = this.paper[this.type]().attr(this.attr()); this.__set__ && this.__set__.push(out); return out; }; /*\ * Element.glow [ method ] ** * Return set of elements that create glow-like effect around given element. See @Paper.set. * * Note: Glow is not connected to the element. If you change element attributes it won’t adjust itself. ** > Parameters ** - glow (object) #optional parameters object with all properties optional: o { o width (number) size of the glow, default is `10` o fill (boolean) will it be filled, default is `false` o opacity (number) opacity, default is `0.5` o offsetx (number) horizontal offset, default is `0` o offsety (number) vertical offset, default is `0` o color (string) glow colour, default is `black` o } = (object) @Paper.set of elements that represents glow \*/ elproto.glow = function (glow) { if (this.type == "text") { return null; } glow = glow || {}; var s = { width: (glow.width || 10) + (+this.attr("stroke-width") || 1), fill: glow.fill || false, opacity: glow.opacity == null ? .5 : glow.opacity, offsetx: glow.offsetx || 0, offsety: glow.offsety || 0, color: glow.color || "#000" }, c = s.width / 2, r = this.paper, out = r.set(), path = this.realPath || getPath[this.type](this); path = this.matrix ? mapPath(path, this.matrix) : path; for (var i = 1; i < c + 1; i++) { out.push(r.path(path).attr({ stroke: s.color, fill: s.fill ? s.color : "none", "stroke-linejoin": "round", "stroke-linecap": "round", "stroke-width": +(s.width / c * i).toFixed(3), opacity: +(s.opacity / c).toFixed(3) })); } return out.insertBefore(this).translate(s.offsetx, s.offsety); }; var curveslengths = {}, getPointAtSegmentLength = function (p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length) { if (length == null) { return bezlen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y); } else { return R.findDotsAtSegment(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, getTatLen(p1x, p1y, c1x, c1y, c2x, c2y, p2x, p2y, length)); } }, getLengthFactory = function (istotal, subpath) { return function (path, length, onlystart) { path = path2curve(path); var x, y, p, l, sp = "", subpaths = {}, point, len = 0; for (var i = 0, ii = path.length; i < ii; i++) { p = path[i]; if (p[0] == "M") { x = +p[1]; y = +p[2]; } else { l = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6]); if (len + l > length) { if (subpath && !subpaths.start) { point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len); sp += ["C" + point.start.x, point.start.y, point.m.x, point.m.y, point.x, point.y]; if (onlystart) {return sp;} subpaths.start = sp; sp = ["M" + point.x, point.y + "C" + point.n.x, point.n.y, point.end.x, point.end.y, p[5], p[6]].join(); len += l; x = +p[5]; y = +p[6]; continue; } if (!istotal && !subpath) { point = getPointAtSegmentLength(x, y, p[1], p[2], p[3], p[4], p[5], p[6], length - len); return {x: point.x, y: point.y, alpha: point.alpha}; } } len += l; x = +p[5]; y = +p[6]; } sp += p.shift() + p; } subpaths.end = sp; point = istotal ? len : subpath ? subpaths : R.findDotsAtSegment(x, y, p[0], p[1], p[2], p[3], p[4], p[5], 1); point.alpha && (point = {x: point.x, y: point.y, alpha: point.alpha}); return point; }; }; var getTotalLength = getLengthFactory(1), getPointAtLength = getLengthFactory(), getSubpathsAtLength = getLengthFactory(0, 1); /*\ * Raphael.getTotalLength [ method ] ** * Returns length of the given path in pixels. ** > Parameters ** - path (string) SVG path string. ** = (number) length. \*/ R.getTotalLength = getTotalLength; /*\ * Raphael.getPointAtLength [ method ] ** * Return coordinates of the point located at the given length on the given path. ** > Parameters ** - path (string) SVG path string - length (number) ** = (object) representation of the point: o { o x: (number) x coordinate o y: (number) y coordinate o alpha: (number) angle of derivative o } \*/ R.getPointAtLength = getPointAtLength; /*\ * Raphael.getSubpath [ method ] ** * Return subpath of a given path from given length to given length. ** > Parameters ** - path (string) SVG path string - from (number) position of the start of the segment - to (number) position of the end of the segment ** = (string) pathstring for the segment \*/ R.getSubpath = function (path, from, to) { if (this.getTotalLength(path) - to < 1e-6) { return getSubpathsAtLength(path, from).end; } var a = getSubpathsAtLength(path, to, 1); return from ? getSubpathsAtLength(a, from).end : a; }; /*\ * Element.getTotalLength [ method ] ** * Returns length of the path in pixels. Only works for element of “path” type. = (number) length. \*/ elproto.getTotalLength = function () { var path = this.getPath(); if (!path) { return; } if (this.node.getTotalLength) { return this.node.getTotalLength(); } return getTotalLength(path); }; /*\ * Element.getPointAtLength [ method ] ** * Return coordinates of the point located at the given length on the given path. Only works for element of “path” type. ** > Parameters ** - length (number) ** = (object) representation of the point: o { o x: (number) x coordinate o y: (number) y coordinate o alpha: (number) angle of derivative o } \*/ elproto.getPointAtLength = function (length) { var path = this.getPath(); if (!path) { return; } return getPointAtLength(path, length); }; /*\ * Element.getPath [ method ] ** * Returns path of the element. Only works for elements of “path” type and simple elements like circle. = (object) path ** \*/ elproto.getPath = function () { var path, getPath = R._getPath[this.type]; if (this.type == "text" || this.type == "set") { return; } if (getPath) { path = getPath(this); } return path; }; /*\ * Element.getSubpath [ method ] ** * Return subpath of a given element from given length to given length. Only works for element of “path” type. ** > Parameters ** - from (number) position of the start of the segment - to (number) position of the end of the segment ** = (string) pathstring for the segment \*/ elproto.getSubpath = function (from, to) { var path = this.getPath(); if (!path) { return; } return R.getSubpath(path, from, to); }; /*\ * Raphael.easing_formulas [ property ] ** * Object that contains easing formulas for animation. You could extend it with your own. By default it has following list of easing: #
      #
    • “linear”
    • #
    • “<” or “easeIn” or “ease-in”
    • #
    • “>” or “easeOut” or “ease-out”
    • #
    • “<>” or “easeInOut” or “ease-in-out”
    • #
    • “backIn” or “back-in”
    • #
    • “backOut” or “back-out”
    • #
    • “elastic”
    • #
    • “bounce”
    • #
    #

    See also Easing demo.

    \*/ var ef = R.easing_formulas = { linear: function (n) { return n; }, "<": function (n) { return pow(n, 1.7); }, ">": function (n) { return pow(n, .48); }, "<>": function (n) { var q = .48 - n / 1.04, Q = math.sqrt(.1734 + q * q), x = Q - q, X = pow(abs(x), 1 / 3) * (x < 0 ? -1 : 1), y = -Q - q, Y = pow(abs(y), 1 / 3) * (y < 0 ? -1 : 1), t = X + Y + .5; return (1 - t) * 3 * t * t + t * t * t; }, backIn: function (n) { var s = 1.70158; return n * n * ((s + 1) * n - s); }, backOut: function (n) { n = n - 1; var s = 1.70158; return n * n * ((s + 1) * n + s) + 1; }, elastic: function (n) { if (n == !!n) { return n; } return pow(2, -10 * n) * math.sin((n - .075) * (2 * PI) / .3) + 1; }, bounce: function (n) { var s = 7.5625, p = 2.75, l; if (n < (1 / p)) { l = s * n * n; } else { if (n < (2 / p)) { n -= (1.5 / p); l = s * n * n + .75; } else { if (n < (2.5 / p)) { n -= (2.25 / p); l = s * n * n + .9375; } else { n -= (2.625 / p); l = s * n * n + .984375; } } } return l; } }; ef.easeIn = ef["ease-in"] = ef["<"]; ef.easeOut = ef["ease-out"] = ef[">"]; ef.easeInOut = ef["ease-in-out"] = ef["<>"]; ef["back-in"] = ef.backIn; ef["back-out"] = ef.backOut; var animationElements = [], requestAnimFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function (callback) { setTimeout(callback, 16); }, animation = function () { var Now = +new Date, l = 0; for (; l < animationElements.length; l++) { var e = animationElements[l]; if (e.el.removed || e.paused) { continue; } var time = Now - e.start, ms = e.ms, easing = e.easing, from = e.from, diff = e.diff, to = e.to, t = e.t, that = e.el, set = {}, now, init = {}, key; if (e.initstatus) { time = (e.initstatus * e.anim.top - e.prev) / (e.percent - e.prev) * ms; e.status = e.initstatus; delete e.initstatus; e.stop && animationElements.splice(l--, 1); } else { e.status = (e.prev + (e.percent - e.prev) * (time / ms)) / e.anim.top; } if (time < 0) { continue; } if (time < ms) { var pos = easing(time / ms); for (var attr in from) if (from[has](attr)) { switch (availableAnimAttrs[attr]) { case nu: now = +from[attr] + pos * ms * diff[attr]; break; case "colour": now = "rgb(" + [ upto255(round(from[attr].r + pos * ms * diff[attr].r)), upto255(round(from[attr].g + pos * ms * diff[attr].g)), upto255(round(from[attr].b + pos * ms * diff[attr].b)) ].join(",") + ")"; break; case "path": now = []; for (var i = 0, ii = from[attr].length; i < ii; i++) { now[i] = [from[attr][i][0]]; for (var j = 1, jj = from[attr][i].length; j < jj; j++) { now[i][j] = +from[attr][i][j] + pos * ms * diff[attr][i][j]; } now[i] = now[i].join(S); } now = now.join(S); break; case "transform": if (diff[attr].real) { now = []; for (i = 0, ii = from[attr].length; i < ii; i++) { now[i] = [from[attr][i][0]]; for (j = 1, jj = from[attr][i].length; j < jj; j++) { now[i][j] = from[attr][i][j] + pos * ms * diff[attr][i][j]; } } } else { var get = function (i) { return +from[attr][i] + pos * ms * diff[attr][i]; }; // now = [["r", get(2), 0, 0], ["t", get(3), get(4)], ["s", get(0), get(1), 0, 0]]; now = [["m", get(0), get(1), get(2), get(3), get(4), get(5)]]; } break; case "csv": if (attr == "clip-rect") { now = []; i = 4; while (i--) { now[i] = +from[attr][i] + pos * ms * diff[attr][i]; } } break; default: var from2 = [][concat](from[attr]); now = []; i = that.paper.customAttributes[attr].length; while (i--) { now[i] = +from2[i] + pos * ms * diff[attr][i]; } break; } set[attr] = now; } that.attr(set); (function (id, that, anim) { setTimeout(function () { eve("raphael.anim.frame." + id, that, anim); }); })(that.id, that, e.anim); } else { (function(f, el, a) { setTimeout(function() { eve("raphael.anim.frame." + el.id, el, a); eve("raphael.anim.finish." + el.id, el, a); R.is(f, "function") && f.call(el); }); })(e.callback, that, e.anim); that.attr(to); animationElements.splice(l--, 1); if (e.repeat > 1 && !e.next) { for (key in to) if (to[has](key)) { init[key] = e.totalOrigin[key]; } e.el.attr(init); runAnimation(e.anim, e.el, e.anim.percents[0], null, e.totalOrigin, e.repeat - 1); } if (e.next && !e.stop) { runAnimation(e.anim, e.el, e.next, null, e.totalOrigin, e.repeat); } } } animationElements.length && requestAnimFrame(animation); }, upto255 = function (color) { return color > 255 ? 255 : color < 0 ? 0 : color; }; /*\ * Element.animateWith [ method ] ** * Acts similar to @Element.animate, but ensure that given animation runs in sync with another given element. ** > Parameters ** - el (object) element to sync with - anim (object) animation to sync with - params (object) #optional final attributes for the element, see also @Element.attr - ms (number) #optional number of milliseconds for animation to run - easing (string) #optional easing type. Accept on of @Raphael.easing_formulas or CSS format: `cubic‐bezier(XX, XX, XX, XX)` - callback (function) #optional callback function. Will be called at the end of animation. * or - element (object) element to sync with - anim (object) animation to sync with - animation (object) #optional animation object, see @Raphael.animation ** = (object) original element \*/ elproto.animateWith = function (el, anim, params, ms, easing, callback) { var element = this; if (element.removed) { callback && callback.call(element); return element; } var a = params instanceof Animation ? params : R.animation(params, ms, easing, callback), x, y; runAnimation(a, element, a.percents[0], null, element.attr()); for (var i = 0, ii = animationElements.length; i < ii; i++) { if (animationElements[i].anim == anim && animationElements[i].el == el) { animationElements[ii - 1].start = animationElements[i].start; break; } } return element; // // // var a = params ? R.animation(params, ms, easing, callback) : anim, // status = element.status(anim); // return this.animate(a).status(a, status * anim.ms / a.ms); }; function CubicBezierAtTime(t, p1x, p1y, p2x, p2y, duration) { var cx = 3 * p1x, bx = 3 * (p2x - p1x) - cx, ax = 1 - cx - bx, cy = 3 * p1y, by = 3 * (p2y - p1y) - cy, ay = 1 - cy - by; function sampleCurveX(t) { return ((ax * t + bx) * t + cx) * t; } function solve(x, epsilon) { var t = solveCurveX(x, epsilon); return ((ay * t + by) * t + cy) * t; } function solveCurveX(x, epsilon) { var t0, t1, t2, x2, d2, i; for(t2 = x, i = 0; i < 8; i++) { x2 = sampleCurveX(t2) - x; if (abs(x2) < epsilon) { return t2; } d2 = (3 * ax * t2 + 2 * bx) * t2 + cx; if (abs(d2) < 1e-6) { break; } t2 = t2 - x2 / d2; } t0 = 0; t1 = 1; t2 = x; if (t2 < t0) { return t0; } if (t2 > t1) { return t1; } while (t0 < t1) { x2 = sampleCurveX(t2); if (abs(x2 - x) < epsilon) { return t2; } if (x > x2) { t0 = t2; } else { t1 = t2; } t2 = (t1 - t0) / 2 + t0; } return t2; } return solve(t, 1 / (200 * duration)); } elproto.onAnimation = function (f) { f ? eve.on("raphael.anim.frame." + this.id, f) : eve.unbind("raphael.anim.frame." + this.id); return this; }; function Animation(anim, ms) { var percents = [], newAnim = {}; this.ms = ms; this.times = 1; if (anim) { for (var attr in anim) if (anim[has](attr)) { newAnim[toFloat(attr)] = anim[attr]; percents.push(toFloat(attr)); } percents.sort(sortByNumber); } this.anim = newAnim; this.top = percents[percents.length - 1]; this.percents = percents; } /*\ * Animation.delay [ method ] ** * Creates a copy of existing animation object with given delay. ** > Parameters ** - delay (number) number of ms to pass between animation start and actual animation ** = (object) new altered Animation object | var anim = Raphael.animation({cx: 10, cy: 20}, 2e3); | circle1.animate(anim); // run the given animation immediately | circle2.animate(anim.delay(500)); // run the given animation after 500 ms \*/ Animation.prototype.delay = function (delay) { var a = new Animation(this.anim, this.ms); a.times = this.times; a.del = +delay || 0; return a; }; /*\ * Animation.repeat [ method ] ** * Creates a copy of existing animation object with given repetition. ** > Parameters ** - repeat (number) number iterations of animation. For infinite animation pass `Infinity` ** = (object) new altered Animation object \*/ Animation.prototype.repeat = function (times) { var a = new Animation(this.anim, this.ms); a.del = this.del; a.times = math.floor(mmax(times, 0)) || 1; return a; }; function runAnimation(anim, element, percent, status, totalOrigin, times) { percent = toFloat(percent); var params, isInAnim, isInAnimSet, percents = [], next, prev, timestamp, ms = anim.ms, from = {}, to = {}, diff = {}; if (status) { for (i = 0, ii = animationElements.length; i < ii; i++) { var e = animationElements[i]; if (e.el.id == element.id && e.anim == anim) { if (e.percent != percent) { animationElements.splice(i, 1); isInAnimSet = 1; } else { isInAnim = e; } element.attr(e.totalOrigin); break; } } } else { status = +to; // NaN } for (var i = 0, ii = anim.percents.length; i < ii; i++) { if (anim.percents[i] == percent || anim.percents[i] > status * anim.top) { percent = anim.percents[i]; prev = anim.percents[i - 1] || 0; ms = ms / anim.top * (percent - prev); next = anim.percents[i + 1]; params = anim.anim[percent]; break; } else if (status) { element.attr(anim.anim[anim.percents[i]]); } } if (!params) { return; } if (!isInAnim) { for (var attr in params) if (params[has](attr)) { if (availableAnimAttrs[has](attr) || element.paper.customAttributes[has](attr)) { from[attr] = element.attr(attr); (from[attr] == null) && (from[attr] = availableAttrs[attr]); to[attr] = params[attr]; switch (availableAnimAttrs[attr]) { case nu: diff[attr] = (to[attr] - from[attr]) / ms; break; case "colour": from[attr] = R.getRGB(from[attr]); var toColour = R.getRGB(to[attr]); diff[attr] = { r: (toColour.r - from[attr].r) / ms, g: (toColour.g - from[attr].g) / ms, b: (toColour.b - from[attr].b) / ms }; break; case "path": var pathes = path2curve(from[attr], to[attr]), toPath = pathes[1]; from[attr] = pathes[0]; diff[attr] = []; for (i = 0, ii = from[attr].length; i < ii; i++) { diff[attr][i] = [0]; for (var j = 1, jj = from[attr][i].length; j < jj; j++) { diff[attr][i][j] = (toPath[i][j] - from[attr][i][j]) / ms; } } break; case "transform": var _ = element._, eq = equaliseTransform(_[attr], to[attr]); if (eq) { from[attr] = eq.from; to[attr] = eq.to; diff[attr] = []; diff[attr].real = true; for (i = 0, ii = from[attr].length; i < ii; i++) { diff[attr][i] = [from[attr][i][0]]; for (j = 1, jj = from[attr][i].length; j < jj; j++) { diff[attr][i][j] = (to[attr][i][j] - from[attr][i][j]) / ms; } } } else { var m = (element.matrix || new Matrix), to2 = { _: {transform: _.transform}, getBBox: function () { return element.getBBox(1); } }; from[attr] = [ m.a, m.b, m.c, m.d, m.e, m.f ]; extractTransform(to2, to[attr]); to[attr] = to2._.transform; diff[attr] = [ (to2.matrix.a - m.a) / ms, (to2.matrix.b - m.b) / ms, (to2.matrix.c - m.c) / ms, (to2.matrix.d - m.d) / ms, (to2.matrix.e - m.e) / ms, (to2.matrix.f - m.f) / ms ]; // from[attr] = [_.sx, _.sy, _.deg, _.dx, _.dy]; // var to2 = {_:{}, getBBox: function () { return element.getBBox(); }}; // extractTransform(to2, to[attr]); // diff[attr] = [ // (to2._.sx - _.sx) / ms, // (to2._.sy - _.sy) / ms, // (to2._.deg - _.deg) / ms, // (to2._.dx - _.dx) / ms, // (to2._.dy - _.dy) / ms // ]; } break; case "csv": var values = Str(params[attr])[split](separator), from2 = Str(from[attr])[split](separator); if (attr == "clip-rect") { from[attr] = from2; diff[attr] = []; i = from2.length; while (i--) { diff[attr][i] = (values[i] - from[attr][i]) / ms; } } to[attr] = values; break; default: values = [][concat](params[attr]); from2 = [][concat](from[attr]); diff[attr] = []; i = element.paper.customAttributes[attr].length; while (i--) { diff[attr][i] = ((values[i] || 0) - (from2[i] || 0)) / ms; } break; } } } var easing = params.easing, easyeasy = R.easing_formulas[easing]; if (!easyeasy) { easyeasy = Str(easing).match(bezierrg); if (easyeasy && easyeasy.length == 5) { var curve = easyeasy; easyeasy = function (t) { return CubicBezierAtTime(t, +curve[1], +curve[2], +curve[3], +curve[4], ms); }; } else { easyeasy = pipe; } } timestamp = params.start || anim.start || +new Date; e = { anim: anim, percent: percent, timestamp: timestamp, start: timestamp + (anim.del || 0), status: 0, initstatus: status || 0, stop: false, ms: ms, easing: easyeasy, from: from, diff: diff, to: to, el: element, callback: params.callback, prev: prev, next: next, repeat: times || anim.times, origin: element.attr(), totalOrigin: totalOrigin }; animationElements.push(e); if (status && !isInAnim && !isInAnimSet) { e.stop = true; e.start = new Date - ms * status; if (animationElements.length == 1) { return animation(); } } if (isInAnimSet) { e.start = new Date - e.ms * status; } animationElements.length == 1 && requestAnimFrame(animation); } else { isInAnim.initstatus = status; isInAnim.start = new Date - isInAnim.ms * status; } eve("raphael.anim.start." + element.id, element, anim); } /*\ * Raphael.animation [ method ] ** * Creates an animation object that can be passed to the @Element.animate or @Element.animateWith methods. * See also @Animation.delay and @Animation.repeat methods. ** > Parameters ** - params (object) final attributes for the element, see also @Element.attr - ms (number) number of milliseconds for animation to run - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic‐bezier(XX, XX, XX, XX)` - callback (function) #optional callback function. Will be called at the end of animation. ** = (object) @Animation \*/ R.animation = function (params, ms, easing, callback) { if (params instanceof Animation) { return params; } if (R.is(easing, "function") || !easing) { callback = callback || easing || null; easing = null; } params = Object(params); ms = +ms || 0; var p = {}, json, attr; for (attr in params) if (params[has](attr) && toFloat(attr) != attr && toFloat(attr) + "%" != attr) { json = true; p[attr] = params[attr]; } if (!json) { // if percent-like syntax is used and end-of-all animation callback used if(callback){ // find the last one var lastKey = 0; for(var i in params){ var percent = toInt(i); if(params[has](i) && percent > lastKey){ lastKey = percent; } } lastKey += '%'; // if already defined callback in the last keyframe, skip !params[lastKey].callback && (params[lastKey].callback = callback); } return new Animation(params, ms); } else { easing && (p.easing = easing); callback && (p.callback = callback); return new Animation({100: p}, ms); } }; /*\ * Element.animate [ method ] ** * Creates and starts animation for given element. ** > Parameters ** - params (object) final attributes for the element, see also @Element.attr - ms (number) number of milliseconds for animation to run - easing (string) #optional easing type. Accept one of @Raphael.easing_formulas or CSS format: `cubic‐bezier(XX, XX, XX, XX)` - callback (function) #optional callback function. Will be called at the end of animation. * or - animation (object) animation object, see @Raphael.animation ** = (object) original element \*/ elproto.animate = function (params, ms, easing, callback) { var element = this; if (element.removed) { callback && callback.call(element); return element; } var anim = params instanceof Animation ? params : R.animation(params, ms, easing, callback); runAnimation(anim, element, anim.percents[0], null, element.attr()); return element; }; /*\ * Element.setTime [ method ] ** * Sets the status of animation of the element in milliseconds. Similar to @Element.status method. ** > Parameters ** - anim (object) animation object - value (number) number of milliseconds from the beginning of the animation ** = (object) original element if `value` is specified * Note, that during animation following events are triggered: * * On each animation frame event `anim.frame.`, on start `anim.start.` and on end `anim.finish.`. \*/ elproto.setTime = function (anim, value) { if (anim && value != null) { this.status(anim, mmin(value, anim.ms) / anim.ms); } return this; }; /*\ * Element.status [ method ] ** * Gets or sets the status of animation of the element. ** > Parameters ** - anim (object) #optional animation object - value (number) #optional 0 – 1. If specified, method works like a setter and sets the status of a given animation to the value. This will cause animation to jump to the given position. ** = (number) status * or = (array) status if `anim` is not specified. Array of objects in format: o { o anim: (object) animation object o status: (number) status o } * or = (object) original element if `value` is specified \*/ elproto.status = function (anim, value) { var out = [], i = 0, len, e; if (value != null) { runAnimation(anim, this, -1, mmin(value, 1)); return this; } else { len = animationElements.length; for (; i < len; i++) { e = animationElements[i]; if (e.el.id == this.id && (!anim || e.anim == anim)) { if (anim) { return e.status; } out.push({ anim: e.anim, status: e.status }); } } if (anim) { return 0; } return out; } }; /*\ * Element.pause [ method ] ** * Stops animation of the element with ability to resume it later on. ** > Parameters ** - anim (object) #optional animation object ** = (object) original element \*/ elproto.pause = function (anim) { for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) { if (eve("raphael.anim.pause." + this.id, this, animationElements[i].anim) !== false) { animationElements[i].paused = true; } } return this; }; /*\ * Element.resume [ method ] ** * Resumes animation if it was paused with @Element.pause method. ** > Parameters ** - anim (object) #optional animation object ** = (object) original element \*/ elproto.resume = function (anim) { for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) { var e = animationElements[i]; if (eve("raphael.anim.resume." + this.id, this, e.anim) !== false) { delete e.paused; this.status(e.anim, e.status); } } return this; }; /*\ * Element.stop [ method ] ** * Stops animation of the element. ** > Parameters ** - anim (object) #optional animation object ** = (object) original element \*/ elproto.stop = function (anim) { for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.id == this.id && (!anim || animationElements[i].anim == anim)) { if (eve("raphael.anim.stop." + this.id, this, animationElements[i].anim) !== false) { animationElements.splice(i--, 1); } } return this; }; function stopAnimation(paper) { for (var i = 0; i < animationElements.length; i++) if (animationElements[i].el.paper == paper) { animationElements.splice(i--, 1); } } eve.on("raphael.remove", stopAnimation); eve.on("raphael.clear", stopAnimation); elproto.toString = function () { return "Rapha\xebl\u2019s object"; }; // Set var Set = function (items) { this.items = []; this.length = 0; this.type = "set"; if (items) { for (var i = 0, ii = items.length; i < ii; i++) { if (items[i] && (items[i].constructor == elproto.constructor || items[i].constructor == Set)) { this[this.items.length] = this.items[this.items.length] = items[i]; this.length++; } } } }, setproto = Set.prototype; /*\ * Set.push [ method ] ** * Adds each argument to the current set. = (object) original element \*/ setproto.push = function () { var item, len; for (var i = 0, ii = arguments.length; i < ii; i++) { item = arguments[i]; if (item && (item.constructor == elproto.constructor || item.constructor == Set)) { len = this.items.length; this[len] = this.items[len] = item; this.length++; } } return this; }; /*\ * Set.pop [ method ] ** * Removes last element and returns it. = (object) element \*/ setproto.pop = function () { this.length && delete this[this.length--]; return this.items.pop(); }; /*\ * Set.forEach [ method ] ** * Executes given function for each element in the set. * * If function returns `false` it will stop loop running. ** > Parameters ** - callback (function) function to run - thisArg (object) context object for the callback = (object) Set object \*/ setproto.forEach = function (callback, thisArg) { for (var i = 0, ii = this.items.length; i < ii; i++) { if (callback.call(thisArg, this.items[i], i) === false) { return this; } } return this; }; for (var method in elproto) if (elproto[has](method)) { setproto[method] = (function (methodname) { return function () { var arg = arguments; return this.forEach(function (el) { el[methodname][apply](el, arg); }); }; })(method); } setproto.attr = function (name, value) { if (name && R.is(name, array) && R.is(name[0], "object")) { for (var j = 0, jj = name.length; j < jj; j++) { this.items[j].attr(name[j]); } } else { for (var i = 0, ii = this.items.length; i < ii; i++) { this.items[i].attr(name, value); } } return this; }; /*\ * Set.clear [ method ] ** * Removes all elements from the set \*/ setproto.clear = function () { while (this.length) { this.pop(); } }; /*\ * Set.splice [ method ] ** * Removes given element from the set ** > Parameters ** - index (number) position of the deletion - count (number) number of element to remove - insertion… (object) #optional elements to insert = (object) set elements that were deleted \*/ setproto.splice = function (index, count, insertion) { index = index < 0 ? mmax(this.length + index, 0) : index; count = mmax(0, mmin(this.length - index, count)); var tail = [], todel = [], args = [], i; for (i = 2; i < arguments.length; i++) { args.push(arguments[i]); } for (i = 0; i < count; i++) { todel.push(this[index + i]); } for (; i < this.length - index; i++) { tail.push(this[index + i]); } var arglen = args.length; for (i = 0; i < arglen + tail.length; i++) { this.items[index + i] = this[index + i] = i < arglen ? args[i] : tail[i - arglen]; } i = this.items.length = this.length -= count - arglen; while (this[i]) { delete this[i++]; } return new Set(todel); }; /*\ * Set.exclude [ method ] ** * Removes given element from the set ** > Parameters ** - element (object) element to remove = (boolean) `true` if object was found & removed from the set \*/ setproto.exclude = function (el) { for (var i = 0, ii = this.length; i < ii; i++) if (this[i] == el) { this.splice(i, 1); return true; } }; setproto.animate = function (params, ms, easing, callback) { (R.is(easing, "function") || !easing) && (callback = easing || null); var len = this.items.length, i = len, item, set = this, collector; if (!len) { return this; } callback && (collector = function () { !--len && callback.call(set); }); easing = R.is(easing, string) ? easing : collector; var anim = R.animation(params, ms, easing, collector); item = this.items[--i].animate(anim); while (i--) { this.items[i] && !this.items[i].removed && this.items[i].animateWith(item, anim, anim); (this.items[i] && !this.items[i].removed) || len--; } return this; }; setproto.insertAfter = function (el) { var i = this.items.length; while (i--) { this.items[i].insertAfter(el); } return this; }; setproto.getBBox = function () { var x = [], y = [], x2 = [], y2 = []; for (var i = this.items.length; i--;) if (!this.items[i].removed) { var box = this.items[i].getBBox(); x.push(box.x); y.push(box.y); x2.push(box.x + box.width); y2.push(box.y + box.height); } x = mmin[apply](0, x); y = mmin[apply](0, y); x2 = mmax[apply](0, x2); y2 = mmax[apply](0, y2); return { x: x, y: y, x2: x2, y2: y2, width: x2 - x, height: y2 - y }; }; setproto.clone = function (s) { s = this.paper.set(); for (var i = 0, ii = this.items.length; i < ii; i++) { s.push(this.items[i].clone()); } return s; }; setproto.toString = function () { return "Rapha\xebl\u2018s set"; }; setproto.glow = function(glowConfig) { var ret = this.paper.set(); this.forEach(function(shape, index){ var g = shape.glow(glowConfig); if(g != null){ g.forEach(function(shape2, index2){ ret.push(shape2); }); } }); return ret; }; /*\ * Set.isPointInside [ method ] ** * Determine if given point is inside this set’s elements ** > Parameters ** - x (number) x coordinate of the point - y (number) y coordinate of the point = (boolean) `true` if point is inside any of the set's elements \*/ setproto.isPointInside = function (x, y) { var isPointInside = false; this.forEach(function (el) { if (el.isPointInside(x, y)) { isPointInside = true; return false; // stop loop } }); return isPointInside; }; /*\ * Raphael.registerFont [ method ] ** * Adds given font to the registered set of fonts for Raphaël. Should be used as an internal call from within Cufón’s font file. * Returns original parameter, so it could be used with chaining. # More about Cufón and how to convert your font form TTF, OTF, etc to JavaScript file. ** > Parameters ** - font (object) the font to register = (object) the font you passed in > Usage | Cufon.registerFont(Raphael.registerFont({…})); \*/ R.registerFont = function (font) { if (!font.face) { return font; } this.fonts = this.fonts || {}; var fontcopy = { w: font.w, face: {}, glyphs: {} }, family = font.face["font-family"]; for (var prop in font.face) if (font.face[has](prop)) { fontcopy.face[prop] = font.face[prop]; } if (this.fonts[family]) { this.fonts[family].push(fontcopy); } else { this.fonts[family] = [fontcopy]; } if (!font.svg) { fontcopy.face["units-per-em"] = toInt(font.face["units-per-em"], 10); for (var glyph in font.glyphs) if (font.glyphs[has](glyph)) { var path = font.glyphs[glyph]; fontcopy.glyphs[glyph] = { w: path.w, k: {}, d: path.d && "M" + path.d.replace(/[mlcxtrv]/g, function (command) { return {l: "L", c: "C", x: "z", t: "m", r: "l", v: "c"}[command] || "M"; }) + "z" }; if (path.k) { for (var k in path.k) if (path[has](k)) { fontcopy.glyphs[glyph].k[k] = path.k[k]; } } } } return font; }; /*\ * Paper.getFont [ method ] ** * Finds font object in the registered fonts by given parameters. You could specify only one word from the font name, like “Myriad” for “Myriad Pro”. ** > Parameters ** - family (string) font family name or any word from it - weight (string) #optional font weight - style (string) #optional font style - stretch (string) #optional font stretch = (object) the font object > Usage | paper.print(100, 100, "Test string", paper.getFont("Times", 800), 30); \*/ paperproto.getFont = function (family, weight, style, stretch) { stretch = stretch || "normal"; style = style || "normal"; weight = +weight || {normal: 400, bold: 700, lighter: 300, bolder: 800}[weight] || 400; if (!R.fonts) { return; } var font = R.fonts[family]; if (!font) { var name = new RegExp("(^|\\s)" + family.replace(/[^\w\d\s+!~.:_-]/g, E) + "(\\s|$)", "i"); for (var fontName in R.fonts) if (R.fonts[has](fontName)) { if (name.test(fontName)) { font = R.fonts[fontName]; break; } } } var thefont; if (font) { for (var i = 0, ii = font.length; i < ii; i++) { thefont = font[i]; if (thefont.face["font-weight"] == weight && (thefont.face["font-style"] == style || !thefont.face["font-style"]) && thefont.face["font-stretch"] == stretch) { break; } } } return thefont; }; /*\ * Paper.print [ method ] ** * Creates path that represent given text written using given font at given position with given size. * Result of the method is path element that contains whole text as a separate path. ** > Parameters ** - x (number) x position of the text - y (number) y position of the text - string (string) text to print - font (object) font object, see @Paper.getFont - size (number) #optional size of the font, default is `16` - origin (string) #optional could be `"baseline"` or `"middle"`, default is `"middle"` - letter_spacing (number) #optional number in range `-1..1`, default is `0` - line_spacing (number) #optional number in range `1..3`, default is `1` = (object) resulting path element, which consist of all letters > Usage | var txt = r.print(10, 50, "print", r.getFont("Museo"), 30).attr({fill: "#fff"}); \*/ paperproto.print = function (x, y, string, font, size, origin, letter_spacing, line_spacing) { origin = origin || "middle"; // baseline|middle letter_spacing = mmax(mmin(letter_spacing || 0, 1), -1); line_spacing = mmax(mmin(line_spacing || 1, 3), 1); var letters = Str(string)[split](E), shift = 0, notfirst = 0, path = E, scale; R.is(font, "string") && (font = this.getFont(font)); if (font) { scale = (size || 16) / font.face["units-per-em"]; var bb = font.face.bbox[split](separator), top = +bb[0], lineHeight = bb[3] - bb[1], shifty = 0, height = +bb[1] + (origin == "baseline" ? lineHeight + (+font.face.descent) : lineHeight / 2); for (var i = 0, ii = letters.length; i < ii; i++) { if (letters[i] == "\n") { shift = 0; curr = 0; notfirst = 0; shifty += lineHeight * line_spacing; } else { var prev = notfirst && font.glyphs[letters[i - 1]] || {}, curr = font.glyphs[letters[i]]; shift += notfirst ? (prev.w || font.w) + (prev.k && prev.k[letters[i]] || 0) + (font.w * letter_spacing) : 0; notfirst = 1; } if (curr && curr.d) { path += R.transformPath(curr.d, ["t", shift * scale, shifty * scale, "s", scale, scale, top, height, "t", (x - top) / scale, (y - height) / scale]); } } } return this.path(path).attr({ fill: "#000", stroke: "none" }); }; /*\ * Paper.add [ method ] ** * Imports elements in JSON array in format `{type: type, }` ** > Parameters ** - json (array) = (object) resulting set of imported elements > Usage | paper.add([ | { | type: "circle", | cx: 10, | cy: 10, | r: 5 | }, | { | type: "rect", | x: 10, | y: 10, | width: 10, | height: 10, | fill: "#fc0" | } | ]); \*/ paperproto.add = function (json) { if (R.is(json, "array")) { var res = this.set(), i = 0, ii = json.length, j; for (; i < ii; i++) { j = json[i] || {}; elements[has](j.type) && res.push(this[j.type]().attr(j)); } } return res; }; /*\ * Raphael.format [ method ] ** * Simple format function. Replaces construction of type “`{}`” to the corresponding argument. ** > Parameters ** - token (string) string to format - … (string) rest of arguments will be treated as parameters for replacement = (string) formated string > Usage | var x = 10, | y = 20, | width = 40, | height = 50; | // this will draw a rectangular shape equivalent to "M10,20h40v50h-40z" | paper.path(Raphael.format("M{0},{1}h{2}v{3}h{4}z", x, y, width, height, -width)); \*/ R.format = function (token, params) { var args = R.is(params, array) ? [0][concat](params) : arguments; token && R.is(token, string) && args.length - 1 && (token = token.replace(formatrg, function (str, i) { return args[++i] == null ? E : args[i]; })); return token || E; }; /*\ * Raphael.fullfill [ method ] ** * A little bit more advanced format function than @Raphael.format. Replaces construction of type “`{}`” to the corresponding argument. ** > Parameters ** - token (string) string to format - json (object) object which properties will be used as a replacement = (string) formated string > Usage | // this will draw a rectangular shape equivalent to "M10,20h40v50h-40z" | paper.path(Raphael.fullfill("M{x},{y}h{dim.width}v{dim.height}h{dim['negative width']}z", { | x: 10, | y: 20, | dim: { | width: 40, | height: 50, | "negative width": -40 | } | })); \*/ R.fullfill = (function () { var tokenRegex = /\{([^\}]+)\}/g, objNotationRegex = /(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g, // matches .xxxxx or ["xxxxx"] to run over object properties replacer = function (all, key, obj) { var res = obj; key.replace(objNotationRegex, function (all, name, quote, quotedName, isFunc) { name = name || quotedName; if (res) { if (name in res) { res = res[name]; } typeof res == "function" && isFunc && (res = res()); } }); res = (res == null || res == obj ? all : res) + ""; return res; }; return function (str, obj) { return String(str).replace(tokenRegex, function (all, key) { return replacer(all, key, obj); }); }; })(); /*\ * Raphael.ninja [ method ] ** * If you want to leave no trace of Raphaël (Well, Raphaël creates only one global variable `Raphael`, but anyway.) You can use `ninja` method. * Beware, that in this case plugins could stop working, because they are depending on global variable existence. ** = (object) Raphael object > Usage | (function (local_raphael) { | var paper = local_raphael(10, 10, 320, 200); | … | })(Raphael.ninja()); \*/ R.ninja = function () { if (oldRaphael.was) { g.win.Raphael = oldRaphael.is; } else { // IE8 raises an error when deleting window property window.Raphael = undefined; try { delete window.Raphael; } catch(e) {} } return R; }; /*\ * Raphael.st [ property (object) ] ** * You can add your own method to elements and sets. It is wise to add a set method for each element method * you added, so you will be able to call the same method on sets too. ** * See also @Raphael.el. > Usage | Raphael.el.red = function () { | this.attr({fill: "#f00"}); | }; | Raphael.st.red = function () { | this.forEach(function (el) { | el.red(); | }); | }; | // then use it | paper.set(paper.circle(100, 100, 20), paper.circle(110, 100, 20)).red(); \*/ R.st = setproto; eve.on("raphael.DOMload", function () { loaded = true; }); // Firefox <3.6 fix: http://webreflection.blogspot.com/2009/11/195-chars-to-help-lazy-loading.html (function (doc, loaded, f) { if (doc.readyState == null && doc.addEventListener){ doc.addEventListener(loaded, f = function () { doc.removeEventListener(loaded, f, false); doc.readyState = "complete"; }, false); doc.readyState = "loading"; } function isLoaded() { (/in/).test(doc.readyState) ? setTimeout(isLoaded, 9) : R.eve("raphael.DOMload"); } isLoaded(); })(document, "DOMContentLoaded"); return R; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // ┌────────────────────────────────────────────────────────────┐ \\ // │ Eve 0.5.0 - JavaScript Events Library │ \\ // ├────────────────────────────────────────────────────────────┤ \\ // │ Author Dmitry Baranovskiy (http://dmitry.baranovskiy.com/) │ \\ // └────────────────────────────────────────────────────────────┘ \\ (function (glob) { var version = "0.5.0", has = "hasOwnProperty", separator = /[\.\/]/, comaseparator = /\s*,\s*/, wildcard = "*", fun = function () {}, numsort = function (a, b) { return a - b; }, current_event, stop, events = {n: {}}, firstDefined = function () { for (var i = 0, ii = this.length; i < ii; i++) { if (typeof this[i] != "undefined") { return this[i]; } } }, lastDefined = function () { var i = this.length; while (--i) { if (typeof this[i] != "undefined") { return this[i]; } } }, objtos = Object.prototype.toString, Str = String, isArray = Array.isArray || function (ar) { return ar instanceof Array || objtos.call(ar) == "[object Array]"; }; /*\ * eve [ method ] * Fires event with given `name`, given scope and other parameters. > Arguments - name (string) name of the *event*, dot (`.`) or slash (`/`) separated - scope (object) context for the event handlers - varargs (...) the rest of arguments will be sent to event handlers = (object) array of returned values from the listeners. Array has two methods `.firstDefined()` and `.lastDefined()` to get first or last not `undefined` value. \*/ eve = function (name, scope) { var e = events, oldstop = stop, args = Array.prototype.slice.call(arguments, 2), listeners = eve.listeners(name), z = 0, f = false, l, indexed = [], queue = {}, out = [], ce = current_event, errors = []; out.firstDefined = firstDefined; out.lastDefined = lastDefined; current_event = name; stop = 0; for (var i = 0, ii = listeners.length; i < ii; i++) if ("zIndex" in listeners[i]) { indexed.push(listeners[i].zIndex); if (listeners[i].zIndex < 0) { queue[listeners[i].zIndex] = listeners[i]; } } indexed.sort(numsort); while (indexed[z] < 0) { l = queue[indexed[z++]]; out.push(l.apply(scope, args)); if (stop) { stop = oldstop; return out; } } for (i = 0; i < ii; i++) { l = listeners[i]; if ("zIndex" in l) { if (l.zIndex == indexed[z]) { out.push(l.apply(scope, args)); if (stop) { break; } do { z++; l = queue[indexed[z]]; l && out.push(l.apply(scope, args)); if (stop) { break; } } while (l) } else { queue[l.zIndex] = l; } } else { out.push(l.apply(scope, args)); if (stop) { break; } } } stop = oldstop; current_event = ce; return out; }; // Undocumented. Debug only. eve._events = events; /*\ * eve.listeners [ method ] * Internal method which gives you array of all event handlers that will be triggered by the given `name`. > Arguments - name (string) name of the event, dot (`.`) or slash (`/`) separated = (array) array of event handlers \*/ eve.listeners = function (name) { var names = isArray(name) ? name : name.split(separator), e = events, item, items, k, i, ii, j, jj, nes, es = [e], out = []; for (i = 0, ii = names.length; i < ii; i++) { nes = []; for (j = 0, jj = es.length; j < jj; j++) { e = es[j].n; items = [e[names[i]], e[wildcard]]; k = 2; while (k--) { item = items[k]; if (item) { nes.push(item); out = out.concat(item.f || []); } } } es = nes; } return out; }; /*\ * eve.separator [ method ] * If for some reasons you don’t like default separators (`.` or `/`) you can specify yours * here. Be aware that if you pass a string longer than one character it will be treated as * a list of characters. - separator (string) new separator. Empty string resets to default: `.` or `/`. \*/ eve.separator = function (sep) { if (sep) { sep = Str(sep).replace(/(?=[\.\^\]\[\-])/g, "\\"); sep = "[" + sep + "]"; separator = new RegExp(sep); } else { separator = /[\.\/]/; } }; /*\ * eve.on [ method ] ** * Binds given event handler with a given name. You can use wildcards “`*`” for the names: | eve.on("*.under.*", f); | eve("mouse.under.floor"); // triggers f * Use @eve to trigger the listener. ** - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards - f (function) event handler function ** - name (array) if you don’t want to use separators, you can use array of strings - f (function) event handler function ** = (function) returned function accepts a single numeric parameter that represents z-index of the handler. It is an optional feature and only used when you need to ensure that some subset of handlers will be invoked in a given order, despite of the order of assignment. > Example: | eve.on("mouse", eatIt)(2); | eve.on("mouse", scream); | eve.on("mouse", catchIt)(1); * This will ensure that `catchIt` function will be called before `eatIt`. * * If you want to put your handler before non-indexed handlers, specify a negative value. * Note: I assume most of the time you don’t need to worry about z-index, but it’s nice to have this feature “just in case”. \*/ eve.on = function (name, f) { if (typeof f != "function") { return function () {}; } var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator); for (var i = 0, ii = names.length; i < ii; i++) { (function (name) { var names = isArray(name) ? name : Str(name).split(separator), e = events, exist; for (var i = 0, ii = names.length; i < ii; i++) { e = e.n; e = e.hasOwnProperty(names[i]) && e[names[i]] || (e[names[i]] = {n: {}}); } e.f = e.f || []; for (i = 0, ii = e.f.length; i < ii; i++) if (e.f[i] == f) { exist = true; break; } !exist && e.f.push(f); }(names[i])); } return function (zIndex) { if (+zIndex == +zIndex) { f.zIndex = +zIndex; } }; }; /*\ * eve.f [ method ] ** * Returns function that will fire given event with optional arguments. * Arguments that will be passed to the result function will be also * concated to the list of final arguments. | el.onclick = eve.f("click", 1, 2); | eve.on("click", function (a, b, c) { | console.log(a, b, c); // 1, 2, [event object] | }); > Arguments - event (string) event name - varargs (…) and any other arguments = (function) possible event handler function \*/ eve.f = function (event) { var attrs = [].slice.call(arguments, 1); return function () { eve.apply(null, [event, null].concat(attrs).concat([].slice.call(arguments, 0))); }; }; /*\ * eve.stop [ method ] ** * Is used inside an event handler to stop the event, preventing any subsequent listeners from firing. \*/ eve.stop = function () { stop = 1; }; /*\ * eve.nt [ method ] ** * Could be used inside event handler to figure out actual name of the event. ** > Arguments ** - subname (string) #optional subname of the event ** = (string) name of the event, if `subname` is not specified * or = (boolean) `true`, if current event’s name contains `subname` \*/ eve.nt = function (subname) { var cur = isArray(current_event) ? current_event.join(".") : current_event; if (subname) { return new RegExp("(?:\\.|\\/|^)" + subname + "(?:\\.|\\/|$)").test(cur); } return cur; }; /*\ * eve.nts [ method ] ** * Could be used inside event handler to figure out actual name of the event. ** ** = (array) names of the event \*/ eve.nts = function () { return isArray(current_event) ? current_event : current_event.split(separator); }; /*\ * eve.off [ method ] ** * Removes given function from the list of event listeners assigned to given name. * If no arguments specified all the events will be cleared. ** > Arguments ** - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards - f (function) event handler function \*/ /*\ * eve.unbind [ method ] ** * See @eve.off \*/ eve.off = eve.unbind = function (name, f) { if (!name) { eve._events = events = {n: {}}; return; } var names = isArray(name) ? (isArray(name[0]) ? name : [name]) : Str(name).split(comaseparator); if (names.length > 1) { for (var i = 0, ii = names.length; i < ii; i++) { eve.off(names[i], f); } return; } names = isArray(name) ? name : Str(name).split(separator); var e, key, splice, i, ii, j, jj, cur = [events]; for (i = 0, ii = names.length; i < ii; i++) { for (j = 0; j < cur.length; j += splice.length - 2) { splice = [j, 1]; e = cur[j].n; if (names[i] != wildcard) { if (e[names[i]]) { splice.push(e[names[i]]); } } else { for (key in e) if (e[has](key)) { splice.push(e[key]); } } cur.splice.apply(cur, splice); } } for (i = 0, ii = cur.length; i < ii; i++) { e = cur[i]; while (e.n) { if (f) { if (e.f) { for (j = 0, jj = e.f.length; j < jj; j++) if (e.f[j] == f) { e.f.splice(j, 1); break; } !e.f.length && delete e.f; } for (key in e.n) if (e.n[has](key) && e.n[key].f) { var funcs = e.n[key].f; for (j = 0, jj = funcs.length; j < jj; j++) if (funcs[j] == f) { funcs.splice(j, 1); break; } !funcs.length && delete e.n[key].f; } } else { delete e.f; for (key in e.n) if (e.n[has](key) && e.n[key].f) { delete e.n[key].f; } } e = e.n; } } }; /*\ * eve.once [ method ] ** * Binds given event handler with a given name to only run once then unbind itself. | eve.once("login", f); | eve("login"); // triggers f | eve("login"); // no listeners * Use @eve to trigger the listener. ** > Arguments ** - name (string) name of the event, dot (`.`) or slash (`/`) separated, with optional wildcards - f (function) event handler function ** = (function) same return function as @eve.on \*/ eve.once = function (name, f) { var f2 = function () { eve.off(name, f2); return f.apply(this, arguments); }; return eve.on(name, f2); }; /*\ * eve.version [ property (string) ] ** * Current version of the library. \*/ eve.version = version; eve.toString = function () { return "You are running Eve " + version; }; (typeof module != "undefined" && module.exports) ? (module.exports = eve) : ( true ? (!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function() { return eve; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))) : (glob.eve = eve)); })(this); /***/ }, /* 3 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) { if (R && !R.svg) { return; } var has = "hasOwnProperty", Str = String, toFloat = parseFloat, toInt = parseInt, math = Math, mmax = math.max, abs = math.abs, pow = math.pow, separator = /[, ]+/, eve = R.eve, E = "", S = " "; var xlink = "http://www.w3.org/1999/xlink", markers = { block: "M5,0 0,2.5 5,5z", classic: "M5,0 0,2.5 5,5 3.5,3 3.5,2z", diamond: "M2.5,0 5,2.5 2.5,5 0,2.5z", open: "M6,1 1,3.5 6,6", oval: "M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z" }, markerCounter = {}; R.toString = function () { return "Your browser supports SVG.\nYou are running Rapha\xebl " + this.version; }; var $ = function (el, attr) { if (attr) { if (typeof el == "string") { el = $(el); } for (var key in attr) if (attr[has](key)) { if (key.substring(0, 6) == "xlink:") { el.setAttributeNS(xlink, key.substring(6), Str(attr[key])); } else { el.setAttribute(key, Str(attr[key])); } } } else { el = R._g.doc.createElementNS("http://www.w3.org/2000/svg", el); el.style && (el.style.webkitTapHighlightColor = "rgba(0,0,0,0)"); } return el; }, addGradientFill = function (element, gradient) { var type = "linear", id = element.id + gradient, fx = .5, fy = .5, o = element.node, SVG = element.paper, s = o.style, el = R._g.doc.getElementById(id); if (!el) { gradient = Str(gradient).replace(R._radial_gradient, function (all, _fx, _fy) { type = "radial"; if (_fx && _fy) { fx = toFloat(_fx); fy = toFloat(_fy); var dir = ((fy > .5) * 2 - 1); pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * dir + .5) && fy != .5 && (fy = fy.toFixed(5) - 1e-5 * dir); } return E; }); gradient = gradient.split(/\s*\-\s*/); if (type == "linear") { var angle = gradient.shift(); angle = -toFloat(angle); if (isNaN(angle)) { return null; } var vector = [0, 0, math.cos(R.rad(angle)), math.sin(R.rad(angle))], max = 1 / (mmax(abs(vector[2]), abs(vector[3])) || 1); vector[2] *= max; vector[3] *= max; if (vector[2] < 0) { vector[0] = -vector[2]; vector[2] = 0; } if (vector[3] < 0) { vector[1] = -vector[3]; vector[3] = 0; } } var dots = R._parseDots(gradient); if (!dots) { return null; } id = id.replace(/[\(\)\s,\xb0#]/g, "_"); if (element.gradient && id != element.gradient.id) { SVG.defs.removeChild(element.gradient); delete element.gradient; } if (!element.gradient) { el = $(type + "Gradient", {id: id}); element.gradient = el; $(el, type == "radial" ? { fx: fx, fy: fy } : { x1: vector[0], y1: vector[1], x2: vector[2], y2: vector[3], gradientTransform: element.matrix.invert() }); SVG.defs.appendChild(el); for (var i = 0, ii = dots.length; i < ii; i++) { el.appendChild($("stop", { offset: dots[i].offset ? dots[i].offset : i ? "100%" : "0%", "stop-color": dots[i].color || "#fff", "stop-opacity": isFinite(dots[i].opacity) ? dots[i].opacity : 1 })); } } } $(o, { fill: fillurl(id), opacity: 1, "fill-opacity": 1 }); s.fill = E; s.opacity = 1; s.fillOpacity = 1; return 1; }, isIE9or10 = function () { var mode = document.documentMode; return mode && (mode === 9 || mode === 10); }, fillurl = function (id) { if (isIE9or10()) { return "url('#" + id + "')"; } var location = document.location; var locationString = ( location.protocol + '//' + location.host + location.pathname + location.search ); return "url('" + locationString + "#" + id + "')"; }, updatePosition = function (o) { var bbox = o.getBBox(1); $(o.pattern, {patternTransform: o.matrix.invert() + " translate(" + bbox.x + "," + bbox.y + ")"}); }, addArrow = function (o, value, isEnd) { if (o.type == "path") { var values = Str(value).toLowerCase().split("-"), p = o.paper, se = isEnd ? "end" : "start", node = o.node, attrs = o.attrs, stroke = attrs["stroke-width"], i = values.length, type = "classic", from, to, dx, refX, attr, w = 3, h = 3, t = 5; while (i--) { switch (values[i]) { case "block": case "classic": case "oval": case "diamond": case "open": case "none": type = values[i]; break; case "wide": h = 5; break; case "narrow": h = 2; break; case "long": w = 5; break; case "short": w = 2; break; } } if (type == "open") { w += 2; h += 2; t += 2; dx = 1; refX = isEnd ? 4 : 1; attr = { fill: "none", stroke: attrs.stroke }; } else { refX = dx = w / 2; attr = { fill: attrs.stroke, stroke: "none" }; } if (o._.arrows) { if (isEnd) { o._.arrows.endPath && markerCounter[o._.arrows.endPath]--; o._.arrows.endMarker && markerCounter[o._.arrows.endMarker]--; } else { o._.arrows.startPath && markerCounter[o._.arrows.startPath]--; o._.arrows.startMarker && markerCounter[o._.arrows.startMarker]--; } } else { o._.arrows = {}; } if (type != "none") { var pathId = "raphael-marker-" + type, markerId = "raphael-marker-" + se + type + w + h + "-obj" + o.id; if (!R._g.doc.getElementById(pathId)) { p.defs.appendChild($($("path"), { "stroke-linecap": "round", d: markers[type], id: pathId })); markerCounter[pathId] = 1; } else { markerCounter[pathId]++; } var marker = R._g.doc.getElementById(markerId), use; if (!marker) { marker = $($("marker"), { id: markerId, markerHeight: h, markerWidth: w, orient: "auto", refX: refX, refY: h / 2 }); use = $($("use"), { "xlink:href": "#" + pathId, transform: (isEnd ? "rotate(180 " + w / 2 + " " + h / 2 + ") " : E) + "scale(" + w / t + "," + h / t + ")", "stroke-width": (1 / ((w / t + h / t) / 2)).toFixed(4) }); marker.appendChild(use); p.defs.appendChild(marker); markerCounter[markerId] = 1; } else { markerCounter[markerId]++; use = marker.getElementsByTagName("use")[0]; } $(use, attr); var delta = dx * (type != "diamond" && type != "oval"); if (isEnd) { from = o._.arrows.startdx * stroke || 0; to = R.getTotalLength(attrs.path) - delta * stroke; } else { from = delta * stroke; to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0); } attr = {}; attr["marker-" + se] = "url(#" + markerId + ")"; if (to || from) { attr.d = R.getSubpath(attrs.path, from, to); } $(node, attr); o._.arrows[se + "Path"] = pathId; o._.arrows[se + "Marker"] = markerId; o._.arrows[se + "dx"] = delta; o._.arrows[se + "Type"] = type; o._.arrows[se + "String"] = value; } else { if (isEnd) { from = o._.arrows.startdx * stroke || 0; to = R.getTotalLength(attrs.path) - from; } else { from = 0; to = R.getTotalLength(attrs.path) - (o._.arrows.enddx * stroke || 0); } o._.arrows[se + "Path"] && $(node, {d: R.getSubpath(attrs.path, from, to)}); delete o._.arrows[se + "Path"]; delete o._.arrows[se + "Marker"]; delete o._.arrows[se + "dx"]; delete o._.arrows[se + "Type"]; delete o._.arrows[se + "String"]; } for (attr in markerCounter) if (markerCounter[has](attr) && !markerCounter[attr]) { var item = R._g.doc.getElementById(attr); item && item.parentNode.removeChild(item); } } }, dasharray = { "-": [3, 1], ".": [1, 1], "-.": [3, 1, 1, 1], "-..": [3, 1, 1, 1, 1, 1], ". ": [1, 3], "- ": [4, 3], "--": [8, 3], "- .": [4, 3, 1, 3], "--.": [8, 3, 1, 3], "--..": [8, 3, 1, 3, 1, 3] }, addDashes = function (o, value, params) { value = dasharray[Str(value).toLowerCase()]; if (value) { var width = o.attrs["stroke-width"] || "1", butt = {round: width, square: width, butt: 0}[o.attrs["stroke-linecap"] || params["stroke-linecap"]] || 0, dashes = [], i = value.length; while (i--) { dashes[i] = value[i] * width + ((i % 2) ? 1 : -1) * butt; } $(o.node, {"stroke-dasharray": dashes.join(",")}); } else { $(o.node, {"stroke-dasharray": "none"}); } }, setFillAndStroke = function (o, params) { var node = o.node, attrs = o.attrs, vis = node.style.visibility; node.style.visibility = "hidden"; for (var att in params) { if (params[has](att)) { if (!R._availableAttrs[has](att)) { continue; } var value = params[att]; attrs[att] = value; switch (att) { case "blur": o.blur(value); break; case "title": var title = node.getElementsByTagName("title"); // Use the existing . if (title.length && (title = title[0])) { title.firstChild.nodeValue = value; } else { title = $("title"); var val = R._g.doc.createTextNode(value); title.appendChild(val); node.appendChild(title); } break; case "href": case "target": var pn = node.parentNode; if (pn.tagName.toLowerCase() != "a") { var hl = $("a"); pn.insertBefore(hl, node); hl.appendChild(node); pn = hl; } if (att == "target") { pn.setAttributeNS(xlink, "show", value == "blank" ? "new" : value); } else { pn.setAttributeNS(xlink, att, value); } break; case "cursor": node.style.cursor = value; break; case "transform": o.transform(value); break; case "arrow-start": addArrow(o, value); break; case "arrow-end": addArrow(o, value, 1); break; case "clip-rect": var rect = Str(value).split(separator); if (rect.length == 4) { o.clip && o.clip.parentNode.parentNode.removeChild(o.clip.parentNode); var el = $("clipPath"), rc = $("rect"); el.id = R.createUUID(); $(rc, { x: rect[0], y: rect[1], width: rect[2], height: rect[3] }); el.appendChild(rc); o.paper.defs.appendChild(el); $(node, {"clip-path": "url(#" + el.id + ")"}); o.clip = rc; } if (!value) { var path = node.getAttribute("clip-path"); if (path) { var clip = R._g.doc.getElementById(path.replace(/(^url\(#|\)$)/g, E)); clip && clip.parentNode.removeChild(clip); $(node, {"clip-path": E}); delete o.clip; } } break; case "path": if (o.type == "path") { $(node, {d: value ? attrs.path = R._pathToAbsolute(value) : "M0,0"}); o._.dirty = 1; if (o._.arrows) { "startString" in o._.arrows && addArrow(o, o._.arrows.startString); "endString" in o._.arrows && addArrow(o, o._.arrows.endString, 1); } } break; case "width": node.setAttribute(att, value); o._.dirty = 1; if (attrs.fx) { att = "x"; value = attrs.x; } else { break; } case "x": if (attrs.fx) { value = -attrs.x - (attrs.width || 0); } case "rx": if (att == "rx" && o.type == "rect") { break; } case "cx": node.setAttribute(att, value); o.pattern && updatePosition(o); o._.dirty = 1; break; case "height": node.setAttribute(att, value); o._.dirty = 1; if (attrs.fy) { att = "y"; value = attrs.y; } else { break; } case "y": if (attrs.fy) { value = -attrs.y - (attrs.height || 0); } case "ry": if (att == "ry" && o.type == "rect") { break; } case "cy": node.setAttribute(att, value); o.pattern && updatePosition(o); o._.dirty = 1; break; case "r": if (o.type == "rect") { $(node, {rx: value, ry: value}); } else { node.setAttribute(att, value); } o._.dirty = 1; break; case "src": if (o.type == "image") { node.setAttributeNS(xlink, "href", value); } break; case "stroke-width": if (o._.sx != 1 || o._.sy != 1) { value /= mmax(abs(o._.sx), abs(o._.sy)) || 1; } node.setAttribute(att, value); if (attrs["stroke-dasharray"]) { addDashes(o, attrs["stroke-dasharray"], params); } if (o._.arrows) { "startString" in o._.arrows && addArrow(o, o._.arrows.startString); "endString" in o._.arrows && addArrow(o, o._.arrows.endString, 1); } break; case "stroke-dasharray": addDashes(o, value, params); break; case "fill": var isURL = Str(value).match(R._ISURL); if (isURL) { el = $("pattern"); var ig = $("image"); el.id = R.createUUID(); $(el, {x: 0, y: 0, patternUnits: "userSpaceOnUse", height: 1, width: 1}); $(ig, {x: 0, y: 0, "xlink:href": isURL[1]}); el.appendChild(ig); (function (el) { R._preload(isURL[1], function () { var w = this.offsetWidth, h = this.offsetHeight; $(el, {width: w, height: h}); $(ig, {width: w, height: h}); }); })(el); o.paper.defs.appendChild(el); $(node, {fill: "url(#" + el.id + ")"}); o.pattern = el; o.pattern && updatePosition(o); break; } var clr = R.getRGB(value); if (!clr.error) { delete params.gradient; delete attrs.gradient; !R.is(attrs.opacity, "undefined") && R.is(params.opacity, "undefined") && $(node, {opacity: attrs.opacity}); !R.is(attrs["fill-opacity"], "undefined") && R.is(params["fill-opacity"], "undefined") && $(node, {"fill-opacity": attrs["fill-opacity"]}); } else if ((o.type == "circle" || o.type == "ellipse" || Str(value).charAt() != "r") && addGradientFill(o, value)) { if ("opacity" in attrs || "fill-opacity" in attrs) { var gradient = R._g.doc.getElementById(node.getAttribute("fill").replace(/^url\(#|\)$/g, E)); if (gradient) { var stops = gradient.getElementsByTagName("stop"); $(stops[stops.length - 1], {"stop-opacity": ("opacity" in attrs ? attrs.opacity : 1) * ("fill-opacity" in attrs ? attrs["fill-opacity"] : 1)}); } } attrs.gradient = value; attrs.fill = "none"; break; } clr[has]("opacity") && $(node, {"fill-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity}); case "stroke": clr = R.getRGB(value); node.setAttribute(att, clr.hex); att == "stroke" && clr[has]("opacity") && $(node, {"stroke-opacity": clr.opacity > 1 ? clr.opacity / 100 : clr.opacity}); if (att == "stroke" && o._.arrows) { "startString" in o._.arrows && addArrow(o, o._.arrows.startString); "endString" in o._.arrows && addArrow(o, o._.arrows.endString, 1); } break; case "gradient": (o.type == "circle" || o.type == "ellipse" || Str(value).charAt() != "r") && addGradientFill(o, value); break; case "opacity": if (attrs.gradient && !attrs[has]("stroke-opacity")) { $(node, {"stroke-opacity": value > 1 ? value / 100 : value}); } // fall case "fill-opacity": if (attrs.gradient) { gradient = R._g.doc.getElementById(node.getAttribute("fill").replace(/^url\(#|\)$/g, E)); if (gradient) { stops = gradient.getElementsByTagName("stop"); $(stops[stops.length - 1], {"stop-opacity": value}); } break; } default: att == "font-size" && (value = toInt(value, 10) + "px"); var cssrule = att.replace(/(\-.)/g, function (w) { return w.substring(1).toUpperCase(); }); node.style[cssrule] = value; o._.dirty = 1; node.setAttribute(att, value); break; } } } tuneText(o, params); node.style.visibility = vis; }, leading = 1.2, tuneText = function (el, params) { if (el.type != "text" || !(params[has]("text") || params[has]("font") || params[has]("font-size") || params[has]("x") || params[has]("y"))) { return; } var a = el.attrs, node = el.node, fontSize = node.firstChild ? toInt(R._g.doc.defaultView.getComputedStyle(node.firstChild, E).getPropertyValue("font-size"), 10) : 10; if (params[has]("text")) { a.text = params.text; while (node.firstChild) { node.removeChild(node.firstChild); } var texts = Str(params.text).split("\n"), tspans = [], tspan; for (var i = 0, ii = texts.length; i < ii; i++) { tspan = $("tspan"); i && $(tspan, {dy: fontSize * leading, x: a.x}); tspan.appendChild(R._g.doc.createTextNode(texts[i])); node.appendChild(tspan); tspans[i] = tspan; } } else { tspans = node.getElementsByTagName("tspan"); for (i = 0, ii = tspans.length; i < ii; i++) if (i) { $(tspans[i], {dy: fontSize * leading, x: a.x}); } else { $(tspans[0], {dy: 0}); } } $(node, {x: a.x, y: a.y}); el._.dirty = 1; var bb = el._getBBox(), dif = a.y - (bb.y + bb.height / 2); dif && R.is(dif, "finite") && $(tspans[0], {dy: dif}); }, getRealNode = function (node) { if (node.parentNode && node.parentNode.tagName.toLowerCase() === "a") { return node.parentNode; } else { return node; } }, Element = function (node, svg) { var X = 0, Y = 0; /*\ * Element.node [ property (object) ] ** * Gives you a reference to the DOM object, so you can assign event handlers or just mess around. ** * Note: Don’t mess with it. > Usage | // draw a circle at coordinate 10,10 with radius of 10 | var c = paper.circle(10, 10, 10); | c.node.onclick = function () { | c.attr("fill", "red"); | }; \*/ this[0] = this.node = node; /*\ * Element.raphael [ property (object) ] ** * Internal reference to @Raphael object. In case it is not available. > Usage | Raphael.el.red = function () { | var hsb = this.paper.raphael.rgb2hsb(this.attr("fill")); | hsb.h = 1; | this.attr({fill: this.paper.raphael.hsb2rgb(hsb).hex}); | } \*/ node.raphael = true; /*\ * Element.id [ property (number) ] ** * Unique id of the element. Especially useful when you want to listen to events of the element, * because all events are fired in format `<module>.<action>.<id>`. Also useful for @Paper.getById method. \*/ this.id = guid(); node.raphaelid = this.id; /** * Method that returns a 5 letter/digit id, enough for 36^5 = 60466176 elements * @returns {string} id */ function guid() { return ("0000" + (Math.random()*Math.pow(36,5) << 0).toString(36)).slice(-5); } this.matrix = R.matrix(); this.realPath = null; /*\ * Element.paper [ property (object) ] ** * Internal reference to “paper” where object drawn. Mainly for use in plugins and element extensions. > Usage | Raphael.el.cross = function () { | this.attr({fill: "red"}); | this.paper.path("M10,10L50,50M50,10L10,50") | .attr({stroke: "red"}); | } \*/ this.paper = svg; this.attrs = this.attrs || {}; this._ = { transform: [], sx: 1, sy: 1, deg: 0, dx: 0, dy: 0, dirty: 1 }; !svg.bottom && (svg.bottom = this); /*\ * Element.prev [ property (object) ] ** * Reference to the previous element in the hierarchy. \*/ this.prev = svg.top; svg.top && (svg.top.next = this); svg.top = this; /*\ * Element.next [ property (object) ] ** * Reference to the next element in the hierarchy. \*/ this.next = null; }, elproto = R.el; Element.prototype = elproto; elproto.constructor = Element; R._engine.path = function (pathString, SVG) { var el = $("path"); SVG.canvas && SVG.canvas.appendChild(el); var p = new Element(el, SVG); p.type = "path"; setFillAndStroke(p, { fill: "none", stroke: "#000", path: pathString }); return p; }; /*\ * Element.rotate [ method ] ** * Deprecated! Use @Element.transform instead. * Adds rotation by given angle around given point to the list of * transformations of the element. > Parameters - deg (number) angle in degrees - cx (number) #optional x coordinate of the centre of rotation - cy (number) #optional y coordinate of the centre of rotation * If cx & cy aren’t specified centre of the shape is used as a point of rotation. = (object) @Element \*/ elproto.rotate = function (deg, cx, cy) { if (this.removed) { return this; } deg = Str(deg).split(separator); if (deg.length - 1) { cx = toFloat(deg[1]); cy = toFloat(deg[2]); } deg = toFloat(deg[0]); (cy == null) && (cx = cy); if (cx == null || cy == null) { var bbox = this.getBBox(1); cx = bbox.x + bbox.width / 2; cy = bbox.y + bbox.height / 2; } this.transform(this._.transform.concat([["r", deg, cx, cy]])); return this; }; /*\ * Element.scale [ method ] ** * Deprecated! Use @Element.transform instead. * Adds scale by given amount relative to given point to the list of * transformations of the element. > Parameters - sx (number) horisontal scale amount - sy (number) vertical scale amount - cx (number) #optional x coordinate of the centre of scale - cy (number) #optional y coordinate of the centre of scale * If cx & cy aren’t specified centre of the shape is used instead. = (object) @Element \*/ elproto.scale = function (sx, sy, cx, cy) { if (this.removed) { return this; } sx = Str(sx).split(separator); if (sx.length - 1) { sy = toFloat(sx[1]); cx = toFloat(sx[2]); cy = toFloat(sx[3]); } sx = toFloat(sx[0]); (sy == null) && (sy = sx); (cy == null) && (cx = cy); if (cx == null || cy == null) { var bbox = this.getBBox(1); } cx = cx == null ? bbox.x + bbox.width / 2 : cx; cy = cy == null ? bbox.y + bbox.height / 2 : cy; this.transform(this._.transform.concat([["s", sx, sy, cx, cy]])); return this; }; /*\ * Element.translate [ method ] ** * Deprecated! Use @Element.transform instead. * Adds translation by given amount to the list of transformations of the element. > Parameters - dx (number) horisontal shift - dy (number) vertical shift = (object) @Element \*/ elproto.translate = function (dx, dy) { if (this.removed) { return this; } dx = Str(dx).split(separator); if (dx.length - 1) { dy = toFloat(dx[1]); } dx = toFloat(dx[0]) || 0; dy = +dy || 0; this.transform(this._.transform.concat([["t", dx, dy]])); return this; }; /*\ * Element.transform [ method ] ** * Adds transformation to the element which is separate to other attributes, * i.e. translation doesn’t change `x` or `y` of the rectange. The format * of transformation string is similar to the path string syntax: | "t100,100r30,100,100s2,2,100,100r45s1.5" * Each letter is a command. There are four commands: `t` is for translate, `r` is for rotate, `s` is for * scale and `m` is for matrix. * * There are also alternative “absolute” translation, rotation and scale: `T`, `R` and `S`. They will not take previous transformation into account. For example, `...T100,0` will always move element 100 px horisontally, while `...t100,0` could move it vertically if there is `r90` before. Just compare results of `r90t100,0` and `r90T100,0`. * * So, the example line above could be read like “translate by 100, 100; rotate 30° around 100, 100; scale twice around 100, 100; * rotate 45° around centre; scale 1.5 times relative to centre”. As you can see rotate and scale commands have origin * coordinates as optional parameters, the default is the centre point of the element. * Matrix accepts six parameters. > Usage | var el = paper.rect(10, 20, 300, 200); | // translate 100, 100, rotate 45°, translate -100, 0 | el.transform("t100,100r45t-100,0"); | // if you want you can append or prepend transformations | el.transform("...t50,50"); | el.transform("s2..."); | // or even wrap | el.transform("t50,50...t-50-50"); | // to reset transformation call method with empty string | el.transform(""); | // to get current value call it without parameters | console.log(el.transform()); > Parameters - tstr (string) #optional transformation string * If tstr isn’t specified = (string) current transformation string * else = (object) @Element \*/ elproto.transform = function (tstr) { var _ = this._; if (tstr == null) { return _.transform; } R._extractTransform(this, tstr); this.clip && $(this.clip, {transform: this.matrix.invert()}); this.pattern && updatePosition(this); this.node && $(this.node, {transform: this.matrix}); if (_.sx != 1 || _.sy != 1) { var sw = this.attrs[has]("stroke-width") ? this.attrs["stroke-width"] : 1; this.attr({"stroke-width": sw}); } return this; }; /*\ * Element.hide [ method ] ** * Makes element invisible. See @Element.show. = (object) @Element \*/ elproto.hide = function () { if(!this.removed) this.node.style.display = "none"; return this; }; /*\ * Element.show [ method ] ** * Makes element visible. See @Element.hide. = (object) @Element \*/ elproto.show = function () { if(!this.removed) this.node.style.display = ""; return this; }; /*\ * Element.remove [ method ] ** * Removes element from the paper. \*/ elproto.remove = function () { var node = getRealNode(this.node); if (this.removed || !node.parentNode) { return; } var paper = this.paper; paper.__set__ && paper.__set__.exclude(this); eve.unbind("raphael.*.*." + this.id); if (this.gradient) { paper.defs.removeChild(this.gradient); } R._tear(this, paper); node.parentNode.removeChild(node); // Remove custom data for element this.removeData(); for (var i in this) { this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } this.removed = true; }; elproto._getBBox = function () { if (this.node.style.display == "none") { this.show(); var hide = true; } var canvasHidden = false, containerStyle; if (this.paper.canvas.parentElement) { containerStyle = this.paper.canvas.parentElement.style; } //IE10+ can't find parentElement else if (this.paper.canvas.parentNode) { containerStyle = this.paper.canvas.parentNode.style; } if(containerStyle && containerStyle.display == "none") { canvasHidden = true; containerStyle.display = ""; } var bbox = {}; try { bbox = this.node.getBBox(); } catch(e) { // Firefox 3.0.x, 25.0.1 (probably more versions affected) play badly here - possible fix bbox = { x: this.node.clientLeft, y: this.node.clientTop, width: this.node.clientWidth, height: this.node.clientHeight } } finally { bbox = bbox || {}; if(canvasHidden){ containerStyle.display = "none"; } } hide && this.hide(); return bbox; }; /*\ * Element.attr [ method ] ** * Sets the attributes of the element. > Parameters - attrName (string) attribute’s name - value (string) value * or - params (object) object of name/value pairs * or - attrName (string) attribute’s name * or - attrNames (array) in this case method returns array of current values for given attribute names = (object) @Element if attrsName & value or params are passed in. = (...) value of the attribute if only attrsName is passed in. = (array) array of values of the attribute if attrsNames is passed in. = (object) object of attributes if nothing is passed in. > Possible parameters # <p>Please refer to the <a href="http://www.w3.org/TR/SVG/" title="The W3C Recommendation for the SVG language describes these properties in detail.">SVG specification</a> for an explanation of these parameters.</p> o arrow-end (string) arrowhead on the end of the path. The format for string is `<type>[-<width>[-<length>]]`. Possible types: `classic`, `block`, `open`, `oval`, `diamond`, `none`, width: `wide`, `narrow`, `medium`, length: `long`, `short`, `midium`. o clip-rect (string) comma or space separated values: x, y, width and height o cursor (string) CSS type of the cursor o cx (number) the x-axis coordinate of the center of the circle, or ellipse o cy (number) the y-axis coordinate of the center of the circle, or ellipse o fill (string) colour, gradient or image o fill-opacity (number) o font (string) o font-family (string) o font-size (number) font size in pixels o font-weight (string) o height (number) o href (string) URL, if specified element behaves as hyperlink o opacity (number) o path (string) SVG path string format o r (number) radius of the circle, ellipse or rounded corner on the rect o rx (number) horisontal radius of the ellipse o ry (number) vertical radius of the ellipse o src (string) image URL, only works for @Element.image element o stroke (string) stroke colour o stroke-dasharray (string) [“”, “none”, “`-`”, “`.`”, “`-.`”, “`-..`”, “`. `”, “`- `”, “`--`”, “`- .`”, “`--.`”, “`--..`”] o stroke-linecap (string) [“`butt`”, “`square`”, “`round`”] o stroke-linejoin (string) [“`bevel`”, “`round`”, “`miter`”] o stroke-miterlimit (number) o stroke-opacity (number) o stroke-width (number) stroke width in pixels, default is '1' o target (string) used with href o text (string) contents of the text element. Use `\n` for multiline text o text-anchor (string) [“`start`”, “`middle`”, “`end`”], default is “`middle`” o title (string) will create tooltip with a given text o transform (string) see @Element.transform o width (number) o x (number) o y (number) > Gradients * Linear gradient format: “`‹angle›-‹colour›[-‹colour›[:‹offset›]]*-‹colour›`”, example: “`90-#fff-#000`” – 90° * gradient from white to black or “`0-#fff-#f00:20-#000`” – 0° gradient from white via red (at 20%) to black. * * radial gradient: “`r[(‹fx›, ‹fy›)]‹colour›[-‹colour›[:‹offset›]]*-‹colour›`”, example: “`r#fff-#000`” – * gradient from white to black or “`r(0.25, 0.75)#fff-#000`” – gradient from white to black with focus point * at 0.25, 0.75. Focus point coordinates are in 0..1 range. Radial gradients can only be applied to circles and ellipses. > Path String # <p>Please refer to <a href="http://www.w3.org/TR/SVG/paths.html#PathData" title="Details of a path’s data attribute’s format are described in the SVG specification.">SVG documentation regarding path string</a>. Raphaël fully supports it.</p> > Colour Parsing # <ul> # <li>Colour name (“<code>red</code>”, “<code>green</code>”, “<code>cornflowerblue</code>”, etc)</li> # <li>#••• — shortened HTML colour: (“<code>#000</code>”, “<code>#fc0</code>”, etc)</li> # <li>#•••••• — full length HTML colour: (“<code>#000000</code>”, “<code>#bd2300</code>”)</li> # <li>rgb(•••, •••, •••) — red, green and blue channels’ values: (“<code>rgb(200, 100, 0)</code>”)</li> # <li>rgb(•••%, •••%, •••%) — same as above, but in %: (“<code>rgb(100%, 175%, 0%)</code>”)</li> # <li>rgba(•••, •••, •••, •••) — red, green and blue channels’ values: (“<code>rgba(200, 100, 0, .5)</code>”)</li> # <li>rgba(•••%, •••%, •••%, •••%) — same as above, but in %: (“<code>rgba(100%, 175%, 0%, 50%)</code>”)</li> # <li>hsb(•••, •••, •••) — hue, saturation and brightness values: (“<code>hsb(0.5, 0.25, 1)</code>”)</li> # <li>hsb(•••%, •••%, •••%) — same as above, but in %</li> # <li>hsba(•••, •••, •••, •••) — same as above, but with opacity</li> # <li>hsl(•••, •••, •••) — almost the same as hsb, see <a href="http://en.wikipedia.org/wiki/HSL_and_HSV" title="HSL and HSV - Wikipedia, the free encyclopedia">Wikipedia page</a></li> # <li>hsl(•••%, •••%, •••%) — same as above, but in %</li> # <li>hsla(•••, •••, •••, •••) — same as above, but with opacity</li> # <li>Optionally for hsb and hsl you could specify hue as a degree: “<code>hsl(240deg, 1, .5)</code>” or, if you want to go fancy, “<code>hsl(240°, 1, .5)</code>”</li> # </ul> \*/ elproto.attr = function (name, value) { if (this.removed) { return this; } if (name == null) { var res = {}; for (var a in this.attrs) if (this.attrs[has](a)) { res[a] = this.attrs[a]; } res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient; res.transform = this._.transform; return res; } if (value == null && R.is(name, "string")) { if (name == "fill" && this.attrs.fill == "none" && this.attrs.gradient) { return this.attrs.gradient; } if (name == "transform") { return this._.transform; } var names = name.split(separator), out = {}; for (var i = 0, ii = names.length; i < ii; i++) { name = names[i]; if (name in this.attrs) { out[name] = this.attrs[name]; } else if (R.is(this.paper.customAttributes[name], "function")) { out[name] = this.paper.customAttributes[name].def; } else { out[name] = R._availableAttrs[name]; } } return ii - 1 ? out : out[names[0]]; } if (value == null && R.is(name, "array")) { out = {}; for (i = 0, ii = name.length; i < ii; i++) { out[name[i]] = this.attr(name[i]); } return out; } if (value != null) { var params = {}; params[name] = value; } else if (name != null && R.is(name, "object")) { params = name; } for (var key in params) { eve("raphael.attr." + key + "." + this.id, this, params[key]); } for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) { var par = this.paper.customAttributes[key].apply(this, [].concat(params[key])); this.attrs[key] = params[key]; for (var subkey in par) if (par[has](subkey)) { params[subkey] = par[subkey]; } } setFillAndStroke(this, params); return this; }; /*\ * Element.toFront [ method ] ** * Moves the element so it is the closest to the viewer’s eyes, on top of other elements. = (object) @Element \*/ elproto.toFront = function () { if (this.removed) { return this; } var node = getRealNode(this.node); node.parentNode.appendChild(node); var svg = this.paper; svg.top != this && R._tofront(this, svg); return this; }; /*\ * Element.toBack [ method ] ** * Moves the element so it is the furthest from the viewer’s eyes, behind other elements. = (object) @Element \*/ elproto.toBack = function () { if (this.removed) { return this; } var node = getRealNode(this.node); var parentNode = node.parentNode; parentNode.insertBefore(node, parentNode.firstChild); R._toback(this, this.paper); var svg = this.paper; return this; }; /*\ * Element.insertAfter [ method ] ** * Inserts current object after the given one. = (object) @Element \*/ elproto.insertAfter = function (element) { if (this.removed || !element) { return this; } var node = getRealNode(this.node); var afterNode = getRealNode(element.node || element[element.length - 1].node); if (afterNode.nextSibling) { afterNode.parentNode.insertBefore(node, afterNode.nextSibling); } else { afterNode.parentNode.appendChild(node); } R._insertafter(this, element, this.paper); return this; }; /*\ * Element.insertBefore [ method ] ** * Inserts current object before the given one. = (object) @Element \*/ elproto.insertBefore = function (element) { if (this.removed || !element) { return this; } var node = getRealNode(this.node); var beforeNode = getRealNode(element.node || element[0].node); beforeNode.parentNode.insertBefore(node, beforeNode); R._insertbefore(this, element, this.paper); return this; }; elproto.blur = function (size) { // Experimental. No Safari support. Use it on your own risk. var t = this; if (+size !== 0) { var fltr = $("filter"), blur = $("feGaussianBlur"); t.attrs.blur = size; fltr.id = R.createUUID(); $(blur, {stdDeviation: +size || 1.5}); fltr.appendChild(blur); t.paper.defs.appendChild(fltr); t._blur = fltr; $(t.node, {filter: "url(#" + fltr.id + ")"}); } else { if (t._blur) { t._blur.parentNode.removeChild(t._blur); delete t._blur; delete t.attrs.blur; } t.node.removeAttribute("filter"); } return t; }; R._engine.circle = function (svg, x, y, r) { var el = $("circle"); svg.canvas && svg.canvas.appendChild(el); var res = new Element(el, svg); res.attrs = {cx: x, cy: y, r: r, fill: "none", stroke: "#000"}; res.type = "circle"; $(el, res.attrs); return res; }; R._engine.rect = function (svg, x, y, w, h, r) { var el = $("rect"); svg.canvas && svg.canvas.appendChild(el); var res = new Element(el, svg); res.attrs = {x: x, y: y, width: w, height: h, rx: r || 0, ry: r || 0, fill: "none", stroke: "#000"}; res.type = "rect"; $(el, res.attrs); return res; }; R._engine.ellipse = function (svg, x, y, rx, ry) { var el = $("ellipse"); svg.canvas && svg.canvas.appendChild(el); var res = new Element(el, svg); res.attrs = {cx: x, cy: y, rx: rx, ry: ry, fill: "none", stroke: "#000"}; res.type = "ellipse"; $(el, res.attrs); return res; }; R._engine.image = function (svg, src, x, y, w, h) { var el = $("image"); $(el, {x: x, y: y, width: w, height: h, preserveAspectRatio: "none"}); el.setAttributeNS(xlink, "href", src); svg.canvas && svg.canvas.appendChild(el); var res = new Element(el, svg); res.attrs = {x: x, y: y, width: w, height: h, src: src}; res.type = "image"; return res; }; R._engine.text = function (svg, x, y, text) { var el = $("text"); svg.canvas && svg.canvas.appendChild(el); var res = new Element(el, svg); res.attrs = { x: x, y: y, "text-anchor": "middle", text: text, "font-family": R._availableAttrs["font-family"], "font-size": R._availableAttrs["font-size"], stroke: "none", fill: "#000" }; res.type = "text"; setFillAndStroke(res, res.attrs); return res; }; R._engine.setSize = function (width, height) { this.width = width || this.width; this.height = height || this.height; this.canvas.setAttribute("width", this.width); this.canvas.setAttribute("height", this.height); if (this._viewBox) { this.setViewBox.apply(this, this._viewBox); } return this; }; R._engine.create = function () { var con = R._getContainer.apply(0, arguments), container = con && con.container, x = con.x, y = con.y, width = con.width, height = con.height; if (!container) { throw new Error("SVG container not found."); } var cnvs = $("svg"), css = "overflow:hidden;", isFloating; x = x || 0; y = y || 0; width = width || 512; height = height || 342; $(cnvs, { height: height, version: 1.1, width: width, xmlns: "http://www.w3.org/2000/svg", "xmlns:xlink": "http://www.w3.org/1999/xlink" }); if (container == 1) { cnvs.style.cssText = css + "position:absolute;left:" + x + "px;top:" + y + "px"; R._g.doc.body.appendChild(cnvs); isFloating = 1; } else { cnvs.style.cssText = css + "position:relative"; if (container.firstChild) { container.insertBefore(cnvs, container.firstChild); } else { container.appendChild(cnvs); } } container = new R._Paper; container.width = width; container.height = height; container.canvas = cnvs; container.clear(); container._left = container._top = 0; isFloating && (container.renderfix = function () {}); container.renderfix(); return container; }; R._engine.setViewBox = function (x, y, w, h, fit) { eve("raphael.setViewBox", this, this._viewBox, [x, y, w, h, fit]); var paperSize = this.getSize(), size = mmax(w / paperSize.width, h / paperSize.height), top = this.top, aspectRatio = fit ? "xMidYMid meet" : "xMinYMin", vb, sw; if (x == null) { if (this._vbSize) { size = 1; } delete this._vbSize; vb = "0 0 " + this.width + S + this.height; } else { this._vbSize = size; vb = x + S + y + S + w + S + h; } $(this.canvas, { viewBox: vb, preserveAspectRatio: aspectRatio }); while (size && top) { sw = "stroke-width" in top.attrs ? top.attrs["stroke-width"] : 1; top.attr({"stroke-width": sw}); top._.dirty = 1; top._.dirtyT = 1; top = top.prev; } this._viewBox = [x, y, w, h, !!fit]; return this; }; /*\ * Paper.renderfix [ method ] ** * Fixes the issue of Firefox and IE9 regarding subpixel rendering. If paper is dependent * on other elements after reflow it could shift half pixel which cause for lines to lost their crispness. * This method fixes the issue. ** Special thanks to Mariusz Nowak (http://www.medikoo.com/) for this method. \*/ R.prototype.renderfix = function () { var cnvs = this.canvas, s = cnvs.style, pos; try { pos = cnvs.getScreenCTM() || cnvs.createSVGMatrix(); } catch (e) { pos = cnvs.createSVGMatrix(); } var left = -pos.e % 1, top = -pos.f % 1; if (left || top) { if (left) { this._left = (this._left + left) % 1; s.left = this._left + "px"; } if (top) { this._top = (this._top + top) % 1; s.top = this._top + "px"; } } }; /*\ * Paper.clear [ method ] ** * Clears the paper, i.e. removes all the elements. \*/ R.prototype.clear = function () { R.eve("raphael.clear", this); var c = this.canvas; while (c.firstChild) { c.removeChild(c.firstChild); } this.bottom = this.top = null; (this.desc = $("desc")).appendChild(R._g.doc.createTextNode("Created with Rapha\xebl " + R.version)); c.appendChild(this.desc); c.appendChild(this.defs = $("defs")); }; /*\ * Paper.remove [ method ] ** * Removes the paper from the DOM. \*/ R.prototype.remove = function () { eve("raphael.remove", this); this.canvas.parentNode && this.canvas.parentNode.removeChild(this.canvas); for (var i in this) { this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } }; var setproto = R.st; for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) { setproto[method] = (function (methodname) { return function () { var arg = arguments; return this.forEach(function (el) { el[methodname].apply(el, arg); }); }; })(method); } }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); /***/ }, /* 4 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__(1)], __WEBPACK_AMD_DEFINE_RESULT__ = function(R) { if (R && !R.vml) { return; } var has = "hasOwnProperty", Str = String, toFloat = parseFloat, math = Math, round = math.round, mmax = math.max, mmin = math.min, abs = math.abs, fillString = "fill", separator = /[, ]+/, eve = R.eve, ms = " progid:DXImageTransform.Microsoft", S = " ", E = "", map = {M: "m", L: "l", C: "c", Z: "x", m: "t", l: "r", c: "v", z: "x"}, bites = /([clmz]),?([^clmz]*)/gi, blurregexp = / progid:\S+Blur\([^\)]+\)/g, val = /-?[^,\s-]+/g, cssDot = "position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)", zoom = 21600, pathTypes = {path: 1, rect: 1, image: 1}, ovalTypes = {circle: 1, ellipse: 1}, path2vml = function (path) { var total = /[ahqstv]/ig, command = R._pathToAbsolute; Str(path).match(total) && (command = R._path2curve); total = /[clmz]/g; if (command == R._pathToAbsolute && !Str(path).match(total)) { var res = Str(path).replace(bites, function (all, command, args) { var vals = [], isMove = command.toLowerCase() == "m", res = map[command]; args.replace(val, function (value) { if (isMove && vals.length == 2) { res += vals + map[command == "m" ? "l" : "L"]; vals = []; } vals.push(round(value * zoom)); }); return res + vals; }); return res; } var pa = command(path), p, r; res = []; for (var i = 0, ii = pa.length; i < ii; i++) { p = pa[i]; r = pa[i][0].toLowerCase(); r == "z" && (r = "x"); for (var j = 1, jj = p.length; j < jj; j++) { r += round(p[j] * zoom) + (j != jj - 1 ? "," : E); } res.push(r); } return res.join(S); }, compensation = function (deg, dx, dy) { var m = R.matrix(); m.rotate(-deg, .5, .5); return { dx: m.x(dx, dy), dy: m.y(dx, dy) }; }, setCoords = function (p, sx, sy, dx, dy, deg) { var _ = p._, m = p.matrix, fillpos = _.fillpos, o = p.node, s = o.style, y = 1, flip = "", dxdy, kx = zoom / sx, ky = zoom / sy; s.visibility = "hidden"; if (!sx || !sy) { return; } o.coordsize = abs(kx) + S + abs(ky); s.rotation = deg * (sx * sy < 0 ? -1 : 1); if (deg) { var c = compensation(deg, dx, dy); dx = c.dx; dy = c.dy; } sx < 0 && (flip += "x"); sy < 0 && (flip += " y") && (y = -1); s.flip = flip; o.coordorigin = (dx * -kx) + S + (dy * -ky); if (fillpos || _.fillsize) { var fill = o.getElementsByTagName(fillString); fill = fill && fill[0]; o.removeChild(fill); if (fillpos) { c = compensation(deg, m.x(fillpos[0], fillpos[1]), m.y(fillpos[0], fillpos[1])); fill.position = c.dx * y + S + c.dy * y; } if (_.fillsize) { fill.size = _.fillsize[0] * abs(sx) + S + _.fillsize[1] * abs(sy); } o.appendChild(fill); } s.visibility = "visible"; }; R.toString = function () { return "Your browser doesn\u2019t support SVG. Falling down to VML.\nYou are running Rapha\xebl " + this.version; }; var addArrow = function (o, value, isEnd) { var values = Str(value).toLowerCase().split("-"), se = isEnd ? "end" : "start", i = values.length, type = "classic", w = "medium", h = "medium"; while (i--) { switch (values[i]) { case "block": case "classic": case "oval": case "diamond": case "open": case "none": type = values[i]; break; case "wide": case "narrow": h = values[i]; break; case "long": case "short": w = values[i]; break; } } var stroke = o.node.getElementsByTagName("stroke")[0]; stroke[se + "arrow"] = type; stroke[se + "arrowlength"] = w; stroke[se + "arrowwidth"] = h; }, setFillAndStroke = function (o, params) { // o.paper.canvas.style.display = "none"; o.attrs = o.attrs || {}; var node = o.node, a = o.attrs, s = node.style, xy, newpath = pathTypes[o.type] && (params.x != a.x || params.y != a.y || params.width != a.width || params.height != a.height || params.cx != a.cx || params.cy != a.cy || params.rx != a.rx || params.ry != a.ry || params.r != a.r), isOval = ovalTypes[o.type] && (a.cx != params.cx || a.cy != params.cy || a.r != params.r || a.rx != params.rx || a.ry != params.ry), res = o; for (var par in params) if (params[has](par)) { a[par] = params[par]; } if (newpath) { a.path = R._getPath[o.type](o); o._.dirty = 1; } params.href && (node.href = params.href); params.title && (node.title = params.title); params.target && (node.target = params.target); params.cursor && (s.cursor = params.cursor); "blur" in params && o.blur(params.blur); if (params.path && o.type == "path" || newpath) { node.path = path2vml(~Str(a.path).toLowerCase().indexOf("r") ? R._pathToAbsolute(a.path) : a.path); o._.dirty = 1; if (o.type == "image") { o._.fillpos = [a.x, a.y]; o._.fillsize = [a.width, a.height]; setCoords(o, 1, 1, 0, 0, 0); } } "transform" in params && o.transform(params.transform); if (isOval) { var cx = +a.cx, cy = +a.cy, rx = +a.rx || +a.r || 0, ry = +a.ry || +a.r || 0; node.path = R.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x", round((cx - rx) * zoom), round((cy - ry) * zoom), round((cx + rx) * zoom), round((cy + ry) * zoom), round(cx * zoom)); o._.dirty = 1; } if ("clip-rect" in params) { var rect = Str(params["clip-rect"]).split(separator); if (rect.length == 4) { rect[2] = +rect[2] + (+rect[0]); rect[3] = +rect[3] + (+rect[1]); var div = node.clipRect || R._g.doc.createElement("div"), dstyle = div.style; dstyle.clip = R.format("rect({1}px {2}px {3}px {0}px)", rect); if (!node.clipRect) { dstyle.position = "absolute"; dstyle.top = 0; dstyle.left = 0; dstyle.width = o.paper.width + "px"; dstyle.height = o.paper.height + "px"; node.parentNode.insertBefore(div, node); div.appendChild(node); node.clipRect = div; } } if (!params["clip-rect"]) { node.clipRect && (node.clipRect.style.clip = "auto"); } } if (o.textpath) { var textpathStyle = o.textpath.style; params.font && (textpathStyle.font = params.font); params["font-family"] && (textpathStyle.fontFamily = '"' + params["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g, E) + '"'); params["font-size"] && (textpathStyle.fontSize = params["font-size"]); params["font-weight"] && (textpathStyle.fontWeight = params["font-weight"]); params["font-style"] && (textpathStyle.fontStyle = params["font-style"]); } if ("arrow-start" in params) { addArrow(res, params["arrow-start"]); } if ("arrow-end" in params) { addArrow(res, params["arrow-end"], 1); } if (params.opacity != null || params.fill != null || params.src != null || params.stroke != null || params["stroke-width"] != null || params["stroke-opacity"] != null || params["fill-opacity"] != null || params["stroke-dasharray"] != null || params["stroke-miterlimit"] != null || params["stroke-linejoin"] != null || params["stroke-linecap"] != null) { var fill = node.getElementsByTagName(fillString), newfill = false; fill = fill && fill[0]; !fill && (newfill = fill = createNode(fillString)); if (o.type == "image" && params.src) { fill.src = params.src; } params.fill && (fill.on = true); if (fill.on == null || params.fill == "none" || params.fill === null) { fill.on = false; } if (fill.on && params.fill) { var isURL = Str(params.fill).match(R._ISURL); if (isURL) { fill.parentNode == node && node.removeChild(fill); fill.rotate = true; fill.src = isURL[1]; fill.type = "tile"; var bbox = o.getBBox(1); fill.position = bbox.x + S + bbox.y; o._.fillpos = [bbox.x, bbox.y]; R._preload(isURL[1], function () { o._.fillsize = [this.offsetWidth, this.offsetHeight]; }); } else { fill.color = R.getRGB(params.fill).hex; fill.src = E; fill.type = "solid"; if (R.getRGB(params.fill).error && (res.type in {circle: 1, ellipse: 1} || Str(params.fill).charAt() != "r") && addGradientFill(res, params.fill, fill)) { a.fill = "none"; a.gradient = params.fill; fill.rotate = false; } } } if ("fill-opacity" in params || "opacity" in params) { var opacity = ((+a["fill-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+R.getRGB(params.fill).o + 1 || 2) - 1); opacity = mmin(mmax(opacity, 0), 1); fill.opacity = opacity; if (fill.src) { fill.color = "none"; } } node.appendChild(fill); var stroke = (node.getElementsByTagName("stroke") && node.getElementsByTagName("stroke")[0]), newstroke = false; !stroke && (newstroke = stroke = createNode("stroke")); if ((params.stroke && params.stroke != "none") || params["stroke-width"] || params["stroke-opacity"] != null || params["stroke-dasharray"] || params["stroke-miterlimit"] || params["stroke-linejoin"] || params["stroke-linecap"]) { stroke.on = true; } (params.stroke == "none" || params.stroke === null || stroke.on == null || params.stroke == 0 || params["stroke-width"] == 0) && (stroke.on = false); var strokeColor = R.getRGB(params.stroke); stroke.on && params.stroke && (stroke.color = strokeColor.hex); opacity = ((+a["stroke-opacity"] + 1 || 2) - 1) * ((+a.opacity + 1 || 2) - 1) * ((+strokeColor.o + 1 || 2) - 1); var width = (toFloat(params["stroke-width"]) || 1) * .75; opacity = mmin(mmax(opacity, 0), 1); params["stroke-width"] == null && (width = a["stroke-width"]); params["stroke-width"] && (stroke.weight = width); width && width < 1 && (opacity *= width) && (stroke.weight = 1); stroke.opacity = opacity; params["stroke-linejoin"] && (stroke.joinstyle = params["stroke-linejoin"] || "miter"); stroke.miterlimit = params["stroke-miterlimit"] || 8; params["stroke-linecap"] && (stroke.endcap = params["stroke-linecap"] == "butt" ? "flat" : params["stroke-linecap"] == "square" ? "square" : "round"); if ("stroke-dasharray" in params) { var dasharray = { "-": "shortdash", ".": "shortdot", "-.": "shortdashdot", "-..": "shortdashdotdot", ". ": "dot", "- ": "dash", "--": "longdash", "- .": "dashdot", "--.": "longdashdot", "--..": "longdashdotdot" }; stroke.dashstyle = dasharray[has](params["stroke-dasharray"]) ? dasharray[params["stroke-dasharray"]] : E; } newstroke && node.appendChild(stroke); } if (res.type == "text") { res.paper.canvas.style.display = E; var span = res.paper.span, m = 100, fontSize = a.font && a.font.match(/\d+(?:\.\d*)?(?=px)/); s = span.style; a.font && (s.font = a.font); a["font-family"] && (s.fontFamily = a["font-family"]); a["font-weight"] && (s.fontWeight = a["font-weight"]); a["font-style"] && (s.fontStyle = a["font-style"]); fontSize = toFloat(a["font-size"] || fontSize && fontSize[0]) || 10; s.fontSize = fontSize * m + "px"; res.textpath.string && (span.innerHTML = Str(res.textpath.string).replace(/</g, "<").replace(/&/g, "&").replace(/\n/g, "<br>")); var brect = span.getBoundingClientRect(); res.W = a.w = (brect.right - brect.left) / m; res.H = a.h = (brect.bottom - brect.top) / m; // res.paper.canvas.style.display = "none"; res.X = a.x; res.Y = a.y + res.H / 2; ("x" in params || "y" in params) && (res.path.v = R.format("m{0},{1}l{2},{1}", round(a.x * zoom), round(a.y * zoom), round(a.x * zoom) + 1)); var dirtyattrs = ["x", "y", "text", "font", "font-family", "font-weight", "font-style", "font-size"]; for (var d = 0, dd = dirtyattrs.length; d < dd; d++) if (dirtyattrs[d] in params) { res._.dirty = 1; break; } // text-anchor emulation switch (a["text-anchor"]) { case "start": res.textpath.style["v-text-align"] = "left"; res.bbx = res.W / 2; break; case "end": res.textpath.style["v-text-align"] = "right"; res.bbx = -res.W / 2; break; default: res.textpath.style["v-text-align"] = "center"; res.bbx = 0; break; } res.textpath.style["v-text-kern"] = true; } // res.paper.canvas.style.display = E; }, addGradientFill = function (o, gradient, fill) { o.attrs = o.attrs || {}; var attrs = o.attrs, pow = Math.pow, opacity, oindex, type = "linear", fxfy = ".5 .5"; o.attrs.gradient = gradient; gradient = Str(gradient).replace(R._radial_gradient, function (all, fx, fy) { type = "radial"; if (fx && fy) { fx = toFloat(fx); fy = toFloat(fy); pow(fx - .5, 2) + pow(fy - .5, 2) > .25 && (fy = math.sqrt(.25 - pow(fx - .5, 2)) * ((fy > .5) * 2 - 1) + .5); fxfy = fx + S + fy; } return E; }); gradient = gradient.split(/\s*\-\s*/); if (type == "linear") { var angle = gradient.shift(); angle = -toFloat(angle); if (isNaN(angle)) { return null; } } var dots = R._parseDots(gradient); if (!dots) { return null; } o = o.shape || o.node; if (dots.length) { o.removeChild(fill); fill.on = true; fill.method = "none"; fill.color = dots[0].color; fill.color2 = dots[dots.length - 1].color; var clrs = []; for (var i = 0, ii = dots.length; i < ii; i++) { dots[i].offset && clrs.push(dots[i].offset + S + dots[i].color); } fill.colors = clrs.length ? clrs.join() : "0% " + fill.color; if (type == "radial") { fill.type = "gradientTitle"; fill.focus = "100%"; fill.focussize = "0 0"; fill.focusposition = fxfy; fill.angle = 0; } else { // fill.rotate= true; fill.type = "gradient"; fill.angle = (270 - angle) % 360; } o.appendChild(fill); } return 1; }, Element = function (node, vml) { this[0] = this.node = node; node.raphael = true; this.id = R._oid++; node.raphaelid = this.id; this.X = 0; this.Y = 0; this.attrs = {}; this.paper = vml; this.matrix = R.matrix(); this._ = { transform: [], sx: 1, sy: 1, dx: 0, dy: 0, deg: 0, dirty: 1, dirtyT: 1 }; !vml.bottom && (vml.bottom = this); this.prev = vml.top; vml.top && (vml.top.next = this); vml.top = this; this.next = null; }; var elproto = R.el; Element.prototype = elproto; elproto.constructor = Element; elproto.transform = function (tstr) { if (tstr == null) { return this._.transform; } var vbs = this.paper._viewBoxShift, vbt = vbs ? "s" + [vbs.scale, vbs.scale] + "-1-1t" + [vbs.dx, vbs.dy] : E, oldt; if (vbs) { oldt = tstr = Str(tstr).replace(/\.{3}|\u2026/g, this._.transform || E); } R._extractTransform(this, vbt + tstr); var matrix = this.matrix.clone(), skew = this.skew, o = this.node, split, isGrad = ~Str(this.attrs.fill).indexOf("-"), isPatt = !Str(this.attrs.fill).indexOf("url("); matrix.translate(1, 1); if (isPatt || isGrad || this.type == "image") { skew.matrix = "1 0 0 1"; skew.offset = "0 0"; split = matrix.split(); if ((isGrad && split.noRotation) || !split.isSimple) { o.style.filter = matrix.toFilter(); var bb = this.getBBox(), bbt = this.getBBox(1), dx = bb.x - bbt.x, dy = bb.y - bbt.y; o.coordorigin = (dx * -zoom) + S + (dy * -zoom); setCoords(this, 1, 1, dx, dy, 0); } else { o.style.filter = E; setCoords(this, split.scalex, split.scaley, split.dx, split.dy, split.rotate); } } else { o.style.filter = E; skew.matrix = Str(matrix); skew.offset = matrix.offset(); } if (oldt !== null) { // empty string value is true as well this._.transform = oldt; R._extractTransform(this, oldt); } return this; }; elproto.rotate = function (deg, cx, cy) { if (this.removed) { return this; } if (deg == null) { return; } deg = Str(deg).split(separator); if (deg.length - 1) { cx = toFloat(deg[1]); cy = toFloat(deg[2]); } deg = toFloat(deg[0]); (cy == null) && (cx = cy); if (cx == null || cy == null) { var bbox = this.getBBox(1); cx = bbox.x + bbox.width / 2; cy = bbox.y + bbox.height / 2; } this._.dirtyT = 1; this.transform(this._.transform.concat([["r", deg, cx, cy]])); return this; }; elproto.translate = function (dx, dy) { if (this.removed) { return this; } dx = Str(dx).split(separator); if (dx.length - 1) { dy = toFloat(dx[1]); } dx = toFloat(dx[0]) || 0; dy = +dy || 0; if (this._.bbox) { this._.bbox.x += dx; this._.bbox.y += dy; } this.transform(this._.transform.concat([["t", dx, dy]])); return this; }; elproto.scale = function (sx, sy, cx, cy) { if (this.removed) { return this; } sx = Str(sx).split(separator); if (sx.length - 1) { sy = toFloat(sx[1]); cx = toFloat(sx[2]); cy = toFloat(sx[3]); isNaN(cx) && (cx = null); isNaN(cy) && (cy = null); } sx = toFloat(sx[0]); (sy == null) && (sy = sx); (cy == null) && (cx = cy); if (cx == null || cy == null) { var bbox = this.getBBox(1); } cx = cx == null ? bbox.x + bbox.width / 2 : cx; cy = cy == null ? bbox.y + bbox.height / 2 : cy; this.transform(this._.transform.concat([["s", sx, sy, cx, cy]])); this._.dirtyT = 1; return this; }; elproto.hide = function () { !this.removed && (this.node.style.display = "none"); return this; }; elproto.show = function () { !this.removed && (this.node.style.display = E); return this; }; // Needed to fix the vml setViewBox issues elproto.auxGetBBox = R.el.getBBox; elproto.getBBox = function(){ var b = this.auxGetBBox(); if (this.paper && this.paper._viewBoxShift) { var c = {}; var z = 1/this.paper._viewBoxShift.scale; c.x = b.x - this.paper._viewBoxShift.dx; c.x *= z; c.y = b.y - this.paper._viewBoxShift.dy; c.y *= z; c.width = b.width * z; c.height = b.height * z; c.x2 = c.x + c.width; c.y2 = c.y + c.height; return c; } return b; }; elproto._getBBox = function () { if (this.removed) { return {}; } return { x: this.X + (this.bbx || 0) - this.W / 2, y: this.Y - this.H, width: this.W, height: this.H }; }; elproto.remove = function () { if (this.removed || !this.node.parentNode) { return; } this.paper.__set__ && this.paper.__set__.exclude(this); R.eve.unbind("raphael.*.*." + this.id); R._tear(this, this.paper); this.node.parentNode.removeChild(this.node); this.shape && this.shape.parentNode.removeChild(this.shape); for (var i in this) { this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } this.removed = true; }; elproto.attr = function (name, value) { if (this.removed) { return this; } if (name == null) { var res = {}; for (var a in this.attrs) if (this.attrs[has](a)) { res[a] = this.attrs[a]; } res.gradient && res.fill == "none" && (res.fill = res.gradient) && delete res.gradient; res.transform = this._.transform; return res; } if (value == null && R.is(name, "string")) { if (name == fillString && this.attrs.fill == "none" && this.attrs.gradient) { return this.attrs.gradient; } var names = name.split(separator), out = {}; for (var i = 0, ii = names.length; i < ii; i++) { name = names[i]; if (name in this.attrs) { out[name] = this.attrs[name]; } else if (R.is(this.paper.customAttributes[name], "function")) { out[name] = this.paper.customAttributes[name].def; } else { out[name] = R._availableAttrs[name]; } } return ii - 1 ? out : out[names[0]]; } if (this.attrs && value == null && R.is(name, "array")) { out = {}; for (i = 0, ii = name.length; i < ii; i++) { out[name[i]] = this.attr(name[i]); } return out; } var params; if (value != null) { params = {}; params[name] = value; } value == null && R.is(name, "object") && (params = name); for (var key in params) { eve("raphael.attr." + key + "." + this.id, this, params[key]); } if (params) { for (key in this.paper.customAttributes) if (this.paper.customAttributes[has](key) && params[has](key) && R.is(this.paper.customAttributes[key], "function")) { var par = this.paper.customAttributes[key].apply(this, [].concat(params[key])); this.attrs[key] = params[key]; for (var subkey in par) if (par[has](subkey)) { params[subkey] = par[subkey]; } } // this.paper.canvas.style.display = "none"; if (params.text && this.type == "text") { this.textpath.string = params.text; } setFillAndStroke(this, params); // this.paper.canvas.style.display = E; } return this; }; elproto.toFront = function () { !this.removed && this.node.parentNode.appendChild(this.node); this.paper && this.paper.top != this && R._tofront(this, this.paper); return this; }; elproto.toBack = function () { if (this.removed) { return this; } if (this.node.parentNode.firstChild != this.node) { this.node.parentNode.insertBefore(this.node, this.node.parentNode.firstChild); R._toback(this, this.paper); } return this; }; elproto.insertAfter = function (element) { if (this.removed) { return this; } if (element.constructor == R.st.constructor) { element = element[element.length - 1]; } if (element.node.nextSibling) { element.node.parentNode.insertBefore(this.node, element.node.nextSibling); } else { element.node.parentNode.appendChild(this.node); } R._insertafter(this, element, this.paper); return this; }; elproto.insertBefore = function (element) { if (this.removed) { return this; } if (element.constructor == R.st.constructor) { element = element[0]; } element.node.parentNode.insertBefore(this.node, element.node); R._insertbefore(this, element, this.paper); return this; }; elproto.blur = function (size) { var s = this.node.runtimeStyle, f = s.filter; f = f.replace(blurregexp, E); if (+size !== 0) { this.attrs.blur = size; s.filter = f + S + ms + ".Blur(pixelradius=" + (+size || 1.5) + ")"; s.margin = R.format("-{0}px 0 0 -{0}px", round(+size || 1.5)); } else { s.filter = f; s.margin = 0; delete this.attrs.blur; } return this; }; R._engine.path = function (pathString, vml) { var el = createNode("shape"); el.style.cssText = cssDot; el.coordsize = zoom + S + zoom; el.coordorigin = vml.coordorigin; var p = new Element(el, vml), attr = {fill: "none", stroke: "#000"}; pathString && (attr.path = pathString); p.type = "path"; p.path = []; p.Path = E; setFillAndStroke(p, attr); vml.canvas && vml.canvas.appendChild(el); var skew = createNode("skew"); skew.on = true; el.appendChild(skew); p.skew = skew; p.transform(E); return p; }; R._engine.rect = function (vml, x, y, w, h, r) { var path = R._rectPath(x, y, w, h, r), res = vml.path(path), a = res.attrs; res.X = a.x = x; res.Y = a.y = y; res.W = a.width = w; res.H = a.height = h; a.r = r; a.path = path; res.type = "rect"; return res; }; R._engine.ellipse = function (vml, x, y, rx, ry) { var res = vml.path(), a = res.attrs; res.X = x - rx; res.Y = y - ry; res.W = rx * 2; res.H = ry * 2; res.type = "ellipse"; setFillAndStroke(res, { cx: x, cy: y, rx: rx, ry: ry }); return res; }; R._engine.circle = function (vml, x, y, r) { var res = vml.path(), a = res.attrs; res.X = x - r; res.Y = y - r; res.W = res.H = r * 2; res.type = "circle"; setFillAndStroke(res, { cx: x, cy: y, r: r }); return res; }; R._engine.image = function (vml, src, x, y, w, h) { var path = R._rectPath(x, y, w, h), res = vml.path(path).attr({stroke: "none"}), a = res.attrs, node = res.node, fill = node.getElementsByTagName(fillString)[0]; a.src = src; res.X = a.x = x; res.Y = a.y = y; res.W = a.width = w; res.H = a.height = h; a.path = path; res.type = "image"; fill.parentNode == node && node.removeChild(fill); fill.rotate = true; fill.src = src; fill.type = "tile"; res._.fillpos = [x, y]; res._.fillsize = [w, h]; node.appendChild(fill); setCoords(res, 1, 1, 0, 0, 0); return res; }; R._engine.text = function (vml, x, y, text) { var el = createNode("shape"), path = createNode("path"), o = createNode("textpath"); x = x || 0; y = y || 0; text = text || ""; path.v = R.format("m{0},{1}l{2},{1}", round(x * zoom), round(y * zoom), round(x * zoom) + 1); path.textpathok = true; o.string = Str(text); o.on = true; el.style.cssText = cssDot; el.coordsize = zoom + S + zoom; el.coordorigin = "0 0"; var p = new Element(el, vml), attr = { fill: "#000", stroke: "none", font: R._availableAttrs.font, text: text }; p.shape = el; p.path = path; p.textpath = o; p.type = "text"; p.attrs.text = Str(text); p.attrs.x = x; p.attrs.y = y; p.attrs.w = 1; p.attrs.h = 1; setFillAndStroke(p, attr); el.appendChild(o); el.appendChild(path); vml.canvas.appendChild(el); var skew = createNode("skew"); skew.on = true; el.appendChild(skew); p.skew = skew; p.transform(E); return p; }; R._engine.setSize = function (width, height) { var cs = this.canvas.style; this.width = width; this.height = height; width == +width && (width += "px"); height == +height && (height += "px"); cs.width = width; cs.height = height; cs.clip = "rect(0 " + width + " " + height + " 0)"; if (this._viewBox) { R._engine.setViewBox.apply(this, this._viewBox); } return this; }; R._engine.setViewBox = function (x, y, w, h, fit) { R.eve("raphael.setViewBox", this, this._viewBox, [x, y, w, h, fit]); var paperSize = this.getSize(), width = paperSize.width, height = paperSize.height, H, W; if (fit) { H = height / h; W = width / w; if (w * H < width) { x -= (width - w * H) / 2 / H; } if (h * W < height) { y -= (height - h * W) / 2 / W; } } this._viewBox = [x, y, w, h, !!fit]; this._viewBoxShift = { dx: -x, dy: -y, scale: paperSize }; this.forEach(function (el) { el.transform("..."); }); return this; }; var createNode; R._engine.initWin = function (win) { var doc = win.document; if (doc.styleSheets.length < 31) { doc.createStyleSheet().addRule(".rvml", "behavior:url(#default#VML)"); } else { // no more room, add to the existing one // http://msdn.microsoft.com/en-us/library/ms531194%28VS.85%29.aspx doc.styleSheets[0].addRule(".rvml", "behavior:url(#default#VML)"); } try { !doc.namespaces.rvml && doc.namespaces.add("rvml", "urn:schemas-microsoft-com:vml"); createNode = function (tagName) { return doc.createElement('<rvml:' + tagName + ' class="rvml">'); }; } catch (e) { createNode = function (tagName) { return doc.createElement('<' + tagName + ' xmlns="urn:schemas-microsoft.com:vml" class="rvml">'); }; } }; R._engine.initWin(R._g.win); R._engine.create = function () { var con = R._getContainer.apply(0, arguments), container = con.container, height = con.height, s, width = con.width, x = con.x, y = con.y; if (!container) { throw new Error("VML container not found."); } var res = new R._Paper, c = res.canvas = R._g.doc.createElement("div"), cs = c.style; x = x || 0; y = y || 0; width = width || 512; height = height || 342; res.width = width; res.height = height; width == +width && (width += "px"); height == +height && (height += "px"); res.coordsize = zoom * 1e3 + S + zoom * 1e3; res.coordorigin = "0 0"; res.span = R._g.doc.createElement("span"); res.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;"; c.appendChild(res.span); cs.cssText = R.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden", width, height); if (container == 1) { R._g.doc.body.appendChild(c); cs.left = x + "px"; cs.top = y + "px"; cs.position = "absolute"; } else { if (container.firstChild) { container.insertBefore(c, container.firstChild); } else { container.appendChild(c); } } res.renderfix = function () {}; return res; }; R.prototype.clear = function () { R.eve("raphael.clear", this); this.canvas.innerHTML = E; this.span = R._g.doc.createElement("span"); this.span.style.cssText = "position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;"; this.canvas.appendChild(this.span); this.bottom = this.top = null; }; R.prototype.remove = function () { R.eve("raphael.remove", this); this.canvas.parentNode.removeChild(this.canvas); for (var i in this) { this[i] = typeof this[i] == "function" ? R._removedFactory(i) : null; } return true; }; var setproto = R.st; for (var method in elproto) if (elproto[has](method) && !setproto[has](method)) { setproto[method] = (function (methodname) { return function () { var arg = arguments; return this.forEach(function (el) { el[methodname].apply(el, arg); }); }; })(method); } }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); /***/ } /******/ ]) }); ; ================================================ FILE: modules/backend/assets/foundation/migrate/vendor/sortable/jquery-sortable.js ================================================ /* =================================================== * jquery-sortable.js v0.9.13 * http://johnny.github.com/jquery-sortable/ * =================================================== * Copyright (c) 2012 Jonas von Andrian * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ========================================================== */ !function ( $, window, pluginName, undefined){ var containerDefaults = { // If true, items can be dragged from this container drag: true, // If true, items can be droped onto this container drop: true, // Exclude items from being draggable, if the // selector matches the item exclude: "", // If true, search for nested containers within an item.If you nest containers, // either the original selector with which you call the plugin must only match the top containers, // or you need to specify a group (see the bootstrap nav example) nested: true, // If true, the items are assumed to be arranged vertically vertical: true }, // end container defaults groupDefaults = { // This is executed after the placeholder has been moved. // $closestItemOrContainer contains the closest item, the placeholder // has been put at or the closest empty Container, the placeholder has // been appended to. afterMove: function ($placeholder, container, $closestItemOrContainer) { }, // The exact css path between the container and its items, e.g. "> tbody" containerPath: "", // The css selector of the containers containerSelector: "ol, ul", // Distance the mouse has to travel to start dragging distance: 0, // Time in milliseconds after mousedown until dragging should start. // This option can be used to prevent unwanted drags when clicking on an element. delay: 0, // The css selector of the drag handle handle: "", // The exact css path between the item and its subcontainers. // It should only match the immediate items of a container. // No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is "> div" itemPath: "", // The css selector of the items itemSelector: "li", // The class given to "body" while an item is being dragged bodyClass: "dragging", // The class giving to an item while being dragged draggedClass: "dragged", // Check if the dragged item may be inside the container. // Use with care, since the search for a valid container entails a depth first search // and may be quite expensive. isValidTarget: function ($item, container) { return true }, // Executed before onDrop if placeholder is detached. // This happens if pullPlaceholder is set to false and the drop occurs outside a container. onCancel: function ($item, container, _super, event) { }, // Executed at the beginning of a mouse move event. // The Placeholder has not been moved yet. onDrag: function ($item, position, _super, event) { $item.css(position) event.preventDefault() }, // Called after the drag has been started, // that is the mouse button is being held down and // the mouse is moving. // The container is the closest initialized container. // Therefore it might not be the container, that actually contains the item. onDragStart: function ($item, container, _super, event) { $item.css({ height: $item.outerHeight(), width: $item.outerWidth() }) $item.addClass(container.group.options.draggedClass) $("body").addClass(container.group.options.bodyClass) }, // Called when the mouse button is being released onDrop: function ($item, container, _super, event) { $item.removeClass(container.group.options.draggedClass).removeAttr("style") $("body").removeClass(container.group.options.bodyClass) }, // Called on mousedown. If falsy value is returned, the dragging will not start. // Ignore if element clicked is input, select or textarea onMousedown: function ($item, _super, event) { if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) { if (event.type.match(/^mouse/)) event.preventDefault() return true } }, // The class of the placeholder (must match placeholder option markup) placeholderClass: "placeholder", // Template for the placeholder. Can be any valid jQuery input // e.g. a string, a DOM element. // The placeholder must have the class "placeholder" placeholder: '<li class="placeholder"></li>', // If true, the position of the placeholder is calculated on every mousemove. // If false, it is only calculated when the mouse is above a container. pullPlaceholder: true, // Specifies serialization of the container group. // The pair $parent/$children is either container/items or item/subcontainers. serialize: function ($parent, $children, parentIsContainer) { var result = $.extend({}, $parent.data()) if (parentIsContainer) { return [$children] } else if ($children[0]){ result.children = $children } delete result.subContainers delete result.sortable return result }, // Set tolerance while dragging. Positive values decrease sensitivity, // negative values increase it. tolerance: 0 }, // end group defaults containerGroups = {}, groupCounter = 0, emptyBox = { left: 0, top: 0, bottom: 0, right:0 }, eventNames = { start: "touchstart.sortable mousedown.sortable", drop: "touchend.sortable touchcancel.sortable mouseup.sortable", drag: "touchmove.sortable mousemove.sortable", scroll: "scroll.sortable" }, subContainerKey = "subContainers" /* * a is Array [left, right, top, bottom] * b is array [left, top] */ function d(a,b) { var x = Math.max(0, a[0] - b[0], b[0] - a[1]), y = Math.max(0, a[2] - b[1], b[1] - a[3]) return x+y; } function setDimensions(array, dimensions, tolerance, useOffset) { var i = array.length, offsetMethod = useOffset ? "offset" : "position" tolerance = tolerance || 0 while(i--){ var el = array[i].el ? array[i].el : $(array[i]), // use fitting method pos = el[offsetMethod]() pos.left += parseInt(el.css('margin-left'), 10) pos.top += parseInt(el.css('margin-top'),10) dimensions[i] = [ pos.left - tolerance, pos.left + el.outerWidth() + tolerance, pos.top - tolerance, pos.top + el.outerHeight() + tolerance ] } } function getRelativePosition(pointer, element) { var offset = element.offset() return { left: pointer.left - offset.left, top: pointer.top - offset.top } } function sortByDistanceDesc(dimensions, pointer, lastPointer) { pointer = [pointer.left, pointer.top] lastPointer = lastPointer && [lastPointer.left, lastPointer.top] var dim, i = dimensions.length, distances = [] while(i--){ dim = dimensions[i] distances[i] = [i,d(dim,pointer), lastPointer && d(dim, lastPointer)] } distances = distances.sort(function (a,b) { return b[1] - a[1] || b[2] - a[2] || b[0] - a[0] }) // last entry is the closest return distances } function ContainerGroup(options) { this.options = $.extend({}, groupDefaults, options) this.containers = [] if(!this.options.rootGroup){ this.scrollProxy = $.proxy(this.scroll, this) this.dragProxy = $.proxy(this.drag, this) this.dropProxy = $.proxy(this.drop, this) this.placeholder = $(this.options.placeholder) if(!options.isValidTarget) this.options.isValidTarget = undefined } } ContainerGroup.get = function (options) { if(!containerGroups[options.group]) { if(options.group === undefined) options.group = groupCounter ++ containerGroups[options.group] = new ContainerGroup(options) } return containerGroups[options.group] } ContainerGroup.prototype = { dragInit: function (e, itemContainer) { this.$document = $(itemContainer.el[0].ownerDocument) // get item to drag var closestItem = $(e.target).closest(this.options.itemSelector); // using the length of this item, prevents the plugin from being started if there is no handle being clicked on. // this may also be helpful in instantiating multidrag. if (closestItem.length) { this.item = closestItem; this.itemContainer = itemContainer; if (this.item.is(this.options.exclude) || !this.options.onMousedown(this.item, groupDefaults.onMousedown, e)) { return; } this.setPointer(e); this.toggleListeners('on'); this.setupDelayTimer(); this.dragInitDone = true; } }, drag: function (e) { if(!this.dragging){ if(!this.distanceMet(e) || !this.delayMet) return this.options.onDragStart(this.item, this.itemContainer, groupDefaults.onDragStart, e) this.item.before(this.placeholder) this.dragging = true } this.setPointer(e) // place item under the cursor this.options.onDrag(this.item, getRelativePosition(this.pointer, this.item.offsetParent()), groupDefaults.onDrag, e) var p = this.getPointer(e), box = this.sameResultBox, t = this.options.tolerance if(!box || box.top - t > p.top || box.bottom + t < p.top || box.left - t > p.left || box.right + t < p.left) if(!this.searchValidTarget()){ this.placeholder.detach() this.lastAppendedItem = undefined } }, drop: function (e) { this.toggleListeners('off') this.dragInitDone = false if(this.dragging){ // processing Drop, check if placeholder is detached if(this.placeholder.closest("html")[0]){ this.placeholder.before(this.item).detach() } else { this.options.onCancel(this.item, this.itemContainer, groupDefaults.onCancel, e) } this.options.onDrop(this.item, this.getContainer(this.item), groupDefaults.onDrop, e) // cleanup this.clearDimensions() this.clearOffsetParent() this.lastAppendedItem = this.sameResultBox = undefined this.dragging = false } }, searchValidTarget: function (pointer, lastPointer) { if(!pointer){ pointer = this.relativePointer || this.pointer lastPointer = this.lastRelativePointer || this.lastPointer } var distances = sortByDistanceDesc(this.getContainerDimensions(), pointer, lastPointer), i = distances.length while(i--){ var index = distances[i][0], distance = distances[i][1] if(!distance || this.options.pullPlaceholder){ var container = this.containers[index] if(!container.disabled){ if(!this.$getOffsetParent()){ var offsetParent = container.getItemOffsetParent() pointer = getRelativePosition(pointer, offsetParent) lastPointer = getRelativePosition(lastPointer, offsetParent) } if(container.searchValidTarget(pointer, lastPointer)) return true } } } if(this.sameResultBox) this.sameResultBox = undefined }, movePlaceholder: function (container, item, method, sameResultBox) { var lastAppendedItem = this.lastAppendedItem if(!sameResultBox && lastAppendedItem && lastAppendedItem[0] === item[0]) return; item[method](this.placeholder) this.lastAppendedItem = item this.sameResultBox = sameResultBox this.options.afterMove(this.placeholder, container, item) }, getContainerDimensions: function () { if(!this.containerDimensions) setDimensions(this.containers, this.containerDimensions = [], this.options.tolerance, !this.$getOffsetParent()) return this.containerDimensions }, getContainer: function (element) { return element.closest(this.options.containerSelector).data(pluginName) }, $getOffsetParent: function () { if(this.offsetParent === undefined){ var i = this.containers.length - 1, offsetParent = this.containers[i].getItemOffsetParent() if(!this.options.rootGroup){ while(i--){ if(offsetParent[0] != this.containers[i].getItemOffsetParent()[0]){ // If every container has the same offset parent, // use position() which is relative to this parent, // otherwise use offset() // compare #setDimensions offsetParent = false break; } } } this.offsetParent = offsetParent } return this.offsetParent }, setPointer: function (e) { var pointer = this.getPointer(e) if(this.$getOffsetParent()){ var relativePointer = getRelativePosition(pointer, this.$getOffsetParent()) this.lastRelativePointer = this.relativePointer this.relativePointer = relativePointer } this.lastPointer = this.pointer this.pointer = pointer }, distanceMet: function (e) { var currentPointer = this.getPointer(e) return (Math.max( Math.abs(this.pointer.left - currentPointer.left), Math.abs(this.pointer.top - currentPointer.top) ) >= this.options.distance) }, getPointer: function(e) { var o = e.originalEvent, t = (e.originalEvent.touches && e.originalEvent.touches[0]) || {} return { left: e.pageX || o.pageX || t.pageX, top: e.pageY || o.pageY || t.pageY } }, setupDelayTimer: function () { var that = this this.delayMet = !this.options.delay // init delay timer if needed if (!this.delayMet) { clearTimeout(this._mouseDelayTimer); this._mouseDelayTimer = setTimeout(function() { that.delayMet = true }, this.options.delay) } }, scroll: function (e) { this.clearDimensions() this.clearOffsetParent() // TODO is this needed? }, toggleListeners: function (method) { var that = this, events = ['drag','drop','scroll'] $.each(events,function (i,event) { that.$document[method](eventNames[event], that[event + 'Proxy']) }) }, clearOffsetParent: function () { this.offsetParent = undefined }, // Recursively clear container and item dimensions clearDimensions: function () { this.traverse(function(object){ object._clearDimensions() }) }, traverse: function(callback) { callback(this) var i = this.containers.length while(i--){ this.containers[i].traverse(callback) } }, _clearDimensions: function(){ this.containerDimensions = undefined }, _destroy: function () { containerGroups[this.options.group] = undefined } } function Container(element, options) { this.el = element this.options = $.extend( {}, containerDefaults, options) this.group = ContainerGroup.get(this.options) this.rootGroup = this.options.rootGroup || this.group this.handle = this.rootGroup.options.handle || this.rootGroup.options.itemSelector var itemPath = this.rootGroup.options.itemPath this.target = itemPath ? this.el.find(itemPath) : this.el this.target.on(eventNames.start, this.handle, $.proxy(this.dragInit, this)) if(this.options.drop) this.group.containers.push(this) } Container.prototype = { dragInit: function (e) { var rootGroup = this.rootGroup if( !this.disabled && !rootGroup.dragInitDone && this.options.drag && this.isValidDrag(e)) { rootGroup.dragInit(e, this) } }, isValidDrag: function(e) { return e.which == 1 || e.type == "touchstart" && e.originalEvent.touches.length == 1 }, searchValidTarget: function (pointer, lastPointer) { var distances = sortByDistanceDesc(this.getItemDimensions(), pointer, lastPointer), i = distances.length, rootGroup = this.rootGroup, validTarget = !rootGroup.options.isValidTarget || rootGroup.options.isValidTarget(rootGroup.item, this) if(!i && validTarget){ rootGroup.movePlaceholder(this, this.target, "append") return true } else while(i--){ var index = distances[i][0], distance = distances[i][1] if(!distance && this.hasChildGroup(index)){ var found = this.getContainerGroup(index).searchValidTarget(pointer, lastPointer) if(found) return true } else if(validTarget){ this.movePlaceholder(index, pointer) return true } } }, movePlaceholder: function (index, pointer) { var item = $(this.items[index]), dim = this.itemDimensions[index], method = "after", width = item.outerWidth(), height = item.outerHeight(), offset = item.offset(), sameResultBox = { left: offset.left, right: offset.left + width, top: offset.top, bottom: offset.top + height } if(this.options.vertical){ var yCenter = (dim[2] + dim[3]) / 2, inUpperHalf = pointer.top <= yCenter if(inUpperHalf){ method = "before" sameResultBox.bottom -= height / 2 } else sameResultBox.top += height / 2 } else { var xCenter = (dim[0] + dim[1]) / 2, inLeftHalf = pointer.left <= xCenter if(inLeftHalf){ method = "before" sameResultBox.right -= width / 2 } else sameResultBox.left += width / 2 } if(this.hasChildGroup(index)) sameResultBox = emptyBox this.rootGroup.movePlaceholder(this, item, method, sameResultBox) }, getItemDimensions: function () { if(!this.itemDimensions){ this.items = this.$getChildren(this.el, "item").filter( ":not(." + this.group.options.placeholderClass + ", ." + this.group.options.draggedClass + ")" ).get() setDimensions(this.items, this.itemDimensions = [], this.options.tolerance) } return this.itemDimensions }, getItemOffsetParent: function () { var offsetParent, el = this.el // Since el might be empty we have to check el itself and // can not do something like el.children().first().offsetParent() if(el.css("position") === "relative" || el.css("position") === "absolute" || el.css("position") === "fixed") offsetParent = el else offsetParent = el.offsetParent() return offsetParent }, hasChildGroup: function (index) { return this.options.nested && this.getContainerGroup(index) }, getContainerGroup: function (index) { var childGroup = $.data(this.items[index], subContainerKey) if( childGroup === undefined){ var childContainers = this.$getChildren(this.items[index], "container") childGroup = false if(childContainers[0]){ var options = $.extend({}, this.options, { rootGroup: this.rootGroup, group: groupCounter ++ }) childGroup = childContainers[pluginName](options).data(pluginName).group } $.data(this.items[index], subContainerKey, childGroup) } return childGroup }, $getChildren: function (parent, type) { var options = this.rootGroup.options, path = options[type + "Path"], selector = options[type + "Selector"] parent = $(parent) if(path) parent = parent.find(path) return parent.children(selector) }, _serialize: function (parent, isContainer) { var that = this, childType = isContainer ? "item" : "container", children = this.$getChildren(parent, childType).not(this.options.exclude).map(function () { return that._serialize($(this), !isContainer) }).get() return this.rootGroup.options.serialize(parent, children, isContainer) }, traverse: function(callback) { $.each(this.items || [], function(item){ var group = $.data(this, subContainerKey) if(group) group.traverse(callback) }); callback(this) }, _clearDimensions: function () { this.itemDimensions = undefined }, _destroy: function() { var that = this; this.target.off(eventNames.start, this.handle); this.el.removeData(pluginName) if(this.options.drop) this.group.containers = $.grep(this.group.containers, function(val){ return val != that }) $.each(this.items || [], function(){ $.removeData(this, subContainerKey) }) } } var API = { enable: function() { this.traverse(function(object){ object.disabled = false }) }, disable: function (){ this.traverse(function(object){ object.disabled = true }) }, serialize: function () { return this._serialize(this.el, true) }, refresh: function() { this.traverse(function(object){ object._clearDimensions() }) }, destroy: function () { this.traverse(function(object){ object._destroy(); }) } } $.extend(Container.prototype, API) /** * jQuery API * * Parameters are * either options on init * or a method name followed by arguments to pass to the method */ $.fn[pluginName] = function(methodOrOptions) { var args = Array.prototype.slice.call(arguments, 1) return this.map(function(){ var $t = $(this), object = $t.data(pluginName) if(object && API[methodOrOptions]) return API[methodOrOptions].apply(object, args) || this else if(!object && (methodOrOptions === undefined || typeof methodOrOptions === "object")) $t.data(pluginName, new Container($t, methodOrOptions)) return this }); }; }(jQuery, window, 'jqSortable'); ================================================ FILE: modules/backend/assets/foundation/scripts/drag/README.md ================================================ # Drag.Scroll Allows the elements with `overflow: hidden` to be dragged. ### Example Drag the area above left-to-right. <div id="scrollExample"> <div class="scroll-stripes-example"></div> </div> <style> #scrollExample { width: 100%; height: 50px; overflow: hidden; } .scroll-stripes-example { height: 50px; width: 5000px; background-image: linear-gradient(90deg, gray, white, gray); background-size: 500px 50px; } </style> <script> $('#scrollExample').dragScroll(); </script> # Drag.Value Allows the dragging of elements that result in a custom value when dropped. <p> <input placeholder="Drag a button below to me" class="form-control" /> </p> <button class="btn btn-default" data-control="dragvalue" data-text-value="October"> Drop "Foo" </button> <button class="btn btn-default" data-control="dragvalue" data-text-value="CMS"> Drop "Bar" </button> ### Clickable You can make elements clickable from another input by defining `data-drag-click="true"`. <p> <input placeholder="Click on me first, then click a label below" class="form-control" /> </p> <div class="control-balloon-selector"> <ul> <li data-control="dragvalue" data-text-value="Richie" data-drag-click="true"> Monday </li> <li data-control="dragvalue" data-text-value="Potsie" data-drag-click="true"> Tuesday </li> <li data-control="dragvalue" data-text-value="The Fonz" data-drag-click="true"> Happy days! </li> </ul> </div> # Drag.Sort Allows the dragging and sorting of lists. ### Example Sort the buttons <ol id="sortExample"> <li><a class="btn btn-sm btn-default">First</a></li> <li><a class="btn btn-sm btn-primary">Second</a></li> <li><a class="btn btn-sm btn-success">Third</a></li> </ol> <script> $('#sortExample').sortable() </script> <style> body.dragging, body.dragging * { cursor: move !important } .dragged { position: absolute; opacity: 0.5; z-index: 2000; } #sortExample li.placeholder { position: relative; } </style> ## JavaScript API The `sortable()` method must be invoked on valid containers, meaning they must match the containerSelector option. `.sortable('enable')` Enable all instantiated sortables in the set of matched elements `.sortable('disable')` Disable all instantiated sortables in the set of matched elements `.sortable('refresh')` Reset all cached element dimensions `.sortable('destroy')` Remove the sortable plugin from the set of matched elements `.sortable('serialize')` Serialize all selected containers. Returns a jQuery object . Use .get() to retrieve the array, if needed. ### Supported options - `useAnimation`: Use animation when an item is removed or inserted into the tree. - `usePlaceholderClone`: Placeholder should be a clone of the item being dragged. - `afterMove`: This is executed after the placeholder has been moved. $closestItemOrContainer contains the closest item, the placeholder has been put at or the closest empty Container, the placeholder has been appended to. - `containerPath`: The exact css path between the container and its items, e.g. "> tbody" - `containerSelector`: The css selector of the containers - `distance`: Distance the mouse has to travel to start dragging - `delay`: Time in milliseconds after mousedown until dragging should start. This option can be used to prevent unwanted drags when clicking on an element. - `handle`: The css selector of the drag handle - `itemPath`: The exact css path between the item and its subcontainers. It should only match the immediate items of a container. No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is "> div" - `itemSelector`: The css selector of the items - `bodyClass`: The class given to "body" while an item is being dragged - `draggedClass`: The class giving to an item while being dragged - `isValidTarget`: Check if the dragged item may be inside the container. Use with care, since the search for a valid container entails a depth first search and may be quite expensive. - `onCancel`: Executed before onDrop if placeholder is detached. This happens if pullPlaceholder is set to false and the drop occurs outside a container. - `onDrag`: Executed at the beginning of a mouse move event. The Placeholder has not been moved yet. - `onDragStart`: Called after the drag has been started, that is the mouse button is being held down and the mouse is moving. The container is the closest initialized container. Therefore it might not be the container, that actually contains the item. - `onDrop`: Called when the mouse button is being released - `onMousedown`: Called on mousedown. If falsy value is returned, the dragging will not start. Ignore if element clicked is input, select or textarea - `placeholderClass`: The class of the placeholder (must match placeholder option markup) - `placeholder`: Template for the placeholder. Can be any valid jQuery input e.g. a string, a DOM element. The placeholder must have the class "placeholder" - `pullPlaceholder`: If true, the position of the placeholder is calculated on every mousemove. If false, it is only calculated when the mouse is above a container. - `serialize`: Specifies serialization of the container group. The pair $parent/$children is either container/items or item/subcontainers. - `tolerance`: Set tolerance while dragging. Positive values decrease sensitivity, negative values increase it. ### Supported options (container specific) - `drag`: If true, items can be dragged from this container - `drop`: If true, items can be droped onto this container - `exclude`: Exclude items from being draggable, if the selector matches the item - `nested`: If true, search for nested containers within an item.If you nest containers, either the original selector with which you call the plugin must only match the top containers, or you need to specify a group (see the bootstrap nav example) - `vertical`: If true, the items are assumed to be arranged vertically ================================================ FILE: modules/backend/assets/foundation/scripts/drag/drag.scroll.js ================================================ /* * Allows to scroll an element content in the horizontal or horizontal directions. This script doesn't use * absolute positioning and rely on the scrollLeft/scrollTop DHTML properties. The element width should be * fixed with the CSS or JavaScript. * * Events triggered on the element: * - start.oc.dragScroll * - drag.oc.dragScroll * - stop.oc.dragScroll * * Options: * - start - callback function to execute when the drag starts * - drag - callback function to execute when the element is dragged * - stop - callback function to execute when the drag ends * - vertical - determines if the scroll direction is vertical, true by default * - scrollClassContainer - if specified, specifies an element or element selector to apply the 'scroll-before' and 'scroll-after' CSS classes, * depending on whether the scrollable area is in its start or end * - scrollMarkerContainer - if specified, specifies an element or element selector to inject scroll markers (span elements that con * contain the ellipses icon, indicating whether scrolling is possible) * - useDrag - determines if dragging is allowed support, true by default * - useNative - if native CSS is enabled via "mobile" on the HTML tag, false by default * - useScroll - determines if the mouse wheel scrolling is allowed, true by default * - useComboScroll - determines if horizontal scroll should act as vertical, and vice versa, true by default * - dragSelector - restrict drag events to this selector * - scrollSelector - restrict scroll events to this selector * * Methods: * - isStart - determines if the scrollable area is in its start (left or top) * - isEnd - determines if the scrollable area is in its end (right or bottom) * - goToStart - moves the scrollable area to the start (left or top) * - goToElement - moves the scrollable area to an element * * Require: * - mousewheel/mousewheel */ +(function($) { 'use strict'; var Base = $.oc.foundation.base, BaseProto = Base.prototype; var DragScroll = function(element, options) { this.options = $.extend({}, DragScroll.DEFAULTS, options); this.touchDragStarted = false; this.onTouchMove = onTouchMove; var $el = $(element), el = $el.get(0), dragStart = 0, startOffset = 0, self = this, dragging = false, eventElementName = this.options.vertical ? 'pageY' : 'pageX', isNative = this.options.useNative && $('html').hasClass('mobile'); this.el = $el; this.scrollClassContainer = this.options.scrollClassContainer ? $(this.options.scrollClassContainer) : $el; this.isScrollable = true; Base.call(this); // Inject scroll markers if (this.options.scrollMarkerContainer) { $(this.options.scrollMarkerContainer).append( $('<span class="before scroll-marker"></span><span class="after scroll-marker"></span>') ); } // Bind events var $scrollSelect = this.options.scrollSelector ? $(this.options.scrollSelector, $el) : $el; $scrollSelect.mousewheel(function(event) { if (!self.options.useScroll || self.paused) { return; } var offset, offsetX = event.deltaFactor * event.deltaX, offsetY = event.deltaFactor * event.deltaY; if (!offsetX && self.options.useComboScroll) { offset = offsetY * -1; } else if (!offsetY && self.options.useComboScroll) { offset = offsetX; } else { offset = self.options.vertical ? offsetY * -1 : offsetX; } var scrolled = scrollWheel(offset); if (!scrolled && self.options.noOverScroll) { event.preventDefault(); event.stopPropagation(); } return !scrolled }); if (this.options.useDrag) { $el.on('mousedown.dragScroll', this.options.dragSelector, function(event) { if (self.paused) { return; } // Don't prevent clicking inputs in the toolbar if (event.target && event.target.tagName === 'INPUT') { return; } if (!self.isScrollable) { return; } startDrag(event); return false; }); } if ('ontouchstart' in window || navigator.maxTouchPoints > 0) { $el.on('touchstart.dragScroll', this.options.dragSelector, function (event) { if (self.paused) { return; } var touchEvent = event.originalEvent; if (touchEvent.touches.length == 1) { startDrag(touchEvent.touches[0]); self.touchDragStarted = true; event.stopPropagation(); } }); window.addEventListener('touchmove', self.onTouchMove, { passive: false }) } $el.on('click.dragScroll', function() { // Do not handle item clicks while dragging if ($(document.body).hasClass(self.options.dragClass)) { return false; } }); if (!this.options.noScrollClasses) { $(document).on('ready', this.proxy(this.fixScrollClasses)); $(window).on('resize', this.proxy(this.fixScrollClasses)); this.el.on('scroll', this.proxy(this.fixScrollClasses)); } /* * Internal event, drag has started */ function startDrag(event) { if (self.paused) { return; } dragStart = event[eventElementName]; startOffset = self.options.vertical ? $el.scrollTop() : $el.scrollLeft(); if ('ontouchstart' in window || navigator.maxTouchPoints > 0) { $(window).on('touchend.dragScroll', function(event) { stopDrag(); }); } $(window).on('mousemove.dragScroll', function(event) { moveDrag(event); return false; }); $(window).on('mouseup.dragScroll', function(mouseUpEvent) { var isClick = event.pageX == mouseUpEvent.pageX && event.pageY == mouseUpEvent.pageY; stopDrag(isClick); return false; }); } function onTouchMove(event) { if (!self.touchDragStarted) { return; } var touchEvent = event moveDrag(touchEvent.touches[0]) if (!isNative) { event.preventDefault() } } /* * Internal event, drag is active */ function moveDrag(event) { var current = event[eventElementName], offset = dragStart - current; if (Math.abs(offset) > 3) { if (!dragging) { dragging = true; $el.trigger('start.oc.dragScroll'); self.options.start(); $(document.body).addClass(self.options.dragClass); } if (!isNative) { self.options.vertical ? $el.scrollTop(startOffset + offset) : $el.scrollLeft(startOffset + offset); } self.fixScrollClasses(true); $el.trigger('drag.oc.dragScroll'); self.options.drag(); } } /* * Internal event, drag has ended */ function stopDrag(click) { $(window).off('.dragScroll'); self.touchDragStarted = false; dragging = false; if (click) { $(document.body).removeClass(self.options.dragClass); } else { self.fixScrollClasses(); } window.setTimeout(function() { if (!click) { $(document.body).removeClass(self.options.dragClass); $el.trigger('stop.oc.dragScroll'); self.options.stop(); self.fixScrollClasses(); } }, 100); } /* * Scroll wheel has moved by supplied offset */ function scrollWheel(offset) { if (self.paused) { return; } startOffset = self.options.vertical ? el.scrollTop : el.scrollLeft; self.options.vertical ? $el.scrollTop(startOffset + offset) : $el.scrollLeft(startOffset + offset); var scrolled = self.options.vertical ? el.scrollTop != startOffset : el.scrollLeft != startOffset; $el.trigger('drag.oc.dragScroll'); self.options.drag(); if (scrolled) { if (self.wheelUpdateTimer !== undefined && self.wheelUpdateTimer !== false) window.clearInterval(self.wheelUpdateTimer); self.wheelUpdateTimer = window.setTimeout(function() { self.wheelUpdateTimer = false; self.fixScrollClasses(); }, 100); } return scrolled; } this.fixScrollClasses(); }; DragScroll.prototype.dispose = function() { clearTimeout(this.fixScrollClassesIntervalId); this.scrollClassContainer = null; if (!this.options.noScrollClasses) { $(document).off('ready', this.proxy(this.fixScrollClasses)); $(window).off('resize', this.proxy(this.fixScrollClasses)); this.el.off('scroll', this.proxy(this.fixScrollClasses)); } this.el.off('.dragScroll'); this.el.removeData('oc.dragScroll'); window.removeEventListener('touchmove', this.onTouchMove, {passive: false}) this.el = null; BaseProto.dispose.call(this); }; DragScroll.prototype = Object.create(BaseProto); DragScroll.prototype.constructor = DragScroll; DragScroll.DEFAULTS = { vertical: false, useDrag: true, useScroll: true, useNative: false, useComboScroll: true, scrollClassContainer: false, scrollMarkerContainer: false, scrollSelector: null, dragSelector: null, noOverScroll: false, dragClass: 'drag', start: function() {}, drag: function() {}, stop: function() {} }; DragScroll.prototype.fixScrollClasses = function(isThrottle) { if (this.options.noScrollClasses) { return; } if (this.fixScrollClassesIntervalId) { if (isThrottle) { return; } clearTimeout(this.fixScrollClassesIntervalId); this.fixScrollClassesIntervalId = null; } var that = this; this.fixScrollClassesIntervalId = window.setTimeout(function() { that.fixScrollClassesIntervalId = null; var isStart = that.isStart(), isEnd = that.isEnd(); that.scrollClassContainer.toggleClass('scroll-before', !isStart); that.scrollClassContainer.toggleClass('scroll-after', !isEnd); that.scrollClassContainer.toggleClass('scroll-active-before', that.isActiveBefore()); that.scrollClassContainer.toggleClass('scroll-active-after', that.isActiveAfter()); that.isScrollable = !isStart || !isEnd; }, 30); }; DragScroll.prototype.isStart = function() { if (!this.options.vertical) { return this.el.scrollLeft() <= 0; } else { return this.el.scrollTop() <= 0; } }; DragScroll.prototype.isEnd = function() { // Fudge factor for retina displays var offset = 1; if (!this.options.vertical) { return this.el[0].scrollWidth - (this.el.scrollLeft() + this.el.outerWidth()) - offset <= 0; } else { return this.el[0].scrollHeight - (this.el.scrollTop() + this.el.outerHeight()) - offset <= 0; } }; DragScroll.prototype.goToStart = function() { if (!this.options.vertical) { return this.el.scrollLeft(0); } else { return this.el.scrollTop(0); } }; /* * Determines if the element with the class 'active' is hidden before the viewport - * on the left or on the top, depending on whether the scrollbar is horizontal or vertical. */ DragScroll.prototype.isActiveAfter = function() { var activeElement = $('.active', this.el); if (activeElement.length == 0) { return false; } if (!this.options.vertical) { return activeElement.get(0).offsetLeft > this.el.scrollLeft() + this.el.width(); } else { return activeElement.get(0).offsetTop > this.el.scrollTop() + this.el.height(); } }; /* * Determines if the element with the class 'active' is hidden after the viewport - * on the right or on the bottom, depending on whether the scrollbar is horizontal or vertical. */ DragScroll.prototype.isActiveBefore = function() { var activeElement = $('.active', this.el); if (activeElement.length == 0) { return false; } if (!this.options.vertical) { return activeElement.get(0).offsetLeft + activeElement.width() < this.el.scrollLeft(); } else { return activeElement.get(0).offsetTop + activeElement.height() < this.el.scrollTop(); } }; DragScroll.prototype.goToElement = function(element, callback, options) { var $el = $(element); if (!$el.length) return; var self = this, params = { duration: 300, queue: false, complete: function() { self.fixScrollClasses(); if (callback !== undefined) callback(); } }; params = $.extend(params, options || {}); var offset = 0, animated = false; if (!this.options.vertical) { offset = $el.get(0).offsetLeft - this.el.scrollLeft(); if (offset < 0) { this.el.animate({ scrollLeft: $el.get(0).offsetLeft }, params); animated = true; } else { offset = $el.get(0).offsetLeft + $el.width() - (this.el.scrollLeft() + this.el.width()); if (offset > 0) { this.el.animate({ scrollLeft: $el.get(0).offsetLeft + $el.width() - this.el.width() }, params); animated = true; } } } else { offset = $el.get(0).offsetTop - this.el.scrollTop(); if (offset < 0) { this.el.animate({ scrollTop: $el.get(0).offsetTop }, params); animated = true; } else { var heightOffset = 0; if (params.alignBottom) { heightOffset = $el.height(); } offset = $el.get(0).offsetTop + heightOffset - (this.el.scrollTop() + this.el.height()); if (offset > 0) { this.el.animate( { scrollTop: $el.get(0).offsetTop + $el.height() - this.el.height() + heightOffset }, params ); animated = true; } } } if (!animated && callback !== undefined) { callback(); } }; DragScroll.prototype.pause = function() { this.paused = true; }; DragScroll.prototype.resume = function() { this.paused = false; }; // DRAGSCROLL PLUGIN DEFINITION // ============================ var old = $.fn.dragScroll; $.fn.dragScroll = function(option) { var args = arguments; return this.each(function() { var $this = $(this); var data = $this.data('oc.dragScroll'); var options = typeof option == 'object' && option; if (!data) $this.data('oc.dragScroll', (data = new DragScroll(this, options))); if (typeof option == 'string') { var methodArgs = []; for (var i = 1; i < args.length; i++) methodArgs.push(args[i]); data[option].apply(data, methodArgs); } }); }; $.fn.dragScroll.Constructor = DragScroll; // DRAGSCROLL NO CONFLICT // ================= $.fn.dragScroll.noConflict = function() { $.fn.dragScroll = old; return this; }; })(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/scripts/drag/drag.sort.js ================================================ /* * Sortable plugin. * * Documentation: ../docs/drag-sort.md * * Require: * - sortable/jquery-sortable */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var Sortable = function (element, options) { this.$el = $(element) this.options = options || {} this.cursorAdjustment = null $.oc.foundation.controlUtils.markDisposable(element) Base.call(this) this.init() } Sortable.prototype = Object.create(BaseProto) Sortable.prototype.constructor = Sortable Sortable.prototype.init = function() { this.$el.one('dispose-control', this.proxy(this.dispose)) var self = this, sortableOverrides = {}, sortableDefaults = { onDragStart: this.proxy(this.onDragStart), onDrag: this.proxy(this.onDrag), onDrop: this.proxy(this.onDrop) } /* * Override _super object for each option/event */ if (this.options.onDragStart) { sortableOverrides.onDragStart = function ($item, container, _super, event) { self.options.onDragStart($item, container, sortableDefaults.onDragStart, event) } } if (this.options.onDrag) { sortableOverrides.onDrag = function ($item, position, _super, event) { self.options.onDrag($item, position, sortableDefaults.onDrag, event) } } if (this.options.onDrop) { sortableOverrides.onDrop = function ($item, container, _super, event) { self.options.onDrop($item, container, sortableDefaults.onDrop, event) } } this.$el.jqSortable($.extend({}, sortableDefaults, this.options, sortableOverrides)) } Sortable.prototype.dispose = function() { this.$el.jqSortable('destroy') this.$el.off('dispose-control', this.proxy(this.dispose)) this.$el.removeData('oc.sortable') this.$el = null this.options = null this.cursorAdjustment = null BaseProto.dispose.call(this) } Sortable.prototype.onDragStart = function ($item, container, _super, event) { /* * Relative cursor position */ var offset = $item.offset(), pointer = container.rootGroup.pointer if (pointer) { this.cursorAdjustment = { left: pointer.left - offset.left, top: pointer.top - offset.top } } else { this.cursorAdjustment = null } if (this.options.tweakCursorAdjustment) { this.cursorAdjustment = this.options.tweakCursorAdjustment(this.cursorAdjustment) } $item.css({ height: $item.height(), width: $item.width() }) $item.addClass('dragged') $('body').addClass('dragging') this.$el.addClass('dragging') /* * Use animation */ if (this.options.useAnimation) { $item.data('oc.animated', true) } /* * Placeholder clone */ if (this.options.usePlaceholderClone) { $(container.rootGroup.placeholder).html($item.html()) } if (!this.options.useDraggingClone) { $item.hide() } } Sortable.prototype.onDrag = function ($item, position, _super, event) { if (this.cursorAdjustment) { /* * Relative cursor position */ $item.css({ left: position.left - this.cursorAdjustment.left, top: position.top - this.cursorAdjustment.top }) } else { /* * Default behavior */ $item.css(position) } } Sortable.prototype.onDrop = function ($item, container, _super, event) { $item.removeClass('dragged').removeAttr('style') $('body').removeClass('dragging') this.$el.removeClass('dragging') if ($item.data('oc.animated')) { $item .hide() .slideDown(200) } } // // Proxy API // Sortable.prototype.enable = function() { this.$el.jqSortable('enable') } Sortable.prototype.disable = function() { this.$el.jqSortable('disable') } Sortable.prototype.refresh = function() { this.$el.jqSortable('refresh') } Sortable.prototype.serialize = function() { this.$el.jqSortable('serialize') } Sortable.prototype.destroy = function() { this.dispose() } // External solution for group persistence // See https://github.com/johnny/jquery-sortable/pull/122 Sortable.prototype.destroyGroup = function() { var jqSortable = this.$el.data('jqSortable') if (jqSortable.group) { jqSortable.group._destroy() } } Sortable.DEFAULTS = { useAnimation: false, usePlaceholderClone: false, useDraggingClone: true, tweakCursorAdjustment: null } // PLUGIN DEFINITION // ============================ var old = $.fn.sortable $.fn.sortable = function (option) { var args = arguments; return this.each(function () { var $this = $(this) var data = $this.data('oc.sortable') var options = $.extend({}, Sortable.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.sortable', (data = new Sortable(this, options))) if (typeof option == 'string') data[option].apply(data, args) }) } $.fn.sortable.Constructor = Sortable $.fn.sortable.noConflict = function () { $.fn.sortable = old return this } }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/scripts/drag/drag.value.js ================================================ /* * Drag Value plugin * * Uses native dragging to allow elements to be dragged in to inputs, textareas, etc * * Data attributes: * - data-control="dragvalue" - enables the plugin on an element * - data-text-value="text to include" - text value to include when dragging * - data-drag-click="false" - allow click event, tries to cache the last active element * and insert the text at the current cursor position * * JavaScript API: * $('a#someElement').dragValue({ textValue: 'insert this text' }) * */ +function ($) { "use strict"; // DRAG VALUE CLASS DEFINITION // ============================ var DragValue = function(element, options) { this.options = options this.$el = $(element) // Init this.init() } DragValue.DEFAULTS = { dragClick: false } DragValue.prototype.init = function() { this.$el.prop('draggable', true) this.textValue = this.$el.data('textValue') this.$el.on('dragstart', $.proxy(this.handleDragStart, this)) this.$el.on('drop', $.proxy(this.handleDrop, this)) this.$el.on('dragend', $.proxy(this.handleDragEnd, this)) if (this.options.dragClick) { this.$el.on('click', $.proxy(this.handleClick, this)) this.$el.on('mouseover', $.proxy(this.handleMouseOver, this)) } } // // Drag events // DragValue.prototype.handleDragStart = function(event) { var e = event.originalEvent e.dataTransfer.effectAllowed = 'all' e.dataTransfer.setData('text/plain', this.textValue) this.$el .css({ opacity: 0.5 }) .addClass('dragvalue-dragging') } DragValue.prototype.handleDrop = function(event) { event.stopPropagation() return false } DragValue.prototype.handleDragEnd = function(event) { this.$el .css({ opacity: 1 }) .removeClass('dragvalue-dragging') } // // Click events // DragValue.prototype.handleMouseOver = function(event) { var el = document.activeElement if (!el) return if (el.isContentEditable || ( el.tagName.toLowerCase() == 'input' && el.type == 'text' || el.tagName.toLowerCase() == 'textarea' )) { this.lastElement = el } } DragValue.prototype.handleClick = function(event) { if (!this.lastElement) return var $el = $(this.lastElement) if ($el.hasClass('ace_text-input')) return this.handleClickCodeEditor(event, $el) if (this.lastElement.isContentEditable) return this.handleClickContentEditable() this.insertAtCaret(this.lastElement, this.textValue) } DragValue.prototype.handleClickCodeEditor = function(event, $el) { var $editorArea = $el.closest('[data-control=codeeditor]') if (!$editorArea.length) return $editorArea.codeEditor('getEditorObject').insert(this.textValue) } DragValue.prototype.handleClickContentEditable = function() { var sel, range, html; if (window.getSelection) { sel = window.getSelection(); if (sel.getRangeAt && sel.rangeCount) { range = sel.getRangeAt(0); range.deleteContents(); range.insertNode( document.createTextNode(this.textValue) ); } } else if (document.selection && document.selection.createRange) { document.selection.createRange().text = this.textValue; } } // // Helpers // DragValue.prototype.insertAtCaret = function(el, insertValue) { // IE if (document.selection) { el.focus() var sel = document.selection.createRange() sel.text = insertValue el.focus() } // Real browsers else if (el.selectionStart || el.selectionStart == '0') { var startPos = el.selectionStart, endPos = el.selectionEnd, scrollTop = el.scrollTop el.value = el.value.substring(0, startPos) + insertValue + el.value.substring(endPos, el.value.length) el.focus() el.selectionStart = startPos + insertValue.length el.selectionEnd = startPos + insertValue.length el.scrollTop = scrollTop } else { el.value += insertValue el.focus() } } // DRAG VALUE PLUGIN DEFINITION // ============================ var old = $.fn.dragValue $.fn.dragValue = function (option) { var args = Array.prototype.slice.call(arguments, 1), result this.each(function () { var $this = $(this) var data = $this.data('oc.dragvalue') var options = $.extend({}, DragValue.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.dragvalue', (data = new DragValue(this, options))) if (typeof option == 'string') result = data[option].apply(data, args) if (typeof result != 'undefined') return false }) return result ? result : this } $.fn.dragValue.Constructor = DragValue // DRAG VALUE NO CONFLICT // ================= $.fn.dragValue.noConflict = function () { $.fn.dragValue = old return this } // DRAG VALUE DATA-API // =============== $(document).render(function() { $('[data-control="dragvalue"]').dragValue() }); }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/scripts/foundation/README.md ================================================ # Foundation The foundation libraries are the core base of all scripts and controls. The goals of this library are: - Well structured and readable code. - Don't leave references to DOM elements. - Unbind all event handlers. - Write high-performance code (in cases when it's needed). That's especially important on pages where users spend much time interacting with the page, like the CMS and Pages sections, but all back-end controls should follow these rules, because we never know when they are used. ## Why it's important to release the memory, DOM references and event handlers A typical JavaScript control class instance consists of the following parts: 1. JavaScript object representing the control. 1. A reference to the corresponding DOM element. Usually it's the control's root element containing a tree with the control HTML markup. 1. A number of event handlers to handle user's interaction with the control. If any of that components are not released we have these problems: 1. Non-released JavaScript objects increase the memory footprint. The more memory the application uses, the slower it works. Eventually it could result in a crashed tab or entire browser. 1. Non-released references to DOM elements could result in detached DOM trees. That, in turn, could result in thousands of invisible DOM elements living in a page, increasing the memory footprint and making the application less responsive. 1. Unbound event handlers usually result in non-released DOM elements, which is bad by itself, and also in the code which executes when the user interacts with the application and which should not be executed. That affects the performance. ## This is how to deal with those problems: 1. Remove the JavaScript object - usually by removing the data from the control's root element: `this.$el.removeData('oc.myControl')` Clean all references to DOM elements. Usually it's done by assigning NULL to corresponding object properties. 1. Watch for any references caught by closures (or - better do not use closures, see below). 1. Unbind event handlers. October Storm provides everything we need to meet the goals. Please read on to learn more! ## How to write quality code OOP approach and prototypes should be used in all places. This approach automatically deals with closures that could retain references to scope variables. Typical class code template: ```js function ($) { "use strict"; var SomeClass = function() { this.init() } SomeClass.prototype.init = function (){ ... } } ``` ## Basics of writing disposable classes If a class should be disposable (all UI controls should be disposable), the class should extend `$.oc.foundation.base` class. That class has two useful methods: `proxy(method)` and `dispose()`. `proxy()` method is an alternative to jQuery's `$.proxy`, but as `$.oc.foundation.base` implements OOP approach, passing this parameter to the method is not required. This method is good for three reasons. 1. It's code is very simple and easily controllable and debuggable. 1. It caches bound functions and doesn't create new function as `$.proxy` does. 1. It automatically removes all cached bound functions when the object is disposed with dispose() method. `dispose()` method in the base class cleans up bound methods cached by `proxy()` method and provides a common API for disposing objects. All classes that are supposed to do clean-up work, should override that method, do their own clean-up and call the base `dispose()` method. Example of a disposable class: ```js +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var SomeDisposableClass = function(element) { this.$el = $(element) Base.call(this) this.init() } SomeDisposableClass.prototype = Object.create(BaseProto) SomeDisposableClass.prototype.constructor = SomeDisposableClass SomeDisposableClass.prototype.init = function () { } SomeDisposableClass.prototype.dispose = function () { this.$el = null BaseProto.dispose.call(this) } } ``` A couple of important things to note: 1. The class constructor should call Base.call(this). 1. The class prototype should be replaced with a copy of the Base class prototype, and its constructor reference should be restored back to the class constructor. It should be done right after the class constructor and before any method is defined in the class prototype. ## Binding and unbinding events When binding events, use this.proxy() to make references to event handlers. Always unbind events in dispose() method: ```js +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var SomeDisposableClass = function(element) { this.$el = $(element) Base.call(this) this.init() } [...] SomeDisposableClass.prototype.init = function () { this.$el.on('click', this.proxy(this.onClick)) } SomeDisposableClass.prototype.dispose = function () { this.$el.off('click', this.proxy(this.onClick)) this.$el = null BaseProto.dispose.call(this) } } ``` ## Making disposable controls UI controls should support two ways of disposing - with calling their `dispose()` method and with invoking the dispose-control handler. Also, disposable controls should mark their corresponding DOM elements as disposable, with October foundation API. Example: ```js +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var SomeDisposableControl = function(element) { this.$el = $(element) $.oc.foundation.controlUtils.markDisposable(element) Base.call(this) this.init() } ... SomeDisposableControl.prototype.init = function () { this.$el.one('dispose-control', this.proxy(this.dispose)) } SomeDisposableControl.prototype.dispose = function () { this.$el.off('dispose-control', this.proxy(this.dispose)) this.$el = null BaseProto.dispose.call(this) } } ``` `$.oc.foundation.controlUtils.markDisposable(element)` call in the constructor adds `data-disposable` attribute to the DOM element, allowing the framework to find all disposable elements in a container and dispose them by calling their dispose-control handler when it's required. ## Full example of a jQuery plugin that creates a disposable control We already have a boilerplate code for jQuery code. Disposable controls approach just extends it. Don't forget to remove the data associated with controls from their DOM elements. ```js +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var SomeDisposableControl = function (element, options) { this.$el = $(element) this.options = options || {} $.oc.foundation.controlUtils.markDisposable(element) Base.call(this) this.init() } SomeDisposableControl.prototype = Object.create(BaseProto) SomeDisposableControl.prototype.constructor = SomeDisposableControl SomeDisposableControl.prototype.init = function() { this.$el.on('click', this.proxy(this.onClick)) this.$el.one('dispose-control', this.proxy(this.dispose)) } SomeDisposableControl.prototype.dispose = function() { this.$el.off('click', this.proxy(this.onClick)) this.$el.off('dispose-control', this.proxy(this.dispose)) this.$el.removeData('oc.someDisposableControl') this.$el = null // In some cases options could contain callbacks, // so it's better to clean them up too. this.options = null BaseProto.dispose.call(this) } SomeDisposableControl.DEFAULTS = { someParam: null } // PLUGIN DEFINITION // ============================ var old = $.fn.someDisposableControl $.fn.someDisposableControl = function (option) { var args = Array.prototype.slice.call(arguments, 1), items, result items = this.each(function () { var $this = $(this) var data = $this.data('oc.someDisposableControl') var options = $.extend({}, SomeDisposableControl.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.someDisposableControl', (data = new SomeDisposableControl(this, options))) if (typeof option == 'string') result = data[option].apply(data, args) if (typeof result != 'undefined') return false }) return result ? result : items } $.fn.someDisposableControl.Constructor = SomeDisposableControl $.fn.someDisposableControl.noConflict = function () { $.fn.someDisposableControl = old return this } // Add this only if required $(document).render(function (){ $('[data-some-disposable-control]').someDisposableControl() }) }(window.jQuery); ``` ================================================ FILE: modules/backend/assets/foundation/scripts/foundation/foundation.baseclass.js ================================================ /* * October JavaScript foundation library. * * Base class for OctoberCMS back-end classes. * * The class defines base functionality for dealing with memory management * and cleaning up bound (proxied) methods. * * The base class defines the dispose method that cleans up proxied methods. * If child classes implement their own dispose() method, they should call * the base class dispose method (see the example below). * * Use the simple parasitic combination inheritance pattern to create child classes: * * var Base = $.oc.foundation.base, * BaseProto = Base.prototype * * var SubClass = function(params) { * // Call the parent constructor * Base.call(this) * } * * SubClass.prototype = Object.create(BaseProto) * SubClass.prototype.constructor = SubClass * * // Child class methods can be defined only after the * // prototype is updated in the two previous lines * * SubClass.prototype.dispose = function() { * // Call the parent method * BaseProto.dispose.call(this) * }; * * See: * * - https://developers.google.com/speed/articles/optimizing-javascript * - http://javascriptissexy.com/oop-in-javascript-what-you-need-to-know/ * - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript * */ +function ($) { "use strict"; if ($.oc === undefined) $.oc = {} if ($.oc.foundation === undefined) $.oc.foundation = {} $.oc.foundation._proxyCounter = 0 var Base = function() { this.proxiedMethods = {} } Base.prototype.dispose = function() { for (var key in this.proxiedMethods) { this.proxiedMethods[key] = null } this.proxiedMethods = null } /* * Creates a proxied method reference or returns an existing proxied method. */ Base.prototype.proxy = function(method) { if (method.ocProxyId === undefined) { $.oc.foundation._proxyCounter++ method.ocProxyId = $.oc.foundation._proxyCounter } if (this.proxiedMethods[method.ocProxyId] !== undefined) return this.proxiedMethods[method.ocProxyId] this.proxiedMethods[method.ocProxyId] = method.bind(this) return this.proxiedMethods[method.ocProxyId] } $.oc.foundation.base = Base; }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/scripts/foundation/foundation.controlutils.js ================================================ /* * October JavaScript foundation library. * * Utility functions for working back-end client-side UI controls. * * Usage examples: * * $.oc.foundation.controlUtils.markDisposable(el) * $.oc.foundation.controlUtils.disposeControls(container) * */ +function ($) { "use strict"; if ($.oc === undefined) $.oc = {} if ($.oc.foundation === undefined) $.oc.foundation = {} var ControlUtils = { markDisposable: function(el) { el.setAttribute('data-disposable', '') }, /* * Destroys all disposable controls in a container. * The disposable controls should watch the dispose-control * event. */ disposeControls: function(container) { if (container === document) { container = document.documentElement; } var controls = container.querySelectorAll('[data-disposable]') for (var i=0, len=controls.length; i<len; i++) { $(controls[i]).triggerHandler('dispose-control') } if (container.hasAttribute('data-disposable')) { $(container).triggerHandler('dispose-control') } } } $.oc.foundation.controlUtils = ControlUtils; // Automatically dispose controls in an element before the element contents is replaced. // The ajaxBeforeReplace event is triggered by the AJAX framework. addEventListener('page:before-render', function(ev) { $.oc.foundation.controlUtils.disposeControls(ev.target); }); addEventListener('ajax:before-replace', function(ev) { $.oc.foundation.controlUtils.disposeControls(ev.target); }); }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/scripts/foundation/foundation.element.js ================================================ /* * October JavaScript foundation library. * * Light-weight utility functions for working with DOM elements. The functions * work with elements directly, without jQuery, using the native JavaScript and DOM * features. * * Usage examples: * * $.oc.foundation.element.addClass(myElement, myClass) * */ +function ($) { "use strict"; if ($.oc === undefined) $.oc = {} if ($.oc.foundation === undefined) $.oc.foundation = {} var Element = { hasClass: function(el, className) { if (el.classList) return el.classList.contains(className); return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className); }, addClass: function(el, className) { var classes = className.split(' ') for (var i = 0, len = classes.length; i < len; i++) { var currentClass = classes[i].trim() if (this.hasClass(el, currentClass)) return if (el.classList) el.classList.add(currentClass); else el.className += ' ' + currentClass; } }, removeClass: function(el, className) { if (el.classList) el.classList.remove(className); else el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); }, toggleClass: function(el, className, add) { if (add === undefined) { if (this.hasClass(el, className)) { this.removeClass(el, className) } else { this.addClass(el, className) } } if (add && !this.hasClass(el, className)) { this.addClass(el, className) return } if (!add && this.hasClass(el, className)) { this.removeClass(el, className) return } }, /* * Returns element absolution position. * If the second parameter value is false, the scrolling * won't be added to the result (which could improve the performance). */ absolutePosition: function(element, ignoreScrolling) { var top = ignoreScrolling === true ? 0 : document.body.scrollTop, left = 0 do { top += element.offsetTop || 0; if (ignoreScrolling !== true) top -= element.scrollTop || 0 left += element.offsetLeft || 0 element = element.offsetParent } while(element) return { top: top, left: left } }, getCaretPosition: function(input) { if (document.selection) { var selection = document.selection.createRange() selection.moveStart('character', -input.value.length) return selection.text.length } if (input.selectionStart !== undefined) return input.selectionStart return 0 }, setCaretPosition: function(input, position) { if (document.selection) { var range = input.createTextRange() setTimeout(function() { // Asynchronous layout update, better performance range.collapse(true) range.moveStart("character", position) range.moveEnd("character", 0) range.select() range = null input = null }, 0) } if (input.selectionStart !== undefined) { setTimeout(function() { // Asynchronous layout update input.selectionStart = position input.selectionEnd = position input = null }, 0) } }, elementContainsPoint: function(element, point) { var elementPosition = $.oc.foundation.element.absolutePosition(element), elementRight = elementPosition.left + element.offsetWidth, elementBottom = elementPosition.top + element.offsetHeight return point.x >= elementPosition.left && point.x <= elementRight && point.y >= elementPosition.top && point.y <= elementBottom } } $.oc.foundation.element = Element; }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/scripts/foundation/foundation.event.js ================================================ /* * October JavaScript foundation library. * * Light-weight utility functions for working with native DOM events. The functions * work with events directly, without jQuery, using the native JavaScript and DOM * features. * * Usage examples: * * $.oc.foundation.event.stop(ev) * */ +function ($) { "use strict"; if ($.oc === undefined) $.oc = {} if ($.oc.foundation === undefined) $.oc.foundation = {} var Event = { /* * Returns the event target element. * If the second argument is provided (string), the function * will try to find the first parent with the tag name matching * the argument value. */ getTarget: function(ev, tag) { var target = ev.target ? ev.target : ev.srcElement; if (tag === undefined) { return target; } var tagName = target.tagName; while (tagName != tag) { target = target.parentNode; if (!target) { return null; } tagName = target.tagName; } return target; }, stop: function(ev) { if (ev.stopPropagation) { ev.stopPropagation(); } else { ev.cancelBubble = true; } if (ev.preventDefault) { ev.preventDefault(); } else { ev.returnValue = false; } }, pageCoordinates: function(ev) { if (ev.pageX || ev.pageY) { return { x: ev.pageX, y: ev.pageY }; } else if (ev.clientX || ev.clientY) { return { x: (ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft), y: (ev.clientY + document.body.scrollTop + document.documentElement.scrollTop) }; } return { x: 0, y: 0 }; } } $.oc.foundation.event = Event; }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/scripts/rowlink/README.md ================================================ # Row Link You may link an entire row by adding the `data-control="rowlink"` attribute to the table element. The first table data (TD) column with an anchor will be used to link the entire row. To bypass this behavior, simply add the `nolink` class to the column. <div class="control-list"> <table class="table data" data-control="rowlink"> <tbody> <tr> <td> <a href="https://octobercms.com">Link to this</a> </td> <td>Row will be linked</td> <td>This will also be linked</td> <td class="nolink">No link applied here</td> </tr> </tbody> </table> </div> ================================================ FILE: modules/backend/assets/foundation/scripts/rowlink/rowlink.js ================================================ /* * Table row linking plugin * * Data attributes: * - data-control="rowlink" - enables the plugin on an element * - data-exclude-class="nolink" - disables the link for elements with this class * - data-linked-class="rowlink" - this class is added to affected table rows * * JavaScript API: * $('a#someElement').rowLink() * * Dependencies: * - Null */ +function ($) { "use strict"; // ROWLINK CLASS DEFINITION // ============================ var RowLink = function(element, options) { var self = this; this.options = options; this.$el = $(element); var tr = this.$el.prop('tagName') == 'TR' ? this.$el : this.$el.find('tr:has(td)'); tr.each(function() { var link = $(this) .find(options.target) .filter(function(){ return !$(this).closest('td').hasClass(options.excludeClass) && !$(this).hasClass(options.excludeClass) }) .first(); if (!link.length) { return; } var href = link.attr('href'), onclick = (typeof link.get(0).onclick == "function") ? link.get(0).onclick : null, popup = link.is('[data-control=popup]'), request = link.is('[data-request]'), skipNextBubble = false; function handleClick(e) { if (skipNextBubble) { skipNextBubble = false; return; } if ($(document.body).hasClass('drag')) { return; } if (onclick) { onclick.apply(link.get(0)); } else if (request) { link.request(); } else if (popup) { link.popup(); } else if (e.ctrlKey || e.metaKey) { window.open(href); } else { if (oc.useTurbo()) { oc.visit(href); } else { location.assign(href); } } } var $row = $(this).not('.' + options.excludeClass) $row.on('click', 'td:not(.'+options.excludeClass+') > .'+options.excludeClass, function(e) { skipNextBubble = true; }); $row.on('click', 'td:not(.'+options.excludeClass+')', function(e) { handleClick(e); }) $row.on('mousedown', 'td:not(.'+options.excludeClass+')', function(e) { if (e.which == 2) { window.open(href); } }) $row.on('keypress', function(e) { if (e.key === '(Space character)' || e.key === 'Spacebar' || e.key === ' ') { handleClick(e); return false; } }) $(this).addClass(options.linkedClass); link.hide().after(link.contents()); }) // Add Keyboard Navigation to list rows $('tr.rowlink').attr('tabindex', 0); } RowLink.DEFAULTS = { target: 'a', excludeClass: 'nolink', linkedClass: 'rowlink' } // ROWLINK PLUGIN DEFINITION // ============================ var old = $.fn.rowLink $.fn.rowLink = function (option) { var args = Array.prototype.slice.call(arguments, 1) return this.each(function () { var $this = $(this) var data = $this.data('oc.rowlink') var options = $.extend({}, RowLink.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.rowlink', (data = new RowLink(this, options))) else if (typeof option == 'string') data[option].apply(data, args) }) } $.fn.rowLink.Constructor = RowLink // ROWLINK NO CONFLICT // ================= $.fn.rowLink.noConflict = function () { $.fn.rowLink = old return this } // ROWLINK DATA-API // =============== $(document).render(function() { $('[data-control="rowlink"]').rowLink() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/foundation/util/config.js ================================================ function normalizeData(value) { if (value === 'true') { return true } if (value === 'false') { return false } if (value === Number(value).toString()) { return Number(value) } if (value === '' || value === 'null') { return null } if (typeof value !== 'string') { return value } try { return JSON.parse(decodeURIComponent(value)); } catch { return value; } } function normalizeDataKey(key) { return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`) } const Config = { setDataAttribute(element, key, value) { element.setAttribute(`data-${normalizeDataKey(key)}`, value); }, removeDataAttribute(element, key) { element.removeAttribute(`data-${normalizeDataKey(key)}`); }, getDataAttributes(element) { if (!element) { return {}; } const attributes = {}; const dataKeys = Object.keys(element.dataset); for (const key of dataKeys) { attributes[key] = normalizeData(element.dataset[key]); } return attributes; }, getDataAttribute(element, key) { return normalizeData(element.getAttribute(`data-${normalizeDataKey(key)}`)) } } export default Config ================================================ FILE: modules/backend/assets/foundation/util/data.js ================================================ const elementMap = new Map(); export default { set(element, key, instance) { if (!elementMap.has(element)) { elementMap.set(element, new Map()); } const instanceMap = elementMap.get(element); if (!instanceMap.has(key) && instanceMap.size !== 0) { console.error(`[Foundation] Cannot bind more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); return; } instanceMap.set(key, instance); }, get(element, key) { if (elementMap.has(element)) { return elementMap.get(element).get(key) || null; } return null; }, remove(element, key) { if (!elementMap.has(element)) { return; } const instanceMap = elementMap.get(element); instanceMap.delete(key); if (instanceMap.size === 0) { elementMap.delete(element); } } } ================================================ FILE: modules/backend/assets/images/october-login-ai-generated/1/background.css ================================================ background: #E9E6E6; ================================================ FILE: modules/backend/assets/images/october-login-ai-generated/2/background.css ================================================ background: #D4E9C1; ================================================ FILE: modules/backend/assets/images/october-login-ai-generated/3/background.css ================================================ background: #D6C15E; ================================================ FILE: modules/backend/assets/images/october-login-ai-generated/4/background.css ================================================ background: #361d34; ================================================ FILE: modules/backend/assets/images/october-login-ai-generated/5/background.css ================================================ background: #20111C; ================================================ FILE: modules/backend/assets/images/october-login-ai-generated/6/background.css ================================================ background: #251108; ================================================ FILE: modules/backend/assets/images/october-login-ai-generated/7/background.css ================================================ background: #FDD47F; ================================================ FILE: modules/backend/assets/images/october-login-gradients/1.css ================================================ .gradient-background { position: relative; display: block; height: 100vh; width: 100%; overflow: hidden; /* Elegant gradient background */ background: linear-gradient(120deg, #e7dacb 0%, #fff6e9 60%, #cdb4db 100%); box-shadow: 0 0 0 100vw rgba(139, 114, 82, 0.09) inset; isolation: isolate; &:before { content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 1; background: repeating-radial-gradient(circle at 70% 20%, #ffe4b5 0%, #fffbe8 15%, transparent 30%, transparent 100%), repeating-radial-gradient(circle at 20% 80%, #ceb99288 0%, #fffbe833 18%, transparent 40%, transparent 100%); opacity: 0.16; mix-blend-mode: lighten; } &:after { /* Subtle noise grain for tactile feeling */ content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 3; opacity: 0.10; background: url('data:image/svg+xml;utf8,<svg width="100" height="100" xmlns="http://www.w3.org/2000/svg"><filter id="n"><feTurbulence baseFrequency="0.6" seed="8" type="fractalNoise"/></filter><rect width="100%" height="100%" filter="url(%23n)" opacity="0.7"/></svg>'); mix-blend-mode: soft-light; } .blob { position: absolute; border-radius: 50%; pointer-events: none; opacity: 0.20; filter: blur(60px); z-index: 0; animation: gradient-bg-blobfade 19s cubic-bezier(.77,0,.18,1) infinite alternate; } .blob.blob1 { width: 38vw; height: 38vw; top: 12vh; left: 10vw; background: radial-gradient(circle, #fff1c1 0%, #ffe4b5 80%, transparent 100%); animation-delay: 0s; } .blob.blob2 { width: 50vw; height: 50vw; bottom: -10vh; right: 6vw; background: radial-gradient(circle, #ccb2a3 0%, #f0e1d2 70%, transparent 100%); animation-delay: 12s; } } @keyframes gradient-bg-blobfade { 0% { transform: scale(1) translate(0,0); opacity: 0.16; } 70% { transform: scale(1.05) translate(20px, -12px); opacity: 0.21; } 100% { transform: scale(1) translate(-14px, 18px); opacity: 0.17; } } ================================================ FILE: modules/backend/assets/js/auth/auth.js ================================================ jQuery(function() { $('form input[type=text], form input[type=password]').first().trigger('focus'); }); ================================================ FILE: modules/backend/assets/js/backend/backend.ajax.js ================================================ /* * October AJAX Enhancements */ // Persist site selection across requests // addEventListener('ajax:setup', function(event) { var siteId = $('meta[name="backend-site"]').attr('content'); if (siteId) { var options = event.detail.context.options; if (!options.headers) { options.headers = {}; } options.headers['X-SITE-ID'] = siteId; } }); // Adds the option to merge in a parent data with the current request // this is used by modals that need the state of a parent form // addEventListener('ajax:setup', function(event) { const context = event.detail.context, $el = context.el; if (!$el || !$el.closest) { return; } const $form = $el.closest('form'); if (!$form || !$form.dataset || !$form.dataset.requestParentForm) { return; } var paramToObj = function(name, value) { if (value === undefined) { value = ''; } if (typeof value == 'object') { return value; } try { return oc.parseJSON("{" + value + "}"); } catch (e) { throw new Error('Error parsing the '+name+' attribute value. '+e); } } var elementParents = function(element, selector) { const parents = []; if (!element.parentNode) { return parents; } let ancestor = element.parentNode.closest(selector); while (ancestor) { parents.push(ancestor); ancestor = ancestor.parentNode.closest(selector); } return parents; } var extractDataFromForms = function(parentFormId) { if (!parentFormId) { return; } const $parent = document.querySelector(parentFormId); if (!$parent) { return; } let $parentForm = $parent.closest('form'); if (!$parentForm) { $parentForm = $parent; } let data = oc.serializeJSON($parentForm) || {}; elementParents($parent, '[data-request-data]').reverse().forEach(function(el) { Object.assign(data, paramToObj( 'data-request-data', el.getAttribute('data-request-data') )); }); if (!$parentForm.dataset || !$parentForm.dataset.requestParentForm) { return data; } return { ...extractDataFromForms($parentForm.dataset.requestParentForm) || {}, ...data }; } context.options.data = { ...extractDataFromForms($form.dataset.requestParentForm) || {}, ...context.options.data || {} }; }); ================================================ FILE: modules/backend/assets/js/backend/backend.fixes.js ================================================ /* * Backend Browser Fixes */ /* * Internet Explorer v11 * - IE11 will not honor height 100% when overflow is used on the Y axis. */ if (!!window.MSInputMethodContext && !!document.documentMode) { $(window).on('resize', function() { fixMediaManager() fixSidebar() }) function fixMediaManager() { var $el = $('div[data-control="media-manager"] .control-scrollpad') $el.height($el.parent().height()) } function fixSidebar() { $('#layout-sidenav').height(Math.max( $('#layout-body').innerHeight(), $(window).height() - $('#layout-mainmenu').height() )) } } /* * Firefox: Drag events are broken by design. * * "Note though that it doesn't specify what the properties should be set to, just that they should be set and we currently set them to 0." * Patch for firefox bug: https://bugzilla.mozilla.org/show_bug.cgi?id=505521 */ if(/Firefox\/\d+[\d\.]*/.test(navigator.userAgent) && typeof window.DragEvent === 'function' && typeof window.addEventListener === 'function') (function(){ var cx, cy, px, py, ox, oy, sx, sy, lx, ly; function update(e) { cx = e.clientX; cy = e.clientY; px = e.pageX; py = e.pageY; ox = e.offsetX; oy = e.offsetY; sx = e.screenX; sy = e.screenY; lx = e.layerX; ly = e.layerY; } function assign(e) { e._ffix_cx = cx; e._ffix_cy = cy; e._ffix_px = px; e._ffix_py = py; e._ffix_ox = ox; e._ffix_oy = oy; e._ffix_sx = sx; e._ffix_sy = sy; e._ffix_lx = lx; e._ffix_ly = ly; } window.addEventListener('mousemove', update, true); window.addEventListener('dragover', update, true); // bug #505521 identifies these three listeners as problematic: // (although tests show 'dragstart' seems to work now, keep to be compatible) window.addEventListener('dragstart', assign, true); window.addEventListener('drag', assign, true); window.addEventListener('dragend', assign, true); var me = Object.getOwnPropertyDescriptors(window.MouseEvent.prototype), ue = Object.getOwnPropertyDescriptors(window.UIEvent.prototype); function getter(prop,repl) { return function() {return me[prop] && me[prop].get.call(this) || Number(this[repl]) || 0}; } function layerGetter(prop,repl) { return function() {return this.type === 'dragover' && ue[prop] ? ue[prop].get.call(this) : (Number(this[repl]) || 0)}; } Object.defineProperties(window.DragEvent.prototype,{ clientX: {get: getter('clientX', '_ffix_cx')}, clientY: {get: getter('clientY', '_ffix_cy')}, pageX: {get: getter('pageX', '_ffix_px')}, pageY: {get: getter('pageY', '_ffix_py')}, offsetX: {get: getter('offsetX', '_ffix_ox')}, offsetY: {get: getter('offsetY', '_ffix_oy')}, screenX: {get: getter('screenX', '_ffix_sx')}, screenY: {get: getter('screenY', '_ffix_sy')}, x: {get: getter('x', '_ffix_cx')}, y: {get: getter('y', '_ffix_cy')}, layerX: {get: layerGetter('layerX', '_ffix_lx')}, layerY: {get: layerGetter('layerY', '_ffix_ly')} }); })(); ================================================ FILE: modules/backend/assets/js/backend/backend.js ================================================ /* * October General Utilities */ // Security helper // Prevents front end service workers from leaking in to the backend // function unregisterServiceWorkers() { if (location.protocol === 'https:') { navigator.serviceWorker.getRegistrations().then( function(registrations) { for (var index=0; index<registrations.length; index++) { registrations[index].unregister({ immediate: true }) } } ); } } // Path helpers // if ($.oc === undefined) { $.oc = {}; } $.oc.backendUrl = function(url) { var backendBasePath = $('meta[name="backend-base-path"]').attr('content'); if (!backendBasePath) { return url; } if (url.substr(0, 1) == '/') { url = url.substr(1); } return backendBasePath + '/' + url; } $.oc.backendCalculateTopContainerOffset = function() { var height = $('#layout-mainmenu > .main-menu-container').outerHeight(); if ($('#layout-banner-area').length) { height += $('#layout-banner-area').outerHeight(); } return height; } // String escape // $.oc.escapeHtmlString = function(string) { var htmlEscapes = { '&': '&', '<': '<', '>': '>', '"': '"', "'": ''', '/': '/' }, htmlEscaper = /[&<>"'\/]/g return ('' + string).replace(htmlEscaper, function(match) { return htmlEscapes[match]; }); } // Touch Detection // Returns true only for pure touch devices (no mouse), false for hybrid devices like touch laptops // $.oc.isTouchEnabled = function() { return window.matchMedia('(pointer: coarse)').matches && !window.matchMedia('(pointer: fine)').matches; } // Color Modes // $.oc.setColorModeTheme = function(theme) { if (theme === 'auto') { theme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; } document.documentElement.setAttribute('data-bs-theme', theme); } ;(function() { if (document.documentElement.classList.contains('color-mode-auto')) { var current = document.documentElement.getAttribute('data-bs-theme'), preferred = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; if (current === 'auto' || preferred !== Cookies.get('admin_color_mode_setting')) { Cookies.set('admin_color_mode_setting', preferred, { expires: 365, path: '/' }); $.oc.setColorModeTheme(preferred); } } if (window.matchMedia('(prefers-color-scheme: dark)').matches) { addEventListener('render', function() { const darkFavicon = document.querySelector('head > link[data-favicon-dark]'); if (darkFavicon) { darkFavicon.href = darkFavicon.dataset.faviconDark; } }); } })(); // Color Switcher // oc.registerControl('color-mode-switcher', class extends oc.ControlBase { init() { this.$anchor = this.element.querySelector('a'); this.$label = this.element.querySelector('.nav-label'); this.$icon = this.element.querySelector('.nav-icon > i'); } connect() { this.listen('click', this.$anchor, this.onToggleSwitch) this.updateUi(); } onToggleSwitch() { var current = this.getCurrentMode(), preferred; if (current === 'light') { preferred = 'dark'; } else if (current === 'dark') { preferred = 'auto'; } else { preferred = 'light'; } $.oc.setColorModeTheme(preferred); Cookies.set('admin_color_mode_user', preferred, { expires: 365, path: '/' }); if (preferred === 'auto') { document.documentElement.classList.add('color-mode-auto'); } else { document.documentElement.classList.remove('color-mode-auto'); } this.updateUi(); } updateUi() { var mode = this.getCurrentMode(); if (mode === 'light') { this.$label.innerText = this.element.dataset.langDarkMode; this.$icon.setAttribute('class', 'icon-moon'); } else if (mode === 'dark') { this.$label.innerText = this.element.dataset.langAutoMode; this.$icon.setAttribute('class', 'icon-adjust'); } else { this.$label.innerText = this.element.dataset.langLightMode; this.$icon.setAttribute('class', 'icon-sun'); } } getCurrentMode() { var userCookie = Cookies.get('admin_color_mode_user'); if (userCookie === 'auto') { return 'auto'; } if (document.documentElement.classList.contains('color-mode-auto') && !userCookie) { return 'auto'; } return document.documentElement.getAttribute('data-bs-theme'); } }); ================================================ FILE: modules/backend/assets/js/controls/settings-nav.js ================================================ oc.registerControl('settings-nav', class extends oc.ControlBase { init() { this.treeName = this.config.treeName || 'settingsNav'; this.statusCookieName = this.treeName + 'GroupStatus'; this.searchCookieName = this.treeName + 'Search'; this.$searchInput = this.element.querySelector(this.config.searchInput); this.rememberSearch = !(this.config.rememberSearch === 'false' || this.config.rememberSearch === '0'); } connect() { this.listen('click', 'li > div.group', this.toggleGroup); this.listen('click', '[data-clear-search]', this.clearSearch); this.listen('input', this.$searchInput, this.handleSearchChange); this.listen('scrollbar:ready', '[data-control=scrollbar]', this.initScrollbar); window.addEventListener('scroll', this.proxy(this.toggleScrollState)); this.initSearch(); this.element.style.visibility = 'hidden'; document.body.classList.add('has-settings-nav'); } disconnect() { window.removeEventListener('scroll', this.proxy(this.toggleScrollState)); document.body.classList.remove('has-settings-nav'); } // Toggle scroll state // toggleScrollState() { if (window.scrollY > 0) { this.element.classList.add('is-full'); } else { this.element.classList.remove('is-full'); } } // Scrollbars // initScrollbar(event) { var activeItem = this.element.querySelector('li.active'), active = activeItem ? activeItem.closest('[data-group-code]') : null; if (active) { const $group = active.closest('li'); if ($group) { this.expandGroup($group, 0); } oc.fetchControl(event.delegateTarget, 'scrollbar') ?.gotoElement(active); } this.element.style.visibility = 'visible'; } // Groups // toggleGroup(event) { event.preventDefault(); const $group = event.delegateTarget.closest('li'), status = $group.dataset.status; if (status === undefined || status === 'expanded') { this.collapseGroup($group); } else { this.expandGroup($group); } } collapseGroup($group) { const $list = $group.querySelector(':scope > ul'); $list.style.overflow = 'hidden'; $($list).animate({ height: 0 }, { duration: 100, queue: false, complete: () => { $list.style.overflow = 'visible'; $list.style.display = 'none'; $group.dataset.status = 'collapsed'; $(window).trigger('oc.updateUi'); this.saveGroupStatus($group.dataset.groupCode, true); } }); } expandGroup($group, duration) { const $list = $group.querySelector(':scope > ul'); duration = duration === undefined ? 100 : duration; $list.style.overflow = 'hidden'; $list.style.height = 0; $($list).animate({ height: $list.scrollHeight }, { duration: duration, queue: false, complete: () => { $list.style.overflow = 'visible'; $list.style.height = 'auto'; $list.style.display = ''; $group.dataset.status = 'expanded'; $(window).trigger('oc.updateUi'); this.saveGroupStatus($group.dataset.groupCode, false); } }) } saveGroupStatus(groupCode, collapsed) { var collapsedGroups = Cookies.get(this.statusCookieName), updatedGroups = []; if (collapsedGroups === undefined) { collapsedGroups = ''; } collapsedGroups.split('|').forEach((element) => { if (groupCode != element) { updatedGroups.push(element); } }) if (collapsed) { updatedGroups.push(groupCode); } Cookies.set( this.statusCookieName, updatedGroups.join('|'), { expires: 30, path: '/' } ); } // Search // initSearch() { if (this.rememberSearch) { var searchTerm = Cookies.get(this.searchCookieName); if (searchTerm !== undefined && searchTerm.length > 0) { this.$searchInput.value = searchTerm; this.applySearch(); } } } handleSearchChange(event) { var lastValue = this.$searchInput.dataset.lastSearchValue; if (lastValue !== undefined && lastValue == this.$searchInput.value) { return; } this.$searchInput.dataset.lastSearchValue = this.$searchInput.value; if (this.dataTrackInputTimer !== undefined) { window.clearTimeout(this.dataTrackInputTimer); } this.dataTrackInputTimer = window.setTimeout(() => { this.applySearch(); }, 300); Cookies.set(this.searchCookieName, this.$searchInput.value.trim(), { expires: 30, path: '/' }); } clearSearch() { this.$searchInput.value = ''; this.element.classList.remove('is-search-active'); this.element.querySelectorAll('li').forEach((el) => { el.classList.remove('oc-hide'); }); Cookies.remove(this.searchCookieName); } applySearch() { var query = this.$searchInput.value.trim(), words = query.toLowerCase().split(' '), visibleGroups = [], visibleItems = [], $el = $(this.element); if (query.length === 0) { this.clearSearch(); return; } this.element.classList.add('is-search-active'); // Find visible groups and items $('ul.top-level > li', $el).each((index, item) => { var $li = $(item); if (this.textContainsWords($('div.group h3', $li).text(), words)) { visibleGroups.push($li.get(0)); $('ul li', $li).each((index, item) => { visibleItems.push(item); }); } else { $('ul li', $li).each((index, item) => { if ( this.textContainsWords($(item).text(), words) || this.textContainsWords($(item).data('keywords'), words) ) { visibleGroups.push($li.get(0)); visibleItems.push(item); } }) } }) // Hide invisible groups and items $('ul.top-level > li', $el).each((index, item) => { var $li = $(item), groupIsVisible = $.inArray(item, visibleGroups) !== -1; $li.toggleClass('oc-hide', !groupIsVisible); if (groupIsVisible) { this.expandGroup($li.get(0), 0); } $('ul li', $li).each((index, item) => { var $itemLi = $(item); $itemLi.toggleClass('oc-hide', $.inArray(item, visibleItems) == -1); }) }); $(window).trigger('resize'); return false; } textContainsWords(text, words) { text = text.toLowerCase(); for (var i = 0; i < words.length; i++) { if (text.indexOf(words[i]) === -1) { return false; } } return true; } }); ================================================ FILE: modules/backend/assets/js/main.js ================================================ /** * October CMS Backend Entry Point * * This is the main entry point for the backend panel. It imports all * required scripts, and relies on system/main.js being loaded first * for global dependencies like jQuery, Vue, Bootstrap, etc. */ // Vue Application import './vueapp/vue-application.js'; import './vueapp/vue-control-base.js'; // October Core import './october/october.lang.js'; import './october/october.alert.js'; import './october/october.snackbar.js'; import './october/october.scrollpad.js'; import './october/october.sidenav.js'; import './october/october.scrollbar.js'; import './october/october.filelist.js'; import './october/october.layout.js'; import './october/october.sidepaneltab.js'; import './october/october.simplelist.js'; import './october/october.treelist.js'; import './october/october.sidenav-tree.js'; import './october/october.datetime.js'; import './october/october.responsivemenu.js'; import './october/october.mainmenu.js'; import './october/october.modalfocusmanager.js'; import './october/october.domidmanager.js'; import './october/october.vueutils.js'; import './october/october.tooltip.js'; import './october/october.jsmodule.js'; import './october/october.flyout.js'; import './october/october.tabformexpandcontrols.js'; // Settings nav control import './controls/settings-nav.js'; // Backend core import './backend/backend.js'; import './backend/backend.ajax.js'; import './backend/backend.fixes.js'; ================================================ FILE: modules/backend/assets/js/october/october.alert.js ================================================ /* * Alerts * * Displays alert and confirmation dialogs * * JavaScript API: * oc.alert() * oc.confirm() * * Dependencies: * - Translations (october.lang.js) */ (function($){ if (window.oc === undefined) { window.oc = {}; } oc.alert = function(message, title) { var messageTitle = typeof title !== 'string' ? $.oc.lang.get('alert.error') : title; if (!oc.vueComponentHelpers || !oc.vueComponentHelpers.modalUtils) { alert(message); return; } oc.vueComponentHelpers.modalUtils.showAlert(messageTitle, message, { buttonText: $.oc.lang.get('alert.dismiss') }); }; oc.confirm = function(message, callback, title) { oc.confirmPromise(message, title).then(function () { callback(true); }, function () { callback(false); }); } oc.confirmPromise = function(message, title) { var messageTitle = typeof title !== 'string' ? $.oc.lang.get('alert.confirm') : title; return oc.vueComponentHelpers.modalUtils.showConfirm(messageTitle, message, {}); } // @deprecated if ($.oc === undefined) { $.oc = {}; } $.oc.alert = oc.alert; $.oc.confirm = oc.confirm; $.oc.confirmPromise = oc.confirmPromise; })(jQuery); /* * Implement alerts with AJAX framework */ $(window).on('ajaxErrorMessage', function(event, message) { if (!message) { return; } oc.alert(message); // Prevent the default alert() message event.preventDefault(); }) $(window).on('ajaxConfirmMessage', function(event, message, promise) { if (!message) { return; } oc.confirm(message, function(isConfirm) { isConfirm ? promise.resolve() : promise.reject(); }); // Prevent the default confirm() message event.preventDefault(); return true; }); ================================================ FILE: modules/backend/assets/js/october/october.datetime.js ================================================ /* * Date time converter. * See moment.js for format options. * http://momentjs.com/docs/#/displaying/format/ * * Usage: * * <time * data-datetime-control * datetime="2014-11-19 01:21:57" * data-format="dddd Do [o]f MMMM YYYY hh:mm:ss A" * data-timezone="Australia/Sydney" * data-locale="en-au">This text will be replaced</time> * * Alias options: * * time -> 6:28 AM * timeLong -> 6:28:01 AM * date -> 04/23/2016 * dateMin -> 4/23/2016 * dateLong -> April 23, 2016 * dateLongMin -> Apr 23, 2016 * dateTime -> April 23, 2016 6:28 AM * dateTimeMin -> Apr 23, 2016 6:28 AM * dateTimeLong -> Saturday, April 23, 2016 6:28 AM * dateTimeLongMin -> Sat, Apr 23, 2016 6:29 AM * */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var DateTimeConverter = function (element, options) { this.$el = $(element); this.options = options || {}; $.oc.foundation.controlUtils.markDisposable(element); Base.call(this); this.init(); } DateTimeConverter.prototype = Object.create(BaseProto); DateTimeConverter.prototype.constructor = DateTimeConverter; DateTimeConverter.prototype.init = function() { this.initDefaults(); this.datetime = this.$el.attr('datetime'); this.$el.text(this.getDateTimeValue()); this.$el.attr('title', this.datetime); this.$el.one('dispose-control', this.proxy(this.dispose)); } DateTimeConverter.prototype.dispose = function() { this.$el.off('dispose-control', this.proxy(this.dispose)); this.$el.removeData('oc.dateTimeConverter'); this.$el = null; this.options = null; this.datetime = null; BaseProto.dispose.call(this); } DateTimeConverter.prototype.initDefaults = function() { if (!this.options.timezone) { this.options.timezone = $('meta[name="backend-timezone"]').attr('content'); } if (!this.options.locale) { this.options.locale = $('meta[name="backend-locale"]').attr('content'); } if (!this.options.format) { this.options.format = 'llll'; } if (this.options.formatAlias) { this.options.format = this.getFormatFromAlias(this.options.formatAlias); } this.appTimezone = $('meta[name="app-timezone"]').attr('content'); if (!this.appTimezone) { this.appTimezone = 'UTC'; } } DateTimeConverter.prototype.getDateTimeValue = function() { if (this.$el.get(0).hasAttribute('data-ignore-timezone')) { this.appTimezone = 'UTC'; this.options.timezone = 'UTC'; } var momentObj = moment.tz(this.datetime, this.appTimezone), result; if (this.options.locale) { momentObj = momentObj.locale(this.options.locale); } if (this.options.timezone) { momentObj = momentObj.tz(this.options.timezone); } if (this.options.timeSince) { result = momentObj.fromNow(); } else if (this.options.timeTense) { result = momentObj.calendar(); } else { result = momentObj.format(this.options.format); } return result; } DateTimeConverter.prototype.getFormatFromAlias = function(alias) { var map = { time: 'LT', timeLong: 'LTS', date: 'L', dateMin: 'l', dateLong: 'LL', dateLongMin: 'll', dateTime: 'LLL', dateTimeMin: 'lll', dateTimeLong: 'LLLL', dateTimeLongMin: 'llll' }; return map[alias] ? map[alias] : 'llll'; } DateTimeConverter.DEFAULTS = { format: null, formatAlias: null, timezone: null, locale: null, timeTense: false, timeSince: false } // PLUGIN DEFINITION // ============================ var old = $.fn.dateTimeConverter $.fn.dateTimeConverter = function (option) { var args = Array.prototype.slice.call(arguments, 1), items, result; items = this.each(function () { var $this = $(this); var data = $this.data('oc.dateTimeConverter'); var options = $.extend({}, DateTimeConverter.DEFAULTS, $this.data(), typeof option == 'object' && option); if (!data) $this.data('oc.dateTimeConverter', (data = new DateTimeConverter(this, options))); if (typeof option == 'string') result = data[option].apply(data, args); if (typeof result != 'undefined') return false; }); return result ? result : items; } $.fn.dateTimeConverter.Constructor = DateTimeConverter; $.fn.dateTimeConverter.noConflict = function () { $.fn.dateTimeConverter = old; return this; } $(document).render(function () { $('time[data-datetime-control]').dateTimeConverter(); }); }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.domidmanager.js ================================================ /* * Generates unique DOM element identifiers */ +function ($) { "use strict"; var DomIdManager = function() { var indexes = 1; this.generate = function(prefix) { var result = 'id-' + (indexes ++); if (typeof prefix == 'string') { result = prefix + '-' + result; } return result; }; }; $.oc.domIdManager = new DomIdManager(); }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.filelist.js ================================================ /* * File List * * Creates a tree list of clickable folders and files. * * Data attributes: * - data-control="filelist" - enables the file list plugin * - data-group-status-handler - AJAX handler to execute when a group is collapsed or expanded by a user * * JavaScript API: * $('#list').fileList() * * Events * - open.oc.list - this event is triggered on the list element when an item is clicked. * * Dependencies: * - Null */ +function ($) { "use strict"; // FILELIST CLASS DEFINITION // ============================ var FileList = function(element, options) { this.options = options this.$el = $(element) this.init(); } FileList.DEFAULTS = { ignoreItemClick: false } FileList.prototype.init = function (){ var self = this this.$el.on('click', 'li.group > h4 > a, li.group > div.group', function() { self.toggleGroup($(this).closest('li')) return false; }); if (!this.options.ignoreItemClick) { this.$el.on('click', 'li.item > a', function(event) { var e = $.Event('open.oc.list', {relatedTarget: $(this).parent().get(0), clickEvent: event}) self.$el.trigger(e, this) return false }) } this.$el.on('ajaxUpdate', $.proxy(this.update, this)) } FileList.prototype.toggleGroup = function(group) { var $group = $(group); $group.attr('data-status') == 'expanded' ? this.collapseGroup($group) : this.expandGroup($group) } FileList.prototype.collapseGroup = function(group) { var $list = $('> ul, > div.subitems', group), self = this; $list.css('overflow', 'hidden') $list.animate({'height': 0}, { duration: 100, queue: false, complete: function() { $list.css({ 'overflow': 'visible', 'display': 'none' }) $(group).attr('data-status', 'collapsed') $(window).trigger('resize') } }) this.sendGroupStatusRequest(group, 0); } FileList.prototype.expandGroup = function(group) { var $list = $('> ul, > div.subitems', group), self = this; $list.css({ 'overflow': 'hidden', 'display': 'block', 'height': 0 }) $list.animate({'height': $list[0].scrollHeight}, { duration: 100, queue: false, complete: function() { $list.css({ 'overflow': 'visible', 'height': 'auto' }) $(group).attr('data-status', 'expanded') $(window).trigger('resize') } }) this.sendGroupStatusRequest(group, 1); } FileList.prototype.sendGroupStatusRequest = function(group, status) { if (this.options.groupStatusHandler !== undefined) { var groupId = $(group).data('group-id') if (groupId === undefined) groupId = $('> h4 a', group).text(); $(group).request(this.options.groupStatusHandler, {data: {group: groupId, status: status}}) } } FileList.prototype.markActive = function(dataId) { $('li.item', this.$el).removeClass('active') if (dataId) $('li.item[data-id="'+dataId+'"]', this.$el).addClass('active') this.dataId = dataId } FileList.prototype.update = function() { if (this.dataId !== undefined) this.markActive(this.dataId) } // FILELIST PLUGIN DEFINITION // ============================ var old = $.fn.fileList $.fn.fileList = function (option) { var args = arguments; return this.each(function () { var $this = $(this) var data = $this.data('oc.fileList') var options = $.extend({}, FileList.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.fileList', (data = new FileList(this, options))) if (typeof option == 'string') { var methodArgs = []; for (var i=1; i<args.length; i++) methodArgs.push(args[i]) data[option].apply(data, methodArgs) } }) } $.fn.fileList.Constructor = FileList // FILELIST NO CONFLICT // ================= $.fn.fileList.noConflict = function () { $.fn.fileList = old return this } // FILELIST DATA-API // =============== $(document).ready(function () { $('[data-control=filelist]').fileList() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.flyout.js ================================================ /* * Flyout plugin. */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype // FLYOUT CLASS DEFINITION // ============================ var Flyout = function(element, options) { this.$el = $(element) this.$overlay = null this.options = options this.$proxyContainer = $('#layout-sidenav-responsive'); Base.call(this) this.init() } Flyout.prototype = Object.create(BaseProto) Flyout.prototype.constructor = Flyout Flyout.prototype.dispose = function() { this.removeOverlay() this.$el.removeData('oc.flyout') this.$el = null if (this.options.flyoutToggle) { this.removeToggle() } BaseProto.dispose.call(this) } Flyout.prototype.toggle = function() { if ($(document.body).hasClass('flyout-visible')) { this.hide(); } else { this.show(); } } Flyout.prototype.show = function() { var $cells = this.$el.find('> .layout-cell'), $flyout = this.$el.find('> .flyout-content') $('[data-control=layout-sidepanel]').sidePanelTab('hideSidePanel') this.removeOverlay() for (var i = 0; i < $cells.length; i++) { var $cell = $($cells[i]), width = $cell.width() $cell.css('width', width) } this.createOverlay() window.setTimeout(this.proxy(this.setBodyClass), 1) $flyout.css('width', this.options.flyoutWidth) this.hideToggle() } Flyout.prototype.hide = function() { var $cells = this.$el.find('> .layout-cell'), $flyout = this.$el.find('> .flyout-content') for (var i = 0; i < $cells.length; i++) { var $cell = $($cells[i]) $cell.css('width', '') } $flyout.css('width', 0) window.setTimeout(this.proxy(this.removeBodyClass), 1) window.setTimeout(this.proxy(this.removeOverlayAndShowToggle), 300) } // FLYOUT INTERNAL METHODS // ============================ Flyout.prototype.init = function() { this.build() } Flyout.prototype.build = function() { if (this.options.flyoutToggle) { this.buildToggle() } } Flyout.prototype.buildToggle = function() { var $toggleContainer = $(this.options.flyoutToggle), $toggle = $('<div class="flyout-toggle"><i class="icon-chevron-right"></i></div>') $toggle.on('click', this.proxy(this.show)) $toggleContainer.append($toggle) // Build proxy for responsive menu var $proxyToggle = $('<div class="flyout-toggle"><i class="icon-chevron-right"></i></div>'); $proxyToggle.on('click', this.proxy(this.toggle)); this.$proxyContainer.append($proxyToggle); this.$proxyContainer.addClass('has-toggle'); } Flyout.prototype.removeToggle = function() { var $toggle = this.getToggle() $toggle.off('click', this.proxy(this.show)) $toggle.remove() var $proxyToggle = this.getProxyToggle() $proxyToggle.off('click', this.proxy(this.show)) $proxyToggle.remove() } Flyout.prototype.hideToggle = function() { if (!this.options.flyoutToggle) { return } this.getToggle().hide() // this.getProxyToggle().hide() } Flyout.prototype.showToggle = function() { if (!this.options.flyoutToggle) { return } this.getToggle().show() this.getProxyToggle().show() } Flyout.prototype.getToggle = function() { var $toggleContainer = $(this.options.flyoutToggle) return $toggleContainer.find('.flyout-toggle') } Flyout.prototype.getProxyToggle = function() { return this.$proxyContainer.find('.flyout-toggle') } Flyout.prototype.setBodyClass = function() { $(document.body).addClass('flyout-visible') } Flyout.prototype.removeBodyClass = function() { $(document.body).removeClass('flyout-visible') } Flyout.prototype.createOverlay = function() { this.$overlay = $('<div class="flyout-overlay"/>') var position = this.$el.offset() this.$overlay.css({ top: position.top, left: this.options.flyoutWidth }) this.$overlay.on('click', this.proxy(this.onOverlayClick)) $(document.body).on('keydown', this.proxy(this.onDocumentKeydown)) $(document.body).append(this.$overlay) } Flyout.prototype.removeOverlay = function() { if (!this.$overlay) { return } this.$overlay.off('click', this.proxy(this.onOverlayClick)) $(document.body).off('keydown', this.proxy(this.onDocumentKeydown)) this.$overlay.remove() this.$overlay = null } Flyout.prototype.removeOverlayAndShowToggle = function() { this.removeOverlay() this.showToggle() } // EVENT HANDLERS // ============================ Flyout.prototype.onOverlayClick = function() { this.hide() } Flyout.prototype.onDocumentKeydown = function(ev) { if (ev.key === 'Escape') { this.hide(); } } // FLYOUT PLUGIN DEFINITION // ============================ Flyout.DEFAULTS = { flyoutWidth: 400, flyoutToggle: null } var old = $.fn.flyout $.fn.flyout = function (option) { var args = Array.prototype.slice.call(arguments, 1), result = undefined this.each(function () { var $this = $(this) var data = $this.data('oc.flyout') var options = $.extend({}, Flyout.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.flyout', (data = new Flyout(this, options))) if (typeof option == 'string') result = data[option].apply(data, args) if (typeof result != 'undefined') return false }) return result ? result : this } $.fn.flyout.Constructor = Flyout // FLYOUT NO CONFLICT // ================= $.fn.flyout.noConflict = function () { $.fn.flyout = old return this } // FLYOUT DATA-API // =============== // Currently flyouts don't use the document render event // and can't be created dynamically (performance considerations). $(document).ready(function(){ $('div[data-control=flyout]').flyout() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.jsmodule.js ================================================ +(function($) { 'use strict'; function OctoberModuleRegistry() { this.moduleMap = new Map(); this.register = function(namespace, registrationFn) { if (this.moduleMap.has(namespace)) { console.info('Module namespace is already registered: ' + namespace); return; } this.moduleMap.set(namespace, registrationFn()); }; this.import = function(namespace) { if (!this.exists(namespace)) { throw new Error('Module namespace is not registered: ' + namespace); } return this.moduleMap.get(namespace); }; this.exists = function(namespace) { return this.moduleMap.has(namespace); }; } if (!window.oc) { window.oc = {}; } window.oc.Modules = new OctoberModuleRegistry(); // oc.Module and $.oc.module is @deprecated -sg window.oc.Module = $.oc.module = window.oc.Modules; })($); ================================================ FILE: modules/backend/assets/js/october/october.lang.js ================================================ /* * Client side translations */ if (!window.oc) { window.oc = {}; } if (!window.oc.langMessages) { window.oc.langMessages = {}; } window.oc.lang = (function(lang, messages) { lang.load = function(locale) { if (messages[locale] === undefined) { messages[locale] = {}; } lang.loadedMessages = messages[locale]; } lang.set = function(name, value) { if (name.constructor === {}.constructor) { lang.loadedMessages = { ...name, ...lang.loadedMessages }; } else { lang.loadedMessages[name] = value; } } lang.get = function(name, params) { if (!name) { return; } var result = lang.loadedMessages, defaultValue = (typeof params === "string") ? params : name; $.each(name.split('.'), function(index, value) { if (result[value] === undefined) { result = defaultValue; return false; } result = result[value]; }); if (params && typeof params === "object") { Object.keys(params).forEach(function(key) { result = result.replace(new RegExp(":" + key, "g"), params[key]); }); } return result; } if (lang.locale === undefined) { lang.locale = $('html').attr('lang') || 'en'; } if (lang.loadedMessages === undefined) { lang.load(lang.locale); } return lang; })(window.oc.lang || {}, window.oc.langMessages); // Translation helper window.oc.t = function(name, params) { return oc.lang.get(name, params); }; // Migrate jQuery if ($.oc === undefined) { $.oc = {}; } $.oc.lang = oc.lang; $.oc.langMessages = oc.langMessages; ================================================ FILE: modules/backend/assets/js/october/october.layout.js ================================================ (function($){ var OctoberLayout = function() { } OctoberLayout.prototype.setPageTitle = function(title) { var $title = $('title') if (this.pageTitleTemplate === undefined) this.pageTitleTemplate = $title.data('titleTemplate') $title.text(this.pageTitleTemplate.replace('%s', title)) } OctoberLayout.prototype.updateLayout = function(title) { var $children, $el, fixedWidth, margin $('[data-calculate-width]').each(function(){ $children = $(this).children() if ($children.length > 0) { fixedWidth = 0 $children.each(function() { $el = $(this) margin = $el.data('oc.layoutMargin') if (margin === undefined) { margin = parseInt($el.css('marginRight')) + parseInt($el.css('marginLeft')) $el.data('oc.layoutMargin', margin) } fixedWidth += $el.get(0).offsetWidth + margin }) $(this).width(fixedWidth) $(this).trigger('oc.widthFixed') } }) } if ($.oc === undefined) $.oc = {} $.oc.layout = new OctoberLayout() $(document).ready(function(){ $.oc.layout.updateLayout() window.setTimeout($.oc.layout.updateLayout, 100) }) $(window).on('resize', function() { $.oc.layout.updateLayout() }) $(window).on('oc.updateUi', function() { $.oc.layout.updateLayout() }) })(jQuery); ================================================ FILE: modules/backend/assets/js/october/october.mainmenu.js ================================================ /* * Main menu * * Dependencies: * - ResponsiveMenu (october.responsivemenu.js) */ +function ($) { "use strict"; function MainMenu() { var $mainMenuNavbar = $('#layout-mainmenu .navbar:first'), $mainMenuElement = $('.layout-mainmenu .navbar ul.mainmenu-items'), $leftMenuElement = $('#layout-mainmenu-left'), $leftMenuMainMenu = $leftMenuElement.find('[data-control=toolbar]'), $leftMenuExtrasMenu = $leftMenuElement.find('.mainmenu-extras'), $mainMenuToolbar = $('.layout-mainmenu [data-control=toolbar]'), $menuContainer = $('#layout-mainmenu'), menuHeight = $.oc.backendCalculateTopContainerOffset(), responsiveMenu = new $.oc.responsiveMenu(hideMenus), leftMenuDebounceTimer = null, leftMenuWidth = null, leftMenuLeaveDebounceTimer = null, $overlay = null, isTouch = false, showingTooltips = null, $leftMenuOverlay = null; function init() { $leftMenuElement.find('li a') .on('touchstart', onLeftMenuTouch) .on('click', onLeftMenuItemClick); $mainMenuElement.on('mouseenter', 'li', onItemHover); $mainMenuElement.on('click', 'li.has-subitems', onItemClick); $mainMenuElement.on('click', '.mainmenu-toggle', onShowResponsiveMenuClick); $leftMenuElement.on('mouseenter', onLeftMenuMouseEnter); $leftMenuElement.on('mouseleave', onLeftMenuMouseLeave); addEventListener('page:unload', hideMenus); addEventListener('backend:hidemenus', hideMenus); $mainMenuToolbar.each(function () { var dragScroll = $(this).data('oc.dragScroll'); if (dragScroll) { dragScroll.goToElement($(this).find('ul.mainmenu-items > li.active'), undefined, {'duration': 0, alignBottom: true}); } }); } function displaySubmenu($li) { var submenuIndex = $li.data('submenuIndex'), $submenu = $('.mainmenu-submenu-dropdown[data-submenu-index=' + submenuIndex + ']', $menuContainer), isLeftSideMenu = $li.closest('#layout-mainmenu-left').length > 0; $li.addClass('active-dropdown'); getOverlay().addClass('oc-show'); if (!isLeftSideMenu) { var menuLeft = $li.offset().left; $submenu.css({ top: menuHeight, left: menuLeft }); } else { $(document.body).addClass('left-menu-submenu-displayed'); var menuTop = $li.offset().top; $submenu.css({ top: menuTop, left: $leftMenuElement.outerWidth() }); } $submenu.addClass('oc-invisible'); $submenu.addClass('oc-show'); if (!isLeftSideMenu) { var menuRight = menuLeft + $submenu.width(), windowWidth = $(window).width(); if (menuRight > windowWidth - 20) { $submenu.css({ left: menuLeft - (menuRight - windowWidth) - 20 }); } } else { var submenuPosition = $submenu.position(), menuBottom = $submenu.height() + submenuPosition.top, windowHeight = window.scrollY + $(document.body).height(); if (menuBottom > windowHeight - 20) { $submenu.css({ top: submenuPosition.top - (menuBottom - windowHeight) - 20 }); } } $submenu.removeClass('oc-invisible'); addKeyListener(); } function onKeyDown(ev) { // Escape if (ev.keyCode == 27) { hideMenus(null, true); } } function onLeftMenuTouch(ev) { isTouch = true; } function onLeftMenuItemClick(ev) { if (isTouch && !$(document.body).hasClass('reveal-left-side-menu')) { onLeftMenuMouseEnter(); ev.stopPropagation(); ev.preventDefault(); return false; } } function onLeftMenuMouseEnter() { if (leftMenuLeaveDebounceTimer) { window.clearTimeout(leftMenuLeaveDebounceTimer); leftMenuLeaveDebounceTimer = null; } if ($(document.body).hasClass('reveal-left-side-menu')) { return; } if (leftMenuDebounceTimer) { window.clearTimeout(leftMenuDebounceTimer); } leftMenuDebounceTimer = window.setTimeout(showLeftMenu, 100); } function onLeftMenuMouseLeave() { if ($(document.body).hasClass('left-menu-submenu-displayed')) { return; } if (leftMenuDebounceTimer) { window.clearTimeout(leftMenuDebounceTimer); leftMenuDebounceTimer = null; } if (leftMenuLeaveDebounceTimer) { window.clearTimeout(leftMenuLeaveDebounceTimer); } leftMenuLeaveDebounceTimer = window.setTimeout(hideLeftMenu, 300); } function getLeftMenuWidth() { if (leftMenuWidth !== null) { return leftMenuWidth; } var leftMenuContainer = $leftMenuElement.closest('.left-side-menu-container'); leftMenuContainer.addClass('width-check'); var extrasWidth = 0; $('.nav-label', $leftMenuExtrasMenu).each(function () { var labelTotalWidth = $(this).offset().left + $(this).outerWidth(true) + 20; extrasWidth = Math.max(extrasWidth, labelTotalWidth); }); leftMenuWidth = Math.max($leftMenuMainMenu.outerWidth(), extrasWidth); leftMenuContainer.removeClass('width-check'); return leftMenuWidth; } function showLeftMenu() { $(document.body).addClass('reveal-left-side-menu'); if (!$leftMenuElement.data('original-width')) { $leftMenuElement.data('original-width', $leftMenuElement.width()); } addKeyListener(); getLeftMenuOverlay().addClass('oc-show'); $leftMenuElement.width(getLeftMenuWidth()); } function hideLeftMenu() { if (leftMenuLeaveDebounceTimer) { window.clearTimeout(leftMenuLeaveDebounceTimer); leftMenuLeaveDebounceTimer = null; } $leftMenuElement.width($leftMenuElement.data('original-width')); getLeftMenuOverlay().removeClass('oc-show'); $(document.body).removeClass('reveal-left-side-menu'); } function addKeyListener() { $(document).on('keydown.mainmenusubmenu', onKeyDown); } function removeKeyListener() { $(document).off('.mainmenusubmenu'); } function hideSubmenu() { $('li.active-dropdown', $mainMenuElement).removeClass('active-dropdown'); $('.mainmenu-submenu-dropdown.oc-show', $menuContainer).removeClass('oc-show'); $(document.body).removeClass('left-menu-submenu-displayed'); } function hideMenus(ev, hideAll) { var isSubmenuDisplayed = $(document.body).hasClass('left-menu-submenu-displayed'); getOverlay().removeClass('oc-show'); hideSubmenu(); removeKeyListener(); if (isSubmenuDisplayed && !hideAll) { return; } hideLeftMenu(); responsiveMenu.hide(); } function getOverlay() { if ($overlay) { return $overlay; } $overlay = $('<div class="mainmenu-submenu-overlay"></div>') .appendTo(document.body); $overlay.on('click', function (ev) { hideMenus(null, ev.pageX > $leftMenuElement.outerWidth()); }); return $overlay; } function getLeftMenuOverlay() { if ($leftMenuOverlay) { return $leftMenuOverlay; } $leftMenuOverlay = $('<div class="mainmenu-leftmenu-overlay"></div>') .appendTo(document.body); $leftMenuOverlay.on('click', hideMenus); return $leftMenuOverlay; } function onItemHover() { var wantTooltips = $mainMenuNavbar.hasClass('navbar-mode-icons'); if (wantTooltips === showingTooltips) { return; } showingTooltips = wantTooltips; $('li', $mainMenuElement).each(function() { var $li = $(this); if (wantTooltips) { $li.attr('data-tooltip-text', $('.nav-label', $li).text().trim()); } else { $li.removeAttr('data-tooltip-text'); } }); } function onItemClick(ev) { var $li = $(ev.currentTarget).closest('li'); ev.preventDefault(); if ($(document.body).hasClass('drag')) { return false; } displaySubmenu($li); return false; } function onShowResponsiveMenuClick(ev) { ev.preventDefault(); addKeyListener(); getOverlay().addClass('oc-show'); responsiveMenu.show(); return false; } init(); $.oc.mainMenu = this; this.reload = function reload(mainMenuHtml, mainMenuLeftHtml, sidenavResponsiveHtml) { if (mainMenuHtml) { $('#layout-mainmenu').html(mainMenuHtml); } if (mainMenuLeftHtml) { $('#layout-mainmenu-left').html(mainMenuLeftHtml); } if (sidenavResponsiveHtml) { $('#layout-sidenav-responsive').html(sidenavResponsiveHtml); } $.oc.mainMenu = new MainMenu(); }; } $(document).render(function() { var $this = $('.layout-mainmenu:first'); var data = $this.data('oc.mainMenu'); if (!data) $this.data('oc.mainMenu', (data = new MainMenu())); }); }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.modalfocusmanager.js ================================================ /* * Manages a stack of modal elements that can lock Tab focus */ +(function($) { 'use strict'; var ModalFocusManager = function() { var modalStack = []; function addEventAndCall(callback) { $(document).on('focusin.octoberfocusmanager', callback); callback(null); } function removeCallbacks() { $(document).off('.octoberfocusmanager'); } function findIndexByUid(uid) { for (var index = 0; index < modalStack.length; index++) { if (modalStack[index].uid == uid) { return index; } } return null; } this.push = function(focusInCallback, type, uid, isHotkeyBlocking) { removeCallbacks(); addEventAndCall(focusInCallback); modalStack.push({ focusInCallback: focusInCallback, type: type, uid: uid, isHotkeyBlocking: isHotkeyBlocking }); }; this.hasHotkeyBlockingAbove = function(uid) { var uidIndex = findIndexByUid(uid), startIndex = uidIndex !== null ? uidIndex : 0; for (var index = startIndex; index < modalStack.length; index++) { if (modalStack[index].isHotkeyBlocking) { return true; } } return false; }; this.getTop = function() { if (modalStack.length > 0) { return modalStack[modalStack.length - 1]; } return null; }; this.isUidTop = function(uid) { var top = this.getTop(); if (top === null || top.uid === undefined) { return false; } return top.uid === uid; }; this.getNumberOfType = function(type) { var result = 0; for (var index = 0; index < modalStack.length; index++) { if (modalStack[index].type == type) { result++; } } return result; }; this.pop = function() { modalStack.pop(); removeCallbacks(); if (modalStack.length > 0) { var callback = modalStack[modalStack.length - 1].focusInCallback; addEventAndCall(callback); } }; }; $.oc.modalFocusManager = new ModalFocusManager(); })(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.responsivemenu.js ================================================ /* * Responsive extension for the main menu */ +function ($) { "use strict"; function ResponsiveMenu(closeCallback) { var $mainMenuElement = $('#layout-mainmenu .navbar ul.mainmenu-items'), $menuContainer = $('#layout-mainmenu'), $responsiveMenuContainer = $('#layout-mainmenu-responsive-container'), $responsiveMainMenuPane = $responsiveMenuContainer.find('.mainmenu-pane'), $responsiveSubMenuPane = $responsiveMenuContainer.find('.submenu-pane'), $responsiveMainMenu = $responsiveMainMenuPane.find('ul.mainmenu-items'), $responsiveSubMenu = $responsiveSubMenuPane.find('ul.mainmenu-items'), $subMenuHeader = $responsiveSubMenuPane.find('.menu-header'), $subMenuHeaderMenuItem = $subMenuHeader.find('.mainmenu-item') function init() { if (!$mainMenuElement.length) { return; } transferMenuContents(); setupResponsiveMenu(); initListeners(); } function transferMenuContents() { $responsiveMainMenu.html($mainMenuElement.html()); } function updateScrollIndicator(el) { $(el.parentElement).toggleClass('scrolled', el.scrollTop > 0); } function initScrollablePanel(el) { el.addEventListener('scroll', function(evt) { updateScrollIndicator(evt.target) }, { capture: true, passive: true }); } function initListeners() { initScrollablePanel($responsiveMainMenu.get(0)); initScrollablePanel($responsiveSubMenu.get(0)); $responsiveMainMenuPane.on('click', '.mainmenu-item', onMainMenuItemClick); $responsiveSubMenuPane.on('click', 'a.go-back-link', onCloseSubmenuClick); $responsiveMainMenuPane.on('click', 'a.close-link', onMenuMenuCloseClick); } function initMenuScroll($menu) { $menu.dragScroll({ vertical: true, useNative: false, useDrag: true }); } function setupResponsiveMenu() { initMenuScroll($responsiveMainMenu); initMenuScroll($responsiveSubMenu); $(document.body).on('click', '.mainmenu-items', function() { // Do not handle menu item clicks while dragging if ($(document.body).hasClass('drag')) { return false; } }); } function onMainMenuItemClick(ev) { var $menuItem = $(ev.currentTarget), $item = $menuItem.closest('.mainmenu-item'); if (!$item.hasClass('has-subitems')) { return; } var submenuIndex = $item.data('submenuIndex'), $submenu = $menuContainer.find('.mainmenu-submenu-dropdown[data-submenu-index='+submenuIndex+']'); $responsiveSubMenu.html($submenu.html()); $subMenuHeaderMenuItem.html($menuItem.html()); $subMenuHeader.attr('data-submenu-index', submenuIndex); $(document.body).addClass('responsive-submenu-displayed'); ev.preventDefault(); } function onCloseSubmenuClick(ev) { $(document.body).removeClass('responsive-submenu-displayed'); ev.preventDefault(); } function onMenuMenuCloseClick() { closeCallback(); } this.show = function() { $responsiveMainMenu.dragScroll('goToStart'); $responsiveSubMenu.dragScroll('goToStart'); $(document.body).addClass('responsive-menu-displayed'); } this.hide = function() { $(document.body).removeClass('responsive-menu-displayed'); window.setTimeout(function() { $(document.body).removeClass('responsive-submenu-displayed'); }, 250); } init(); } $.oc.responsiveMenu = ResponsiveMenu }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.scrollbar.js ================================================ /* * Creates a scrollbar in a container. * * Note the element must have a height set for vertical, * and a width set for horizontal. * * Data attributes: * - data-control="scrollbar" - enables the scrollbar plugin * * jQuery API: * $('#area').scrollbar() */ 'use strict'; oc.registerControl('scrollbar', class extends oc.ControlBase { init() { this.el = this.element; this.options = Object.assign({ vertical: true, scrollSpeed: 2, animation: true }, this.config); this.isNative = document.documentElement.classList.contains('mobile'); this.isTouch = 'ontouchstart' in window; this.isScrollable = false; this.isLocked = false; this.dragStart = 0; this.startOffset = 0; this.eventElementName = this.options.vertical ? 'pageY' : 'pageX'; // @deprecated backwards compatibility $(this.el).data('oc.scrollbar', this); // Use native scrolling on mobile if (this.isNative) { return; } this.createScrollbar(); } connect() { if (this.isNative) { return; } this.attachEventHandlers(); this.update(); // Dispatch a ready event setTimeout(() => { oc.Events.dispatch('scrollbar:ready', { target: this.el }); }, 1); } disconnect() { if (this.isNative) { return; } window.removeEventListener('resize', this.proxy(this.update)); this.el.removeEventListener('wheel', this.proxy(this.onScrollWheel)); this.el.removeEventListener('scrollbar:goto-start', this.proxy(this.gotoStart)); } createScrollbar() { this.scrollbar = document.createElement('div'); this.scrollbar.className = 'scrollbar-scrollbar'; this.track = document.createElement('div'); this.track.className = 'scrollbar-track'; this.thumb = document.createElement('div'); this.thumb.className = 'scrollbar-thumb'; this.track.appendChild(this.thumb); this.scrollbar.appendChild(this.track); this.el.classList.add('drag-scrollbar', this.options.vertical ? 'vertical' : 'horizontal'); this.el.prepend(this.scrollbar); } attachEventHandlers() { if (this.isTouch) { this.el.addEventListener('touchstart', this.proxy(this.onTouchStart)); } else { this.thumb.addEventListener('mousedown', this.proxy(this.onDragStart)); this.track.addEventListener('mouseup', this.proxy(this.onTrackClick)); } this.el.addEventListener('wheel', this.proxy(this.onScrollWheel)); this.el.addEventListener('scrollbar:goto-start', this.proxy(this.gotoStart)); window.addEventListener('resize', this.proxy(this.update)); } onTouchStart(event) { if (event.touches.length === 1) { this.startDrag(event.touches[0]); event.stopPropagation(); } } onDragStart(event) { this.startDrag(event); } onTrackClick(event) { this.moveDrag(event); } onScrollWheel(event) { if (!this.isScrollable) { return; } let offset = this.options.vertical ? (event.deltaY || 0) : (event.deltaX || 0); this.scrollWheel(offset * this.options.scrollSpeed); event.preventDefault(); } startDrag(event) { document.body.classList.add('drag-noselect'); oc.Events.dispatch('scrollbar:scroll-start', { target: this.el }); this.dragStart = event[this.eventElementName]; this.startOffset = this.options.vertical ? this.el.scrollTop : this.el.scrollLeft; if (this.isTouch) { window.addEventListener('touchmove', this.proxy(this.moveDrag)); this.el.addEventListener('touchend', this.proxy(this.stopDrag)); } else { window.addEventListener('mousemove', this.proxy(this.moveDrag)); window.addEventListener('mouseup', this.proxy(this.stopDrag)); } } moveDrag(event) { this.isLocked = true; let offset, dragTo = event[this.eventElementName]; if (this.isTouch) { offset = this.dragStart - dragTo; } else { let ratio = this.getCanvasSize() / this.getViewportSize(); offset = (dragTo - this.dragStart) * ratio; } if (this.options.vertical) { this.el.scrollTop = this.startOffset + offset; } else { this.el.scrollLeft = this.startOffset + offset; } this.setThumbPosition(); return true; } stopDrag() { document.body.classList.remove('drag-noselect'); oc.Events.dispatch('scrollbar:scroll-end', { target: this.el }); window.removeEventListener('mousemove', this.proxy(this.moveDrag)); window.removeEventListener('mouseup', this.proxy(this.stopDrag)); } scrollWheel(offset) { this.startOffset = this.options.vertical ? this.el.scrollTop : this.el.scrollLeft; oc.Events.dispatch('scrollbar:scroll-start', { target: this.el }); if (this.options.vertical) { this.el.scrollTop += offset; } else { this.el.scrollLeft += offset; } this.setThumbPosition(); oc.Events.dispatch('scrollbar:scroll-end', { target: this.el }); return true; } update() { if (!this.scrollbar) { return; } this.scrollbar.style.display = 'none'; this.setThumbSize(); this.setThumbPosition(); this.scrollbar.style.display = 'block'; } setThumbSize() { let properties = this.calculateProperties(); this.isScrollable = properties.thumbSizeRatio < 1; this.scrollbar.classList.toggle('disabled', !this.isScrollable); if (this.options.vertical) { this.track.style.height = `${properties.canvasSize}px`; this.thumb.style.height = `${properties.thumbSize}px`; } else { this.track.style.width = `${properties.canvasSize}px`; this.thumb.style.width = `${properties.thumbSize}px`; } } setThumbPosition() { let properties = this.calculateProperties(); if (this.options.vertical) { this.thumb.style.top = `${properties.thumbPosition}px`; } else { this.thumb.style.left = `${properties.thumbPosition}px`; } } calculateProperties() { let viewportSize = this.getViewportSize(); let canvasSize = this.getCanvasSize(); let scrollAmount = this.options.vertical ? this.el.scrollTop : this.el.scrollLeft; let offset = 1; let thumbSizeRatio = viewportSize / (canvasSize - offset); let thumbSize = viewportSize * thumbSizeRatio; let thumbPositionRatio = scrollAmount / (canvasSize - viewportSize); let thumbPosition = ((viewportSize - thumbSize) * thumbPositionRatio) + scrollAmount; return { viewportSize, canvasSize, scrollAmount, thumbSizeRatio, thumbSize, thumbPosition }; } getViewportSize() { return this.options.vertical ? this.el.clientHeight : this.el.clientWidth; } getCanvasSize() { return this.options.vertical ? this.el.scrollHeight : this.el.scrollWidth; } gotoStart() { if (this.options.vertical) { this.el.scrollTop = 0; } else { this.el.scrollLeft = 0; } this.update(); } gotoElement(element, callback) { // @deprecated jQuery if (element && element.jquery) { element = element.get(0); } const target = typeof element === 'string' ? document.querySelector(element) : element; if (!target) { return; } const isVertical = this.options.vertical; const scrollProp = isVertical ? 'scrollTop' : 'scrollLeft'; const offsetProp = isVertical ? 'offsetTop' : 'offsetLeft'; const sizeProp = isVertical ? 'offsetHeight' : 'offsetWidth'; const containerSizeProp = isVertical ? 'clientHeight' : 'clientWidth'; const containerScrollProp = isVertical ? 'scrollHeight' : 'scrollWidth'; let targetPosition = target[offsetProp]; let maxScroll = targetPosition; // Ensure we do not scroll beyond container limits maxScroll = Math.max(0, Math.min(maxScroll, this.el[containerScrollProp] - this.el[containerSizeProp])); if (this.options.animation) { this.smoothScrollTo(scrollProp, maxScroll, { duration: 300, complete: () => { this.setThumbPosition(); if (callback) { callback(); } } }); } else { this.el[scrollProp] = maxScroll; this.setThumbPosition(); if (callback) { callback(); } } return this; } // Helper function for smooth scrolling smoothScrollTo(property, value, params) { const start = this.el[property]; const change = value - start; const startTime = performance.now(); const duration = params.duration || 300; const animateScroll = (currentTime) => { const elapsed = currentTime - startTime; const progress = Math.min(elapsed / duration, 1); this.el[property] = start + change * progress; if (elapsed < duration) { requestAnimationFrame(animateScroll); } else if (params.complete) { params.complete(); } }; requestAnimationFrame(animateScroll); } // @deprecated this control disposes itself dispose() {} }); // jQuery Plugin Definition (For Backwards Compatibility) $.fn.scrollbar = function (config) { this.each((index, element) => { config = config || {}; for (const key in config) { if (key.startsWith('scroll')) { element.dataset[key] = config[key]; } } if (!element.matches('[data-control~="scrollbar"]')) { element.dataset.control = ((element.dataset.control || '') + ' scrollbar').trim(); } }); }; ================================================ FILE: modules/backend/assets/js/october/october.scrollpad.js ================================================ /* * ScrollPad plugin. * * This plugin creates a scrollable area with features similar (but more limited) * to october.scrollbar.js, with virtual scroll bars. This plugin is more lightweight * in terms of calculations and more responsive. It doesn't use scripting for scrolling, * instead it uses the native scrolling and listens for the onscroll event to update * the virtual scroll bars. * * The plugin is partially based on Trackpad Scroll Emulator * https://github.com/jnicol/trackpad-scroll-emulator, cleaned up for the better CPU and * memory (DOM references) management. * * Expected markup: * <div class="control-scrollpad" data-control="scrollpad" data-direction="vertical"> * <div> * <div> * The content goes here. The two wrapping * DIV elements are required. * </div> * </div> * </div> * * Data attributes: * - data-control="scrollpad" - enables the plugin. * - data-direction="vertical|horizontal" - sets the scrolling direction. * * JavaScript API: * $('#area').scrollpad({direction: 'vertical'}) * $('#area').scrollpad('dispose') * $('#area').scrollpad('scrollToStart') * * TODO: In FireFox the control in the horizontal mode displays the native scrollbars, * because negative margin-bottom in the scrollable element doesn't work for some reason. * Try to align the scrollable element with absolute positioning (negative right and bottom) * instead of negative margins. * */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype // SCROLLPAD CLASS DEFINITION // ============================ var Scrollpad = function(element, options) { this.$el = $(element) this.scrollbarElement = null this.dragHandleElement = null this.scrollContentElement = null this.contentElement = null this.options = options this.scrollbarSize = null this.updateScrollbarTimer = null this.dragOffset = null Base.call(this) // // Initialization // this.init() $.oc.foundation.controlUtils.markDisposable(element) } Scrollpad.prototype = Object.create(BaseProto) Scrollpad.prototype.constructor = Scrollpad Scrollpad.prototype.dispose = function() { this.unregisterHandlers() this.$el.get(0).removeChild(this.scrollbarElement) this.$el.removeData('oc.scrollpad') this.$el = null this.scrollbarElement = null this.dragHandleElement = null this.scrollContentElement = null this.contentElement = null BaseProto.dispose.call(this) } Scrollpad.prototype.scrollToStart = function() { var scrollAttr = this.options.direction == 'vertical' ? 'scrollTop' : 'scrollLeft' this.scrollContentElement[scrollAttr] = 0 } Scrollpad.prototype.update = function() { this.updateScrollbarSize() } // SCROLLPAD INTERNAL METHODS // ============================ Scrollpad.prototype.init = function() { this.build() this.setScrollContentSize() this.registerHandlers() } Scrollpad.prototype.build = function() { var el = this.$el.get(0) this.scrollContentElement = el.children[0] this.contentElement = this.scrollContentElement.children[0] this.$el.prepend('<div class="scrollpad-scrollbar"><div class="drag-handle"></div></div>') this.scrollbarElement = el.querySelector('.scrollpad-scrollbar') this.dragHandleElement = el.querySelector('.scrollpad-scrollbar > .drag-handle') } Scrollpad.prototype.registerHandlers = function() { this.$el.on('mouseenter', this.proxy(this.onMouseEnter)) this.$el.on('mouseleave', this.proxy(this.onMouseLeave)) this.$el.one('dispose-control', this.proxy(this.dispose)) this.scrollContentElement.addEventListener('scroll', this.proxy(this.onScroll)) this.dragHandleElement.addEventListener('mousedown', this.proxy(this.onStartDrag)) } Scrollpad.prototype.unregisterHandlers = function() { this.$el.off('mouseenter', this.proxy(this.onMouseEnter)) this.$el.off('mouseleave', this.proxy(this.onMouseLeave)) this.$el.off('dispose-control', this.proxy(this.dispose)) this.scrollContentElement.removeEventListener('scroll', this.proxy(this.onScroll)) this.dragHandleElement.removeEventListener('mousedown', this.proxy(this.onStartDrag)) document.removeEventListener('mousemove', this.proxy(this.onMouseMove)) document.removeEventListener('mouseup', this.proxy(this.onEndDrag)) } Scrollpad.prototype.setScrollContentSize = function() { var scrollbarSize = this.getScrollbarSize() if (this.options.direction == 'vertical') this.scrollContentElement.setAttribute('style', 'margin-right: -' + scrollbarSize + 'px') else this.scrollContentElement.setAttribute('style', 'margin-bottom: -' + scrollbarSize + 'px') } Scrollpad.prototype.getScrollbarSize = function() { if (this.scrollbarSize !== null) return this.scrollbarSize var testerElement = document.createElement('div') testerElement.setAttribute('class', 'scrollpad-scrollbar-size-tester') testerElement.appendChild(document.createElement('div')) document.body.appendChild(testerElement) var width = testerElement.offsetWidth, innerWidth = testerElement.querySelector('div').offsetWidth document.body.removeChild(testerElement) // Some magic for FireFox, see // https://github.com/jnicol/trackpad-scroll-emulator/blob/master/jquery.trackpad-scroll-emulator.js if (width === innerWidth && navigator.userAgent.toLowerCase().indexOf('firefox') > -1) return this.scrollbarSize = 17 return this.scrollbarSize = width - innerWidth } Scrollpad.prototype.updateScrollbarSize = function() { this.scrollbarElement.removeAttribute('data-hidden') var contentSize = this.options.direction == 'vertical' ? this.contentElement.scrollHeight : this.contentElement.scrollWidth, scrollOffset = this.options.direction == 'vertical' ? this.scrollContentElement.scrollTop : this.scrollContentElement.scrollLeft, scrollbarSize = this.options.direction == 'vertical' ? this.scrollbarElement.offsetHeight : this.scrollbarElement.offsetWidth, scrollbarRatio = scrollbarSize / contentSize, handleOffset = Math.round(scrollbarRatio * scrollOffset) + 2, handleSize = Math.floor(scrollbarRatio * (scrollbarSize - 2)) - 2; if (scrollbarSize < contentSize) { if (this.options.direction == 'vertical') this.dragHandleElement.setAttribute('style', 'top: ' + handleOffset + 'px; height: ' + handleSize + 'px') else this.dragHandleElement.setAttribute('style', 'left: ' + handleOffset + 'px; width: ' + handleSize + 'px') this.scrollbarElement.removeAttribute('data-hidden') } else this.scrollbarElement.setAttribute('data-hidden', true) } Scrollpad.prototype.displayScrollbar = function() { this.clearUpdateScrollbarTimer() this.updateScrollbarSize() this.scrollbarElement.setAttribute('data-visible', 'true') } Scrollpad.prototype.hideScrollbar = function() { this.scrollbarElement.removeAttribute('data-visible') } Scrollpad.prototype.clearUpdateScrollbarTimer = function() { if (this.updateScrollbarTimer === null) return clearTimeout(this.updateScrollbarTimer) this.updateScrollbarTimer = null } // EVENT HANDLERS // ============================ Scrollpad.prototype.onMouseEnter = function() { this.displayScrollbar() } Scrollpad.prototype.onMouseLeave = function() { this.hideScrollbar() } Scrollpad.prototype.onScroll = function() { if (this.updateScrollbarTimer !== null) return this.updateScrollbarTimer = setTimeout(this.proxy(this.displayScrollbar), 10) } Scrollpad.prototype.onStartDrag = function(ev) { $.oc.foundation.event.stop(ev) var pageCoords = $.oc.foundation.event.pageCoordinates(ev), eventOffset = this.options.direction == 'vertical' ? pageCoords.y : pageCoords.x, handleCoords = $.oc.foundation.element.absolutePosition(this.dragHandleElement), handleOffset = this.options.direction == 'vertical' ? handleCoords.top : handleCoords.left this.dragOffset = eventOffset - handleOffset document.addEventListener('mousemove', this.proxy(this.onMouseMove)) document.addEventListener('mouseup', this.proxy(this.onEndDrag)) } Scrollpad.prototype.onMouseMove = function(ev) { $.oc.foundation.event.stop(ev) var eventCoordsAttr = this.options.direction == 'vertical' ? 'y' : 'x', elementCoordsAttr = this.options.direction == 'vertical' ? 'top' : 'left', offsetAttr = this.options.direction == 'vertical' ? 'offsetHeight' : 'offsetWidth', scrollAttr = this.options.direction == 'vertical' ? 'scrollTop' : 'scrollLeft' var eventOffset = $.oc.foundation.event.pageCoordinates(ev)[eventCoordsAttr], scrollbarOffset = $.oc.foundation.element.absolutePosition(this.scrollbarElement)[elementCoordsAttr], dragPos = eventOffset - scrollbarOffset - this.dragOffset, scrollbarSize = this.scrollbarElement[offsetAttr], contentSize = this.contentElement[offsetAttr], dragPerc = dragPos / scrollbarSize if (dragPerc > 1) dragPerc = 1 var scrollPos = dragPerc * contentSize; this.scrollContentElement[scrollAttr] = scrollPos } Scrollpad.prototype.onEndDrag = function(ev) { document.removeEventListener('mousemove', this.proxy(this.onMouseMove)) document.removeEventListener('mouseup', this.proxy(this.onEndDrag)) } // SCROLLPAD PLUGIN DEFINITION // ============================ Scrollpad.DEFAULTS = { direction: 'vertical' } var old = $.fn.scrollpad $.fn.scrollpad = function (option) { var args = Array.prototype.slice.call(arguments, 1), result = undefined this.each(function () { var $this = $(this) var data = $this.data('oc.scrollpad') var options = $.extend({}, Scrollpad.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.scrollpad', (data = new Scrollpad(this, options))) if (typeof option == 'string') result = data[option].apply(data, args) if (typeof result != 'undefined') return false }) return result ? result : this } $.fn.scrollpad.Constructor = Scrollpad // SCROLLPAD NO CONFLICT // ================= $.fn.scrollpad.noConflict = function () { $.fn.scrollpad = old return this } // SCROLLPAD DATA-API // =============== $(document).on('render', function(){ $('div[data-control=scrollpad]').scrollpad() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.sidenav-tree.js ================================================ /* @deprecated v4 -sg */ /* * Side navigation tree * * Data attributes: * - data-control="sidenav-tree" - enables the plugin * - data-tree-name - unique name of the tree control. The name is used for storing user configuration in the browser cookies. * * JavaScript API: * $('#tree').sidenavTree() * * Dependencies: * - Null */ +function ($) { "use strict"; // SIDENAVTREE CLASS DEFINITION // ============================ var SidenavTree = function(element, options) { this.options = options; this.$el = $(element); this.init(); } SidenavTree.DEFAULTS = { treeName: 'sidenav_tree', rememberSearch: false } SidenavTree.prototype.init = function (){ var self = this; $(document.body).addClass('has-sidenav-tree'); this.statusCookieName = this.options.treeName + 'groupStatus'; this.searchCookieName = this.options.treeName + 'search'; this.$searchInput = $(this.options.searchInput); this.$el.on('click', 'li > div.group', function() { self.toggleGroup($(this).closest('li')); return false; }) this.$searchInput.on('input', function(){ self.handleSearchChange(); }) if (this.options.rememberSearch) { var searchTerm = Cookies.get(this.searchCookieName); if (searchTerm !== undefined && searchTerm.length > 0) { this.$searchInput.val(searchTerm); this.applySearch(); } } var scrollbar = $('[data-control=scrollbar]', this.$el).data('oc.scrollbar'), active = $('li.active', this.$el); if (active.length > 0) { scrollbar.gotoElement(active); } } SidenavTree.prototype.toggleGroup = function(group) { var $group = $(group), status = $group.attr('data-status'); status === undefined || status == 'expanded' ? this.collapseGroup($group) : this.expandGroup($group); } SidenavTree.prototype.collapseGroup = function(group) { var $list = $('> ul', group), self = this; $list.css('overflow', 'hidden'); $list.animate({ 'height': 0 }, { duration: 100, queue: false, complete: function() { $list.css({ 'overflow': 'visible', 'display': 'none' }) $(group).attr('data-status', 'collapsed') $(window).trigger('oc.updateUi') self.saveGroupStatus($(group).data('group-code'), true) } }); } SidenavTree.prototype.expandGroup = function(group, duration) { var $list = $('> ul', group), self = this; duration = duration === undefined ? 100 : duration; $list.css({ 'overflow': 'hidden', 'height': 0 }); $list.animate({'height': $list[0].scrollHeight}, { duration: duration, queue: false, complete: function() { $list.css({ 'overflow': 'visible', 'height': 'auto', 'display': '' }); $(group).attr('data-status', 'expanded'); $(window).trigger('oc.updateUi'); self.saveGroupStatus($(group).data('group-code'), false); } }) } SidenavTree.prototype.saveGroupStatus = function(groupCode, collapsed) { var collapsedGroups = Cookies.get(this.statusCookieName), updatedGroups = []; if (collapsedGroups === undefined) { collapsedGroups = ''; } collapsedGroups = collapsedGroups.split('|'); $.each(collapsedGroups, function() { if (groupCode != this) { updatedGroups.push(this); } }) if (collapsed) { updatedGroups.push(groupCode); } Cookies.set(this.statusCookieName, updatedGroups.join('|'), { expires: 30, path: '/' }); } SidenavTree.prototype.handleSearchChange = function() { var lastValue = this.$searchInput.data('oc.lastvalue'); if (lastValue !== undefined && lastValue == this.$searchInput.val()) { return; } this.$searchInput.data('oc.lastvalue', this.$searchInput.val()); if (this.dataTrackInputTimer !== undefined) { window.clearTimeout(this.dataTrackInputTimer); } var self = this; this.dataTrackInputTimer = window.setTimeout(function(){ self.applySearch(); }, 300); Cookies.set(this.searchCookieName, $.trim(this.$searchInput.val()), { expires: 30, path: '/' }); } SidenavTree.prototype.applySearch = function() { var query = $.trim(this.$searchInput.val()), words = query.toLowerCase().split(' '), visibleGroups = [], visibleItems = [], self = this; if (query.length == 0) { $('li', this.$el).removeClass('hidden'); this.$el.removeClass('is-searching'); return; } this.$el.addClass('is-searching'); /* * Find visible groups and items */ $('ul.top-level > li', this.$el).each(function() { var $li = $(this); if (self.textContainsWords($('div.group h3', $li).text(), words)) { visibleGroups.push($li.get(0)); $('ul li', $li).each(function(){ visibleItems.push(this); }); } else { $('ul li', $li).each(function(){ if (self.textContainsWords($(this).text(), words) || self.textContainsWords($(this).data('keywords'), words)) { visibleGroups.push($li.get(0)); visibleItems.push(this); } }) } }) /* * Hide invisible groups and items */ $('ul.top-level > li', this.$el).each(function() { var $li = $(this), groupIsVisible = $.inArray(this, visibleGroups) !== -1; $li.toggleClass('hidden', !groupIsVisible); if (groupIsVisible) { self.expandGroup($li, 0); } $('ul li', $li).each(function(){ var $itemLi = $(this); $itemLi.toggleClass('hidden', $.inArray(this, visibleItems) == -1); }) }); $(window).trigger('resize'); return false; } SidenavTree.prototype.textContainsWords = function(text, words) { text = text.toLowerCase(); for (var i = 0; i < words.length; i++) { if (text.indexOf(words[i]) === -1) { return false; } } return true; } // SIDENAVTREE PLUGIN DEFINITION // ============================ var old = $.fn.sidenavTree $.fn.sidenavTree = function (option) { var args = arguments; return this.each(function () { var $this = $(this) var data = $this.data('oc.sidenavTree') var options = $.extend({}, SidenavTree.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.sidenavTree', (data = new SidenavTree(this, options))) if (typeof option == 'string') { var methodArgs = []; for (var i=1; i<args.length; i++) methodArgs.push(args[i]) data[option].apply(data, methodArgs) } }) } $.fn.sidenavTree.Constructor = SidenavTree // SIDENAVREE NO CONFLICT // ================= $.fn.sidenavTree.noConflict = function () { $.fn.sidenavTree = old return this } // SIDENAVTREE DATA-API // =============== $(document).render(function () { $('[data-control=sidenav-tree]').sidenavTree(); }); }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.sidenav.js ================================================ /* * Side Navigation * * Data attributes: * - data-control="sidenav" - enables the side navigation plugin * * JavaScript API: * $('#nav').sideNav() * $.oc.sideNav.setCounter('cms/partials', 5); - sets the counter value for a particular menu item * $.oc.sideNav.increaseCounter('cms/partials', 5); - increases the counter value for a particular menu item * $.oc.sideNav.dropCounter('cms/partials'); - drops the counter value for a particular menu item * * Dependencies: * - Drag Scroll (october.dragscroll.js) */ +function ($) { "use strict"; if ($.oc === undefined) $.oc = {} // SIDENAV CLASS DEFINITION // ============================ var SideNav = function(element, options) { this.options = options this.$el = $(element) this.$list = $('ul', this.$el) this.$items = $('li', this.$list) this.init(); this.initResponsive(); } SideNav.DEFAULTS = { activeClass: 'active' } SideNav.prototype.init = function (){ var self = this this.$list.dragScroll({ vertical: true, useNative: false, useDrag: true, start: function() { self.$list.addClass('drag') }, stop: function() { self.$list.removeClass('drag') }, scrollClassContainer: self.$el, scrollMarkerContainer: self.$el }) this.$list.on('click', function() { /* Do not handle menu item clicks while dragging */ if (self.$list.hasClass('drag')) { return false } }) } // Proxy responsive menu to desktop menu SideNav.prototype.initResponsive = function (){ var $sideNav = $('#layout-sidenav-responsive'), $items = $('ul li', $sideNav), self = this; $items.click(function() { var itemId = $(this).data('menu-item'); if (!itemId) { return; } if ($(this).data('no-side-panel')) { return } $items .removeClass(self.options.activeClass) .filter('[data-menu-item='+itemId+']') .addClass(self.options.activeClass); $('[data-menu-item='+itemId+']:first', self.$list).trigger('click'); }); }; SideNav.prototype.unsetActiveItem = function (itemId){ this.$items.removeClass(this.options.activeClass) } SideNav.prototype.setActiveItem = function (itemId){ if (!itemId) { return } this.$items .removeClass(this.options.activeClass) .filter('[data-menu-item='+itemId+']') .addClass(this.options.activeClass) } function setCounterValue($counter, value){ $counter.toggleClass('empty', value == 0) $counter.text(value) } function setCountersValue(itemId, $el, value) { setCounterValue($('span.counter[data-menu-id="'+itemId+'"]', $el), value) setCounterValue($('span.counter[data-menu-id="'+itemId+'"]', '#layout-sidenav-responsive'), value) setCounterValue($('span.counter[data-menu-id="'+itemId+'"]', '#layout-mainmenu'), value) } SideNav.prototype.setCounter = function (itemId, value){ setCountersValue(itemId, this.$el, value) return this } SideNav.prototype.increaseCounter = function (itemId, value){ var $counter = $('span.counter[data-menu-id="'+itemId+'"]', this.$el) var originalValue = parseInt($counter.text()) if (isNaN(originalValue)) originalValue = 0 var newValue = value + originalValue setCountersValue(itemId, this.$el, newValue) return this } SideNav.prototype.dropCounter = function (itemId){ this.setCounter(itemId, 0) return this } // SIDENAV PLUGIN DEFINITION // ============================ var old = $.fn.sideNav; $.fn.sideNav = function (option) { var args = Array.prototype.slice.call(arguments, 1), result this.each(function () { var $this = $(this) var data = $this.data('oc.sideNav') var options = $.extend({}, SideNav.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.sideNav', (data = new SideNav(this, options))) if (typeof option == 'string') result = data[option].apply(data, args) if (typeof result != 'undefined') return false if ($.oc.sideNav === undefined) $.oc.sideNav = data }) return result ? result : this } $.fn.sideNav.Constructor = SideNav; // SIDENAV NO CONFLICT // ================= $.fn.sideNav.noConflict = function () { $.fn.sideNav = old return this } // SIDENAV DATA-API // =============== $(document).ready(function(){ $('[data-control="sidenav"]').sideNav(); }); }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.sidepaneltab.js ================================================ /* * Side Panel Tabs */ +function ($) { "use strict"; var SidePanelTab = function(element, options) { this.options = options; this.$el = $(element); this.init(); } SidePanelTab.prototype.init = function() { var self = this; this.tabOpenDelay = 200; this.tabOpenTimeout = undefined; this.panelOpenTimeout = undefined; this.$sideNav = $('#layout-sidenav'); this.$sideNavRes = $('#layout-sidenav-responsive'); this.$sideNavItems = $('ul li', this.$sideNav); this.$sidePanelItems = $('[data-content-id]', this.$el); this.sideNavWidth = $('#layout-sidenav').outerWidth(); this.mainNavHeight = $.oc.backendCalculateTopContainerOffset(); this.panelVisible = false; this.visibleItemId = false; this.$sideNavItems.click(function() { if ($(this).data('no-side-panel')) { return } if ($(window).width() < self.options.breakpoint) { if ($(this).data('menu-item') == self.visibleItemId && self.panelVisible) { self.hideSidePanel() return } else { self.displaySidePanel() } } self.displayTab(this) return false }) $('#layout-body').click(function() { if (self.panelVisible) { self.hideSidePanel() return false } }) self.$el.on('close.oc.sidePanel', function() { self.hideSidePanel() }) this.updateActiveTab() } SidePanelTab.prototype.displayTab = function(menuItem) { var menuItemId = $(menuItem).data('menu-item') this.visibleItemId = menuItemId $.oc.sideNav.setActiveItem(menuItemId) this.$sidePanelItems.each(function() { var $el = $(this) $el.toggleClass('oc-hide', $el.data('content-id') != menuItemId) }) $(window).trigger('resize') } SidePanelTab.prototype.displaySidePanel = function() { $(document.body).addClass('display-side-panel') if (this.$sideNavRes.is(':visible')) { this.mainNavHeight = $.oc.backendCalculateTopContainerOffset() + this.$sideNavRes.outerHeight(); } if ($('#layout-sidenav').is(':visible')) { this.sideNavWidth = $('#layout-sidenav').outerWidth(); } else { this.sideNavWidth = 0; } this.$el.appendTo('#layout-canvas') this.panelVisible = true this.$el.css({ left: this.sideNavWidth, top: this.mainNavHeight }) this.updatePanelPosition() $(window).trigger('resize') } SidePanelTab.prototype.hideSidePanel = function() { $(document.body).removeClass('display-side-panel') if (this.$el.next('#layout-body').length == 0) { $('#layout-body').before(this.$el) } this.panelVisible = false this.updateActiveTab() } SidePanelTab.prototype.updatePanelPosition = function() { this.$el.height($(document).height() - this.mainNavHeight) if (this.panelVisible && $(window).width() > this.options.breakpoint) { this.hideSidePanel() } } SidePanelTab.prototype.updateActiveTab = function() { if (!this.panelVisible && ($(window).width() < this.options.breakpoint)) { $.oc.sideNav.unsetActiveItem() } else { $.oc.sideNav.setActiveItem(this.visibleItemId) } } SidePanelTab.DEFAULTS = { breakpoint: 769 } // PLUGIN DEFINITION // ============================ var old = $.fn.sidePanelTab $.fn.sidePanelTab = function (option) { return this.each(function() { var $this = $(this) var data = $this.data('oc.sidePanelTab') var options = $.extend({}, SidePanelTab.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.sidePanelTab', (data = new SidePanelTab(this, options))) if (typeof option == 'string') data[option].call(data) }) } $.fn.sidePanelTab.Constructor = SidePanelTab // NO CONFLICT // ================= $.fn.sidePanelTab.noConflict = function() { $.fn.sidePanelTab = old return this } // DATA-API // ============ $(document).ready(function(){ $('[data-control=layout-sidepanel]').sidePanelTab() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.simplelist.js ================================================ /* * SimpleList control. * * Data attributes: * - data-control="simplelist" - enables the simplelist plugin * * JavaScript API: * $('#simplelist').simplelist() * */ +function ($) { "use strict"; var SimpleList = function (element, options) { var $el = this.$el = $(element); this.options = options || {}; // Make each list inside sortable if ($el.hasClass('is-sortable')) { var sortableOptions = { distance: 10 } if (this.options.sortableHandle) { sortableOptions.handle = this.options.sortableHandle; } if ($el.find('.drag-handle').length > 0) { sortableOptions.handle = '.drag-handle'; } $el.find('> ul, > ol').each(function() { Sortable.create(this, sortableOptions); }); } // Inject a scrollbar container if ($el.hasClass('is-scrollable')) { $el.wrapInner($('<div />').addClass('control-scrollbar')); var $scrollbar = $el.find('>.control-scrollbar:first'); $scrollbar.scrollbar(); } } SimpleList.DEFAULTS = { sortableHandle: null } // SIMPLE LIST PLUGIN DEFINITION // ============================ var old = $.fn.simplelist $.fn.simplelist = function (option) { return this.each(function () { var $this = $(this) var data = $this.data('oc.simplelist') var options = $.extend({}, SimpleList.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.simplelist', (data = new SimpleList(this, options))) }) } $.fn.simplelist.Constructor = SimpleList // SIMPLE LIST NO CONFLICT // ================= $.fn.simplelist.noConflict = function () { $.fn.simplelist = old return this } // SIMPLE LIST DATA-API // =============== $(document).render(function(){ $('[data-control="simplelist"]').simplelist() }) }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.snackbar.js ================================================ /* * Backend Snackbar system * * JavaScript API: * $.oc.snackbar.show('Message', {timeout: 5000, action: {label: 'Retry', callback: onRetry}}); * * Snackbars disappear automatically, but can be dismissed by users. * The default timeout is 4 seconds. The action parameter is optional. * Action label and callback properties are required. */ +(function($) { 'use strict'; if ($.oc === undefined) $.oc = {}; var Snackbar = function() { var queue = [], lastUniqueId = 0, displayedMessage = null; function validateOptions(options) { if (options === undefined) { return; } if (typeof options !== 'object') { throw new Error('Snackbar options must be an object'); } if (options.replace !== undefined) { if (typeof options.replace !== 'number') { throw new Error('Snackbar options.replace must be a number'); } } if (options.timeout !== undefined) { if (typeof options.timeout !== 'number') { throw new Error('Snackbar options.timeout must be a number'); } if (options.timeout < 2000) { throw new Error('Snackbar options.timeout cannot be lower than 2000'); } if (options.timeout > 8000) { throw new Error('Snackbar options.timeout cannot be higher than 8000'); } } if (options.action !== undefined) { if (typeof options.action !== 'object') { throw new Error('Snackbar options.action must be an object'); } if (typeof options.action.label !== 'string') { throw new Error('Snackbar options.action.label must be a string'); } if (typeof options.action.callback !== 'function') { throw new Error('Snackbar options.action.callback must be a function'); } } } function runQueue() { if (displayedMessage !== null) { return; } var parameters = queue.shift(); if (parameters === undefined) { return; } buildSnackbar(parameters); } function makeUniqueId() { return ++lastUniqueId; } function buildSnackbar(parameters) { displayedMessage = { uniqueId: parameters.uniqueId }; var $element = $( '\ <div class="october-snackbar"> \ <div class="snackbar-label"></div> \ <button class="snackbar-dismiss" aria-title="Dismiss">X</button> \ </div>' ), $label = $element.find('.snackbar-label'); $label.text(parameters.message); $element.find('.snackbar-dismiss').one('click.snackbar', function() { hideSnackbar($element, parameters.options); }); if (parameters.options && parameters.options.action) { var $actionButton = $('<button class="snackbar-action"></button>'); $actionButton.text(parameters.options.action.label); $actionButton.one('click.snackbar', function() { parameters.options.action.callback(); hideSnackbar($element, parameters.options); }); $actionButton.insertAfter($label); } $(document.body).append($element); displayedMessage.element = $element; displayedMessage.uniqueId = parameters.uniqueId; displayedMessage.options = parameters.options; setTimeout(function() { $element.addClass('enter'); setTimeout(function() { $element.addClass('show-snackbar'); startHideTimeout($element, parameters.options); }, 20); }, 1); } function startHideTimeout($element, options) { var timeout = 2000; if (options && options.timeout) { timeout = options.timeout; } options.timeoutId = setTimeout(function() { hideSnackbar($element, options); }, timeout); } function hideSnackbar($element, options) { $element.find('button').off('.snackbar'); $element.removeClass('show-snackbar'); clearTimeout(options.timeoutId); setTimeout(function() { displayedMessage = null; $element.remove(); runQueue(); }, 210); } function forceHideSnackbar($element, options) { clearTimeout(options.timeoutId); options.timeoutId = setTimeout(function() { hideSnackbar($element, options); }, 200); } function removeFromQueue(uniqueId) { for (var index = 0; index < queue.length; index++) { if (queue[index].uniqueId == uniqueId) { queue.splice(index, 1); return; } } } this.show = function(message, options) { validateOptions(options); if (options && options.replace) { if (displayedMessage && options.replace === displayedMessage.uniqueId) { forceHideSnackbar(displayedMessage.element, displayedMessage.options); } else { removeFromQueue(options.replace); } } var uniqueId = makeUniqueId(); queue.push({ message: message, options: options || {}, uniqueId: uniqueId }); runQueue(); return uniqueId; }; this.hide = function(uniqueId) { if (displayedMessage && uniqueId === displayedMessage.uniqueId) { forceHideSnackbar(displayedMessage.element, displayedMessage.options); } }; }; oc.snackbar = new Snackbar(); // @deprecated $.oc.snackbar = oc.snackbar; })(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.tabformexpandcontrols.js ================================================ /* * Extends the fancy tabs layout with expand controls in the tab * form sections. See main Builder page for example. * TODO: A similar layout is used in the CMS, Pages and Builder areas, * but only Builder uses this class. */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var TabFormExpandControls = function ($tabsControlElement, options) { this.$tabsControlElement = $tabsControlElement this.options = $.extend(TabFormExpandControls.DEFAULTS, typeof options == 'object' && options) this.tabsControlId = null Base.call(this) this.init() } TabFormExpandControls.prototype = Object.create(BaseProto) TabFormExpandControls.prototype.constructor = TabFormExpandControls TabFormExpandControls.prototype.init = function() { this.tabsControlId = this.$tabsControlElement.attr('id') if (!this.tabsControlId) { throw new Error('The tab controls element should have the id attribute value.') } this.registerHandlers() } TabFormExpandControls.prototype.dispose = function() { this.unregisterHandlers() this.$tabsControlElement = null BaseProto.dispose.call(this) } TabFormExpandControls.prototype.registerHandlers = function() { this.$tabsControlElement.on('initTab.oc.tab', this.proxy(this.initTab)) this.$tabsControlElement.on('click', '[data-control="tabless-collapse-icon"]', this.proxy(this.tablessCollapseClicked)) this.$tabsControlElement.on('click', '[data-control="primary-collapse-icon"]', this.proxy(this.primaryCollapseClicked)) } TabFormExpandControls.prototype.unregisterHandlers = function() { this.$tabsControlElement.off('initTab.oc.tab', this.proxy(this.initTab)) this.$tabsControlElement.off('click', '[data-control="tabless-collapse-icon"]', this.proxy(this.tablessCollapseClicked)) this.$tabsControlElement.off('click', '[data-control="primary-collapse-icon"]', this.proxy(this.primaryCollapseClicked)) } TabFormExpandControls.prototype.initTab = function(ev, data) { if ($(ev.target).attr('id') != this.tabsControlId) return var $primaryPanel = this.findPrimaryPanel(data.pane), $panel = $('.form-tabless-fields', data.pane), $secondaryPanel = this.findSecondaryPanel(data.pane), hasSecondaryTabs = $secondaryPanel.length > 0 $secondaryPanel.addClass('secondary-content-tabs') $panel.append(this.createTablessCollapseIcon()) if (!hasSecondaryTabs) { $('.tab-pane', $primaryPanel).addClass('pane-compact') } $('.nav-tabs', $primaryPanel).addClass('master-area') if ($primaryPanel.length > 0) { $secondaryPanel.append(this.createPrimaryCollapseIcon()) } else { $secondaryPanel.addClass('primary-collapsed') } if (!$('a', data.tab).hasClass('new-template') && this.getLocalStorageValue('tabless', 0) == 1) { $panel.addClass('collapsed') } if (this.getLocalStorageValue('primary', 0) == 1 && hasSecondaryTabs) { $primaryPanel.addClass('collapsed') $secondaryPanel.addClass('primary-collapsed') } if (this.options.onInitTab) { this.options.onInitTab($('form', data.pane)) } } TabFormExpandControls.prototype.tablessCollapseClicked = function(ev) { var $panel = $(ev.target).closest('.form-tabless-fields') $panel.toggleClass('collapsed') this.setLocalStorageValue('tabless', $panel.hasClass('collapsed') ? 1 : 0) window.setTimeout(this.proxy(this.updateUi), 500) ev.stopPropagation() return false } TabFormExpandControls.prototype.primaryCollapseClicked = function(ev) { var $pane = $(ev.target).closest('.tab-pane'), $primaryPanel = this.findPrimaryPanel($pane), $secondaryPanel = this.findSecondaryPanel($pane) $primaryPanel.toggleClass('collapsed') $secondaryPanel.toggleClass('primary-collapsed') this.updateUi() this.setLocalStorageValue('primary', $primaryPanel.hasClass('collapsed') ? 1 : 0) return false } TabFormExpandControls.prototype.updateUi = function() { $(window).trigger('oc.updateUi') } TabFormExpandControls.prototype.createTablessCollapseIcon = function() { return $('<a href="javascript:;" class="tab-collapse-icon tabless" data-control="tabless-collapse-icon"><i class="icon-chevron-up"></i></a>') } TabFormExpandControls.prototype.createPrimaryCollapseIcon = function() { return $('<a href="javascript:;" class="tab-collapse-icon primary" data-control="primary-collapse-icon"><i class="icon-chevron-down"></i></a>') } TabFormExpandControls.prototype.generateStorageKey = function(section) { return 'oc' + section + this.tabsControlId.replace('-', '') + 'collapsed' } TabFormExpandControls.prototype.findPrimaryPanel = function(pane) { return $(pane).find('.control-tabs.primary-tabs') } TabFormExpandControls.prototype.findSecondaryPanel = function(pane) { return $(pane).find('.control-tabs.secondary-tabs') } TabFormExpandControls.prototype.getLocalStorageValue = function(section, defaultValue) { var key = this.generateStorageKey(section) if (typeof(localStorage) !== 'undefined') { return localStorage[key] } return defaultValue } TabFormExpandControls.prototype.setLocalStorageValue = function(section, value) { var key = this.generateStorageKey(section) if (typeof(localStorage) !== 'undefined') { localStorage[key] = value } } TabFormExpandControls.DEFAULTS = { onInitTab: null } $.oc.tabFormExpandControls = TabFormExpandControls }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.tooltip.js ================================================ /* * Implements a new tooltips solution. * * The solution doesn't use Bootstrap tooltips and doesn't * require adding listeners to each control with a tooltip. * It can handle tooltips on dynamically added elements without * explicit initialization. */ +(function($) { 'use strict'; class Tooltips { constructor() { this.$tooltipElement = null; this.tooltipTimeout = null; this.onMouseEnter = (ev) => { if (!ev.target || !ev.target.getAttribute || !ev.target.dataset) { return; } if (!ev.target.getAttribute('data-tooltip-text')) { return; } this.clearTooltipTimeout(); this.destroyTooltip(); this.tooltipTimeout = setTimeout(() => { this.createTooltip(ev.target); }, 300); } this.onMouseLeave = (ev) => { if (!ev.target || !ev.target.getAttribute || !ev.target.dataset) { return; } if (!ev.target.getAttribute('data-tooltip-text')) { return; } this.clearTooltipTimeout(); this.destroyTooltip(); } this.onMouseDown = (ev) => { this.destroyTooltip(); } this.onKeyDown = (ev) => { this.destroyTooltip(); }; this.hideAllTooltips = () => { this.clearTooltipTimeout(); if (this.$tooltipElement) { this.$tooltipElement.remove(); this.$tooltipElement = null; } }; this.addListeners(); } addListeners() { document.addEventListener('mouseenter', this.onMouseEnter, true); document.addEventListener('mouseleave', this.onMouseLeave, true); document.addEventListener('mousedown', this.onMouseDown); document.addEventListener('click', this.onMouseDown); document.addEventListener('keydown', this.onKeyDown); addEventListener('ajax:before-update', this.hideAllTooltips); addEventListener('page:before-render', this.hideAllTooltips); } clear() { this.clearTooltipTimeout(); this.destroyTooltip(); } clearTooltipTimeout() { if (this.tooltipTimeout !== null) { clearTimeout(this.tooltipTimeout); } this.tooltipTimeout = null; } createTooltip(element) { if (!this.$tooltipElement) { this.$tooltipElement = $( '<div class="october-tooltip tooltip-hidden tooltip-invisible"><span class="tooltip-text"></span><span class="tooltip-hotkey"></span></div>' ); $(document.body).append(this.$tooltipElement); } this.$tooltipElement.find('.tooltip-text').text(element.getAttribute('data-tooltip-text')); var tooltipHotkey = element.getAttribute('data-tooltip-hotkey'), hotkeySpan = this.$tooltipElement.find('.tooltip-hotkey').html(''); if (tooltipHotkey) { tooltipHotkey.split(',').forEach(function(hotkeys) { hotkeySpan.append($('<i>').text(hotkeys.trim())); }); } this.$tooltipElement.removeClass('tooltip-hidden'); this.$tooltipElement.css('left', 0); var $element = $(element), elementOffset = $element.offset(), elementWidth = $element.outerWidth(), elementHeight = $element.height(), tooltipWidth = this.$tooltipElement.outerWidth(), bodyWidth = $(document.body).width(), left = Math.round(elementOffset.left + elementWidth / 2 - tooltipWidth / 2); if (left < 0) { left = 15; } var rightDiff = left + tooltipWidth - bodyWidth; if (rightDiff > 0) { left -= rightDiff + 15; } var tooltipHeight = this.$tooltipElement.outerHeight(), position = element.getAttribute('data-tooltip-position'), top = position === 'top' ? elementOffset.top - tooltipHeight - 5 : elementOffset.top + elementHeight + 5; this.$tooltipElement.css({ left: left, top: top }); this.$tooltipElement.removeClass('tooltip-invisible'); } destroyTooltip() { if (!this.$tooltipElement) { return; } this.$tooltipElement.addClass('tooltip-invisible'); setTimeout(() => { if (this.$tooltipElement) { this.$tooltipElement.addClass('tooltip-hidden'); } }, 150); } } var tooltips = new Tooltips(); oc.octoberTooltips = { clear: function() { tooltips.clear(); } }; // @deprecated $.oc.octoberTooltips = oc.octoberTooltips; })(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.treelist.js ================================================ /* * TreeList Widget * * Supported options: * - handle - class name to use as a handle * - nested - set to false if sorting should be kept within each OL container, if using * a handle it should be focused enough to exclude nested handles. * * Events: * - move.oc.treelist - triggered when a node on the tree is moved. * * Dependencies: * - Sortable Plugin (october.sortable.js) */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype var TreeListWidget = function (element, options) { this.$el = $(element) this.options = options || {}; Base.call(this) $.oc.foundation.controlUtils.markDisposable(element) this.init() } TreeListWidget.prototype = Object.create(BaseProto) TreeListWidget.prototype.constructor = TreeListWidget TreeListWidget.prototype.init = function() { var sortableOptions = { handle: this.options.handle, nested: this.options.nested, onDrop: this.proxy(this.onDrop), afterMove: this.proxy(this.onAfterMove) } this.$el.find('> ol').sortable($.extend(sortableOptions, this.options)) if (!this.options.nested) this.$el.find('> ol ol').sortable($.extend(sortableOptions, this.options)) this.$el.one('dispose-control', this.proxy(this.dispose)) } TreeListWidget.prototype.dispose = function() { this.unbind() BaseProto.dispose.call(this) } TreeListWidget.prototype.unbind = function() { this.$el.off('dispose-control', this.proxy(this.dispose)) this.$el.find('> ol').sortable('destroy') if (!this.options.nested) { this.$el.find('> ol ol').sortable('destroy') } this.$el.removeData('oc.treelist') this.$el = null this.options = null } TreeListWidget.DEFAULTS = { handle: null, nested: true } // TREELIST EVENT HANDLERS // ============================ TreeListWidget.prototype.onDrop = function($item, container, _super) { // The event handler could be registered after the // sortable is destroyed. This should be fixed later. if (!this.$el) { return } this.$el.trigger('move.oc.treelist', { item: $item, container: container }) _super($item, container) } TreeListWidget.prototype.onAfterMove = function($placeholder, container, $closestEl) { if (!this.$el) { return } this.$el.trigger('aftermove.oc.treelist', { placeholder: $placeholder, container: container, closestEl: $closestEl }) } // TREELIST WIDGET PLUGIN DEFINITION // ============================ var old = $.fn.treeListWidget $.fn.treeListWidget = function (option) { var args = arguments, result this.each(function () { var $this = $(this) var data = $this.data('oc.treelist') var options = $.extend({}, TreeListWidget.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.treelist', (data = new TreeListWidget(this, options))) if (typeof option == 'string') result = data[option].call(data) if (typeof result != 'undefined') return false }) return result ? result : this } $.fn.treeListWidget.Constructor = TreeListWidget // TREELIST WIDGET NO CONFLICT // ================= $.fn.treeListWidget.noConflict = function () { $.fn.treeListWidget = old return this } // TREELIST WIDGET DATA-API // ============== $(document).render(function(){ $('[data-control="treelist"]').treeListWidget(); }) }(window.jQuery); ================================================ FILE: modules/backend/assets/js/october/october.vueutils.js ================================================ +(function($) { 'use strict'; var VueUtils = function() { function findTraverseObjects(objectArray, currentKey, keyProperty) { for (var index = 0; index < objectArray.length; index++) { if (objectArray[index][keyProperty] === currentKey) { return objectArray[index]; } } return null; } this.getObjectProperty = function(obj, propertyPath) { var pathParts = propertyPath.split('.'), currentObject = obj; for (var index = 0; index < pathParts.length; index++) { var currentProperty = pathParts[index]; if (currentObject[currentProperty] === undefined) { return undefined; } currentObject = currentObject[currentProperty]; } return currentObject; }; this.getCleanObject = function(obj) { return JSON.parse(JSON.stringify(obj)); }; this.findObjectByKeyPath = function(objectArray, keyPathArray, childrenListProperty, keyProperty) { var keyPathCopy = keyPathArray.slice(), currentKey = keyPathCopy.shift(), obj = null; while (currentKey !== undefined) { if (!objectArray) { return null; } obj = findTraverseObjects(objectArray, currentKey, keyProperty); if (obj === null) { return obj; } objectArray = this.getObjectProperty(obj, childrenListProperty); if (objectArray === undefined) { objectArray = []; } currentKey = keyPathCopy.shift(); } return obj; }; this.findObjectsByProperty = function(objectArray, childrenListProperty, propertyName, propertyValue, path) { var result = []; function traverse(objects) { for (var index = 0; index < objects.length; index++) { var object = objects[index]; if (object[propertyName] === propertyValue) { result.push(object); } traverse(object[childrenListProperty] || []); } } traverse(objectArray); return result; }; this.getObjectPathByProperty = function(objectArray, childrenListProperty, propertyName, propertyValue) { function traverse(objects, path) { for (var index = 0; index < objects.length; index++) { var object = objects[index], currentPropertyValue = object[propertyName]; if (currentPropertyValue === propertyValue) { return path.concat(currentPropertyValue); } var childPath = traverse(object[childrenListProperty] || [], path.concat(currentPropertyValue)); if (childPath) { return childPath; } } } return traverse(objectArray, []); }; this.findObjectParentInfoByProperty = function(objectArray, childrenListProperty, propertyName, propertyValue) { function traverse(objects) { for (var index = 0; index < objects.length; index++) { var object = objects[index]; if (object[propertyName] === propertyValue) { return { parentArray: objects, index: index, object: object }; } var subtreeResult = traverse(object[childrenListProperty] || []); if (subtreeResult) { return subtreeResult; } } } return traverse(objectArray); }; this.getFlattenNodes = function(objectArray, childrenListProperty) { var result = []; function traverse(objects) { for (var index = 0; index < objects.length; index++) { var object = objects[index]; traverse(object[childrenListProperty] || []); result.push(object); } } traverse(objectArray); return result; }; this.stringHashCode = function(value) { var hash = 0, i, chr; for (i = 0; i < value.length; i++) { chr = value.charCodeAt(i); hash = (hash << 5) - hash + chr; hash |= 0; } return hash; }; this.syncObjectProperties = function(srcObj, destObj) { for (var srcProp in srcObj) { if (!srcObj.hasOwnProperty(srcProp)) { continue; } destObj[srcProp] = srcObj[srcProp]; } for (var destProp in destObj) { if (!destObj.hasOwnProperty(destProp)) { continue; } if (!srcObj.hasOwnProperty(destProp)) { delete destObj[destProp]; } } }; this.stringFuzzySearch = function (query, str) { var queryArray = query.split(' '), wordsFound = 0; for (var index = 0; index < queryArray.length; index++) { if (str.indexOf(queryArray[index]) !== -1) { wordsFound++; } } return wordsFound == queryArray.length; }; this.getRelativeOffset = function (element1, element2) { var offset1 = $(element1).offset(), offset2 = $(element2).offset(); return { left: offset1.left - offset2.left, top: offset1.top - offset2.top } }; this.getToolbarExtensionPoint = function (source, element) { // Expected source format: eventBus::toolbarExtensionPoint let parts = source.split('::'); if (parts.length !== 2) { parts = ['eventBus', parts[0]]; } const vueApp = oc.VueApp.getFromElement(element); if (vueApp) { return { bus: vueApp.getState(parts[0]), state: vueApp.getState(parts[1]) }; } }; }; $.oc.vueUtils = new VueUtils(); })(window.jQuery); ================================================ FILE: modules/backend/assets/js/onboarding.js ================================================ +function ($) { "use strict"; if (!$) { return; } var OnboardingPopup = function () { var $collapsedWidget = null; function init() { $collapsedWidget = $('<div class="onboarding-popup-collapsed"><div></div></div>'); $(document.body).append($collapsedWidget); playCollapsedAnimation(); initListeners(); } function initListeners() { $collapsedWidget.on('click', onCollapsedClick) } function playCollapsedAnimation() { $collapsedWidget.addClass('onboarding-popup-collapse-animation-start'); window.setTimeout(function () { $collapsedWidget.addClass('onboarding-popup-just-collapsed'); window.setTimeout(function () { $collapsedWidget.removeClass('onboarding-popup-just-collapsed'); $collapsedWidget.removeClass('onboarding-popup-collapse-animation-start'); }, 2000); }, 50); } function onCollapsedClick() { $(document.body).addClass('onboarding-popup-visible'); $.popup({ handler: 'onRenewOctoberCmsLicense' }).one('hide.oc.popup', function() { setTimeout(function() { $(document.body).removeClass('onboarding-popup-visible'); playCollapsedAnimation(); }, 200); }); } init(); }; addEventListener('page:load', function() { if (!$(document.body).hasClass('outer') && $.oc.backendUrl) { new OnboardingPopup(); } }); }(jQuery); ================================================ FILE: modules/backend/assets/js/ph-icons-list.js ================================================ export default { "ph ph-address-book": "Address Book", "ph ph-airplane": "Airplane", "ph ph-airplane-in-flight": "Airplane In Flight", "ph ph-airplane-landing": "Airplane Landing", "ph ph-airplane-takeoff": "Airplane Takeoff", "ph ph-airplane-tilt": "Airplane Tilt", "ph ph-airplay": "Airplay", "ph ph-air-traffic-control": "Air Traffic Control", "ph ph-alarm": "Alarm", "ph ph-alien": "Alien", "ph ph-align-bottom": "Align Bottom", "ph ph-align-bottom-simple": "Align Bottom Simple", "ph ph-align-center-horizontal": "Align Center Horizontal", "ph ph-align-center-horizontal-simple": "Align Center Horizontal Simple", "ph ph-align-center-vertical": "Align Center Vertical", "ph ph-align-center-vertical-simple": "Align Center Vertical Simple", "ph ph-align-left": "Align Left", "ph ph-align-left-simple": "Align Left Simple", "ph ph-align-right": "Align Right", "ph ph-align-right-simple": "Align Right Simple", "ph ph-align-top": "Align Top", "ph ph-align-top-simple": "Align Top Simple", "ph ph-amazon-logo": "Amazon Logo", "ph ph-anchor": "Anchor", "ph ph-anchor-simple": "Anchor Simple", "ph ph-android-logo": "Android Logo", "ph ph-angular-logo": "Angular Logo", "ph ph-aperture": "Aperture", "ph ph-apple-logo": "Apple Logo", "ph ph-apple-podcasts-logo": "Apple Podcasts Logo", "ph ph-app-store-logo": "App Store Logo", "ph ph-app-window": "App Window", "ph ph-archive": "Archive", "ph ph-archive-box": "Archive Box", "ph ph-archive-tray": "Archive Tray", "ph ph-armchair": "Armchair", "ph ph-arrow-arc-left": "Arrow Arc Left", "ph ph-arrow-arc-right": "Arrow Arc Right", "ph ph-arrow-bend-double-up-left": "Arrow Bend Double Up Left", "ph ph-arrow-bend-double-up-right": "Arrow Bend Double Up Right", "ph ph-arrow-bend-down-left": "Arrow Bend Down Left", "ph ph-arrow-bend-down-right": "Arrow Bend Down Right", "ph ph-arrow-bend-left-down": "Arrow Bend Left Down", "ph ph-arrow-bend-left-up": "Arrow Bend Left Up", "ph ph-arrow-bend-right-down": "Arrow Bend Right Down", "ph ph-arrow-bend-right-up": "Arrow Bend Right Up", "ph ph-arrow-bend-up-left": "Arrow Bend Up Left", "ph ph-arrow-bend-up-right": "Arrow Bend Up Right", "ph ph-arrow-circle-down": "Arrow Circle Down", "ph ph-arrow-circle-down-left": "Arrow Circle Down Left", "ph ph-arrow-circle-down-right": "Arrow Circle Down Right", "ph ph-arrow-circle-left": "Arrow Circle Left", "ph ph-arrow-circle-right": "Arrow Circle Right", "ph ph-arrow-circle-up": "Arrow Circle Up", "ph ph-arrow-circle-up-left": "Arrow Circle Up Left", "ph ph-arrow-circle-up-right": "Arrow Circle Up Right", "ph ph-arrow-clockwise": "Arrow Clockwise", "ph ph-arrow-counter-clockwise": "Arrow Counter Clockwise", "ph ph-arrow-down": "Arrow Down", "ph ph-arrow-down-left": "Arrow Down Left", "ph ph-arrow-down-right": "Arrow Down Right", "ph ph-arrow-elbow-down-left": "Arrow Elbow Down Left", "ph ph-arrow-elbow-down-right": "Arrow Elbow Down Right", "ph ph-arrow-elbow-left": "Arrow Elbow Left", "ph ph-arrow-elbow-left-down": "Arrow Elbow Left Down", "ph ph-arrow-elbow-left-up": "Arrow Elbow Left Up", "ph ph-arrow-elbow-right": "Arrow Elbow Right", "ph ph-arrow-elbow-right-down": "Arrow Elbow Right Down", "ph ph-arrow-elbow-right-up": "Arrow Elbow Right Up", "ph ph-arrow-elbow-up-left": "Arrow Elbow Up Left", "ph ph-arrow-elbow-up-right": "Arrow Elbow Up Right", "ph ph-arrow-fat-down": "Arrow Fat Down", "ph ph-arrow-fat-left": "Arrow Fat Left", "ph ph-arrow-fat-line-down": "Arrow Fat Line Down", "ph ph-arrow-fat-line-left": "Arrow Fat Line Left", "ph ph-arrow-fat-line-right": "Arrow Fat Line Right", "ph ph-arrow-fat-lines-down": "Arrow Fat Lines Down", "ph ph-arrow-fat-lines-left": "Arrow Fat Lines Left", "ph ph-arrow-fat-lines-right": "Arrow Fat Lines Right", "ph ph-arrow-fat-lines-up": "Arrow Fat Lines Up", "ph ph-arrow-fat-line-up": "Arrow Fat Line Up", "ph ph-arrow-fat-right": "Arrow Fat Right", "ph ph-arrow-fat-up": "Arrow Fat Up", "ph ph-arrow-left": "Arrow Left", "ph ph-arrow-line-down": "Arrow Line Down", "ph ph-arrow-line-down-left": "Arrow Line Down Left", "ph ph-arrow-line-down-right": "Arrow Line Down Right", "ph ph-arrow-line-left": "Arrow Line Left", "ph ph-arrow-line-right": "Arrow Line Right", "ph ph-arrow-line-up": "Arrow Line Up", "ph ph-arrow-line-up-left": "Arrow Line Up Left", "ph ph-arrow-line-up-right": "Arrow Line Up Right", "ph ph-arrow-right": "Arrow Right", "ph ph-arrows-clockwise": "Arrows Clockwise", "ph ph-arrows-counter-clockwise": "Arrows Counter Clockwise", "ph ph-arrows-down-up": "Arrows Down Up", "ph ph-arrows-horizontal": "Arrows Horizontal", "ph ph-arrows-in": "Arrows In", "ph ph-arrows-in-cardinal": "Arrows In Cardinal", "ph ph-arrows-in-line-horizontal": "Arrows In Line Horizontal", "ph ph-arrows-in-line-vertical": "Arrows In Line Vertical", "ph ph-arrows-in-simple": "Arrows In Simple", "ph ph-arrows-left-right": "Arrows Left Right", "ph ph-arrows-merge": "Arrows Merge", "ph ph-arrows-out": "Arrows Out", "ph ph-arrows-out-cardinal": "Arrows Out Cardinal", "ph ph-arrows-out-line-horizontal": "Arrows Out Line Horizontal", "ph ph-arrows-out-line-vertical": "Arrows Out Line Vertical", "ph ph-arrows-out-simple": "Arrows Out Simple", "ph ph-arrow-square-down": "Arrow Square Down", "ph ph-arrow-square-down-left": "Arrow Square Down Left", "ph ph-arrow-square-down-right": "Arrow Square Down Right", "ph ph-arrow-square-in": "Arrow Square In", "ph ph-arrow-square-left": "Arrow Square Left", "ph ph-arrow-square-out": "Arrow Square Out", "ph ph-arrow-square-right": "Arrow Square Right", "ph ph-arrow-square-up": "Arrow Square Up", "ph ph-arrow-square-up-left": "Arrow Square Up Left", "ph ph-arrow-square-up-right": "Arrow Square Up Right", "ph ph-arrows-split": "Arrows Split", "ph ph-arrows-vertical": "Arrows Vertical", "ph ph-arrow-u-down-left": "Arrow U Down Left", "ph ph-arrow-u-down-right": "Arrow U Down Right", "ph ph-arrow-u-left-down": "Arrow U Left Down", "ph ph-arrow-u-left-up": "Arrow U Left Up", "ph ph-arrow-up": "Arrow Up", "ph ph-arrow-up-left": "Arrow Up Left", "ph ph-arrow-up-right": "Arrow Up Right", "ph ph-arrow-u-right-down": "Arrow U Right Down", "ph ph-arrow-u-right-up": "Arrow U Right Up", "ph ph-arrow-u-up-left": "Arrow U Up Left", "ph ph-arrow-u-up-right": "Arrow U Up Right", "ph ph-article": "Article", "ph ph-article-medium": "Article Medium", "ph ph-article-ny-times": "Article Ny Times", "ph ph-asterisk": "Asterisk", "ph ph-asterisk-simple": "Asterisk Simple", "ph ph-at": "At", "ph ph-atom": "Atom", "ph ph-baby": "Baby", "ph ph-backpack": "Backpack", "ph ph-backspace": "Backspace", "ph ph-bag": "Bag", "ph ph-bag-simple": "Bag Simple", "ph ph-balloon": "Balloon", "ph ph-bandaids": "Bandaids", "ph ph-bank": "Bank", "ph ph-barbell": "Barbell", "ph ph-barcode": "Barcode", "ph ph-barricade": "Barricade", "ph ph-baseball": "Baseball", "ph ph-baseball-cap": "Baseball Cap", "ph ph-basket": "Basket", "ph ph-basketball": "Basketball", "ph ph-bathtub": "Bathtub", "ph ph-battery-charging": "Battery Charging", "ph ph-battery-charging-vertical": "Battery Charging Vertical", "ph ph-battery-empty": "Battery Empty", "ph ph-battery-full": "Battery Full", "ph ph-battery-high": "Battery High", "ph ph-battery-low": "Battery Low", "ph ph-battery-medium": "Battery Medium", "ph ph-battery-plus": "Battery Plus", "ph ph-battery-plus-vertical": "Battery Plus Vertical", "ph ph-battery-vertical-empty": "Battery Vertical Empty", "ph ph-battery-vertical-full": "Battery Vertical Full", "ph ph-battery-vertical-high": "Battery Vertical High", "ph ph-battery-vertical-low": "Battery Vertical Low", "ph ph-battery-vertical-medium": "Battery Vertical Medium", "ph ph-battery-warning": "Battery Warning", "ph ph-battery-warning-vertical": "Battery Warning Vertical", "ph ph-bed": "Bed", "ph ph-beer-bottle": "Beer Bottle", "ph ph-beer-stein": "Beer Stein", "ph ph-behance-logo": "Behance Logo", "ph ph-bell": "Bell", "ph ph-bell-ringing": "Bell Ringing", "ph ph-bell-simple": "Bell Simple", "ph ph-bell-simple-ringing": "Bell Simple Ringing", "ph ph-bell-simple-slash": "Bell Simple Slash", "ph ph-bell-simple-z": "Bell Simple Z", "ph ph-bell-slash": "Bell Slash", "ph ph-bell-z": "Bell Z", "ph ph-bezier-curve": "Bezier Curve", "ph ph-bicycle": "Bicycle", "ph ph-binoculars": "Binoculars", "ph ph-bird": "Bird", "ph ph-bluetooth": "Bluetooth", "ph ph-bluetooth-connected": "Bluetooth Connected", "ph ph-bluetooth-slash": "Bluetooth Slash", "ph ph-bluetooth-x": "Bluetooth X", "ph ph-boat": "Boat", "ph ph-bone": "Bone", "ph ph-book": "Book", "ph ph-book-bookmark": "Book Bookmark", "ph ph-bookmark": "Bookmark", "ph ph-bookmarks": "Bookmarks", "ph ph-bookmark-simple": "Bookmark Simple", "ph ph-bookmarks-simple": "Bookmarks Simple", "ph ph-book-open": "Book Open", "ph ph-book-open-text": "Book Open Text", "ph ph-books": "Books", "ph ph-boot": "Boot", "ph ph-bounding-box": "Bounding Box", "ph ph-bowl-food": "Bowl Food", "ph ph-brackets-angle": "Brackets Angle", "ph ph-brackets-curly": "Brackets Curly", "ph ph-brackets-round": "Brackets Round", "ph ph-brackets-square": "Brackets Square", "ph ph-brain": "Brain", "ph ph-brandy": "Brandy", "ph ph-bridge": "Bridge", "ph ph-briefcase": "Briefcase", "ph ph-briefcase-metal": "Briefcase Metal", "ph ph-broadcast": "Broadcast", "ph ph-broom": "Broom", "ph ph-browser": "Browser", "ph ph-browsers": "Browsers", "ph ph-bug": "Bug", "ph ph-bug-beetle": "Bug Beetle", "ph ph-bug-droid": "Bug Droid", "ph ph-buildings": "Buildings", "ph ph-bus": "Bus", "ph ph-butterfly": "Butterfly", "ph ph-cactus": "Cactus", "ph ph-cake": "Cake", "ph ph-calculator": "Calculator", "ph ph-calendar": "Calendar", "ph ph-calendar-blank": "Calendar Blank", "ph ph-calendar-check": "Calendar Check", "ph ph-calendar-plus": "Calendar Plus", "ph ph-calendar-x": "Calendar X", "ph ph-call-bell": "Call Bell", "ph ph-camera": "Camera", "ph ph-camera-plus": "Camera Plus", "ph ph-camera-rotate": "Camera Rotate", "ph ph-camera-slash": "Camera Slash", "ph ph-campfire": "Campfire", "ph ph-car": "Car", "ph ph-cardholder": "Cardholder", "ph ph-cards": "Cards", "ph ph-caret-circle-double-down": "Caret Circle Double Down", "ph ph-caret-circle-double-left": "Caret Circle Double Left", "ph ph-caret-circle-double-right": "Caret Circle Double Right", "ph ph-caret-circle-double-up": "Caret Circle Double Up", "ph ph-caret-circle-down": "Caret Circle Down", "ph ph-caret-circle-left": "Caret Circle Left", "ph ph-caret-circle-right": "Caret Circle Right", "ph ph-caret-circle-up": "Caret Circle Up", "ph ph-caret-circle-up-down": "Caret Circle Up Down", "ph ph-caret-double-down": "Caret Double Down", "ph ph-caret-double-left": "Caret Double Left", "ph ph-caret-double-right": "Caret Double Right", "ph ph-caret-double-up": "Caret Double Up", "ph ph-caret-down": "Caret Down", "ph ph-caret-left": "Caret Left", "ph ph-caret-right": "Caret Right", "ph ph-caret-up": "Caret Up", "ph ph-caret-up-down": "Caret Up Down", "ph ph-car-profile": "Car Profile", "ph ph-carrot": "Carrot", "ph ph-car-simple": "Car Simple", "ph ph-cassette-tape": "Cassette Tape", "ph ph-castle-turret": "Castle Turret", "ph ph-cat": "Cat", "ph ph-cell-signal-full": "Cell Signal Full", "ph ph-cell-signal-high": "Cell Signal High", "ph ph-cell-signal-low": "Cell Signal Low", "ph ph-cell-signal-medium": "Cell Signal Medium", "ph ph-cell-signal-none": "Cell Signal None", "ph ph-cell-signal-slash": "Cell Signal Slash", "ph ph-cell-signal-x": "Cell Signal X", "ph ph-certificate": "Certificate", "ph ph-chair": "Chair", "ph ph-chalkboard": "Chalkboard", "ph ph-chalkboard-simple": "Chalkboard Simple", "ph ph-chalkboard-teacher": "Chalkboard Teacher", "ph ph-champagne": "Champagne", "ph ph-charging-station": "Charging Station", "ph ph-chart-bar": "Chart Bar", "ph ph-chart-bar-horizontal": "Chart Bar Horizontal", "ph ph-chart-donut": "Chart Donut", "ph ph-chart-line": "Chart Line", "ph ph-chart-line-down": "Chart Line Down", "ph ph-chart-line-up": "Chart Line Up", "ph ph-chart-pie": "Chart Pie", "ph ph-chart-pie-slice": "Chart Pie Slice", "ph ph-chart-polar": "Chart Polar", "ph ph-chart-scatter": "Chart Scatter", "ph ph-chat": "Chat", "ph ph-chat-centered": "Chat Centered", "ph ph-chat-centered-dots": "Chat Centered Dots", "ph ph-chat-centered-text": "Chat Centered Text", "ph ph-chat-circle": "Chat Circle", "ph ph-chat-circle-dots": "Chat Circle Dots", "ph ph-chat-circle-text": "Chat Circle Text", "ph ph-chat-dots": "Chat Dots", "ph ph-chats": "Chats", "ph ph-chats-circle": "Chats Circle", "ph ph-chats-teardrop": "Chats Teardrop", "ph ph-chat-teardrop": "Chat Teardrop", "ph ph-chat-teardrop-dots": "Chat Teardrop Dots", "ph ph-chat-teardrop-text": "Chat Teardrop Text", "ph ph-chat-text": "Chat Text", "ph ph-check": "Check", "ph ph-check-circle": "Check Circle", "ph ph-check-fat": "Check Fat", "ph ph-checks": "Checks", "ph ph-check-square": "Check Square", "ph ph-check-square-offset": "Check Square Offset", "ph ph-church": "Church", "ph ph-circle": "Circle", "ph ph-circle-dashed": "Circle Dashed", "ph ph-circle-half": "Circle Half", "ph ph-circle-half-tilt": "Circle Half Tilt", "ph ph-circle-notch": "Circle Notch", "ph ph-circles-four": "Circles Four", "ph ph-circles-three": "Circles Three", "ph ph-circles-three-plus": "Circles Three Plus", "ph ph-circuitry": "Circuitry", "ph ph-clipboard": "Clipboard", "ph ph-clipboard-text": "Clipboard Text", "ph ph-clock": "Clock", "ph ph-clock-afternoon": "Clock Afternoon", "ph ph-clock-clockwise": "Clock Clockwise", "ph ph-clock-countdown": "Clock Countdown", "ph ph-clock-counter-clockwise": "Clock Counter Clockwise", "ph ph-closed-captioning": "Closed Captioning", "ph ph-cloud": "Cloud", "ph ph-cloud-arrow-down": "Cloud Arrow Down", "ph ph-cloud-arrow-up": "Cloud Arrow Up", "ph ph-cloud-check": "Cloud Check", "ph ph-cloud-fog": "Cloud Fog", "ph ph-cloud-lightning": "Cloud Lightning", "ph ph-cloud-moon": "Cloud Moon", "ph ph-cloud-rain": "Cloud Rain", "ph ph-cloud-slash": "Cloud Slash", "ph ph-cloud-snow": "Cloud Snow", "ph ph-cloud-sun": "Cloud Sun", "ph ph-cloud-warning": "Cloud Warning", "ph ph-cloud-x": "Cloud X", "ph ph-club": "Club", "ph ph-coat-hanger": "Coat Hanger", "ph ph-coda-logo": "Coda Logo", "ph ph-code": "Code", "ph ph-code-block": "Code Block", "ph ph-codepen-logo": "Codepen Logo", "ph ph-codesandbox-logo": "Codesandbox Logo", "ph ph-code-simple": "Code Simple", "ph ph-coffee": "Coffee", "ph ph-coin": "Coin", "ph ph-coins": "Coins", "ph ph-coin-vertical": "Coin Vertical", "ph ph-columns": "Columns", "ph ph-command": "Command", "ph ph-compass": "Compass", "ph ph-compass-tool": "Compass Tool", "ph ph-computer-tower": "Computer Tower", "ph ph-confetti": "Confetti", "ph ph-contactless-payment": "Contactless Payment", "ph ph-control": "Control", "ph ph-cookie": "Cookie", "ph ph-cooking-pot": "Cooking Pot", "ph ph-copy": "Copy", "ph ph-copyleft": "Copyleft", "ph ph-copyright": "Copyright", "ph ph-copy-simple": "Copy Simple", "ph ph-corners-in": "Corners In", "ph ph-corners-out": "Corners Out", "ph ph-couch": "Couch", "ph ph-cpu": "Cpu", "ph ph-credit-card": "Credit Card", "ph ph-crop": "Crop", "ph ph-cross": "Cross", "ph ph-crosshair": "Crosshair", "ph ph-crosshair-simple": "Crosshair Simple", "ph ph-crown": "Crown", "ph ph-crown-simple": "Crown Simple", "ph ph-cube": "Cube", "ph ph-cube-focus": "Cube Focus", "ph ph-cube-transparent": "Cube Transparent", "ph ph-currency-btc": "Currency Btc", "ph ph-currency-circle-dollar": "Currency Circle Dollar", "ph ph-currency-cny": "Currency Cny", "ph ph-currency-dollar": "Currency Dollar", "ph ph-currency-dollar-simple": "Currency Dollar Simple", "ph ph-currency-eth": "Currency Eth", "ph ph-currency-eur": "Currency Eur", "ph ph-currency-gbp": "Currency Gbp", "ph ph-currency-inr": "Currency Inr", "ph ph-currency-jpy": "Currency Jpy", "ph ph-currency-krw": "Currency Krw", "ph ph-currency-kzt": "Currency Kzt", "ph ph-currency-ngn": "Currency Ngn", "ph ph-currency-rub": "Currency Rub", "ph ph-cursor": "Cursor", "ph ph-cursor-click": "Cursor Click", "ph ph-cursor-text": "Cursor Text", "ph ph-cylinder": "Cylinder", "ph ph-database": "Database", "ph ph-desktop": "Desktop", "ph ph-desktop-tower": "Desktop Tower", "ph ph-detective": "Detective", "ph ph-device-mobile": "Device Mobile", "ph ph-device-mobile-camera": "Device Mobile Camera", "ph ph-device-mobile-speaker": "Device Mobile Speaker", "ph ph-devices": "Devices", "ph ph-device-tablet": "Device Tablet", "ph ph-device-tablet-camera": "Device Tablet Camera", "ph ph-device-tablet-speaker": "Device Tablet Speaker", "ph ph-dev-to-logo": "Dev To Logo", "ph ph-diamond": "Diamond", "ph ph-diamonds-four": "Diamonds Four", "ph ph-dice-five": "Dice Five", "ph ph-dice-four": "Dice Four", "ph ph-dice-one": "Dice One", "ph ph-dice-six": "Dice Six", "ph ph-dice-three": "Dice Three", "ph ph-dice-two": "Dice Two", "ph ph-disc": "Disc", "ph ph-discord-logo": "Discord Logo", "ph ph-divide": "Divide", "ph ph-dna": "Dna", "ph ph-dog": "Dog", "ph ph-door": "Door", "ph ph-door-open": "Door Open", "ph ph-dot": "Dot", "ph ph-dot-outline": "Dot Outline", "ph ph-dots-nine": "Dots Nine", "ph ph-dots-six": "Dots Six", "ph ph-dots-six-vertical": "Dots Six Vertical", "ph ph-dots-three": "Dots Three", "ph ph-dots-three-circle": "Dots Three Circle", "ph ph-dots-three-circle-vertical": "Dots Three Circle Vertical", "ph ph-dots-three-outline": "Dots Three Outline", "ph ph-dots-three-outline-vertical": "Dots Three Outline Vertical", "ph ph-dots-three-vertical": "Dots Three Vertical", "ph ph-download": "Download", "ph ph-download-simple": "Download Simple", "ph ph-dress": "Dress", "ph ph-dribbble-logo": "Dribbble Logo", "ph ph-drop": "Drop", "ph ph-dropbox-logo": "Dropbox Logo", "ph ph-drop-half": "Drop Half", "ph ph-drop-half-bottom": "Drop Half Bottom", "ph ph-ear": "Ear", "ph ph-ear-slash": "Ear Slash", "ph ph-egg": "Egg", "ph ph-egg-crack": "Egg Crack", "ph ph-eject": "Eject", "ph ph-eject-simple": "Eject Simple", "ph ph-elevator": "Elevator", "ph ph-engine": "Engine", "ph ph-envelope": "Envelope", "ph ph-envelope-open": "Envelope Open", "ph ph-envelope-simple": "Envelope Simple", "ph ph-envelope-simple-open": "Envelope Simple Open", "ph ph-equalizer": "Equalizer", "ph ph-equals": "Equals", "ph ph-eraser": "Eraser", "ph ph-escalator-down": "Escalator Down", "ph ph-escalator-up": "Escalator Up", "ph ph-exam": "Exam", "ph ph-exclude": "Exclude", "ph ph-exclude-square": "Exclude Square", "ph ph-export": "Export", "ph ph-eye": "Eye", "ph ph-eye-closed": "Eye Closed", "ph ph-eyedropper": "Eyedropper", "ph ph-eyedropper-sample": "Eyedropper Sample", "ph ph-eyeglasses": "Eyeglasses", "ph ph-eye-slash": "Eye Slash", "ph ph-facebook-logo": "Facebook Logo", "ph ph-face-mask": "Face Mask", "ph ph-factory": "Factory", "ph ph-faders": "Faders", "ph ph-faders-horizontal": "Faders Horizontal", "ph ph-fan": "Fan", "ph ph-fast-forward": "Fast Forward", "ph ph-fast-forward-circle": "Fast Forward Circle", "ph ph-feather": "Feather", "ph ph-figma-logo": "Figma Logo", "ph ph-file": "File", "ph ph-file-archive": "File Archive", "ph ph-file-arrow-down": "File Arrow Down", "ph ph-file-arrow-up": "File Arrow Up", "ph ph-file-audio": "File Audio", "ph ph-file-cloud": "File Cloud", "ph ph-file-code": "File Code", "ph ph-file-css": "File Css", "ph ph-file-csv": "File Csv", "ph ph-file-dashed": "File Dashed", "ph ph-file-dotted": "File Dotted", "ph ph-file-doc": "File Doc", "ph ph-file-html": "File Html", "ph ph-file-image": "File Image", "ph ph-file-jpg": "File Jpg", "ph ph-file-js": "File Js", "ph ph-file-jsx": "File Jsx", "ph ph-file-lock": "File Lock", "ph ph-file-magnifying-glass": "File Magnifying Glass", "ph ph-file-search": "File Search", "ph ph-file-minus": "File Minus", "ph ph-file-pdf": "File Pdf", "ph ph-file-plus": "File Plus", "ph ph-file-png": "File Png", "ph ph-file-ppt": "File Ppt", "ph ph-file-rs": "File Rs", "ph ph-files": "Files", "ph ph-file-sql": "File Sql", "ph ph-file-svg": "File Svg", "ph ph-file-text": "File Text", "ph ph-file-ts": "File Ts", "ph ph-file-tsx": "File Tsx", "ph ph-file-video": "File Video", "ph ph-file-vue": "File Vue", "ph ph-file-x": "File X", "ph ph-file-xls": "File Xls", "ph ph-file-zip": "File Zip", "ph ph-film-reel": "Film Reel", "ph ph-film-script": "Film Script", "ph ph-film-slate": "Film Slate", "ph ph-film-strip": "Film Strip", "ph ph-fingerprint": "Fingerprint", "ph ph-fingerprint-simple": "Fingerprint Simple", "ph ph-finn-the-human": "Finn The Human", "ph ph-fire": "Fire", "ph ph-fire-extinguisher": "Fire Extinguisher", "ph ph-fire-simple": "Fire Simple", "ph ph-first-aid": "First Aid", "ph ph-first-aid-kit": "First Aid Kit", "ph ph-fish": "Fish", "ph ph-fish-simple": "Fish Simple", "ph ph-flag": "Flag", "ph ph-flag-banner": "Flag Banner", "ph ph-flag-checkered": "Flag Checkered", "ph ph-flag-pennant": "Flag Pennant", "ph ph-flame": "Flame", "ph ph-flashlight": "Flashlight", "ph ph-flask": "Flask", "ph ph-floppy-disk": "Floppy Disk", "ph ph-floppy-disk-back": "Floppy Disk Back", "ph ph-flow-arrow": "Flow Arrow", "ph ph-flower": "Flower", "ph ph-flower-lotus": "Flower Lotus", "ph ph-flower-tulip": "Flower Tulip", "ph ph-flying-saucer": "Flying Saucer", "ph ph-folder": "Folder", "ph ph-folder-dashed": "Folder Dashed", "ph ph-folder-dotted": "Folder Dotted", "ph ph-folder-lock": "Folder Lock", "ph ph-folder-minus": "Folder Minus", "ph ph-folder-notch": "Folder Notch", "ph ph-folder-notch-minus": "Folder Notch Minus", "ph ph-folder-notch-open": "Folder Notch Open", "ph ph-folder-notch-plus": "Folder Notch Plus", "ph ph-folder-open": "Folder Open", "ph ph-folder-plus": "Folder Plus", "ph ph-folders": "Folders", "ph ph-folder-simple": "Folder Simple", "ph ph-folder-simple-dashed": "Folder Simple Dashed", "ph ph-folder-simple-dotted": "Folder Simple Dotted", "ph ph-folder-simple-lock": "Folder Simple Lock", "ph ph-folder-simple-minus": "Folder Simple Minus", "ph ph-folder-simple-plus": "Folder Simple Plus", "ph ph-folder-simple-star": "Folder Simple Star", "ph ph-folder-simple-user": "Folder Simple User", "ph ph-folder-star": "Folder Star", "ph ph-folder-user": "Folder User", "ph ph-football": "Football", "ph ph-footprints": "Footprints", "ph ph-fork-knife": "Fork Knife", "ph ph-frame-corners": "Frame Corners", "ph ph-framer-logo": "Framer Logo", "ph ph-function": "Function", "ph ph-funnel": "Funnel", "ph ph-funnel-simple": "Funnel Simple", "ph ph-game-controller": "Game Controller", "ph ph-garage": "Garage", "ph ph-gas-can": "Gas Can", "ph ph-gas-pump": "Gas Pump", "ph ph-gauge": "Gauge", "ph ph-gavel": "Gavel", "ph ph-gear": "Gear", "ph ph-gear-fine": "Gear Fine", "ph ph-gear-six": "Gear Six", "ph ph-gender-female": "Gender Female", "ph ph-gender-intersex": "Gender Intersex", "ph ph-gender-male": "Gender Male", "ph ph-gender-neuter": "Gender Neuter", "ph ph-gender-nonbinary": "Gender Nonbinary", "ph ph-gender-transgender": "Gender Transgender", "ph ph-ghost": "Ghost", "ph ph-gif": "Gif", "ph ph-gift": "Gift", "ph ph-git-branch": "Git Branch", "ph ph-git-commit": "Git Commit", "ph ph-git-diff": "Git Diff", "ph ph-git-fork": "Git Fork", "ph ph-github-logo": "Github Logo", "ph ph-gitlab-logo": "Gitlab Logo", "ph ph-gitlab-logo-simple": "Gitlab Logo Simple", "ph ph-git-merge": "Git Merge", "ph ph-git-pull-request": "Git Pull Request", "ph ph-globe": "Globe", "ph ph-globe-hemisphere-east": "Globe Hemisphere East", "ph ph-globe-hemisphere-west": "Globe Hemisphere West", "ph ph-globe-simple": "Globe Simple", "ph ph-globe-stand": "Globe Stand", "ph ph-goggles": "Goggles", "ph ph-goodreads-logo": "Goodreads Logo", "ph ph-google-cardboard-logo": "Google Cardboard Logo", "ph ph-google-chrome-logo": "Google Chrome Logo", "ph ph-google-drive-logo": "Google Drive Logo", "ph ph-google-logo": "Google Logo", "ph ph-google-photos-logo": "Google Photos Logo", "ph ph-google-play-logo": "Google Play Logo", "ph ph-google-podcasts-logo": "Google Podcasts Logo", "ph ph-gradient": "Gradient", "ph ph-graduation-cap": "Graduation Cap", "ph ph-grains": "Grains", "ph ph-grains-slash": "Grains Slash", "ph ph-graph": "Graph", "ph ph-grid-four": "Grid Four", "ph ph-grid-nine": "Grid Nine", "ph ph-guitar": "Guitar", "ph ph-hamburger": "Hamburger", "ph ph-hammer": "Hammer", "ph ph-hand": "Hand", "ph ph-handbag": "Handbag", "ph ph-handbag-simple": "Handbag Simple", "ph ph-hand-coins": "Hand Coins", "ph ph-hand-eye": "Hand Eye", "ph ph-hand-fist": "Hand Fist", "ph ph-hand-grabbing": "Hand Grabbing", "ph ph-hand-heart": "Hand Heart", "ph ph-hand-palm": "Hand Palm", "ph ph-hand-pointing": "Hand Pointing", "ph ph-hands-clapping": "Hands Clapping", "ph ph-handshake": "Handshake", "ph ph-hand-soap": "Hand Soap", "ph ph-hands-praying": "Hands Praying", "ph ph-hand-swipe-left": "Hand Swipe Left", "ph ph-hand-swipe-right": "Hand Swipe Right", "ph ph-hand-tap": "Hand Tap", "ph ph-hand-waving": "Hand Waving", "ph ph-hard-drive": "Hard Drive", "ph ph-hard-drives": "Hard Drives", "ph ph-hash": "Hash", "ph ph-hash-straight": "Hash Straight", "ph ph-headlights": "Headlights", "ph ph-headphones": "Headphones", "ph ph-headset": "Headset", "ph ph-heart": "Heart", "ph ph-heartbeat": "Heartbeat", "ph ph-heart-break": "Heart Break", "ph ph-heart-half": "Heart Half", "ph ph-heart-straight": "Heart Straight", "ph ph-heart-straight-break": "Heart Straight Break", "ph ph-hexagon": "Hexagon", "ph ph-high-heel": "High Heel", "ph ph-highlighter-circle": "Highlighter Circle", "ph ph-hoodie": "Hoodie", "ph ph-horse": "Horse", "ph ph-hourglass": "Hourglass", "ph ph-hourglass-high": "Hourglass High", "ph ph-hourglass-low": "Hourglass Low", "ph ph-hourglass-medium": "Hourglass Medium", "ph ph-hourglass-simple": "Hourglass Simple", "ph ph-hourglass-simple-high": "Hourglass Simple High", "ph ph-hourglass-simple-low": "Hourglass Simple Low", "ph ph-hourglass-simple-medium": "Hourglass Simple Medium", "ph ph-house": "House", "ph ph-house-line": "House Line", "ph ph-house-simple": "House Simple", "ph ph-ice-cream": "Ice Cream", "ph ph-identification-badge": "Identification Badge", "ph ph-identification-card": "Identification Card", "ph ph-image": "Image", "ph ph-images": "Images", "ph ph-image-square": "Image Square", "ph ph-images-square": "Images Square", "ph ph-infinity": "Infinity", "ph ph-info": "Info", "ph ph-instagram-logo": "Instagram Logo", "ph ph-intersect": "Intersect", "ph ph-intersect-square": "Intersect Square", "ph ph-intersect-three": "Intersect Three", "ph ph-jeep": "Jeep", "ph ph-kanban": "Kanban", "ph ph-key": "Key", "ph ph-keyboard": "Keyboard", "ph ph-keyhole": "Keyhole", "ph ph-key-return": "Key Return", "ph ph-knife": "Knife", "ph ph-ladder": "Ladder", "ph ph-ladder-simple": "Ladder Simple", "ph ph-lamp": "Lamp", "ph ph-laptop": "Laptop", "ph ph-layout": "Layout", "ph ph-leaf": "Leaf", "ph ph-lifebuoy": "Lifebuoy", "ph ph-lightbulb": "Lightbulb", "ph ph-lightbulb-filament": "Lightbulb Filament", "ph ph-lighthouse": "Lighthouse", "ph ph-lightning": "Lightning", "ph ph-lightning-a": "Lightning A", "ph ph-lightning-slash": "Lightning Slash", "ph ph-line-segment": "Line Segment", "ph ph-line-segments": "Line Segments", "ph ph-link": "Link", "ph ph-link-break": "Link Break", "ph ph-linkedin-logo": "Linkedin Logo", "ph ph-link-simple": "Link Simple", "ph ph-link-simple-break": "Link Simple Break", "ph ph-link-simple-horizontal": "Link Simple Horizontal", "ph ph-link-simple-horizontal-break": "Link Simple Horizontal Break", "ph ph-linux-logo": "Linux Logo", "ph ph-list": "List", "ph ph-list-bullets": "List Bullets", "ph ph-list-checks": "List Checks", "ph ph-list-dashes": "List Dashes", "ph ph-list-magnifying-glass": "List Magnifying Glass", "ph ph-list-numbers": "List Numbers", "ph ph-list-plus": "List Plus", "ph ph-lock": "Lock", "ph ph-lockers": "Lockers", "ph ph-lock-key": "Lock Key", "ph ph-lock-key-open": "Lock Key Open", "ph ph-lock-laminated": "Lock Laminated", "ph ph-lock-laminated-open": "Lock Laminated Open", "ph ph-lock-open": "Lock Open", "ph ph-lock-simple": "Lock Simple", "ph ph-lock-simple-open": "Lock Simple Open", "ph ph-magic-wand": "Magic Wand", "ph ph-magnet": "Magnet", "ph ph-magnet-straight": "Magnet Straight", "ph ph-magnifying-glass": "Magnifying Glass", "ph ph-magnifying-glass-minus": "Magnifying Glass Minus", "ph ph-magnifying-glass-plus": "Magnifying Glass Plus", "ph ph-map-pin": "Map Pin", "ph ph-map-pin-line": "Map Pin Line", "ph ph-map-trifold": "Map Trifold", "ph ph-marker-circle": "Marker Circle", "ph ph-martini": "Martini", "ph ph-mask-happy": "Mask Happy", "ph ph-mask-sad": "Mask Sad", "ph ph-math-operations": "Math Operations", "ph ph-medal": "Medal", "ph ph-medal-military": "Medal Military", "ph ph-medium-logo": "Medium Logo", "ph ph-megaphone": "Megaphone", "ph ph-megaphone-simple": "Megaphone Simple", "ph ph-messenger-logo": "Messenger Logo", "ph ph-meta-logo": "Meta Logo", "ph ph-metronome": "Metronome", "ph ph-microphone": "Microphone", "ph ph-microphone-slash": "Microphone Slash", "ph ph-microphone-stage": "Microphone Stage", "ph ph-microsoft-excel-logo": "Microsoft Excel Logo", "ph ph-microsoft-outlook-logo": "Microsoft Outlook Logo", "ph ph-microsoft-powerpoint-logo": "Microsoft Powerpoint Logo", "ph ph-microsoft-teams-logo": "Microsoft Teams Logo", "ph ph-microsoft-word-logo": "Microsoft Word Logo", "ph ph-minus": "Minus", "ph ph-minus-circle": "Minus Circle", "ph ph-minus-square": "Minus Square", "ph ph-money": "Money", "ph ph-monitor": "Monitor", "ph ph-monitor-play": "Monitor Play", "ph ph-moon": "Moon", "ph ph-moon-stars": "Moon Stars", "ph ph-moped": "Moped", "ph ph-moped-front": "Moped Front", "ph ph-mosque": "Mosque", "ph ph-motorcycle": "Motorcycle", "ph ph-mountains": "Mountains", "ph ph-mouse": "Mouse", "ph ph-mouse-simple": "Mouse Simple", "ph ph-music-note": "Music Note", "ph ph-music-notes": "Music Notes", "ph ph-music-note-simple": "Music Note Simple", "ph ph-music-notes-plus": "Music Notes Plus", "ph ph-music-notes-simple": "Music Notes Simple", "ph ph-navigation-arrow": "Navigation Arrow", "ph ph-needle": "Needle", "ph ph-newspaper": "Newspaper", "ph ph-newspaper-clipping": "Newspaper Clipping", "ph ph-notches": "Notches", "ph ph-note": "Note", "ph ph-note-blank": "Note Blank", "ph ph-notebook": "Notebook", "ph ph-notepad": "Notepad", "ph ph-note-pencil": "Note Pencil", "ph ph-notification": "Notification", "ph ph-notion-logo": "Notion Logo", "ph ph-number-circle-eight": "Number Circle Eight", "ph ph-number-circle-five": "Number Circle Five", "ph ph-number-circle-four": "Number Circle Four", "ph ph-number-circle-nine": "Number Circle Nine", "ph ph-number-circle-one": "Number Circle One", "ph ph-number-circle-seven": "Number Circle Seven", "ph ph-number-circle-six": "Number Circle Six", "ph ph-number-circle-three": "Number Circle Three", "ph ph-number-circle-two": "Number Circle Two", "ph ph-number-circle-zero": "Number Circle Zero", "ph ph-number-eight": "Number Eight", "ph ph-number-five": "Number Five", "ph ph-number-four": "Number Four", "ph ph-number-nine": "Number Nine", "ph ph-number-one": "Number One", "ph ph-number-seven": "Number Seven", "ph ph-number-six": "Number Six", "ph ph-number-square-eight": "Number Square Eight", "ph ph-number-square-five": "Number Square Five", "ph ph-number-square-four": "Number Square Four", "ph ph-number-square-nine": "Number Square Nine", "ph ph-number-square-one": "Number Square One", "ph ph-number-square-seven": "Number Square Seven", "ph ph-number-square-six": "Number Square Six", "ph ph-number-square-three": "Number Square Three", "ph ph-number-square-two": "Number Square Two", "ph ph-number-square-zero": "Number Square Zero", "ph ph-number-three": "Number Three", "ph ph-number-two": "Number Two", "ph ph-number-zero": "Number Zero", "ph ph-nut": "Nut", "ph ph-ny-times-logo": "Ny Times Logo", "ph ph-octagon": "Octagon", "ph ph-office-chair": "Office Chair", "ph ph-option": "Option", "ph ph-orange-slice": "Orange Slice", "ph ph-package": "Package", "ph ph-paint-brush": "Paint Brush", "ph ph-paint-brush-broad": "Paint Brush Broad", "ph ph-paint-brush-household": "Paint Brush Household", "ph ph-paint-bucket": "Paint Bucket", "ph ph-paint-roller": "Paint Roller", "ph ph-palette": "Palette", "ph ph-pants": "Pants", "ph ph-paperclip": "Paperclip", "ph ph-paperclip-horizontal": "Paperclip Horizontal", "ph ph-paper-plane": "Paper Plane", "ph ph-paper-plane-right": "Paper Plane Right", "ph ph-paper-plane-tilt": "Paper Plane Tilt", "ph ph-parachute": "Parachute", "ph ph-paragraph": "Paragraph", "ph ph-parallelogram": "Parallelogram", "ph ph-park": "Park", "ph ph-password": "Password", "ph ph-path": "Path", "ph ph-patreon-logo": "Patreon Logo", "ph ph-pause": "Pause", "ph ph-pause-circle": "Pause Circle", "ph ph-paw-print": "Paw Print", "ph ph-paypal-logo": "Paypal Logo", "ph ph-peace": "Peace", "ph ph-pen": "Pen", "ph ph-pencil": "Pencil", "ph ph-pencil-circle": "Pencil Circle", "ph ph-pencil-line": "Pencil Line", "ph ph-pencil-simple": "Pencil Simple", "ph ph-pencil-simple-line": "Pencil Simple Line", "ph ph-pencil-simple-slash": "Pencil Simple Slash", "ph ph-pencil-slash": "Pencil Slash", "ph ph-pen-nib": "Pen Nib", "ph ph-pen-nib-straight": "Pen Nib Straight", "ph ph-pentagram": "Pentagram", "ph ph-pepper": "Pepper", "ph ph-percent": "Percent", "ph ph-person": "Person", "ph ph-person-arms-spread": "Person Arms Spread", "ph ph-person-simple": "Person Simple", "ph ph-person-simple-bike": "Person Simple Bike", "ph ph-person-simple-run": "Person Simple Run", "ph ph-person-simple-throw": "Person Simple Throw", "ph ph-person-simple-walk": "Person Simple Walk", "ph ph-perspective": "Perspective", "ph ph-phone": "Phone", "ph ph-phone-call": "Phone Call", "ph ph-phone-disconnect": "Phone Disconnect", "ph ph-phone-incoming": "Phone Incoming", "ph ph-phone-outgoing": "Phone Outgoing", "ph ph-phone-plus": "Phone Plus", "ph ph-phone-slash": "Phone Slash", "ph ph-phone-x": "Phone X", "ph ph-phosphor-logo": "Phosphor Logo", "ph ph-pi": "Pi", "ph ph-piano-keys": "Piano Keys", "ph ph-picture-in-picture": "Picture In Picture", "ph ph-piggy-bank": "Piggy Bank", "ph ph-pill": "Pill", "ph ph-pinterest-logo": "Pinterest Logo", "ph ph-pinwheel": "Pinwheel", "ph ph-pizza": "Pizza", "ph ph-placeholder": "Placeholder", "ph ph-planet": "Planet", "ph ph-plant": "Plant", "ph ph-play": "Play", "ph ph-play-circle": "Play Circle", "ph ph-playlist": "Playlist", "ph ph-play-pause": "Play Pause", "ph ph-plug": "Plug", "ph ph-plug-charging": "Plug Charging", "ph ph-plugs": "Plugs", "ph ph-plugs-connected": "Plugs Connected", "ph ph-plus": "Plus", "ph ph-plus-circle": "Plus Circle", "ph ph-plus-minus": "Plus Minus", "ph ph-plus-square": "Plus Square", "ph ph-poker-chip": "Poker Chip", "ph ph-police-car": "Police Car", "ph ph-polygon": "Polygon", "ph ph-popcorn": "Popcorn", "ph ph-potted-plant": "Potted Plant", "ph ph-power": "Power", "ph ph-prescription": "Prescription", "ph ph-presentation": "Presentation", "ph ph-presentation-chart": "Presentation Chart", "ph ph-printer": "Printer", "ph ph-prohibit": "Prohibit", "ph ph-prohibit-inset": "Prohibit Inset", "ph ph-projector-screen": "Projector Screen", "ph ph-projector-screen-chart": "Projector Screen Chart", "ph ph-pulse": "Pulse", "ph ph-activity": "Activity", "ph ph-push-pin": "Push Pin", "ph ph-push-pin-simple": "Push Pin Simple", "ph ph-push-pin-simple-slash": "Push Pin Simple Slash", "ph ph-push-pin-slash": "Push Pin Slash", "ph ph-puzzle-piece": "Puzzle Piece", "ph ph-qr-code": "Qr Code", "ph ph-question": "Question", "ph ph-queue": "Queue", "ph ph-quotes": "Quotes", "ph ph-radical": "Radical", "ph ph-radio": "Radio", "ph ph-radioactive": "Radioactive", "ph ph-radio-button": "Radio Button", "ph ph-rainbow": "Rainbow", "ph ph-rainbow-cloud": "Rainbow Cloud", "ph ph-read-cv-logo": "Read Cv Logo", "ph ph-receipt": "Receipt", "ph ph-receipt-x": "Receipt X", "ph ph-record": "Record", "ph ph-rectangle": "Rectangle", "ph ph-recycle": "Recycle", "ph ph-reddit-logo": "Reddit Logo", "ph ph-repeat": "Repeat", "ph ph-repeat-once": "Repeat Once", "ph ph-rewind": "Rewind", "ph ph-rewind-circle": "Rewind Circle", "ph ph-road-horizon": "Road Horizon", "ph ph-robot": "Robot", "ph ph-rocket": "Rocket", "ph ph-rocket-launch": "Rocket Launch", "ph ph-rows": "Rows", "ph ph-rss": "Rss", "ph ph-rss-simple": "Rss Simple", "ph ph-rug": "Rug", "ph ph-ruler": "Ruler", "ph ph-scales": "Scales", "ph ph-scan": "Scan", "ph ph-scissors": "Scissors", "ph ph-scooter": "Scooter", "ph ph-screencast": "Screencast", "ph ph-scribble-loop": "Scribble Loop", "ph ph-scroll": "Scroll", "ph ph-seal": "Seal", "ph ph-seal-check": "Seal Check", "ph ph-seal-question": "Seal Question", "ph ph-seal-warning": "Seal Warning", "ph ph-circle-wavy": "Circle Wavy", "ph ph-circle-wavy-check": "Circle Wavy Check", "ph ph-circle-wavy-question": "Circle Wavy Question", "ph ph-circle-wavy-warning": "Circle Wavy Warning", "ph ph-selection": "Selection", "ph ph-selection-all": "Selection All", "ph ph-selection-background": "Selection Background", "ph ph-selection-foreground": "Selection Foreground", "ph ph-selection-inverse": "Selection Inverse", "ph ph-selection-plus": "Selection Plus", "ph ph-selection-slash": "Selection Slash", "ph ph-shapes": "Shapes", "ph ph-share": "Share", "ph ph-share-fat": "Share Fat", "ph ph-share-network": "Share Network", "ph ph-shield": "Shield", "ph ph-shield-check": "Shield Check", "ph ph-shield-checkered": "Shield Checkered", "ph ph-shield-chevron": "Shield Chevron", "ph ph-shield-plus": "Shield Plus", "ph ph-shield-slash": "Shield Slash", "ph ph-shield-star": "Shield Star", "ph ph-shield-warning": "Shield Warning", "ph ph-shirt-folded": "Shirt Folded", "ph ph-shooting-star": "Shooting Star", "ph ph-shopping-bag": "Shopping Bag", "ph ph-shopping-bag-open": "Shopping Bag Open", "ph ph-shopping-cart": "Shopping Cart", "ph ph-shopping-cart-simple": "Shopping Cart Simple", "ph ph-shower": "Shower", "ph ph-shrimp": "Shrimp", "ph ph-shuffle": "Shuffle", "ph ph-shuffle-angular": "Shuffle Angular", "ph ph-shuffle-simple": "Shuffle Simple", "ph ph-sidebar": "Sidebar", "ph ph-sidebar-simple": "Sidebar Simple", "ph ph-sigma": "Sigma", "ph ph-signature": "Signature", "ph ph-sign-in": "Sign In", "ph ph-sign-out": "Sign Out", "ph ph-signpost": "Signpost", "ph ph-sim-card": "Sim Card", "ph ph-siren": "Siren", "ph ph-sketch-logo": "Sketch Logo", "ph ph-skip-back": "Skip Back", "ph ph-skip-back-circle": "Skip Back Circle", "ph ph-skip-forward": "Skip Forward", "ph ph-skip-forward-circle": "Skip Forward Circle", "ph ph-skull": "Skull", "ph ph-slack-logo": "Slack Logo", "ph ph-sliders": "Sliders", "ph ph-sliders-horizontal": "Sliders Horizontal", "ph ph-slideshow": "Slideshow", "ph ph-smiley": "Smiley", "ph ph-smiley-angry": "Smiley Angry", "ph ph-smiley-blank": "Smiley Blank", "ph ph-smiley-meh": "Smiley Meh", "ph ph-smiley-nervous": "Smiley Nervous", "ph ph-smiley-sad": "Smiley Sad", "ph ph-smiley-sticker": "Smiley Sticker", "ph ph-smiley-wink": "Smiley Wink", "ph ph-smiley-x-eyes": "Smiley X Eyes", "ph ph-snapchat-logo": "Snapchat Logo", "ph ph-sneaker": "Sneaker", "ph ph-sneaker-move": "Sneaker Move", "ph ph-snowflake": "Snowflake", "ph ph-soccer-ball": "Soccer Ball", "ph ph-sort-ascending": "Sort Ascending", "ph ph-sort-descending": "Sort Descending", "ph ph-soundcloud-logo": "Soundcloud Logo", "ph ph-spade": "Spade", "ph ph-sparkle": "Sparkle", "ph ph-speaker-hifi": "Speaker Hifi", "ph ph-speaker-high": "Speaker High", "ph ph-speaker-low": "Speaker Low", "ph ph-speaker-none": "Speaker None", "ph ph-speaker-simple-high": "Speaker Simple High", "ph ph-speaker-simple-low": "Speaker Simple Low", "ph ph-speaker-simple-none": "Speaker Simple None", "ph ph-speaker-simple-slash": "Speaker Simple Slash", "ph ph-speaker-simple-x": "Speaker Simple X", "ph ph-speaker-slash": "Speaker Slash", "ph ph-speaker-x": "Speaker X", "ph ph-spinner": "Spinner", "ph ph-spinner-gap": "Spinner Gap", "ph ph-spiral": "Spiral", "ph ph-split-horizontal": "Split Horizontal", "ph ph-split-vertical": "Split Vertical", "ph ph-spotify-logo": "Spotify Logo", "ph ph-square": "Square", "ph ph-square-half": "Square Half", "ph ph-square-half-bottom": "Square Half Bottom", "ph ph-square-logo": "Square Logo", "ph ph-squares-four": "Squares Four", "ph ph-square-split-horizontal": "Square Split Horizontal", "ph ph-square-split-vertical": "Square Split Vertical", "ph ph-stack": "Stack", "ph ph-stack-overflow-logo": "Stack Overflow Logo", "ph ph-stack-simple": "Stack Simple", "ph ph-stairs": "Stairs", "ph ph-stamp": "Stamp", "ph ph-star": "Star", "ph ph-star-and-crescent": "Star And Crescent", "ph ph-star-four": "Star Four", "ph ph-star-half": "Star Half", "ph ph-star-of-david": "Star Of David", "ph ph-steering-wheel": "Steering Wheel", "ph ph-steps": "Steps", "ph ph-stethoscope": "Stethoscope", "ph ph-sticker": "Sticker", "ph ph-stool": "Stool", "ph ph-stop": "Stop", "ph ph-stop-circle": "Stop Circle", "ph ph-storefront": "Storefront", "ph ph-strategy": "Strategy", "ph ph-stripe-logo": "Stripe Logo", "ph ph-student": "Student", "ph ph-subtitles": "Subtitles", "ph ph-subtract": "Subtract", "ph ph-subtract-square": "Subtract Square", "ph ph-suitcase": "Suitcase", "ph ph-suitcase-rolling": "Suitcase Rolling", "ph ph-suitcase-simple": "Suitcase Simple", "ph ph-sun": "Sun", "ph ph-sun-dim": "Sun Dim", "ph ph-sunglasses": "Sunglasses", "ph ph-sun-horizon": "Sun Horizon", "ph ph-swap": "Swap", "ph ph-swatches": "Swatches", "ph ph-swimming-pool": "Swimming Pool", "ph ph-sword": "Sword", "ph ph-synagogue": "Synagogue", "ph ph-syringe": "Syringe", "ph ph-table": "Table", "ph ph-tabs": "Tabs", "ph ph-tag": "Tag", "ph ph-tag-chevron": "Tag Chevron", "ph ph-tag-simple": "Tag Simple", "ph ph-target": "Target", "ph ph-taxi": "Taxi", "ph ph-telegram-logo": "Telegram Logo", "ph ph-television": "Television", "ph ph-television-simple": "Television Simple", "ph ph-tennis-ball": "Tennis Ball", "ph ph-tent": "Tent", "ph ph-terminal": "Terminal", "ph ph-terminal-window": "Terminal Window", "ph ph-test-tube": "Test Tube", "ph ph-text-aa": "Text Aa", "ph ph-text-align-center": "Text Align Center", "ph ph-text-align-justify": "Text Align Justify", "ph ph-text-align-left": "Text Align Left", "ph ph-text-align-right": "Text Align Right", "ph ph-text-a-underline": "Text A Underline", "ph ph-text-b": "Text B", "ph ph-text-bolder": "Text Bolder", "ph ph-textbox": "Textbox", "ph ph-text-columns": "Text Columns", "ph ph-text-h": "Text H", "ph ph-text-h-five": "Text H Five", "ph ph-text-h-four": "Text H Four", "ph ph-text-h-one": "Text H One", "ph ph-text-h-six": "Text H Six", "ph ph-text-h-three": "Text H Three", "ph ph-text-h-two": "Text H Two", "ph ph-text-indent": "Text Indent", "ph ph-text-italic": "Text Italic", "ph ph-text-outdent": "Text Outdent", "ph ph-text-strikethrough": "Text Strikethrough", "ph ph-text-t": "Text T", "ph ph-text-underline": "Text Underline", "ph ph-thermometer": "Thermometer", "ph ph-thermometer-cold": "Thermometer Cold", "ph ph-thermometer-hot": "Thermometer Hot", "ph ph-thermometer-simple": "Thermometer Simple", "ph ph-thumbs-down": "Thumbs Down", "ph ph-thumbs-up": "Thumbs Up", "ph ph-ticket": "Ticket", "ph ph-tidal-logo": "Tidal Logo", "ph ph-tiktok-logo": "Tiktok Logo", "ph ph-timer": "Timer", "ph ph-tipi": "Tipi", "ph ph-toggle-left": "Toggle Left", "ph ph-toggle-right": "Toggle Right", "ph ph-toilet": "Toilet", "ph ph-toilet-paper": "Toilet Paper", "ph ph-toolbox": "Toolbox", "ph ph-tooth": "Tooth", "ph ph-tote": "Tote", "ph ph-tote-simple": "Tote Simple", "ph ph-trademark": "Trademark", "ph ph-trademark-registered": "Trademark Registered", "ph ph-traffic-cone": "Traffic Cone", "ph ph-traffic-sign": "Traffic Sign", "ph ph-traffic-signal": "Traffic Signal", "ph ph-train": "Train", "ph ph-train-regional": "Train Regional", "ph ph-train-simple": "Train Simple", "ph ph-tram": "Tram", "ph ph-translate": "Translate", "ph ph-trash": "Trash", "ph ph-trash-simple": "Trash Simple", "ph ph-tray": "Tray", "ph ph-tree": "Tree", "ph ph-tree-evergreen": "Tree Evergreen", "ph ph-tree-palm": "Tree Palm", "ph ph-tree-structure": "Tree Structure", "ph ph-trend-down": "Trend Down", "ph ph-trend-up": "Trend Up", "ph ph-triangle": "Triangle", "ph ph-trophy": "Trophy", "ph ph-truck": "Truck", "ph ph-t-shirt": "T Shirt", "ph ph-twitch-logo": "Twitch Logo", "ph ph-twitter-logo": "Twitter Logo", "ph ph-umbrella": "Umbrella", "ph ph-umbrella-simple": "Umbrella Simple", "ph ph-unite": "Unite", "ph ph-unite-square": "Unite Square", "ph ph-upload": "Upload", "ph ph-upload-simple": "Upload Simple", "ph ph-usb": "Usb", "ph ph-user": "User", "ph ph-user-circle": "User Circle", "ph ph-user-circle-gear": "User Circle Gear", "ph ph-user-circle-minus": "User Circle Minus", "ph ph-user-circle-plus": "User Circle Plus", "ph ph-user-focus": "User Focus", "ph ph-user-gear": "User Gear", "ph ph-user-list": "User List", "ph ph-user-minus": "User Minus", "ph ph-user-plus": "User Plus", "ph ph-user-rectangle": "User Rectangle", "ph ph-users": "Users", "ph ph-users-four": "Users Four", "ph ph-user-square": "User Square", "ph ph-users-three": "Users Three", "ph ph-user-switch": "User Switch", "ph ph-van": "Van", "ph ph-vault": "Vault", "ph ph-vibrate": "Vibrate", "ph ph-video": "Video", "ph ph-video-camera": "Video Camera", "ph ph-video-camera-slash": "Video Camera Slash", "ph ph-vignette": "Vignette", "ph ph-vinyl-record": "Vinyl Record", "ph ph-virtual-reality": "Virtual Reality", "ph ph-virus": "Virus", "ph ph-voicemail": "Voicemail", "ph ph-volleyball": "Volleyball", "ph ph-wall": "Wall", "ph ph-wallet": "Wallet", "ph ph-warehouse": "Warehouse", "ph ph-warning": "Warning", "ph ph-warning-circle": "Warning Circle", "ph ph-warning-diamond": "Warning Diamond", "ph ph-warning-octagon": "Warning Octagon", "ph ph-watch": "Watch", "ph ph-waveform": "Waveform", "ph ph-waves": "Waves", "ph ph-wave-sawtooth": "Wave Sawtooth", "ph ph-wave-sine": "Wave Sine", "ph ph-wave-square": "Wave Square", "ph ph-wave-triangle": "Wave Triangle", "ph ph-webcam": "Webcam", "ph ph-webcam-slash": "Webcam Slash", "ph ph-webhooks-logo": "Webhooks Logo", "ph ph-wechat-logo": "Wechat Logo", "ph ph-whatsapp-logo": "Whatsapp Logo", "ph ph-wheelchair": "Wheelchair", "ph ph-wheelchair-motion": "Wheelchair Motion", "ph ph-wifi-high": "Wifi High", "ph ph-wifi-low": "Wifi Low", "ph ph-wifi-medium": "Wifi Medium", "ph ph-wifi-none": "Wifi None", "ph ph-wifi-slash": "Wifi Slash", "ph ph-wifi-x": "Wifi X", "ph ph-wind": "Wind", "ph ph-windows-logo": "Windows Logo", "ph ph-wine": "Wine", "ph ph-wrench": "Wrench", "ph ph-x": "X", "ph ph-x-circle": "X Circle", "ph ph-x-square": "X Square", "ph ph-yin-yang": "Yin Yang", "ph ph-youtube-logo": "YouTube Logo" }; ================================================ FILE: modules/backend/assets/js/preferences/preferences.js ================================================ $(document).ready(function() { var editorEl = $('#editorpreferencesCodeeditor'), editor = editorEl.codeEditor('getEditorObject'), session = editor.getSession(), renderer = editor.renderer editorEl.height($('#editorSettingsForm').height() - 23) $('#Form-field-Preference-editor_theme').on('change', function() { editorEl.codeEditor('setTheme', $(this).val()) }) $('#Form-field-Preference-editor_font_size').on('change', function() { editor.setFontSize(parseInt($(this).val())) }) $('#Form-field-Preference-editor_word_wrap').on('change', function() { editorEl.codeEditor('setWordWrap', $(this).val()) }) $('#Form-field-Preference-editor_code_folding').on('change', function() { session.setFoldStyle($(this).val()) }) $('#Form-field-Preference-editor_autocompletion').on('change', function() { editor.setOption('enableBasicAutocompletion', false) editor.setOption('enableLiveAutocompletion', false) var val = $(this).val() if (val == 'basic') { editor.setOption('enableBasicAutocompletion', true) } else if (val == 'live') { editor.setOption('enableLiveAutocompletion', true) } }) $('#Form-field-Preference-editor_tab_size').on('change', function() { session.setTabSize($(this).val()) }) $('#Form-field-Preference-editor_show_invisibles').on('change', function() { editor.setShowInvisibles($(this).is(':checked')) }) $('#Form-field-Preference-editor_display_indent_guides').on('change', function() { editor.setDisplayIndentGuides($(this).is(':checked')) }) $('#Form-field-Preference-editor_show_print_margin').on('change', function() { editor.setShowPrintMargin($(this).is(':checked')) }) $('#Form-field-Preference-editor_highlight_active_line').on('change', function() { editor.setHighlightActiveLine($(this).is(':checked')) }) $('#Form-field-Preference-editor_use_hard_tabs').on('change', function() { session.setUseSoftTabs(!$(this).is(':checked')) }) $('#Form-field-Preference-editor_show_gutter').on('change', function() { renderer.setShowGutter($(this).is(':checked')) }) }) ================================================ FILE: modules/backend/assets/js/vendor-min.js ================================================ !function(M){M.waterfall=function(){var b=[],p=M.Deferred(),e=0;return M.each(arguments,function(o,z){b.push(function(){var o,t=[].slice.apply(arguments);"function"==typeof z?(o=z.apply(null,t))&&o.promise||(o=M.Deferred()[!1===o?"reject":"resolve"](o)):o=z&&z.promise?z:M.Deferred()[!1===z?"reject":"resolve"](z),o.fail(function(){p.reject.apply(p,[].slice.apply(arguments))}).done(function(M){e++,t.push(M),e==b.length?p.resolve.apply(p,t):b[e].apply(null,t)})})}),b.length?b[0]():p.resolve(),p}}(jQuery),function(){function M(M){return M&&M.__esModule?M.default:M}function b(M){if(void 0===M)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return M}function p(M,b){if(!(M instanceof b))throw new TypeError("Cannot call a class as a function")}function e(M,b){for(var p=0;p<b.length;p++){var e=b[p];e.enumerable=e.enumerable||!1,e.configurable=!0,"value"in e&&(e.writable=!0),Object.defineProperty(M,e.key,e)}}function o(M,b,p){return b&&e(M.prototype,b),p&&e(M,p),M}function z(M){return z=Object.setPrototypeOf?Object.getPrototypeOf:function(M){return M.__proto__||Object.getPrototypeOf(M)},z(M)}function t(M,b){return t=Object.setPrototypeOf||function(M,b){return M.__proto__=b,M},t(M,b)}function c(M,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function");M.prototype=Object.create(b&&b.prototype,{constructor:{value:M,writable:!0,configurable:!0}}),b&&t(M,b)}function n(M,p){return!p||"object"!=((e=p)&&e.constructor===Symbol?"symbol":typeof e)&&"function"!=typeof p?b(M):p;var e}var O;function i(M){return Array.isArray(M)||"[object Object]"=={}.toString.call(M)}function r(M){return!M||"object"!=typeof M&&"function"!=typeof M}O=function M(){var b=[].slice.call(arguments),p=!1;"boolean"==typeof b[0]&&(p=b.shift());var e=b[0];if(r(e))throw new Error("extendee must be an object");for(var o=b.slice(1),z=o.length,t=0;t<z;t++){var c=o[t];for(var n in c)if(Object.prototype.hasOwnProperty.call(c,n)){var O=c[n];if(p&&i(O)){var a=Array.isArray(O)?[]:{};e[n]=M(!0,Object.prototype.hasOwnProperty.call(e,n)&&!r(e[n])?e[n]:a,O)}else e[n]=O}}return e};var a=function(){"use strict";function M(){p(this,M)}return o(M,[{key:"on",value:function(M,b){return this._callbacks=this._callbacks||{},this._callbacks[M]||(this._callbacks[M]=[]),this._callbacks[M].push(b),this}},{key:"emit",value:function(M){for(var b=arguments.length,p=new Array(b>1?b-1:0),e=1;e<b;e++)p[e-1]=arguments[e];this._callbacks=this._callbacks||{};var o=this._callbacks[M],z=!0,t=!1,c=void 0;if(o)try{for(var n,O=o[Symbol.iterator]();!(z=(n=O.next()).done);z=!0){n.value.apply(this,p)}}catch(M){t=!0,c=M}finally{try{z||null==O.return||O.return()}finally{if(t)throw c}}return this.element&&this.element.dispatchEvent(this.makeEvent("dropzone:"+M,{args:p})),this}},{key:"makeEvent",value:function(M,b){var p={bubbles:!0,cancelable:!0,detail:b};if("function"==typeof window.CustomEvent)return new CustomEvent(M,p);var e=document.createEvent("CustomEvent");return e.initCustomEvent(M,p.bubbles,p.cancelable,p.detail),e}},{key:"off",value:function(M,b){if(!this._callbacks||0===arguments.length)return this._callbacks={},this;var p=this._callbacks[M];if(!p)return this;if(1===arguments.length)return delete this._callbacks[M],this;for(var e=0;e<p.length;e++){if(p[e]===b){p.splice(e,1);break}}return this}}]),M}(),s={url:null,method:"post",withCredentials:!1,timeout:null,parallelUploads:2,uploadMultiple:!1,chunking:!1,forceChunking:!1,chunkSize:2097152,parallelChunkUploads:!1,retryChunks:!1,retryChunksLimit:3,maxFilesize:256,paramName:"file",createImageThumbnails:!0,maxThumbnailFilesize:10,thumbnailWidth:120,thumbnailHeight:120,thumbnailMethod:"crop",resizeWidth:null,resizeHeight:null,resizeMimeType:null,resizeQuality:.8,resizeMethod:"contain",filesizeBase:1e3,maxFiles:null,headers:null,defaultHeaders:!0,clickable:!0,ignoreHiddenFiles:!0,acceptedFiles:null,acceptedMimeTypes:null,autoProcessQueue:!0,autoQueue:!0,addRemoveLinks:!1,previewsContainer:null,disablePreviews:!1,hiddenInputContainer:"body",capture:null,renameFilename:null,renameFile:null,forceFallback:!1,dictDefaultMessage:"Drop files here to upload",dictFallbackMessage:"Your browser does not support drag'n'drop file uploads.",dictFallbackText:"Please use the fallback form below to upload your files like in the olden days.",dictFileTooBig:"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",dictInvalidFileType:"You can't upload files of this type.",dictResponseError:"Server responded with {{statusCode}} code.",dictCancelUpload:"Cancel upload",dictUploadCanceled:"Upload canceled.",dictCancelUploadConfirmation:"Are you sure you want to cancel this upload?",dictRemoveFile:"Remove file",dictRemoveFileConfirmation:null,dictMaxFilesExceeded:"You can not upload any more files.",dictFileSizeUnits:{tb:"TB",gb:"GB",mb:"MB",kb:"KB",b:"b"},init:function(){},params:function(M,b,p){if(p)return{dzuuid:p.file.upload.uuid,dzchunkindex:p.index,dztotalfilesize:p.file.size,dzchunksize:this.options.chunkSize,dztotalchunkcount:p.file.upload.totalChunkCount,dzchunkbyteoffset:p.index*this.options.chunkSize}},accept:function(M,b){return b()},chunksUploaded:function(M,b){b()},binaryBody:!1,fallback:function(){var M;this.element.className="".concat(this.element.className," dz-browser-not-supported");var b=!0,p=!1,e=void 0;try{for(var o,z=this.element.getElementsByTagName("div")[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;if(/(^| )dz-message($| )/.test(t.className)){M=t,t.className="dz-message";break}}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}M||(M=A.createElement('<div class="dz-message"><span></span></div>'),this.element.appendChild(M));var c=M.getElementsByTagName("span")[0];return c&&(null!=c.textContent?c.textContent=this.options.dictFallbackMessage:null!=c.innerText&&(c.innerText=this.options.dictFallbackMessage)),this.element.appendChild(this.getFallbackForm())},resize:function(M,b,p,e){var o={srcX:0,srcY:0,srcWidth:M.width,srcHeight:M.height},z=M.width/M.height;null==b&&null==p?(b=o.srcWidth,p=o.srcHeight):null==b?b=p*z:null==p&&(p=b/z);var t=(b=Math.min(b,o.srcWidth))/(p=Math.min(p,o.srcHeight));if(o.srcWidth>b||o.srcHeight>p)if("crop"===e)z>t?(o.srcHeight=M.height,o.srcWidth=o.srcHeight*t):(o.srcWidth=M.width,o.srcHeight=o.srcWidth/t);else{if("contain"!==e)throw new Error("Unknown resizeMethod '".concat(e,"'"));z>t?p=b/z:b=p*z}return o.srcX=(M.width-o.srcWidth)/2,o.srcY=(M.height-o.srcHeight)/2,o.trgWidth=b,o.trgHeight=p,o},transformFile:function(M,b){return(this.options.resizeWidth||this.options.resizeHeight)&&M.type.match(/image.*/)?this.resizeImage(M,this.options.resizeWidth,this.options.resizeHeight,this.options.resizeMethod,b):b(M)},previewTemplate:M('<div class="dz-file-preview dz-preview"> <div class="dz-image"><img data-dz-thumbnail=""></div> <div class="dz-details"> <div class="dz-size"><span data-dz-size=""></span></div> <div class="dz-filename"><span data-dz-name=""></span></div> </div> <div class="dz-progress"> <span class="dz-upload" data-dz-uploadprogress=""></span> </div> <div class="dz-error-message"><span data-dz-errormessage=""></span></div> <div class="dz-success-mark"> <svg width="54" height="54" fill="#fff"><path d="m10.207 29.793 4.086-4.086a1 1 0 0 1 1.414 0l5.586 5.586a1 1 0 0 0 1.414 0l15.586-15.586a1 1 0 0 1 1.414 0l4.086 4.086a1 1 0 0 1 0 1.414L22.707 42.293a1 1 0 0 1-1.414 0L10.207 31.207a1 1 0 0 1 0-1.414Z"/></svg> </div> <div class="dz-error-mark"> <svg width="54" height="54" fill="#fff"><path d="m26.293 20.293-7.086-7.086a1 1 0 0 0-1.414 0l-4.586 4.586a1 1 0 0 0 0 1.414l7.086 7.086a1 1 0 0 1 0 1.414l-7.086 7.086a1 1 0 0 0 0 1.414l4.586 4.586a1 1 0 0 0 1.414 0l7.086-7.086a1 1 0 0 1 1.414 0l7.086 7.086a1 1 0 0 0 1.414 0l4.586-4.586a1 1 0 0 0 0-1.414l-7.086-7.086a1 1 0 0 1 0-1.414l7.086-7.086a1 1 0 0 0 0-1.414l-4.586-4.586a1 1 0 0 0-1.414 0l-7.086 7.086a1 1 0 0 1-1.414 0Z"/></svg> </div> </div>'),drop:function(M){return this.element.classList.remove("dz-drag-hover")},dragstart:function(M){},dragend:function(M){return this.element.classList.remove("dz-drag-hover")},dragenter:function(M){return this.element.classList.add("dz-drag-hover")},dragover:function(M){return this.element.classList.add("dz-drag-hover")},dragleave:function(M){return this.element.classList.remove("dz-drag-hover")},paste:function(M){},reset:function(){return this.element.classList.remove("dz-started")},addedfile:function(M){if(this.element===this.previewsContainer&&this.element.classList.add("dz-started"),this.previewsContainer&&!this.options.disablePreviews){var b=this;M.previewElement=A.createElement(this.options.previewTemplate.trim()),M.previewTemplate=M.previewElement,this.previewsContainer.appendChild(M.previewElement);var p=!0,e=!1,o=void 0;try{for(var z,t=M.previewElement.querySelectorAll("[data-dz-name]")[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;c.textContent=M.name}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}var n=!0,O=!1,i=void 0;try{for(var r,a=M.previewElement.querySelectorAll("[data-dz-size]")[Symbol.iterator]();!(n=(r=a.next()).done);n=!0)(c=r.value).innerHTML=this.filesize(M.size)}catch(M){O=!0,i=M}finally{try{n||null==a.return||a.return()}finally{if(O)throw i}}this.options.addRemoveLinks&&(M._removeLink=A.createElement('<a class="dz-remove" href="javascript:undefined;" data-dz-remove>'.concat(this.options.dictRemoveFile,"</a>")),M.previewElement.appendChild(M._removeLink));var s=function(p){var e=b;if(p.preventDefault(),p.stopPropagation(),M.status===A.UPLOADING)return A.confirm(b.options.dictCancelUploadConfirmation,function(){return e.removeFile(M)});var o=b;return b.options.dictRemoveFileConfirmation?A.confirm(b.options.dictRemoveFileConfirmation,function(){return o.removeFile(M)}):b.removeFile(M)},d=!0,l=!1,q=void 0;try{for(var u,f=M.previewElement.querySelectorAll("[data-dz-remove]")[Symbol.iterator]();!(d=(u=f.next()).done);d=!0)u.value.addEventListener("click",s)}catch(M){l=!0,q=M}finally{try{d||null==f.return||f.return()}finally{if(l)throw q}}}},removedfile:function(M){return null!=M.previewElement&&null!=M.previewElement.parentNode&&M.previewElement.parentNode.removeChild(M.previewElement),this._updateMaxFilesReachedClass()},thumbnail:function(M,b){if(M.previewElement){M.previewElement.classList.remove("dz-file-preview");var p=!0,e=!1,o=void 0;try{for(var z,t=M.previewElement.querySelectorAll("[data-dz-thumbnail]")[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;c.alt=M.name,c.src=b}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}return setTimeout(function(){return M.previewElement.classList.add("dz-image-preview")},1)}},error:function(M,b){if(M.previewElement){M.previewElement.classList.add("dz-error"),"string"!=typeof b&&b.error&&(b=b.error);var p=!0,e=!1,o=void 0;try{for(var z,t=M.previewElement.querySelectorAll("[data-dz-errormessage]")[Symbol.iterator]();!(p=(z=t.next()).done);p=!0)z.value.textContent=b}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}}},errormultiple:function(){},processing:function(M){if(M.previewElement&&(M.previewElement.classList.add("dz-processing"),M._removeLink))return M._removeLink.innerHTML=this.options.dictCancelUpload},processingmultiple:function(){},uploadprogress:function(M,b,p){var e=!0,o=!1,z=void 0;if(M.previewElement)try{for(var t,c=M.previewElement.querySelectorAll("[data-dz-uploadprogress]")[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n=t.value;"PROGRESS"===n.nodeName?n.value=b:n.style.width="".concat(b,"%")}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}},totaluploadprogress:function(){},sending:function(){},sendingmultiple:function(){},success:function(M){if(M.previewElement)return M.previewElement.classList.add("dz-success")},successmultiple:function(){},canceled:function(M){return this.emit("error",M,this.options.dictUploadCanceled)},canceledmultiple:function(){},complete:function(M){if(M._removeLink&&(M._removeLink.innerHTML=this.options.dictRemoveFile),M.previewElement)return M.previewElement.classList.add("dz-complete")},completemultiple:function(){},maxfilesexceeded:function(){},maxfilesreached:function(){},queuecomplete:function(){},addedfiles:function(){}},A=function(e){"use strict";function t(e,o){var c,i,r,a;if(p(this,t),(c=n(this,(i=t,z(i)).call(this))).element=e,c.clickableElements=[],c.listeners=[],c.files=[],"string"==typeof c.element&&(c.element=document.querySelector(c.element)),!c.element||null==c.element.nodeType)throw new Error("Invalid dropzone element.");if(c.element.dropzone)throw new Error("Dropzone already attached.");t.instances.push(b(c)),c.element.dropzone=b(c);var A=null!=(a=t.optionsForElement(c.element))?a:{};if(c.options=M(O)(!0,{},s,A,null!=o?o:{}),c.options.previewTemplate=c.options.previewTemplate.replace(/\n*/g,""),c.options.forceFallback||!t.isBrowserSupported())return n(c,c.options.fallback.call(b(c)));if(null==c.options.url&&(c.options.url=c.element.getAttribute("action")),!c.options.url)throw new Error("No URL provided.");if(c.options.acceptedFiles&&c.options.acceptedMimeTypes)throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");if(c.options.uploadMultiple&&c.options.chunking)throw new Error("You cannot set both: uploadMultiple and chunking.");if(c.options.binaryBody&&c.options.uploadMultiple)throw new Error("You cannot set both: binaryBody and uploadMultiple.");return c.options.acceptedMimeTypes&&(c.options.acceptedFiles=c.options.acceptedMimeTypes,delete c.options.acceptedMimeTypes),null!=c.options.renameFilename&&(c.options.renameFile=function(M){return c.options.renameFilename.call(b(c),M.name,M)}),"string"==typeof c.options.method&&(c.options.method=c.options.method.toUpperCase()),(r=c.getExistingFallback())&&r.parentNode&&r.parentNode.removeChild(r),!1!==c.options.previewsContainer&&(c.options.previewsContainer?c.previewsContainer=t.getElement(c.options.previewsContainer,"previewsContainer"):c.previewsContainer=c.element),c.options.clickable&&(!0===c.options.clickable?c.clickableElements=[c.element]:c.clickableElements=t.getElements(c.options.clickable,"clickable")),c.init(),c}return c(t,e),o(t,[{key:"getAcceptedFiles",value:function(){return this.files.filter(function(M){return M.accepted}).map(function(M){return M})}},{key:"getRejectedFiles",value:function(){return this.files.filter(function(M){return!M.accepted}).map(function(M){return M})}},{key:"getFilesWithStatus",value:function(M){return this.files.filter(function(b){return b.status===M}).map(function(M){return M})}},{key:"getQueuedFiles",value:function(){return this.getFilesWithStatus(t.QUEUED)}},{key:"getUploadingFiles",value:function(){return this.getFilesWithStatus(t.UPLOADING)}},{key:"getAddedFiles",value:function(){return this.getFilesWithStatus(t.ADDED)}},{key:"getActiveFiles",value:function(){return this.files.filter(function(M){return M.status===t.UPLOADING||M.status===t.QUEUED}).map(function(M){return M})}},{key:"init",value:function(){var M=this,b=this,p=this,e=this,o=this,z=this,c=this,n=this,O=this,i=this,r=this;if("form"===this.element.tagName&&this.element.setAttribute("enctype","multipart/form-data"),this.element.classList.contains("dropzone")&&!this.element.querySelector(".dz-message")&&this.element.appendChild(t.createElement('<div class="dz-default dz-message"><button class="dz-button" type="button">'.concat(this.options.dictDefaultMessage,"</button></div>"))),this.clickableElements.length){var a=this,s=function(){var M=a;a.hiddenFileInput&&a.hiddenFileInput.parentNode.removeChild(a.hiddenFileInput),a.hiddenFileInput=document.createElement("input"),a.hiddenFileInput.setAttribute("type","file"),(null===a.options.maxFiles||a.options.maxFiles>1)&&a.hiddenFileInput.setAttribute("multiple","multiple"),a.hiddenFileInput.className="dz-hidden-input",null!==a.options.acceptedFiles&&a.hiddenFileInput.setAttribute("accept",a.options.acceptedFiles),null!==a.options.capture&&a.hiddenFileInput.setAttribute("capture",a.options.capture),a.hiddenFileInput.setAttribute("tabindex","-1"),a.hiddenFileInput.style.visibility="hidden",a.hiddenFileInput.style.position="absolute",a.hiddenFileInput.style.top="0",a.hiddenFileInput.style.left="0",a.hiddenFileInput.style.height="0",a.hiddenFileInput.style.width="0",t.getElement(a.options.hiddenInputContainer,"hiddenInputContainer").appendChild(a.hiddenFileInput),a.hiddenFileInput.addEventListener("change",function(){var b=M.hiddenFileInput.files,p=!0,e=!1,o=void 0;if(b.length)try{for(var z,t=b[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;M.addFile(c)}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}M.emit("addedfiles",b),s()})};s()}this.URL=null!==window.URL?window.URL:window.webkitURL;var A=!0,d=!1,l=void 0;try{for(var q,u=this.events[Symbol.iterator]();!(A=(q=u.next()).done);A=!0){var f=q.value;this.on(f,this.options[f])}}catch(M){d=!0,l=M}finally{try{A||null==u.return||u.return()}finally{if(d)throw l}}this.on("uploadprogress",function(){return M.updateTotalUploadProgress()}),this.on("removedfile",function(){return b.updateTotalUploadProgress()}),this.on("canceled",function(M){return p.emit("complete",M)}),this.on("complete",function(M){var b=e;if(0===e.getAddedFiles().length&&0===e.getUploadingFiles().length&&0===e.getQueuedFiles().length)return setTimeout(function(){return b.emit("queuecomplete")},0)});var W=function(M){if(function(M){if(M.dataTransfer.types)for(var b=0;b<M.dataTransfer.types.length;b++)if("Files"===M.dataTransfer.types[b])return!0;return!1}(M))return M.stopPropagation(),M.preventDefault?M.preventDefault():M.returnValue=!1};return this.listeners=[{element:this.element,events:{dragstart:function(M){return o.emit("dragstart",M)},dragenter:function(M){return W(M),z.emit("dragenter",M)},dragover:function(M){var b;try{b=M.dataTransfer.effectAllowed}catch(M){}return M.dataTransfer.dropEffect="move"===b||"linkMove"===b?"move":"copy",W(M),c.emit("dragover",M)},dragleave:function(M){return n.emit("dragleave",M)},drop:function(M){return W(M),O.drop(M)},dragend:function(M){return i.emit("dragend",M)}}}],this.clickableElements.forEach(function(M){var b=r;return r.listeners.push({element:M,events:{click:function(p){return(M!==b.element||p.target===b.element||t.elementInside(p.target,b.element.querySelector(".dz-message")))&&b.hiddenFileInput.click(),!0}}})}),this.enable(),this.options.init.call(this)}},{key:"destroy",value:function(){return this.disable(),this.removeAllFiles(!0),(null!=this.hiddenFileInput?this.hiddenFileInput.parentNode:void 0)&&(this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput),this.hiddenFileInput=null),delete this.element.dropzone,t.instances.splice(t.instances.indexOf(this),1)}},{key:"updateTotalUploadProgress",value:function(){var M,b=0,p=0;if(this.getActiveFiles().length){var e=!0,o=!1,z=void 0;try{for(var t,c=this.getActiveFiles()[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n=t.value;b+=n.upload.bytesSent,p+=n.upload.total}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}M=100*b/p}else M=100;return this.emit("totaluploadprogress",M,p,b)}},{key:"_getParamName",value:function(M){return"function"==typeof this.options.paramName?this.options.paramName(M):"".concat(this.options.paramName).concat(this.options.uploadMultiple?"[".concat(M,"]"):"")}},{key:"_renameFile",value:function(M){return"function"!=typeof this.options.renameFile?M.name:this.options.renameFile(M)}},{key:"getFallbackForm",value:function(){var M,b;if(M=this.getExistingFallback())return M;var p='<div class="dz-fallback">';this.options.dictFallbackText&&(p+="<p>".concat(this.options.dictFallbackText,"</p>")),p+='<input type="file" name="'.concat(this._getParamName(0),'" ').concat(this.options.uploadMultiple?'multiple="multiple"':void 0,' /><input type="submit" value="Upload!"></div>');var e=t.createElement(p);return"FORM"!==this.element.tagName?(b=t.createElement('<form action="'.concat(this.options.url,'" enctype="multipart/form-data" method="').concat(this.options.method,'"></form>'))).appendChild(e):(this.element.setAttribute("enctype","multipart/form-data"),this.element.setAttribute("method",this.options.method)),null!=b?b:e}},{key:"getExistingFallback",value:function(){var M=function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;if(/(^| )fallback($| )/.test(t.className))return t}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}},b=!0,p=!1,e=void 0;try{for(var o,z=["div","form"][Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t,c=o.value;if(t=M(this.element.getElementsByTagName(c)))return t}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}}},{key:"setupEventListeners",value:function(){return this.listeners.map(function(M){return function(){var b=[];for(var p in M.events){var e=M.events[p];b.push(M.element.addEventListener(p,e,!1))}return b}()})}},{key:"removeEventListeners",value:function(){return this.listeners.map(function(M){return function(){var b=[];for(var p in M.events){var e=M.events[p];b.push(M.element.removeEventListener(p,e,!1))}return b}()})}},{key:"disable",value:function(){var M=this;return this.clickableElements.forEach(function(M){return M.classList.remove("dz-clickable")}),this.removeEventListeners(),this.disabled=!0,this.files.map(function(b){return M.cancelUpload(b)})}},{key:"enable",value:function(){return delete this.disabled,this.clickableElements.forEach(function(M){return M.classList.add("dz-clickable")}),this.setupEventListeners()}},{key:"filesize",value:function(M){var b=0,p="b";if(M>0){for(var e=["tb","gb","mb","kb","b"],o=0;o<e.length;o++){var z=e[o];if(M>=Math.pow(this.options.filesizeBase,4-o)/10){b=M/Math.pow(this.options.filesizeBase,4-o),p=z;break}}b=Math.round(10*b)/10}return"<strong>".concat(b,"</strong> ").concat(this.options.dictFileSizeUnits[p])}},{key:"_updateMaxFilesReachedClass",value:function(){return null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(this.getAcceptedFiles().length===this.options.maxFiles&&this.emit("maxfilesreached",this.files),this.element.classList.add("dz-max-files-reached")):this.element.classList.remove("dz-max-files-reached")}},{key:"drop",value:function(M){if(M.dataTransfer){this.emit("drop",M);for(var b=[],p=0;p<M.dataTransfer.files.length;p++)b[p]=M.dataTransfer.files[p];if(b.length){var e=M.dataTransfer.items;e&&e.length&&null!=e[0].webkitGetAsEntry?this._addFilesFromItems(e):this.handleFiles(b)}this.emit("addedfiles",b)}}},{key:"paste",value:function(M){if(null!=(p=function(M){return M.items},null!=(b=null!=M?M.clipboardData:void 0)?p(b):void 0)){var b,p;this.emit("paste",M);var e=M.clipboardData.items;return e.length?this._addFilesFromItems(e):void 0}}},{key:"handleFiles",value:function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;this.addFile(t)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}}},{key:"_addFilesFromItems",value:function(M){var b=this;return function(){var p=[],e=!0,o=!1,z=void 0;try{for(var t,c=M[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n,O=t.value;null!=O.webkitGetAsEntry&&(n=O.webkitGetAsEntry())?n.isFile?p.push(b.addFile(O.getAsFile())):n.isDirectory?p.push(b._addFilesFromDirectory(n,n.name)):p.push(void 0):null==O.getAsFile||null!=O.kind&&"file"!==O.kind?p.push(void 0):p.push(b.addFile(O.getAsFile()))}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}return p}()}},{key:"_addFilesFromDirectory",value:function(M,b){var p=this,e=M.createReader(),o=function(M){return p=function(b){return b.log(M)},null!=(b=console)&&"function"==typeof b.log?p(b):void 0;var b,p},z=function(){var M=p;return e.readEntries(function(p){if(p.length>0){var e=!0,o=!1,t=void 0;try{for(var c,n=p[Symbol.iterator]();!(e=(c=n.next()).done);e=!0){var O=c.value,i=M;O.isFile?O.file(function(M){if(!i.options.ignoreHiddenFiles||"."!==M.name.substring(0,1))return M.fullPath="".concat(b,"/").concat(M.name),i.addFile(M)}):O.isDirectory&&M._addFilesFromDirectory(O,"".concat(b,"/").concat(O.name))}}catch(M){o=!0,t=M}finally{try{e||null==n.return||n.return()}finally{if(o)throw t}}z()}return null},o)};return z()}},{key:"accept",value:function(M,b){this.options.maxFilesize&&M.size>1048576*this.options.maxFilesize?b(this.options.dictFileTooBig.replace("{{filesize}}",Math.round(M.size/1024/10.24)/100).replace("{{maxFilesize}}",this.options.maxFilesize)):t.isValidFile(M,this.options.acceptedFiles)?null!=this.options.maxFiles&&this.getAcceptedFiles().length>=this.options.maxFiles?(b(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}",this.options.maxFiles)),this.emit("maxfilesexceeded",M)):this.options.accept.call(this,M,b):b(this.options.dictInvalidFileType)}},{key:"addFile",value:function(M){var b=this;M.upload={uuid:t.uuidv4(),progress:0,total:M.size,bytesSent:0,filename:this._renameFile(M)},this.files.push(M),M.status=t.ADDED,this.emit("addedfile",M),this._enqueueThumbnail(M),this.accept(M,function(p){p?(M.accepted=!1,b._errorProcessing([M],p)):(M.accepted=!0,b.options.autoQueue&&b.enqueueFile(M)),b._updateMaxFilesReachedClass()})}},{key:"enqueueFiles",value:function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var t=o.value;this.enqueueFile(t)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}return null}},{key:"enqueueFile",value:function(M){if(M.status!==t.ADDED||!0!==M.accepted)throw new Error("This file can't be queued because it has already been processed or was rejected.");var b=this;if(M.status=t.QUEUED,this.options.autoProcessQueue)return setTimeout(function(){return b.processQueue()},0)}},{key:"_enqueueThumbnail",value:function(M){if(this.options.createImageThumbnails&&M.type.match(/image.*/)&&M.size<=1048576*this.options.maxThumbnailFilesize){var b=this;return this._thumbnailQueue.push(M),setTimeout(function(){return b._processThumbnailQueue()},0)}}},{key:"_processThumbnailQueue",value:function(){var M=this;if(!this._processingThumbnail&&0!==this._thumbnailQueue.length){this._processingThumbnail=!0;var b=this._thumbnailQueue.shift();return this.createThumbnail(b,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,!0,function(p){return M.emit("thumbnail",b,p),M._processingThumbnail=!1,M._processThumbnailQueue()})}}},{key:"removeFile",value:function(M){if(M.status===t.UPLOADING&&this.cancelUpload(M),this.files=d(this.files,M),this.emit("removedfile",M),0===this.files.length)return this.emit("reset")}},{key:"removeAllFiles",value:function(M){null==M&&(M=!1);var b=!0,p=!1,e=void 0;try{for(var o,z=this.files.slice()[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var c=o.value;(c.status!==t.UPLOADING||M)&&this.removeFile(c)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}return null}},{key:"resizeImage",value:function(M,b,p,e,o){var z=this;return this.createThumbnail(M,b,p,e,!0,function(b,p){if(null==p)return o(M);var e=z.options.resizeMimeType;null==e&&(e=M.type);var c=p.toDataURL(e,z.options.resizeQuality);return"image/jpeg"!==e&&"image/jpg"!==e||(c=u.restore(M.dataURL,c)),o(t.dataURItoBlob(c))})}},{key:"createThumbnail",value:function(M,b,p,e,o,z){var t=this,c=new FileReader;c.onload=function(){M.dataURL=c.result,"image/svg+xml"!==M.type?t.createThumbnailFromUrl(M,b,p,e,o,z):null!=z&&z(c.result)},c.readAsDataURL(M)}},{key:"displayExistingFile",value:function(M,b,p,e,o){var z=void 0===o||o;if(this.emit("addedfile",M),this.emit("complete",M),z){var t=this;M.dataURL=b,this.createThumbnailFromUrl(M,this.options.thumbnailWidth,this.options.thumbnailHeight,this.options.thumbnailMethod,this.options.fixOrientation,function(b){t.emit("thumbnail",M,b),p&&p()},e)}else this.emit("thumbnail",M,b),p&&p()}},{key:"createThumbnailFromUrl",value:function(M,b,p,e,o,z,t){var c=this,n=document.createElement("img");return t&&(n.crossOrigin=t),o="from-image"!=getComputedStyle(document.body).imageOrientation&&o,n.onload=function(){var t=c,O=function(M){return M(1)};return"undefined"!=typeof EXIF&&null!==EXIF&&o&&(O=function(M){return EXIF.getData(n,function(){return M(EXIF.getTag(this,"Orientation"))})}),O(function(o){M.width=n.width,M.height=n.height;var c=t.options.resize.call(t,M,b,p,e),O=document.createElement("canvas"),i=O.getContext("2d");switch(O.width=c.trgWidth,O.height=c.trgHeight,o>4&&(O.width=c.trgHeight,O.height=c.trgWidth),o){case 2:i.translate(O.width,0),i.scale(-1,1);break;case 3:i.translate(O.width,O.height),i.rotate(Math.PI);break;case 4:i.translate(0,O.height),i.scale(1,-1);break;case 5:i.rotate(.5*Math.PI),i.scale(1,-1);break;case 6:i.rotate(.5*Math.PI),i.translate(0,-O.width);break;case 7:i.rotate(.5*Math.PI),i.translate(O.height,-O.width),i.scale(-1,1);break;case 8:i.rotate(-.5*Math.PI),i.translate(-O.height,0)}q(i,n,null!=c.srcX?c.srcX:0,null!=c.srcY?c.srcY:0,c.srcWidth,c.srcHeight,null!=c.trgX?c.trgX:0,null!=c.trgY?c.trgY:0,c.trgWidth,c.trgHeight);var r=O.toDataURL("image/png");if(null!=z)return z(r,O)})},null!=z&&(n.onerror=z),n.src=M.dataURL}},{key:"processQueue",value:function(){var M=this.options.parallelUploads,b=this.getUploadingFiles().length,p=b;if(!(b>=M)){var e=this.getQueuedFiles();if(e.length>0){if(this.options.uploadMultiple)return this.processFiles(e.slice(0,M-b));for(;p<M;){if(!e.length)return;this.processFile(e.shift()),p++}}}}},{key:"processFile",value:function(M){return this.processFiles([M])}},{key:"processFiles",value:function(M){var b=!0,p=!1,e=void 0;try{for(var o,z=M[Symbol.iterator]();!(b=(o=z.next()).done);b=!0){var c=o.value;c.processing=!0,c.status=t.UPLOADING,this.emit("processing",c)}}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}return this.options.uploadMultiple&&this.emit("processingmultiple",M),this.uploadFiles(M)}},{key:"_getFilesWithXhr",value:function(M){return this.files.filter(function(b){return b.xhr===M}).map(function(M){return M})}},{key:"cancelUpload",value:function(M){if(M.status===t.UPLOADING){var b=this._getFilesWithXhr(M.xhr),p=!0,e=!1,o=void 0;try{for(var z,c=b[Symbol.iterator]();!(p=(z=c.next()).done);p=!0)(s=z.value).status=t.CANCELED}catch(M){e=!0,o=M}finally{try{p||null==c.return||c.return()}finally{if(e)throw o}}void 0!==M.xhr&&M.xhr.abort();var n=!0,O=!1,i=void 0;try{for(var r,a=b[Symbol.iterator]();!(n=(r=a.next()).done);n=!0){var s=r.value;this.emit("canceled",s)}}catch(M){O=!0,i=M}finally{try{n||null==a.return||a.return()}finally{if(O)throw i}}this.options.uploadMultiple&&this.emit("canceledmultiple",b)}else M.status!==t.ADDED&&M.status!==t.QUEUED||(M.status=t.CANCELED,this.emit("canceled",M),this.options.uploadMultiple&&this.emit("canceledmultiple",[M]));if(this.options.autoProcessQueue)return this.processQueue()}},{key:"resolveOption",value:function(M){for(var b=arguments.length,p=new Array(b>1?b-1:0),e=1;e<b;e++)p[e-1]=arguments[e];return"function"==typeof M?M.apply(this,p):M}},{key:"uploadFile",value:function(M){return this.uploadFiles([M])}},{key:"uploadFiles",value:function(M){var b=this;this._transformFiles(M,function(p){if(b.options.chunking){var e=p[0];M[0].upload.chunked=b.options.chunking&&(b.options.forceChunking||e.size>b.options.chunkSize),M[0].upload.totalChunkCount=Math.ceil(e.size/b.options.chunkSize)}if(M[0].upload.chunked){var o=b,z=b,c=M[0];e=p[0],c.upload.chunks=[];var n=function(){for(var b=0;void 0!==c.upload.chunks[b];)b++;if(!(b>=c.upload.totalChunkCount)){var p=b*o.options.chunkSize,z=Math.min(p+o.options.chunkSize,e.size),n={name:o._getParamName(0),data:e.webkitSlice?e.webkitSlice(p,z):e.slice(p,z),filename:c.upload.filename,chunkIndex:b};c.upload.chunks[b]={file:c,index:b,dataBlock:n,status:t.UPLOADING,progress:0,retries:0},o._uploadData(M,[n])}};if(c.upload.finishedChunkUpload=function(b,p){var e=z,o=!0;b.status=t.SUCCESS,b.dataBlock=null,b.response=b.xhr.responseText,b.responseHeaders=b.xhr.getAllResponseHeaders(),b.xhr=null;for(var O=0;O<c.upload.totalChunkCount;O++){if(void 0===c.upload.chunks[O])return n();c.upload.chunks[O].status!==t.SUCCESS&&(o=!1)}o&&z.options.chunksUploaded(c,function(){e._finished(M,p,null)})},b.options.parallelChunkUploads)for(var O=0;O<c.upload.totalChunkCount;O++)n();else n()}else{var i=[];for(O=0;O<M.length;O++)i[O]={name:b._getParamName(O),data:p[O],filename:M[O].upload.filename};b._uploadData(M,i)}})}},{key:"_getChunk",value:function(M,b){for(var p=0;p<M.upload.totalChunkCount;p++)if(void 0!==M.upload.chunks[p]&&M.upload.chunks[p].xhr===b)return M.upload.chunks[p]}},{key:"_uploadData",value:function(b,p){var e=this,o=this,z=this,t=this,c=new XMLHttpRequest,n=!0,i=!1,r=void 0;try{for(var a=b[Symbol.iterator]();!(n=(g=a.next()).done);n=!0)(u=g.value).xhr=c}catch(M){i=!0,r=M}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}b[0].upload.chunked&&(b[0].upload.chunks[p[0].chunkIndex].xhr=c);var s=this.resolveOption(this.options.method,b,p),A=this.resolveOption(this.options.url,b,p);c.open(s,A,!0),this.resolveOption(this.options.timeout,b)&&(c.timeout=this.resolveOption(this.options.timeout,b)),c.withCredentials=!!this.options.withCredentials,c.onload=function(M){e._finishedUploading(b,c,M)},c.ontimeout=function(){o._handleUploadError(b,c,"Request timedout after ".concat(o.options.timeout/1e3," seconds"))},c.onerror=function(){z._handleUploadError(b,c)},(null!=c.upload?c.upload:c).onprogress=function(M){return t._updateFilesUploadProgress(b,c,M)};var d=this.options.defaultHeaders?{Accept:"application/json","Cache-Control":"no-cache","X-Requested-With":"XMLHttpRequest"}:{};for(var l in this.options.binaryBody&&(d["Content-Type"]=b[0].type),this.options.headers&&M(O)(d,this.options.headers),d){var q=d[l];q&&c.setRequestHeader(l,q)}if(this.options.binaryBody){n=!0,i=!1,r=void 0;try{for(a=b[Symbol.iterator]();!(n=(g=a.next()).done);n=!0){var u=g.value;this.emit("sending",u,c)}}catch(M){i=!0,r=M}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}this.options.uploadMultiple&&this.emit("sendingmultiple",b,c),this.submitRequest(c,null,b)}else{var f=new FormData;if(this.options.params){var W=this.options.params;for(var h in"function"==typeof W&&(W=W.call(this,b,c,b[0].upload.chunked?this._getChunk(b[0],c):null)),W){var R=W[h];if(Array.isArray(R))for(var m=0;m<R.length;m++)f.append(h,R[m]);else f.append(h,R)}}n=!0,i=!1,r=void 0;try{var g;for(a=b[Symbol.iterator]();!(n=(g=a.next()).done);n=!0)u=g.value,this.emit("sending",u,c,f)}catch(M){i=!0,r=M}finally{try{n||null==a.return||a.return()}finally{if(i)throw r}}for(this.options.uploadMultiple&&this.emit("sendingmultiple",b,c,f),this._addFormElementData(f),m=0;m<p.length;m++){var L=p[m];f.append(L.name,L.data,L.filename)}this.submitRequest(c,f,b)}}},{key:"_transformFiles",value:function(M,b){for(var p=this,e=function(e){p.options.transformFile.call(p,M[e],function(p){o[e]=p,++z===M.length&&b(o)})},o=[],z=0,t=0;t<M.length;t++)e(t)}},{key:"_addFormElementData",value:function(M){var b=!0,p=!1,e=void 0;if("FORM"===this.element.tagName)try{for(var o=this.element.querySelectorAll("input, textarea, select, button")[Symbol.iterator]();!(b=(n=o.next()).done);b=!0){var z=n.value,t=z.getAttribute("name"),c=z.getAttribute("type");if(c&&(c=c.toLowerCase()),null!=t)if("SELECT"===z.tagName&&z.hasAttribute("multiple")){b=!0,p=!1,e=void 0;try{var n;for(o=z.options[Symbol.iterator]();!(b=(n=o.next()).done);b=!0){var O=n.value;O.selected&&M.append(t,O.value)}}catch(M){p=!0,e=M}finally{try{b||null==o.return||o.return()}finally{if(p)throw e}}}else(!c||"checkbox"!==c&&"radio"!==c||z.checked)&&M.append(t,z.value)}}catch(M){p=!0,e=M}finally{try{b||null==o.return||o.return()}finally{if(p)throw e}}}},{key:"_updateFilesUploadProgress",value:function(M,b,p){var e=!0,o=!1,z=void 0;if(M[0].upload.chunked){i=M[0];var t=this._getChunk(i,b);p?(t.progress=100*p.loaded/p.total,t.total=p.total,t.bytesSent=p.loaded):(t.progress=100,t.bytesSent=t.total),i.upload.progress=0,i.upload.total=0,i.upload.bytesSent=0;for(var c=0;c<i.upload.totalChunkCount;c++)i.upload.chunks[c]&&void 0!==i.upload.chunks[c].progress&&(i.upload.progress+=i.upload.chunks[c].progress,i.upload.total+=i.upload.chunks[c].total,i.upload.bytesSent+=i.upload.chunks[c].bytesSent);i.upload.progress=i.upload.progress/i.upload.totalChunkCount,this.emit("uploadprogress",i,i.upload.progress,i.upload.bytesSent)}else try{for(var n,O=M[Symbol.iterator]();!(e=(n=O.next()).done);e=!0){var i;(i=n.value).upload.total&&i.upload.bytesSent&&i.upload.bytesSent==i.upload.total||(p?(i.upload.progress=100*p.loaded/p.total,i.upload.total=p.total,i.upload.bytesSent=p.loaded):(i.upload.progress=100,i.upload.bytesSent=i.upload.total),this.emit("uploadprogress",i,i.upload.progress,i.upload.bytesSent))}}catch(M){o=!0,z=M}finally{try{e||null==O.return||O.return()}finally{if(o)throw z}}}},{key:"_finishedUploading",value:function(M,b,p){var e;if(M[0].status!==t.CANCELED&&4===b.readyState){if("arraybuffer"!==b.responseType&&"blob"!==b.responseType&&(e=b.responseText,b.getResponseHeader("content-type")&&~b.getResponseHeader("content-type").indexOf("application/json")))try{e=JSON.parse(e)}catch(M){p=M,e="Invalid JSON response from server."}this._updateFilesUploadProgress(M,b),200<=b.status&&b.status<300?M[0].upload.chunked?M[0].upload.finishedChunkUpload(this._getChunk(M[0],b),e):this._finished(M,e,p):this._handleUploadError(M,b,e)}}},{key:"_handleUploadError",value:function(M,b,p){if(M[0].status!==t.CANCELED){if(M[0].upload.chunked&&this.options.retryChunks){var e=this._getChunk(M[0],b);if(e.retries++<this.options.retryChunksLimit)return void this._uploadData(M,[e.dataBlock]);console.warn("Retried this chunk too often. Giving up.")}this._errorProcessing(M,p||this.options.dictResponseError.replace("{{statusCode}}",b.status),b)}}},{key:"submitRequest",value:function(M,b,p){if(1==M.readyState)if(this.options.binaryBody)if(p[0].upload.chunked){var e=this._getChunk(p[0],M);M.send(e.dataBlock.data)}else M.send(p[0]);else M.send(b);else console.warn("Cannot send this request because the XMLHttpRequest.readyState is not OPENED.")}},{key:"_finished",value:function(M,b,p){var e=!0,o=!1,z=void 0;try{for(var c,n=M[Symbol.iterator]();!(e=(c=n.next()).done);e=!0){var O=c.value;O.status=t.SUCCESS,this.emit("success",O,b,p),this.emit("complete",O)}}catch(M){o=!0,z=M}finally{try{e||null==n.return||n.return()}finally{if(o)throw z}}if(this.options.uploadMultiple&&(this.emit("successmultiple",M,b,p),this.emit("completemultiple",M)),this.options.autoProcessQueue)return this.processQueue()}},{key:"_errorProcessing",value:function(M,b,p){var e=!0,o=!1,z=void 0;try{for(var c,n=M[Symbol.iterator]();!(e=(c=n.next()).done);e=!0){var O=c.value;O.status=t.ERROR,this.emit("error",O,b,p),this.emit("complete",O)}}catch(M){o=!0,z=M}finally{try{e||null==n.return||n.return()}finally{if(o)throw z}}if(this.options.uploadMultiple&&(this.emit("errormultiple",M,b,p),this.emit("completemultiple",M)),this.options.autoProcessQueue)return this.processQueue()}}],[{key:"initClass",value:function(){this.prototype.Emitter=a,this.prototype.events=["drop","dragstart","dragend","dragenter","dragover","dragleave","addedfile","addedfiles","removedfile","thumbnail","error","errormultiple","processing","processingmultiple","uploadprogress","totaluploadprogress","sending","sendingmultiple","success","successmultiple","canceled","canceledmultiple","complete","completemultiple","reset","maxfilesexceeded","maxfilesreached","queuecomplete"],this.prototype._thumbnailQueue=[],this.prototype._processingThumbnail=!1}},{key:"uuidv4",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(M){var b=16*Math.random()|0;return("x"===M?b:3&b|8).toString(16)})}}]),t}(a);A.initClass(),A.options={},A.optionsForElement=function(M){return M.getAttribute("id")?A.options[l(M.getAttribute("id"))]:void 0},A.instances=[],A.forElement=function(M){if("string"==typeof M&&(M=document.querySelector(M)),null==(null!=M?M.dropzone:void 0))throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");return M.dropzone},A.discover=function(){var M;if(document.querySelectorAll)M=document.querySelectorAll(".dropzone");else{M=[];var b=function(b){return function(){var p=[],e=!0,o=!1,z=void 0;try{for(var t,c=b[Symbol.iterator]();!(e=(t=c.next()).done);e=!0){var n=t.value;/(^| )dropzone($| )/.test(n.className)?p.push(M.push(n)):p.push(void 0)}}catch(M){o=!0,z=M}finally{try{e||null==c.return||c.return()}finally{if(o)throw z}}return p}()};b(document.getElementsByTagName("div")),b(document.getElementsByTagName("form"))}return function(){var b=[],p=!0,e=!1,o=void 0;try{for(var z,t=M[Symbol.iterator]();!(p=(z=t.next()).done);p=!0){var c=z.value;!1!==A.optionsForElement(c)?b.push(new A(c)):b.push(void 0)}}catch(M){e=!0,o=M}finally{try{p||null==t.return||t.return()}finally{if(e)throw o}}return b}()},A.blockedBrowsers=[/opera.*(Macintosh|Windows Phone).*version\/12/i],A.isBrowserSupported=function(){var M=!0;if(window.File&&window.FileReader&&window.FileList&&window.Blob&&window.FormData&&document.querySelector)if("classList"in document.createElement("a")){void 0!==A.blacklistedBrowsers&&(A.blockedBrowsers=A.blacklistedBrowsers);var b=!0,p=!1,e=void 0;try{for(var o,z=A.blockedBrowsers[Symbol.iterator]();!(b=(o=z.next()).done);b=!0)o.value.test(navigator.userAgent)&&(M=!1)}catch(M){p=!0,e=M}finally{try{b||null==z.return||z.return()}finally{if(p)throw e}}}else M=!1;else M=!1;return M},A.dataURItoBlob=function(M){for(var b=atob(M.split(",")[1]),p=M.split(",")[0].split(":")[1].split(";")[0],e=new ArrayBuffer(b.length),o=new Uint8Array(e),z=0,t=b.length,c=0<=t;c?z<=t:z>=t;c?z++:z--)o[z]=b.charCodeAt(z);return new Blob([e],{type:p})};var d=function(M,b){return M.filter(function(M){return M!==b}).map(function(M){return M})},l=function(M){return M.replace(/[\-_](\w)/g,function(M){return M.charAt(1).toUpperCase()})};A.createElement=function(M){var b=document.createElement("div");return b.innerHTML=M,b.childNodes[0]},A.elementInside=function(M,b){if(M===b)return!0;for(;M=M.parentNode;)if(M===b)return!0;return!1},A.getElement=function(M,b){var p;if("string"==typeof M?p=document.querySelector(M):null!=M.nodeType&&(p=M),null==p)throw new Error("Invalid `".concat(b,"` option provided. Please provide a CSS selector or a plain HTML element."));return p},A.getElements=function(M,b){var p,e;if(M instanceof Array){e=[];try{var o=!0,z=!1,t=void 0;try{for(var c=M[Symbol.iterator]();!(o=(n=c.next()).done);o=!0)p=n.value,e.push(this.getElement(p,b))}catch(M){z=!0,t=M}finally{try{o||null==c.return||c.return()}finally{if(z)throw t}}}catch(M){e=null}}else if("string"==typeof M){e=[],o=!0,z=!1,t=void 0;try{var n;for(c=document.querySelectorAll(M)[Symbol.iterator]();!(o=(n=c.next()).done);o=!0)p=n.value,e.push(p)}catch(M){z=!0,t=M}finally{try{o||null==c.return||c.return()}finally{if(z)throw t}}}else null!=M.nodeType&&(e=[M]);if(null==e||!e.length)throw new Error("Invalid `".concat(b,"` option provided. Please provide a CSS selector, a plain HTML element or a list of those."));return e},A.confirm=function(M,b,p){return window.confirm(M)?b():null!=p?p():void 0},A.isValidFile=function(M,b){if(!b)return!0;b=b.split(",");var p=M.type,e=p.replace(/\/.*$/,""),o=!0,z=!1,t=void 0;try{for(var c,n=b[Symbol.iterator]();!(o=(c=n.next()).done);o=!0){var O=c.value;if("."===(O=O.trim()).charAt(0)){if(-1!==M.name.toLowerCase().indexOf(O.toLowerCase(),M.name.length-O.length))return!0}else if(/\/\*$/.test(O)){if(e===O.replace(/\/.*$/,""))return!0}else if(p===O)return!0}}catch(M){z=!0,t=M}finally{try{o||null==n.return||n.return()}finally{if(z)throw t}}return!1},"undefined"!=typeof jQuery&&null!==jQuery&&(jQuery.fn.dropzone=function(M){return this.each(function(){return new A(this,M)})}),A.ADDED="added",A.QUEUED="queued",A.ACCEPTED=A.QUEUED,A.UPLOADING="uploading",A.PROCESSING=A.UPLOADING,A.CANCELED="canceled",A.ERROR="error",A.SUCCESS="success";var q=function(M,b,p,e,o,z,t,c,n,O){var i=function(M){M.naturalWidth;var b=M.naturalHeight,p=document.createElement("canvas");p.width=1,p.height=b;var e=p.getContext("2d");e.drawImage(M,0,0);for(var o=e.getImageData(1,0,1,b).data,z=0,t=b,c=b;c>z;)0===o[4*(c-1)+3]?t=c:z=c,c=t+z>>1;var n=c/b;return 0===n?1:n}(b);return M.drawImage(b,p,e,o,z,t,c,n,O/i)},u=function(){"use strict";function M(){p(this,M)}return o(M,null,[{key:"initClass",value:function(){this.KEY_STR="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="}},{key:"encode64",value:function(M){for(var b="",p=void 0,e=void 0,o="",z=void 0,t=void 0,c=void 0,n="",O=0;z=(p=M[O++])>>2,t=(3&p)<<4|(e=M[O++])>>4,c=(15&e)<<2|(o=M[O++])>>6,n=63&o,isNaN(e)?c=n=64:isNaN(o)&&(n=64),b=b+this.KEY_STR.charAt(z)+this.KEY_STR.charAt(t)+this.KEY_STR.charAt(c)+this.KEY_STR.charAt(n),p=e=o="",z=t=c=n="",O<M.length;);return b}},{key:"restore",value:function(M,b){if(!M.match("data:image/jpeg;base64,"))return b;var p=this.decode64(M.replace("data:image/jpeg;base64,","")),e=this.slice2Segments(p),o=this.exifManipulation(b,e);return"data:image/jpeg;base64,".concat(this.encode64(o))}},{key:"exifManipulation",value:function(M,b){var p=this.getExifArray(b),e=this.insertExif(M,p);return new Uint8Array(e)}},{key:"getExifArray",value:function(M){for(var b=void 0,p=0;p<M.length;){if(255===(b=M[p])[0]&225===b[1])return b;p++}return[]}},{key:"insertExif",value:function(M,b){var p=M.replace("data:image/jpeg;base64,",""),e=this.decode64(p),o=e.indexOf(255,3),z=e.slice(0,o),t=e.slice(o),c=z;return(c=c.concat(b)).concat(t)}},{key:"slice2Segments",value:function(M){for(var b=0,p=[];!(255===M[b]&218===M[b+1]);){if(255===M[b]&216===M[b+1])b+=2;else{var e=b+(256*M[b+2]+M[b+3])+2,o=M.slice(b,e);p.push(o),b=e}if(b>M.length)break}return p}},{key:"decode64",value:function(M){var b=void 0,p=void 0,e="",o=void 0,z=void 0,t="",c=0,n=[];for(/[^A-Za-z0-9\+\/\=]/g.exec(M)&&console.warn("There were invalid base64 characters in the input text.\nValid base64 characters are A-Z, a-z, 0-9, '+', '/',and '='\nExpect errors in decoding."),M=M.replace(/[^A-Za-z0-9\+\/\=]/g,"");b=this.KEY_STR.indexOf(M.charAt(c++))<<2|(o=this.KEY_STR.indexOf(M.charAt(c++)))>>4,p=(15&o)<<4|(z=this.KEY_STR.indexOf(M.charAt(c++)))>>2,e=(3&z)<<6|(t=this.KEY_STR.indexOf(M.charAt(c++))),n.push(b),64!==z&&n.push(p),64!==t&&n.push(e),b=p=e="",o=z=t="",c<M.length;);return n}}]),M}();u.initClass(),window.Dropzone=A}(),function(M){M.Jcrop=function(b,p){var e,o=M.extend({},M.Jcrop.defaults),z=navigator.userAgent.toLowerCase(),t=/msie/.test(z),c=/msie [1-6]\./.test(z);function n(M){return Math.round(M)+"px"}function O(M){return o.baseClass+"-"+M}function i(b){var p=M(b).offset();return[p.left,p.top]}function r(M){return[M.pageX-e[0],M.pageY-e[1]]}function a(b){"object"!=typeof b&&(b={}),o=M.extend(o,b),M.each(["onChange","onSelect","onRelease","onDblClick"],function(M,b){"function"!=typeof o[b]&&(o[b]=function(){})})}function s(M,b,p){if(e=i(v),K.setCursor("move"===M?M:M+"-resize"),"move"===M)return K.activateHandlers(function(M){var b=M;return Q.watchKeys(),function(M){G.moveOffset([M[0]-b[0],M[1]-b[1]]),b=M,$.update()}}(b),u,p);var z=G.getFixed(),t=A(M),c=G.getCorner(A(t));G.setPressed(G.getCorner(t)),G.setCurrent(c),K.activateHandlers(function(M,b){return function(p){if(o.aspectRatio)switch(M){case"e":case"w":p[1]=b.y+1;break;case"n":case"s":p[0]=b.x+1}else switch(M){case"e":case"w":p[1]=b.y2;break;case"n":case"s":p[0]=b.x2}G.setCurrent(p),$.update()}}(M,z),u,p)}function A(M){switch(M){case"n":case"ne":return"sw";case"s":case"e":case"se":return"nw";case"w":case"sw":return"ne";case"nw":return"se"}}function d(M){return function(b){return!o.disabled&&(!("move"===M&&!o.allowMove)&&(e=i(v),P=!0,s(M,r(b)),b.stopPropagation(),b.preventDefault(),!1))}}function l(M,b,p){var e=M.width(),o=M.height();e>b&&b>0&&(e=b,o=b/M.width()*M.height()),o>p&&p>0&&(o=p,e=p/M.height()*M.width()),E=M.width()/e,D=M.height()/o,M.width(e).height(o)}function q(M){return{x:M.x*E,y:M.y*D,x2:M.x2*E,y2:M.y2*D,w:M.w*E,h:M.h*D}}function u(M){var b=G.getFixed();b.w>o.minSelect[0]&&b.h>o.minSelect[1]?($.enableHandles(),$.done()):$.release(),K.setCursor(o.allowSelect?"crosshair":"default")}function f(M){if(o.disabled)return!1;if(!o.allowSelect)return!1;P=!0,e=i(v),$.disableHandles(),K.setCursor("crosshair");var b=r(M);return G.setPressed(b),$.update(),K.activateHandlers(W,u,"touch"===M.type.substring(0,5)),Q.watchKeys(),M.stopPropagation(),M.preventDefault(),!1}function W(M){G.setCurrent(M),$.update()}function h(){var b=M("<div></div>").addClass(O("tracker"));return t&&b.css({opacity:0,backgroundColor:"white"}),b}"object"!=typeof b&&(b=M(b)[0]),"object"!=typeof p&&(p={}),a(p);var R={border:"none",visibility:"visible",margin:0,padding:0,position:"absolute",top:0,left:0},m=M(b),g=!0;if("IMG"==b.tagName){if(0!=m[0].width&&0!=m[0].height)m.width(m[0].width),m.height(m[0].height);else{var L=new Image;L.src=m[0].src,m.width(L.width),m.height(L.height)}var v=m.clone().removeAttr("id").css(R).show();v.width(m.width()),v.height(m.height()),m.after(v).hide()}else v=m.css(R).show(),g=!1,null===o.shade&&(o.shade=!0);l(v,o.boxWidth,o.boxHeight);var N=v.width(),y=v.height(),B=M("<div />").width(N).height(y).addClass(O("holder")).css({position:"relative",backgroundColor:o.bgColor}).insertAfter(m).append(v);o.addClass&&B.addClass(o.addClass);var X=M("<div />"),w=M("<div />").width("100%").height("100%").css({zIndex:310,position:"absolute",overflow:"hidden"}),x=M("<div />").width("100%").height("100%").css("zIndex",320),T=M("<div />").css({position:"absolute",zIndex:600}).dblclick(function(){var M=G.getFixed();o.onDblClick.call(oM,M)}).insertBefore(v).append(w,x);g&&(X=M("<img />").attr("src",v.attr("src")).css(R).width(N).height(y),w.append(X)),c&&T.css({overflowY:"hidden"});var _,k,S,C,E,D,P,I,F=o.boundary,j=h().width(N+2*F).height(y+2*F).css({position:"absolute",top:n(-F),left:n(-F),zIndex:290}).mousedown(f),H=o.bgColor,U=o.bgOpacity;e=i(v);var Y=function(){function b(){var M,b={},p=["touchstart","touchmove","touchend"],e=document.createElement("div");try{for(M=0;M<p.length;M++){var o=p[M],z=(o="on"+o)in e;z||(e.setAttribute(o,"return;"),z="function"==typeof e[o]),b[p[M]]=z}return b.touchstart&&b.touchend&&b.touchmove}catch(M){return!1}}return{createDragger:function(M){return function(b){return!o.disabled&&(!("move"===M&&!o.allowMove)&&(e=i(v),P=!0,s(M,r(Y.cfilter(b)),!0),b.stopPropagation(),b.preventDefault(),!1))}},newSelection:function(M){return f(Y.cfilter(M))},cfilter:function(M){return M.pageX=M.originalEvent.changedTouches[0].pageX,M.pageY=M.originalEvent.changedTouches[0].pageY,M},fixTouchSupport:function(b){M(b.currentTarget).hasClass("jcrop-tracker")&&b.stopPropagation()},isSupported:b,support:!0===o.touchSupport||!1===o.touchSupport?o.touchSupport:b()}}(),G=function(){var M,b,p=0,e=0,z=0,t=0;function c(){if(!o.aspectRatio)return function(){var M,b=z-p,o=t-e;_&&Math.abs(b)>_&&(z=b>0?p+_:p-_);k&&Math.abs(o)>k&&(t=o>0?e+k:e-k);C/D&&Math.abs(o)<C/D&&(t=o>0?e+C/D:e-C/D);S/E&&Math.abs(b)<S/E&&(z=b>0?p+S/E:p-S/E);p<0&&(z-=p,p-=p);e<0&&(t-=e,e-=e);z<0&&(p-=z,z-=z);t<0&&(e-=t,t-=t);z>N&&(p-=M=z-N,z-=M);t>y&&(e-=M=t-y,t-=M);p>N&&(t-=M=p-y,e-=M);e>y&&(t-=M=e-y,e-=M);return i(O(p,e,z,t))}();var M,b,c,n,r=o.aspectRatio,a=o.minSize[0]/E,s=o.maxSize[0]/E,A=o.maxSize[1]/D,d=z-p,l=t-e,q=Math.abs(d),u=Math.abs(l);return 0===s&&(s=10*N),0===A&&(A=10*y),q/u<r?(b=t,c=u*r,(M=d<0?p-c:c+p)<0?(M=0,n=Math.abs((M-p)/r),b=l<0?e-n:n+e):M>N&&(M=N,n=Math.abs((M-p)/r),b=l<0?e-n:n+e)):(M=z,n=q/r,(b=l<0?e-n:e+n)<0?(b=0,c=Math.abs((b-e)*r),M=d<0?p-c:c+p):b>y&&(b=y,c=Math.abs(b-e)*r,M=d<0?p-c:c+p)),M>p?(M-p<a?M=p+a:M-p>s&&(M=p+s),b=b>e?e+(M-p)/r:e-(M-p)/r):M<p&&(p-M<a?M=p-a:p-M>s&&(M=p-s),b=b>e?e+(p-M)/r:e-(p-M)/r),M<0?(p-=M,M=0):M>N&&(p-=M-N,M=N),b<0?(e-=b,b=0):b>y&&(e-=b-y,b=y),i(O(p,e,M,b))}function n(M){return M[0]<0&&(M[0]=0),M[1]<0&&(M[1]=0),M[0]>N&&(M[0]=N),M[1]>y&&(M[1]=y),[Math.round(M[0]),Math.round(M[1])]}function O(M,b,p,e){var o=M,z=p,t=b,c=e;return p<M&&(o=p,z=M),e<b&&(t=e,c=b),[o,t,z,c]}function i(M){return{x:M[0],y:M[1],x2:M[2],y2:M[3],w:M[2]-M[0],h:M[3]-M[1]}}return{flipCoords:O,setPressed:function(M){M=n(M),z=p=M[0],t=e=M[1]},setCurrent:function(p){p=n(p),M=p[0]-z,b=p[1]-t,z=p[0],t=p[1]},getOffset:function(){return[M,b]},moveOffset:function(M){var b=M[0],o=M[1];0>p+b&&(b-=b+p),0>e+o&&(o-=o+e),y<t+o&&(o+=y-(t+o)),N<z+b&&(b+=N-(z+b)),p+=b,z+=b,e+=o,t+=o},getCorner:function(M){var b=c();switch(M){case"ne":return[b.x2,b.y];case"nw":return[b.x,b.y];case"se":return[b.x2,b.y2];case"sw":return[b.x,b.y2]}},getFixed:c}}(),V=function(){var b=!1,p=M("<div />").css({position:"absolute",zIndex:240,opacity:0}),e={top:c(),left:c().height(y),right:c().height(y),bottom:c()};function z(){return t(G.getFixed())}function t(M){e.top.css({left:n(M.x),width:n(M.w),height:n(M.y)}),e.bottom.css({top:n(M.y2),left:n(M.x),width:n(M.w),height:n(y-M.y2)}),e.right.css({left:n(M.x2),width:n(N-M.x2)}),e.left.css({width:n(M.x)})}function c(){return M("<div />").css({position:"absolute",backgroundColor:o.shadeColor||o.bgColor}).appendTo(p)}function O(){b||(b=!0,p.insertBefore(v),z(),$.setBgOpacity(1,0,1),X.hide(),i(o.shadeColor||o.bgColor,1),$.isAwake()?a(o.bgOpacity,1):a(1,1))}function i(M,b){pM(s(),M,b)}function r(){b&&(p.remove(),X.show(),b=!1,$.isAwake()?$.setBgOpacity(o.bgOpacity,1,1):($.setBgOpacity(1,1,1),$.disableHandles()),pM(B,0,1))}function a(M,e){b&&(o.bgFade&&!e?p.animate({opacity:1-M},{queue:!1,duration:o.fadeTime}):p.css({opacity:1-M}))}function s(){return p.children()}return{update:z,updateRaw:t,getShades:s,setBgColor:i,enable:O,disable:r,resize:function(M,b){e.left.css({height:n(b)}),e.right.css({height:n(b)})},refresh:function(){o.shade?O():r(),$.isAwake()&&a(o.bgOpacity)},opacity:a}}(),$=function(){var b,p=370,e={},z={},t={},c=!1;function i(b){var p=M("<div />").css({position:"absolute",opacity:o.borderOpacity}).addClass(O(b));return w.append(p),p}function r(b,p){var e=M("<div />").mousedown(d(b)).css({cursor:b+"-resize",position:"absolute",zIndex:p}).addClass("ord-"+b);return Y.support&&e.bind("touchstart.jcrop",Y.createDragger(b)),x.append(e),e}function a(M){var b=o.handleSize,e=r(M,p++).css({opacity:o.handleOpacity}).addClass(O("handle"));return b&&e.width(b).height(b),e}function s(M){return r(M,p++).addClass("jcrop-dragbar")}function A(){var M=G.getFixed();G.setPressed([M.x,M.y]),G.setCurrent([M.x2,M.y2]),l()}function l(M){if(b)return u(M)}function u(M){var p,e,z,t,c=G.getFixed();p=c.w,e=c.h,T.width(Math.round(p)).height(Math.round(e)),z=c.x,t=c.y,o.shade||X.css({top:n(-t),left:n(-z)}),T.css({top:n(t),left:n(z)}),o.shade&&V.updateRaw(c),b||function(){T.show(),o.shade?V.opacity(U):f(U,!0);b=!0}(),M?o.onSelect.call(oM,q(c)):o.onChange.call(oM,q(c))}function f(M,p,e){(b||p)&&(o.bgFade&&!e?v.animate({opacity:M},{queue:!1,duration:o.fadeTime}):v.css("opacity",M))}function W(){if(c=!0,o.allowResize)return x.show(),!0}function R(){c=!1,x.hide()}function m(M){M?(I=!0,R()):(I=!1,W())}o.dragEdges&&M.isArray(o.createDragbars)&&function(M){var b;for(b=0;b<M.length;b++)t[M[b]]=s(M[b])}(o.createDragbars),M.isArray(o.createHandles)&&function(M){var b;for(b=0;b<M.length;b++)z[M[b]]=a(M[b])}(o.createHandles),o.drawBorders&&M.isArray(o.createBorders)&&function(M){var b,p;for(p=0;p<M.length;p++){switch(M[p]){case"n":b="hline";break;case"s":b="hline bottom";break;case"e":b="vline right";break;case"w":b="vline"}e[M[p]]=i(b)}}(o.createBorders),M(document).bind("touchstart.jcrop-ios",Y.fixTouchSupport);var g=h().mousedown(d("move")).css({cursor:"move",position:"absolute",zIndex:360});return Y.support&&g.bind("touchstart.jcrop",Y.createDragger("move")),w.append(g),R(),{updateVisible:l,update:u,release:function(){R(),T.hide(),o.shade?V.opacity(1):f(1),b=!1,o.onRelease.call(oM)},refresh:A,isAwake:function(){return b},setCursor:function(M){g.css("cursor",M)},enableHandles:W,enableOnly:function(){c=!0},showHandles:function(){c&&x.show()},disableHandles:R,animMode:m,setBgOpacity:f,done:function(){m(!1),A()}}}(),K=function(){var b=function(){},p=function(){},e=o.trackDocument;function z(M){return b(r(M)),!1}function t(e){return e.preventDefault(),e.stopPropagation(),P&&(P=!1,p(r(e)),$.isAwake()&&o.onSelect.call(oM,q(G.getFixed())),j.css({zIndex:290}),M(document).unbind(".jcrop"),b=function(){},p=function(){}),!1}function c(M){return b(r(Y.cfilter(M))),!1}function n(M){return t(Y.cfilter(M))}return e||j.mousemove(z).mouseup(t).mouseout(t),v.before(j),{activateHandlers:function(o,O,i){return P=!0,b=o,p=O,function(b){j.css({zIndex:450}),b?M(document).bind("touchmove.jcrop",c).bind("touchend.jcrop",n):e&&M(document).bind("mousemove.jcrop",z).bind("mouseup.jcrop",t)}(i),!1},setCursor:function(M){j.css("cursor",M)}}}(),Q=function(){var b=M('<input type="radio" />').css({position:"fixed",left:"-120px",width:"12px"}).addClass("jcrop-keymgr"),p=M("<div />").css({position:"absolute",overflow:"hidden"}).append(b);function e(M,b,p){o.allowMove&&(G.moveOffset([b,p]),$.updateVisible(!0)),M.preventDefault(),M.stopPropagation()}return o.keySupport&&(b.keydown(function(M){if(M.ctrlKey||M.metaKey)return!0;var b=!!M.shiftKey?10:1;switch(M.keyCode){case 37:e(M,-b,0);break;case 39:e(M,b,0);break;case 38:e(M,0,-b);break;case 40:e(M,0,b);break;case 27:o.allowSelect&&$.release();break;case 9:return!0}return!1}).blur(function(M){b.hide()}),c||!o.fixedSupport?(b.css({position:"absolute",left:"-20px"}),p.append(b).insertBefore(v)):b.insertBefore(v)),{watchKeys:function(){o.keySupport&&(b.show(),b.focus())}}}();function J(M){Z([M[0]/E,M[1]/D,M[2]/E,M[3]/D]),o.onSelect.call(oM,q(G.getFixed())),$.enableHandles()}function Z(M){G.setPressed([M[0],M[1]]),G.setCurrent([M[2],M[3]]),$.update()}function MM(){o.disabled=!0,$.disableHandles(),$.setCursor("default"),K.setCursor("default")}function bM(){o.disabled=!1,eM()}function pM(b,p,e){var z=p||o.bgColor;o.bgFade&&M.fx.step.hasOwnProperty("backgroundColor")&&o.fadeTime&&!e?b.animate({backgroundColor:z},{queue:!1,duration:o.fadeTime}):b.css("backgroundColor",z)}function eM(M){o.allowResize?M?$.enableOnly():$.enableHandles():$.disableHandles(),K.setCursor(o.allowSelect?"crosshair":"default"),$.setCursor(o.allowMove?"move":"default"),o.hasOwnProperty("trueSize")&&(E=o.trueSize[0]/N,D=o.trueSize[1]/y),o.hasOwnProperty("setSelect")&&(J(o.setSelect),$.done(),delete o.setSelect),V.refresh(),o.bgColor!=H&&(pM(o.shade?V.getShades():B,o.shade&&o.shadeColor||o.bgColor),H=o.bgColor),U!=o.bgOpacity&&(U=o.bgOpacity,o.shade?V.refresh():$.setBgOpacity(U)),_=o.maxSize[0]||0,k=o.maxSize[1]||0,S=o.minSize[0]||0,C=o.minSize[1]||0,o.hasOwnProperty("outerImage")&&(v.attr("src",o.outerImage),delete o.outerImage),$.refresh()}Y.support&&j.bind("touchstart.jcrop",Y.newSelection),x.hide(),eM(!0);var oM={setImage:function(M,b){$.release(),MM();var p=new Image;p.onload=function(){var e=p.width,z=p.height,t=o.boxWidth,c=o.boxHeight;v.width(e).height(z),v.attr("src",M),X.attr("src",M),l(v,t,c),N=v.width(),y=v.height(),X.width(N).height(y),j.width(N+2*F).height(y+2*F),B.width(N).height(y),V.resize(N,y),bM(),"function"==typeof b&&b.call(oM)},p.src=M},animateTo:function(M,b){var p=M[0]/E,e=M[1]/D,z=M[2]/E,t=M[3]/D;if(!I){var c=G.flipCoords(p,e,z,t),n=G.getFixed(),O=[n.x,n.y,n.x2,n.y2],i=O,r=o.animationDelay,a=c[0]-O[0],s=c[1]-O[1],A=c[2]-O[2],d=c[3]-O[3],l=0,q=o.swingSpeed;p=i[0],e=i[1],z=i[2],t=i[3],$.animMode(!0);var u=function(){l+=(100-l)/q,i[0]=Math.round(p+l/100*a),i[1]=Math.round(e+l/100*s),i[2]=Math.round(z+l/100*A),i[3]=Math.round(t+l/100*d),l>=99.8&&(l=100),l<100?(Z(i),f()):($.done(),$.animMode(!1),"function"==typeof b&&b.call(oM))};f()}function f(){window.setTimeout(u,r)}},setSelect:J,setOptions:function(M){a(M),eM()},tellSelect:function(){return q(G.getFixed())},tellScaled:function(){return G.getFixed()},setClass:function(M){B.removeClass().addClass(O("holder")).addClass(M)},disable:MM,enable:bM,cancel:function(){$.done(),K.activateHandlers(null,null)},release:$.release,destroy:function(){M(document).unbind("touchstart.jcrop-ios",Y.fixTouchSupport),B.remove(),m.show(),m.css("visibility","visible"),M(b).removeData("Jcrop")},focus:Q.watchKeys,getBounds:function(){return[N*E,y*D]},getWidgetSize:function(){return[N,y]},getScaleFactor:function(){return[E,D]},getOptions:function(){return o},ui:{holder:B,selection:T}};return t&&B.bind("selectstart",function(){return!1}),m.data("Jcrop",oM),oM},M.fn.Jcrop=function(b,p){var e;return this.each(function(){if(M(this).data("Jcrop")){if("api"===b)return M(this).data("Jcrop");M(this).data("Jcrop").setOptions(b)}else"IMG"==this.tagName?M.Jcrop.Loader(this,function(){M(this).css({display:"block",visibility:"hidden"}),e=M.Jcrop(this,b),M.isFunction(p)&&p.call(e)}):(M(this).css({display:"block",visibility:"hidden"}),e=M.Jcrop(this,b),M.isFunction(p)&&p.call(e))}),this},M.Jcrop.Loader=function(b,p,e){var o=M(b),z=o[0];o.bind("load.jcloader",function b(){z.complete?(o.unbind(".jcloader"),M.isFunction(p)&&p.call(z)):window.setTimeout(b,50)}).bind("error.jcloader",function(b){o.unbind(".jcloader"),M.isFunction(e)&&e.call(z)}),z.complete&&M.isFunction(p)&&(o.unbind(".jcloader"),p.call(z))},M.Jcrop.defaults={allowSelect:!0,allowMove:!0,allowResize:!0,trackDocument:!0,baseClass:"jcrop",addClass:null,bgColor:"black",bgOpacity:.6,bgFade:!1,borderOpacity:.4,handleOpacity:.5,handleSize:null,aspectRatio:0,keySupport:!0,createHandles:["n","s","e","w","nw","ne","se","sw"],createDragbars:["n","s","e","w"],createBorders:["n","s","e","w"],drawBorders:!0,dragEdges:!0,fixedSupport:!0,touchSupport:null,shade:null,boxWidth:0,boxHeight:0,boundary:2,fadeTime:400,animationDelay:20,swingSpeed:3,minSelect:[0,0],maxSize:[0,0],minSize:[0,0],onChange:function(){},onSelect:function(){},onDblClick:function(){},onRelease:function(){}}}(jQuery),function(M,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(M=M||self).Sortable=b()}(this,function(){"use strict";function M(M,b){var p,e=Object.keys(M);return Object.getOwnPropertySymbols&&(p=Object.getOwnPropertySymbols(M),b&&(p=p.filter(function(b){return Object.getOwnPropertyDescriptor(M,b).enumerable})),e.push.apply(e,p)),e}function b(b){for(var p=1;p<arguments.length;p++){var e=null!=arguments[p]?arguments[p]:{};p%2?M(Object(e),!0).forEach(function(M){var p,o;p=b,M=e[o=M],o in p?Object.defineProperty(p,o,{value:M,enumerable:!0,configurable:!0,writable:!0}):p[o]=M}):Object.getOwnPropertyDescriptors?Object.defineProperties(b,Object.getOwnPropertyDescriptors(e)):M(Object(e)).forEach(function(M){Object.defineProperty(b,M,Object.getOwnPropertyDescriptor(e,M))})}return b}function p(M){return(p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(M){return typeof M}:function(M){return M&&"function"==typeof Symbol&&M.constructor===Symbol&&M!==Symbol.prototype?"symbol":typeof M})(M)}function e(){return(e=Object.assign||function(M){for(var b=1;b<arguments.length;b++){var p,e=arguments[b];for(p in e)Object.prototype.hasOwnProperty.call(e,p)&&(M[p]=e[p])}return M}).apply(this,arguments)}function o(M){return function(M){if(Array.isArray(M))return z(M)}(M)||function(M){if("undefined"!=typeof Symbol&&null!=M[Symbol.iterator]||null!=M["@@iterator"])return Array.from(M)}(M)||function(M,b){if(M){if("string"==typeof M)return z(M,b);var p=Object.prototype.toString.call(M).slice(8,-1);return"Map"===(p="Object"===p&&M.constructor?M.constructor.name:p)||"Set"===p?Array.from(M):"Arguments"===p||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(p)?z(M,b):void 0}}(M)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function z(M,b){(null==b||b>M.length)&&(b=M.length);for(var p=0,e=new Array(b);p<b;p++)e[p]=M[p];return e}function t(M){if("undefined"!=typeof window&&window.navigator)return!!navigator.userAgent.match(M)}var c=t(/(?:Trident.*rv[ :]?11\.|msie|iemobile|Windows Phone)/i),n=t(/Edge/i),O=t(/firefox/i),i=t(/safari/i)&&!t(/chrome/i)&&!t(/android/i),r=t(/iP(ad|od|hone)/i),a=t(/chrome/i)&&t(/android/i),s={capture:!1,passive:!1};function A(M,b,p){M.addEventListener(b,p,!c&&s)}function d(M,b,p){M.removeEventListener(b,p,!c&&s)}function l(M,b){if(b&&(">"===b[0]&&(b=b.substring(1)),M))try{if(M.matches)return M.matches(b);if(M.msMatchesSelector)return M.msMatchesSelector(b);if(M.webkitMatchesSelector)return M.webkitMatchesSelector(b)}catch(M){return}}function q(M){return M.host&&M!==document&&M.host.nodeType?M.host:M.parentNode}function u(M,b,p,e){if(M){p=p||document;do{if(null!=b&&(">"!==b[0]||M.parentNode===p)&&l(M,b)||e&&M===p)return M}while(M!==p&&(M=q(M)))}return null}var f,W=/\s+/g;function h(M,b,p){var e;M&&b&&(M.classList?M.classList[p?"add":"remove"](b):(e=(" "+M.className+" ").replace(W," ").replace(" "+b+" "," "),M.className=(e+(p?" "+b:"")).replace(W," ")))}function R(M,b,p){var e=M&&M.style;if(e){if(void 0===p)return document.defaultView&&document.defaultView.getComputedStyle?p=document.defaultView.getComputedStyle(M,""):M.currentStyle&&(p=M.currentStyle),void 0===b?p:p[b];e[b=b in e||-1!==b.indexOf("webkit")?b:"-webkit-"+b]=p+("string"==typeof p?"":"px")}}function m(M,b){var p="";if("string"==typeof M)p=M;else do{var e=R(M,"transform")}while(e&&"none"!==e&&(p=e+" "+p),!b&&(M=M.parentNode));var o=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return o&&new o(p)}function g(M,b,p){if(M){var e=M.getElementsByTagName(b),o=0,z=e.length;if(p)for(;o<z;o++)p(e[o],o);return e}return[]}function L(){return document.scrollingElement||document.documentElement}function v(M,b,p,e,o){if(M.getBoundingClientRect||M===window){var z,t,n,O,i,r,a=M!==window&&M.parentNode&&M!==L()?(t=(z=M.getBoundingClientRect()).top,n=z.left,O=z.bottom,i=z.right,r=z.height,z.width):(n=t=0,O=window.innerHeight,i=window.innerWidth,r=window.innerHeight,window.innerWidth);if((b||p)&&M!==window&&(o=o||M.parentNode,!c))do{if(o&&o.getBoundingClientRect&&("none"!==R(o,"transform")||p&&"static"!==R(o,"position"))){var s=o.getBoundingClientRect();t-=s.top+parseInt(R(o,"border-top-width")),n-=s.left+parseInt(R(o,"border-left-width")),O=t+z.height,i=n+z.width;break}}while(o=o.parentNode);return e&&M!==window&&(e=(b=m(o||M))&&b.a,M=b&&b.d,b&&(O=(t/=M)+(r/=M),i=(n/=e)+(a/=e))),{top:t,left:n,bottom:O,right:i,width:a,height:r}}}function N(M,b,p){for(var e=x(M,!0),o=v(M)[b];e;){var z=v(e)[p];if(!("top"===p||"left"===p?z<=o:o<=z))return e;if(e===L())break;e=x(e,!1)}return!1}function y(M,b,p,e){for(var o=0,z=0,t=M.children;z<t.length;){if("none"!==t[z].style.display&&t[z]!==EM.ghost&&(e||t[z]!==EM.dragged)&&u(t[z],p.draggable,M,!1)){if(o===b)return t[z];o++}z++}return null}function B(M,b){for(var p=M.lastElementChild;p&&(p===EM.ghost||"none"===R(p,"display")||b&&!l(p,b));)p=p.previousElementSibling;return p||null}function X(M,b){var p=0;if(!M||!M.parentNode)return-1;for(;M=M.previousElementSibling;)"TEMPLATE"===M.nodeName.toUpperCase()||M===EM.clone||b&&!l(M,b)||p++;return p}function w(M){var b=0,p=0,e=L();if(M)do{var o=(z=m(M)).a,z=z.d}while(b+=M.scrollLeft*o,p+=M.scrollTop*z,M!==e&&(M=M.parentNode));return[b,p]}function x(M,b){if(!M||!M.getBoundingClientRect)return L();var p=M,e=!1;do{if(p.clientWidth<p.scrollWidth||p.clientHeight<p.scrollHeight){var o=R(p);if(p.clientWidth<p.scrollWidth&&("auto"==o.overflowX||"scroll"==o.overflowX)||p.clientHeight<p.scrollHeight&&("auto"==o.overflowY||"scroll"==o.overflowY)){if(!p.getBoundingClientRect||p===document.body)return L();if(e||b)return p;e=!0}}}while(p=p.parentNode);return L()}function T(M,b){return Math.round(M.top)===Math.round(b.top)&&Math.round(M.left)===Math.round(b.left)&&Math.round(M.height)===Math.round(b.height)&&Math.round(M.width)===Math.round(b.width)}function _(M,b){return function(){var p;f||(1===(p=arguments).length?M.call(this,p[0]):M.apply(this,p),f=setTimeout(function(){f=void 0},b))}}function k(M,b,p){M.scrollLeft+=b,M.scrollTop+=p}function S(M){var b=window.Polymer,p=window.jQuery||window.Zepto;return b&&b.dom?b.dom(M).cloneNode(!0):p?p(M).clone(!0)[0]:M.cloneNode(!0)}function C(M,b){R(M,"position","absolute"),R(M,"top",b.top),R(M,"left",b.left),R(M,"width",b.width),R(M,"height",b.height)}function E(M){R(M,"position",""),R(M,"top",""),R(M,"left",""),R(M,"width",""),R(M,"height","")}function D(M,b,p){var e={};return Array.from(M.children).forEach(function(o){var z;u(o,b.draggable,M,!1)&&!o.animated&&o!==p&&(z=v(o),e.left=Math.min(null!==(o=e.left)&&void 0!==o?o:1/0,z.left),e.top=Math.min(null!==(o=e.top)&&void 0!==o?o:1/0,z.top),e.right=Math.max(null!==(o=e.right)&&void 0!==o?o:-1/0,z.right),e.bottom=Math.max(null!==(o=e.bottom)&&void 0!==o?o:-1/0,z.bottom))}),e.width=e.right-e.left,e.height=e.bottom-e.top,e.x=e.left,e.y=e.top,e}var P="Sortable"+(new Date).getTime();var I=[],F={initializeByDefault:!0},j={mount:function(M){for(var b in F)!F.hasOwnProperty(b)||b in M||(M[b]=F[b]);I.forEach(function(b){if(b.pluginName===M.pluginName)throw"Sortable: Cannot mount plugin ".concat(M.pluginName," more than once")}),I.push(M)},pluginEvent:function(M,p,e){var o=this;this.eventCanceled=!1,e.cancel=function(){o.eventCanceled=!0};var z=M+"Global";I.forEach(function(o){p[o.pluginName]&&(p[o.pluginName][z]&&p[o.pluginName][z](b({sortable:p},e)),p.options[o.pluginName]&&p[o.pluginName][M]&&p[o.pluginName][M](b({sortable:p},e)))})},initializePlugins:function(M,b,p,o){for(var z in I.forEach(function(o){var z=o.pluginName;(M.options[z]||o.initializeByDefault)&&((o=new o(M,b,M.options)).sortable=M,o.options=M.options,M[z]=o,e(p,o.defaults))}),M.options){var t;M.options.hasOwnProperty(z)&&void 0!==(t=this.modifyOption(M,z,M.options[z]))&&(M.options[z]=t)}},getEventProperties:function(M,b){var p={};return I.forEach(function(o){"function"==typeof o.eventProperties&&e(p,o.eventProperties.call(b[o.pluginName],M))}),p},modifyOption:function(M,b,p){var e;return I.forEach(function(o){M[o.pluginName]&&o.optionListeners&&"function"==typeof o.optionListeners[b]&&(e=o.optionListeners[b].call(M[o.pluginName],p))}),e}};function H(M){var p=M.sortable,e=M.rootEl,o=M.name,z=M.targetEl,t=M.cloneEl,O=M.toEl,i=M.fromEl,r=M.oldIndex,a=M.newIndex,s=M.oldDraggableIndex,A=M.newDraggableIndex,d=M.originalEvent,l=M.putSortable,q=M.extraEventProperties;if(p=p||e&&e[P]){var u,f=p.options;M="on"+o.charAt(0).toUpperCase()+o.substr(1);!window.CustomEvent||c||n?(u=document.createEvent("Event")).initEvent(o,!0,!0):u=new CustomEvent(o,{bubbles:!0,cancelable:!0}),u.to=O||e,u.from=i||e,u.item=z||e,u.clone=t,u.oldIndex=r,u.newIndex=a,u.oldDraggableIndex=s,u.newDraggableIndex=A,u.originalEvent=d,u.pullMode=l?l.lastPutMode:void 0;var W,h=b(b({},q),j.getEventProperties(o,p));for(W in h)u[W]=h[W];e&&e.dispatchEvent(u),f[M]&&f[M].call(p,u)}}function U(M,p){var e=(o=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{}).evt,o=function(M,b){if(null==M)return{};var p,e=function(M,b){if(null==M)return{};for(var p,e={},o=Object.keys(M),z=0;z<o.length;z++)p=o[z],0<=b.indexOf(p)||(e[p]=M[p]);return e}(M,b);if(Object.getOwnPropertySymbols)for(var o=Object.getOwnPropertySymbols(M),z=0;z<o.length;z++)p=o[z],0<=b.indexOf(p)||Object.prototype.propertyIsEnumerable.call(M,p)&&(e[p]=M[p]);return e}(o,Y);j.pluginEvent.bind(EM)(M,p,b({dragEl:V,parentEl:$,ghostEl:K,rootEl:Q,nextEl:J,lastDownEl:Z,cloneEl:MM,cloneHidden:bM,dragStarted:AM,putSortable:cM,activeSortable:EM.active,originalEvent:e,oldIndex:pM,oldDraggableIndex:oM,newIndex:eM,newDraggableIndex:zM,hideGhostForTarget:_M,unhideGhostForTarget:kM,cloneNowHidden:function(){bM=!0},cloneNowShown:function(){bM=!1},dispatchSortableEvent:function(M){G({sortable:p,name:M,originalEvent:e})}},o))}var Y=["evt"];function G(M){H(b({putSortable:cM,cloneEl:MM,targetEl:V,rootEl:Q,oldIndex:pM,oldDraggableIndex:oM,newIndex:eM,newDraggableIndex:zM},M))}var V,$,K,Q,J,Z,MM,bM,pM,eM,oM,zM,tM,cM,nM,OM,iM,rM,aM,sM,AM,dM,lM,qM,uM,fM=!1,WM=!1,hM=[],RM=!1,mM=!1,gM=[],LM=!1,vM=[],NM="undefined"!=typeof document,yM=r,BM=n||c?"cssFloat":"float",XM=NM&&!a&&!r&&"draggable"in document.createElement("div"),wM=function(){if(NM){if(c)return!1;var M=document.createElement("x");return M.style.cssText="pointer-events:auto","auto"===M.style.pointerEvents}}(),xM=function(M,b){var p=R(M),e=parseInt(p.width)-parseInt(p.paddingLeft)-parseInt(p.paddingRight)-parseInt(p.borderLeftWidth)-parseInt(p.borderRightWidth),o=y(M,0,b),z=y(M,1,b),t=o&&R(o),c=z&&R(z),n=t&&parseInt(t.marginLeft)+parseInt(t.marginRight)+v(o).width;M=c&&parseInt(c.marginLeft)+parseInt(c.marginRight)+v(z).width;return"flex"===p.display?"column"===p.flexDirection||"column-reverse"===p.flexDirection?"vertical":"horizontal":"grid"===p.display?p.gridTemplateColumns.split(" ").length<=1?"vertical":"horizontal":o&&t.float&&"none"!==t.float?(b="left"===t.float?"left":"right",!z||"both"!==c.clear&&c.clear!==b?"horizontal":"vertical"):o&&("block"===t.display||"flex"===t.display||"table"===t.display||"grid"===t.display||e<=n&&"none"===p[BM]||z&&"none"===p[BM]&&e<n+M)?"vertical":"horizontal"},TM=function(M){function b(M,p){return function(e,o,z,t){var c=e.options.group.name&&o.options.group.name&&e.options.group.name===o.options.group.name;return!(null!=M||!p&&!c)||null!=M&&!1!==M&&(p&&"clone"===M?M:"function"==typeof M?b(M(e,o,z,t),p)(e,o,z,t):(o=(p?e:o).options.group.name,!0===M||"string"==typeof M&&M===o||M.join&&-1<M.indexOf(o)))}}var e={},o=M.group;o&&"object"==p(o)||(o={name:o}),e.name=o.name,e.checkPull=b(o.pull,!0),e.checkPut=b(o.put),e.revertClone=o.revertClone,M.group=e},_M=function(){!wM&&K&&R(K,"display","none")},kM=function(){!wM&&K&&R(K,"display","")};function SM(M){if(V){M=M.touches?M.touches[0]:M;var b=(o=M.clientX,z=M.clientY,hM.some(function(M){if((e=M[P].options.emptyInsertThreshold)&&!B(M)){var b=v(M),p=o>=b.left-e&&o<=b.right+e,e=z>=b.top-e&&z<=b.bottom+e;return p&&e?t=M:void 0}}),t);if(b){var p,e={};for(p in M)M.hasOwnProperty(p)&&(e[p]=M[p]);e.target=e.rootEl=b,e.preventDefault=void 0,e.stopPropagation=void 0,b[P]._onDragOver(e)}}var o,z,t}function CM(M){V&&V.parentNode[P]._isOutsideThisEl(M.target)}function EM(M,p){if(!M||!M.nodeType||1!==M.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(M));this.el=M,this.options=p=e({},p),M[P]=this;var o,z,t={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(M.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return xM(M,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(M,b){M.setData("Text",b.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==EM.supportPointer&&"PointerEvent"in window&&(!i||r),emptyInsertThreshold:5};for(o in j.initializePlugins(this,M,t),t)o in p||(p[o]=t[o]);for(z in TM(p),this)"_"===z.charAt(0)&&"function"==typeof this[z]&&(this[z]=this[z].bind(this));this.nativeDraggable=!p.forceFallback&&XM,this.nativeDraggable&&(this.options.touchStartThreshold=1),p.supportPointer?A(M,"pointerdown",this._onTapStart):(A(M,"mousedown",this._onTapStart),A(M,"touchstart",this._onTapStart)),this.nativeDraggable&&(A(M,"dragover",this),A(M,"dragenter",this)),hM.push(this.el),p.store&&p.store.get&&this.sort(p.store.get(this)||[]),e(this,function(){var M,p=[];return{captureAnimationState:function(){p=[],this.options.animation&&[].slice.call(this.el.children).forEach(function(M){var e,o;"none"!==R(M,"display")&&M!==EM.ghost&&(p.push({target:M,rect:v(M)}),e=b({},p[p.length-1].rect),!M.thisAnimationDuration||(o=m(M,!0))&&(e.top-=o.f,e.left-=o.e),M.fromRect=e)})},addAnimationState:function(M){p.push(M)},removeAnimationState:function(M){p.splice(function(M,b){for(var p in M)if(M.hasOwnProperty(p))for(var e in b)if(b.hasOwnProperty(e)&&b[e]===M[p][e])return Number(p);return-1}(p,{target:M}),1)},animateAll:function(b){var e=this;if(!this.options.animation)return clearTimeout(M),void("function"==typeof b&&b());var o=!1,z=0;p.forEach(function(M){var b=0,p=M.target,t=p.fromRect,c=v(p),n=p.prevFromRect,O=p.prevToRect,i=M.rect,r=m(p,!0);r&&(c.top-=r.f,c.left-=r.e),p.toRect=c,p.thisAnimationDuration&&T(n,c)&&!T(t,c)&&(i.top-c.top)/(i.left-c.left)==(t.top-c.top)/(t.left-c.left)&&(M=i,r=n,n=O,O=e.options,b=Math.sqrt(Math.pow(r.top-M.top,2)+Math.pow(r.left-M.left,2))/Math.sqrt(Math.pow(r.top-n.top,2)+Math.pow(r.left-n.left,2))*O.animation),T(c,t)||(p.prevFromRect=t,p.prevToRect=c,b=b||e.options.animation,e.animate(p,i,c,b)),b&&(o=!0,z=Math.max(z,b),clearTimeout(p.animationResetTimer),p.animationResetTimer=setTimeout(function(){p.animationTime=0,p.prevFromRect=null,p.fromRect=null,p.prevToRect=null,p.thisAnimationDuration=null},b),p.thisAnimationDuration=b)}),clearTimeout(M),o?M=setTimeout(function(){"function"==typeof b&&b()},z):"function"==typeof b&&b(),p=[]},animate:function(M,b,p,e){var o,z;e&&(R(M,"transition",""),R(M,"transform",""),o=(z=m(this.el))&&z.a,z=z&&z.d,o=(b.left-p.left)/(o||1),z=(b.top-p.top)/(z||1),M.animatingX=!!o,M.animatingY=!!z,R(M,"transform","translate3d("+o+"px,"+z+"px,0)"),this.forRepaintDummy=M.offsetWidth,R(M,"transition","transform "+e+"ms"+(this.options.easing?" "+this.options.easing:"")),R(M,"transform","translate3d(0,0,0)"),"number"==typeof M.animated&&clearTimeout(M.animated),M.animated=setTimeout(function(){R(M,"transition",""),R(M,"transform",""),M.animated=!1,M.animatingX=!1,M.animatingY=!1},e))}}}())}function DM(M,b,p,e,o,z,t,O){var i,r,a=M[P],s=a.options.onMove;return!window.CustomEvent||c||n?(i=document.createEvent("Event")).initEvent("move",!0,!0):i=new CustomEvent("move",{bubbles:!0,cancelable:!0}),i.to=b,i.from=M,i.dragged=p,i.draggedRect=e,i.related=o||b,i.relatedRect=z||v(b),i.willInsertAfter=O,i.originalEvent=t,M.dispatchEvent(i),s?s.call(a,i,t):r}function PM(M){M.draggable=!1}function IM(){LM=!1}function FM(M){return setTimeout(M,0)}function jM(M){return clearTimeout(M)}NM&&!a&&document.addEventListener("click",function(M){if(WM)return M.preventDefault(),M.stopPropagation&&M.stopPropagation(),M.stopImmediatePropagation&&M.stopImmediatePropagation(),WM=!1},!0),EM.prototype={constructor:EM,_isOutsideThisEl:function(M){this.el.contains(M)||M===this.el||(dM=null)},_getDirection:function(M,b){return"function"==typeof this.options.direction?this.options.direction.call(this,M,b,V):this.options.direction},_onTapStart:function(M){if(M.cancelable){var b=this,p=this.el,e=this.options,o=e.preventOnFilter,z=M.type,t=M.touches&&M.touches[0]||M.pointerType&&"touch"===M.pointerType&&M,c=(t||M).target,n=M.target.shadowRoot&&(M.path&&M.path[0]||M.composedPath&&M.composedPath()[0])||c,O=e.filter;if(function(M){vM.length=0;for(var b=M.getElementsByTagName("input"),p=b.length;p--;){var e=b[p];e.checked&&vM.push(e)}}(p),!V&&!(/mousedown|pointerdown/.test(z)&&0!==M.button||e.disabled)&&!n.isContentEditable&&(this.nativeDraggable||!i||!c||"SELECT"!==c.tagName.toUpperCase())&&!((c=u(c,e.draggable,p,!1))&&c.animated||Z===c)){if(pM=X(c),oM=X(c,e.draggable),"function"==typeof O){if(O.call(this,M,c,this))return G({sortable:b,rootEl:n,name:"filter",targetEl:c,toEl:p,fromEl:p}),U("filter",b,{evt:M}),void(o&&M.preventDefault())}else if(O=O&&O.split(",").some(function(e){if(e=u(n,e.trim(),p,!1))return G({sortable:b,rootEl:e,name:"filter",targetEl:c,fromEl:p,toEl:p}),U("filter",b,{evt:M}),!0}))return void(o&&M.preventDefault());e.handle&&!u(n,e.handle,p,!1)||this._prepareDragStart(M,t,c)}}},_prepareDragStart:function(M,b,p){var e,o=this,z=o.el,t=o.options,i=z.ownerDocument;p&&!V&&p.parentNode===z&&(e=v(p),Q=z,$=(V=p).parentNode,J=V.nextSibling,Z=p,tM=t.group,nM={target:EM.dragged=V,clientX:(b||M).clientX,clientY:(b||M).clientY},aM=nM.clientX-e.left,sM=nM.clientY-e.top,this._lastX=(b||M).clientX,this._lastY=(b||M).clientY,V.style["will-change"]="all",e=function(){U("delayEnded",o,{evt:M}),EM.eventCanceled?o._onDrop():(o._disableDelayedDragEvents(),!O&&o.nativeDraggable&&(V.draggable=!0),o._triggerDragStart(M,b),G({sortable:o,name:"choose",originalEvent:M}),h(V,t.chosenClass,!0))},t.ignore.split(",").forEach(function(M){g(V,M.trim(),PM)}),A(i,"dragover",SM),A(i,"mousemove",SM),A(i,"touchmove",SM),t.supportPointer?(A(i,"pointerup",o._onDrop),this.nativeDraggable||A(i,"pointercancel",o._onDrop)):(A(i,"mouseup",o._onDrop),A(i,"touchend",o._onDrop),A(i,"touchcancel",o._onDrop)),O&&this.nativeDraggable&&(this.options.touchStartThreshold=4,V.draggable=!0),U("delayStart",this,{evt:M}),!t.delay||t.delayOnTouchOnly&&!b||this.nativeDraggable&&(n||c)?e():EM.eventCanceled?this._onDrop():(t.supportPointer?(A(i,"pointerup",o._disableDelayedDrag),A(i,"pointercancel",o._disableDelayedDrag)):(A(i,"mouseup",o._disableDelayedDrag),A(i,"touchend",o._disableDelayedDrag),A(i,"touchcancel",o._disableDelayedDrag)),A(i,"mousemove",o._delayedDragTouchMoveHandler),A(i,"touchmove",o._delayedDragTouchMoveHandler),t.supportPointer&&A(i,"pointermove",o._delayedDragTouchMoveHandler),o._dragStartTimer=setTimeout(e,t.delay)))},_delayedDragTouchMoveHandler:function(M){M=M.touches?M.touches[0]:M,Math.max(Math.abs(M.clientX-this._lastX),Math.abs(M.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){V&&PM(V),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var M=this.el.ownerDocument;d(M,"mouseup",this._disableDelayedDrag),d(M,"touchend",this._disableDelayedDrag),d(M,"touchcancel",this._disableDelayedDrag),d(M,"pointerup",this._disableDelayedDrag),d(M,"pointercancel",this._disableDelayedDrag),d(M,"mousemove",this._delayedDragTouchMoveHandler),d(M,"touchmove",this._delayedDragTouchMoveHandler),d(M,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(M,b){b=b||"touch"==M.pointerType&&M,!this.nativeDraggable||b?this.options.supportPointer?A(document,"pointermove",this._onTouchMove):A(document,b?"touchmove":"mousemove",this._onTouchMove):(A(V,"dragend",this),A(Q,"dragstart",this._onDragStart));try{document.selection?FM(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(M){}},_dragStarted:function(M,b){var p;fM=!1,Q&&V?(U("dragStarted",this,{evt:b}),this.nativeDraggable&&A(document,"dragover",CM),p=this.options,M||h(V,p.dragClass,!1),h(V,p.ghostClass,!0),EM.active=this,M&&this._appendGhost(),G({sortable:this,name:"start",originalEvent:b})):this._nulling()},_emulateDragOver:function(){if(OM){this._lastX=OM.clientX,this._lastY=OM.clientY,_M();for(var M=document.elementFromPoint(OM.clientX,OM.clientY),b=M;M&&M.shadowRoot&&(M=M.shadowRoot.elementFromPoint(OM.clientX,OM.clientY))!==b;)b=M;if(V.parentNode[P]._isOutsideThisEl(M),b)do{if(b[P]&&b[P]._onDragOver({clientX:OM.clientX,clientY:OM.clientY,target:M,rootEl:b})&&!this.options.dragoverBubble)break}while(b=q(M=b));kM()}},_onTouchMove:function(M){if(nM){var b=(c=this.options).fallbackTolerance,p=c.fallbackOffset,e=M.touches?M.touches[0]:M,o=K&&m(K,!0),z=K&&o&&o.a,t=K&&o&&o.d,c=yM&&uM&&w(uM);z=(e.clientX-nM.clientX+p.x)/(z||1)+(c?c[0]-gM[0]:0)/(z||1),t=(e.clientY-nM.clientY+p.y)/(t||1)+(c?c[1]-gM[1]:0)/(t||1);if(!EM.active&&!fM){if(b&&Math.max(Math.abs(e.clientX-this._lastX),Math.abs(e.clientY-this._lastY))<b)return;this._onDragStart(M,!0)}K&&(o?(o.e+=z-(iM||0),o.f+=t-(rM||0)):o={a:1,b:0,c:0,d:1,e:z,f:t},o="matrix(".concat(o.a,",").concat(o.b,",").concat(o.c,",").concat(o.d,",").concat(o.e,",").concat(o.f,")"),R(K,"webkitTransform",o),R(K,"mozTransform",o),R(K,"msTransform",o),R(K,"transform",o),iM=z,rM=t,OM=e),M.cancelable&&M.preventDefault()}},_appendGhost:function(){if(!K){var M=this.options.fallbackOnBody?document.body:Q,b=v(V,!0,yM,!0,M),p=this.options;if(yM){for(uM=M;"static"===R(uM,"position")&&"none"===R(uM,"transform")&&uM!==document;)uM=uM.parentNode;uM!==document.body&&uM!==document.documentElement?(uM===document&&(uM=L()),b.top+=uM.scrollTop,b.left+=uM.scrollLeft):uM=L(),gM=w(uM)}h(K=V.cloneNode(!0),p.ghostClass,!1),h(K,p.fallbackClass,!0),h(K,p.dragClass,!0),R(K,"transition",""),R(K,"transform",""),R(K,"box-sizing","border-box"),R(K,"margin",0),R(K,"top",b.top),R(K,"left",b.left),R(K,"width",b.width),R(K,"height",b.height),R(K,"opacity","0.8"),R(K,"position",yM?"absolute":"fixed"),R(K,"zIndex","100000"),R(K,"pointerEvents","none"),EM.ghost=K,M.appendChild(K),R(K,"transform-origin",aM/parseInt(K.style.width)*100+"% "+sM/parseInt(K.style.height)*100+"%")}},_onDragStart:function(M,b){var p=this,e=M.dataTransfer,o=p.options;U("dragStart",this,{evt:M}),EM.eventCanceled?this._onDrop():(U("setupClone",this),EM.eventCanceled||((MM=S(V)).removeAttribute("id"),MM.draggable=!1,MM.style["will-change"]="",this._hideClone(),h(MM,this.options.chosenClass,!1),EM.clone=MM),p.cloneId=FM(function(){U("clone",p),EM.eventCanceled||(p.options.removeCloneOnHide||Q.insertBefore(MM,V),p._hideClone(),G({sortable:p,name:"clone"}))}),b||h(V,o.dragClass,!0),b?(WM=!0,p._loopId=setInterval(p._emulateDragOver,50)):(d(document,"mouseup",p._onDrop),d(document,"touchend",p._onDrop),d(document,"touchcancel",p._onDrop),e&&(e.effectAllowed="move",o.setData&&o.setData.call(p,e,V)),A(document,"drop",p),R(V,"transform","translateZ(0)")),fM=!0,p._dragStartId=FM(p._dragStarted.bind(p,b,M)),A(document,"selectstart",p),AM=!0,window.getSelection().removeAllRanges(),i&&R(document.body,"user-select","none"))},_onDragOver:function(M){var p,e,o,z,t,c=this.el,n=M.target,O=this.options,i=O.group,r=EM.active,a=tM===i,s=O.sort,A=cM||r,d=this,l=!1;if(!LM){if(void 0!==M.preventDefault&&M.cancelable&&M.preventDefault(),n=u(n,O.draggable,c,!0),E("dragOver"),EM.eventCanceled)return l;if(V.contains(M.target)||n.animated&&n.animatingX&&n.animatingY||d._ignoreWhileAnimating===n)return F(!1);if(WM=!1,r&&!O.disabled&&(a?s||(e=$!==Q):cM===this||(this.lastPutMode=tM.checkPull(this,r,V,M))&&i.checkPut(this,r,V,M))){if(o="vertical"===this._getDirection(M,n),p=v(V),E("dragOverValid"),EM.eventCanceled)return l;if(e)return $=Q,I(),this._hideClone(),E("revert"),EM.eventCanceled||(J?Q.insertBefore(V,J):Q.appendChild(V)),F(!0);var q=B(c,O.draggable);if(q&&(w=M,i=o,C=v(B((L=this).el,L.options.draggable)),L=D(L.el,L.options,K),!(i?w.clientX>L.right+10||w.clientY>C.bottom&&w.clientX>C.left:w.clientY>L.bottom+10||w.clientX>C.right&&w.clientY>C.top)||q.animated)){if(q&&(z=M,t=o,T=v(y((x=this).el,0,x.options,!0)),x=D(x.el,x.options,K),t?z.clientX<x.left-10||z.clientY<T.top&&z.clientX<T.right:z.clientY<x.top-10||z.clientY<T.bottom&&z.clientX<T.left)){if((_=y(c,0,O,!0))===V)return F(!1);if(g=v(n=_),!1!==DM(Q,c,V,p,n,g,M,!1))return I(),c.insertBefore(V,_),$=c,j(),F(!0)}else if(n.parentNode===c){var f,W,m,g=v(n),L=V.parentNode!==c,w=(w=V.animated&&V.toRect||p,C=n.animated&&n.toRect||g,x=(t=o)?w.left:w.top,z=t?w.right:w.bottom,T=t?w.width:w.height,_=t?C.left:C.top,w=t?C.right:C.bottom,C=t?C.width:C.height,!(x===_||z===w||x+T/2===_+C/2)),x=o?"top":"left",T=N(n,"top","top")||N(V,"top","top"),_=T?T.scrollTop:void 0;if(dM!==n&&(W=g[x],RM=!1,mM=!w&&O.invertSwap||L),0!==(f=function(M,b,p,e,o,z,t,c){var n=e?M.clientY:M.clientX,O=e?p.height:p.width;M=e?p.top:p.left,e=e?p.bottom:p.right,p=!1;if(!t)if(c&&qM<O*o){if(RM=!RM&&(1===lM?M+O*z/2<n:n<e-O*z/2)||RM)p=!0;else if(1===lM?n<M+qM:e-qM<n)return-lM}else if(M+O*(1-o)/2<n&&n<e-O*(1-o)/2)return function(M){return X(V)<X(M)?1:-1}(b);return(p=p||t)&&(n<M+O*z/2||e-O*z/2<n)?M+O/2<n?1:-1:0}(M,n,g,o,w?1:O.swapThreshold,null==O.invertedSwapThreshold?O.swapThreshold:O.invertedSwapThreshold,mM,dM===n)))for(var S=X(V);(m=$.children[S-=f])&&("none"===R(m,"display")||m===K););if(0===f||m===n)return F(!1);lM=f;var C=(dM=n).nextElementSibling;L=!1;if(!1!==(w=DM(Q,c,V,p,n,g,M,L=1===f)))return 1!==w&&-1!==w||(L=1===w),LM=!0,setTimeout(IM,30),I(),L&&!C?c.appendChild(V):n.parentNode.insertBefore(V,L?C:n),T&&k(T,0,_-T.scrollTop),$=V.parentNode,void 0===W||mM||(qM=Math.abs(W-v(n)[x])),j(),F(!0)}}else{if(q===V)return F(!1);if((n=q&&c===M.target?q:n)&&(g=v(n)),!1!==DM(Q,c,V,p,n,g,M,!!n))return I(),q&&q.nextSibling?c.insertBefore(V,q.nextSibling):c.appendChild(V),$=c,j(),F(!0)}if(c.contains(V))return F(!1)}return!1}function E(z,t){U(z,d,b({evt:M,isOwner:a,axis:o?"vertical":"horizontal",revert:e,dragRect:p,targetRect:g,canSort:s,fromSortable:A,target:n,completed:F,onMove:function(b,e){return DM(Q,c,V,p,b,v(b),M,e)},changed:j},t))}function I(){E("dragOverAnimationCapture"),d.captureAnimationState(),d!==A&&A.captureAnimationState()}function F(b){return E("dragOverCompleted",{insertion:b}),b&&(a?r._hideClone():r._showClone(d),d!==A&&(h(V,(cM||r).options.ghostClass,!1),h(V,O.ghostClass,!0)),cM!==d&&d!==EM.active?cM=d:d===EM.active&&cM&&(cM=null),A===d&&(d._ignoreWhileAnimating=n),d.animateAll(function(){E("dragOverAnimationComplete"),d._ignoreWhileAnimating=null}),d!==A&&(A.animateAll(),A._ignoreWhileAnimating=null)),(n===V&&!V.animated||n===c&&!n.animated)&&(dM=null),O.dragoverBubble||M.rootEl||n===document||(V.parentNode[P]._isOutsideThisEl(M.target),b||SM(M)),!O.dragoverBubble&&M.stopPropagation&&M.stopPropagation(),l=!0}function j(){eM=X(V),zM=X(V,O.draggable),G({sortable:d,name:"change",toEl:c,newIndex:eM,newDraggableIndex:zM,originalEvent:M})}},_ignoreWhileAnimating:null,_offMoveEvents:function(){d(document,"mousemove",this._onTouchMove),d(document,"touchmove",this._onTouchMove),d(document,"pointermove",this._onTouchMove),d(document,"dragover",SM),d(document,"mousemove",SM),d(document,"touchmove",SM)},_offUpEvents:function(){var M=this.el.ownerDocument;d(M,"mouseup",this._onDrop),d(M,"touchend",this._onDrop),d(M,"pointerup",this._onDrop),d(M,"pointercancel",this._onDrop),d(M,"touchcancel",this._onDrop),d(document,"selectstart",this)},_onDrop:function(M){var b=this.el,p=this.options;eM=X(V),zM=X(V,p.draggable),U("drop",this,{evt:M}),$=V&&V.parentNode,eM=X(V),zM=X(V,p.draggable),EM.eventCanceled||(RM=mM=fM=!1,clearInterval(this._loopId),clearTimeout(this._dragStartTimer),jM(this.cloneId),jM(this._dragStartId),this.nativeDraggable&&(d(document,"drop",this),d(b,"dragstart",this._onDragStart)),this._offMoveEvents(),this._offUpEvents(),i&&R(document.body,"user-select",""),R(V,"transform",""),M&&(AM&&(M.cancelable&&M.preventDefault(),p.dropBubble||M.stopPropagation()),K&&K.parentNode&&K.parentNode.removeChild(K),(Q===$||cM&&"clone"!==cM.lastPutMode)&&MM&&MM.parentNode&&MM.parentNode.removeChild(MM),V&&(this.nativeDraggable&&d(V,"dragend",this),PM(V),V.style["will-change"]="",AM&&!fM&&h(V,(cM||this).options.ghostClass,!1),h(V,this.options.chosenClass,!1),G({sortable:this,name:"unchoose",toEl:$,newIndex:null,newDraggableIndex:null,originalEvent:M}),Q!==$?(0<=eM&&(G({rootEl:$,name:"add",toEl:$,fromEl:Q,originalEvent:M}),G({sortable:this,name:"remove",toEl:$,originalEvent:M}),G({rootEl:$,name:"sort",toEl:$,fromEl:Q,originalEvent:M}),G({sortable:this,name:"sort",toEl:$,originalEvent:M})),cM&&cM.save()):eM!==pM&&0<=eM&&(G({sortable:this,name:"update",toEl:$,originalEvent:M}),G({sortable:this,name:"sort",toEl:$,originalEvent:M})),EM.active&&(null!=eM&&-1!==eM||(eM=pM,zM=oM),G({sortable:this,name:"end",toEl:$,originalEvent:M}),this.save())))),this._nulling()},_nulling:function(){U("nulling",this),Q=V=$=K=J=MM=Z=bM=nM=OM=AM=eM=zM=pM=oM=dM=lM=cM=tM=EM.dragged=EM.ghost=EM.clone=EM.active=null,vM.forEach(function(M){M.checked=!0}),vM.length=iM=rM=0},handleEvent:function(M){switch(M.type){case"drop":case"dragend":this._onDrop(M);break;case"dragenter":case"dragover":V&&(this._onDragOver(M),function(M){M.dataTransfer&&(M.dataTransfer.dropEffect="move"),M.cancelable&&M.preventDefault()}(M));break;case"selectstart":M.preventDefault()}},toArray:function(){for(var M,b=[],p=this.el.children,e=0,o=p.length,z=this.options;e<o;e++)u(M=p[e],z.draggable,this.el,!1)&&b.push(M.getAttribute(z.dataIdAttr)||function(M){for(var b=M.tagName+M.className+M.src+M.href+M.textContent,p=b.length,e=0;p--;)e+=b.charCodeAt(p);return e.toString(36)}(M));return b},sort:function(M,b){var p={},e=this.el;this.toArray().forEach(function(M,b){u(b=e.children[b],this.options.draggable,e,!1)&&(p[M]=b)},this),b&&this.captureAnimationState(),M.forEach(function(M){p[M]&&(e.removeChild(p[M]),e.appendChild(p[M]))}),b&&this.animateAll()},save:function(){var M=this.options.store;M&&M.set&&M.set(this)},closest:function(M,b){return u(M,b||this.options.draggable,this.el,!1)},option:function(M,b){var p=this.options;if(void 0===b)return p[M];var e=j.modifyOption(this,M,b);p[M]=void 0!==e?e:b,"group"===M&&TM(p)},destroy:function(){U("destroy",this);var M=this.el;M[P]=null,d(M,"mousedown",this._onTapStart),d(M,"touchstart",this._onTapStart),d(M,"pointerdown",this._onTapStart),this.nativeDraggable&&(d(M,"dragover",this),d(M,"dragenter",this)),Array.prototype.forEach.call(M.querySelectorAll("[draggable]"),function(M){M.removeAttribute("draggable")}),this._onDrop(),this._disableDelayedDragEvents(),hM.splice(hM.indexOf(this.el),1),this.el=M=null},_hideClone:function(){bM||(U("hideClone",this),EM.eventCanceled||(R(MM,"display","none"),this.options.removeCloneOnHide&&MM.parentNode&&MM.parentNode.removeChild(MM),bM=!0))},_showClone:function(M){"clone"===M.lastPutMode?bM&&(U("showClone",this),EM.eventCanceled||(V.parentNode!=Q||this.options.group.revertClone?J?Q.insertBefore(MM,J):Q.appendChild(MM):Q.insertBefore(MM,V),this.options.group.revertClone&&this.animate(V,MM),R(MM,"display",""),bM=!1)):this._hideClone()}},NM&&A(document,"touchmove",function(M){(EM.active||fM)&&M.cancelable&&M.preventDefault()}),EM.utils={on:A,off:d,css:R,find:g,is:function(M,b){return!!u(M,b,M,!1)},extend:function(M,b){if(M&&b)for(var p in b)b.hasOwnProperty(p)&&(M[p]=b[p]);return M},throttle:_,closest:u,toggleClass:h,clone:S,index:X,nextTick:FM,cancelNextTick:jM,detectDirection:xM,getChild:y,expando:P},EM.get=function(M){return M[P]},EM.mount=function(){for(var M=arguments.length,p=new Array(M),e=0;e<M;e++)p[e]=arguments[e];(p=p[0].constructor===Array?p[0]:p).forEach(function(M){if(!M.prototype||!M.prototype.constructor)throw"Sortable: Mounted plugin must be a constructor function, not ".concat({}.toString.call(M));M.utils&&(EM.utils=b(b({},EM.utils),M.utils)),j.mount(M)})},EM.create=function(M,b){return new EM(M,b)};var HM,UM,YM,GM,VM,$M,KM=[],QM=!(EM.version="1.15.6");function JM(){KM.forEach(function(M){clearInterval(M.pid)}),KM=[]}function ZM(){clearInterval($M)}var Mb,bb=_(function(M,b,p,e){if(b.scroll){var o,z=(M.touches?M.touches[0]:M).clientX,t=(M.touches?M.touches[0]:M).clientY,c=b.scrollSensitivity,n=b.scrollSpeed,O=L(),i=!1;UM!==p&&(UM=p,JM(),HM=b.scroll,o=b.scrollFn,!0===HM&&(HM=x(p,!0)));var r=0,a=HM;do{var s=a,A=(y=v(s)).top,d=y.bottom,l=y.left,q=y.right,u=y.width,f=y.height,W=void 0,h=s.scrollWidth,m=s.scrollHeight,g=R(s),N=s.scrollLeft,y=s.scrollTop,B=s===O?(W=u<h&&("auto"===g.overflowX||"scroll"===g.overflowX||"visible"===g.overflowX),f<m&&("auto"===g.overflowY||"scroll"===g.overflowY||"visible"===g.overflowY)):(W=u<h&&("auto"===g.overflowX||"scroll"===g.overflowX),f<m&&("auto"===g.overflowY||"scroll"===g.overflowY));N=W&&(Math.abs(q-z)<=c&&N+u<h)-(Math.abs(l-z)<=c&&!!N),y=B&&(Math.abs(d-t)<=c&&y+f<m)-(Math.abs(A-t)<=c&&!!y);if(!KM[r])for(var X=0;X<=r;X++)KM[X]||(KM[X]={});KM[r].vx==N&&KM[r].vy==y&&KM[r].el===s||(KM[r].el=s,KM[r].vx=N,KM[r].vy=y,clearInterval(KM[r].pid),0==N&&0==y||(i=!0,KM[r].pid=setInterval(function(){e&&0===this.layer&&EM.active._onTouchMove(VM);var b=KM[this.layer].vy?KM[this.layer].vy*n:0,p=KM[this.layer].vx?KM[this.layer].vx*n:0;"function"==typeof o&&"continue"!==o.call(EM.dragged.parentNode[P],p,b,M,VM,KM[this.layer].el)||k(KM[this.layer].el,p,b)}.bind({layer:r}),24))),r++}while(b.bubbleScroll&&a!==O&&(a=x(a,!1)));QM=i}},30);a=function(M){var b=M.originalEvent,p=M.putSortable,e=M.dragEl,o=M.activeSortable,z=M.dispatchSortableEvent,t=M.hideGhostForTarget;M=M.unhideGhostForTarget;b&&(o=p||o,t(),b=b.changedTouches&&b.changedTouches.length?b.changedTouches[0]:b,b=document.elementFromPoint(b.clientX,b.clientY),M(),o&&!o.el.contains(b)&&(z("spill"),this.onSpill({dragEl:e,putSortable:p})))};function pb(){}function eb(){}pb.prototype={startIndex:null,dragStart:function(M){M=M.oldDraggableIndex,this.startIndex=M},onSpill:function(M){var b=M.dragEl,p=M.putSortable;this.sortable.captureAnimationState(),p&&p.captureAnimationState(),(M=y(this.sortable.el,this.startIndex,this.options))?this.sortable.el.insertBefore(b,M):this.sortable.el.appendChild(b),this.sortable.animateAll(),p&&p.animateAll()},drop:a},e(pb,{pluginName:"revertOnSpill"}),eb.prototype={onSpill:function(M){var b=M.dragEl;(M=M.putSortable||this.sortable).captureAnimationState(),b.parentNode&&b.parentNode.removeChild(b),M.animateAll()},drop:a},e(eb,{pluginName:"removeOnSpill"});var ob,zb,tb,cb,nb,Ob=[],ib=[],rb=!1,ab=!1,sb=!1;function Ab(M,b){ib.forEach(function(p,e){(e=b.children[p.sortableIndex+(M?Number(e):0)])?b.insertBefore(p,e):b.appendChild(p)})}function db(){Ob.forEach(function(M){M!==tb&&M.parentNode&&M.parentNode.removeChild(M)})}return EM.mount(new function(){function M(){for(var M in this.defaults={scroll:!0,forceAutoScrollFallback:!1,scrollSensitivity:30,scrollSpeed:10,bubbleScroll:!0},this)"_"===M.charAt(0)&&"function"==typeof this[M]&&(this[M]=this[M].bind(this))}return M.prototype={dragStarted:function(M){M=M.originalEvent,this.sortable.nativeDraggable?A(document,"dragover",this._handleAutoScroll):this.options.supportPointer?A(document,"pointermove",this._handleFallbackAutoScroll):M.touches?A(document,"touchmove",this._handleFallbackAutoScroll):A(document,"mousemove",this._handleFallbackAutoScroll)},dragOverCompleted:function(M){M=M.originalEvent,this.options.dragOverBubble||M.rootEl||this._handleAutoScroll(M)},drop:function(){this.sortable.nativeDraggable?d(document,"dragover",this._handleAutoScroll):(d(document,"pointermove",this._handleFallbackAutoScroll),d(document,"touchmove",this._handleFallbackAutoScroll),d(document,"mousemove",this._handleFallbackAutoScroll)),ZM(),JM(),clearTimeout(f),f=void 0},nulling:function(){VM=UM=HM=QM=$M=YM=GM=null,KM.length=0},_handleFallbackAutoScroll:function(M){this._handleAutoScroll(M,!0)},_handleAutoScroll:function(M,b){var p,e=this,o=(M.touches?M.touches[0]:M).clientX,z=(M.touches?M.touches[0]:M).clientY,t=document.elementFromPoint(o,z);VM=M,b||this.options.forceAutoScrollFallback||n||c||i?(bb(M,this.options,t,b),p=x(t,!0),!QM||$M&&o===YM&&z===GM||($M&&ZM(),$M=setInterval(function(){var t=x(document.elementFromPoint(o,z),!0);t!==p&&(p=t,JM()),bb(M,e.options,t,b)},10),YM=o,GM=z)):this.options.bubbleScroll&&x(t,!0)!==L()?bb(M,this.options,x(t,!1),!1):JM()}},e(M,{pluginName:"scroll",initializeByDefault:!0})}),EM.mount(eb,pb),EM.mount(new function(){function M(){this.defaults={swapClass:"sortable-swap-highlight"}}return M.prototype={dragStart:function(M){M=M.dragEl,Mb=M},dragOverValid:function(M){var b=M.completed,p=M.target,e=M.onMove,o=M.activeSortable,z=M.changed,t=M.cancel;o.options.swap&&(M=this.sortable.el,o=this.options,p&&p!==M&&(M=Mb,Mb=!1!==e(p)?(h(p,o.swapClass,!0),p):null,M&&M!==Mb&&h(M,o.swapClass,!1)),z(),b(!0),t())},drop:function(M){var b,p,e=M.activeSortable,o=M.putSortable,z=M.dragEl,t=o||this.sortable,c=this.options;Mb&&h(Mb,c.swapClass,!1),Mb&&(c.swap||o&&o.options.swap)&&z!==Mb&&(t.captureAnimationState(),t!==e&&e.captureAnimationState(),p=Mb,M=(b=z).parentNode,c=p.parentNode,M&&c&&!M.isEqualNode(p)&&!c.isEqualNode(b)&&(o=X(b),z=X(p),M.isEqualNode(c)&&o<z&&z++,M.insertBefore(p,M.children[o]),c.insertBefore(b,c.children[z])),t.animateAll(),t!==e&&e.animateAll())},nulling:function(){Mb=null}},e(M,{pluginName:"swap",eventProperties:function(){return{swapItem:Mb}}})}),EM.mount(new function(){function M(M){for(var b in this)"_"===b.charAt(0)&&"function"==typeof this[b]&&(this[b]=this[b].bind(this));M.options.avoidImplicitDeselect||(M.options.supportPointer?A(document,"pointerup",this._deselectMultiDrag):(A(document,"mouseup",this._deselectMultiDrag),A(document,"touchend",this._deselectMultiDrag))),A(document,"keydown",this._checkKeyDown),A(document,"keyup",this._checkKeyUp),this.defaults={selectedClass:"sortable-selected",multiDragKey:null,avoidImplicitDeselect:!1,setData:function(b,p){var e="";Ob.length&&zb===M?Ob.forEach(function(M,b){e+=(b?", ":"")+M.textContent}):e=p.textContent,b.setData("Text",e)}}}return M.prototype={multiDragKeyDown:!1,isMultiDrag:!1,delayStartGlobal:function(M){M=M.dragEl,tb=M},delayEnded:function(){this.isMultiDrag=~Ob.indexOf(tb)},setupClone:function(M){var b=M.sortable;M=M.cancel;if(this.isMultiDrag){for(var p=0;p<Ob.length;p++)ib.push(S(Ob[p])),ib[p].sortableIndex=Ob[p].sortableIndex,ib[p].draggable=!1,ib[p].style["will-change"]="",h(ib[p],this.options.selectedClass,!1),Ob[p]===tb&&h(ib[p],this.options.chosenClass,!1);b._hideClone(),M()}},clone:function(M){var b=M.sortable,p=M.rootEl,e=M.dispatchSortableEvent;M=M.cancel;this.isMultiDrag&&(this.options.removeCloneOnHide||Ob.length&&zb===b&&(Ab(!0,p),e("clone"),M()))},showClone:function(M){var b=M.cloneNowShown,p=M.rootEl;M=M.cancel;this.isMultiDrag&&(Ab(!1,p),ib.forEach(function(M){R(M,"display","")}),b(),nb=!1,M())},hideClone:function(M){var b=this,p=(M.sortable,M.cloneNowHidden);M=M.cancel;this.isMultiDrag&&(ib.forEach(function(M){R(M,"display","none"),b.options.removeCloneOnHide&&M.parentNode&&M.parentNode.removeChild(M)}),p(),nb=!0,M())},dragStartGlobal:function(M){M.sortable,!this.isMultiDrag&&zb&&zb.multiDrag._deselectMultiDrag(),Ob.forEach(function(M){M.sortableIndex=X(M)}),Ob=Ob.sort(function(M,b){return M.sortableIndex-b.sortableIndex}),sb=!0},dragStarted:function(M){var b,p=this;M=M.sortable;this.isMultiDrag&&(this.options.sort&&(M.captureAnimationState(),this.options.animation&&(Ob.forEach(function(M){M!==tb&&R(M,"position","absolute")}),b=v(tb,!1,!0,!0),Ob.forEach(function(M){M!==tb&&C(M,b)}),rb=ab=!0)),M.animateAll(function(){rb=ab=!1,p.options.animation&&Ob.forEach(function(M){E(M)}),p.options.sort&&db()}))},dragOver:function(M){var b=M.target,p=M.completed;M=M.cancel;ab&&~Ob.indexOf(b)&&(p(!1),M())},revert:function(M){var b,p,e=M.fromSortable,o=M.rootEl,z=M.sortable,t=M.dragRect;1<Ob.length&&(Ob.forEach(function(M){z.addAnimationState({target:M,rect:ab?v(M):t}),E(M),M.fromRect=t,e.removeAnimationState(M)}),ab=!1,b=!this.options.removeCloneOnHide,p=o,Ob.forEach(function(M,e){(e=p.children[M.sortableIndex+(b?Number(e):0)])?p.insertBefore(M,e):p.appendChild(M)}))},dragOverCompleted:function(M){var b,p=M.sortable,e=M.isOwner,o=M.insertion,z=M.activeSortable,t=M.parentEl,c=M.putSortable;M=this.options;o&&(e&&z._hideClone(),rb=!1,M.animation&&1<Ob.length&&(ab||!e&&!z.options.sort&&!c)&&(b=v(tb,!1,!0,!0),Ob.forEach(function(M){M!==tb&&(C(M,b),t.appendChild(M))}),ab=!0),e||(ab||db(),1<Ob.length?(e=nb,z._showClone(p),z.options.animation&&!nb&&e&&ib.forEach(function(M){z.addAnimationState({target:M,rect:cb}),M.fromRect=cb,M.thisAnimationDuration=null})):z._showClone(p)))},dragOverAnimationCapture:function(M){var b=M.dragRect,p=M.isOwner;M=M.activeSortable;Ob.forEach(function(M){M.thisAnimationDuration=null}),M.options.animation&&!p&&M.multiDrag.isMultiDrag&&(cb=e({},b),b=m(tb,!0),cb.top-=b.f,cb.left-=b.e)},dragOverAnimationComplete:function(){ab&&(ab=!1,db())},drop:function(M){var b,p,e,o,z,t,c,n=M.originalEvent,O=M.rootEl,i=M.parentEl,r=M.sortable,a=M.dispatchSortableEvent,s=M.oldIndex,A=(M=M.putSortable)||this.sortable;n&&(b=this.options,p=i.children,sb||(b.multiDragKey&&!this.multiDragKeyDown&&this._deselectMultiDrag(),h(tb,b.selectedClass,!~Ob.indexOf(tb)),~Ob.indexOf(tb)?(Ob.splice(Ob.indexOf(tb),1),ob=null,H({sortable:r,rootEl:O,name:"deselect",targetEl:tb,originalEvent:n})):(Ob.push(tb),H({sortable:r,rootEl:O,name:"select",targetEl:tb,originalEvent:n}),n.shiftKey&&ob&&r.el.contains(ob)?(e=X(ob),o=X(tb),~e&&~o&&e!==o&&function(){for(var M,z=e<o?(M=e,o):(M=o,e+1),t=b.filter;M<z;M++)~Ob.indexOf(p[M])||u(p[M],b.draggable,i,!1)&&(t&&("function"==typeof t?t.call(r,n,p[M],r):t.split(",").some(function(b){return u(p[M],b.trim(),i,!1)}))||(h(p[M],b.selectedClass,!0),Ob.push(p[M]),H({sortable:r,rootEl:O,name:"select",targetEl:p[M],originalEvent:n})))}()):ob=tb,zb=A)),sb&&this.isMultiDrag&&(ab=!1,(i[P].options.sort||i!==O)&&1<Ob.length&&(z=v(tb),t=X(tb,":not(."+this.options.selectedClass+")"),!rb&&b.animation&&(tb.thisAnimationDuration=null),A.captureAnimationState(),rb||(b.animation&&(tb.fromRect=z,Ob.forEach(function(M){var b;M.thisAnimationDuration=null,M!==tb&&(b=ab?v(M):z,M.fromRect=b,A.addAnimationState({target:M,rect:b}))})),db(),Ob.forEach(function(M){p[t]?i.insertBefore(M,p[t]):i.appendChild(M),t++}),s===X(tb)&&(c=!1,Ob.forEach(function(M){M.sortableIndex!==X(M)&&(c=!0)}),c&&(a("update"),a("sort")))),Ob.forEach(function(M){E(M)}),A.animateAll()),zb=A),(O===i||M&&"clone"!==M.lastPutMode)&&ib.forEach(function(M){M.parentNode&&M.parentNode.removeChild(M)}))},nullingGlobal:function(){this.isMultiDrag=sb=!1,ib.length=0},destroyGlobal:function(){this._deselectMultiDrag(),d(document,"pointerup",this._deselectMultiDrag),d(document,"mouseup",this._deselectMultiDrag),d(document,"touchend",this._deselectMultiDrag),d(document,"keydown",this._checkKeyDown),d(document,"keyup",this._checkKeyUp)},_deselectMultiDrag:function(M){if(!(void 0!==sb&&sb||zb!==this.sortable||M&&u(M.target,this.options.draggable,this.sortable.el,!1)||M&&0!==M.button))for(;Ob.length;){var b=Ob[0];h(b,this.options.selectedClass,!1),Ob.shift(),H({sortable:this.sortable,rootEl:this.sortable.el,name:"deselect",targetEl:b,originalEvent:M})}},_checkKeyDown:function(M){M.key===this.options.multiDragKey&&(this.multiDragKeyDown=!0)},_checkKeyUp:function(M){M.key===this.options.multiDragKey&&(this.multiDragKeyDown=!1)}},e(M,{pluginName:"multiDrag",utils:{select:function(M){var b=M.parentNode[P];b&&b.options.multiDrag&&!~Ob.indexOf(M)&&(zb&&zb!==b&&(zb.multiDrag._deselectMultiDrag(),zb=b),h(M,b.options.selectedClass,!0),Ob.push(M))},deselect:function(M){var b=M.parentNode[P],p=Ob.indexOf(M);b&&b.options.multiDrag&&~p&&(h(M,b.options.selectedClass,!1),Ob.splice(p,1))}},eventProperties:function(){var M=this,b=[],p=[];return Ob.forEach(function(e){var o;b.push({multiDragElement:e,index:e.sortableIndex}),o=ab&&e!==tb?-1:ab?X(e,":not(."+M.options.selectedClass+")"):X(e),p.push({multiDragElement:e,index:o})}),{items:o(Ob),clones:[].concat(ib),oldIndicies:b,newIndicies:p}},optionListeners:{multiDragKey:function(M){return"ctrl"===(M=M.toLowerCase())?M="Control":1<M.length&&(M=M.charAt(0).toUpperCase()+M.substr(1)),M}}})}),EM}),function(){var M=null;window.PR_SHOULD_USE_CONTINUATION=!0,function(){function b(M,b,p,e){b&&(p(M={a:b,e:M}),e.push.apply(e,M.g))}function p(M){for(var b=void 0,p=M.firstChild;p;p=p.nextSibling){var e=p.nodeType;b=1===e?b?M:p:3===e&&f.test(p.nodeValue)?M:b}return b===M?void 0:b}function e(p,e){var o,z={};!function(){for(var b=p.concat(e),t=[],c={},n=0,O=b.length;n<O;++n){var i=b[n],r=i[3];if(r)for(var a=r.length;--a>=0;)z[r.charAt(a)]=i;r=""+(i=i[1]),c.hasOwnProperty(r)||(t.push(i),c[r]=M)}t.push(/[\S\s]/),o=function(M){function b(M){var b=M.charCodeAt(0);if(92!==b)return b;var p=M.charAt(1);return(b=r[p])?b:"0"<=p&&p<="7"?parseInt(M.substring(1),8):"u"===p||"x"===p?parseInt(M.substring(2),16):M.charCodeAt(1)}function p(M){return M<32?(M<16?"\\x0":"\\x")+M.toString(16):"\\"===(M=String.fromCharCode(M))||"-"===M||"]"===M||"^"===M?"\\"+M:M}function e(M){var e=M.substring(1,M.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),o=(M=[],["["]);(z="^"===e[0])&&o.push("^");for(var z=z?1:0,t=e.length;z<t;++z){var c,n=e[z];if(/\\[bdsw]/i.test(n))o.push(n);else n=b(n),z+2<t&&"-"===e[z+1]?(c=b(e[z+2]),z+=2):c=n,M.push([n,c]),c<65||n>122||(c<65||n>90||M.push([32|Math.max(65,n),32|Math.min(c,90)]),c<97||n>122||M.push([-33&Math.max(97,n),-33&Math.min(c,122)]))}for(M.sort(function(M,b){return M[0]-b[0]||b[1]-M[1]}),e=[],t=[],z=0;z<M.length;++z)(n=M[z])[0]<=t[1]+1?t[1]=Math.max(t[1],n[1]):e.push(t=n);for(z=0;z<e.length;++z)n=e[z],o.push(p(n[0])),n[1]>n[0]&&(n[1]+1>n[0]&&o.push("-"),o.push(p(n[1])));return o.push("]"),o.join("")}function o(M){for(var b=M.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),o=b.length,c=[],n=0,O=0;n<o;++n){var i=b[n];"("===i?++O:"\\"===i.charAt(0)&&(i=+i.substring(1))&&(i<=O?c[i]=-1:b[n]=p(i))}for(n=1;n<c.length;++n)-1===c[n]&&(c[n]=++z);for(O=n=0;n<o;++n)"("===(i=b[n])?c[++O]||(b[n]="(?:"):"\\"===i.charAt(0)&&(i=+i.substring(1))&&i<=O&&(b[n]="\\"+c[i]);for(n=0;n<o;++n)"^"===b[n]&&"^"!==b[n+1]&&(b[n]="");if(M.ignoreCase&&t)for(n=0;n<o;++n)M=(i=b[n]).charAt(0),i.length>=2&&"["===M?b[n]=e(i):"\\"!==M&&(b[n]=i.replace(/[A-Za-z]/g,function(M){return M=M.charCodeAt(0),"["+String.fromCharCode(-33&M,32|M)+"]"}));return b.join("")}for(var z=0,t=!1,c=!1,n=0,O=M.length;n<O;++n){var i=M[n];if(i.ignoreCase)c=!0;else if(/[a-z]/i.test(i.source.replace(/\\u[\da-f]{4}|\\x[\da-f]{2}|\\[^UXux]/gi,""))){t=!0,c=!1;break}}var r={b:8,t:9,n:10,v:11,f:12,r:13},a=[];for(n=0,O=M.length;n<O;++n){if((i=M[n]).global||i.multiline)throw Error(""+i);a.push("(?:"+o(i)+")")}return RegExp(a.join("|"),c?"gi":"g")}(t)}();var t=e.length;return function M(p){for(var n=p.e,O=[n,"pln"],i=0,r=p.a.match(o)||[],a={},s=0,A=r.length;s<A;++s){var d,l=r[s],q=a[l],u=void 0;if("string"==typeof q)d=!1;else{var f=z[l.charAt(0)];if(f)u=l.match(f[1]),q=f[0];else{for(d=0;d<t;++d)if(f=e[d],u=l.match(f[1])){q=f[0];break}u||(q="pln")}!(d=q.length>=5&&"lang-"===q.substring(0,5))||u&&"string"==typeof u[1]||(d=!1,q="src"),d||(a[l]=q)}if(f=i,i+=l.length,d){d=u[1];var W=l.indexOf(d),h=W+d.length;u[2]&&(W=(h=l.length-u[2].length)-d.length),q=q.substring(5),b(n+f,l.substring(0,W),M,O),b(n+f+W,d,c(q,d),O),b(n+f+h,l.substring(h),M,O)}else O.push(n+f,q)}p.g=O}}function o(b){var p=[],o=[];b.tripleQuotedStrings?p.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,M,"'\""]):b.multiLineStrings?p.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/,M,"'\"`"]):p.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,M,"\"'"]),b.verbatimStrings&&o.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,M]);var z=b.hashComments;if(z&&(b.cStyleComments?(z>1?p.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,M,"#"]):p.push(["com",/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\n\r]*)/,M,"#"]),o.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,M])):p.push(["com",/^#[^\n\r]*/,M,"#"])),b.cStyleComments&&(o.push(["com",/^\/\/[^\n\r]*/,M]),o.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,M])),z=b.regexLiterals){var t=(z=z>1?"":"\n\r")?".":"[\\S\\s]";o.push(["lang-regex",RegExp("^(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<<?=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*(/(?=[^/*"+z+"])(?:[^/\\x5B\\x5C"+z+"]|\\x5C"+t+"|\\x5B(?:[^\\x5C\\x5D"+z+"]|\\x5C"+t+")*(?:\\x5D|$))+/)")])}return(z=b.types)&&o.push(["typ",z]),(z=(""+b.keywords).replace(/^ | $/g,"")).length&&o.push(["kwd",RegExp("^(?:"+z.replace(/[\s,]+/g,"|")+")\\b"),M]),p.push(["pln",/^\s+/,M," \r\n\t "]),z="^.[^\\s\\w.$@'\"`/\\\\]*",b.regexLiterals&&(z+="(?!s*/)"),o.push(["lit",/^@[$_a-z][\w$@]*/i,M],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,M],["pln",/^[$_a-z][\w$@]*/i,M],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,M,"0123456789"],["pln",/^\\[\S\s]?/,M],["pun",RegExp(z),M]),e(p,o)}function z(M,b,p){function e(M){var b=M.nodeType;if(1!=b||z.test(M.className)){if((3==b||4==b)&&p){var n=M.nodeValue,O=n.match(t);O&&(b=n.substring(0,O.index),M.nodeValue=b,(n=n.substring(O.index+O[0].length))&&M.parentNode.insertBefore(c.createTextNode(n),M.nextSibling),o(M),b||M.parentNode.removeChild(M))}}else if("br"===M.nodeName)o(M),M.parentNode&&M.parentNode.removeChild(M);else for(M=M.firstChild;M;M=M.nextSibling)e(M)}function o(M){for(;!M.nextSibling;)if(!(M=M.parentNode))return;var b;for(M=function M(b,p){var e=p?b.cloneNode(!1):b;if(o=b.parentNode){var o=M(o,1),z=b.nextSibling;o.appendChild(e);for(var t=z;t;t=z)z=t.nextSibling,o.appendChild(t)}return e}(M.nextSibling,0);(b=M.parentNode)&&1===b.nodeType;)M=b;O.push(M)}for(var z=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,c=M.ownerDocument,n=c.createElement("li");M.firstChild;)n.appendChild(M.firstChild);for(var O=[n],i=0;i<O.length;++i)e(O[i]);b===(0|b)&&O[0].setAttribute("value",b);var r=c.createElement("ol");r.className="linenums";b=Math.max(0,b-1|0)||0,i=0;for(var a=O.length;i<a;++i)(n=O[i]).className="L"+(i+b)%10,n.firstChild||n.appendChild(c.createTextNode(" ")),r.appendChild(n);M.appendChild(r)}function t(M,b){for(var p=b.length;--p>=0;){var e=b[p];h.hasOwnProperty(e)?r.console&&console.warn("cannot override language handler %s",e):h[e]=M}}function c(M,b){return M&&h.hasOwnProperty(M)||(M=/^\s*</.test(b)?"default-markup":"default-code"),h[M]}function n(M){var b=M.h;try{var p=function(M,b){var p=/(?:^|\s)nocode(?:\s|$)/,e=[],o=0,z=[],t=0;return function M(c){var n=c.nodeType;if(1==n){if(!p.test(c.className)){for(n=c.firstChild;n;n=n.nextSibling)M(n);"br"!==(n=c.nodeName.toLowerCase())&&"li"!==n||(e[t]="\n",z[t<<1]=o++,z[t++<<1|1]=c)}}else 3!=n&&4!=n||(n=c.nodeValue).length&&(n=b?n.replace(/\r\n?/g,"\n"):n.replace(/[\t\n\r ]+/g," "),e[t]=n,z[t<<1]=o,o+=n.length,z[t++<<1|1]=c)}(M),{a:e.join("").replace(/\n$/,""),d:z}}(M.c,M.i),e=p.a;M.a=e,M.d=p.d,M.e=0,c(b,e)(M);var o,z,t=(t=/\bMSIE\s(\d+)/.exec(navigator.userAgent))&&+t[1]<=8,n=(b=/\n/g,M.a),O=n.length,i=(p=0,M.d),a=i.length,s=(e=0,M.g),A=s.length,d=0;for(s[A]=O,z=o=0;z<A;)s[z]!==s[z+2]?(s[o++]=s[z++],s[o++]=s[z++]):z+=2;for(A=o,z=o=0;z<A;){for(var l=s[z],q=s[z+1],u=z+2;u+2<=A&&s[u+1]===q;)u+=2;s[o++]=l,s[o++]=q,z=u}s.length=o;var f,W=M.c;W&&(f=W.style.display,W.style.display="none");try{for(;e<a;){var h,R=i[e+2]||O,m=s[d+2]||O,g=(u=Math.min(R,m),i[e+1]);if(1!==g.nodeType&&(h=n.substring(p,u))){t&&(h=h.replace(b,"\r")),g.nodeValue=h;var L=g.ownerDocument,v=L.createElement("span");v.className=s[d+1];var N=g.parentNode;N.replaceChild(v,g),v.appendChild(g),p<R&&(i[e+1]=g=L.createTextNode(n.substring(u,R)),N.insertBefore(g,v.nextSibling))}(p=u)>=R&&(e+=2),p>=m&&(d+=2)}}finally{W&&(W.style.display=f)}}catch(M){r.console&&console.log(M&&M.stack||M)}}var O,i,r=window,a=[O=[[i=["break,continue,do,else,for,if,return,while"],"auto,case,char,const,default,double,enum,extern,float,goto,inline,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"],"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,delegate,dynamic_cast,explicit,export,friend,generic,late_check,mutable,namespace,nullptr,property,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],s=[O,"abstract,assert,boolean,byte,extends,final,finally,implements,import,instanceof,interface,null,native,package,strictfp,super,synchronized,throws,transient"],A=[s,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"],d=[i,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"],l=[i,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],q=[i,"as,assert,const,copy,drop,enum,extern,fail,false,fn,impl,let,log,loop,match,mod,move,mut,priv,pub,pure,ref,self,static,struct,true,trait,type,unsafe,use"],u=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/,f=/\S/,W=o({keywords:[a,A,O=[O,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",d,l,i=[i,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"]],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),h={};t(W,["default-code"]),t(e([],[["pln",/^[^<?]+/],["dec",/^<!\w[^>]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^<xmp\b[^>]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^<script\b[^>]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^<style\b[^>]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]),["default-markup","htm","html","mxml","xhtml","xml","xsl"]),t(e([["pln",/^\s+/,M," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,M,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css",/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]),t(e([],[["atv",/^[\S\s]+/]]),["uq.val"]),t(o({keywords:a,hashComments:!0,cStyleComments:!0,types:u}),["c","cc","cpp","cxx","cyc","m"]),t(o({keywords:"null,true,false"}),["json"]),t(o({keywords:A,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:u}),["cs"]),t(o({keywords:s,cStyleComments:!0}),["java"]),t(o({keywords:i,hashComments:!0,multiLineStrings:!0}),["bash","bsh","csh","sh"]),t(o({keywords:d,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}),["cv","py","python"]),t(o({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:2}),["perl","pl","pm"]),t(o({keywords:l,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb","ruby"]),t(o({keywords:O,cStyleComments:!0,regexLiterals:!0}),["javascript","js"]),t(o({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes",hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]),t(o({keywords:q,cStyleComments:!0,multilineStrings:!0}),["rc","rs","rust"]),t(e([],[["str",/^[\S\s]+/]]),["regex"]);var R=r.PR={createSimpleLexer:e,registerLangHandler:t,sourceDecorator:o,PR_ATTRIB_NAME:"atn",PR_ATTRIB_VALUE:"atv",PR_COMMENT:"com",PR_DECLARATION:"dec",PR_KEYWORD:"kwd",PR_LITERAL:"lit",PR_NOCODE:"nocode",PR_PLAIN:"pln",PR_PUNCTUATION:"pun",PR_SOURCE:"src",PR_STRING:"str",PR_TAG:"tag",PR_TYPE:"typ",prettyPrintOne:r.prettyPrintOne=function(M,b,p){var e=document.createElement("div");return e.innerHTML="<pre>"+M+"</pre>",e=e.firstChild,p&&z(e,p,!0),n({h:b,j:p,c:e,i:1}),e.innerHTML},prettyPrint:r.prettyPrint=function(b,e){for(var o=(t=e||document.body).ownerDocument||document,t=[t.getElementsByTagName("pre"),t.getElementsByTagName("code"),t.getElementsByTagName("xmp")],c=[],O=0;O<t.length;++O)for(var i=0,a=t[O].length;i<a;++i)c.push(t[O][i]);t=M;var s=Date;s.now||(s={now:function(){return+new Date}});var A=0,d=/\blang(?:uage)?-([\w.]+)(?!\S)/,l=/\bprettyprint\b/,q=/\bprettyprinted\b/,u=/pre|xmp/i,f=/^code$/i,W=/^(?:pre|code|xmp)$/i,h={};!function e(){for(var t=r.PR_SHOULD_USE_CONTINUATION?s.now()+250:1/0;A<c.length&&s.now()<t;A++){for(var O=c[A],i=h,a=O;a=a.previousSibling;){if((g=(7===(R=a.nodeType)||8===R)&&a.nodeValue)?!/^\??prettify\b/.test(g):3!==R||/\S/.test(a.nodeValue))break;if(g){i={},g.replace(/\b(\w+)=([\w%+\-.:]+)/g,function(M,b,p){i[b]=p});break}}if(a=O.className,(i!==h||l.test(a))&&!q.test(a)){for(R=!1,g=O.parentNode;g;g=g.parentNode)if(W.test(g.tagName)&&g.className&&l.test(g.className)){R=!0;break}if(!R){var R,m;if(O.className+=" prettyprinted",!(R=i.lang))!(R=a.match(d))&&(m=p(O))&&f.test(m.tagName)&&(R=m.className.match(d)),R&&(R=R[1]);if(u.test(O.tagName))g=1;else{var g=O.currentStyle,L=o.defaultView;g=(g=g?g.whiteSpace:L&&L.getComputedStyle?L.getComputedStyle(O,M).getPropertyValue("white-space"):0)&&"pre"===g.substring(0,3)}(L="true"===(L=i.linenums)||+L)||(L=!!(L=a.match(/\blinenums\b(?::(\d+))?/))&&(!L[1]||!L[1].length||+L[1])),L&&z(O,L,g),n({h:R,c:O,j:L,i:g})}}}A<c.length?setTimeout(e,250):"function"==typeof b&&b()}()}};"function"==typeof define&&define.amd&&define("google-code-prettify",[],function(){return R})}()}(),function(M,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):(M="undefined"!=typeof globalThis?globalThis:M||self,function(){var p=M.Cookies,e=M.Cookies=b();e.noConflict=function(){return M.Cookies=p,e}}())}(this,function(){"use strict";function M(M){for(var b=1;b<arguments.length;b++){var p=arguments[b];for(var e in p)M[e]=p[e]}return M}var b=function b(p,e){function o(b,o,z){if("undefined"!=typeof document){"number"==typeof(z=M({},e,z)).expires&&(z.expires=new Date(Date.now()+864e5*z.expires)),z.expires&&(z.expires=z.expires.toUTCString()),b=encodeURIComponent(b).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var t="";for(var c in z)z[c]&&(t+="; "+c,!0!==z[c]&&(t+="="+z[c].split(";")[0]));return document.cookie=b+"="+p.write(o,b)+t}}return Object.create({set:o,get:function(M){if("undefined"!=typeof document&&(!arguments.length||M)){for(var b=document.cookie?document.cookie.split("; "):[],e={},o=0;o<b.length;o++){var z=b[o].split("="),t=z.slice(1).join("=");try{var c=decodeURIComponent(z[0]);if(e[c]=p.read(t,c),M===c)break}catch(M){}}return M?e[M]:e}},remove:function(b,p){o(b,"",M({},p,{expires:-1}))},withAttributes:function(p){return b(this.converter,M({},this.attributes,p))},withConverter:function(p){return b(M({},this.converter,p),this.attributes)}},{attributes:{value:Object.freeze(e)},converter:{value:Object.freeze(p)}})}({read:function(M){return'"'===M[0]&&(M=M.slice(1,-1)),M.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(M){return encodeURIComponent(M).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});return b}),function(M){"function"==typeof define&&define.amd?define(["jquery"],M):"object"==typeof module&&module.exports?module.exports=function(b,p){return void 0===p&&(p="undefined"!=typeof window?require("jquery"):require("jquery")(b)),M(p),p}:M(jQuery)}(function(M){var b=function(){if(M&&M.fn&&M.fn.select2&&M.fn.select2.amd)var b=M.fn.select2.amd;var p;return function(){var M,p,e;b&&b.requirejs||(b?p=b:b={},function(b){var o,z,t,c,n={},O={},i={},r={},a=Object.prototype.hasOwnProperty,s=[].slice,A=/\.js$/;function d(M,b){return a.call(M,b)}function l(M,b){var p,e,o,z,t,c,n,O,r,a,s,d=b&&b.split("/"),l=i.map,q=l&&l["*"]||{};if(M){for(t=(M=M.split("/")).length-1,i.nodeIdCompat&&A.test(M[t])&&(M[t]=M[t].replace(A,"")),"."===M[0].charAt(0)&&d&&(M=d.slice(0,d.length-1).concat(M)),r=0;r<M.length;r++)if("."===(s=M[r]))M.splice(r,1),r-=1;else if(".."===s){if(0===r||1===r&&".."===M[2]||".."===M[r-1])continue;r>0&&(M.splice(r-1,2),r-=2)}M=M.join("/")}if((d||q)&&l){for(r=(p=M.split("/")).length;r>0;r-=1){if(e=p.slice(0,r).join("/"),d)for(a=d.length;a>0;a-=1)if((o=l[d.slice(0,a).join("/")])&&(o=o[e])){z=o,c=r;break}if(z)break;!n&&q&&q[e]&&(n=q[e],O=r)}!z&&n&&(z=n,c=O),z&&(p.splice(0,c,z),M=p.join("/"))}return M}function q(M,p){return function(){var e=s.call(arguments,0);return"string"!=typeof e[0]&&1===e.length&&e.push(null),z.apply(b,e.concat([M,p]))}}function u(M){return function(b){n[M]=b}}function f(M){if(d(O,M)){var p=O[M];delete O[M],r[M]=!0,o.apply(b,p)}if(!d(n,M)&&!d(r,M))throw new Error("No "+M);return n[M]}function W(M){var b,p=M?M.indexOf("!"):-1;return p>-1&&(b=M.substring(0,p),M=M.substring(p+1,M.length)),[b,M]}function h(M){return M?W(M):[]}function R(M){return function(){return i&&i.config&&i.config[M]||{}}}t=function(M,b){var p,e,o=W(M),z=o[0],t=b[1];return M=o[1],z&&(p=f(z=l(z,t))),z?M=p&&p.normalize?p.normalize(M,(e=t,function(M){return l(M,e)})):l(M,t):(z=(o=W(M=l(M,t)))[0],M=o[1],z&&(p=f(z))),{f:z?z+"!"+M:M,n:M,pr:z,p:p}},c={require:function(M){return q(M)},exports:function(M){var b=n[M];return void 0!==b?b:n[M]={}},module:function(M){return{id:M,uri:"",exports:n[M],config:R(M)}}},o=function(M,p,e,o){var z,i,a,s,A,l,W,R=[],m=typeof e;if(l=h(o=o||M),"undefined"===m||"function"===m){for(p=!p.length&&e.length?["require","exports","module"]:p,A=0;A<p.length;A+=1)if("require"===(i=(s=t(p[A],l)).f))R[A]=c.require(M);else if("exports"===i)R[A]=c.exports(M),W=!0;else if("module"===i)z=R[A]=c.module(M);else if(d(n,i)||d(O,i)||d(r,i))R[A]=f(i);else{if(!s.p)throw new Error(M+" missing "+i);s.p.load(s.n,q(o,!0),u(i),{}),R[A]=n[i]}a=e?e.apply(n[M],R):void 0,M&&(z&&z.exports!==b&&z.exports!==n[M]?n[M]=z.exports:a===b&&W||(n[M]=a))}else M&&(n[M]=e)},M=p=z=function(M,p,e,n,O){if("string"==typeof M)return c[M]?c[M](p):f(t(M,h(p)).f);if(!M.splice){if((i=M).deps&&z(i.deps,i.callback),!p)return;p.splice?(M=p,p=e,e=null):M=b}return p=p||function(){},"function"==typeof e&&(e=n,n=O),n?o(b,M,p,e):setTimeout(function(){o(b,M,p,e)},4),z},z.config=function(M){return z(M)},M._defined=n,(e=function(M,b,p){if("string"!=typeof M)throw new Error("See almond README: incorrect module build, no module name");b.splice||(p=b,b=[]),d(n,M)||d(O,M)||(O[M]=[M,b,p])}).amd={jQuery:!0}}(),b.requirejs=M,b.require=p,b.define=e)}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=M||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(M){var b={};function p(M){var b=M.prototype,p=[];for(var e in b){"function"==typeof b[e]&&("constructor"!==e&&p.push(e))}return p}b.Extend=function(M,b){var p={}.hasOwnProperty;function e(){this.constructor=M}for(var o in b)p.call(b,o)&&(M[o]=b[o]);return e.prototype=b.prototype,M.prototype=new e,M.__super__=b.prototype,M},b.Decorate=function(M,b){var e=p(b),o=p(M);function z(){var p=Array.prototype.unshift,e=b.prototype.constructor.length,o=M.prototype.constructor;e>0&&(p.call(arguments,M.prototype.constructor),o=b.prototype.constructor),o.apply(this,arguments)}b.displayName=M.displayName,z.prototype=new function(){this.constructor=z};for(var t=0;t<o.length;t++){var c=o[t];z.prototype[c]=M.prototype[c]}for(var n=function(M){var p=function(){};M in z.prototype&&(p=z.prototype[M]);var e=b.prototype[M];return function(){return Array.prototype.unshift.call(arguments,p),e.apply(this,arguments)}},O=0;O<e.length;O++){var i=e[O];z.prototype[i]=n(i)}return z};var e=function(){this.listeners={}};e.prototype.on=function(M,b){this.listeners=this.listeners||{},M in this.listeners?this.listeners[M].push(b):this.listeners[M]=[b]},e.prototype.trigger=function(M){var b=Array.prototype.slice,p=b.call(arguments,1);this.listeners=this.listeners||{},null==p&&(p=[]),0===p.length&&p.push({}),p[0]._type=M,M in this.listeners&&this.invoke(this.listeners[M],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},e.prototype.invoke=function(M,b){for(var p=0,e=M.length;p<e;p++)M[p].apply(this,b)},b.Observable=e,b.generateChars=function(M){for(var b="",p=0;p<M;p++){b+=Math.floor(36*Math.random()).toString(36)}return b},b.bind=function(M,b){return function(){M.apply(b,arguments)}},b._convertData=function(M){for(var b in M){var p=b.split("-"),e=M;if(1!==p.length){for(var o=0;o<p.length;o++){var z=p[o];(z=z.substring(0,1).toLowerCase()+z.substring(1))in e||(e[z]={}),o==p.length-1&&(e[z]=M[b]),e=e[z]}delete M[b]}}return M},b.hasScroll=function(b,p){var e=M(p),o=p.style.overflowX,z=p.style.overflowY;return(o!==z||"hidden"!==z&&"visible"!==z)&&("scroll"===o||"scroll"===z||(e.innerHeight()<p.scrollHeight||e.innerWidth()<p.scrollWidth))},b.escapeMarkup=function(M){var b={"\\":"\","&":"&","<":"<",">":">",'"':""","'":"'","/":"/"};return"string"!=typeof M?M:String(M).replace(/[&<>"'\/\\]/g,function(M){return b[M]})},b.__cache={};var o=0;return b.GetUniqueElementId=function(M){var p=M.getAttribute("data-select2-id");return null!=p||(p=M.id?"select2-data-"+M.id:"select2-data-"+(++o).toString()+"-"+b.generateChars(4),M.setAttribute("data-select2-id",p)),p},b.StoreData=function(M,p,e){var o=b.GetUniqueElementId(M);b.__cache[o]||(b.__cache[o]={}),b.__cache[o][p]=e},b.GetData=function(p,e){var o=b.GetUniqueElementId(p);return e?b.__cache[o]&&null!=b.__cache[o][e]?b.__cache[o][e]:M(p).data(e):b.__cache[o]},b.RemoveData=function(M){var p=b.GetUniqueElementId(M);null!=b.__cache[p]&&delete b.__cache[p],M.removeAttribute("data-select2-id")},b.copyNonInternalCssClasses=function(M,b){var p=M.getAttribute("class").trim().split(/\s+/);p=p.filter(function(M){return 0===M.indexOf("select2-")});var e=b.getAttribute("class").trim().split(/\s+/);e=e.filter(function(M){return 0!==M.indexOf("select2-")});var o=p.concat(e);M.setAttribute("class",o.join(" "))},b}),b.define("select2/results",["jquery","./utils"],function(M,b){function p(M,b,e){this.$element=M,this.data=e,this.options=b,p.__super__.constructor.call(this)}return b.Extend(p,b.Observable),p.prototype.render=function(){var b=M('<ul class="select2-results__options" role="listbox"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},p.prototype.clear=function(){this.$results.empty()},p.prototype.displayMessage=function(b){var p=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var e=M('<li role="alert" aria-live="assertive" class="select2-results__option"></li>'),o=this.options.get("translations").get(b.message);e.append(p(o(b.args))),e[0].className+=" select2-results__message",this.$results.append(e)},p.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},p.prototype.append=function(M){this.hideLoading();var b=[];if(null!=M.results&&0!==M.results.length){M.results=this.sort(M.results);for(var p=0;p<M.results.length;p++){var e=M.results[p],o=this.option(e);b.push(o)}this.$results.append(b)}else 0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"})},p.prototype.position=function(M,b){b.find(".select2-results").append(M)},p.prototype.sort=function(M){return this.options.get("sorter")(M)},p.prototype.highlightFirstItem=function(){var M=this.$results.find(".select2-results__option--selectable"),b=M.filter(".select2-results__option--selected");b.length>0?b.first().trigger("mouseenter"):M.first().trigger("mouseenter"),this.ensureHighlightVisible()},p.prototype.setClasses=function(){var p=this;this.data.current(function(e){var o=e.map(function(M){return M.id.toString()});p.$results.find(".select2-results__option--selectable").each(function(){var p=M(this),e=b.GetData(this,"data"),z=""+e.id;null!=e.element&&e.element.selected||null==e.element&&o.indexOf(z)>-1?(this.classList.add("select2-results__option--selected"),p.attr("aria-selected","true")):(this.classList.remove("select2-results__option--selected"),p.attr("aria-selected","false"))})})},p.prototype.showLoading=function(M){this.hideLoading();var b={disabled:!0,loading:!0,text:this.options.get("translations").get("searching")(M)},p=this.option(b);p.className+=" loading-results",this.$results.prepend(p)},p.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},p.prototype.option=function(p){var e=document.createElement("li");e.classList.add("select2-results__option"),e.classList.add("select2-results__option--selectable");var o={role:"option"},z=window.Element.prototype.matches||window.Element.prototype.msMatchesSelector||window.Element.prototype.webkitMatchesSelector;for(var t in(null!=p.element&&z.call(p.element,":disabled")||null==p.element&&p.disabled)&&(o["aria-disabled"]="true",e.classList.remove("select2-results__option--selectable"),e.classList.add("select2-results__option--disabled")),null==p.id&&e.classList.remove("select2-results__option--selectable"),null!=p._resultId&&(e.id=p._resultId),p.title&&(e.title=p.title),p.children&&(o.role="group",o["aria-label"]=p.text,e.classList.remove("select2-results__option--selectable"),e.classList.add("select2-results__option--group")),o){var c=o[t];e.setAttribute(t,c)}if(p.children){var n=M(e),O=document.createElement("strong");O.className="select2-results__group",this.template(p,O);for(var i=[],r=0;r<p.children.length;r++){var a=p.children[r],s=this.option(a);i.push(s)}var A=M("<ul></ul>",{class:"select2-results__options select2-results__options--nested",role:"none"});A.append(i),n.append(O),n.append(A)}else this.template(p,e);return b.StoreData(e,"data",p),e},p.prototype.bind=function(p,e){var o=this,z=p.id+"-results";this.$results.attr("id",z),p.on("results:all",function(M){o.clear(),o.append(M.data),p.isOpen()&&(o.setClasses(),o.highlightFirstItem())}),p.on("results:append",function(M){o.append(M.data),p.isOpen()&&o.setClasses()}),p.on("query",function(M){o.hideMessages(),o.showLoading(M)}),p.on("select",function(){p.isOpen()&&(o.setClasses(),o.options.get("scrollAfterSelect")&&o.highlightFirstItem())}),p.on("unselect",function(){p.isOpen()&&(o.setClasses(),o.options.get("scrollAfterSelect")&&o.highlightFirstItem())}),p.on("open",function(){o.$results.attr("aria-expanded","true"),o.$results.attr("aria-hidden","false"),o.setClasses(),o.ensureHighlightVisible()}),p.on("close",function(){o.$results.attr("aria-expanded","false"),o.$results.attr("aria-hidden","true"),o.$results.removeAttr("aria-activedescendant")}),p.on("results:toggle",function(){var M=o.getHighlightedResults();0!==M.length&&M.trigger("mouseup")}),p.on("results:select",function(){var M=o.getHighlightedResults();if(0!==M.length){var p=b.GetData(M[0],"data");M.hasClass("select2-results__option--selected")?o.trigger("close",{}):o.trigger("select",{data:p})}}),p.on("results:previous",function(){var M=o.getHighlightedResults(),b=o.$results.find(".select2-results__option--selectable"),p=b.index(M);if(!(p<=0)){var e=p-1;0===M.length&&(e=0);var z=b.eq(e);z.trigger("mouseenter");var t=o.$results.offset().top,c=z.offset().top,n=o.$results.scrollTop()+(c-t);0===e?o.$results.scrollTop(0):c-t<0&&o.$results.scrollTop(n)}}),p.on("results:next",function(){var M=o.getHighlightedResults(),b=o.$results.find(".select2-results__option--selectable"),p=b.index(M)+1;if(!(p>=b.length)){var e=b.eq(p);e.trigger("mouseenter");var z=o.$results.offset().top+o.$results.outerHeight(!1),t=e.offset().top+e.outerHeight(!1),c=o.$results.scrollTop()+t-z;0===p?o.$results.scrollTop(0):t>z&&o.$results.scrollTop(c)}}),p.on("results:focus",function(M){M.element[0].classList.add("select2-results__option--highlighted"),M.element[0].setAttribute("aria-selected","true")}),p.on("results:message",function(M){o.displayMessage(M)}),M.fn.mousewheel&&this.$results.on("mousewheel",function(M){var b=o.$results.scrollTop(),p=o.$results.get(0).scrollHeight-b+M.deltaY,e=M.deltaY>0&&b-M.deltaY<=0,z=M.deltaY<0&&p<=o.$results.height();e?(o.$results.scrollTop(0),M.preventDefault(),M.stopPropagation()):z&&(o.$results.scrollTop(o.$results.get(0).scrollHeight-o.$results.height()),M.preventDefault(),M.stopPropagation())}),this.$results.on("mouseup",".select2-results__option--selectable",function(p){var e=M(this),z=b.GetData(this,"data");e.hasClass("select2-results__option--selected")?o.options.get("multiple")?o.trigger("unselect",{originalEvent:p,data:z}):o.trigger("close",{}):o.trigger("select",{originalEvent:p,data:z})}),this.$results.on("mouseenter",".select2-results__option--selectable",function(p){var e=b.GetData(this,"data");o.getHighlightedResults().removeClass("select2-results__option--highlighted").attr("aria-selected","false"),o.trigger("results:focus",{data:e,element:M(this)})})},p.prototype.getHighlightedResults=function(){return this.$results.find(".select2-results__option--highlighted")},p.prototype.destroy=function(){this.$results.remove()},p.prototype.ensureHighlightVisible=function(){var M=this.getHighlightedResults();if(0!==M.length){var b=this.$results.find(".select2-results__option--selectable").index(M),p=this.$results.offset().top,e=M.offset().top,o=this.$results.scrollTop()+(e-p),z=e-p;o-=2*M.outerHeight(!1),b<=2?this.$results.scrollTop(0):(z>this.$results.outerHeight()||z<0)&&this.$results.scrollTop(o)}},p.prototype.template=function(b,p){var e=this.options.get("templateResult"),o=this.options.get("escapeMarkup"),z=e(b,p);null==z?p.style.display="none":"string"==typeof z?p.innerHTML=o(z):M(p).append(z)},p}),b.define("select2/keys",[],function(){return{BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46}}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(M,b,p){function e(M,b){this.$element=M,this.options=b,e.__super__.constructor.call(this)}return b.Extend(e,b.Observable),e.prototype.render=function(){var p=M('<span class="select2-selection" role="combobox" aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=b.GetData(this.$element[0],"old-tabindex")?this._tabindex=b.GetData(this.$element[0],"old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),p.attr("title",this.$element.attr("title")),p.attr("tabindex",this._tabindex),p.attr("aria-disabled","false"),this.$selection=p,p},e.prototype.bind=function(M,b){var e=this,o=M.id+"-results";this.container=M,this.$selection.on("focus",function(M){e.trigger("focus",M)}),this.$selection.on("blur",function(M){e._handleBlur(M)}),this.$selection.on("keydown",function(M){e.trigger("keypress",M),M.which===p.SPACE&&M.preventDefault()}),M.on("results:focus",function(M){e.$selection.attr("aria-activedescendant",M.data._resultId)}),M.on("selection:update",function(M){e.update(M.data)}),M.on("open",function(){e.$selection.attr("aria-expanded","true"),e.$selection.attr("aria-owns",o),e._attachCloseHandler(M)}),M.on("close",function(){e.$selection.attr("aria-expanded","false"),e.$selection.removeAttr("aria-activedescendant"),e.$selection.removeAttr("aria-owns"),e.$selection.trigger("focus"),e._detachCloseHandler(M)}),M.on("enable",function(){e.$selection.attr("tabindex",e._tabindex),e.$selection.attr("aria-disabled","false")}),M.on("disable",function(){e.$selection.attr("tabindex","-1"),e.$selection.attr("aria-disabled","true")})},e.prototype._handleBlur=function(b){var p=this;window.setTimeout(function(){document.activeElement==p.$selection[0]||M.contains(p.$selection[0],document.activeElement)||p.trigger("blur",b)},1)},e.prototype._attachCloseHandler=function(p){M(document.body).on("mousedown.select2."+p.id,function(p){var e=M(p.target).closest(".select2");M(".select2.select2-container--open").each(function(){this!=e[0]&&b.GetData(this,"element").select2("close")})})},e.prototype._detachCloseHandler=function(b){M(document.body).off("mousedown.select2."+b.id)},e.prototype.position=function(M,b){b.find(".selection").append(M)},e.prototype.destroy=function(){this._detachCloseHandler(this.container)},e.prototype.update=function(M){throw new Error("The `update` method must be defined in child classes.")},e.prototype.isEnabled=function(){return!this.isDisabled()},e.prototype.isDisabled=function(){return this.options.get("disabled")},e}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(M,b,p,e){function o(){o.__super__.constructor.apply(this,arguments)}return p.Extend(o,b),o.prototype.render=function(){var M=o.__super__.render.call(this);return M[0].classList.add("select2-selection--single"),M.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),M},o.prototype.bind=function(M,b){var p=this;o.__super__.bind.apply(this,arguments);var e=M.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",e).attr("role","textbox").attr("aria-readonly","true"),this.$selection.attr("aria-labelledby",e),this.$selection.attr("aria-controls",e),this.$selection.on("mousedown",function(M){1===M.which&&p.trigger("toggle",{originalEvent:M})}),this.$selection.on("focus",function(M){}),this.$selection.on("blur",function(M){}),M.on("focus",function(b){M.isOpen()||p.$selection.trigger("focus")})},o.prototype.clear=function(){var M=this.$selection.find(".select2-selection__rendered");M.empty(),M.removeAttr("title")},o.prototype.display=function(M,b){var p=this.options.get("templateSelection");return this.options.get("escapeMarkup")(p(M,b))},o.prototype.selectionContainer=function(){return M("<span></span>")},o.prototype.update=function(M){if(0!==M.length){var b=M[0],p=this.$selection.find(".select2-selection__rendered"),e=this.display(b,p);p.empty().append(e);var o=b.title||b.text;o?p.attr("title",o):p.removeAttr("title")}else this.clear()},o}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(M,b,p){function e(M,b){e.__super__.constructor.apply(this,arguments)}return p.Extend(e,b),e.prototype.render=function(){var M=e.__super__.render.call(this);return M[0].classList.add("select2-selection--multiple"),M.html('<ul class="select2-selection__rendered"></ul>'),M},e.prototype.bind=function(b,o){var z=this;e.__super__.bind.apply(this,arguments);var t=b.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",t),this.$selection.on("click",function(M){z.trigger("toggle",{originalEvent:M})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!z.isDisabled()){var e=M(this).parent(),o=p.GetData(e[0],"data");z.trigger("unselect",{originalEvent:b,data:o})}}),this.$selection.on("keydown",".select2-selection__choice__remove",function(M){z.isDisabled()||M.stopPropagation()})},e.prototype.clear=function(){var M=this.$selection.find(".select2-selection__rendered");M.empty(),M.removeAttr("title")},e.prototype.display=function(M,b){var p=this.options.get("templateSelection");return this.options.get("escapeMarkup")(p(M,b))},e.prototype.selectionContainer=function(){return M('<li class="select2-selection__choice"><button type="button" class="select2-selection__choice__remove" tabindex="-1"><span aria-hidden="true">×</span></button><span class="select2-selection__choice__display"></span></li>')},e.prototype.update=function(M){if(this.clear(),0!==M.length){for(var b=[],e=this.$selection.find(".select2-selection__rendered").attr("id")+"-choice-",o=0;o<M.length;o++){var z=M[o],t=this.selectionContainer(),c=this.display(z,t),n=e+p.generateChars(4)+"-";z.id?n+=z.id:n+=p.generateChars(4),t.find(".select2-selection__choice__display").append(c).attr("id",n);var O=z.title||z.text;O&&t.attr("title",O);var i=this.options.get("translations").get("removeItem"),r=t.find(".select2-selection__choice__remove");r.attr("title",i()),r.attr("aria-label",i()),r.attr("aria-describedby",n),p.StoreData(t[0],"data",z),b.push(t)}this.$selection.find(".select2-selection__rendered").append(b)}},e}),b.define("select2/selection/placeholder",[],function(){function M(M,b,p){this.placeholder=this.normalizePlaceholder(p.get("placeholder")),M.call(this,b,p)}return M.prototype.normalizePlaceholder=function(M,b){return"string"==typeof b&&(b={id:"",text:b}),b},M.prototype.createPlaceholder=function(M,b){var p=this.selectionContainer();p.html(this.display(b)),p[0].classList.add("select2-selection__placeholder"),p[0].classList.remove("select2-selection__choice");var e=b.title||b.text||p.text();return this.$selection.find(".select2-selection__rendered").attr("title",e),p},M.prototype.update=function(M,b){var p=1==b.length&&b[0].id!=this.placeholder.id;if(b.length>1||p)return M.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},M}),b.define("select2/selection/allowClear",["jquery","../keys","../utils"],function(M,b,p){function e(){}return e.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(M){e._handleClear(M)}),b.on("keypress",function(M){e._handleKeyboardClear(M,b)})},e.prototype._handleClear=function(M,b){if(!this.isDisabled()){var e=this.$selection.find(".select2-selection__clear");if(0!==e.length){b.stopPropagation();var o=p.GetData(e[0],"data"),z=this.$element.val();this.$element.val(this.placeholder.id);var t={data:o};if(this.trigger("clear",t),t.prevented)this.$element.val(z);else{for(var c=0;c<o.length;c++)if(t={data:o[c]},this.trigger("unselect",t),t.prevented)return void this.$element.val(z);this.$element.trigger("input").trigger("change"),this.trigger("toggle",{})}}}},e.prototype._handleKeyboardClear=function(M,p,e){e.isOpen()||p.which!=b.DELETE&&p.which!=b.BACKSPACE||this._handleClear(p)},e.prototype.update=function(b,e){if(b.call(this,e),this.$selection.find(".select2-selection__clear").remove(),this.$selection[0].classList.remove("select2-selection--clearable"),!(this.$selection.find(".select2-selection__placeholder").length>0||0===e.length)){var o=this.$selection.find(".select2-selection__rendered").attr("id"),z=this.options.get("translations").get("removeAllItems"),t=M('<button type="button" class="select2-selection__clear" tabindex="-1"><span aria-hidden="true">×</span></button>');t.attr("title",z()),t.attr("aria-label",z()),t.attr("aria-describedby",o),p.StoreData(t[0],"data",e),this.$selection.prepend(t),this.$selection[0].classList.add("select2-selection--clearable")}},e}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(M,b,p){function e(M,b,p){M.call(this,b,p)}return e.prototype.render=function(b){var p=this.options.get("translations").get("search"),e=M('<span class="select2-search select2-search--inline"><textarea class="select2-search__field" type="search" tabindex="-1" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" ></textarea></span>');this.$searchContainer=e,this.$search=e.find("textarea"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",p());var o=b.call(this);return this._transferTabIndex(),o.append(this.$searchContainer),o},e.prototype.bind=function(M,e,o){var z=this,t=e.id+"-results",c=e.id+"-container";M.call(this,e,o),z.$search.attr("aria-describedby",c),e.on("open",function(){z.$search.attr("aria-controls",t),z.$search.trigger("focus")}),e.on("close",function(){z.$search.val(""),z.resizeSearch(),z.$search.removeAttr("aria-controls"),z.$search.removeAttr("aria-activedescendant"),z.$search.trigger("focus")}),e.on("enable",function(){z.$search.prop("disabled",!1),z._transferTabIndex()}),e.on("disable",function(){z.$search.prop("disabled",!0)}),e.on("focus",function(M){z.$search.trigger("focus")}),e.on("results:focus",function(M){M.data._resultId?z.$search.attr("aria-activedescendant",M.data._resultId):z.$search.removeAttr("aria-activedescendant")}),this.$selection.on("focusin",".select2-search--inline",function(M){z.trigger("focus",M)}),this.$selection.on("focusout",".select2-search--inline",function(M){z._handleBlur(M)}),this.$selection.on("keydown",".select2-search--inline",function(M){if(M.stopPropagation(),z.trigger("keypress",M),z._keyUpPrevented=M.isDefaultPrevented(),M.which===p.BACKSPACE&&""===z.$search.val()){var e=z.$selection.find(".select2-selection__choice").last();if(e.length>0){var o=b.GetData(e[0],"data");z.searchRemoveChoice(o),M.preventDefault()}}}),this.$selection.on("click",".select2-search--inline",function(M){z.$search.val()&&M.stopPropagation()});var n=document.documentMode,O=n&&n<=11;this.$selection.on("input.searchcheck",".select2-search--inline",function(M){O?z.$selection.off("input.search input.searchcheck"):z.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(M){if(O&&"input"===M.type)z.$selection.off("input.search input.searchcheck");else{var b=M.which;b!=p.SHIFT&&b!=p.CTRL&&b!=p.ALT&&b!=p.TAB&&z.handleSearch(M)}})},e.prototype._transferTabIndex=function(M){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},e.prototype.createPlaceholder=function(M,b){this.$search.attr("placeholder",b.text)},e.prototype.update=function(M,b){var p=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),M.call(this,b),this.resizeSearch(),p&&this.$search.trigger("focus")},e.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var M=this.$search.val();this.trigger("query",{term:M})}this._keyUpPrevented=!1},e.prototype.searchRemoveChoice=function(M,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},e.prototype.resizeSearch=function(){this.$search.css("width","25px");var M="100%";""===this.$search.attr("placeholder")&&(M=.75*(this.$search.val().length+1)+"em");this.$search.css("width",M)},e}),b.define("select2/selection/selectionCss",["../utils"],function(M){function b(){}return b.prototype.render=function(b){var p=b.call(this),e=this.options.get("selectionCssClass")||"";return-1!==e.indexOf(":all:")&&(e=e.replace(":all:",""),M.copyNonInternalCssClasses(p[0],this.$element[0])),p.addClass(e),p},b}),b.define("select2/selection/eventRelay",["jquery"],function(M){function b(){}return b.prototype.bind=function(b,p,e){var o=this,z=["open","opening","close","closing","select","selecting","unselect","unselecting","clear","clearing"],t=["opening","closing","selecting","unselecting","clearing"];b.call(this,p,e),p.on("*",function(b,p){if(-1!==z.indexOf(b)){p=p||{};var e=M.Event("select2:"+b,{params:p});o.$element.trigger(e),-1!==t.indexOf(b)&&(p.prevented=e.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(M,b){function p(M){this.dict=M||{}}return p.prototype.all=function(){return this.dict},p.prototype.get=function(M){return this.dict[M]},p.prototype.extend=function(b){this.dict=M.extend({},b.all(),this.dict)},p._cache={},p.loadPath=function(M){if(!(M in p._cache)){var e=b(M);p._cache[M]=e}return new p(p._cache[M])},p}),b.define("select2/diacritics",[],function(){return{"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Œ":"OE","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","œ":"oe","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ώ":"ω","ς":"σ","’":"'"}}),b.define("select2/data/base",["../utils"],function(M){function b(M,p){b.__super__.constructor.call(this)}return M.Extend(b,M.Observable),b.prototype.current=function(M){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(M,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(M,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,p){var e=b.id+"-result-";return e+=M.generateChars(4),null!=p.id?e+="-"+p.id.toString():e+="-"+M.generateChars(4),e},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(M,b,p){function e(M,b){this.$element=M,this.options=b,e.__super__.constructor.call(this)}return b.Extend(e,M),e.prototype.current=function(M){var b=this;M(Array.prototype.map.call(this.$element[0].querySelectorAll(":checked"),function(M){return b.item(p(M))}))},e.prototype.select=function(M){var b=this;if(M.selected=!0,null!=M.element&&"option"===M.element.tagName.toLowerCase())return M.element.selected=!0,void this.$element.trigger("input").trigger("change");if(this.$element.prop("multiple"))this.current(function(p){var e=[];(M=[M]).push.apply(M,p);for(var o=0;o<M.length;o++){var z=M[o].id;-1===e.indexOf(z)&&e.push(z)}b.$element.val(e),b.$element.trigger("input").trigger("change")});else{var p=M.id;this.$element.val(p),this.$element.trigger("input").trigger("change")}},e.prototype.unselect=function(M){var b=this;if(this.$element.prop("multiple")){if(M.selected=!1,null!=M.element&&"option"===M.element.tagName.toLowerCase())return M.element.selected=!1,void this.$element.trigger("input").trigger("change");this.current(function(p){for(var e=[],o=0;o<p.length;o++){var z=p[o].id;z!==M.id&&-1===e.indexOf(z)&&e.push(z)}b.$element.val(e),b.$element.trigger("input").trigger("change")})}},e.prototype.bind=function(M,b){var p=this;this.container=M,M.on("select",function(M){p.select(M.data)}),M.on("unselect",function(M){p.unselect(M.data)})},e.prototype.destroy=function(){this.$element.find("*").each(function(){b.RemoveData(this)})},e.prototype.query=function(M,b){var e=[],o=this;this.$element.children().each(function(){if("option"===this.tagName.toLowerCase()||"optgroup"===this.tagName.toLowerCase()){var b=p(this),z=o.item(b),t=o.matches(M,z);null!==t&&e.push(t)}}),b({results:e})},e.prototype.addOptions=function(M){this.$element.append(M)},e.prototype.option=function(M){var e;M.children?(e=document.createElement("optgroup")).label=M.text:void 0!==(e=document.createElement("option")).textContent?e.textContent=M.text:e.innerText=M.text,void 0!==M.id&&(e.value=M.id),M.disabled&&(e.disabled=!0),M.selected&&(e.selected=!0),M.title&&(e.title=M.title);var o=this._normalizeItem(M);return o.element=e,b.StoreData(e,"data",o),p(e)},e.prototype.item=function(M){var e={};if(null!=(e=b.GetData(M[0],"data")))return e;var o=M[0];if("option"===o.tagName.toLowerCase())e={id:M.val(),text:M.text(),disabled:M.prop("disabled"),selected:M.prop("selected"),title:M.prop("title")};else if("optgroup"===o.tagName.toLowerCase()){e={text:M.prop("label"),children:[],title:M.prop("title")};for(var z=M.children("option"),t=[],c=0;c<z.length;c++){var n=p(z[c]),O=this.item(n);t.push(O)}e.children=t}return(e=this._normalizeItem(e)).element=M[0],b.StoreData(M[0],"data",e),e},e.prototype._normalizeItem=function(M){M!==Object(M)&&(M={id:M,text:M});return null!=(M=p.extend({},{text:""},M)).id&&(M.id=M.id.toString()),null!=M.text&&(M.text=M.text.toString()),null==M._resultId&&M.id&&null!=this.container&&(M._resultId=this.generateResultId(this.container,M)),p.extend({},{selected:!1,disabled:!1},M)},e.prototype.matches=function(M,b){return this.options.get("matcher")(M,b)},e}),b.define("select2/data/array",["./select","../utils","jquery"],function(M,b,p){function e(M,b){this._dataToConvert=b.get("data")||[],e.__super__.constructor.call(this,M,b)}return b.Extend(e,M),e.prototype.bind=function(M,b){e.__super__.bind.call(this,M,b),this.addOptions(this.convertToOptions(this._dataToConvert))},e.prototype.select=function(M){var b=this.$element.find("option").filter(function(b,p){return p.value==M.id.toString()});0===b.length&&(b=this.option(M),this.addOptions(b)),e.__super__.select.call(this,M)},e.prototype.convertToOptions=function(M){var b=this,e=this.$element.find("option"),o=e.map(function(){return b.item(p(this)).id}).get(),z=[];function t(M){return function(){return p(this).val()==M.id}}for(var c=0;c<M.length;c++){var n=this._normalizeItem(M[c]);if(o.indexOf(n.id)>=0){var O=e.filter(t(n)),i=this.item(O),r=p.extend(!0,{},n,i),a=this.option(r);O.replaceWith(a)}else{var s=this.option(n);if(n.children){var A=this.convertToOptions(n.children);s.append(A)}z.push(s)}}return z},e}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(M,b,p){function e(M,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),e.__super__.constructor.call(this,M,b)}return b.Extend(e,M),e.prototype._applyDefaults=function(M){var b={data:function(M){return p.extend({},M,{q:M.term})},transport:function(M,b,e){var o=p.ajax(M);return o.then(b),o.fail(e),o}};return p.extend({},b,M,!0)},e.prototype.processResults=function(M){return M},e.prototype.query=function(M,b){var e=this;null!=this._request&&("function"==typeof this._request.abort&&this._request.abort(),this._request=null);var o=p.extend({type:"GET"},this.ajaxOptions);function z(){var p=o.transport(o,function(p){var o=e.processResults(p,M);e.options.get("debug")&&window.console&&console.error&&(o&&o.results&&Array.isArray(o.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(o)},function(){(!("status"in p)||0!==p.status&&"0"!==p.status)&&e.trigger("results:message",{message:"errorLoading"})});e._request=p}"function"==typeof o.url&&(o.url=o.url.call(this.$element,M)),"function"==typeof o.data&&(o.data=o.data.call(this.$element,M)),this.ajaxOptions.delay&&null!=M.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(z,this.ajaxOptions.delay)):z()},e}),b.define("select2/data/tags",["jquery"],function(M){function b(M,b,p){var e=p.get("tags"),o=p.get("createTag");void 0!==o&&(this.createTag=o);var z=p.get("insertTag");if(void 0!==z&&(this.insertTag=z),M.call(this,b,p),Array.isArray(e))for(var t=0;t<e.length;t++){var c=e[t],n=this._normalizeItem(c),O=this.option(n);this.$element.append(O)}}return b.prototype.query=function(M,b,p){var e=this;this._removeOldTags(),null!=b.term&&null==b.page?M.call(this,b,function M(o,z){for(var t=o.results,c=0;c<t.length;c++){var n=t[c],O=null!=n.children&&!M({results:n.children},!0);if((n.text||"").toUpperCase()===(b.term||"").toUpperCase()||O)return!z&&(o.data=t,void p(o))}if(z)return!0;var i=e.createTag(b);if(null!=i){var r=e.option(i);r.attr("data-select2-tag","true"),e.addOptions([r]),e.insertTag(t,i)}o.results=t,p(o)}):M.call(this,b,p)},b.prototype.createTag=function(M,b){if(null==b.term)return null;var p=b.term.trim();return""===p?null:{id:p,text:p}},b.prototype.insertTag=function(M,b,p){b.unshift(p)},b.prototype._removeOldTags=function(b){this.$element.find("option[data-select2-tag]").each(function(){this.selected||M(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(M){function b(M,b,p){var e=p.get("tokenizer");void 0!==e&&(this.tokenizer=e),M.call(this,b,p)}return b.prototype.bind=function(M,b,p){M.call(this,b,p),this.$search=b.dropdown.$search||b.selection.$search||p.find(".select2-search__field")},b.prototype.query=function(b,p,e){var o=this;p.term=p.term||"";var z=this.tokenizer(p,this.options,function(b){var p=o._normalizeItem(b);if(!o.$element.find("option").filter(function(){return M(this).val()===p.id}).length){var e=o.option(p);e.attr("data-select2-tag",!0),o._removeOldTags(),o.addOptions([e])}!function(M){o.trigger("select",{data:M})}(p)});z.term!==p.term&&(this.$search.length&&(this.$search.val(z.term),this.$search.trigger("focus")),p.term=z.term),b.call(this,p,e)},b.prototype.tokenizer=function(b,p,e,o){for(var z=e.get("tokenSeparators")||[],t=p.term,c=0,n=this.createTag||function(M){return{id:M.term,text:M.term}};c<t.length;){var O=t[c];if(-1!==z.indexOf(O)){var i=t.substr(0,c),r=n(M.extend({},p,{term:i}));null!=r?(o(r),t=t.substr(c+1)||"",c=0):c++}else c++}return{term:t}},b}),b.define("select2/data/minimumInputLength",[],function(){function M(M,b,p){this.minimumInputLength=p.get("minimumInputLength"),M.call(this,b,p)}return M.prototype.query=function(M,b,p){b.term=b.term||"",b.term.length<this.minimumInputLength?this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):M.call(this,b,p)},M}),b.define("select2/data/maximumInputLength",[],function(){function M(M,b,p){this.maximumInputLength=p.get("maximumInputLength"),M.call(this,b,p)}return M.prototype.query=function(M,b,p){b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):M.call(this,b,p)},M}),b.define("select2/data/maximumSelectionLength",[],function(){function M(M,b,p){this.maximumSelectionLength=p.get("maximumSelectionLength"),M.call(this,b,p)}return M.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on("select",function(){e._checkIfMaximumSelected()})},M.prototype.query=function(M,b,p){var e=this;this._checkIfMaximumSelected(function(){M.call(e,b,p)})},M.prototype._checkIfMaximumSelected=function(M,b){var p=this;this.current(function(M){var e=null!=M?M.length:0;p.maximumSelectionLength>0&&e>=p.maximumSelectionLength?p.trigger("results:message",{message:"maximumSelected",args:{maximum:p.maximumSelectionLength}}):b&&b()})},M}),b.define("select2/dropdown",["jquery","./utils"],function(M,b){function p(M,b){this.$element=M,this.options=b,p.__super__.constructor.call(this)}return b.Extend(p,b.Observable),p.prototype.render=function(){var b=M('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},p.prototype.bind=function(){},p.prototype.position=function(M,b){},p.prototype.destroy=function(){this.$dropdown.remove()},p}),b.define("select2/dropdown/search",["jquery"],function(M){function b(){}return b.prototype.render=function(b){var p=b.call(this),e=this.options.get("translations").get("search"),o=M('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocorrect="off" autocapitalize="none" spellcheck="false" role="searchbox" aria-autocomplete="list" /></span>');return this.$searchContainer=o,this.$search=o.find("input"),this.$search.prop("autocomplete",this.options.get("autocomplete")),this.$search.attr("aria-label",e()),p.prepend(o),p},b.prototype.bind=function(b,p,e){var o=this,z=p.id+"-results";b.call(this,p,e),this.$search.on("keydown",function(M){o.trigger("keypress",M),o._keyUpPrevented=M.isDefaultPrevented()}),this.$search.on("input",function(b){M(this).off("keyup")}),this.$search.on("keyup input",function(M){o.handleSearch(M)}),p.on("open",function(){o.$search.attr("tabindex",0),o.$search.attr("aria-controls",z),o.$search.trigger("focus"),window.setTimeout(function(){o.$search.trigger("focus")},0)}),p.on("close",function(){o.$search.attr("tabindex",-1),o.$search.removeAttr("aria-controls"),o.$search.removeAttr("aria-activedescendant"),o.$search.val(""),o.$search.trigger("blur")}),p.on("focus",function(){p.isOpen()||o.$search.trigger("focus")}),p.on("results:all",function(M){null!=M.query.term&&""!==M.query.term||(o.showSearch(M)?o.$searchContainer[0].classList.remove("select2-search--hide"):o.$searchContainer[0].classList.add("select2-search--hide"))}),p.on("results:focus",function(M){M.data._resultId?o.$search.attr("aria-activedescendant",M.data._resultId):o.$search.removeAttr("aria-activedescendant")})},b.prototype.handleSearch=function(M){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},b.prototype.showSearch=function(M,b){return!0},b}),b.define("select2/dropdown/hidePlaceholder",[],function(){function M(M,b,p,e){this.placeholder=this.normalizePlaceholder(p.get("placeholder")),M.call(this,b,p,e)}return M.prototype.append=function(M,b){b.results=this.removePlaceholder(b.results),M.call(this,b)},M.prototype.normalizePlaceholder=function(M,b){return"string"==typeof b&&(b={id:"",text:b}),b},M.prototype.removePlaceholder=function(M,b){for(var p=b.slice(0),e=b.length-1;e>=0;e--){var o=b[e];this.placeholder.id===o.id&&p.splice(e,1)}return p},M}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(M){function b(M,b,p,e){this.lastParams={},M.call(this,b,p,e),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(M,b){this.$loadingMore.remove(),this.loading=!1,M.call(this,b),this.showLoadingMore(b)&&(this.$results.append(this.$loadingMore),this.loadMoreIfNeeded())},b.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on("query",function(M){e.lastParams=M,e.loading=!0}),b.on("query:append",function(M){e.lastParams=M,e.loading=!0}),this.$results.on("scroll",this.loadMoreIfNeeded.bind(this))},b.prototype.loadMoreIfNeeded=function(){var b=M.contains(document.documentElement,this.$loadingMore[0]);!this.loading&&b&&(this.$results.offset().top+this.$results.outerHeight(!1)+50>=this.$loadingMore.offset().top+this.$loadingMore.outerHeight(!1)&&this.loadMore())},b.prototype.loadMore=function(){this.loading=!0;var b=M.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(M,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=M('<li class="select2-results__option select2-results__option--load-more"role="option" aria-disabled="true"></li>'),p=this.options.get("translations").get("loadingMore");return b.html(p(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(M,b){function p(b,p,e){this.$dropdownParent=M(e.get("dropdownParent")||document.body),b.call(this,p,e)}return p.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on("open",function(){e._showDropdown(),e._attachPositioningHandler(b),e._bindContainerResultHandlers(b)}),b.on("close",function(){e._hideDropdown(),e._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(M){M.stopPropagation()})},p.prototype.destroy=function(M){M.call(this),this.$dropdownContainer.remove()},p.prototype.position=function(M,b,p){b.attr("class",p.attr("class")),b[0].classList.remove("select2"),b[0].classList.add("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=p},p.prototype.render=function(b){var p=M("<span></span>"),e=b.call(this);return p.append(e),this.$dropdownContainer=p,p},p.prototype._hideDropdown=function(M){this.$dropdownContainer.detach()},p.prototype._bindContainerResultHandlers=function(M,b){if(!this._containerResultsHandlersBound){var p=this;b.on("results:all",function(){p._positionDropdown(),p._resizeDropdown()}),b.on("results:append",function(){p._positionDropdown(),p._resizeDropdown()}),b.on("results:message",function(){p._positionDropdown(),p._resizeDropdown()}),b.on("select",function(){p._positionDropdown(),p._resizeDropdown()}),b.on("unselect",function(){p._positionDropdown(),p._resizeDropdown()}),this._containerResultsHandlersBound=!0}},p.prototype._attachPositioningHandler=function(p,e){var o=this,z="scroll.select2."+e.id,t="resize.select2."+e.id,c="orientationchange.select2."+e.id,n=this.$container.parents().filter(b.hasScroll);n.each(function(){b.StoreData(this,"select2-scroll-position",{x:M(this).scrollLeft(),y:M(this).scrollTop()})}),n.on(z,function(p){var e=b.GetData(this,"select2-scroll-position");M(this).scrollTop(e.y)}),M(window).on(z+" "+t+" "+c,function(M){o._positionDropdown(),o._resizeDropdown()})},p.prototype._detachPositioningHandler=function(p,e){var o="scroll.select2."+e.id,z="resize.select2."+e.id,t="orientationchange.select2."+e.id;this.$container.parents().filter(b.hasScroll).off(o),M(window).off(o+" "+z+" "+t)},p.prototype._positionDropdown=function(){var b=M(window),p=this.$dropdown[0].classList.contains("select2-dropdown--above"),e=this.$dropdown[0].classList.contains("select2-dropdown--below"),o=null,z=this.$container.offset();z.bottom=z.top+this.$container.outerHeight(!1);var t={height:this.$container.outerHeight(!1)};t.top=z.top,t.bottom=z.top+t.height;var c=this.$dropdown.outerHeight(!1),n=b.scrollTop(),O=b.scrollTop()+b.height(),i=n<z.top-c,r=O>z.bottom+c,a={left:z.left,top:t.bottom},s=this.$dropdownParent;"static"===s.css("position")&&(s=s.offsetParent());var A={top:0,left:0};(M.contains(document.body,s[0])||s[0].isConnected)&&(A=s.offset()),a.top-=A.top,a.left-=A.left,p||e||(o="below"),r||!i||p?!i&&r&&p&&(o="below"):o="above",("above"==o||p&&"below"!==o)&&(a.top=t.top-A.top-c),null!=o&&(this.$dropdown[0].classList.remove("select2-dropdown--below"),this.$dropdown[0].classList.remove("select2-dropdown--above"),this.$dropdown[0].classList.add("select2-dropdown--"+o),this.$container[0].classList.remove("select2-container--below"),this.$container[0].classList.remove("select2-container--above"),this.$container[0].classList.add("select2-container--"+o)),this.$dropdownContainer.css(a)},p.prototype._resizeDropdown=function(){var M={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(M.minWidth=M.width,M.position="relative",M.width="auto"),this.$dropdown.css(M)},p.prototype._showDropdown=function(M){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},p}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function M(b){for(var p=0,e=0;e<b.length;e++){var o=b[e];o.children?p+=M(o.children):p++}return p}function b(M,b,p,e){this.minimumResultsForSearch=p.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),M.call(this,b,p,e)}return b.prototype.showSearch=function(b,p){return!(M(p.data.results)<this.minimumResultsForSearch)&&b.call(this,p)},b}),b.define("select2/dropdown/selectOnClose",["../utils"],function(M){function b(){}return b.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on("close",function(M){e._handleSelectOnClose(M)})},b.prototype._handleSelectOnClose=function(b,p){if(p&&null!=p.originalSelect2Event){var e=p.originalSelect2Event;if("select"===e._type||"unselect"===e._type)return}var o=this.getHighlightedResults();if(!(o.length<1)){var z=M.GetData(o[0],"data");null!=z.element&&z.element.selected||null==z.element&&z.selected||this.trigger("select",{data:z})}},b}),b.define("select2/dropdown/closeOnSelect",[],function(){function M(){}return M.prototype.bind=function(M,b,p){var e=this;M.call(this,b,p),b.on("select",function(M){e._selectTriggered(M)}),b.on("unselect",function(M){e._selectTriggered(M)})},M.prototype._selectTriggered=function(M,b){var p=b.originalEvent;p&&(p.ctrlKey||p.metaKey)||this.trigger("close",{originalEvent:p,originalSelect2Event:b})},M}),b.define("select2/dropdown/dropdownCss",["../utils"],function(M){function b(){}return b.prototype.render=function(b){var p=b.call(this),e=this.options.get("dropdownCssClass")||"";return-1!==e.indexOf(":all:")&&(e=e.replace(":all:",""),M.copyNonInternalCssClasses(p[0],this.$element[0])),p.addClass(e),p},b}),b.define("select2/dropdown/tagsSearchHighlight",["../utils"],function(M){function b(){}return b.prototype.highlightFirstItem=function(b){var p=this.$results.find(".select2-results__option--selectable:not(.select2-results__option--selected)");if(p.length>0){var e=p.first(),o=M.GetData(e[0],"data").element;if(o&&o.getAttribute&&"true"===o.getAttribute("data-select2-tag"))return void e.trigger("mouseenter")}b.call(this)},b}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(M){var b=M.input.length-M.maximum,p="Please delete "+b+" character";return 1!=b&&(p+="s"),p},inputTooShort:function(M){return"Please enter "+(M.minimum-M.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(M){var b="You can only select "+M.maximum+" item";return 1!=M.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"},removeItem:function(){return"Remove item"},search:function(){return"Search"}}}),b.define("select2/defaults",["jquery","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/selectionCss","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./dropdown/dropdownCss","./dropdown/tagsSearchHighlight","./i18n/en"],function(M,b,p,e,o,z,t,c,n,O,i,r,a,s,A,d,l,q,u,f,W,h,R,m,g,L,v,N,y,B,X){function w(){this.reset()}return w.prototype.apply=function(i){if(null==(i=M.extend(!0,{},this.defaults,i)).dataAdapter&&(null!=i.ajax?i.dataAdapter=A:null!=i.data?i.dataAdapter=s:i.dataAdapter=a,i.minimumInputLength>0&&(i.dataAdapter=O.Decorate(i.dataAdapter,q)),i.maximumInputLength>0&&(i.dataAdapter=O.Decorate(i.dataAdapter,u)),i.maximumSelectionLength>0&&(i.dataAdapter=O.Decorate(i.dataAdapter,f)),i.tags&&(i.dataAdapter=O.Decorate(i.dataAdapter,d)),null==i.tokenSeparators&&null==i.tokenizer||(i.dataAdapter=O.Decorate(i.dataAdapter,l))),null==i.resultsAdapter&&(i.resultsAdapter=b,null!=i.ajax&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,m)),null!=i.placeholder&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,R)),i.selectOnClose&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,v)),i.tags&&(i.resultsAdapter=O.Decorate(i.resultsAdapter,B))),null==i.dropdownAdapter){if(i.multiple)i.dropdownAdapter=W;else{var r=O.Decorate(W,h);i.dropdownAdapter=r}0!==i.minimumResultsForSearch&&(i.dropdownAdapter=O.Decorate(i.dropdownAdapter,L)),i.closeOnSelect&&(i.dropdownAdapter=O.Decorate(i.dropdownAdapter,N)),null!=i.dropdownCssClass&&(i.dropdownAdapter=O.Decorate(i.dropdownAdapter,y)),i.dropdownAdapter=O.Decorate(i.dropdownAdapter,g)}null==i.selectionAdapter&&(i.multiple?i.selectionAdapter=e:i.selectionAdapter=p,null!=i.placeholder&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,o)),i.allowClear&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,z)),i.multiple&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,t)),null!=i.selectionCssClass&&(i.selectionAdapter=O.Decorate(i.selectionAdapter,c)),i.selectionAdapter=O.Decorate(i.selectionAdapter,n)),i.language=this._resolveLanguage(i.language),i.language.push("en");for(var X=[],w=0;w<i.language.length;w++){var x=i.language[w];-1===X.indexOf(x)&&X.push(x)}return i.language=X,i.translations=this._processTranslations(i.language,i.debug),i},w.prototype.reset=function(){function b(M){return M.replace(/[^\u0000-\u007E]/g,function(M){return r[M]||M})}this.defaults={amdLanguageBase:"./i18n/",autocomplete:"off",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:O.escapeMarkup,language:{},matcher:function p(e,o){if(null==e.term||""===e.term.trim())return o;if(o.children&&o.children.length>0){for(var z=M.extend(!0,{},o),t=o.children.length-1;t>=0;t--){null==p(e,o.children[t])&&z.children.splice(t,1)}return z.children.length>0?z:p(e,z)}var c=b(o.text).toUpperCase(),n=b(e.term).toUpperCase();return c.indexOf(n)>-1?o:null},minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,scrollAfterSelect:!1,sorter:function(M){return M},templateResult:function(M){return M.text},templateSelection:function(M){return M.text},theme:"default",width:"resolve"}},w.prototype.applyFromElement=function(M,b){var p=M.language,e=this.defaults.language,o=b.prop("lang"),z=b.closest("[lang]").prop("lang"),t=Array.prototype.concat.call(this._resolveLanguage(o),this._resolveLanguage(p),this._resolveLanguage(e),this._resolveLanguage(z));return M.language=t,M},w.prototype._resolveLanguage=function(b){if(!b)return[];if(M.isEmptyObject(b))return[];if(M.isPlainObject(b))return[b];var p;p=Array.isArray(b)?b:[b];for(var e=[],o=0;o<p.length;o++)if(e.push(p[o]),"string"==typeof p[o]&&p[o].indexOf("-")>0){var z=p[o].split("-")[0];e.push(z)}return e},w.prototype._processTranslations=function(b,p){for(var e=new i,o=0;o<b.length;o++){var z=new i,t=b[o];if("string"==typeof t)try{z=i.loadPath(t)}catch(M){try{t=this.defaults.amdLanguageBase+t,z=i.loadPath(t)}catch(M){p&&window.console&&console.warn&&console.warn('Select2: The language file for "'+t+'" could not be automatically loaded. A fallback will be used instead.')}}else z=M.isPlainObject(t)?new i(t):t;e.extend(z)}return e},w.prototype.set=function(b,p){var e={};e[M.camelCase(b)]=p;var o=O._convertData(e);M.extend(!0,this.defaults,o)},new w}),b.define("select2/options",["jquery","./defaults","./utils"],function(M,b,p){function e(M,p){this.options=M,null!=p&&this.fromElement(p),null!=p&&(this.options=b.applyFromElement(this.options,p)),this.options=b.apply(this.options)}return e.prototype.fromElement=function(b){var e=["select2"];null==this.options.multiple&&(this.options.multiple=b.prop("multiple")),null==this.options.disabled&&(this.options.disabled=b.prop("disabled")),null==this.options.autocomplete&&b.prop("autocomplete")&&(this.options.autocomplete=b.prop("autocomplete")),null==this.options.dir&&(b.prop("dir")?this.options.dir=b.prop("dir"):b.closest("[dir]").prop("dir")?this.options.dir=b.closest("[dir]").prop("dir"):this.options.dir="ltr"),b.prop("disabled",this.options.disabled),b.prop("multiple",this.options.multiple),p.GetData(b[0],"select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),p.StoreData(b[0],"data",p.GetData(b[0],"select2Tags")),p.StoreData(b[0],"tags",!0)),p.GetData(b[0],"ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),b.attr("ajax--url",p.GetData(b[0],"ajaxUrl")),p.StoreData(b[0],"ajax-Url",p.GetData(b[0],"ajaxUrl")));var o={};function z(M,b){return b.toUpperCase()}for(var t=0;t<b[0].attributes.length;t++){var c=b[0].attributes[t].name,n="data-";if(c.substr(0,5)==n){var O=c.substring(5),i=p.GetData(b[0],O);o[O.replace(/-([a-z])/g,z)]=i}}M.fn.jquery&&"1."==M.fn.jquery.substr(0,2)&&b[0].dataset&&(o=M.extend(!0,{},b[0].dataset,o));var r=M.extend(!0,{},p.GetData(b[0]),o);for(var a in r=p._convertData(r))e.indexOf(a)>-1||(M.isPlainObject(this.options[a])?M.extend(this.options[a],r[a]):this.options[a]=r[a]);return this},e.prototype.get=function(M){return this.options[M]},e.prototype.set=function(M,b){this.options[M]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(M,b,p,e){var o=function(M,e){null!=p.GetData(M[0],"select2")&&p.GetData(M[0],"select2").destroy(),this.$element=M,this.id=this._generateId(M),e=e||{},this.options=new b(e,M),o.__super__.constructor.call(this);var z=M.attr("tabindex")||0;p.StoreData(M[0],"old-tabindex",z),M.attr("tabindex","-1");var t=this.options.get("dataAdapter");this.dataAdapter=new t(M,this.options);var c=this.render();this._placeContainer(c);var n=this.options.get("selectionAdapter");this.selection=new n(M,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,c);var O=this.options.get("dropdownAdapter");this.dropdown=new O(M,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,c);var i=this.options.get("resultsAdapter");this.results=new i(M,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var r=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(M){r.trigger("selection:update",{data:M})}),M[0].classList.add("select2-hidden-accessible"),M.attr("aria-hidden","true"),this._syncAttributes(),p.StoreData(M[0],"select2",this),M.data("select2",this)};return p.Extend(o,p.Observable),o.prototype._generateId=function(M){return"select2-"+(null!=M.attr("id")?M.attr("id"):null!=M.attr("name")?M.attr("name")+"-"+p.generateChars(2):p.generateChars(4)).replace(/(:|\.|\[|\]|,)/g,"")},o.prototype._placeContainer=function(M){M.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&M.css("width",b)},o.prototype._resolveWidth=function(M,b){var p=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var e=this._resolveWidth(M,"style");return null!=e?e:this._resolveWidth(M,"element")}if("element"==b){var o=M.outerWidth(!1);return o<=0?"auto":o+"px"}if("style"==b){var z=M.attr("style");if("string"!=typeof z)return null;for(var t=z.split(";"),c=0,n=t.length;c<n;c+=1){var O=t[c].replace(/\s/g,"").match(p);if(null!==O&&O.length>=1)return O[1]}return null}return"computedstyle"==b?window.getComputedStyle(M[0]).width:b},o.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},o.prototype._registerDomEvents=function(){var M=this;this.$element.on("change.select2",function(){M.dataAdapter.current(function(b){M.trigger("selection:update",{data:b})})}),this.$element.on("focus.select2",function(b){M.trigger("focus",b)}),this._syncA=p.bind(this._syncAttributes,this),this._syncS=p.bind(this._syncSubtree,this),this._observer=new window.MutationObserver(function(b){M._syncA(),M._syncS(b)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})},o.prototype._registerDataEvents=function(){var M=this;this.dataAdapter.on("*",function(b,p){M.trigger(b,p)})},o.prototype._registerSelectionEvents=function(){var M=this,b=["toggle","focus"];this.selection.on("toggle",function(){M.toggleDropdown()}),this.selection.on("focus",function(b){M.focus(b)}),this.selection.on("*",function(p,e){-1===b.indexOf(p)&&M.trigger(p,e)})},o.prototype._registerDropdownEvents=function(){var M=this;this.dropdown.on("*",function(b,p){M.trigger(b,p)})},o.prototype._registerResultsEvents=function(){var M=this;this.results.on("*",function(b,p){M.trigger(b,p)})},o.prototype._registerEvents=function(){var M=this;this.on("open",function(){M.$container[0].classList.add("select2-container--open")}),this.on("close",function(){M.$container[0].classList.remove("select2-container--open")}),this.on("enable",function(){M.$container[0].classList.remove("select2-container--disabled")}),this.on("disable",function(){M.$container[0].classList.add("select2-container--disabled")}),this.on("blur",function(){M.$container[0].classList.remove("select2-container--focus")}),this.on("query",function(b){M.isOpen()||M.trigger("open",{}),this.dataAdapter.query(b,function(p){M.trigger("results:all",{data:p,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(p){M.trigger("results:append",{data:p,query:b})})}),this.on("keypress",function(b){var p=b.which;M.isOpen()?p===e.ESC||p===e.UP&&b.altKey?(M.close(b),b.preventDefault()):p===e.ENTER||p===e.TAB?(M.trigger("results:select",{}),b.preventDefault()):p===e.SPACE&&b.ctrlKey?(M.trigger("results:toggle",{}),b.preventDefault()):p===e.UP?(M.trigger("results:previous",{}),b.preventDefault()):p===e.DOWN&&(M.trigger("results:next",{}),b.preventDefault()):(p===e.ENTER||p===e.SPACE||p===e.DOWN&&b.altKey)&&(M.open(),b.preventDefault())})},o.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.isDisabled()?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},o.prototype._isChangeMutation=function(M){var b=this;if(M.addedNodes&&M.addedNodes.length>0)for(var p=0;p<M.addedNodes.length;p++){if(M.addedNodes[p].selected)return!0}else{if(M.removedNodes&&M.removedNodes.length>0)return!0;if(Array.isArray(M))return M.some(function(M){return b._isChangeMutation(M)})}return!1},o.prototype._syncSubtree=function(M){var b=this._isChangeMutation(M),p=this;b&&this.dataAdapter.current(function(M){p.trigger("selection:update",{data:M})})},o.prototype.trigger=function(M,b){var p=o.__super__.trigger,e={open:"opening",close:"closing",select:"selecting",unselect:"unselecting",clear:"clearing"};if(void 0===b&&(b={}),M in e){var z=e[M],t={prevented:!1,name:M,args:b};if(p.call(this,z,t),t.prevented)return void(b.prevented=!0)}p.call(this,M,b)},o.prototype.toggleDropdown=function(){this.isDisabled()||(this.isOpen()?this.close():this.open())},o.prototype.open=function(){this.isOpen()||this.isDisabled()||this.trigger("query",{})},o.prototype.close=function(M){this.isOpen()&&this.trigger("close",{originalEvent:M})},o.prototype.isEnabled=function(){return!this.isDisabled()},o.prototype.isDisabled=function(){return this.options.get("disabled")},o.prototype.isOpen=function(){return this.$container[0].classList.contains("select2-container--open")},o.prototype.hasFocus=function(){return this.$container[0].classList.contains("select2-container--focus")},o.prototype.focus=function(M){this.hasFocus()||(this.$container[0].classList.add("select2-container--focus"),this.trigger("focus",{}))},o.prototype.enable=function(M){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),null!=M&&0!==M.length||(M=[!0]);var b=!M[0];this.$element.prop("disabled",b)},o.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var M=[];return this.dataAdapter.current(function(b){M=b}),M},o.prototype.val=function(M){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==M||0===M.length)return this.$element.val();var b=M[0];Array.isArray(b)&&(b=b.map(function(M){return M.toString()})),this.$element.val(b).trigger("input").trigger("change")},o.prototype.destroy=function(){p.RemoveData(this.$container[0]),this.$container.remove(),this._observer.disconnect(),this._observer=null,this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",p.GetData(this.$element[0],"old-tabindex")),this.$element[0].classList.remove("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),p.RemoveData(this.$element[0]),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null},o.prototype.render=function(){var b=M('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container[0].classList.add("select2-container--"+this.options.get("theme")),p.StoreData(b[0],"element",this.$element),b},o}),b.define("select2/dropdown/attachContainer",[],function(){function M(M,b,p){M.call(this,b,p)}return M.prototype.position=function(M,b,p){p.find(".dropdown-wrapper").append(b),b[0].classList.add("select2-dropdown--below"),p[0].classList.add("select2-container--below")},M}),b.define("select2/dropdown/stopPropagation",[],function(){function M(){}return M.prototype.bind=function(M,b,p){M.call(this,b,p);this.$dropdown.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(M){M.stopPropagation()})},M}),b.define("select2/selection/stopPropagation",[],function(){function M(){}return M.prototype.bind=function(M,b,p){M.call(this,b,p);this.$selection.on(["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"].join(" "),function(M){M.stopPropagation()})},M}),p=function(M){var b,p,e=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],o="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],z=Array.prototype.slice;if(M.event.fixHooks)for(var t=e.length;t;)M.event.fixHooks[e[--t]]=M.event.mouseHooks;var c=M.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var b=o.length;b;)this.addEventListener(o[--b],n,!1);else this.onmousewheel=n;M.data(this,"mousewheel-line-height",c.getLineHeight(this)),M.data(this,"mousewheel-page-height",c.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var b=o.length;b;)this.removeEventListener(o[--b],n,!1);else this.onmousewheel=null;M.removeData(this,"mousewheel-line-height"),M.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var p=M(b),e=p["offsetParent"in M.fn?"offsetParent":"parent"]();return e.length||(e=M("body")),parseInt(e.css("fontSize"),10)||parseInt(p.css("fontSize"),10)||16},getPageHeight:function(b){return M(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function n(e){var o,t=e||window.event,n=z.call(arguments,1),r=0,a=0,s=0,A=0,d=0;if((e=M.event.fix(t)).type="mousewheel","detail"in t&&(s=-1*t.detail),"wheelDelta"in t&&(s=t.wheelDelta),"wheelDeltaY"in t&&(s=t.wheelDeltaY),"wheelDeltaX"in t&&(a=-1*t.wheelDeltaX),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(a=-1*s,s=0),r=0===s?a:s,"deltaY"in t&&(r=s=-1*t.deltaY),"deltaX"in t&&(a=t.deltaX,0===s&&(r=-1*a)),0!==s||0!==a){if(1===t.deltaMode){var l=M.data(this,"mousewheel-line-height");r*=l,s*=l,a*=l}else if(2===t.deltaMode){var q=M.data(this,"mousewheel-page-height");r*=q,s*=q,a*=q}if(o=Math.max(Math.abs(s),Math.abs(a)),(!p||o<p)&&(p=o,i(t,o)&&(p/=40)),i(t,o)&&(r/=40,a/=40,s/=40),r=Math[r>=1?"floor":"ceil"](r/p),a=Math[a>=1?"floor":"ceil"](a/p),s=Math[s>=1?"floor":"ceil"](s/p),c.settings.normalizeOffset&&this.getBoundingClientRect){var u=this.getBoundingClientRect();A=e.clientX-u.left,d=e.clientY-u.top}return e.deltaX=a,e.deltaY=s,e.deltaFactor=p,e.offsetX=A,e.offsetY=d,e.deltaMode=0,n.unshift(e,r,a,s),b&&clearTimeout(b),b=setTimeout(O,200),(M.event.dispatch||M.event.handle).apply(this,n)}}function O(){p=null}function i(M,b){return c.settings.adjustOldDeltas&&"mousewheel"===M.type&&b%120==0}M.fn.extend({mousewheel:function(M){return M?this.bind("mousewheel",M):this.trigger("mousewheel")},unmousewheel:function(M){return this.unbind("mousewheel",M)}})},"function"==typeof b.define&&b.define.amd?b.define("jquery-mousewheel",["jquery"],p):"object"==typeof exports?module.exports=p:p(M),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults","./select2/utils"],function(M,b,p,e,o){if(null==M.fn.select2){var z=["open","close","destroy"];M.fn.select2=function(b){if("object"==typeof(b=b||{}))return this.each(function(){var e=M.extend(!0,{},b);new p(M(this),e)}),this;if("string"==typeof b){var e,t=Array.prototype.slice.call(arguments,1);return this.each(function(){var M=o.GetData(this,"select2");null==M&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),e=M[b].apply(M,t)}),z.indexOf(b)>-1?this:e}throw new Error("Invalid arguments for Select2: "+b)}}return null==M.fn.select2.defaults&&(M.fn.select2.defaults=e),p}),{define:b.define,require:b.require}}(),p=b.require("jquery.select2");return M.fn.select2.amd=b,p}),function(M){"function"==typeof define&&define.amd?define(["jquery"],M):"object"==typeof exports?module.exports=M:M(jQuery)}(function(M){var b,p,e=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],o="onwheel"in window.document||window.document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],z=Array.prototype.slice;if(M.event.fixHooks)for(var t=e.length;t;)M.event.fixHooks[e[--t]]=M.event.mouseHooks;var c=M.event.special.mousewheel={version:"3.2.0",setup:function(){if(this.addEventListener)for(var b=o.length;b;)this.addEventListener(o[--b],n,!1);else this.onmousewheel=n;M.data(this,"mousewheel-line-height",c.getLineHeight(this)),M.data(this,"mousewheel-page-height",c.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var b=o.length;b;)this.removeEventListener(o[--b],n,!1);else this.onmousewheel=null;M.removeData(this,"mousewheel-line-height"),M.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var p=M(b),e=p["offsetParent"in M.fn?"offsetParent":"parent"]();return e.length||(e=M("body")),parseInt(e.css("fontSize"),10)||parseInt(p.css("fontSize"),10)||16},getPageHeight:function(b){return M(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};function n(e){var o,t=e||window.event,n=z.call(arguments,1),r=0,a=0,s=0;if((e=M.event.fix(t)).type="mousewheel","detail"in t&&(s=-1*t.detail),"wheelDelta"in t&&(s=t.wheelDelta),"wheelDeltaY"in t&&(s=t.wheelDeltaY),"wheelDeltaX"in t&&(a=-1*t.wheelDeltaX),"axis"in t&&t.axis===t.HORIZONTAL_AXIS&&(a=-1*s,s=0),r=0===s?a:s,"deltaY"in t&&(r=s=-1*t.deltaY),"deltaX"in t&&(a=t.deltaX,0===s&&(r=-1*a)),0!==s||0!==a){if(1===t.deltaMode){var A=M.data(this,"mousewheel-line-height");r*=A,s*=A,a*=A}else if(2===t.deltaMode){var d=M.data(this,"mousewheel-page-height");r*=d,s*=d,a*=d}if(o=Math.max(Math.abs(s),Math.abs(a)),(!p||o<p)&&(p=o,i(t,o)&&(p/=40)),i(t,o)&&(r/=40,a/=40,s/=40),r=Math[r>=1?"floor":"ceil"](r/p),a=Math[a>=1?"floor":"ceil"](a/p),s=Math[s>=1?"floor":"ceil"](s/p),c.settings.normalizeOffset&&this.getBoundingClientRect){var l=this.getBoundingClientRect();e.offsetX=e.clientX-l.left,e.offsetY=e.clientY-l.top}return e.deltaX=a,e.deltaY=s,e.deltaFactor=p,e.deltaMode=0,n.unshift(e,r,a,s),b&&window.clearTimeout(b),b=window.setTimeout(O,200),(M.event.dispatch||M.event.handle).apply(this,n)}}function O(){p=null}function i(M,b){return c.settings.adjustOldDeltas&&"mousewheel"===M.type&&b%120==0}M.fn.extend({mousewheel:function(M){return M?this.on("mousewheel",M):this.trigger("mousewheel")},unmousewheel:function(M){return this.off("mousewheel",M)}})}),function(M,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):M.moment=b()}(this,function(){"use strict";var M,b;function p(){return M.apply(null,arguments)}function e(M){return M instanceof Array||"[object Array]"===Object.prototype.toString.call(M)}function o(M){return null!=M&&"[object Object]"===Object.prototype.toString.call(M)}function z(M,b){return Object.prototype.hasOwnProperty.call(M,b)}function t(M){if(Object.getOwnPropertyNames)return 0===Object.getOwnPropertyNames(M).length;var b;for(b in M)if(z(M,b))return!1;return!0}function c(M){return void 0===M}function n(M){return"number"==typeof M||"[object Number]"===Object.prototype.toString.call(M)}function O(M){return M instanceof Date||"[object Date]"===Object.prototype.toString.call(M)}function i(M,b){var p,e=[],o=M.length;for(p=0;p<o;++p)e.push(b(M[p],p));return e}function r(M,b){for(var p in b)z(b,p)&&(M[p]=b[p]);return z(b,"toString")&&(M.toString=b.toString),z(b,"valueOf")&&(M.valueOf=b.valueOf),M}function a(M,b,p,e){return Tb(M,b,p,e,!0).utc()}function s(M){return null==M._pf&&(M._pf={empty:!1,unusedTokens:[],unusedInput:[],overflow:-2,charsLeftOver:0,nullInput:!1,invalidEra:null,invalidMonth:null,invalidFormat:!1,userInvalidated:!1,iso:!1,parsedDateParts:[],era:null,meridiem:null,rfc2822:!1,weekdayMismatch:!1}),M._pf}function A(M){var p=null,e=!1,o=M._d&&!isNaN(M._d.getTime());return o&&(p=s(M),e=b.call(p.parsedDateParts,function(M){return null!=M}),o=p.overflow<0&&!p.empty&&!p.invalidEra&&!p.invalidMonth&&!p.invalidWeekday&&!p.weekdayMismatch&&!p.nullInput&&!p.invalidFormat&&!p.userInvalidated&&(!p.meridiem||p.meridiem&&e),M._strict&&(o=o&&0===p.charsLeftOver&&0===p.unusedTokens.length&&void 0===p.bigHour)),null!=Object.isFrozen&&Object.isFrozen(M)?o:(M._isValid=o,M._isValid)}function d(M){var b=a(NaN);return null!=M?r(s(b),M):s(b).userInvalidated=!0,b}b=Array.prototype.some?Array.prototype.some:function(M){var b,p=Object(this),e=p.length>>>0;for(b=0;b<e;b++)if(b in p&&M.call(this,p[b],b,p))return!0;return!1};var l=p.momentProperties=[],q=!1;function u(M,b){var p,e,o,z=l.length;if(c(b._isAMomentObject)||(M._isAMomentObject=b._isAMomentObject),c(b._i)||(M._i=b._i),c(b._f)||(M._f=b._f),c(b._l)||(M._l=b._l),c(b._strict)||(M._strict=b._strict),c(b._tzm)||(M._tzm=b._tzm),c(b._isUTC)||(M._isUTC=b._isUTC),c(b._offset)||(M._offset=b._offset),c(b._pf)||(M._pf=s(b)),c(b._locale)||(M._locale=b._locale),z>0)for(p=0;p<z;p++)c(o=b[e=l[p]])||(M[e]=o);return M}function f(M){u(this,M),this._d=new Date(null!=M._d?M._d.getTime():NaN),this.isValid()||(this._d=new Date(NaN)),!1===q&&(q=!0,p.updateOffset(this),q=!1)}function W(M){return M instanceof f||null!=M&&null!=M._isAMomentObject}function h(M){!1===p.suppressDeprecationWarnings&&"undefined"!=typeof console&&console.warn&&console.warn("Deprecation warning: "+M)}function R(M,b){var e=!0;return r(function(){if(null!=p.deprecationHandler&&p.deprecationHandler(null,M),e){var o,t,c,n=[],O=arguments.length;for(t=0;t<O;t++){if(o="","object"==typeof arguments[t]){for(c in o+="\n["+t+"] ",arguments[0])z(arguments[0],c)&&(o+=c+": "+arguments[0][c]+", ");o=o.slice(0,-2)}else o=arguments[t];n.push(o)}h(M+"\nArguments: "+Array.prototype.slice.call(n).join("")+"\n"+(new Error).stack),e=!1}return b.apply(this,arguments)},b)}var m,g={};function L(M,b){null!=p.deprecationHandler&&p.deprecationHandler(M,b),g[M]||(h(b),g[M]=!0)}function v(M){return"undefined"!=typeof Function&&M instanceof Function||"[object Function]"===Object.prototype.toString.call(M)}function N(M,b){var p,e=r({},M);for(p in b)z(b,p)&&(o(M[p])&&o(b[p])?(e[p]={},r(e[p],M[p]),r(e[p],b[p])):null!=b[p]?e[p]=b[p]:delete e[p]);for(p in M)z(M,p)&&!z(b,p)&&o(M[p])&&(e[p]=r({},e[p]));return e}function y(M){null!=M&&this.set(M)}p.suppressDeprecationWarnings=!1,p.deprecationHandler=null,m=Object.keys?Object.keys:function(M){var b,p=[];for(b in M)z(M,b)&&p.push(b);return p};function B(M,b,p){var e=""+Math.abs(M),o=b-e.length;return(M>=0?p?"+":"":"-")+Math.pow(10,Math.max(0,o)).toString().substr(1)+e}var X=/(\[[^\[]*\])|(\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,w=/(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g,x={},T={};function _(M,b,p,e){var o=e;"string"==typeof e&&(o=function(){return this[e]()}),M&&(T[M]=o),b&&(T[b[0]]=function(){return B(o.apply(this,arguments),b[1],b[2])}),p&&(T[p]=function(){return this.localeData().ordinal(o.apply(this,arguments),M)})}function k(M){return M.match(/\[[\s\S]/)?M.replace(/^\[|\]$/g,""):M.replace(/\\/g,"")}function S(M,b){return M.isValid()?(b=C(b,M.localeData()),x[b]=x[b]||function(M){var b,p,e=M.match(X);for(b=0,p=e.length;b<p;b++)T[e[b]]?e[b]=T[e[b]]:e[b]=k(e[b]);return function(b){var o,z="";for(o=0;o<p;o++)z+=v(e[o])?e[o].call(b,M):e[o];return z}}(b),x[b](M)):M.localeData().invalidDate()}function C(M,b){var p=5;function e(M){return b.longDateFormat(M)||M}for(w.lastIndex=0;p>=0&&w.test(M);)M=M.replace(w,e),w.lastIndex=0,p-=1;return M}var E={D:"date",dates:"date",date:"date",d:"day",days:"day",day:"day",e:"weekday",weekdays:"weekday",weekday:"weekday",E:"isoWeekday",isoweekdays:"isoWeekday",isoweekday:"isoWeekday",DDD:"dayOfYear",dayofyears:"dayOfYear",dayofyear:"dayOfYear",h:"hour",hours:"hour",hour:"hour",ms:"millisecond",milliseconds:"millisecond",millisecond:"millisecond",m:"minute",minutes:"minute",minute:"minute",M:"month",months:"month",month:"month",Q:"quarter",quarters:"quarter",quarter:"quarter",s:"second",seconds:"second",second:"second",gg:"weekYear",weekyears:"weekYear",weekyear:"weekYear",GG:"isoWeekYear",isoweekyears:"isoWeekYear",isoweekyear:"isoWeekYear",w:"week",weeks:"week",week:"week",W:"isoWeek",isoweeks:"isoWeek",isoweek:"isoWeek",y:"year",years:"year",year:"year"};function D(M){return"string"==typeof M?E[M]||E[M.toLowerCase()]:void 0}function P(M){var b,p,e={};for(p in M)z(M,p)&&(b=D(p))&&(e[b]=M[p]);return e}var I={date:9,day:11,weekday:11,isoWeekday:11,dayOfYear:4,hour:13,millisecond:16,minute:14,month:8,quarter:7,second:15,weekYear:1,isoWeekYear:1,week:5,isoWeek:5,year:1};var F,j=/\d/,H=/\d\d/,U=/\d{3}/,Y=/\d{4}/,G=/[+-]?\d{6}/,V=/\d\d?/,$=/\d\d\d\d?/,K=/\d\d\d\d\d\d?/,Q=/\d{1,3}/,J=/\d{1,4}/,Z=/[+-]?\d{1,6}/,MM=/\d+/,bM=/[+-]?\d+/,pM=/Z|[+-]\d\d:?\d\d/gi,eM=/Z|[+-]\d\d(?::?\d\d)?/gi,oM=/[0-9]{0,256}['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFF07\uFF10-\uFFEF]{1,256}|[\u0600-\u06FF\/]{1,256}(\s*?[\u0600-\u06FF]{1,256}){1,2}/i,zM=/^[1-9]\d?/,tM=/^([1-9]\d|\d)/;function cM(M,b,p){F[M]=v(b)?b:function(M,e){return M&&p?p:b}}function nM(M,b){return z(F,M)?F[M](b._strict,b._locale):new RegExp(OM(M.replace("\\","").replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g,function(M,b,p,e,o){return b||p||e||o})))}function OM(M){return M.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")}function iM(M){return M<0?Math.ceil(M)||0:Math.floor(M)}function rM(M){var b=+M,p=0;return 0!==b&&isFinite(b)&&(p=iM(b)),p}F={};var aM={};function sM(M,b){var p,e,o=b;for("string"==typeof M&&(M=[M]),n(b)&&(o=function(M,p){p[b]=rM(M)}),e=M.length,p=0;p<e;p++)aM[M[p]]=o}function AM(M,b){sM(M,function(M,p,e,o){e._w=e._w||{},b(M,e._w,e,o)})}function dM(M,b,p){null!=b&&z(aM,M)&&aM[M](b,p._a,p,M)}function lM(M){return M%4==0&&M%100!=0||M%400==0}var qM=0,uM=1,fM=2,WM=3,hM=4,RM=5,mM=6,gM=7,LM=8;function vM(M){return lM(M)?366:365}_("Y",0,0,function(){var M=this.year();return M<=9999?B(M,4):"+"+M}),_(0,["YY",2],0,function(){return this.year()%100}),_(0,["YYYY",4],0,"year"),_(0,["YYYYY",5],0,"year"),_(0,["YYYYYY",6,!0],0,"year"),cM("Y",bM),cM("YY",V,H),cM("YYYY",J,Y),cM("YYYYY",Z,G),cM("YYYYYY",Z,G),sM(["YYYYY","YYYYYY"],qM),sM("YYYY",function(M,b){b[qM]=2===M.length?p.parseTwoDigitYear(M):rM(M)}),sM("YY",function(M,b){b[qM]=p.parseTwoDigitYear(M)}),sM("Y",function(M,b){b[qM]=parseInt(M,10)}),p.parseTwoDigitYear=function(M){return rM(M)+(rM(M)>68?1900:2e3)};var NM,yM=BM("FullYear",!0);function BM(M,b){return function(e){return null!=e?(wM(this,M,e),p.updateOffset(this,b),this):XM(this,M)}}function XM(M,b){if(!M.isValid())return NaN;var p=M._d,e=M._isUTC;switch(b){case"Milliseconds":return e?p.getUTCMilliseconds():p.getMilliseconds();case"Seconds":return e?p.getUTCSeconds():p.getSeconds();case"Minutes":return e?p.getUTCMinutes():p.getMinutes();case"Hours":return e?p.getUTCHours():p.getHours();case"Date":return e?p.getUTCDate():p.getDate();case"Day":return e?p.getUTCDay():p.getDay();case"Month":return e?p.getUTCMonth():p.getMonth();case"FullYear":return e?p.getUTCFullYear():p.getFullYear();default:return NaN}}function wM(M,b,p){var e,o,z,t,c;if(M.isValid()&&!isNaN(p)){switch(e=M._d,o=M._isUTC,b){case"Milliseconds":return void(o?e.setUTCMilliseconds(p):e.setMilliseconds(p));case"Seconds":return void(o?e.setUTCSeconds(p):e.setSeconds(p));case"Minutes":return void(o?e.setUTCMinutes(p):e.setMinutes(p));case"Hours":return void(o?e.setUTCHours(p):e.setHours(p));case"Date":return void(o?e.setUTCDate(p):e.setDate(p));case"FullYear":break;default:return}z=p,t=M.month(),c=29!==(c=M.date())||1!==t||lM(z)?c:28,o?e.setUTCFullYear(z,t,c):e.setFullYear(z,t,c)}}function xM(M,b){if(isNaN(M)||isNaN(b))return NaN;var p,e=(b%(p=12)+p)%p;return M+=(b-e)/12,1===e?lM(M)?29:28:31-e%7%2}NM=Array.prototype.indexOf?Array.prototype.indexOf:function(M){var b;for(b=0;b<this.length;++b)if(this[b]===M)return b;return-1},_("M",["MM",2],"Mo",function(){return this.month()+1}),_("MMM",0,0,function(M){return this.localeData().monthsShort(this,M)}),_("MMMM",0,0,function(M){return this.localeData().months(this,M)}),cM("M",V,zM),cM("MM",V,H),cM("MMM",function(M,b){return b.monthsShortRegex(M)}),cM("MMMM",function(M,b){return b.monthsRegex(M)}),sM(["M","MM"],function(M,b){b[uM]=rM(M)-1}),sM(["MMM","MMMM"],function(M,b,p,e){var o=p._locale.monthsParse(M,e,p._strict);null!=o?b[uM]=o:s(p).invalidMonth=M});var TM="January_February_March_April_May_June_July_August_September_October_November_December".split("_"),_M="Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec".split("_"),kM=/D[oD]?(\[[^\[\]]*\]|\s)+MMMM?/,SM=oM,CM=oM;function EM(M,b,p){var e,o,z,t=M.toLocaleLowerCase();if(!this._monthsParse)for(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[],e=0;e<12;++e)z=a([2e3,e]),this._shortMonthsParse[e]=this.monthsShort(z,"").toLocaleLowerCase(),this._longMonthsParse[e]=this.months(z,"").toLocaleLowerCase();return p?"MMM"===b?-1!==(o=NM.call(this._shortMonthsParse,t))?o:null:-1!==(o=NM.call(this._longMonthsParse,t))?o:null:"MMM"===b?-1!==(o=NM.call(this._shortMonthsParse,t))||-1!==(o=NM.call(this._longMonthsParse,t))?o:null:-1!==(o=NM.call(this._longMonthsParse,t))||-1!==(o=NM.call(this._shortMonthsParse,t))?o:null}function DM(M,b){if(!M.isValid())return M;if("string"==typeof b)if(/^\d+$/.test(b))b=rM(b);else if(!n(b=M.localeData().monthsParse(b)))return M;var p=b,e=M.date();return e=e<29?e:Math.min(e,xM(M.year(),p)),M._isUTC?M._d.setUTCMonth(p,e):M._d.setMonth(p,e),M}function PM(M){return null!=M?(DM(this,M),p.updateOffset(this,!0),this):XM(this,"Month")}function IM(){function M(M,b){return b.length-M.length}var b,p,e,o,z=[],t=[],c=[];for(b=0;b<12;b++)p=a([2e3,b]),e=OM(this.monthsShort(p,"")),o=OM(this.months(p,"")),z.push(e),t.push(o),c.push(o),c.push(e);z.sort(M),t.sort(M),c.sort(M),this._monthsRegex=new RegExp("^("+c.join("|")+")","i"),this._monthsShortRegex=this._monthsRegex,this._monthsStrictRegex=new RegExp("^("+t.join("|")+")","i"),this._monthsShortStrictRegex=new RegExp("^("+z.join("|")+")","i")}function FM(M,b,p,e,o,z,t){var c;return M<100&&M>=0?(c=new Date(M+400,b,p,e,o,z,t),isFinite(c.getFullYear())&&c.setFullYear(M)):c=new Date(M,b,p,e,o,z,t),c}function jM(M){var b,p;return M<100&&M>=0?((p=Array.prototype.slice.call(arguments))[0]=M+400,b=new Date(Date.UTC.apply(null,p)),isFinite(b.getUTCFullYear())&&b.setUTCFullYear(M)):b=new Date(Date.UTC.apply(null,arguments)),b}function HM(M,b,p){var e=7+b-p;return-((7+jM(M,0,e).getUTCDay()-b)%7)+e-1}function UM(M,b,p,e,o){var z,t,c=1+7*(b-1)+(7+p-e)%7+HM(M,e,o);return c<=0?t=vM(z=M-1)+c:c>vM(M)?(z=M+1,t=c-vM(M)):(z=M,t=c),{year:z,dayOfYear:t}}function YM(M,b,p){var e,o,z=HM(M.year(),b,p),t=Math.floor((M.dayOfYear()-z-1)/7)+1;return t<1?e=t+GM(o=M.year()-1,b,p):t>GM(M.year(),b,p)?(e=t-GM(M.year(),b,p),o=M.year()+1):(o=M.year(),e=t),{week:e,year:o}}function GM(M,b,p){var e=HM(M,b,p),o=HM(M+1,b,p);return(vM(M)-e+o)/7}_("w",["ww",2],"wo","week"),_("W",["WW",2],"Wo","isoWeek"),cM("w",V,zM),cM("ww",V,H),cM("W",V,zM),cM("WW",V,H),AM(["w","ww","W","WW"],function(M,b,p,e){b[e.substr(0,1)]=rM(M)});function VM(M,b){return M.slice(b,7).concat(M.slice(0,b))}_("d",0,"do","day"),_("dd",0,0,function(M){return this.localeData().weekdaysMin(this,M)}),_("ddd",0,0,function(M){return this.localeData().weekdaysShort(this,M)}),_("dddd",0,0,function(M){return this.localeData().weekdays(this,M)}),_("e",0,0,"weekday"),_("E",0,0,"isoWeekday"),cM("d",V),cM("e",V),cM("E",V),cM("dd",function(M,b){return b.weekdaysMinRegex(M)}),cM("ddd",function(M,b){return b.weekdaysShortRegex(M)}),cM("dddd",function(M,b){return b.weekdaysRegex(M)}),AM(["dd","ddd","dddd"],function(M,b,p,e){var o=p._locale.weekdaysParse(M,e,p._strict);null!=o?b.d=o:s(p).invalidWeekday=M}),AM(["d","e","E"],function(M,b,p,e){b[e]=rM(M)});var $M="Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),KM="Sun_Mon_Tue_Wed_Thu_Fri_Sat".split("_"),QM="Su_Mo_Tu_We_Th_Fr_Sa".split("_"),JM=oM,ZM=oM,Mb=oM;function bb(M,b,p){var e,o,z,t=M.toLocaleLowerCase();if(!this._weekdaysParse)for(this._weekdaysParse=[],this._shortWeekdaysParse=[],this._minWeekdaysParse=[],e=0;e<7;++e)z=a([2e3,1]).day(e),this._minWeekdaysParse[e]=this.weekdaysMin(z,"").toLocaleLowerCase(),this._shortWeekdaysParse[e]=this.weekdaysShort(z,"").toLocaleLowerCase(),this._weekdaysParse[e]=this.weekdays(z,"").toLocaleLowerCase();return p?"dddd"===b?-1!==(o=NM.call(this._weekdaysParse,t))?o:null:"ddd"===b?-1!==(o=NM.call(this._shortWeekdaysParse,t))?o:null:-1!==(o=NM.call(this._minWeekdaysParse,t))?o:null:"dddd"===b?-1!==(o=NM.call(this._weekdaysParse,t))||-1!==(o=NM.call(this._shortWeekdaysParse,t))||-1!==(o=NM.call(this._minWeekdaysParse,t))?o:null:"ddd"===b?-1!==(o=NM.call(this._shortWeekdaysParse,t))||-1!==(o=NM.call(this._weekdaysParse,t))||-1!==(o=NM.call(this._minWeekdaysParse,t))?o:null:-1!==(o=NM.call(this._minWeekdaysParse,t))||-1!==(o=NM.call(this._weekdaysParse,t))||-1!==(o=NM.call(this._shortWeekdaysParse,t))?o:null}function pb(){function M(M,b){return b.length-M.length}var b,p,e,o,z,t=[],c=[],n=[],O=[];for(b=0;b<7;b++)p=a([2e3,1]).day(b),e=OM(this.weekdaysMin(p,"")),o=OM(this.weekdaysShort(p,"")),z=OM(this.weekdays(p,"")),t.push(e),c.push(o),n.push(z),O.push(e),O.push(o),O.push(z);t.sort(M),c.sort(M),n.sort(M),O.sort(M),this._weekdaysRegex=new RegExp("^("+O.join("|")+")","i"),this._weekdaysShortRegex=this._weekdaysRegex,this._weekdaysMinRegex=this._weekdaysRegex,this._weekdaysStrictRegex=new RegExp("^("+n.join("|")+")","i"),this._weekdaysShortStrictRegex=new RegExp("^("+c.join("|")+")","i"),this._weekdaysMinStrictRegex=new RegExp("^("+t.join("|")+")","i")}function eb(){return this.hours()%12||12}function ob(M,b){_(M,0,0,function(){return this.localeData().meridiem(this.hours(),this.minutes(),b)})}function zb(M,b){return b._meridiemParse}_("H",["HH",2],0,"hour"),_("h",["hh",2],0,eb),_("k",["kk",2],0,function(){return this.hours()||24}),_("hmm",0,0,function(){return""+eb.apply(this)+B(this.minutes(),2)}),_("hmmss",0,0,function(){return""+eb.apply(this)+B(this.minutes(),2)+B(this.seconds(),2)}),_("Hmm",0,0,function(){return""+this.hours()+B(this.minutes(),2)}),_("Hmmss",0,0,function(){return""+this.hours()+B(this.minutes(),2)+B(this.seconds(),2)}),ob("a",!0),ob("A",!1),cM("a",zb),cM("A",zb),cM("H",V,tM),cM("h",V,zM),cM("k",V,zM),cM("HH",V,H),cM("hh",V,H),cM("kk",V,H),cM("hmm",$),cM("hmmss",K),cM("Hmm",$),cM("Hmmss",K),sM(["H","HH"],WM),sM(["k","kk"],function(M,b,p){var e=rM(M);b[WM]=24===e?0:e}),sM(["a","A"],function(M,b,p){p._isPm=p._locale.isPM(M),p._meridiem=M}),sM(["h","hh"],function(M,b,p){b[WM]=rM(M),s(p).bigHour=!0}),sM("hmm",function(M,b,p){var e=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e)),s(p).bigHour=!0}),sM("hmmss",function(M,b,p){var e=M.length-4,o=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e,2)),b[RM]=rM(M.substr(o)),s(p).bigHour=!0}),sM("Hmm",function(M,b,p){var e=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e))}),sM("Hmmss",function(M,b,p){var e=M.length-4,o=M.length-2;b[WM]=rM(M.substr(0,e)),b[hM]=rM(M.substr(e,2)),b[RM]=rM(M.substr(o))});var tb=BM("Hours",!0);var cb,nb={calendar:{sameDay:"[Today at] LT",nextDay:"[Tomorrow at] LT",nextWeek:"dddd [at] LT",lastDay:"[Yesterday at] LT",lastWeek:"[Last] dddd [at] LT",sameElse:"L"},longDateFormat:{LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},invalidDate:"Invalid date",ordinal:"%d",dayOfMonthOrdinalParse:/\d{1,2}/,relativeTime:{future:"in %s",past:"%s ago",s:"a few seconds",ss:"%d seconds",m:"a minute",mm:"%d minutes",h:"an hour",hh:"%d hours",d:"a day",dd:"%d days",w:"a week",ww:"%d weeks",M:"a month",MM:"%d months",y:"a year",yy:"%d years"},months:TM,monthsShort:_M,week:{dow:0,doy:6},weekdays:$M,weekdaysMin:QM,weekdaysShort:KM,meridiemParse:/[ap]\.?m?\.?/i},Ob={},ib={};function rb(M,b){var p,e=Math.min(M.length,b.length);for(p=0;p<e;p+=1)if(M[p]!==b[p])return p;return e}function ab(M){return M?M.toLowerCase().replace("_","-"):M}function sb(M){var b=null;if(void 0===Ob[M]&&"undefined"!=typeof module&&module&&module.exports&&function(M){return!(!M||!M.match("^[^/\\\\]*$"))}(M))try{b=cb._abbr,require("./locale/"+M),Ab(b)}catch(b){Ob[M]=null}return Ob[M]}function Ab(M,b){var p;return M&&((p=c(b)?lb(M):db(M,b))?cb=p:"undefined"!=typeof console&&console.warn&&console.warn("Locale "+M+" not found. Did you forget to load it?")),cb._abbr}function db(M,b){if(null!==b){var p,e=nb;if(b.abbr=M,null!=Ob[M])L("defineLocaleOverride","use moment.updateLocale(localeName, config) to change an existing locale. moment.defineLocale(localeName, config) should only be used for creating a new locale See http://momentjs.com/guides/#/warnings/define-locale/ for more info."),e=Ob[M]._config;else if(null!=b.parentLocale)if(null!=Ob[b.parentLocale])e=Ob[b.parentLocale]._config;else{if(null==(p=sb(b.parentLocale)))return ib[b.parentLocale]||(ib[b.parentLocale]=[]),ib[b.parentLocale].push({name:M,config:b}),null;e=p._config}return Ob[M]=new y(N(e,b)),ib[M]&&ib[M].forEach(function(M){db(M.name,M.config)}),Ab(M),Ob[M]}return delete Ob[M],null}function lb(M){var b;if(M&&M._locale&&M._locale._abbr&&(M=M._locale._abbr),!M)return cb;if(!e(M)){if(b=sb(M))return b;M=[M]}return function(M){for(var b,p,e,o,z=0;z<M.length;){for(b=(o=ab(M[z]).split("-")).length,p=(p=ab(M[z+1]))?p.split("-"):null;b>0;){if(e=sb(o.slice(0,b).join("-")))return e;if(p&&p.length>=b&&rb(o,p)>=b-1)break;b--}z++}return cb}(M)}function qb(M){var b,p=M._a;return p&&-2===s(M).overflow&&(b=p[uM]<0||p[uM]>11?uM:p[fM]<1||p[fM]>xM(p[qM],p[uM])?fM:p[WM]<0||p[WM]>24||24===p[WM]&&(0!==p[hM]||0!==p[RM]||0!==p[mM])?WM:p[hM]<0||p[hM]>59?hM:p[RM]<0||p[RM]>59?RM:p[mM]<0||p[mM]>999?mM:-1,s(M)._overflowDayOfYear&&(b<qM||b>fM)&&(b=fM),s(M)._overflowWeeks&&-1===b&&(b=gM),s(M)._overflowWeekday&&-1===b&&(b=LM),s(M).overflow=b),M}var ub=/^\s*((?:[+-]\d{6}|\d{4})-(?:\d\d-\d\d|W\d\d-\d|W\d\d|\d\d\d|\d\d))(?:(T| )(\d\d(?::\d\d(?::\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,fb=/^\s*((?:[+-]\d{6}|\d{4})(?:\d\d\d\d|W\d\d\d|W\d\d|\d\d\d|\d\d|))(?:(T| )(\d\d(?:\d\d(?:\d\d(?:[.,]\d+)?)?)?)([+-]\d\d(?::?\d\d)?|\s*Z)?)?$/,Wb=/Z|[+-]\d\d(?::?\d\d)?/,hb=[["YYYYYY-MM-DD",/[+-]\d{6}-\d\d-\d\d/],["YYYY-MM-DD",/\d{4}-\d\d-\d\d/],["GGGG-[W]WW-E",/\d{4}-W\d\d-\d/],["GGGG-[W]WW",/\d{4}-W\d\d/,!1],["YYYY-DDD",/\d{4}-\d{3}/],["YYYY-MM",/\d{4}-\d\d/,!1],["YYYYYYMMDD",/[+-]\d{10}/],["YYYYMMDD",/\d{8}/],["GGGG[W]WWE",/\d{4}W\d{3}/],["GGGG[W]WW",/\d{4}W\d{2}/,!1],["YYYYDDD",/\d{7}/],["YYYYMM",/\d{6}/,!1],["YYYY",/\d{4}/,!1]],Rb=[["HH:mm:ss.SSSS",/\d\d:\d\d:\d\d\.\d+/],["HH:mm:ss,SSSS",/\d\d:\d\d:\d\d,\d+/],["HH:mm:ss",/\d\d:\d\d:\d\d/],["HH:mm",/\d\d:\d\d/],["HHmmss.SSSS",/\d\d\d\d\d\d\.\d+/],["HHmmss,SSSS",/\d\d\d\d\d\d,\d+/],["HHmmss",/\d\d\d\d\d\d/],["HHmm",/\d\d\d\d/],["HH",/\d\d/]],mb=/^\/?Date\((-?\d+)/i,gb=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\d{4}))$/,Lb={UT:0,GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function vb(M){var b,p,e,o,z,t,c=M._i,n=ub.exec(c)||fb.exec(c),O=hb.length,i=Rb.length;if(n){for(s(M).iso=!0,b=0,p=O;b<p;b++)if(hb[b][1].exec(n[1])){o=hb[b][0],e=!1!==hb[b][2];break}if(null==o)return void(M._isValid=!1);if(n[3]){for(b=0,p=i;b<p;b++)if(Rb[b][1].exec(n[3])){z=(n[2]||" ")+Rb[b][0];break}if(null==z)return void(M._isValid=!1)}if(!e&&null!=z)return void(M._isValid=!1);if(n[4]){if(!Wb.exec(n[4]))return void(M._isValid=!1);t="Z"}M._f=o+(z||"")+(t||""),wb(M)}else M._isValid=!1}function Nb(M){var b=parseInt(M,10);return b<=49?2e3+b:b<=999?1900+b:b}function yb(M){var b,p,e,o,z,t,c,n,O=gb.exec(M._i.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").replace(/^\s\s*/,"").replace(/\s\s*$/,""));if(O){if(p=O[4],e=O[3],o=O[2],z=O[5],t=O[6],c=O[7],n=[Nb(p),_M.indexOf(e),parseInt(o,10),parseInt(z,10),parseInt(t,10)],c&&n.push(parseInt(c,10)),b=n,!function(M,b,p){return!M||KM.indexOf(M)===new Date(b[0],b[1],b[2]).getDay()||(s(p).weekdayMismatch=!0,p._isValid=!1,!1)}(O[1],b,M))return;M._a=b,M._tzm=function(M,b,p){if(M)return Lb[M];if(b)return 0;var e=parseInt(p,10),o=e%100;return(e-o)/100*60+o}(O[8],O[9],O[10]),M._d=jM.apply(null,M._a),M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),s(M).rfc2822=!0}else M._isValid=!1}function Bb(M,b,p){return null!=M?M:null!=b?b:p}function Xb(M){var b,e,o,z,t,c=[];if(!M._d){for(o=function(M){var b=new Date(p.now());return M._useUTC?[b.getUTCFullYear(),b.getUTCMonth(),b.getUTCDate()]:[b.getFullYear(),b.getMonth(),b.getDate()]}(M),M._w&&null==M._a[fM]&&null==M._a[uM]&&function(M){var b,p,e,o,z,t,c,n,O;b=M._w,null!=b.GG||null!=b.W||null!=b.E?(z=1,t=4,p=Bb(b.GG,M._a[qM],YM(_b(),1,4).year),e=Bb(b.W,1),((o=Bb(b.E,1))<1||o>7)&&(n=!0)):(z=M._locale._week.dow,t=M._locale._week.doy,O=YM(_b(),z,t),p=Bb(b.gg,M._a[qM],O.year),e=Bb(b.w,O.week),null!=b.d?((o=b.d)<0||o>6)&&(n=!0):null!=b.e?(o=b.e+z,(b.e<0||b.e>6)&&(n=!0)):o=z);e<1||e>GM(p,z,t)?s(M)._overflowWeeks=!0:null!=n?s(M)._overflowWeekday=!0:(c=UM(p,e,o,z,t),M._a[qM]=c.year,M._dayOfYear=c.dayOfYear)}(M),null!=M._dayOfYear&&(t=Bb(M._a[qM],o[qM]),(M._dayOfYear>vM(t)||0===M._dayOfYear)&&(s(M)._overflowDayOfYear=!0),e=jM(t,0,M._dayOfYear),M._a[uM]=e.getUTCMonth(),M._a[fM]=e.getUTCDate()),b=0;b<3&&null==M._a[b];++b)M._a[b]=c[b]=o[b];for(;b<7;b++)M._a[b]=c[b]=null==M._a[b]?2===b?1:0:M._a[b];24===M._a[WM]&&0===M._a[hM]&&0===M._a[RM]&&0===M._a[mM]&&(M._nextDay=!0,M._a[WM]=0),M._d=(M._useUTC?jM:FM).apply(null,c),z=M._useUTC?M._d.getUTCDay():M._d.getDay(),null!=M._tzm&&M._d.setUTCMinutes(M._d.getUTCMinutes()-M._tzm),M._nextDay&&(M._a[WM]=24),M._w&&void 0!==M._w.d&&M._w.d!==z&&(s(M).weekdayMismatch=!0)}}function wb(M){if(M._f!==p.ISO_8601)if(M._f!==p.RFC_2822){M._a=[],s(M).empty=!0;var b,e,o,z,t,c,n,O=""+M._i,i=O.length,r=0;for(n=(o=C(M._f,M._locale).match(X)||[]).length,b=0;b<n;b++)z=o[b],(e=(O.match(nM(z,M))||[])[0])&&((t=O.substr(0,O.indexOf(e))).length>0&&s(M).unusedInput.push(t),O=O.slice(O.indexOf(e)+e.length),r+=e.length),T[z]?(e?s(M).empty=!1:s(M).unusedTokens.push(z),dM(z,e,M)):M._strict&&!e&&s(M).unusedTokens.push(z);s(M).charsLeftOver=i-r,O.length>0&&s(M).unusedInput.push(O),M._a[WM]<=12&&!0===s(M).bigHour&&M._a[WM]>0&&(s(M).bigHour=void 0),s(M).parsedDateParts=M._a.slice(0),s(M).meridiem=M._meridiem,M._a[WM]=function(M,b,p){var e;if(null==p)return b;return null!=M.meridiemHour?M.meridiemHour(b,p):null!=M.isPM?((e=M.isPM(p))&&b<12&&(b+=12),e||12!==b||(b=0),b):b}(M._locale,M._a[WM],M._meridiem),null!==(c=s(M).era)&&(M._a[qM]=M._locale.erasConvertYear(c,M._a[qM])),Xb(M),qb(M)}else yb(M);else vb(M)}function xb(M){var b=M._i,z=M._f;return M._locale=M._locale||lb(M._l),null===b||void 0===z&&""===b?d({nullInput:!0}):("string"==typeof b&&(M._i=b=M._locale.preparse(b)),W(b)?new f(qb(b)):(O(b)?M._d=b:e(z)?function(M){var b,p,e,o,z,t,c=!1,n=M._f.length;if(0===n)return s(M).invalidFormat=!0,void(M._d=new Date(NaN));for(o=0;o<n;o++)z=0,t=!1,b=u({},M),null!=M._useUTC&&(b._useUTC=M._useUTC),b._f=M._f[o],wb(b),A(b)&&(t=!0),z+=s(b).charsLeftOver,z+=10*s(b).unusedTokens.length,s(b).score=z,c?z<e&&(e=z,p=b):(null==e||z<e||t)&&(e=z,p=b,t&&(c=!0));r(M,p||b)}(M):z?wb(M):function(M){var b=M._i;c(b)?M._d=new Date(p.now()):O(b)?M._d=new Date(b.valueOf()):"string"==typeof b?function(M){var b=mb.exec(M._i);null===b?(vb(M),!1===M._isValid&&(delete M._isValid,yb(M),!1===M._isValid&&(delete M._isValid,M._strict?M._isValid=!1:p.createFromInputFallback(M)))):M._d=new Date(+b[1])}(M):e(b)?(M._a=i(b.slice(0),function(M){return parseInt(M,10)}),Xb(M)):o(b)?function(M){if(!M._d){var b=P(M._i),p=void 0===b.day?b.date:b.day;M._a=i([b.year,b.month,p,b.hour,b.minute,b.second,b.millisecond],function(M){return M&&parseInt(M,10)}),Xb(M)}}(M):n(b)?M._d=new Date(b):p.createFromInputFallback(M)}(M),A(M)||(M._d=null),M))}function Tb(M,b,p,z,c){var n,O={};return!0!==b&&!1!==b||(z=b,b=void 0),!0!==p&&!1!==p||(z=p,p=void 0),(o(M)&&t(M)||e(M)&&0===M.length)&&(M=void 0),O._isAMomentObject=!0,O._useUTC=O._isUTC=c,O._l=p,O._i=M,O._f=b,O._strict=z,(n=new f(qb(xb(O))))._nextDay&&(n.add(1,"d"),n._nextDay=void 0),n}function _b(M,b,p,e){return Tb(M,b,p,e,!1)}p.createFromInputFallback=R("value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.",function(M){M._d=new Date(M._i+(M._useUTC?" UTC":""))}),p.ISO_8601=function(){},p.RFC_2822=function(){};var kb=R("moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var M=_b.apply(null,arguments);return this.isValid()&&M.isValid()?M<this?this:M:d()}),Sb=R("moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/",function(){var M=_b.apply(null,arguments);return this.isValid()&&M.isValid()?M>this?this:M:d()});function Cb(M,b){var p,o;if(1===b.length&&e(b[0])&&(b=b[0]),!b.length)return _b();for(p=b[0],o=1;o<b.length;++o)b[o].isValid()&&!b[o][M](p)||(p=b[o]);return p}var Eb=["year","quarter","month","week","day","hour","minute","second","millisecond"];function Db(M){var b=P(M),p=b.year||0,e=b.quarter||0,o=b.month||0,t=b.week||b.isoWeek||0,c=b.day||0,n=b.hour||0,O=b.minute||0,i=b.second||0,r=b.millisecond||0;this._isValid=function(M){var b,p,e=!1,o=Eb.length;for(b in M)if(z(M,b)&&(-1===NM.call(Eb,b)||null!=M[b]&&isNaN(M[b])))return!1;for(p=0;p<o;++p)if(M[Eb[p]]){if(e)return!1;parseFloat(M[Eb[p]])!==rM(M[Eb[p]])&&(e=!0)}return!0}(b),this._milliseconds=+r+1e3*i+6e4*O+1e3*n*60*60,this._days=+c+7*t,this._months=+o+3*e+12*p,this._data={},this._locale=lb(),this._bubble()}function Pb(M){return M instanceof Db}function Ib(M){return M<0?-1*Math.round(-1*M):Math.round(M)}function Fb(M,b){_(M,0,0,function(){var M=this.utcOffset(),p="+";return M<0&&(M=-M,p="-"),p+B(~~(M/60),2)+b+B(~~M%60,2)})}Fb("Z",":"),Fb("ZZ",""),cM("Z",eM),cM("ZZ",eM),sM(["Z","ZZ"],function(M,b,p){p._useUTC=!0,p._tzm=Hb(eM,M)});var jb=/([\+\-]|\d\d)/gi;function Hb(M,b){var p,e,o=(b||"").match(M);return null===o?null:0===(e=60*(p=((o[o.length-1]||[])+"").match(jb)||["-",0,0])[1]+rM(p[2]))?0:"+"===p[0]?e:-e}function Ub(M,b){var e,o;return b._isUTC?(e=b.clone(),o=(W(M)||O(M)?M.valueOf():_b(M).valueOf())-e.valueOf(),e._d.setTime(e._d.valueOf()+o),p.updateOffset(e,!1),e):_b(M).local()}function Yb(M){return-Math.round(M._d.getTimezoneOffset())}function Gb(){return!!this.isValid()&&(this._isUTC&&0===this._offset)}p.updateOffset=function(){};var Vb=/^(-|\+)?(?:(\d*)[. ])?(\d+):(\d+)(?::(\d+)(\.\d*)?)?$/,$b=/^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;function Kb(M,b){var p,e,o,t=M,c=null;return Pb(M)?t={ms:M._milliseconds,d:M._days,M:M._months}:n(M)||!isNaN(+M)?(t={},b?t[b]=+M:t.milliseconds=+M):(c=Vb.exec(M))?(p="-"===c[1]?-1:1,t={y:0,d:rM(c[fM])*p,h:rM(c[WM])*p,m:rM(c[hM])*p,s:rM(c[RM])*p,ms:rM(Ib(1e3*c[mM]))*p}):(c=$b.exec(M))?(p="-"===c[1]?-1:1,t={y:Qb(c[2],p),M:Qb(c[3],p),w:Qb(c[4],p),d:Qb(c[5],p),h:Qb(c[6],p),m:Qb(c[7],p),s:Qb(c[8],p)}):null==t?t={}:"object"==typeof t&&("from"in t||"to"in t)&&(o=function(M,b){var p;if(!M.isValid()||!b.isValid())return{milliseconds:0,months:0};b=Ub(b,M),M.isBefore(b)?p=Jb(M,b):((p=Jb(b,M)).milliseconds=-p.milliseconds,p.months=-p.months);return p}(_b(t.from),_b(t.to)),(t={}).ms=o.milliseconds,t.M=o.months),e=new Db(t),Pb(M)&&z(M,"_locale")&&(e._locale=M._locale),Pb(M)&&z(M,"_isValid")&&(e._isValid=M._isValid),e}function Qb(M,b){var p=M&&parseFloat(M.replace(",","."));return(isNaN(p)?0:p)*b}function Jb(M,b){var p={};return p.months=b.month()-M.month()+12*(b.year()-M.year()),M.clone().add(p.months,"M").isAfter(b)&&--p.months,p.milliseconds=+b-+M.clone().add(p.months,"M"),p}function Zb(M,b){return function(p,e){var o;return null===e||isNaN(+e)||(L(b,"moment()."+b+"(period, number) is deprecated. Please use moment()."+b+"(number, period). See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info."),o=p,p=e,e=o),Mp(this,Kb(p,e),M),this}}function Mp(M,b,e,o){var z=b._milliseconds,t=Ib(b._days),c=Ib(b._months);M.isValid()&&(o=null==o||o,c&&DM(M,XM(M,"Month")+c*e),t&&wM(M,"Date",XM(M,"Date")+t*e),z&&M._d.setTime(M._d.valueOf()+z*e),o&&p.updateOffset(M,t||c))}Kb.fn=Db.prototype,Kb.invalid=function(){return Kb(NaN)};var bp=Zb(1,"add"),pp=Zb(-1,"subtract");function ep(M){return"string"==typeof M||M instanceof String}function op(M){return W(M)||O(M)||ep(M)||n(M)||function(M){var b=e(M),p=!1;b&&(p=0===M.filter(function(b){return!n(b)&&ep(M)}).length);return b&&p}(M)||function(M){var b,p,e=o(M)&&!t(M),c=!1,n=["years","year","y","months","month","M","days","day","d","dates","date","D","hours","hour","h","minutes","minute","m","seconds","second","s","milliseconds","millisecond","ms"],O=n.length;for(b=0;b<O;b+=1)p=n[b],c=c||z(M,p);return e&&c}(M)||null==M}function zp(M,b){if(M.date()<b.date())return-zp(b,M);var p=12*(b.year()-M.year())+(b.month()-M.month()),e=M.clone().add(p,"months");return-(p+(b-e<0?(b-e)/(e-M.clone().add(p-1,"months")):(b-e)/(M.clone().add(p+1,"months")-e)))||0}function tp(M){var b;return void 0===M?this._locale._abbr:(null!=(b=lb(M))&&(this._locale=b),this)}p.defaultFormat="YYYY-MM-DDTHH:mm:ssZ",p.defaultFormatUtc="YYYY-MM-DDTHH:mm:ss[Z]";var cp=R("moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.",function(M){return void 0===M?this.localeData():this.locale(M)});function np(){return this._locale}var Op=1e3,ip=6e4,rp=36e5,ap=126227808e5;function sp(M,b){return(M%b+b)%b}function Ap(M,b,p){return M<100&&M>=0?new Date(M+400,b,p)-ap:new Date(M,b,p).valueOf()}function dp(M,b,p){return M<100&&M>=0?Date.UTC(M+400,b,p)-ap:Date.UTC(M,b,p)}function lp(M,b){return b.erasAbbrRegex(M)}function qp(){var M,b,p,e,o,z=[],t=[],c=[],n=[],O=this.eras();for(M=0,b=O.length;M<b;++M)p=OM(O[M].name),e=OM(O[M].abbr),o=OM(O[M].narrow),t.push(p),z.push(e),c.push(o),n.push(p),n.push(e),n.push(o);this._erasRegex=new RegExp("^("+n.join("|")+")","i"),this._erasNameRegex=new RegExp("^("+t.join("|")+")","i"),this._erasAbbrRegex=new RegExp("^("+z.join("|")+")","i"),this._erasNarrowRegex=new RegExp("^("+c.join("|")+")","i")}function up(M,b){_(0,[M,M.length],0,b)}function fp(M,b,p,e,o){var z;return null==M?YM(this,e,o).year:(b>(z=GM(M,e,o))&&(b=z),Wp.call(this,M,b,p,e,o))}function Wp(M,b,p,e,o){var z=UM(M,b,p,e,o),t=jM(z.year,0,z.dayOfYear);return this.year(t.getUTCFullYear()),this.month(t.getUTCMonth()),this.date(t.getUTCDate()),this}_("N",0,0,"eraAbbr"),_("NN",0,0,"eraAbbr"),_("NNN",0,0,"eraAbbr"),_("NNNN",0,0,"eraName"),_("NNNNN",0,0,"eraNarrow"),_("y",["y",1],"yo","eraYear"),_("y",["yy",2],0,"eraYear"),_("y",["yyy",3],0,"eraYear"),_("y",["yyyy",4],0,"eraYear"),cM("N",lp),cM("NN",lp),cM("NNN",lp),cM("NNNN",function(M,b){return b.erasNameRegex(M)}),cM("NNNNN",function(M,b){return b.erasNarrowRegex(M)}),sM(["N","NN","NNN","NNNN","NNNNN"],function(M,b,p,e){var o=p._locale.erasParse(M,e,p._strict);o?s(p).era=o:s(p).invalidEra=M}),cM("y",MM),cM("yy",MM),cM("yyy",MM),cM("yyyy",MM),cM("yo",function(M,b){return b._eraYearOrdinalRegex||MM}),sM(["y","yy","yyy","yyyy"],qM),sM(["yo"],function(M,b,p,e){var o;p._locale._eraYearOrdinalRegex&&(o=M.match(p._locale._eraYearOrdinalRegex)),p._locale.eraYearOrdinalParse?b[qM]=p._locale.eraYearOrdinalParse(M,o):b[qM]=parseInt(M,10)}),_(0,["gg",2],0,function(){return this.weekYear()%100}),_(0,["GG",2],0,function(){return this.isoWeekYear()%100}),up("gggg","weekYear"),up("ggggg","weekYear"),up("GGGG","isoWeekYear"),up("GGGGG","isoWeekYear"),cM("G",bM),cM("g",bM),cM("GG",V,H),cM("gg",V,H),cM("GGGG",J,Y),cM("gggg",J,Y),cM("GGGGG",Z,G),cM("ggggg",Z,G),AM(["gggg","ggggg","GGGG","GGGGG"],function(M,b,p,e){b[e.substr(0,2)]=rM(M)}),AM(["gg","GG"],function(M,b,e,o){b[o]=p.parseTwoDigitYear(M)}),_("Q",0,"Qo","quarter"),cM("Q",j),sM("Q",function(M,b){b[uM]=3*(rM(M)-1)}),_("D",["DD",2],"Do","date"),cM("D",V,zM),cM("DD",V,H),cM("Do",function(M,b){return M?b._dayOfMonthOrdinalParse||b._ordinalParse:b._dayOfMonthOrdinalParseLenient}),sM(["D","DD"],fM),sM("Do",function(M,b){b[fM]=rM(M.match(V)[0])});var hp=BM("Date",!0);_("DDD",["DDDD",3],"DDDo","dayOfYear"),cM("DDD",Q),cM("DDDD",U),sM(["DDD","DDDD"],function(M,b,p){p._dayOfYear=rM(M)}),_("m",["mm",2],0,"minute"),cM("m",V,tM),cM("mm",V,H),sM(["m","mm"],hM);var Rp=BM("Minutes",!1);_("s",["ss",2],0,"second"),cM("s",V,tM),cM("ss",V,H),sM(["s","ss"],RM);var mp,gp,Lp=BM("Seconds",!1);for(_("S",0,0,function(){return~~(this.millisecond()/100)}),_(0,["SS",2],0,function(){return~~(this.millisecond()/10)}),_(0,["SSS",3],0,"millisecond"),_(0,["SSSS",4],0,function(){return 10*this.millisecond()}),_(0,["SSSSS",5],0,function(){return 100*this.millisecond()}),_(0,["SSSSSS",6],0,function(){return 1e3*this.millisecond()}),_(0,["SSSSSSS",7],0,function(){return 1e4*this.millisecond()}),_(0,["SSSSSSSS",8],0,function(){return 1e5*this.millisecond()}),_(0,["SSSSSSSSS",9],0,function(){return 1e6*this.millisecond()}),cM("S",Q,j),cM("SS",Q,H),cM("SSS",Q,U),mp="SSSS";mp.length<=9;mp+="S")cM(mp,MM);function vp(M,b){b[mM]=rM(1e3*("0."+M))}for(mp="S";mp.length<=9;mp+="S")sM(mp,vp);gp=BM("Milliseconds",!1),_("z",0,0,"zoneAbbr"),_("zz",0,0,"zoneName");var Np=f.prototype;function yp(M){return M}Np.add=bp,Np.calendar=function(M,b){1===arguments.length&&(arguments[0]?op(arguments[0])?(M=arguments[0],b=void 0):function(M){var b,p=o(M)&&!t(M),e=!1,c=["sameDay","nextDay","lastDay","nextWeek","lastWeek","sameElse"];for(b=0;b<c.length;b+=1)e=e||z(M,c[b]);return p&&e}(arguments[0])&&(b=arguments[0],M=void 0):(M=void 0,b=void 0));var e=M||_b(),c=Ub(e,this).startOf("day"),n=p.calendarFormat(this,c)||"sameElse",O=b&&(v(b[n])?b[n].call(this,e):b[n]);return this.format(O||this.localeData().calendar(n,this,_b(e)))},Np.clone=function(){return new f(this)},Np.diff=function(M,b,p){var e,o,z;if(!this.isValid())return NaN;if(!(e=Ub(M,this)).isValid())return NaN;switch(o=6e4*(e.utcOffset()-this.utcOffset()),b=D(b)){case"year":z=zp(this,e)/12;break;case"month":z=zp(this,e);break;case"quarter":z=zp(this,e)/3;break;case"second":z=(this-e)/1e3;break;case"minute":z=(this-e)/6e4;break;case"hour":z=(this-e)/36e5;break;case"day":z=(this-e-o)/864e5;break;case"week":z=(this-e-o)/6048e5;break;default:z=this-e}return p?z:iM(z)},Np.endOf=function(M){var b,e;if(void 0===(M=D(M))||"millisecond"===M||!this.isValid())return this;switch(e=this._isUTC?dp:Ap,M){case"year":b=e(this.year()+1,0,1)-1;break;case"quarter":b=e(this.year(),this.month()-this.month()%3+3,1)-1;break;case"month":b=e(this.year(),this.month()+1,1)-1;break;case"week":b=e(this.year(),this.month(),this.date()-this.weekday()+7)-1;break;case"isoWeek":b=e(this.year(),this.month(),this.date()-(this.isoWeekday()-1)+7)-1;break;case"day":case"date":b=e(this.year(),this.month(),this.date()+1)-1;break;case"hour":b=this._d.valueOf(),b+=rp-sp(b+(this._isUTC?0:this.utcOffset()*ip),rp)-1;break;case"minute":b=this._d.valueOf(),b+=ip-sp(b,ip)-1;break;case"second":b=this._d.valueOf(),b+=Op-sp(b,Op)-1}return this._d.setTime(b),p.updateOffset(this,!0),this},Np.format=function(M){M||(M=this.isUtc()?p.defaultFormatUtc:p.defaultFormat);var b=S(this,M);return this.localeData().postformat(b)},Np.from=function(M,b){return this.isValid()&&(W(M)&&M.isValid()||_b(M).isValid())?Kb({to:this,from:M}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()},Np.fromNow=function(M){return this.from(_b(),M)},Np.to=function(M,b){return this.isValid()&&(W(M)&&M.isValid()||_b(M).isValid())?Kb({from:this,to:M}).locale(this.locale()).humanize(!b):this.localeData().invalidDate()},Np.toNow=function(M){return this.to(_b(),M)},Np.get=function(M){return v(this[M=D(M)])?this[M]():this},Np.invalidAt=function(){return s(this).overflow},Np.isAfter=function(M,b){var p=W(M)?M:_b(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(b=D(b)||"millisecond")?this.valueOf()>p.valueOf():p.valueOf()<this.clone().startOf(b).valueOf())},Np.isBefore=function(M,b){var p=W(M)?M:_b(M);return!(!this.isValid()||!p.isValid())&&("millisecond"===(b=D(b)||"millisecond")?this.valueOf()<p.valueOf():this.clone().endOf(b).valueOf()<p.valueOf())},Np.isBetween=function(M,b,p,e){var o=W(M)?M:_b(M),z=W(b)?b:_b(b);return!!(this.isValid()&&o.isValid()&&z.isValid())&&(("("===(e=e||"()")[0]?this.isAfter(o,p):!this.isBefore(o,p))&&(")"===e[1]?this.isBefore(z,p):!this.isAfter(z,p)))},Np.isSame=function(M,b){var p,e=W(M)?M:_b(M);return!(!this.isValid()||!e.isValid())&&("millisecond"===(b=D(b)||"millisecond")?this.valueOf()===e.valueOf():(p=e.valueOf(),this.clone().startOf(b).valueOf()<=p&&p<=this.clone().endOf(b).valueOf()))},Np.isSameOrAfter=function(M,b){return this.isSame(M,b)||this.isAfter(M,b)},Np.isSameOrBefore=function(M,b){return this.isSame(M,b)||this.isBefore(M,b)},Np.isValid=function(){return A(this)},Np.lang=cp,Np.locale=tp,Np.localeData=np,Np.max=Sb,Np.min=kb,Np.parsingFlags=function(){return r({},s(this))},Np.set=function(M,b){if("object"==typeof M){var p,e=function(M){var b,p=[];for(b in M)z(M,b)&&p.push({unit:b,priority:I[b]});return p.sort(function(M,b){return M.priority-b.priority}),p}(M=P(M)),o=e.length;for(p=0;p<o;p++)this[e[p].unit](M[e[p].unit])}else if(v(this[M=D(M)]))return this[M](b);return this},Np.startOf=function(M){var b,e;if(void 0===(M=D(M))||"millisecond"===M||!this.isValid())return this;switch(e=this._isUTC?dp:Ap,M){case"year":b=e(this.year(),0,1);break;case"quarter":b=e(this.year(),this.month()-this.month()%3,1);break;case"month":b=e(this.year(),this.month(),1);break;case"week":b=e(this.year(),this.month(),this.date()-this.weekday());break;case"isoWeek":b=e(this.year(),this.month(),this.date()-(this.isoWeekday()-1));break;case"day":case"date":b=e(this.year(),this.month(),this.date());break;case"hour":b=this._d.valueOf(),b-=sp(b+(this._isUTC?0:this.utcOffset()*ip),rp);break;case"minute":b=this._d.valueOf(),b-=sp(b,ip);break;case"second":b=this._d.valueOf(),b-=sp(b,Op)}return this._d.setTime(b),p.updateOffset(this,!0),this},Np.subtract=pp,Np.toArray=function(){var M=this;return[M.year(),M.month(),M.date(),M.hour(),M.minute(),M.second(),M.millisecond()]},Np.toObject=function(){var M=this;return{years:M.year(),months:M.month(),date:M.date(),hours:M.hours(),minutes:M.minutes(),seconds:M.seconds(),milliseconds:M.milliseconds()}},Np.toDate=function(){return new Date(this.valueOf())},Np.toISOString=function(M){if(!this.isValid())return null;var b=!0!==M,p=b?this.clone().utc():this;return p.year()<0||p.year()>9999?S(p,b?"YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYYYY-MM-DD[T]HH:mm:ss.SSSZ"):v(Date.prototype.toISOString)?b?this.toDate().toISOString():new Date(this.valueOf()+60*this.utcOffset()*1e3).toISOString().replace("Z",S(p,"Z")):S(p,b?"YYYY-MM-DD[T]HH:mm:ss.SSS[Z]":"YYYY-MM-DD[T]HH:mm:ss.SSSZ")},Np.inspect=function(){if(!this.isValid())return"moment.invalid(/* "+this._i+" */)";var M,b,p,e="moment",o="";return this.isLocal()||(e=0===this.utcOffset()?"moment.utc":"moment.parseZone",o="Z"),M="["+e+'("]',b=0<=this.year()&&this.year()<=9999?"YYYY":"YYYYYY",p=o+'[")]',this.format(M+b+"-MM-DD[T]HH:mm:ss.SSS"+p)},"undefined"!=typeof Symbol&&null!=Symbol.for&&(Np[Symbol.for("nodejs.util.inspect.custom")]=function(){return"Moment<"+this.format()+">"}),Np.toJSON=function(){return this.isValid()?this.toISOString():null},Np.toString=function(){return this.clone().locale("en").format("ddd MMM DD YYYY HH:mm:ss [GMT]ZZ")},Np.unix=function(){return Math.floor(this.valueOf()/1e3)},Np.valueOf=function(){return this._d.valueOf()-6e4*(this._offset||0)},Np.creationData=function(){return{input:this._i,format:this._f,locale:this._locale,isUTC:this._isUTC,strict:this._strict}},Np.eraName=function(){var M,b,p,e=this.localeData().eras();for(M=0,b=e.length;M<b;++M){if(p=this.clone().startOf("day").valueOf(),e[M].since<=p&&p<=e[M].until)return e[M].name;if(e[M].until<=p&&p<=e[M].since)return e[M].name}return""},Np.eraNarrow=function(){var M,b,p,e=this.localeData().eras();for(M=0,b=e.length;M<b;++M){if(p=this.clone().startOf("day").valueOf(),e[M].since<=p&&p<=e[M].until)return e[M].narrow;if(e[M].until<=p&&p<=e[M].since)return e[M].narrow}return""},Np.eraAbbr=function(){var M,b,p,e=this.localeData().eras();for(M=0,b=e.length;M<b;++M){if(p=this.clone().startOf("day").valueOf(),e[M].since<=p&&p<=e[M].until)return e[M].abbr;if(e[M].until<=p&&p<=e[M].since)return e[M].abbr}return""},Np.eraYear=function(){var M,b,e,o,z=this.localeData().eras();for(M=0,b=z.length;M<b;++M)if(e=z[M].since<=z[M].until?1:-1,o=this.clone().startOf("day").valueOf(),z[M].since<=o&&o<=z[M].until||z[M].until<=o&&o<=z[M].since)return(this.year()-p(z[M].since).year())*e+z[M].offset;return this.year()},Np.year=yM,Np.isLeapYear=function(){return lM(this.year())},Np.weekYear=function(M){return fp.call(this,M,this.week(),this.weekday()+this.localeData()._week.dow,this.localeData()._week.dow,this.localeData()._week.doy)},Np.isoWeekYear=function(M){return fp.call(this,M,this.isoWeek(),this.isoWeekday(),1,4)},Np.quarter=Np.quarters=function(M){return null==M?Math.ceil((this.month()+1)/3):this.month(3*(M-1)+this.month()%3)},Np.month=PM,Np.daysInMonth=function(){return xM(this.year(),this.month())},Np.week=Np.weeks=function(M){var b=this.localeData().week(this);return null==M?b:this.add(7*(M-b),"d")},Np.isoWeek=Np.isoWeeks=function(M){var b=YM(this,1,4).week;return null==M?b:this.add(7*(M-b),"d")},Np.weeksInYear=function(){var M=this.localeData()._week;return GM(this.year(),M.dow,M.doy)},Np.weeksInWeekYear=function(){var M=this.localeData()._week;return GM(this.weekYear(),M.dow,M.doy)},Np.isoWeeksInYear=function(){return GM(this.year(),1,4)},Np.isoWeeksInISOWeekYear=function(){return GM(this.isoWeekYear(),1,4)},Np.date=hp,Np.day=Np.days=function(M){if(!this.isValid())return null!=M?this:NaN;var b=XM(this,"Day");return null!=M?(M=function(M,b){return"string"!=typeof M?M:isNaN(M)?"number"==typeof(M=b.weekdaysParse(M))?M:null:parseInt(M,10)}(M,this.localeData()),this.add(M-b,"d")):b},Np.weekday=function(M){if(!this.isValid())return null!=M?this:NaN;var b=(this.day()+7-this.localeData()._week.dow)%7;return null==M?b:this.add(M-b,"d")},Np.isoWeekday=function(M){if(!this.isValid())return null!=M?this:NaN;if(null!=M){var b=function(M,b){return"string"==typeof M?b.weekdaysParse(M)%7||7:isNaN(M)?null:M}(M,this.localeData());return this.day(this.day()%7?b:b-7)}return this.day()||7},Np.dayOfYear=function(M){var b=Math.round((this.clone().startOf("day")-this.clone().startOf("year"))/864e5)+1;return null==M?b:this.add(M-b,"d")},Np.hour=Np.hours=tb,Np.minute=Np.minutes=Rp,Np.second=Np.seconds=Lp,Np.millisecond=Np.milliseconds=gp,Np.utcOffset=function(M,b,e){var o,z=this._offset||0;if(!this.isValid())return null!=M?this:NaN;if(null!=M){if("string"==typeof M){if(null===(M=Hb(eM,M)))return this}else Math.abs(M)<16&&!e&&(M*=60);return!this._isUTC&&b&&(o=Yb(this)),this._offset=M,this._isUTC=!0,null!=o&&this.add(o,"m"),z!==M&&(!b||this._changeInProgress?Mp(this,Kb(M-z,"m"),1,!1):this._changeInProgress||(this._changeInProgress=!0,p.updateOffset(this,!0),this._changeInProgress=null)),this}return this._isUTC?z:Yb(this)},Np.utc=function(M){return this.utcOffset(0,M)},Np.local=function(M){return this._isUTC&&(this.utcOffset(0,M),this._isUTC=!1,M&&this.subtract(Yb(this),"m")),this},Np.parseZone=function(){if(null!=this._tzm)this.utcOffset(this._tzm,!1,!0);else if("string"==typeof this._i){var M=Hb(pM,this._i);null!=M?this.utcOffset(M):this.utcOffset(0,!0)}return this},Np.hasAlignedHourOffset=function(M){return!!this.isValid()&&(M=M?_b(M).utcOffset():0,(this.utcOffset()-M)%60==0)},Np.isDST=function(){return this.utcOffset()>this.clone().month(0).utcOffset()||this.utcOffset()>this.clone().month(5).utcOffset()},Np.isLocal=function(){return!!this.isValid()&&!this._isUTC},Np.isUtcOffset=function(){return!!this.isValid()&&this._isUTC},Np.isUtc=Gb,Np.isUTC=Gb,Np.zoneAbbr=function(){return this._isUTC?"UTC":""},Np.zoneName=function(){return this._isUTC?"Coordinated Universal Time":""},Np.dates=R("dates accessor is deprecated. Use date instead.",hp),Np.months=R("months accessor is deprecated. Use month instead",PM),Np.years=R("years accessor is deprecated. Use year instead",yM),Np.zone=R("moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/",function(M,b){return null!=M?("string"!=typeof M&&(M=-M),this.utcOffset(M,b),this):-this.utcOffset()}),Np.isDSTShifted=R("isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information",function(){if(!c(this._isDSTShifted))return this._isDSTShifted;var M,b={};return u(b,this),(b=xb(b))._a?(M=b._isUTC?a(b._a):_b(b._a),this._isDSTShifted=this.isValid()&&function(M,b,p){var e,o=Math.min(M.length,b.length),z=Math.abs(M.length-b.length),t=0;for(e=0;e<o;e++)(p&&M[e]!==b[e]||!p&&rM(M[e])!==rM(b[e]))&&t++;return t+z}(b._a,M.toArray())>0):this._isDSTShifted=!1,this._isDSTShifted});var Bp=y.prototype;function Xp(M,b,p,e){var o=lb(),z=a().set(e,b);return o[p](z,M)}function wp(M,b,p){if(n(M)&&(b=M,M=void 0),M=M||"",null!=b)return Xp(M,b,p,"month");var e,o=[];for(e=0;e<12;e++)o[e]=Xp(M,e,p,"month");return o}function xp(M,b,p,e){"boolean"==typeof M?(n(b)&&(p=b,b=void 0),b=b||""):(p=b=M,M=!1,n(b)&&(p=b,b=void 0),b=b||"");var o,z=lb(),t=M?z._week.dow:0,c=[];if(null!=p)return Xp(b,(p+t)%7,e,"day");for(o=0;o<7;o++)c[o]=Xp(b,(o+t)%7,e,"day");return c}Bp.calendar=function(M,b,p){var e=this._calendar[M]||this._calendar.sameElse;return v(e)?e.call(b,p):e},Bp.longDateFormat=function(M){var b=this._longDateFormat[M],p=this._longDateFormat[M.toUpperCase()];return b||!p?b:(this._longDateFormat[M]=p.match(X).map(function(M){return"MMMM"===M||"MM"===M||"DD"===M||"dddd"===M?M.slice(1):M}).join(""),this._longDateFormat[M])},Bp.invalidDate=function(){return this._invalidDate},Bp.ordinal=function(M){return this._ordinal.replace("%d",M)},Bp.preparse=yp,Bp.postformat=yp,Bp.relativeTime=function(M,b,p,e){var o=this._relativeTime[p];return v(o)?o(M,b,p,e):o.replace(/%d/i,M)},Bp.pastFuture=function(M,b){var p=this._relativeTime[M>0?"future":"past"];return v(p)?p(b):p.replace(/%s/i,b)},Bp.set=function(M){var b,p;for(p in M)z(M,p)&&(v(b=M[p])?this[p]=b:this["_"+p]=b);this._config=M,this._dayOfMonthOrdinalParseLenient=new RegExp((this._dayOfMonthOrdinalParse.source||this._ordinalParse.source)+"|"+/\d{1,2}/.source)},Bp.eras=function(M,b){var e,o,z,t=this._eras||lb("en")._eras;for(e=0,o=t.length;e<o;++e){if("string"==typeof t[e].since)z=p(t[e].since).startOf("day"),t[e].since=z.valueOf();switch(typeof t[e].until){case"undefined":t[e].until=1/0;break;case"string":z=p(t[e].until).startOf("day").valueOf(),t[e].until=z.valueOf()}}return t},Bp.erasParse=function(M,b,p){var e,o,z,t,c,n=this.eras();for(M=M.toUpperCase(),e=0,o=n.length;e<o;++e)if(z=n[e].name.toUpperCase(),t=n[e].abbr.toUpperCase(),c=n[e].narrow.toUpperCase(),p)switch(b){case"N":case"NN":case"NNN":if(t===M)return n[e];break;case"NNNN":if(z===M)return n[e];break;case"NNNNN":if(c===M)return n[e]}else if([z,t,c].indexOf(M)>=0)return n[e]},Bp.erasConvertYear=function(M,b){var e=M.since<=M.until?1:-1;return void 0===b?p(M.since).year():p(M.since).year()+(b-M.offset)*e},Bp.erasAbbrRegex=function(M){return z(this,"_erasAbbrRegex")||qp.call(this),M?this._erasAbbrRegex:this._erasRegex},Bp.erasNameRegex=function(M){return z(this,"_erasNameRegex")||qp.call(this),M?this._erasNameRegex:this._erasRegex},Bp.erasNarrowRegex=function(M){return z(this,"_erasNarrowRegex")||qp.call(this),M?this._erasNarrowRegex:this._erasRegex},Bp.months=function(M,b){return M?e(this._months)?this._months[M.month()]:this._months[(this._months.isFormat||kM).test(b)?"format":"standalone"][M.month()]:e(this._months)?this._months:this._months.standalone},Bp.monthsShort=function(M,b){return M?e(this._monthsShort)?this._monthsShort[M.month()]:this._monthsShort[kM.test(b)?"format":"standalone"][M.month()]:e(this._monthsShort)?this._monthsShort:this._monthsShort.standalone},Bp.monthsParse=function(M,b,p){var e,o,z;if(this._monthsParseExact)return EM.call(this,M,b,p);for(this._monthsParse||(this._monthsParse=[],this._longMonthsParse=[],this._shortMonthsParse=[]),e=0;e<12;e++){if(o=a([2e3,e]),p&&!this._longMonthsParse[e]&&(this._longMonthsParse[e]=new RegExp("^"+this.months(o,"").replace(".","")+"$","i"),this._shortMonthsParse[e]=new RegExp("^"+this.monthsShort(o,"").replace(".","")+"$","i")),p||this._monthsParse[e]||(z="^"+this.months(o,"")+"|^"+this.monthsShort(o,""),this._monthsParse[e]=new RegExp(z.replace(".",""),"i")),p&&"MMMM"===b&&this._longMonthsParse[e].test(M))return e;if(p&&"MMM"===b&&this._shortMonthsParse[e].test(M))return e;if(!p&&this._monthsParse[e].test(M))return e}},Bp.monthsRegex=function(M){return this._monthsParseExact?(z(this,"_monthsRegex")||IM.call(this),M?this._monthsStrictRegex:this._monthsRegex):(z(this,"_monthsRegex")||(this._monthsRegex=CM),this._monthsStrictRegex&&M?this._monthsStrictRegex:this._monthsRegex)},Bp.monthsShortRegex=function(M){return this._monthsParseExact?(z(this,"_monthsRegex")||IM.call(this),M?this._monthsShortStrictRegex:this._monthsShortRegex):(z(this,"_monthsShortRegex")||(this._monthsShortRegex=SM),this._monthsShortStrictRegex&&M?this._monthsShortStrictRegex:this._monthsShortRegex)},Bp.week=function(M){return YM(M,this._week.dow,this._week.doy).week},Bp.firstDayOfYear=function(){return this._week.doy},Bp.firstDayOfWeek=function(){return this._week.dow},Bp.weekdays=function(M,b){var p=e(this._weekdays)?this._weekdays:this._weekdays[M&&!0!==M&&this._weekdays.isFormat.test(b)?"format":"standalone"];return!0===M?VM(p,this._week.dow):M?p[M.day()]:p},Bp.weekdaysMin=function(M){return!0===M?VM(this._weekdaysMin,this._week.dow):M?this._weekdaysMin[M.day()]:this._weekdaysMin},Bp.weekdaysShort=function(M){return!0===M?VM(this._weekdaysShort,this._week.dow):M?this._weekdaysShort[M.day()]:this._weekdaysShort},Bp.weekdaysParse=function(M,b,p){var e,o,z;if(this._weekdaysParseExact)return bb.call(this,M,b,p);for(this._weekdaysParse||(this._weekdaysParse=[],this._minWeekdaysParse=[],this._shortWeekdaysParse=[],this._fullWeekdaysParse=[]),e=0;e<7;e++){if(o=a([2e3,1]).day(e),p&&!this._fullWeekdaysParse[e]&&(this._fullWeekdaysParse[e]=new RegExp("^"+this.weekdays(o,"").replace(".","\\.?")+"$","i"),this._shortWeekdaysParse[e]=new RegExp("^"+this.weekdaysShort(o,"").replace(".","\\.?")+"$","i"),this._minWeekdaysParse[e]=new RegExp("^"+this.weekdaysMin(o,"").replace(".","\\.?")+"$","i")),this._weekdaysParse[e]||(z="^"+this.weekdays(o,"")+"|^"+this.weekdaysShort(o,"")+"|^"+this.weekdaysMin(o,""),this._weekdaysParse[e]=new RegExp(z.replace(".",""),"i")),p&&"dddd"===b&&this._fullWeekdaysParse[e].test(M))return e;if(p&&"ddd"===b&&this._shortWeekdaysParse[e].test(M))return e;if(p&&"dd"===b&&this._minWeekdaysParse[e].test(M))return e;if(!p&&this._weekdaysParse[e].test(M))return e}},Bp.weekdaysRegex=function(M){return this._weekdaysParseExact?(z(this,"_weekdaysRegex")||pb.call(this),M?this._weekdaysStrictRegex:this._weekdaysRegex):(z(this,"_weekdaysRegex")||(this._weekdaysRegex=JM),this._weekdaysStrictRegex&&M?this._weekdaysStrictRegex:this._weekdaysRegex)},Bp.weekdaysShortRegex=function(M){return this._weekdaysParseExact?(z(this,"_weekdaysRegex")||pb.call(this),M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex):(z(this,"_weekdaysShortRegex")||(this._weekdaysShortRegex=ZM),this._weekdaysShortStrictRegex&&M?this._weekdaysShortStrictRegex:this._weekdaysShortRegex)},Bp.weekdaysMinRegex=function(M){return this._weekdaysParseExact?(z(this,"_weekdaysRegex")||pb.call(this),M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex):(z(this,"_weekdaysMinRegex")||(this._weekdaysMinRegex=Mb),this._weekdaysMinStrictRegex&&M?this._weekdaysMinStrictRegex:this._weekdaysMinRegex)},Bp.isPM=function(M){return"p"===(M+"").toLowerCase().charAt(0)},Bp.meridiem=function(M,b,p){return M>11?p?"pm":"PM":p?"am":"AM"},Ab("en",{eras:[{since:"0001-01-01",until:1/0,offset:1,name:"Anno Domini",narrow:"AD",abbr:"AD"},{since:"0000-12-31",until:-1/0,offset:1,name:"Before Christ",narrow:"BC",abbr:"BC"}],dayOfMonthOrdinalParse:/\d{1,2}(th|st|nd|rd)/,ordinal:function(M){var b=M%10;return M+(1===rM(M%100/10)?"th":1===b?"st":2===b?"nd":3===b?"rd":"th")}}),p.lang=R("moment.lang is deprecated. Use moment.locale instead.",Ab),p.langData=R("moment.langData is deprecated. Use moment.localeData instead.",lb);var Tp=Math.abs;function _p(M,b,p,e){var o=Kb(b,p);return M._milliseconds+=e*o._milliseconds,M._days+=e*o._days,M._months+=e*o._months,M._bubble()}function kp(M){return M<0?Math.floor(M):Math.ceil(M)}function Sp(M){return 4800*M/146097}function Cp(M){return 146097*M/4800}function Ep(M){return function(){return this.as(M)}}var Dp=Ep("ms"),Pp=Ep("s"),Ip=Ep("m"),Fp=Ep("h"),jp=Ep("d"),Hp=Ep("w"),Up=Ep("M"),Yp=Ep("Q"),Gp=Ep("y"),Vp=Dp;function $p(M){return function(){return this.isValid()?this._data[M]:NaN}}var Kp=$p("milliseconds"),Qp=$p("seconds"),Jp=$p("minutes"),Zp=$p("hours"),Me=$p("days"),be=$p("months"),pe=$p("years");var ee=Math.round,oe={ss:44,s:45,m:45,h:22,d:26,w:null,M:11};function ze(M,b,p,e,o){return o.relativeTime(b||1,!!p,M,e)}var te=Math.abs;function ce(M){return(M>0)-(M<0)||+M}function ne(){if(!this.isValid())return this.localeData().invalidDate();var M,b,p,e,o,z,t,c,n=te(this._milliseconds)/1e3,O=te(this._days),i=te(this._months),r=this.asSeconds();return r?(M=iM(n/60),b=iM(M/60),n%=60,M%=60,p=iM(i/12),i%=12,e=n?n.toFixed(3).replace(/\.?0+$/,""):"",o=r<0?"-":"",z=ce(this._months)!==ce(r)?"-":"",t=ce(this._days)!==ce(r)?"-":"",c=ce(this._milliseconds)!==ce(r)?"-":"",o+"P"+(p?z+p+"Y":"")+(i?z+i+"M":"")+(O?t+O+"D":"")+(b||M||n?"T":"")+(b?c+b+"H":"")+(M?c+M+"M":"")+(n?c+e+"S":"")):"P0D"}var Oe=Db.prototype;return Oe.isValid=function(){return this._isValid},Oe.abs=function(){var M=this._data;return this._milliseconds=Tp(this._milliseconds),this._days=Tp(this._days),this._months=Tp(this._months),M.milliseconds=Tp(M.milliseconds),M.seconds=Tp(M.seconds),M.minutes=Tp(M.minutes),M.hours=Tp(M.hours),M.months=Tp(M.months),M.years=Tp(M.years),this},Oe.add=function(M,b){return _p(this,M,b,1)},Oe.subtract=function(M,b){return _p(this,M,b,-1)},Oe.as=function(M){if(!this.isValid())return NaN;var b,p,e=this._milliseconds;if("month"===(M=D(M))||"quarter"===M||"year"===M)switch(b=this._days+e/864e5,p=this._months+Sp(b),M){case"month":return p;case"quarter":return p/3;case"year":return p/12}else switch(b=this._days+Math.round(Cp(this._months)),M){case"week":return b/7+e/6048e5;case"day":return b+e/864e5;case"hour":return 24*b+e/36e5;case"minute":return 1440*b+e/6e4;case"second":return 86400*b+e/1e3;case"millisecond":return Math.floor(864e5*b)+e;default:throw new Error("Unknown unit "+M)}},Oe.asMilliseconds=Dp,Oe.asSeconds=Pp,Oe.asMinutes=Ip,Oe.asHours=Fp,Oe.asDays=jp,Oe.asWeeks=Hp,Oe.asMonths=Up,Oe.asQuarters=Yp,Oe.asYears=Gp,Oe.valueOf=Vp,Oe._bubble=function(){var M,b,p,e,o,z=this._milliseconds,t=this._days,c=this._months,n=this._data;return z>=0&&t>=0&&c>=0||z<=0&&t<=0&&c<=0||(z+=864e5*kp(Cp(c)+t),t=0,c=0),n.milliseconds=z%1e3,M=iM(z/1e3),n.seconds=M%60,b=iM(M/60),n.minutes=b%60,p=iM(b/60),n.hours=p%24,t+=iM(p/24),c+=o=iM(Sp(t)),t-=kp(Cp(o)),e=iM(c/12),c%=12,n.days=t,n.months=c,n.years=e,this},Oe.clone=function(){return Kb(this)},Oe.get=function(M){return M=D(M),this.isValid()?this[M+"s"]():NaN},Oe.milliseconds=Kp,Oe.seconds=Qp,Oe.minutes=Jp,Oe.hours=Zp,Oe.days=Me,Oe.weeks=function(){return iM(this.days()/7)},Oe.months=be,Oe.years=pe,Oe.humanize=function(M,b){if(!this.isValid())return this.localeData().invalidDate();var p,e,o=!1,z=oe;return"object"==typeof M&&(b=M,M=!1),"boolean"==typeof M&&(o=M),"object"==typeof b&&(z=Object.assign({},oe,b),null!=b.s&&null==b.ss&&(z.ss=b.s-1)),e=function(M,b,p,e){var o=Kb(M).abs(),z=ee(o.as("s")),t=ee(o.as("m")),c=ee(o.as("h")),n=ee(o.as("d")),O=ee(o.as("M")),i=ee(o.as("w")),r=ee(o.as("y")),a=z<=p.ss&&["s",z]||z<p.s&&["ss",z]||t<=1&&["m"]||t<p.m&&["mm",t]||c<=1&&["h"]||c<p.h&&["hh",c]||n<=1&&["d"]||n<p.d&&["dd",n];return null!=p.w&&(a=a||i<=1&&["w"]||i<p.w&&["ww",i]),(a=a||O<=1&&["M"]||O<p.M&&["MM",O]||r<=1&&["y"]||["yy",r])[2]=b,a[3]=+M>0,a[4]=e,ze.apply(null,a)}(this,!o,z,p=this.localeData()),o&&(e=p.pastFuture(+this,e)),p.postformat(e)},Oe.toISOString=ne,Oe.toString=ne,Oe.toJSON=ne,Oe.locale=tp,Oe.localeData=np,Oe.toIsoString=R("toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)",ne),Oe.lang=cp,_("X",0,0,"unix"),_("x",0,0,"valueOf"),cM("x",bM),cM("X",/[+-]?\d+(\.\d{1,3})?/),sM("X",function(M,b,p){p._d=new Date(1e3*parseFloat(M))}),sM("x",function(M,b,p){p._d=new Date(rM(M))}),p.version="2.30.1",M=_b,p.fn=Np,p.min=function(){return Cb("isBefore",[].slice.call(arguments,0))},p.max=function(){return Cb("isAfter",[].slice.call(arguments,0))},p.now=function(){return Date.now?Date.now():+new Date},p.utc=a,p.unix=function(M){return _b(1e3*M)},p.months=function(M,b){return wp(M,b,"months")},p.isDate=O,p.locale=Ab,p.invalid=d,p.duration=Kb,p.isMoment=W,p.weekdays=function(M,b,p){return xp(M,b,p,"weekdays")},p.parseZone=function(){return _b.apply(null,arguments).parseZone()},p.localeData=lb,p.isDuration=Pb,p.monthsShort=function(M,b){return wp(M,b,"monthsShort")},p.weekdaysMin=function(M,b,p){return xp(M,b,p,"weekdaysMin")},p.defineLocale=db,p.updateLocale=function(M,b){if(null!=b){var p,e,o=nb;null!=Ob[M]&&null!=Ob[M].parentLocale?Ob[M].set(N(Ob[M]._config,b)):(null!=(e=sb(M))&&(o=e._config),b=N(o,b),null==e&&(b.abbr=M),(p=new y(b)).parentLocale=Ob[M],Ob[M]=p),Ab(M)}else null!=Ob[M]&&(null!=Ob[M].parentLocale?(Ob[M]=Ob[M].parentLocale,M===Ab()&&Ab(M)):null!=Ob[M]&&delete Ob[M]);return Ob[M]},p.locales=function(){return m(Ob)},p.weekdaysShort=function(M,b,p){return xp(M,b,p,"weekdaysShort")},p.normalizeUnits=D,p.relativeTimeRounding=function(M){return void 0===M?ee:"function"==typeof M&&(ee=M,!0)},p.relativeTimeThreshold=function(M,b){return void 0!==oe[M]&&(void 0===b?oe[M]:(oe[M]=b,"s"===M&&(oe.ss=b-1),!0))},p.calendarFormat=function(M,b){var p=M.diff(b,"days",!0);return p<-6?"sameElse":p<-1?"lastWeek":p<0?"lastDay":p<1?"sameDay":p<2?"nextDay":p<7?"nextWeek":"sameElse"},p.prototype=Np,p.HTML5_FMT={DATETIME_LOCAL:"YYYY-MM-DDTHH:mm",DATETIME_LOCAL_SECONDS:"YYYY-MM-DDTHH:mm:ss",DATETIME_LOCAL_MS:"YYYY-MM-DDTHH:mm:ss.SSS",DATE:"YYYY-MM-DD",TIME:"HH:mm",TIME_SECONDS:"HH:mm:ss",TIME_MS:"HH:mm:ss.SSS",WEEK:"GGGG-[W]WW",MONTH:"YYYY-MM"},p}),function(M,b){"use strict";"object"==typeof module&&module.exports?module.exports=b(require("moment")):"function"==typeof define&&define.amd?define(["moment"],b):b(M.moment)}(this,function(M){"use strict";void 0===M.version&&M.default&&(M=M.default);var b,p={},e={},o={},z={},t={};M&&"string"==typeof M.version||X("Moment Timezone requires Moment.js. See https://momentjs.com/timezone/docs/#/use-it/browser/");var c=M.version.split("."),n=+c[0],O=+c[1];function i(M){return M>96?M-87:M>64?M-29:M-48}function r(M){var b=0,p=M.split("."),e=p[0],o=p[1]||"",z=1,t=0,c=1;for(45===M.charCodeAt(0)&&(b=1,c=-1);b<e.length;b++)t=60*t+i(e.charCodeAt(b));for(b=0;b<o.length;b++)z/=60,t+=i(o.charCodeAt(b))*z;return t*c}function a(M){for(var b=0;b<M.length;b++)M[b]=r(M[b])}function s(M,b){var p,e=[];for(p=0;p<b.length;p++)e[p]=M[b[p]];return e}function A(M){var b=M.split("|"),p=b[2].split(" "),e=b[3].split(""),o=b[4].split(" ");return a(p),a(e),a(o),function(M,b){for(var p=0;p<b;p++)M[p]=Math.round((M[p-1]||0)+6e4*M[p]);M[b-1]=1/0}(o,e.length),{name:b[0],abbrs:s(b[1].split(" "),e),offsets:s(p,e),untils:o,population:0|b[5]}}function d(M){M&&this._set(A(M))}function l(M,b){this.name=M,this.zones=b}function q(M){var b=M.toTimeString(),p=b.match(/\([a-z ]+\)/i);"GMT"===(p=p&&p[0]?(p=p[0].match(/[A-Z]/g))?p.join(""):void 0:(p=b.match(/[A-Z]{3,5}/g))?p[0]:void 0)&&(p=void 0),this.at=+M,this.abbr=p,this.offset=M.getTimezoneOffset()}function u(M){this.zone=M,this.offsetScore=0,this.abbrScore=0}function f(M,b){for(var p,e;e=6e4*((b.at-M.at)/12e4|0);)(p=new q(new Date(M.at+e))).offset===M.offset?M=p:b=p;return M}function W(M,b){return M.offsetScore!==b.offsetScore?M.offsetScore-b.offsetScore:M.abbrScore!==b.abbrScore?M.abbrScore-b.abbrScore:M.zone.population!==b.zone.population?b.zone.population-M.zone.population:b.zone.name.localeCompare(M.zone.name)}function h(M,b){var p,e;for(a(b),p=0;p<b.length;p++)e=b[p],t[e]=t[e]||{},t[e][M]=!0}function R(M){var b,p,e,o,c=M.length,n={},O=[],i={};for(b=0;b<c;b++)if(e=M[b].offset,!i.hasOwnProperty(e)){for(p in o=t[e]||{})o.hasOwnProperty(p)&&(n[p]=!0);i[e]=!0}for(b in n)n.hasOwnProperty(b)&&O.push(z[b]);return O}function m(){try{var M=Intl.DateTimeFormat().resolvedOptions().timeZone;if(M&&M.length>3){var b=z[g(M)];if(b)return b;X("Moment Timezone found "+M+" from the Intl api, but did not have that data loaded.")}}catch(M){}var p,e,o,t=function(){var M,b,p,e,o=(new Date).getFullYear()-2,z=new q(new Date(o,0,1)),t=z.offset,c=[z];for(e=1;e<48;e++)(p=new Date(o,e,1).getTimezoneOffset())!==t&&(M=f(z,b=new q(new Date(o,e,1))),c.push(M),c.push(new q(new Date(M.at+6e4))),z=b,t=p);for(e=0;e<4;e++)c.push(new q(new Date(o+e,0,1))),c.push(new q(new Date(o+e,6,1)));return c}(),c=t.length,n=R(t),O=[];for(e=0;e<n.length;e++){for(p=new u(v(n[e]),c),o=0;o<c;o++)p.scoreOffsetAt(t[o]);O.push(p)}return O.sort(W),O.length>0?O[0].zone.name:void 0}function g(M){return(M||"").toLowerCase().replace(/\//g,"_")}function L(M){var b,e,o,t;for("string"==typeof M&&(M=[M]),b=0;b<M.length;b++)t=g(e=(o=M[b].split("|"))[0]),p[t]=M[b],z[t]=e,h(t,o[2].split(" "))}function v(M,b){M=g(M);var o,t=p[M];return t instanceof d?t:"string"==typeof t?(t=new d(t),p[M]=t,t):e[M]&&b!==v&&(o=v(e[M],v))?((t=p[M]=new d)._set(o),t.name=z[M],t):null}function N(M){var b,p,o,t;for("string"==typeof M&&(M=[M]),b=0;b<M.length;b++)o=g((p=M[b].split("|"))[0]),t=g(p[1]),e[o]=t,z[o]=p[0],e[t]=o,z[t]=p[1]}function y(M){L(M.zones),N(M.links),function(M){var b,p,e,z;if(M&&M.length)for(b=0;b<M.length;b++)p=(z=M[b].split("|"))[0].toUpperCase(),e=z[1].split(" "),o[p]=new l(p,e)}(M.countries),w.dataVersion=M.version}function B(M){var b="X"===M._f||"x"===M._f;return!(!M._a||void 0!==M._tzm||b)}function X(M){"undefined"!=typeof console&&"function"==typeof console.error&&console.error(M)}function w(b){var p,e=Array.prototype.slice.call(arguments,0,-1),o=arguments[arguments.length-1],z=M.utc.apply(null,e);return!M.isMoment(b)&&B(z)&&(p=v(o))&&z.add(p.parse(z),"minutes"),z.tz(o),z}(n<2||2===n&&O<6)&&X("Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js "+M.version+". See momentjs.com"),d.prototype={_set:function(M){this.name=M.name,this.abbrs=M.abbrs,this.untils=M.untils,this.offsets=M.offsets,this.population=M.population},_index:function(M){var b;if((b=function(M,b){var p,e=b.length;if(M<b[0])return 0;if(e>1&&b[e-1]===1/0&&M>=b[e-2])return e-1;if(M>=b[e-1])return-1;for(var o=0,z=e-1;z-o>1;)b[p=Math.floor((o+z)/2)]<=M?o=p:z=p;return z}(+M,this.untils))>=0)return b},countries:function(){var M=this.name;return Object.keys(o).filter(function(b){return-1!==o[b].zones.indexOf(M)})},parse:function(M){var b,p,e,o,z=+M,t=this.offsets,c=this.untils,n=c.length-1;for(o=0;o<n;o++)if(b=t[o],p=t[o+1],e=t[o?o-1:o],b<p&&w.moveAmbiguousForward?b=p:b>e&&w.moveInvalidForward&&(b=e),z<c[o]-6e4*b)return t[o];return t[n]},abbr:function(M){return this.abbrs[this._index(M)]},offset:function(M){return X("zone.offset has been deprecated in favor of zone.utcOffset"),this.offsets[this._index(M)]},utcOffset:function(M){return this.offsets[this._index(M)]}},u.prototype.scoreOffsetAt=function(M){this.offsetScore+=Math.abs(this.zone.utcOffset(M.at)-M.offset),this.zone.abbr(M.at).replace(/[^A-Z]/g,"")!==M.abbr&&this.abbrScore++},w.version="0.5.48",w.dataVersion="",w._zones=p,w._links=e,w._names=z,w._countries=o,w.add=L,w.link=N,w.load=y,w.zone=v,w.zoneExists=function M(b){return M.didShowError||(M.didShowError=!0,X("moment.tz.zoneExists('"+b+"') has been deprecated in favor of !moment.tz.zone('"+b+"')")),!!v(b)},w.guess=function(M){return b&&!M||(b=m()),b},w.names=function(){var M,b=[];for(M in z)z.hasOwnProperty(M)&&(p[M]||p[e[M]])&&z[M]&&b.push(z[M]);return b.sort()},w.Zone=d,w.unpack=A,w.unpackBase60=r,w.needsOffset=B,w.moveInvalidForward=!0,w.moveAmbiguousForward=!1,w.countries=function(){return Object.keys(o)},w.zonesForCountry=function(M,b){var p;if(p=(p=M).toUpperCase(),!(M=o[p]||null))return null;var e=M.zones.sort();return b?e.map(function(M){return{name:M,offset:v(M).utcOffset(new Date)}}):e};var x,T=M.fn;function _(M){return function(){return this._z?this._z.abbr(this):M.call(this)}}function k(M){return function(){return this._z=null,M.apply(this,arguments)}}M.tz=w,M.defaultZone=null,M.updateOffset=function(b,p){var e,o=M.defaultZone;if(void 0===b._z&&(o&&B(b)&&!b._isUTC&&b.isValid()&&(b._d=M.utc(b._a)._d,b.utc().add(o.parse(b),"minutes")),b._z=o),b._z)if(e=b._z.utcOffset(b),Math.abs(e)<16&&(e/=60),void 0!==b.utcOffset){var z=b._z;b.utcOffset(-e,p),b._z=z}else b.zone(e,p)},T.tz=function(b,p){if(b){if("string"!=typeof b)throw new Error("Time zone name must be a string, got "+b+" ["+typeof b+"]");return this._z=v(b),this._z?M.updateOffset(this,p):X("Moment Timezone has no data for "+b+". See http://momentjs.com/timezone/docs/#/data-loading/."),this}if(this._z)return this._z.name},T.zoneName=_(T.zoneName),T.zoneAbbr=_(T.zoneAbbr),T.utc=k(T.utc),T.local=k(T.local),T.utcOffset=(x=T.utcOffset,function(){return arguments.length>0&&(this._z=null),x.apply(this,arguments)}),M.tz.setDefault=function(b){return(n<2||2===n&&O<9)&&X("Moment Timezone setDefault() requires Moment.js >= 2.9.0. You are using Moment.js "+M.version+"."),M.defaultZone=b?v(b):null,M};var S=M.momentProperties;return"[object Array]"===Object.prototype.toString.call(S)?(S.push("_z"),S.push("_a")):S&&(S._z=null),y({version:"2025b",zones:["Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q|48e5","Africa/Nairobi|LMT +0230 EAT +0245|-2r.g -2u -30 -2J|012132|-2ua2r.g N6nV.g 3Fbu h1cu dzbJ|47e5","Africa/Algiers|LMT PMT WET WEST CET CEST|-c.c -9.l 0 -10 -10 -20|01232323232323232454542423234542324|-3bQ0c.c MDA2.P cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0|26e5","Africa/Lagos|LMT GMT +0030 WAT|-d.z 0 -u -10|01023|-2B40d.z 7iod.z dnXK.p dLzH.z|17e6","Africa/Bissau|LMT -01 GMT|12.k 10 0|012|-2ldX0 2xoo0|39e4","Africa/Maputo|LMT CAT|-2a.i -20|01|-2sw2a.i|26e5","Africa/Cairo|LMT EET EEST|-25.9 -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBC5.9 1AQM5.9 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 kSp0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1a10 1fz0|15e6","Africa/Casablanca|LMT +00 +01|u.k 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|32e5","Africa/Ceuta|LMT WET WEST CET CEST|l.g 0 -10 -10 -20|0121212121212121212121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2M0M0 GdX0 11z0 drd0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1y7o0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|85e3","Africa/El_Aaiun|LMT -01 +00 +01|Q.M 10 0 -10|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uM0 e00 Dc0 11A0 s00 e00 IM0 WM0 mo0 gM0 LA0 WM0 jA0 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0 2600 e00 28M0 e00 2600 gM0|20e4","Africa/Johannesburg|LMT SAST SAST SAST|-1Q -1u -20 -30|0123232|-39EpQ qTcm 1Ajdu 1cL0 1cN0 1cL0|84e5","Africa/Juba|LMT CAT CAST EAT|-26.s -20 -30 -30|012121212121212121212121212121212131|-1yW26.s 1zK06.s 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 PeX0|","Africa/Khartoum|LMT CAT CAST EAT|-2a.8 -20 -30 -30|012121212121212121212121212121212131|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0 HjL0|51e5","Africa/Monrovia|LMT MMT MMT GMT|H.8 H.8 I.u 0|0123|-3ygng.Q 1usM0 28G01.m|11e5","Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0|13e5","Africa/Sao_Tome|LMT LMT GMT WAT|-q.U A.J 0 -10|01232|-3tooq.U 18aoq.U 4i6N0 2q00|","Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00|11e5","Africa/Tunis|LMT PMT CET CEST|-E.I -9.l -10 -20|01232323232323232323232323232323232|-3zO0E.I 1cBAv.n 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00|20e5","Africa/Windhoek|LMT +0130 SAST SAST CAT WAT|-18.o -1u -20 -30 -20 -10|012324545454545454545454545454545454545454545454545454|-39Ep8.o qTbC.o 1Ajdu 1cL0 1SqL0 9Io0 16P0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0|32e4","America/Adak|LMT LMT NST NWT NPT BST BDT AHST HST HDT|-cd.m bK.C b0 a0 a0 b0 a0 a0 a0 90|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVzf.p 1EX1d.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|326","America/Anchorage|LMT LMT AST AWT APT AHST AHDT YST AKST AKDT|-e0.o 9X.A a0 90 90 a0 90 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVxs.n 1EX20.o 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|30e4","America/Puerto_Rico|LMT AST AWT APT|4o.p 40 30 30|01231|-2Qi7z.z 1IUbz.z 7XT0 iu0|24e5","America/Araguaina|LMT -03 -02|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0|14e4","America/Argentina/Buenos_Aires|LMT CMT -04 -03 -02|3R.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343434343|-331U6.c 125cn pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Catamarca|LMT CMT -04 -03 -02|4n.8 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243432343|-331TA.Q 125bR.E pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Cordoba|LMT CMT -04 -03 -02|4g.M 4g.M 40 30 20|012323232323232323232323232323232323232323234343434243434343|-331TH.c 125c0 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0 1qN0 WL0|","America/Argentina/Jujuy|LMT CMT -04 -03 -02|4l.c 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232434343|-331TC.M 125bT.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 A4p0 uL0|","America/Argentina/La_Rioja|LMT CMT -04 -03 -02|4r.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tw.A 125bN.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Mendoza|LMT CMT -04 -03 -02|4z.g 4g.M 40 30 20|012323232323232323232323232323232323232323234343423232432343|-331To.I 125bF.w pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 ri10 Op0 7TX0 uL0|","America/Argentina/Rio_Gallegos|LMT CMT -04 -03 -02|4A.Q 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tn.8 125bD.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rlB0 7B0 8zb0 uL0|","America/Argentina/Salta|LMT CMT -04 -03 -02|4l.E 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342434343|-331TC.k 125bT.8 pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 A4p0 uL0|","America/Argentina/San_Juan|LMT CMT -04 -03 -02|4y.4 4g.M 40 30 20|0123232323232323232323232323232323232323232343434342343432343|-331Tp.U 125bG.I pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 rld0 m10 8lb0 uL0|","America/Argentina/San_Luis|LMT CMT -04 -03 -02|4p.o 4g.M 40 30 20|0123232323232323232323232323232323232323232343434232323432323|-331Ty.A 125bP.o pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 vDb0 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0|","America/Argentina/Tucuman|LMT CMT -04 -03 -02|4k.Q 4g.M 40 30 20|01232323232323232323232323232323232323232323434343424343234343|-331TD.8 125bT.U pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 rlB0 4N0 8BX0 uL0 1qN0 WL0|","America/Argentina/Ushuaia|LMT CMT -04 -03 -02|4x.c 4g.M 40 30 20|012323232323232323232323232323232323232323234343434343432343|-331Tq.M 125bH.A pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 rkN0 8p0 8zb0 uL0|","America/Asuncion|LMT AMT -04 -03|3O.E 3O.E 40 30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-3eLw9.k 1FGo0 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0|28e5","America/Panama|LMT CMT EST|5i.8 5j.A 50|012|-3eLuF.Q Iy01.s|15e5","America/Bahia_Banderas|LMT MST CST MDT CDT|71 70 60 60 50|01213121313131313131313131313131313142424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|84e3","America/Bahia|LMT -03 -02|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0|27e5","America/Barbados|LMT AST ADT -0330|3W.t 40 30 3u|0121213121212121|-2m4k1.v 1eAN1.v RB0 1Bz0 Op0 1rb0 11d0 1jJc0 IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0|28e4","America/Belem|LMT -03 -02|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|20e5","America/Belize|LMT CST -0530 CWT CPT CDT|5Q.M 60 5u 50 50 50|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121215151|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu Rcu 7Bt0 Ni0 4nd0 Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu e9Au qn0 lxB0 mn0|57e3","America/Boa_Vista|LMT -04 -03|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0|62e2","America/Bogota|LMT BMT -05 -04|4U.g 4U.g 50 40|01232|-3sTv3.I 1eIo0 38yo3.I 1PX0|90e5","America/Boise|LMT PST PDT MST MWT MPT MDT|7I.N 80 70 70 60 60 60|01212134536363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-3tFE0 1nEe0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e4","America/Cambridge_Bay|-00 MST MWT MPT MDT CST CDT EST|0 70 60 60 60 60 50 50|012314141414141414141414141414141414141414141414141414141414567541414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-21Jc0 RO90 8x20 ix0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e2","America/Campo_Grande|LMT -04 -03|3C.s 40 30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|77e4","America/Cancun|LMT CST EST CDT EDT|5L.4 60 50 50 40|01213132431313131313131313131313131313131312|-1UQG0 2q3C0 2tx0 wgP0 1lb0 14p0 1lb0 14o0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 Dd0|63e4","America/Caracas|LMT CMT -0430 -04|4r.I 4r.E 4u 40|012323|-3eLvw.g ROnX.U 28KM2.k 1IwOu kqo0|29e5","America/Cayenne|LMT -04 -03|3t.k 40 30|012|-2mrwu.E 2gWou.E|58e3","America/Chicago|LMT CST CDT EST CWT CPT|5O.A 60 50 50 50 50|012121212121212121212121212121212121213121212121214512121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|92e5","America/Chihuahua|LMT MST CST MDT CDT|74.k 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|81e4","America/Ciudad_Juarez|LMT MST CST MDT CDT|75.U 70 60 60 50|01213124242313131313131313131313131313131313131313131313131321313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 cm0 EP0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Costa_Rica|LMT SJMT CST CDT|5A.d 5A.d 60 50|01232323232|-3eLun.L 1fyo0 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0|12e5","America/Coyhaique|LMT SMT -05 -04 -03|4M.g 4G.J 50 40 30|012131323232323232323434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvb.I MJbS.t fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0|","America/Phoenix|LMT MST MDT MWT|7s.i 70 60 60|012121313121|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0|42e5","America/Cuiaba|LMT -04 -03|3I.k 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|54e4","America/Danmarkshavn|LMT -03 -02 GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0|8","America/Dawson_Creek|LMT PST PDT PWT PPT MST|80.U 80 70 70 70 70|01213412121212121212121212121212121212121212121212121212125|-3tofX.4 1nspX.4 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0|12e3","America/Dawson|LMT YST YDT YWT YPT YDDT PST PDT MST|9h.E 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeG.k GWpG.k 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|13e2","America/Denver|LMT MST MDT MWT MPT|6X.U 70 60 60 60|012121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFF0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e5","America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|0123425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 JxX1 SMX 1cN0 1cL0 aW10 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e5","America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|0121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 XQp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|10e5","America/Eirunepe|LMT -05 -04|4D.s 50 40|0121212121212121212121212121212121|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0|31e3","America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0|11e5","America/Tijuana|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 4Q00 8mp0 8lz0 SN0 1cL0 pHB0 83r0 AU0 5MN0 1Rz0 38N0 Wn0 1qP0 11z0 1o10 11z0 3NA0 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|20e5","America/Fort_Nelson|LMT PST PDT PWT PPT MST|8a.L 80 70 70 70 70|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121215|-3tofN.d 1nspN.d 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0|39e2","America/Fort_Wayne|LMT CST CDT CWT CPT EST EDT|5I.C 60 50 50 50 50 40|0121212134121212121212121212151565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Fortaleza|LMT -03 -02|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0|34e5","America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|19e3","America/Godthab|LMT -03 -02 -01|3q.U 30 20 10|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 2so0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e3","America/Goose_Bay|LMT NST NDT NST NDT NWT NPT AST ADT ADDT|41.E 3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|0121343434343434356343434343434343434343434343434343434343437878787878787878787878787878787878787878787879787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-3tojW.k 1nspt.c 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|76e2","America/Grand_Turk|LMT KMT EST EDT AST|4I.w 57.a 50 40 40|01232323232323232323232323232323232323232323232323232323232323232323232323243232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLvf.s RK0m.C 2HHBQ.O 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 7jA0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|37e2","America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0|13e5","America/Guayaquil|LMT QMT -05 -04|5j.k 5e 50 40|01232|-3eLuE.E 1DNzS.E 2uILK rz0|27e5","America/Guyana|LMT -04 -0345 -03|3Q.D 40 3J 30|01231|-2mf87.l 8Hc7.l 2r7bJ Ey0f|80e4","America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|39e4","America/Havana|LMT HMT CST CDT|5t.s 5t.A 50 40|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLuu.w 1qx00.8 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0|21e5","America/Hermosillo|LMT MST CST MDT|7n.Q 70 60 60|01213121313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0|64e4","America/Indiana/Knox|LMT CST CDT CWT CPT EST|5K.u 60 50 50 50 50|01212134121212121212121212121212121212151212121212121212121212121212121212121212121212121252121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Marengo|LMT CST CDT CWT CPT EST EDT|5J.n 60 50 50 50 50 40|01212134121212121212121215656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Petersburg|LMT CST CDT CWT CPT EST EDT|5N.7 60 50 50 50 50 40|012121341212121212121212121215121212121212121212121252125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Tell_City|LMT CST CDT CWT CPT EST EDT|5L.3 60 50 50 50 50 40|012121341212121212121212121512165652121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 8wn0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vevay|LMT CST CDT CWT CPT EST EDT|5E.g 60 50 50 50 50 40|0121213415656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Vincennes|LMT CST CDT CWT CPT EST EDT|5O.7 60 50 50 50 50 40|012121341212121212121212121212121565652125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Indiana/Winamac|LMT CST CDT CWT CPT EST EDT|5K.p 60 50 50 50 50 40|012121341212121212121212121212121212121565652165656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Inuvik|-00 PST PDT MDT MST|0 80 70 60 70|01212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-FnA0 L3K0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|35e2","America/Iqaluit|-00 EWT EPT EST EDT CST CDT|0 40 40 50 40 60 50|0123434343434343434343434343434343434343434343434343434343456343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-16K00 7nX0 iv0 14HB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|67e2","America/Jamaica|LMT KMT EST EDT|57.a 57.a 50 40|01232323232323232323232|-3eLuQ.O RK00 2uM1Q.O 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0|94e4","America/Juneau|LMT LMT PST PWT PPT PDT YDT YST AKST AKDT|-f2.j 8V.F 80 70 70 70 80 90 90 80|0123425252525252525252525252625252578989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVwq.s 1EX12.j 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|33e3","America/Kentucky/Louisville|LMT CST CDT CWT CPT EST EDT|5H.2 60 50 50 50 50 40|01212121213412121212121212121212121212565656565656525656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 1nX1 e0X 9vd0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Kentucky/Monticello|LMT CST CDT CWT CPT EST EDT|5D.o 60 50 50 50 50 40|01212134121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFG0 1nEe0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/La_Paz|LMT CMT BST -04|4w.A 4w.A 3w.A 40|0123|-3eLvr.o 1FIo0 13b0|19e5","America/Lima|LMT LMT -05 -04|58.c 58.A 50 40|01232323232323232|-3eLuP.M JcM0.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0|11e6","America/Los_Angeles|LMT PST PDT PWT PPT|7Q.W 80 70 70 70|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFE0 1nEe0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp1 1VaX 3dA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|15e6","America/Maceio|LMT -03 -02|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0|93e4","America/Managua|LMT MMT CST EST CDT|5J.8 5J.c 60 50 50|01232424232324242|-3eLue.Q 1Mhc0.4 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0|22e5","America/Manaus|LMT -04 -03|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0|19e5","America/Martinique|LMT FFMT AST ADT|44.k 44.k 40 30|01232|-3eLvT.E PTA0 2LPbT.E 19X0|39e4","America/Matamoros|LMT CST CDT|6u 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|45e4","America/Mazatlan|LMT MST CST MDT|75.E 70 60 60|01213121313131313131313131313131313131313131313131313131313131|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 otX0 2bmP0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|44e4","America/Menominee|LMT CST CDT CWT CPT EST|5O.r 60 50 50 50 50|012121341212152121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3pdG9.x 1jce9.x 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|85e2","America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131|-1UQG0 2q3C0 24n0 wG10 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|11e5","America/Metlakatla|LMT LMT PST PWT PPT PDT AKST AKDT|-fd.G 8K.i 80 70 70 70 90 80|0123425252525252525252525252525252526767672676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwf.5 1EX1d.G 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1hU10 Rd0 1zb0 Op0 1zb0 Op0 1zb0 uM0 jB0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|14e2","America/Mexico_City|LMT MST CST MDT CDT CWT|6A.A 70 60 60 50 50|012131242425242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|20e6","America/Miquelon|LMT AST -03 -02|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mxUf.k 2LHcf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|61e2","America/Moncton|LMT EST AST ADT AWT APT|4j.8 50 40 30 30 30|0123232323232323232323245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3txvE.Q J4ME.Q CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|64e3","America/Monterrey|LMT MST CST MDT CDT|6F.g 70 60 60 50|012131242424242424242424242424242424242424242424242424242424242|-1UQG0 dep0 8lz0 16p0 11z0 1dd0 2gmp0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0|41e5","America/Montevideo|LMT MMT -04 -03 -0330 -0230 -02 -0130|3I.P 3I.P 40 30 3u 2u 20 1u|012343434343434343434343435353636353636375363636363636363636363636363636363636363636363|-2tRUf.9 sVc0 8jcf.9 1db0 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1fAu 1cLu 1o0u 11zu NAu 3jXu zXu Dq0u 19Xu pcu jz0 cm10 19X0 6tB0 1fbu 3o0u jX0 4vB0 xz0 3Cp0 mmu 1a10 IMu Db0 4c10 uL0 1Nd0 An0 1SN0 uL0 mp0 28L0 iPB0 un0 1SN0 xz0 1zd0 Lz0 1zd0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0|17e5","America/Toronto|LMT EST EDT EWT EPT|5h.w 50 40 40 40|012121212121212121212121212121212121212121212123412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-32B6G.s UFdG.s 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1qL0 11B0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e5","America/New_York|LMT EST EDT EWT EPT|4U.2 50 40 40 40|012121212121212121212121212121212121212121212121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tFH0 1nEe0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|21e6","America/Nome|LMT LMT NST NWT NPT BST BDT YST AKST AKDT|-cW.m b1.C b0 a0 a0 b0 a0 90 90 80|01234256565656565656565656565656565678989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898989898|-48Pzs.L 1jVyu.p 1EX1W.m 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|38e2","America/Noronha|LMT -02 -01|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|30e2","America/North_Dakota/Beulah|LMT MST MDT MWT MPT CST CDT|6L.7 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/Center|LMT MST MDT MWT MPT CST CDT|6J.c 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212125656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/North_Dakota/New_Salem|LMT MST MDT MWT MPT CST CDT|6J.D 70 60 60 60 60 50|0121213412121212121212121212121212121212121212121212121212121212121212121212121212565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tFF0 1nEe0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|","America/Ojinaga|LMT MST CST MDT CDT|6V.E 70 60 60 50|0121312424231313131313131313131313131313131313131313131313132424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-1UQF0 deo0 8lz0 16p0 11z0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1wn0 Rc0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e3","America/Paramaribo|LMT PMT PMT -0330 -03|3E.E 3E.Q 3E.A 3u 30|01234|-2nDUj.k Wqo0.c qanX.I 1yVXN.o|24e4","America/Port-au-Prince|LMT PPMT EST EDT|4N.k 4N 50 40|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3eLva.E 15RLX.E 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 3iN0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Rio_Branco|LMT -05 -04|4v.c 50 40|01212121212121212121212121212121|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0|31e4","America/Porto_Velho|LMT -04 -03|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0|37e4","America/Punta_Arenas|LMT SMT -05 -04 -03|4H.E 4G.J 50 40 30|01213132323232323232343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvg.k MJbX.5 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 blz0 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|","America/Winnipeg|LMT CST CDT CWT CPT|6s.A 60 50 50 50|0121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3kLtv.o 1a3bv.o WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|66e4","America/Rankin_Inlet|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-vDc0 Bjk0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|26e2","America/Recife|LMT -03 -02|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0|33e5","America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0|19e4","America/Resolute|-00 CST CDT EST|0 60 50 50|01212121212121212121212121212121212121212121212121212121212321212121212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-SnA0 103I0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|229","America/Santarem|LMT -04 -03|3C.M 40 30|0121212121212121212121212121212|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0|21e4","America/Santiago|LMT SMT -05 -04 -03|4G.J 4G.J 50 40 30|0121313232323232323432343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLvh.f MJc0 fJAh.f 5knG.J 1Vzh.f jRAG.J 1pbh.f 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9Bz0 hX0 1q10 ko0 Qeo0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|62e5","America/Santo_Domingo|LMT SDMT EST EDT -0430 AST|4D.A 4E 50 40 4u 40|012324242424242525|-3eLvk.o 1Jic0.o 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00|29e5","America/Sao_Paulo|LMT -03 -02|36.s 30 20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1HB0 FX0|20e6","America/Scoresbysund|LMT -02 -01 +00|1r.Q 20 10 0|012132323232323232323232323232323232323232323232323232323232323232323232323232323232323232121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 2pA0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|452","America/Sitka|LMT LMT PST PWT PPT PDT YST AKST AKDT|-eW.L 91.d 80 70 70 70 90 90 80|0123425252525252525252525252525252567878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-48Pzs.L 1jVwu 1EX0W.L 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|90e2","America/St_Johns|LMT NST NDT NST NDT NWT NPT NDDT|3u.Q 3u.Q 2u.Q 3u 2u 2u 2u 1u|012121212121212121212121212121212121213434343434343435634343434343434343434343434343434343434343434343434343434343434343434343434343434343437343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tokt.8 1l020 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|11e4","America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0|16e3","America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0|11e5","America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|656","America/Vancouver|LMT PST PDT PWT PPT|8c.s 80 70 70 70|01213412121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3tofL.w 1nspL.w 1in0 UGp0 8x10 iy0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|23e5","America/Whitehorse|LMT YST YDT YWT YPT YDDT PST PDT MST|90.c 90 80 80 80 70 80 70 70|0121213415167676767676767676767676767676767676767676767676767676767676767676767676767676767678|-2MSeX.M GWpX.M 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 LA0 ytd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1z90|23e3","America/Yakutat|LMT LMT YST YWT YPT YDT AKST AKDT|-eF.5 9i.T 90 80 80 80 90 80|0123425252525252525252525252525252526767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-48Pzs.L 1jVwL.G 1EX1F.5 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|642","Antarctica/Casey|-00 +08 +11|0 -80 -b0|012121212121212121|-2q00 1DjS0 T90 40P0 KL0 blz0 3m10 1o30 14k0 1kr0 12l0 1o01 14kX 1lf1 14kX 1lf1 13bX|10","Antarctica/Davis|-00 +07 +05|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0|70","Pacific/Port_Moresby|LMT PMMT +10|-9M.E -9M.w -a0|012|-3D8VM.E AvA0.8|25e4","Antarctica/Macquarie|-00 AEST AEDT|0 -a0 -b0|0121012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2OPc0 Fb40 1a00 4SK0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 3Co0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|1","Antarctica/Mawson|-00 +06 +05|0 -60 -50|012|-CEo0 2fyk0|60","Pacific/Auckland|LMT NZMT NZST NZST NZDT|-bD.4 -bu -cu -c0 -d0|012131313131313131313131313134343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-46jLD.4 2nEO9.4 Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|14e5","Antarctica/Palmer|-00 -03 -04 -02|0 30 40 20|0121212121213121212121212121212121212121212121212121212121212121212121212121212121|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0|40","Antarctica/Rothera|-00 -03|0 30|01|gOo0|130","Asia/Riyadh|LMT +03|-36.Q -30|01|-TvD6.Q|57e5","Antarctica/Troll|-00 +00 +02|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|40","Antarctica/Vostok|-00 +07 +05|0 -70 -50|01012|-tjA0 1rWh0 1Nj0 1aTv0|25","Europe/Berlin|LMT CET CEST CEMT|-R.s -10 -20 -30|012121212121212321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36RcR.s UbWR.s 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e5","Asia/Almaty|LMT +05 +06 +07|-57.M -50 -60 -70|0123232323232323232323212323232323232323232323232321|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 L4m0|15e5","Asia/Amman|LMT EET EEST +03|-2n.I -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 LA0 1C00|25e5","Asia/Anadyr|LMT +12 +13 +14 +11|-bN.U -c0 -d0 -e0 -b0|01232121212121212121214121212121212121212121212121212121212141|-1PcbN.U eUnN.U 23CL0 1db0 2q10 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|13e3","Asia/Aqtau|LMT +04 +05 +06|-3l.4 -40 -50 -60|012323232323232323232123232312121212121212121212|-1Pc3l.4 eUnl.4 24PX0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|15e4","Asia/Aqtobe|LMT +04 +05 +06|-3M.E -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc3M.E eUnM.E 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0|27e4","Asia/Ashgabat|LMT +04 +05 +06|-3R.w -40 -50 -60|0123232323232323232323212|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0|41e4","Asia/Atyrau|LMT +03 +05 +06 +04|-3r.I -30 -50 -60 -40|01232323232323232323242323232323232324242424242|-1Pc3r.I eUor.I 24PW0 2pX0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 2sp0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|","Asia/Baghdad|LMT BMT +03 +04|-2V.E -2V.A -30 -40|0123232323232323232323232323232323232323232323232323232|-3eLCV.E 18ao0.4 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0|66e5","Asia/Qatar|LMT +04 +03|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8|96e4","Asia/Baku|LMT +03 +04 +05|-3j.o -30 -40 -50|01232323232323232323232123232323232323232323232323232323232323232|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 9Je0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Asia/Bangkok|LMT BMT +07|-6G.4 -6G.4 -70|012|-3D8SG.4 1C000|15e6","Asia/Barnaul|LMT +06 +07 +08|-5z -60 -70 -80|0123232323232323232323212323232321212121212121212121212121212121212|-21S5z pCnz 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 p90 LE0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|","Asia/Beirut|LMT EET EEST|-2m -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3D8Om 1BWom 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|22e5","Asia/Bishkek|LMT +05 +06 +07|-4W.o -50 -60 -70|012323232323232323232321212121212121212121212121212|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2e00 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0|87e4","Asia/Brunei|LMT +0730 +08 +0820 +09|-7l.k -7u -80 -8k -90|0123232323232323242|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0|42e4","Asia/Kolkata|LMT HMT MMT IST +0630|-5R.s -5R.k -5l.a -5u -6u|01234343|-4Fg5R.s BKo0.8 1rDcw.a 1r2LP.a 1un0 HB0 7zX0|15e6","Asia/Chita|LMT +08 +09 +10|-7x.Q -80 -90 -a0|012323232323232323232321232323232323232323232323232323232323232312|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3re0|33e4","Asia/Ulaanbaatar|LMT +07 +08 +09|-77.w -70 -80 -90|012323232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|12e5","Asia/Shanghai|LMT CST CDT|-85.H -80 -90|012121212121212121212121212121|-2M0U5.H Iuo5.H 18n0 OjB0 Rz0 11d0 1wL0 A10 8HX0 1G10 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 aL0 1tU30 Rb0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0|23e6","Asia/Colombo|LMT MMT +0530 +06 +0630|-5j.o -5j.w -5u -60 -6u|012342432|-3D8Rj.o 13inX.Q 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu|22e5","Asia/Dhaka|LMT HMT +0630 +0530 +06 +07|-61.E -5R.k -6u -5u -60 -70|01232454|-3eLG1.E 26008.k 1unn.k HB0 m6n0 2kxbu 1i00|16e6","Asia/Damascus|LMT EET EEST +03|-2p.c -20 -30 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212123|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0|26e5","Asia/Dili|LMT +08 +09|-8m.k -80 -90|01212|-2le80 1dnX0 1nfA0 Xld0|19e4","Asia/Dubai|LMT +04|-3F.c -40|01|-21JfF.c|39e5","Asia/Dushanbe|LMT +05 +06 +07|-4z.c -50 -60 -70|012323232323232323232321|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2hB0|76e4","Asia/Famagusta|LMT EET EEST +03|-2f.M -20 -30 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2f.M 2a3cf.M 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 15U0 2Ks0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|","Asia/Gaza|LMT EET EEST IST IDT|-2h.Q -20 -30 -20 -30|0121212121212121212121212121212121234343434343434343434343434343431212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCh.Q 1Azeh.Q MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|18e5","Asia/Hebron|LMT EET EEST IST IDT|-2k.n -20 -30 -20 -30|012121212121212121212121212121212123434343434343434343434343434343121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2MBCk.n 1Azek.n MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 pBa0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1nX0 1210 1nA0 1210 1qL0 WN0 1qL0 WN0 1qL0 11c0 1on0 11B0 1o00 11A0 1qo0 XA0 1qp0 1cN0 1cL0 1a10 1fz0 17d0 1in0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1lb0 14p0 1in0 17d0 1cL0 1cN0 19X0 1fB0 14n0 jB0 2L0 11B0 WL0 gN0 8n0 11B0 TX0 gN0 bb0 11B0 On0 jB0 dX0 11B0 Lz0 gN0 mn0 WN0 IL0 gN0 pb0 WN0 Db0 jB0 rX0 11B0 xz0 gN0 xz0 11B0 rX0 jB0 An0 11B0 pb0 gN0 IL0 WN0 mn0 gN0 Lz0 WN0 gL0 jB0 On0 11B0 bb0 gN0 TX0 11B0 5z0 jB0 WL0 11B0 2L0 jB0 11z0 1ip0 19X0 1cN0 1cL0 17d0 1in0 14p0 1lb0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1nX0 14p0 1in0 17d0 1fz0 1a10 19X0 1fB0 17b0 gN0 2L0 WN0 14n0 gN0 5z0 WN0 WL0 jB0 8n0 11B0 Rb0 gN0 dX0 11B0 Lz0 jB0 gL0 11B0 IL0 jB0 mn0 WN0 FX0 gN0 rX0 WN0 An0 jB0 uL0 11B0 uL0 gN0 An0 11B0 rX0 gN0 Db0 11B0 mn0 jB0 FX0 11B0 jz0 gN0 On0 WN0 dX0 jB0 Rb0 WN0 bb0 jB0 TX0 11B0 5z0 gN0 11z0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0|25e4","Asia/Ho_Chi_Minh|LMT PLMT +07 +08 +09|-76.u -76.u -70 -80 -90|0123423232|-2yC76.u bK00 1h7b6.u 5lz0 18o0 3Oq0 k5c0 aVX0 BAM0|90e5","Asia/Hong_Kong|LMT HKT HKST HKWT JST|-7A.G -80 -90 -8u -90|0123412121212121212121212121212121212121212121212121212121212121212121|-2CFH0 1taO0 Hc0 xUu 9tBu 11z0 1tDu Rc0 1wo0 11A0 1cM0 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|73e5","Asia/Hovd|LMT +06 +07 +08|-66.A -60 -70 -80|012323232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 kEp0 1cJ0 1cP0 1cJ0|81e3","Asia/Irkutsk|LMT IMT +07 +08 +09|-6V.5 -6V.5 -70 -80 -90|012343434343434343434343234343434343434343434343434343434343434343|-3D8SV.5 1Bxc0 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Europe/Istanbul|LMT IMT EET EEST +03 +04|-1T.Q -1U.U -20 -30 -30 -40|01232323232323232323232323232323232323232323232345423232323232323232323232323232323232323232323232323232323232323234|-3D8NT.Q 1ePXW.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSN0 CL0 mp0 1Vz0 1gN0 8yn0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1ip0 19X0 1ip0 17b0 qdB0 38L0 1jd0 Tz0 l6O0 11A0 WN0 1qL0 TB0 1tX0 U10 1tz0 11B0 1in0 17d0 z90 cne0 pb0 2Cp0 1800 14o0 1dc0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1a00 1fA0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1tA0 U00 15w0|13e6","Asia/Jakarta|LMT BMT +0720 +0730 +09 +08 WIB|-77.c -77.c -7k -7u -90 -80 -70|012343536|-49jH7.c 2hiLL.c luM0 mPzO 8vWu 6kpu 4PXu xhcu|31e6","Asia/Jayapura|LMT +09 +0930 WIT|-9m.M -90 -9u -90|0123|-1uu9m.M sMMm.M L4nu|26e4","Asia/Jerusalem|LMT JMT IST IDT IDDT|-2k.S -2k.E -20 -30 -40|012323232323232432323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8Ok.S 1wvA0.e SyOk.E MM0 iM0 4JA0 10o0 1pA0 10M0 1pA0 16o0 1jA0 16o0 1jA0 3LA0 Eo0 oo0 1co0 1dA0 16o0 10M0 1jc0 1tA0 14o0 1cM0 1a00 11A0 1Nc0 Ao0 1Nc0 Ao0 1Ko0 LA0 1o00 WM0 EQK0 Db0 1fB0 Rb0 bXB0 gM0 8Q00 IM0 1wo0 TX0 1HB0 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0|81e4","Asia/Kabul|LMT +04 +0430|-4A.M -40 -4u|012|-3eLEA.M 2dTcA.M|46e5","Asia/Kamchatka|LMT +11 +12 +13|-ay.A -b0 -c0 -d0|012323232323232323232321232323232323232323232323232323232323212|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|18e4","Asia/Karachi|LMT +0530 +0630 +05 PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy00 1cL0 dK10 11b0 1610 1jX0|24e6","Asia/Urumqi|LMT +06|-5O.k -60|01|-1GgtO.k|32e5","Asia/Kathmandu|LMT +0530 +0545|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g|12e5","Asia/Khandyga|LMT +08 +09 +10 +11|-92.d -80 -90 -a0 -b0|0123232323232323232323212323232323232323232323232343434343434343432|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|66e2","Asia/Krasnoyarsk|LMT +06 +07 +08|-6b.q -60 -70 -80|01232323232323232323232123232323232323232323232323232323232323232|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|10e5","Asia/Kuala_Lumpur|LMT SMT +07 +0720 +0730 +09 +08|-6T.p -6T.p -70 -7k -7u -90 -80|01234546|-2M0ST.p aIM0 17anT.p l5XE 17bO 8Fyu 1so10|71e5","Asia/Macau|LMT CST +09 +10 CDT|-7y.a -80 -90 -a0 -90|012323214141414141414141414141414141414141414141414141414141414141414141|-2CFHy.a 1uqKy.a PX0 1kn0 15B0 11b0 4Qq0 1oM0 11c0 1ko0 1u00 11A0 1cM0 11c0 1o00 11A0 1o00 11A0 1oo0 1400 1o00 11A0 1o00 U00 1tA0 U00 1wo0 Rc0 1wru U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cK0 1cO0 1cK0 1cO0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0|57e4","Asia/Magadan|LMT +10 +11 +12|-a3.c -a0 -b0 -c0|012323232323232323232321232323232323232323232323232323232323232312|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Cq0|95e3","Asia/Makassar|LMT MMT +08 +09 WITA|-7V.A -7V.A -80 -90 -80|01234|-21JjV.A vfc0 myLV.A 8ML0|15e5","Asia/Manila|LMT LMT PST PDT JST|fU.8 -83.Q -80 -90 -90|012323432323232|-54m83.Q 2d8A3.Q 1urM0 un0 bW10 nb0 7qo0 1MM0 klB0 lz0 TwN0 1bb0 uNB0 rz0|24e6","Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|32e4","Asia/Novokuznetsk|LMT +06 +07 +08|-5M.M -60 -70 -80|012323232323232323232321232323232323232323232323232323232323212|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|55e4","Asia/Novosibirsk|LMT +06 +07 +08|-5v.E -60 -70 -80|0123232323232323232323212323212121212121212121212121212121212121212|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 4eN0|15e5","Asia/Omsk|LMT +05 +06 +07|-4R.u -50 -60 -70|01232323232323232323232123232323232323232323232323232323232323232|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|12e5","Asia/Oral|LMT +03 +05 +06 +04|-3p.o -30 -50 -60 -40|01232323232323232424242424242424242424242424242|-1Pc3p.o eUop.o 23CK0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 1cM0 IM0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0|27e4","Asia/Pontianak|LMT PMT +0730 +09 +08 WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu|23e4","Asia/Pyongyang|LMT KST JST KST|-8n -8u -90 -90|012313|-2um8n 97XR 1lTzu 2Onc0 6BA0|29e5","Asia/Qostanay|LMT +04 +05 +06|-4e.s -40 -50 -60|0123232323232323232321232323232323232323232323232|-1Pc4e.s eUoe.s 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 Mv90|","Asia/Qyzylorda|LMT +04 +05 +06|-4l.Q -40 -50 -60|01232323232323232323232323232323232323232323232|-1Pc4l.Q eUol.Q 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3ao0 1EM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 zQl0|73e4","Asia/Rangoon|LMT RMT +0630 +09|-6o.L -6o.L -6u -90|01232|-3D8So.L 1BnA0 SmnS.L 7j9u|48e5","Asia/Sakhalin|LMT +09 +11 +12 +10|-9u.M -90 -b0 -c0 -a0|01232323232323232323232423232323232424242424242424242424242424242|-2AGVu.M 1BoMu.M 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 2pB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|58e4","Asia/Samarkand|LMT +04 +05 +06|-4r.R -40 -50 -60|01232323232323232323232|-1Pc4r.R eUor.R 23CL0 3Db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0|36e4","Asia/Seoul|LMT KST JST KST KDT KDT|-8r.Q -8u -90 -90 -a0 -9u|012343434343151515151515134343|-2um8r.Q 97XV.Q 1m1zu 6CM0 Fz0 1kN0 14n0 1kN0 14L0 1zd0 On0 69B0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0|23e6","Asia/Srednekolymsk|LMT +10 +11 +12|-ae.Q -a0 -b0 -c0|01232323232323232323232123232323232323232323232323232323232323232|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|35e2","Asia/Taipei|LMT CST JST CDT|-86 -80 -90 -90|012131313131313131313131313131313131313131|-30bk6 1FDc6 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0|74e5","Asia/Tashkent|LMT +05 +06 +07|-4B.b -50 -60 -70|012323232323232323232321|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0|23e5","Asia/Tbilisi|LMT TBMT +03 +04 +05|-2X.b -2X.b -30 -40 -50|01234343434343434343434323232343434343434343434323|-3D8OX.b 1LUM0 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cK0 1cL0 1cN0 1cL0 1cN0 2pz0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0|11e5","Asia/Tehran|LMT TMT +0330 +0430 +04 +05|-3p.I -3p.I -3u -4u -40 -50|012345423232323232323232323232323232323232323232323232323232323232323232|-2btDp.I Llc0 1FHaT.I 1pc0 120u Rc0 Dc0 1iMu JX0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0|14e6","Asia/Thimphu|LMT +0530 +06|-5W.A -5u -60|012|-Su5W.A 1BGMs.A|79e3","Asia/Tokyo|LMT JST JDT|-9i.X -90 -a0|0121212121|-3jE90 2qSo0 Rc0 1lc0 14o0 1zc0 Oo0 1zc0 Oo0|38e6","Asia/Tomsk|LMT +06 +07 +08|-5D.P -60 -70 -80|0123232323232323232323212323232323232323232323212121212121212121212|-21NhD.P pxzD.P 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 co0 1bB0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3Qp0|10e5","Asia/Ust-Nera|LMT +08 +09 +12 +11 +10|-9w.S -80 -90 -c0 -b0 -a0|012343434343434343434345434343434343434343434343434343434343434345|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0|65e2","Asia/Vladivostok|LMT +09 +10 +11|-8L.v -90 -a0 -b0|01232323232323232323232123232323232323232323232323232323232323232|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|60e4","Asia/Yakutsk|LMT +08 +09 +10|-8C.W -80 -90 -a0|01232323232323232323232123232323232323232323232323232323232323232|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|28e4","Asia/Yekaterinburg|LMT PMT +04 +05 +06|-42.x -3J.5 -40 -50 -60|012343434343434343434343234343434343434343434343434343434343434343|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|14e5","Asia/Yerevan|LMT +03 +04 +05|-2W -30 -40 -50|0123232323232323232323212121212323232323232323232323232323232|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2pB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 4RX0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0|13e5","Atlantic/Azores|LMT HMT -02 -01 +00 WET WEST|1G.E 1S.w 20 10 0 0 -10|012323232323232323232323232323232323232323232343234323432343232323232323232323232323232323232323232323434343434343434343434356434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3tomh.k 18aoh.k aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 CT90 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 Ap0 An0 wo0 Eo0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|25e4","Atlantic/Bermuda|LMT BMT BST AST ADT|4j.i 4j.i 3j.i 40 30|0121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3eLvE.G 16mo0 1bb0 1i10 11X0 ru30 thbE.G 1PX0 11B0 1tz0 Rd0 1zb0 Op0 1zb0 3I10 Lz0 1EN0 FX0 1HB0 FX0 1Kp0 Db0 1Kp0 Db0 1Kp0 FX0 93d0 11z0 GAp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0|65e3","Atlantic/Canary|LMT -01 WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Atlantic/Cape_Verde|LMT -02 -01|1y.4 20 10|01212|-2ldW0 1eEo0 7zX0 1djf0|50e4","Atlantic/Faroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|49e3","Atlantic/Madeira|LMT FMT -01 +00 +01 WET WEST|17.A 17.A 10 0 -10 0 -10|01232323232323232323232323232323232323232323234323432343234323232323232323232323232323232323232323232356565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-3tomQ.o 18anQ.o aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 BJ90 1a00 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e4","Atlantic/South_Georgia|LMT -02|2q.8 20|01|-3eLxx.Q|30","Atlantic/Stanley|LMT SMT -04 -03 -02|3P.o 3P.o 40 30 20|0123232323232323434323232323232323232323232323232323232323232323232323|-3eLw8.A S200 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 2mN0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10|21e2","Australia/Sydney|LMT AEST AEDT|-a4.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oW4.Q RlC4.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|40e5","Australia/Adelaide|LMT ACST ACST ACDT|-9e.k -90 -9u -au|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-32oVe.k ak0e.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|11e5","Australia/Brisbane|LMT AEST AEDT|-ac.8 -a0 -b0|012121212121212121|-32Bmc.8 Ry2c.8 xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0|20e5","Australia/Broken_Hill|LMT AEST ACST ACST ACDT|-9p.M -a0 -90 -9u -au|0123434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-32oVp.M 3Lzp.M 6wp0 H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|18e3","Australia/Hobart|LMT AEST AEDT|-9N.g -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-3109N.g Pk1N.g 1a00 1qM0 Oo0 1zc0 Oo0 TAo0 yM0 1cM0 1cM0 1fA0 1a00 VfA0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|21e4","Australia/Darwin|LMT ACST ACST ACDT|-8H.k -90 -9u -au|01232323232|-32oUH.k ajXH.k H1Bu xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00|12e4","Australia/Eucla|LMT +0845 +0945|-8z.s -8J -9J|01212121212121212121|-30nIz.s PkpO.s xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|368","Australia/Lord_Howe|LMT AEST +1030 +1130 +11|-aA.k -a0 -au -bu -b0|01232323232424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-32oWA.k 3tzAA.k 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu|347","Australia/Lindeman|LMT AEST AEDT|-9T.U -a0 -b0|0121212121212121212121|-32BlT.U Ry1T.U xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0|10","Australia/Melbourne|LMT AEST AEDT|-9D.Q -a0 -b0|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-32oVD.Q RlBD.Q xc0 10jc0 yM0 1cM0 1cM0 1fA0 1a00 17c00 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|39e5","Australia/Perth|LMT AWST AWDT|-7H.o -80 -90|01212121212121212121|-30nHH.o PkpH.o xc0 10jc0 yM0 1cM0 1cM0 1gSo0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0|18e5","Europe/Brussels|LMT BMT WET CET CEST WEST|-h.u -h.u 0 -10 -20 -10|012343434325252525252525252525252525252525252525252525434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8Mh.u u1Ah.u SO00 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|21e5","Pacific/Easter|LMT EMT -07 -06 -05|7h.s 7h.s 70 60 50|0123232323232323232323232323234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-3eLsG.w 1HRc0 1s4IG.w WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 2pA0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1o10 11z0 1qN0 WL0 1fB0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 46n0 Ap0 1Nb0 Ap0 1Nb0 Ap0 1zb0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0|30e2","Europe/Athens|LMT AMT EET EEST CEST CET|-1y.Q -1y.Q -20 -30 -20 -10|0123234545232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-30SNy.Q OMM1 CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|35e5","Europe/Dublin|LMT DMT IST GMT BST IST|p.l p.l -y.D 0 -10 -10|012343434343435353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353535353|-3BHby.D 1ra20 Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g600 14o0 1wo0 17c0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Etc/GMT-0|GMT|0|0||","Etc/GMT-1|+01|-10|0||","Etc/GMT-10|+10|-a0|0||","Etc/GMT-11|+11|-b0|0||","Etc/GMT-12|+12|-c0|0||","Etc/GMT-13|+13|-d0|0||","Etc/GMT-14|+14|-e0|0||","Etc/GMT-2|+02|-20|0||","Etc/GMT-3|+03|-30|0||","Etc/GMT-4|+04|-40|0||","Etc/GMT-5|+05|-50|0||","Etc/GMT-6|+06|-60|0||","Etc/GMT-7|+07|-70|0||","Etc/GMT-8|+08|-80|0||","Etc/GMT-9|+09|-90|0||","Etc/GMT+1|-01|10|0||","Etc/GMT+10|-10|a0|0||","Etc/GMT+11|-11|b0|0||","Etc/GMT+12|-12|c0|0||","Etc/GMT+2|-02|20|0||","Etc/GMT+3|-03|30|0||","Etc/GMT+4|-04|40|0||","Etc/GMT+5|-05|50|0||","Etc/GMT+6|-06|60|0||","Etc/GMT+7|-07|70|0||","Etc/GMT+8|-08|80|0||","Etc/GMT+9|-09|90|0||","Etc/UTC|UTC|0|0||","Europe/Andorra|LMT WET CET CEST|-6.4 0 -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2M0M6.4 1Pnc6.4 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|79e3","Europe/Astrakhan|LMT +03 +04 +05|-3c.c -30 -40 -50|012323232323232323212121212121212121212121212121212121212121212|-1Pcrc.c eUMc.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|10e5","Europe/London|LMT GMT BST BDST|1.f 0 -10 -20|01212121212121212121212121212121212121212121212121232323232321212321212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-4VgnW.J 2KHdW.J Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|10e6","Europe/Belgrade|LMT CET CEST|-1m -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3topm 2juLm 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Prague|LMT PMT CET CEST GMT|-V.I -V.I -10 -20 0|0123232323232323232423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4QbAV.I 1FDc0 XPaV.I 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 1qM0 11c0 mp0 xA0 mn0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|13e5","Europe/Bucharest|LMT BMT EET EEST|-1I.o -1I.o -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3awpI.o 1AU00 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|19e5","Europe/Budapest|LMT CET CEST|-1g.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-3cK1g.k 124Lg.k 11d0 1iO0 11A0 1o00 11A0 1oo0 11c0 1lc0 17c0 O1V0 3Nf0 WM0 1fA0 1cM0 1cM0 1oJ0 1dd0 1020 1fX0 1cp0 1cM0 1cM0 1cM0 1fA0 1a00 bhy0 Rb0 1wr0 Rc0 1C00 LA0 1C00 LA0 SNW0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cO0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Europe/Zurich|LMT BMT CET CEST|-y.8 -t.K -10 -20|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4HyMy.8 1Dw04.m 1SfAt.K 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|38e4","Europe/Chisinau|LMT CMT BMT EET EEST CEST CET MSK MSD|-1T.k -1T -1I.o -20 -30 -20 -10 -30 -40|0123434343434343434345656578787878787878787878434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-3D8NT.k 1wNA0.k wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 gL0 WO0 1cM0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11D0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|67e4","Europe/Gibraltar|LMT GMT BST BDST CET CEST|l.o 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123232323232121232121212121212121212145454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-3BHbC.A 1ra1C.A Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|30e3","Europe/Helsinki|LMT HMT EET EEST|-1D.N -1D.N -20 -30|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3H0ND.N 1Iu00 OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Kaliningrad|LMT CET CEST EET EEST MSK MSD +03|-1m -10 -20 -20 -30 -30 -40 -30|012121212121212343565656565656565654343434343434343434343434343434343434343434373|-36Rdm UbXm 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 390 7A0 1en0 12N0 1pbb0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|44e4","Europe/Kiev|LMT KMT EET MSK CEST CET MSD EEST|-22.4 -22.4 -20 -30 -20 -10 -40 -30|01234545363636363636363636367272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-3D8O2.4 1LUM0 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o10 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|34e5","Europe/Kirov|LMT +03 +04 +05 MSD MSK MSK|-3i.M -30 -40 -50 -40 -30 -40|0123232323232323232454524545454545454545454545454545454545454565|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|48e4","Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121212124121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2le00 aPX0 Sp0 M00 1vb0 SN0 1vb0 SN0 1vb0 Td0 1vb0 SN0 1vb0 6600 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1uo0 1c00 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 oiK0 1cM0 1cM0 1fB0 1cM0 1cM0 1cM0 1fA0 1a00 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|27e5","Europe/Madrid|LMT WET WEST WEMT CET CEST|e.I 0 -10 -20 -10 -20|0121212121212121212321454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2M0M0 G5z0 19B0 1cL0 1dd0 b1z0 18p0 3HX0 17d0 1fz0 1a10 1io0 1a00 1in0 17d0 iIn0 Hd0 1cL0 bb0 1200 2s20 14n0 5aL0 Mp0 1vz0 17d0 1in0 17d0 1in0 17d0 1in0 17d0 6hX0 11B0 XHX0 1a10 1fz0 1a10 19X0 1cN0 1fz0 1a10 1fC0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|62e5","Europe/Malta|LMT CET CEST|-W.4 -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-35rcW.4 SXzW.4 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1co0 17c0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1co0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Minsk|LMT MMT EET MSK CEST CET MSD EEST +03|-1O.g -1O -20 -30 -20 -10 -40 -30 -30|012345454363636363636363636372727272727272727272727272727272727272728|-3D8NO.g 1LUM0.g eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0|19e5","Europe/Paris|LMT PMT WET WEST CEST CET WEMT|-9.l -9.l 0 -10 -20 -10 -20|01232323232323232323232323232323232323232323232323234545463654545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-3bQ09.l MDA0 cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|11e6","Europe/Moscow|LMT MMT MMT MST MDST MSD MSK +05 EET EEST MSK|-2u.h -2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|01232434565756865656565656565656565698656565656565656565656565656565656565656a6|-3D8Ou.h 1sQM0 2pyW.W 1bA0 11X0 GN0 1Hb0 c4v.j ik0 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0|16e6","Europe/Riga|LMT RMT LST EET MSK CEST CET MSD EEST|-1A.y -1A.y -2A.y -20 -30 -20 -10 -40 -30|0121213456565647474747474747474838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383838383|-3D8NA.y 1xde0 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|64e4","Europe/Rome|LMT RMT CET CEST|-N.U -N.U -10 -20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-4aU0N.U 15snN.U T000 Lz0 1cN0 1db0 1410 1on0 Wp0 1qL0 17d0 1cL0 M3B0 5M20 WM0 1fA0 1cM0 16M0 1iM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 LA0 1C00 LA0 1EM0 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1C00 LA0 1zc0 Oo0 1C00 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|39e5","Europe/Samara|LMT +03 +04 +05|-3k.k -30 -40 -50|0123232323232323232121232323232323232323232323232323232323212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2y10 14m0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 2sp0 WM0|12e5","Europe/Saratov|LMT +03 +04 +05|-34.i -30 -40 -50|012323232323232321212121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1cM0 1cM0 1fA0 1cM0 3Co0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 5810|","Europe/Simferopol|LMT SMT EET MSK CEST CET MSD EEST MSK|-2g.o -2g -20 -30 -20 -10 -40 -30 -40|0123454543636363636363636363272727636363727272727272727272727272727272727283|-3D8Og.o 1LUM0.o eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eN0 1cM0 1cM0 1cM0 1cM0 dV0 WO0 1cM0 1cM0 1fy0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0|33e4","Europe/Sofia|LMT IMT EET CET CEST EEST|-1x.g -1U.U -20 -10 -20 -30|0123434325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-3D8Nx.g AiLA.k 1UFeU.U WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|12e5","Europe/Tallinn|LMT TMT CET CEST EET MSK MSD EEST|-1D -1D -10 -20 -20 -30 -40 -30|0123214532323565656565656565657474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474747474|-3D8ND 1wI00 teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|41e4","Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|42e4","Europe/Ulyanovsk|LMT +03 +04 +05 +02|-3d.A -30 -40 -50 -20|01232323232323232321214121212121212121212121212121212121212121212|-22WM0 qH90 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 2pB0 1cM0 1fA0 2pB0 IM0 rX0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 3rd0|13e5","Europe/Vienna|LMT CET CEST|-15.l -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-36Rd5.l UbX5.l 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1ao0 1co0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|18e5","Europe/Vilnius|LMT WMT KMT CET EET MSK CEST MSD EEST|-1F.g -1o -1z.A -10 -20 -30 -20 -40 -30|0123435636365757575757575757584848484848484848463648484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484848484|-3D8NF.g 1u5Ah.g 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|54e4","Europe/Volgograd|LMT +03 +04 +05 MSD MSK MSK|-2V.E -30 -40 -50 -40 -30 -40|012323232323232324545452454545454545454545454545454545454545456525|-21IqV.E psLV.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1fA0 1cM0 2pz0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0 9Jd0 5gn0|10e5","Europe/Warsaw|LMT WMT CET CEST EET EEST|-1o -1o -10 -20 -20 -30|0123232345423232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-3D8No 1qDA0 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00|17e5","Pacific/Honolulu|LMT HST HDT HWT HPT HST|av.q au 9u 9u 9u a0|01213415|-3061s.y 1uMdW.y 8x0 lef0 8wWu iAu 46p0|37e4","Indian/Chagos|LMT +05 +06|-4N.E -50 -60|012|-2xosN.E 3AGLN.E|30e2","Indian/Maldives|LMT MMT +05|-4S -4S -50|012|-3D8QS 3eLA0|35e4","Indian/Mauritius|LMT +04 +05|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0|15e4","Pacific/Kwajalein|LMT +11 +10 +09 -12 +12|-b9.k -b0 -a0 -90 c0 -c0|0123145|-2M0X9.k 1rDA9.k akp0 6Up0 12ry0 Wan0|14e3","Pacific/Chatham|LMT +1215 +1245 +1345|-cd.M -cf -cJ -dJ|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-46jMd.M 37RbW.M 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00|600","Pacific/Apia|LMT LMT -1130 -11 -10 +14 +13|-cx.4 bq.U bu b0 a0 -e0 -d0|012343456565656565656565656|-38Fox.4 J1A0 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0|37e3","Pacific/Bougainville|LMT PMMT +10 +09 +11|-am.g -9M.w -a0 -90 -b0|012324|-3D8Wm.g AvAx.I 1TCLM.w 7CN0 2MQp0|18e4","Pacific/Efate|LMT +11 +12|-bd.g -b0 -c0|012121212121212121212121|-2l9nd.g 2uNXd.g Dc0 n610 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0|66e3","Pacific/Enderbury|-00 -12 -11 +13|0 c0 b0 -d0|0123|-1iIo0 1GsA0 B7X0|1","Pacific/Fakaofo|LMT -11 +13|bo.U b0 -d0|012|-2M0Az.4 4ufXz.4|483","Pacific/Fiji|LMT +12 +13|-bT.I -c0 -d0|012121212121212121212121212121|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 uM0 1VA0 s00 1VA0 s00 1VA0 s00 20o0 pc0 2hc0 bc0|88e4","Pacific/Tarawa|LMT +12|-bw.4 -c0|01|-2M0Xw.4|29e3","Pacific/Galapagos|LMT -05 -06|5W.o 50 60|01212|-1yVS1.A 2dTz1.A gNd0 rz0|25e3","Pacific/Gambier|LMT -09|8X.M 90|01|-2jof0.c|125","Pacific/Guadalcanal|LMT +11|-aD.M -b0|01|-2joyD.M|11e4","Pacific/Guam|LMT LMT GST +09 GDT ChST|el -9D -a0 -90 -b0 -a0|0123242424242424242425|-54m9D 2glc0 1DFbD 6pB0 AhB0 3QL0 g2p0 3p91 WOX rX0 1zd0 Rb0 1wp0 Rb0 5xd0 rX0 5sN0 zb1 1C0X On0 ULb0|17e4","Pacific/Kiritimati|LMT -1040 -10 +14|at.k aE a0 -e0|0123|-2M0Bu.E 3bIMa.E B7Xk|51e2","Pacific/Kosrae|LMT LMT +11 +09 +10 +12|d8.4 -aP.U -b0 -90 -a0 -c0|0123243252|-54maP.U 2glc0 xsnP.U axC0 HBy0 akp0 axd0 WOK0 1bdz0|66e2","Pacific/Marquesas|LMT -0930|9i 9u|01|-2joeG|86e2","Pacific/Pago_Pago|LMT LMT SST|-cB.c bm.M b0|012|-38FoB.c J1A0|37e2","Pacific/Nauru|LMT +1130 +09 +12|-b7.E -bu -90 -c0|01213|-1Xdn7.E QCnB.E 7mqu 1lnbu|10e3","Pacific/Niue|LMT -1120 -11|bj.E bk b0|012|-FScE.k suo0.k|12e2","Pacific/Norfolk|LMT +1112 +1130 +1230 +11 +12|-bb.Q -bc -bu -cu -b0 -c0|0123245454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2M0Xb.Q 21ILX.Q W01G Oo0 1COo0 9Jcu 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0|25e4","Pacific/Noumea|LMT +11 +12|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0|98e3","Pacific/Palau|LMT LMT +09|f2.4 -8V.U -90|012|-54m8V.U 2glc0|21e3","Pacific/Pitcairn|LMT -0830 -08|8E.k 8u 80|012|-2M0Dj.E 3UVXN.E|56","Pacific/Rarotonga|LMT LMT -1030 -0930 -10|-dk.U aD.4 au 9u a0|01234343434343434343434343434|-2Otpk.U 28zc0 13tbO.U IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu|13e3","Pacific/Tahiti|LMT -10|9W.g a0|01|-2joe1.I|18e4","Pacific/Tongatapu|LMT +1220 +13 +14|-cj.c -ck -d0 -e0|01232323232|-XbMj.c BgLX.c 1yndk 15A0 1wo0 xz0 1Q10 xz0 zWN0 s00|75e3"],links:["Africa/Abidjan|Africa/Accra","Africa/Abidjan|Africa/Bamako","Africa/Abidjan|Africa/Banjul","Africa/Abidjan|Africa/Conakry","Africa/Abidjan|Africa/Dakar","Africa/Abidjan|Africa/Freetown","Africa/Abidjan|Africa/Lome","Africa/Abidjan|Africa/Nouakchott","Africa/Abidjan|Africa/Ouagadougou","Africa/Abidjan|Africa/Timbuktu","Africa/Abidjan|Atlantic/Reykjavik","Africa/Abidjan|Atlantic/St_Helena","Africa/Abidjan|Iceland","Africa/Cairo|Egypt","Africa/Johannesburg|Africa/Maseru","Africa/Johannesburg|Africa/Mbabane","Africa/Lagos|Africa/Bangui","Africa/Lagos|Africa/Brazzaville","Africa/Lagos|Africa/Douala","Africa/Lagos|Africa/Kinshasa","Africa/Lagos|Africa/Libreville","Africa/Lagos|Africa/Luanda","Africa/Lagos|Africa/Malabo","Africa/Lagos|Africa/Niamey","Africa/Lagos|Africa/Porto-Novo","Africa/Maputo|Africa/Blantyre","Africa/Maputo|Africa/Bujumbura","Africa/Maputo|Africa/Gaborone","Africa/Maputo|Africa/Harare","Africa/Maputo|Africa/Kigali","Africa/Maputo|Africa/Lubumbashi","Africa/Maputo|Africa/Lusaka","Africa/Nairobi|Africa/Addis_Ababa","Africa/Nairobi|Africa/Asmara","Africa/Nairobi|Africa/Asmera","Africa/Nairobi|Africa/Dar_es_Salaam","Africa/Nairobi|Africa/Djibouti","Africa/Nairobi|Africa/Kampala","Africa/Nairobi|Africa/Mogadishu","Africa/Nairobi|Indian/Antananarivo","Africa/Nairobi|Indian/Comoro","Africa/Nairobi|Indian/Mayotte","Africa/Tripoli|Libya","America/Adak|America/Atka","America/Adak|US/Aleutian","America/Anchorage|US/Alaska","America/Argentina/Buenos_Aires|America/Buenos_Aires","America/Argentina/Catamarca|America/Argentina/ComodRivadavia","America/Argentina/Catamarca|America/Catamarca","America/Argentina/Cordoba|America/Cordoba","America/Argentina/Cordoba|America/Rosario","America/Argentina/Jujuy|America/Jujuy","America/Argentina/Mendoza|America/Mendoza","America/Chicago|CST6CDT","America/Chicago|US/Central","America/Denver|America/Shiprock","America/Denver|MST7MDT","America/Denver|Navajo","America/Denver|US/Mountain","America/Detroit|US/Michigan","America/Edmonton|America/Yellowknife","America/Edmonton|Canada/Mountain","America/Fort_Wayne|America/Indiana/Indianapolis","America/Fort_Wayne|America/Indianapolis","America/Fort_Wayne|US/East-Indiana","America/Godthab|America/Nuuk","America/Halifax|Canada/Atlantic","America/Havana|Cuba","America/Indiana/Knox|America/Knox_IN","America/Indiana/Knox|US/Indiana-Starke","America/Iqaluit|America/Pangnirtung","America/Jamaica|Jamaica","America/Kentucky/Louisville|America/Louisville","America/Los_Angeles|PST8PDT","America/Los_Angeles|US/Pacific","America/Manaus|Brazil/West","America/Mazatlan|Mexico/BajaSur","America/Mexico_City|Mexico/General","America/New_York|EST5EDT","America/New_York|US/Eastern","America/Noronha|Brazil/DeNoronha","America/Panama|America/Atikokan","America/Panama|America/Cayman","America/Panama|America/Coral_Harbour","America/Panama|EST","America/Phoenix|America/Creston","America/Phoenix|MST","America/Phoenix|US/Arizona","America/Puerto_Rico|America/Anguilla","America/Puerto_Rico|America/Antigua","America/Puerto_Rico|America/Aruba","America/Puerto_Rico|America/Blanc-Sablon","America/Puerto_Rico|America/Curacao","America/Puerto_Rico|America/Dominica","America/Puerto_Rico|America/Grenada","America/Puerto_Rico|America/Guadeloupe","America/Puerto_Rico|America/Kralendijk","America/Puerto_Rico|America/Lower_Princes","America/Puerto_Rico|America/Marigot","America/Puerto_Rico|America/Montserrat","America/Puerto_Rico|America/Port_of_Spain","America/Puerto_Rico|America/St_Barthelemy","America/Puerto_Rico|America/St_Kitts","America/Puerto_Rico|America/St_Lucia","America/Puerto_Rico|America/St_Thomas","America/Puerto_Rico|America/St_Vincent","America/Puerto_Rico|America/Tortola","America/Puerto_Rico|America/Virgin","America/Regina|Canada/Saskatchewan","America/Rio_Branco|America/Porto_Acre","America/Rio_Branco|Brazil/Acre","America/Santiago|Chile/Continental","America/Sao_Paulo|Brazil/East","America/St_Johns|Canada/Newfoundland","America/Tijuana|America/Ensenada","America/Tijuana|America/Santa_Isabel","America/Tijuana|Mexico/BajaNorte","America/Toronto|America/Montreal","America/Toronto|America/Nassau","America/Toronto|America/Nipigon","America/Toronto|America/Thunder_Bay","America/Toronto|Canada/Eastern","America/Vancouver|Canada/Pacific","America/Whitehorse|Canada/Yukon","America/Winnipeg|America/Rainy_River","America/Winnipeg|Canada/Central","Asia/Ashgabat|Asia/Ashkhabad","Asia/Bangkok|Asia/Phnom_Penh","Asia/Bangkok|Asia/Vientiane","Asia/Bangkok|Indian/Christmas","Asia/Brunei|Asia/Kuching","Asia/Dhaka|Asia/Dacca","Asia/Dubai|Asia/Muscat","Asia/Dubai|Indian/Mahe","Asia/Dubai|Indian/Reunion","Asia/Ho_Chi_Minh|Asia/Saigon","Asia/Hong_Kong|Hongkong","Asia/Jerusalem|Asia/Tel_Aviv","Asia/Jerusalem|Israel","Asia/Kathmandu|Asia/Katmandu","Asia/Kolkata|Asia/Calcutta","Asia/Kuala_Lumpur|Asia/Singapore","Asia/Kuala_Lumpur|Singapore","Asia/Macau|Asia/Macao","Asia/Makassar|Asia/Ujung_Pandang","Asia/Nicosia|Europe/Nicosia","Asia/Qatar|Asia/Bahrain","Asia/Rangoon|Asia/Yangon","Asia/Rangoon|Indian/Cocos","Asia/Riyadh|Antarctica/Syowa","Asia/Riyadh|Asia/Aden","Asia/Riyadh|Asia/Kuwait","Asia/Seoul|ROK","Asia/Shanghai|Asia/Chongqing","Asia/Shanghai|Asia/Chungking","Asia/Shanghai|Asia/Harbin","Asia/Shanghai|PRC","Asia/Taipei|ROC","Asia/Tehran|Iran","Asia/Thimphu|Asia/Thimbu","Asia/Tokyo|Japan","Asia/Ulaanbaatar|Asia/Choibalsan","Asia/Ulaanbaatar|Asia/Ulan_Bator","Asia/Urumqi|Asia/Kashgar","Atlantic/Faroe|Atlantic/Faeroe","Australia/Adelaide|Australia/South","Australia/Brisbane|Australia/Queensland","Australia/Broken_Hill|Australia/Yancowinna","Australia/Darwin|Australia/North","Australia/Hobart|Australia/Currie","Australia/Hobart|Australia/Tasmania","Australia/Lord_Howe|Australia/LHI","Australia/Melbourne|Australia/Victoria","Australia/Perth|Australia/West","Australia/Sydney|Australia/ACT","Australia/Sydney|Australia/Canberra","Australia/Sydney|Australia/NSW","Etc/GMT-0|Etc/GMT","Etc/GMT-0|Etc/GMT+0","Etc/GMT-0|Etc/GMT0","Etc/GMT-0|Etc/Greenwich","Etc/GMT-0|GMT","Etc/GMT-0|GMT+0","Etc/GMT-0|GMT-0","Etc/GMT-0|GMT0","Etc/GMT-0|Greenwich","Etc/UTC|Etc/UCT","Etc/UTC|Etc/Universal","Etc/UTC|Etc/Zulu","Etc/UTC|UCT","Etc/UTC|UTC","Etc/UTC|Universal","Etc/UTC|Zulu","Europe/Athens|EET","Europe/Belgrade|Europe/Ljubljana","Europe/Belgrade|Europe/Podgorica","Europe/Belgrade|Europe/Sarajevo","Europe/Belgrade|Europe/Skopje","Europe/Belgrade|Europe/Zagreb","Europe/Berlin|Arctic/Longyearbyen","Europe/Berlin|Atlantic/Jan_Mayen","Europe/Berlin|Europe/Copenhagen","Europe/Berlin|Europe/Oslo","Europe/Berlin|Europe/Stockholm","Europe/Brussels|CET","Europe/Brussels|Europe/Amsterdam","Europe/Brussels|Europe/Luxembourg","Europe/Brussels|MET","Europe/Chisinau|Europe/Tiraspol","Europe/Dublin|Eire","Europe/Helsinki|Europe/Mariehamn","Europe/Istanbul|Asia/Istanbul","Europe/Istanbul|Turkey","Europe/Kiev|Europe/Kyiv","Europe/Kiev|Europe/Uzhgorod","Europe/Kiev|Europe/Zaporozhye","Europe/Lisbon|Portugal","Europe/Lisbon|WET","Europe/London|Europe/Belfast","Europe/London|Europe/Guernsey","Europe/London|Europe/Isle_of_Man","Europe/London|Europe/Jersey","Europe/London|GB","Europe/London|GB-Eire","Europe/Moscow|W-SU","Europe/Paris|Europe/Monaco","Europe/Prague|Europe/Bratislava","Europe/Rome|Europe/San_Marino","Europe/Rome|Europe/Vatican","Europe/Warsaw|Poland","Europe/Zurich|Europe/Busingen","Europe/Zurich|Europe/Vaduz","Indian/Maldives|Indian/Kerguelen","Pacific/Auckland|Antarctica/McMurdo","Pacific/Auckland|Antarctica/South_Pole","Pacific/Auckland|NZ","Pacific/Chatham|NZ-CHAT","Pacific/Easter|Chile/EasterIsland","Pacific/Enderbury|Pacific/Kanton","Pacific/Guadalcanal|Pacific/Pohnpei","Pacific/Guadalcanal|Pacific/Ponape","Pacific/Guam|Pacific/Saipan","Pacific/Honolulu|HST","Pacific/Honolulu|Pacific/Johnston","Pacific/Honolulu|US/Hawaii","Pacific/Kwajalein|Kwajalein","Pacific/Pago_Pago|Pacific/Midway","Pacific/Pago_Pago|Pacific/Samoa","Pacific/Pago_Pago|US/Samoa","Pacific/Port_Moresby|Antarctica/DumontDUrville","Pacific/Port_Moresby|Pacific/Chuuk","Pacific/Port_Moresby|Pacific/Truk","Pacific/Port_Moresby|Pacific/Yap","Pacific/Tarawa|Pacific/Funafuti","Pacific/Tarawa|Pacific/Majuro","Pacific/Tarawa|Pacific/Wake","Pacific/Tarawa|Pacific/Wallis"],countries:["AD|Europe/Andorra","AE|Asia/Dubai","AF|Asia/Kabul","AG|America/Puerto_Rico America/Antigua","AI|America/Puerto_Rico America/Anguilla","AL|Europe/Tirane","AM|Asia/Yerevan","AO|Africa/Lagos Africa/Luanda","AQ|Antarctica/Casey Antarctica/Davis Antarctica/Mawson Antarctica/Palmer Antarctica/Rothera Antarctica/Troll Antarctica/Vostok Pacific/Auckland Pacific/Port_Moresby Asia/Riyadh Asia/Singapore Antarctica/McMurdo Antarctica/DumontDUrville Antarctica/Syowa","AR|America/Argentina/Buenos_Aires America/Argentina/Cordoba America/Argentina/Salta America/Argentina/Jujuy America/Argentina/Tucuman America/Argentina/Catamarca America/Argentina/La_Rioja America/Argentina/San_Juan America/Argentina/Mendoza America/Argentina/San_Luis America/Argentina/Rio_Gallegos America/Argentina/Ushuaia","AS|Pacific/Pago_Pago","AT|Europe/Vienna","AU|Australia/Lord_Howe Antarctica/Macquarie Australia/Hobart Australia/Melbourne Australia/Sydney Australia/Broken_Hill Australia/Brisbane Australia/Lindeman Australia/Adelaide Australia/Darwin Australia/Perth Australia/Eucla Asia/Tokyo","AW|America/Puerto_Rico America/Aruba","AX|Europe/Helsinki Europe/Mariehamn","AZ|Asia/Baku","BA|Europe/Belgrade Europe/Sarajevo","BB|America/Barbados","BD|Asia/Dhaka","BE|Europe/Brussels","BF|Africa/Abidjan Africa/Ouagadougou","BG|Europe/Sofia","BH|Asia/Qatar Asia/Bahrain","BI|Africa/Maputo Africa/Bujumbura","BJ|Africa/Lagos Africa/Porto-Novo","BL|America/Puerto_Rico America/St_Barthelemy","BM|Atlantic/Bermuda","BN|Asia/Kuching Asia/Brunei","BO|America/La_Paz","BQ|America/Puerto_Rico America/Kralendijk","BR|America/Noronha America/Belem America/Fortaleza America/Recife America/Araguaina America/Maceio America/Bahia America/Sao_Paulo America/Campo_Grande America/Cuiaba America/Santarem America/Porto_Velho America/Boa_Vista America/Manaus America/Eirunepe America/Rio_Branco","BS|America/Toronto America/Nassau","BT|Asia/Thimphu","BW|Africa/Maputo Africa/Gaborone","BY|Europe/Minsk","BZ|America/Belize","CA|America/St_Johns America/Halifax America/Glace_Bay America/Moncton America/Goose_Bay America/Toronto America/Iqaluit America/Winnipeg America/Resolute America/Rankin_Inlet America/Regina America/Swift_Current America/Edmonton America/Cambridge_Bay America/Inuvik America/Dawson_Creek America/Fort_Nelson America/Whitehorse America/Dawson America/Vancouver America/Panama America/Puerto_Rico America/Phoenix America/Blanc-Sablon America/Atikokan America/Creston","CC|Asia/Yangon Indian/Cocos","CD|Africa/Maputo Africa/Lagos Africa/Kinshasa Africa/Lubumbashi","CF|Africa/Lagos Africa/Bangui","CG|Africa/Lagos Africa/Brazzaville","CH|Europe/Zurich","CI|Africa/Abidjan","CK|Pacific/Rarotonga","CL|America/Santiago America/Coyhaique America/Punta_Arenas Pacific/Easter","CM|Africa/Lagos Africa/Douala","CN|Asia/Shanghai Asia/Urumqi","CO|America/Bogota","CR|America/Costa_Rica","CU|America/Havana","CV|Atlantic/Cape_Verde","CW|America/Puerto_Rico America/Curacao","CX|Asia/Bangkok Indian/Christmas","CY|Asia/Nicosia Asia/Famagusta","CZ|Europe/Prague","DE|Europe/Zurich Europe/Berlin Europe/Busingen","DJ|Africa/Nairobi Africa/Djibouti","DK|Europe/Berlin Europe/Copenhagen","DM|America/Puerto_Rico America/Dominica","DO|America/Santo_Domingo","DZ|Africa/Algiers","EC|America/Guayaquil Pacific/Galapagos","EE|Europe/Tallinn","EG|Africa/Cairo","EH|Africa/El_Aaiun","ER|Africa/Nairobi Africa/Asmara","ES|Europe/Madrid Africa/Ceuta Atlantic/Canary","ET|Africa/Nairobi Africa/Addis_Ababa","FI|Europe/Helsinki","FJ|Pacific/Fiji","FK|Atlantic/Stanley","FM|Pacific/Kosrae Pacific/Port_Moresby Pacific/Guadalcanal Pacific/Chuuk Pacific/Pohnpei","FO|Atlantic/Faroe","FR|Europe/Paris","GA|Africa/Lagos Africa/Libreville","GB|Europe/London","GD|America/Puerto_Rico America/Grenada","GE|Asia/Tbilisi","GF|America/Cayenne","GG|Europe/London Europe/Guernsey","GH|Africa/Abidjan Africa/Accra","GI|Europe/Gibraltar","GL|America/Nuuk America/Danmarkshavn America/Scoresbysund America/Thule","GM|Africa/Abidjan Africa/Banjul","GN|Africa/Abidjan Africa/Conakry","GP|America/Puerto_Rico America/Guadeloupe","GQ|Africa/Lagos Africa/Malabo","GR|Europe/Athens","GS|Atlantic/South_Georgia","GT|America/Guatemala","GU|Pacific/Guam","GW|Africa/Bissau","GY|America/Guyana","HK|Asia/Hong_Kong","HN|America/Tegucigalpa","HR|Europe/Belgrade Europe/Zagreb","HT|America/Port-au-Prince","HU|Europe/Budapest","ID|Asia/Jakarta Asia/Pontianak Asia/Makassar Asia/Jayapura","IE|Europe/Dublin","IL|Asia/Jerusalem","IM|Europe/London Europe/Isle_of_Man","IN|Asia/Kolkata","IO|Indian/Chagos","IQ|Asia/Baghdad","IR|Asia/Tehran","IS|Africa/Abidjan Atlantic/Reykjavik","IT|Europe/Rome","JE|Europe/London Europe/Jersey","JM|America/Jamaica","JO|Asia/Amman","JP|Asia/Tokyo","KE|Africa/Nairobi","KG|Asia/Bishkek","KH|Asia/Bangkok Asia/Phnom_Penh","KI|Pacific/Tarawa Pacific/Kanton Pacific/Kiritimati","KM|Africa/Nairobi Indian/Comoro","KN|America/Puerto_Rico America/St_Kitts","KP|Asia/Pyongyang","KR|Asia/Seoul","KW|Asia/Riyadh Asia/Kuwait","KY|America/Panama America/Cayman","KZ|Asia/Almaty Asia/Qyzylorda Asia/Qostanay Asia/Aqtobe Asia/Aqtau Asia/Atyrau Asia/Oral","LA|Asia/Bangkok Asia/Vientiane","LB|Asia/Beirut","LC|America/Puerto_Rico America/St_Lucia","LI|Europe/Zurich Europe/Vaduz","LK|Asia/Colombo","LR|Africa/Monrovia","LS|Africa/Johannesburg Africa/Maseru","LT|Europe/Vilnius","LU|Europe/Brussels Europe/Luxembourg","LV|Europe/Riga","LY|Africa/Tripoli","MA|Africa/Casablanca","MC|Europe/Paris Europe/Monaco","MD|Europe/Chisinau","ME|Europe/Belgrade Europe/Podgorica","MF|America/Puerto_Rico America/Marigot","MG|Africa/Nairobi Indian/Antananarivo","MH|Pacific/Tarawa Pacific/Kwajalein Pacific/Majuro","MK|Europe/Belgrade Europe/Skopje","ML|Africa/Abidjan Africa/Bamako","MM|Asia/Yangon","MN|Asia/Ulaanbaatar Asia/Hovd","MO|Asia/Macau","MP|Pacific/Guam Pacific/Saipan","MQ|America/Martinique","MR|Africa/Abidjan Africa/Nouakchott","MS|America/Puerto_Rico America/Montserrat","MT|Europe/Malta","MU|Indian/Mauritius","MV|Indian/Maldives","MW|Africa/Maputo Africa/Blantyre","MX|America/Mexico_City America/Cancun America/Merida America/Monterrey America/Matamoros America/Chihuahua America/Ciudad_Juarez America/Ojinaga America/Mazatlan America/Bahia_Banderas America/Hermosillo America/Tijuana","MY|Asia/Kuching Asia/Singapore Asia/Kuala_Lumpur","MZ|Africa/Maputo","NA|Africa/Windhoek","NC|Pacific/Noumea","NE|Africa/Lagos Africa/Niamey","NF|Pacific/Norfolk","NG|Africa/Lagos","NI|America/Managua","NL|Europe/Brussels Europe/Amsterdam","NO|Europe/Berlin Europe/Oslo","NP|Asia/Kathmandu","NR|Pacific/Nauru","NU|Pacific/Niue","NZ|Pacific/Auckland Pacific/Chatham","OM|Asia/Dubai Asia/Muscat","PA|America/Panama","PE|America/Lima","PF|Pacific/Tahiti Pacific/Marquesas Pacific/Gambier","PG|Pacific/Port_Moresby Pacific/Bougainville","PH|Asia/Manila","PK|Asia/Karachi","PL|Europe/Warsaw","PM|America/Miquelon","PN|Pacific/Pitcairn","PR|America/Puerto_Rico","PS|Asia/Gaza Asia/Hebron","PT|Europe/Lisbon Atlantic/Madeira Atlantic/Azores","PW|Pacific/Palau","PY|America/Asuncion","QA|Asia/Qatar","RE|Asia/Dubai Indian/Reunion","RO|Europe/Bucharest","RS|Europe/Belgrade","RU|Europe/Kaliningrad Europe/Moscow Europe/Simferopol Europe/Kirov Europe/Volgograd Europe/Astrakhan Europe/Saratov Europe/Ulyanovsk Europe/Samara Asia/Yekaterinburg Asia/Omsk Asia/Novosibirsk Asia/Barnaul Asia/Tomsk Asia/Novokuznetsk Asia/Krasnoyarsk Asia/Irkutsk Asia/Chita Asia/Yakutsk Asia/Khandyga Asia/Vladivostok Asia/Ust-Nera Asia/Magadan Asia/Sakhalin Asia/Srednekolymsk Asia/Kamchatka Asia/Anadyr","RW|Africa/Maputo Africa/Kigali","SA|Asia/Riyadh","SB|Pacific/Guadalcanal","SC|Asia/Dubai Indian/Mahe","SD|Africa/Khartoum","SE|Europe/Berlin Europe/Stockholm","SG|Asia/Singapore","SH|Africa/Abidjan Atlantic/St_Helena","SI|Europe/Belgrade Europe/Ljubljana","SJ|Europe/Berlin Arctic/Longyearbyen","SK|Europe/Prague Europe/Bratislava","SL|Africa/Abidjan Africa/Freetown","SM|Europe/Rome Europe/San_Marino","SN|Africa/Abidjan Africa/Dakar","SO|Africa/Nairobi Africa/Mogadishu","SR|America/Paramaribo","SS|Africa/Juba","ST|Africa/Sao_Tome","SV|America/El_Salvador","SX|America/Puerto_Rico America/Lower_Princes","SY|Asia/Damascus","SZ|Africa/Johannesburg Africa/Mbabane","TC|America/Grand_Turk","TD|Africa/Ndjamena","TF|Asia/Dubai Indian/Maldives Indian/Kerguelen","TG|Africa/Abidjan Africa/Lome","TH|Asia/Bangkok","TJ|Asia/Dushanbe","TK|Pacific/Fakaofo","TL|Asia/Dili","TM|Asia/Ashgabat","TN|Africa/Tunis","TO|Pacific/Tongatapu","TR|Europe/Istanbul","TT|America/Puerto_Rico America/Port_of_Spain","TV|Pacific/Tarawa Pacific/Funafuti","TW|Asia/Taipei","TZ|Africa/Nairobi Africa/Dar_es_Salaam","UA|Europe/Simferopol Europe/Kyiv","UG|Africa/Nairobi Africa/Kampala","UM|Pacific/Pago_Pago Pacific/Tarawa Pacific/Midway Pacific/Wake","US|America/New_York America/Detroit America/Kentucky/Louisville America/Kentucky/Monticello America/Indiana/Indianapolis America/Indiana/Vincennes America/Indiana/Winamac America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Vevay America/Chicago America/Indiana/Tell_City America/Indiana/Knox America/Menominee America/North_Dakota/Center America/North_Dakota/New_Salem America/North_Dakota/Beulah America/Denver America/Boise America/Phoenix America/Los_Angeles America/Anchorage America/Juneau America/Sitka America/Metlakatla America/Yakutat America/Nome America/Adak Pacific/Honolulu","UY|America/Montevideo","UZ|Asia/Samarkand Asia/Tashkent","VA|Europe/Rome Europe/Vatican","VC|America/Puerto_Rico America/St_Vincent","VE|America/Caracas","VG|America/Puerto_Rico America/Tortola","VI|America/Puerto_Rico America/St_Thomas","VN|Asia/Bangkok Asia/Ho_Chi_Minh","VU|Pacific/Efate","WF|Pacific/Tarawa Pacific/Wallis","WS|Pacific/Apia","YE|Asia/Riyadh Asia/Aden","YT|Africa/Nairobi Indian/Mayotte","ZA|Africa/Johannesburg","ZM|Africa/Maputo Africa/Lusaka","ZW|Africa/Maputo Africa/Harare"]}),M}),function(M,b){"use strict";var p;if("object"==typeof exports){try{p=require("moment")}catch(M){}module.exports=b(p)}else"function"==typeof define&&define.amd?define(function(M){try{p=M("moment")}catch(M){}return b(p)}):M.Pikaday=b(M.moment)}(this,function(M){"use strict";var b="function"==typeof M,p=!!window.addEventListener,e=window.document,o=window.setTimeout,z=function(M,b,e,o){p?M.addEventListener(b,e,!!o):M.attachEvent("on"+b,e)},t=function(M,b,e,o){p?M.removeEventListener(b,e,!!o):M.detachEvent("on"+b,e)},c=function(M,b){return-1!==(" "+M.className+" ").indexOf(" "+b+" ")},n=function(M,b){c(M,b)||(M.className=""===M.className?b:M.className+" "+b)},O=function(M,b){var p;M.className=(p=(" "+M.className+" ").replace(" "+b+" "," ")).trim?p.trim():p.replace(/^\s+|\s+$/g,"")},i=function(M){return/Array/.test(Object.prototype.toString.call(M))},r=function(M){return/Date/.test(Object.prototype.toString.call(M))&&!isNaN(M.getTime())},a=function(M){var b=M.getDay();return 0===b||6===b},s=function(M){return M%4==0&&M%100!=0||M%400==0},A=function(M,b){return[31,s(M)?29:28,31,30,31,30,31,31,30,31,30,31][b]},d=function(M){r(M)&&M.setHours(0,0,0,0)},l=function(M,b){return M.getTime()===b.getTime()},q=function(M,b,p){var e,o;for(e in b)(o=void 0!==M[e])&&"object"==typeof b[e]&&null!==b[e]&&void 0===b[e].nodeName?r(b[e])?p&&(M[e]=new Date(b[e].getTime())):i(b[e])?p&&(M[e]=b[e].slice(0)):M[e]=q({},b[e],p):!p&&o||(M[e]=b[e]);return M},u=function(M,b,p){var o;e.createEvent?((o=e.createEvent("HTMLEvents")).initEvent(b,!0,!1),o=q(o,p),M.dispatchEvent(o)):e.createEventObject&&(o=e.createEventObject(),o=q(o,p),M.fireEvent("on"+b,o))},f=function(M){return M.month<0&&(M.year-=Math.ceil(Math.abs(M.month)/12),M.month+=12),M.month>11&&(M.year+=Math.floor(Math.abs(M.month)/12),M.month-=12),M},W={field:null,bound:void 0,ariaLabel:"Use the arrow keys to pick a date",position:"bottom left",reposition:!0,format:"YYYY-MM-DD",toString:null,parse:null,defaultDate:null,setDefaultDate:!1,firstDay:0,firstWeekOfYearMinDays:4,formatStrict:!1,minDate:null,maxDate:null,yearRange:10,showWeekNumber:!1,pickWholeWeek:!1,minYear:0,maxYear:9999,minMonth:void 0,maxMonth:void 0,startRange:null,endRange:null,isRTL:!1,yearSuffix:"",showMonthAfterYear:!1,showDaysInNextAndPreviousMonths:!1,enableSelectionDaysInNextAndPreviousMonths:!1,numberOfMonths:1,mainCalendar:"left",container:void 0,blurFieldOnSelect:!0,i18n:{previousMonth:"Previous Month",nextMonth:"Next Month",months:["January","February","March","April","May","June","July","August","September","October","November","December"],weekdays:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],weekdaysShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]},theme:null,events:[],onSelect:null,onOpen:null,onClose:null,onDraw:null,keyboardInput:!0},h=function(M,b,p){for(b+=M.firstDay;b>=7;)b-=7;return p?M.i18n.weekdaysShort[b]:M.i18n.weekdays[b]},R=function(M){var b=[],p="false";if(M.isEmpty){if(!M.showDaysInNextAndPreviousMonths)return'<td class="is-empty"></td>';b.push("is-outside-current-month"),M.enableSelectionDaysInNextAndPreviousMonths||b.push("is-selection-disabled")}return M.isDisabled&&b.push("is-disabled"),M.isToday&&b.push("is-today"),M.isSelected&&(b.push("is-selected"),p="true"),M.hasEvent&&b.push("has-event"),M.isInRange&&b.push("is-inrange"),M.isStartRange&&b.push("is-startrange"),M.isEndRange&&b.push("is-endrange"),'<td data-day="'+M.day+'" class="'+b.join(" ")+'" aria-selected="'+p+'"><button class="pika-button pika-day" type="button" data-pika-year="'+M.year+'" data-pika-month="'+M.month+'" data-pika-day="'+M.day+'">'+M.day+"</button></td>"},m=function(p,e,o,z){var t=new Date(o,e,p),c=b?M(t).isoWeek():function(M,b){M.setHours(0,0,0,0);var p=M.getDate(),e=M.getDay(),o=b,z=o-1,t=function(M){return(M+7-1)%7};M.setDate(p+z-t(e));var c=new Date(M.getFullYear(),0,o),n=(M.getTime()-c.getTime())/864e5;return 1+Math.round((n-z+t(c.getDay()))/7)}(t,z);return'<td class="pika-week">'+c+"</td>"},g=function(M,b,p,e){return'<tr class="pika-row'+(p?" pick-whole-week":"")+(e?" is-selected":"")+'">'+(b?M.reverse():M).join("")+"</tr>"},L=function(M,b,p,e,o,z){var t,c,n,O,r,a=M._o,s=p===a.minYear,A=p===a.maxYear,d='<div id="'+z+'" class="pika-title" role="heading" aria-live="assertive">',l=!0,q=!0;for(n=[],t=0;t<12;t++)n.push('<option value="'+(p===o?t-b:12+t-b)+'"'+(t===e?' selected="selected"':"")+(s&&t<a.minMonth||A&&t>a.maxMonth?' disabled="disabled"':"")+">"+a.i18n.months[t]+"</option>");for(O='<div class="pika-label">'+a.i18n.months[e]+'<select class="pika-select pika-select-month" tabindex="-1">'+n.join("")+"</select></div>",i(a.yearRange)?(t=a.yearRange[0],c=a.yearRange[1]+1):(t=p-a.yearRange,c=1+p+a.yearRange),n=[];t<c&&t<=a.maxYear;t++)t>=a.minYear&&n.push('<option value="'+t+'"'+(t===p?' selected="selected"':"")+">"+t+"</option>");return r='<div class="pika-label">'+p+a.yearSuffix+'<select class="pika-select pika-select-year" tabindex="-1">'+n.join("")+"</select></div>",a.showMonthAfterYear?d+=r+O:d+=O+r,s&&(0===e||a.minMonth>=e)&&(l=!1),A&&(11===e||a.maxMonth<=e)&&(q=!1),0===b&&(d+='<button class="pika-prev'+(l?"":" is-disabled")+'" type="button">'+a.i18n.previousMonth+"</button>"),b===M._o.numberOfMonths-1&&(d+='<button class="pika-next'+(q?"":" is-disabled")+'" type="button">'+a.i18n.nextMonth+"</button>"),d+"</div>"},v=function(M,b,p){return'<table cellpadding="0" cellspacing="0" class="pika-table" role="grid" aria-labelledby="'+p+'">'+function(M){var b,p=[];for(M.showWeekNumber&&p.push("<th></th>"),b=0;b<7;b++)p.push('<th scope="col"><abbr title="'+h(M,b)+'">'+h(M,b,!0)+"</abbr></th>");return"<thead><tr>"+(M.isRTL?p.reverse():p).join("")+"</tr></thead>"}(M)+("<tbody>"+b.join("")+"</tbody></table>")},N=function(t){var n=this,O=n.config(t);n._onMouseDown=function(M){if(n._v){var b=(M=M||window.event).target||M.srcElement;if(b)if(c(b,"is-disabled")||(!c(b,"pika-button")||c(b,"is-empty")||c(b.parentNode,"is-disabled")?c(b,"pika-prev")?n.prevMonth():c(b,"pika-next")&&n.nextMonth():(n.setDate(new Date(b.getAttribute("data-pika-year"),b.getAttribute("data-pika-month"),b.getAttribute("data-pika-day"))),O.bound&&o(function(){n.hide(),O.blurFieldOnSelect&&O.field&&O.field.blur()},100))),c(b,"pika-select"))n._c=!0;else{if(!M.preventDefault)return M.returnValue=!1,!1;M.preventDefault()}}},n._onChange=function(M){var b=(M=M||window.event).target||M.srcElement;b&&(c(b,"pika-select-month")?n.gotoMonth(b.value):c(b,"pika-select-year")&&n.gotoYear(b.value))},n._onKeyChange=function(M){if(M=M||window.event,n.isVisible())switch(M.keyCode){case 13:case 27:O.field&&O.field.blur();break;case 37:n.adjustDate("subtract",1);break;case 38:n.adjustDate("subtract",7);break;case 39:n.adjustDate("add",1);break;case 40:n.adjustDate("add",7);break;case 8:case 46:n.setDate(null)}},n._parseFieldValue=function(){if(O.parse)return O.parse(O.field.value,O.format);if(b){var p=M(O.field.value,O.format,O.formatStrict);return p&&p.isValid()?p.toDate():null}return new Date(Date.parse(O.field.value))},n._onInputChange=function(M){var b;M.firedBy!==n&&(b=n._parseFieldValue(),r(b)&&n.setDate(b),n._v||n.show())},n._onInputFocus=function(){n.show()},n._onInputClick=function(){n.show()},n._onInputBlur=function(){var M=e.activeElement;do{if(c(M,"pika-single"))return}while(M=M.parentNode);n._c||(n._b=o(function(){n.hide()},50)),n._c=!1},n._onClick=function(M){var b=(M=M||window.event).target||M.srcElement,e=b;if(b){!p&&c(b,"pika-select")&&(b.onchange||(b.setAttribute("onchange","return;"),z(b,"change",n._onChange)));do{if(c(e,"pika-single")||e===O.trigger)return}while(e=e.parentNode);n._v&&b!==O.trigger&&e!==O.trigger&&n.hide()}},n.el=e.createElement("div"),n.el.className="pika-single"+(O.isRTL?" is-rtl":"")+(O.theme?" "+O.theme:""),z(n.el,"mousedown",n._onMouseDown,!0),z(n.el,"touchend",n._onMouseDown,!0),z(n.el,"change",n._onChange),O.keyboardInput&&z(e,"keydown",n._onKeyChange),O.field&&(O.container?O.container.appendChild(n.el):O.bound?e.body.appendChild(n.el):O.field.parentNode.insertBefore(n.el,O.field.nextSibling),z(O.field,"change",n._onInputChange),O.defaultDate||(O.defaultDate=n._parseFieldValue(),O.setDefaultDate=!0));var i=O.defaultDate;r(i)?O.setDefaultDate?n.setDate(i,!0):n.gotoDate(i):n.gotoDate(new Date),O.bound?(this.hide(),n.el.className+=" is-bound",z(O.trigger,"click",n._onInputClick),z(O.trigger,"focus",n._onInputFocus),z(O.trigger,"blur",n._onInputBlur)):this.show()};return N.prototype={config:function(M){this._o||(this._o=q({},W,!0));var b=q(this._o,M,!0);b.isRTL=!!b.isRTL,b.field=b.field&&b.field.nodeName?b.field:null,b.theme="string"==typeof b.theme&&b.theme?b.theme:null,b.bound=!!(void 0!==b.bound?b.field&&b.bound:b.field),b.trigger=b.trigger&&b.trigger.nodeName?b.trigger:b.field,b.disableWeekends=!!b.disableWeekends,b.disableDayFn="function"==typeof b.disableDayFn?b.disableDayFn:null;var p=parseInt(b.numberOfMonths,10)||1;if(b.numberOfMonths=p>4?4:p,r(b.minDate)||(b.minDate=!1),r(b.maxDate)||(b.maxDate=!1),b.minDate&&b.maxDate&&b.maxDate<b.minDate&&(b.maxDate=b.minDate=!1),b.minDate&&this.setMinDate(b.minDate),b.maxDate&&this.setMaxDate(b.maxDate),i(b.yearRange)){var e=(new Date).getFullYear()-10;b.yearRange[0]=parseInt(b.yearRange[0],10)||e,b.yearRange[1]=parseInt(b.yearRange[1],10)||e}else b.yearRange=Math.abs(parseInt(b.yearRange,10))||W.yearRange,b.yearRange>100&&(b.yearRange=100);return b},toString:function(p){return p=p||this._o.format,r(this._d)?this._o.toString?this._o.toString(this._d,p):b?M(this._d).format(p):this._d.toDateString():""},getMoment:function(){return b?M(this._d):null},setMoment:function(p,e){b&&M.isMoment(p)&&this.setDate(p.toDate(),e)},getDate:function(){return r(this._d)?new Date(this._d.getTime()):null},setDate:function(M,b){if(!M)return this._d=null,this._o.field&&(this._o.field.value="",u(this._o.field,"change",{firedBy:this})),this.draw();if("string"==typeof M&&(M=new Date(Date.parse(M))),r(M)){var p=this._o.minDate,e=this._o.maxDate;r(p)&&M<p?M=p:r(e)&&M>e&&(M=e),this._d=new Date(M.getTime()),d(this._d),this.gotoDate(this._d),this._o.field&&(this._o.field.value=this.toString(),u(this._o.field,"change",{firedBy:this})),b||"function"!=typeof this._o.onSelect||this._o.onSelect.call(this,this.getDate())}},clear:function(){this.setDate(null)},gotoDate:function(M){var b=!0;if(r(M)){if(this.calendars){var p=new Date(this.calendars[0].year,this.calendars[0].month,1),e=new Date(this.calendars[this.calendars.length-1].year,this.calendars[this.calendars.length-1].month,1),o=M.getTime();e.setMonth(e.getMonth()+1),e.setDate(e.getDate()-1),b=o<p.getTime()||e.getTime()<o}b&&(this.calendars=[{month:M.getMonth(),year:M.getFullYear()}],"right"===this._o.mainCalendar&&(this.calendars[0].month+=1-this._o.numberOfMonths)),this.adjustCalendars()}},adjustDate:function(M,b){var p,e=this.getDate()||new Date,o=24*parseInt(b)*60*60*1e3;"add"===M?p=new Date(e.valueOf()+o):"subtract"===M&&(p=new Date(e.valueOf()-o)),this.setDate(p)},adjustCalendars:function(){this.calendars[0]=f(this.calendars[0]);for(var M=1;M<this._o.numberOfMonths;M++)this.calendars[M]=f({month:this.calendars[0].month+M,year:this.calendars[0].year});this.draw()},gotoToday:function(){this.gotoDate(new Date)},gotoMonth:function(M){isNaN(M)||(this.calendars[0].month=parseInt(M,10),this.adjustCalendars())},nextMonth:function(){this.calendars[0].month++,this.adjustCalendars()},prevMonth:function(){this.calendars[0].month--,this.adjustCalendars()},gotoYear:function(M){isNaN(M)||(this.calendars[0].year=parseInt(M,10),this.adjustCalendars())},setMinDate:function(M){M instanceof Date?(d(M),this._o.minDate=M,this._o.minYear=M.getFullYear(),this._o.minMonth=M.getMonth()):(this._o.minDate=W.minDate,this._o.minYear=W.minYear,this._o.minMonth=W.minMonth,this._o.startRange=W.startRange),this.draw()},setMaxDate:function(M){M instanceof Date?(d(M),this._o.maxDate=M,this._o.maxYear=M.getFullYear(),this._o.maxMonth=M.getMonth()):(this._o.maxDate=W.maxDate,this._o.maxYear=W.maxYear,this._o.maxMonth=W.maxMonth,this._o.endRange=W.endRange),this.draw()},setStartRange:function(M){this._o.startRange=M},setEndRange:function(M){this._o.endRange=M},draw:function(M){if(this._v||M){var b,p=this._o,e=p.minYear,z=p.maxYear,t=p.minMonth,c=p.maxMonth,n="";this._y<=e&&(this._y=e,!isNaN(t)&&this._m<t&&(this._m=t)),this._y>=z&&(this._y=z,!isNaN(c)&&this._m>c&&(this._m=c));for(var O=0;O<p.numberOfMonths;O++)b="pika-title-"+Math.random().toString(36).replace(/[^a-z]+/g,"").substr(0,2),n+='<div class="pika-lendar">'+L(this,O,this.calendars[O].year,this.calendars[O].month,this.calendars[0].year,b)+this.render(this.calendars[O].year,this.calendars[O].month,b)+"</div>";this.el.innerHTML=n,p.bound&&"hidden"!==p.field.type&&o(function(){p.trigger.focus()},1),"function"==typeof this._o.onDraw&&this._o.onDraw(this),p.bound&&p.field.setAttribute("aria-label",p.ariaLabel)}},adjustPosition:function(){var M,b,p,o,z,t,c,i,r,a,s,A;if(!this._o.container){if(this.el.style.position="absolute",b=M=this._o.trigger,p=this.el.offsetWidth,o=this.el.offsetHeight,z=window.innerWidth||e.documentElement.clientWidth,t=window.innerHeight||e.documentElement.clientHeight,c=window.pageYOffset||e.body.scrollTop||e.documentElement.scrollTop,s=!0,A=!0,"function"==typeof M.getBoundingClientRect)i=(a=M.getBoundingClientRect()).left+window.pageXOffset,r=a.bottom+window.pageYOffset;else for(i=b.offsetLeft,r=b.offsetTop+b.offsetHeight;b=b.offsetParent;)i+=b.offsetLeft,r+=b.offsetTop;(this._o.reposition&&i+p>z||this._o.position.indexOf("right")>-1&&i-p+M.offsetWidth>0)&&(i=i-p+M.offsetWidth,s=!1),(this._o.reposition&&r+o>t+c||this._o.position.indexOf("top")>-1&&r-o-M.offsetHeight>0)&&(r=r-o-M.offsetHeight,A=!1),this.el.style.left=i+"px",this.el.style.top=r+"px",n(this.el,s?"left-aligned":"right-aligned"),n(this.el,A?"bottom-aligned":"top-aligned"),O(this.el,s?"right-aligned":"left-aligned"),O(this.el,A?"top-aligned":"bottom-aligned")}},render:function(M,b,p){var e=this._o,o=new Date,z=A(M,b),t=new Date(M,b,1).getDay(),c=[],n=[];d(o),e.firstDay>0&&(t-=e.firstDay)<0&&(t+=7);for(var O=0===b?11:b-1,i=11===b?0:b+1,s=0===b?M-1:M,q=11===b?M+1:M,u=A(s,O),f=z+t,W=f;W>7;)W-=7;f+=7-W;for(var h=!1,L=0,N=0;L<f;L++){var y=new Date(M,b,L-t+1),B=!!r(this._d)&&l(y,this._d),X=l(y,o),w=-1!==e.events.indexOf(y.toDateString()),x=L<t||L>=z+t,T=L-t+1,_=b,k=M,S=e.startRange&&l(e.startRange,y),C=e.endRange&&l(e.endRange,y),E=e.startRange&&e.endRange&&e.startRange<y&&y<e.endRange;x&&(L<t?(T=u+T,_=O,k=s):(T-=z,_=i,k=q));var D={day:T,month:_,year:k,hasEvent:w,isSelected:B,isToday:X,isDisabled:e.minDate&&y<e.minDate||e.maxDate&&y>e.maxDate||e.disableWeekends&&a(y)||e.disableDayFn&&e.disableDayFn(y),isEmpty:x,isStartRange:S,isEndRange:C,isInRange:E,showDaysInNextAndPreviousMonths:e.showDaysInNextAndPreviousMonths,enableSelectionDaysInNextAndPreviousMonths:e.enableSelectionDaysInNextAndPreviousMonths};e.pickWholeWeek&&B&&(h=!0),n.push(R(D)),7===++N&&(e.showWeekNumber&&n.unshift(m(L-t,b,M,e.firstWeekOfYearMinDays)),c.push(g(n,e.isRTL,e.pickWholeWeek,h)),n=[],N=0,h=!1)}return v(e,c,p)},isVisible:function(){return this._v},show:function(){this.isVisible()||(this._v=!0,this.draw(),O(this.el,"is-hidden"),this._o.bound&&(z(e,"click",this._onClick),this.adjustPosition()),"function"==typeof this._o.onOpen&&this._o.onOpen.call(this))},hide:function(){var M=this._v;!1!==M&&(this._o.bound&&t(e,"click",this._onClick),this._o.container||(this.el.style.position="static",this.el.style.left="auto",this.el.style.top="auto"),n(this.el,"is-hidden"),this._v=!1,void 0!==M&&"function"==typeof this._o.onClose&&this._o.onClose.call(this))},destroy:function(){var M=this._o;this.hide(),t(this.el,"mousedown",this._onMouseDown,!0),t(this.el,"touchend",this._onMouseDown,!0),t(this.el,"change",this._onChange),M.keyboardInput&&t(e,"keydown",this._onKeyChange),M.field&&(t(M.field,"change",this._onInputChange),M.bound&&(t(M.trigger,"click",this._onInputClick),t(M.trigger,"focus",this._onInputFocus),t(M.trigger,"blur",this._onInputBlur))),this.el.parentNode&&this.el.parentNode.removeChild(this.el)}},N}),function(M,b){"use strict";"object"==typeof exports?b(require("jquery"),require("pikaday")):"function"==typeof define&&define.amd?define(["jquery","pikaday"],b):b(M.jQuery,M.Pikaday)}(this,function(M,b){"use strict";M.fn.pikaday=function(){var p=arguments;return p&&p.length||(p=[{}]),this.each(function(){var e=M(this),o=e.data("pikaday");if(o instanceof b)"string"==typeof p[0]&&"function"==typeof o[p[0]]&&(o[p[0]].apply(o,Array.prototype.slice.call(p,1)),"destroy"===p[0]&&e.removeData("pikaday"));else if("object"==typeof p[0]){var z=M.extend({},p[0]);z.field=e[0],e.data("pikaday",new b(z))}})}}),function(){var M,b,p,e,o=window.jQuery,z=o(window),t=o(document),c="http://www.w3.org/2000/svg",n="SVGAngle"in window&&((p=document.createElement("div")).innerHTML="<svg/>",b=(p.firstChild&&p.firstChild.namespaceURI)==c,p.innerHTML="",b),O="transition"in(e=document.createElement("div").style)||"WebkitTransition"in e||"MozTransition"in e||"msTransition"in e||"OTransition"in e,i="ontouchstart"in window,r="mousedown"+(i?" touchstart":""),a="mousemove.clockpicker"+(i?" touchmove.clockpicker":""),s="mouseup.clockpicker"+(i?" touchend.clockpicker":""),A=navigator.vibrate?"vibrate":navigator.webkitVibrate?"webkitVibrate":null;function d(M){return document.createElementNS(c,M)}function l(M){return(M<10?"0":"")+M}var q=0;var u=100,f=80,W=13,h=O?350:1,R=['<div class="popover clockpicker-popover">','<div class="arrow"></div>','<div class="popover-title">','<span class="clockpicker-span-hours text-primary"></span>',":",'<span class="clockpicker-span-minutes"></span> ','<span class="clockpicker-span-am-pm"></span>',"</div>",'<div class="popover-content">','<div class="clockpicker-plate">','<div class="clockpicker-canvas"></div>','<div class="clockpicker-dial clockpicker-hours"></div>','<div class="clockpicker-dial clockpicker-minutes clockpicker-dial-out"></div>',"</div>",'<span class="clockpicker-am-pm-block">',"</span>","</div>","</div>"].join("");function m(b,p){var e,z,c=o(R),O=c.find(".clockpicker-plate"),i=c.find(".clockpicker-hours"),A=c.find(".clockpicker-minutes"),m=c.find(".clockpicker-am-pm-block"),L="INPUT"===b.prop("tagName"),v=L?b:b.find("input"),N=b.find(".input-group-addon"),y=this;if(this.id=(z=++q+"",(e="cp")?e+z:z),this.element=b,this.options=p,this.isAppended=!1,this.isShown=!1,this.currentView="hours",this.isInput=L,this.input=v,this.addon=N,this.popover=c,this.plate=O,this.hoursView=i,this.minutesView=A,this.amPmBlock=m,this.spanHours=c.find(".clockpicker-span-hours"),this.spanMinutes=c.find(".clockpicker-span-minutes"),this.spanAmPm=c.find(".clockpicker-span-am-pm"),this.amOrPm="PM",p.twelvehour){var B=['<div class="clockpicker-am-pm-block">','<button type="button" class="btn btn-sm btn-secondary clockpicker-button clockpicker-am-button">',"AM</button>",'<button type="button" class="btn btn-sm btn-secondary clockpicker-button clockpicker-pm-button">',"PM</button>","</div>"].join("");o(B);o('<button type="button" class="btn btn-sm btn-secondary clockpicker-button am-button">AM</button>').on("click",function(){y.amOrPm="AM",o(".clockpicker-span-am-pm").empty().append("AM")}).appendTo(this.amPmBlock),o('<button type="button" class="btn btn-sm btn-secondary clockpicker-button pm-button">PM</button>').on("click",function(){y.amOrPm="PM",o(".clockpicker-span-am-pm").empty().append("PM")}).appendTo(this.amPmBlock)}p.autoclose||o('<button type="button" class="btn btn-sm btn-secondary btn-block clockpicker-button">'+p.donetext+"</button>").click(o.proxy(this.done,this)).appendTo(c),"top"!==p.placement&&"bottom"!==p.placement&&"auto"!==p.placement||"top"!==p.align&&"bottom"!==p.align||(p.align="left"),"left"!==p.placement&&"right"!==p.placement||"left"!==p.align&&"right"!==p.align||(p.align="top"),c.addClass(p.placement),c.addClass("clockpicker-align-"+p.align),this.spanHours.click(o.proxy(this.toggleView,this,"hours")),this.spanMinutes.click(o.proxy(this.toggleView,this,"minutes")),v.on("focus.clockpicker click.clockpicker",o.proxy(this.show,this)),N.on("click.clockpicker",o.proxy(this.toggle,this));var X,w,x,T,_=o('<div class="clockpicker-tick"></div>');if(p.twelvehour)for(X=1;X<13;X+=1)w=_.clone(),x=X/6*Math.PI,T=f,w.css("font-size","120%"),w.css({left:u+Math.sin(x)*T-W,top:u-Math.cos(x)*T-W}),w.html(0===X?"00":X),i.append(w),w.on(r,S);else for(X=0;X<24;X+=1){w=_.clone(),x=X/6*Math.PI;var k=X>0&&X<13;T=k?54:f,w.css({left:u+Math.sin(x)*T-W,top:u-Math.cos(x)*T-W}),k&&w.addClass("tick-inner"),w.html(0===X?"00":X),i.append(w),w.on(r,S)}for(X=0;X<60;X+=5)w=_.clone(),x=X/30*Math.PI,w.css({left:u+Math.sin(x)*f-W,top:u-Math.cos(x)*f-W}),w.html(l(X)),A.append(w),w.on(r,S);function S(b,e){var o=O.offset(),z=/^touch/.test(b.type),c=o.left+u,i=o.top+u,r=(z?b.originalEvent.touches[0]:b).pageX-c,A=(z?b.originalEvent.touches[0]:b).pageY-i,d=Math.sqrt(r*r+A*A),l=!1;if(!e||!(d<67||d>93)){b.preventDefault();var q=setTimeout(function(){M.addClass("clockpicker-moving")},200);n&&O.append(y.canvas),y.setHand(r,A,!e,!0),t.off(a).on(a,function(M){M.preventDefault();var b=/^touch/.test(M.type),p=(b?M.originalEvent.touches[0]:M).pageX-c,e=(b?M.originalEvent.touches[0]:M).pageY-i;(l||p!==r||e!==A)&&(l=!0,y.setHand(p,e,!1,!0))}),t.off(s).on(s,function(b){t.off(s),b.preventDefault();var o=/^touch/.test(b.type),z=(o?b.originalEvent.changedTouches[0]:b).pageX-c,n=(o?b.originalEvent.changedTouches[0]:b).pageY-i;(e||l)&&z===r&&n===A&&y.setHand(z,n),"hours"===y.currentView?y.toggleView("minutes",h/2):p.autoclose&&(y.minutesView.addClass("clockpicker-dial-out"),setTimeout(function(){y.done()},h/2)),O.prepend(C),clearTimeout(q),M.removeClass("clockpicker-moving"),t.off(a)})}}if(O.on(r,function(M){0===o(M.target).closest(".clockpicker-tick").length&&S(M,!0)}),n){var C=c.find(".clockpicker-canvas"),E=d("svg");E.setAttribute("class","clockpicker-svg"),E.setAttribute("width",200),E.setAttribute("height",200);var D=d("g");D.setAttribute("transform","translate(100,100)");var P=d("circle");P.setAttribute("class","clockpicker-canvas-bearing"),P.setAttribute("cx",0),P.setAttribute("cy",0),P.setAttribute("r",2);var I=d("line");I.setAttribute("x1",0),I.setAttribute("y1",0);var F=d("circle");F.setAttribute("class","clockpicker-canvas-bg"),F.setAttribute("r",W);var j=d("circle");j.setAttribute("class","clockpicker-canvas-fg"),j.setAttribute("r",3.5),D.appendChild(I),D.appendChild(F),D.appendChild(j),D.appendChild(P),E.appendChild(D),C.append(E),this.hand=I,this.bg=F,this.fg=j,this.bearing=P,this.g=D,this.canvas=C}g(this.options.init)}function g(M){M&&"function"==typeof M&&M()}m.DEFAULTS={default:"",fromnow:0,placement:"bottom",align:"left",donetext:"Done",autoclose:!1,twelvehour:!1,vibrate:!0},m.prototype.toggle=function(){this[this.isShown?"hide":"show"]()},m.prototype.locate=function(){var M=this.element,b=this.popover,p=M.offset(),e=M.outerWidth(),o=M.outerHeight(),z=this.options.placement,t=this.options.align,c={},n=window.innerHeight||document.documentElement.clientHeight,O=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;switch(b.show(),"auto"===z&&(z=p.top+b.outerHeight()>n+O?"top":"bottom"),z){case"bottom":c.top=p.top+o;break;case"right":c.left=p.left+e;break;case"top":c.top=p.top-b.outerHeight();break;case"left":c.left=p.left-b.outerWidth()}switch(t){case"left":c.left=p.left;break;case"right":c.left=p.left+e-b.outerWidth();break;case"top":c.top=p.top;break;case"bottom":c.top=p.top+o-b.outerHeight()}b.css(c)},m.prototype.show=function(b){if(!this.isShown){g(this.options.beforeShow);var p=this;this.isAppended||(M=o(document.body).append(this.popover),z.on("resize.clockpicker"+this.id,function(){p.isShown&&p.locate()}),this.isAppended=!0);var e=(this.input.prop("value")||this.options.default||"")+"";if(this.options.twelvehour){var c=e.split(" ");c[1]&&(e=c[0],this.amOrPm=c[1])}if("now"===(e=e.split(":"))[0]){var n=new Date(+new Date+this.options.fromnow);e=[n.getHours(),n.getMinutes()]}this.hours=+e[0]||0,this.minutes=+e[1]||0,this.spanHours.html(l(this.hours)),this.spanMinutes.html(l(this.minutes)),this.options.twelvehour&&this.spanAmPm.html(this.amOrPm),this.toggleView("hours"),this.locate(),this.isShown=!0,t.on("click.clockpicker."+this.id+" focusin.clockpicker."+this.id,function(M){var b=o(M.target);0===b.closest(p.popover).length&&0===b.closest(p.addon).length&&0===b.closest(p.input).length&&p.hide()}),t.on("keyup.clockpicker."+this.id,function(M){27===M.keyCode&&p.hide()}),g(this.options.afterShow)}},m.prototype.hide=function(){g(this.options.beforeHide),this.isShown=!1,t.off("click.clockpicker."+this.id+" focusin.clockpicker."+this.id),t.off("keyup.clockpicker."+this.id),this.popover.hide(),g(this.options.afterHide)},m.prototype.toggleView=function(M,b){var p=!1;"minutes"===M&&"visible"===o(this.hoursView).css("visibility")&&(g(this.options.beforeHourSelect),p=!0);var e="hours"===M,z=e?this.hoursView:this.minutesView,t=e?this.minutesView:this.hoursView;this.currentView=M,this.spanHours.toggleClass("text-primary",e),this.spanMinutes.toggleClass("text-primary",!e),t.addClass("clockpicker-dial-out"),z.css("visibility","visible").removeClass("clockpicker-dial-out"),this.resetClock(b),clearTimeout(this.toggleViewTimer),this.toggleViewTimer=setTimeout(function(){t.css("visibility","hidden")},h),p&&g(this.options.afterHourSelect)},m.prototype.resetClock=function(M){var b=this.currentView,p=this[b],e="hours"===b,o=p*(Math.PI/(e?6:30)),z=e&&p>0&&p<13?54:f,t=Math.sin(o)*z,c=-Math.cos(o)*z,O=this;n&&M?(O.canvas.addClass("clockpicker-canvas-out"),setTimeout(function(){O.canvas.removeClass("clockpicker-canvas-out"),O.setHand(t,c)},M)):this.setHand(t,c)},m.prototype.setHand=function(M,b,p,e){var z,t=Math.atan2(M,-b),c="hours"===this.currentView,O=Math.PI/(c||p?6:30),i=Math.sqrt(M*M+b*b),r=this.options,a=c&&i<67,s=a?54:f;if(r.twelvehour&&(s=f),t<0&&(t=2*Math.PI+t),t=(z=Math.round(t/O))*O,r.twelvehour?c?0===z&&(z=12):(p&&(z*=5),60===z&&(z=0)):c?(12===z&&(z=0),z=a?0===z?12:z:0===z?0:z+12):(p&&(z*=5),60===z&&(z=0)),this[this.currentView]!==z&&A&&this.options.vibrate&&(this.vibrateTimer||(navigator[A](10),this.vibrateTimer=setTimeout(o.proxy(function(){this.vibrateTimer=null},this),100))),this[this.currentView]=z,this[c?"spanHours":"spanMinutes"].html(l(z)),n){e||!c&&z%5?(this.g.insertBefore(this.hand,this.bearing),this.g.insertBefore(this.bg,this.fg),this.bg.setAttribute("class","clockpicker-canvas-bg clockpicker-canvas-bg-trans")):(this.g.insertBefore(this.hand,this.bg),this.g.insertBefore(this.fg,this.bg),this.bg.setAttribute("class","clockpicker-canvas-bg"));var d=Math.sin(t)*s,q=-Math.cos(t)*s;this.hand.setAttribute("x2",d),this.hand.setAttribute("y2",q),this.bg.setAttribute("cx",d),this.bg.setAttribute("cy",q),this.fg.setAttribute("cx",d),this.fg.setAttribute("cy",q)}else this[c?"hoursView":"minutesView"].find(".clockpicker-tick").each(function(){var M=o(this);M.toggleClass("active",z===+M.html())})},m.prototype.done=function(){g(this.options.beforeDone),this.hide();var M=this.input.prop("value"),b=l(this.hours)+":"+l(this.minutes);this.options.twelvehour&&(b=b+" "+this.amOrPm),this.input.prop("value",b),b!==M&&(this.input.triggerHandler("change"),this.isInput||this.element.trigger("change")),this.options.autoclose&&this.input.trigger("blur"),g(this.options.afterDone)},m.prototype.remove=function(){this.element.removeData("clockpicker"),this.input.off("focus.clockpicker click.clockpicker"),this.addon.off("click.clockpicker"),this.isShown&&this.hide(),this.isAppended&&(z.off("resize.clockpicker"+this.id),this.popover.remove())},o.fn.clockpicker=function(M){var b=Array.prototype.slice.call(arguments,1);return this.each(function(){var p=o(this),e=p.data("clockpicker");if(e)"function"==typeof e[M]&&e[M].apply(e,b);else{var z=o.extend({},m.DEFAULTS,p.data(),"object"==typeof M&&M);p.data("clockpicker",new m(p,z))}})}}(),function(M,b){"object"==typeof exports&&exports&&"string"!=typeof exports.nodeName?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):(M.Mustache={},b(M.Mustache))}(this,function(M){var b=Object.prototype.toString,p=Array.isArray||function(M){return"[object Array]"===b.call(M)};function e(M){return"function"==typeof M}function o(M){return M.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")}function z(M,b){return null!=M&&"object"==typeof M&&b in M}var t=RegExp.prototype.test;var c=/\S/;function n(M){return!function(M,b){return t.call(M,b)}(c,M)}var O={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};var i=/\s*/,r=/\s+/,a=/\s*=/,s=/\s*\}/,A=/#|\^|\/|>|\{|&|=|!/;function d(M){this.string=M,this.tail=M,this.pos=0}function l(M,b){this.view=M,this.cache={".":this.view},this.parent=b}function q(){this.cache={}}d.prototype.eos=function(){return""===this.tail},d.prototype.scan=function(M){var b=this.tail.match(M);if(!b||0!==b.index)return"";var p=b[0];return this.tail=this.tail.substring(p.length),this.pos+=p.length,p},d.prototype.scanUntil=function(M){var b,p=this.tail.search(M);switch(p){case-1:b=this.tail,this.tail="";break;case 0:b="";break;default:b=this.tail.substring(0,p),this.tail=this.tail.substring(p)}return this.pos+=b.length,b},l.prototype.push=function(M){return new l(M,this)},l.prototype.lookup=function(M){var b,p=this.cache;if(p.hasOwnProperty(M))b=p[M];else{for(var o,t,c=this,n=!1;c;){if(M.indexOf(".")>0)for(b=c.view,o=M.split("."),t=0;null!=b&&t<o.length;)t===o.length-1&&(n=z(b,o[t])),b=b[o[t++]];else b=c.view[M],n=z(c.view,M);if(n)break;c=c.parent}p[M]=b}return e(b)&&(b=b.call(this.view)),b},q.prototype.clearCache=function(){this.cache={}},q.prototype.parse=function(b,e){var z=this.cache,t=z[b];return null==t&&(t=z[b]=function(b,e){if(!b)return[];var z,t,c,O=[],l=[],q=[],u=!1,f=!1;function W(){if(u&&!f)for(;q.length;)delete l[q.pop()];else q=[];u=!1,f=!1}function h(M){if("string"==typeof M&&(M=M.split(r,2)),!p(M)||2!==M.length)throw new Error("Invalid tags: "+M);z=new RegExp(o(M[0])+"\\s*"),t=new RegExp("\\s*"+o(M[1])),c=new RegExp("\\s*"+o("}"+M[1]))}h(e||M.tags);for(var R,m,g,L,v,N,y=new d(b);!y.eos();){if(R=y.pos,g=y.scanUntil(z))for(var B=0,X=g.length;B<X;++B)n(L=g.charAt(B))?q.push(l.length):f=!0,l.push(["text",L,R,R+1]),R+=1,"\n"===L&&W();if(!y.scan(z))break;if(u=!0,m=y.scan(A)||"name",y.scan(i),"="===m?(g=y.scanUntil(a),y.scan(a),y.scanUntil(t)):"{"===m?(g=y.scanUntil(c),y.scan(s),y.scanUntil(t),m="&"):g=y.scanUntil(t),!y.scan(t))throw new Error("Unclosed tag at "+y.pos);if(v=[m,g,R,y.pos],l.push(v),"#"===m||"^"===m)O.push(v);else if("/"===m){if(!(N=O.pop()))throw new Error('Unopened section "'+g+'" at '+R);if(N[1]!==g)throw new Error('Unclosed section "'+N[1]+'" at '+R)}else"name"===m||"{"===m||"&"===m?f=!0:"="===m&&h(g)}if(N=O.pop())throw new Error('Unclosed section "'+N[1]+'" at '+y.pos);return function(M){for(var b,p=[],e=p,o=[],z=0,t=M.length;z<t;++z)switch((b=M[z])[0]){case"#":case"^":e.push(b),o.push(b),e=b[4]=[];break;case"/":o.pop()[5]=b[2],e=o.length>0?o[o.length-1][4]:p;break;default:e.push(b)}return p}(function(M){for(var b,p,e=[],o=0,z=M.length;o<z;++o)(b=M[o])&&("text"===b[0]&&p&&"text"===p[0]?(p[1]+=b[1],p[3]=b[3]):(e.push(b),p=b));return e}(l))}(b,e)),t},q.prototype.render=function(M,b,p){var e=this.parse(M),o=b instanceof l?b:new l(b);return this.renderTokens(e,o,p,M)},q.prototype.renderTokens=function(M,b,p,e){for(var o,z,t,c="",n=0,O=M.length;n<O;++n)t=void 0,"#"===(z=(o=M[n])[0])?t=this.renderSection(o,b,p,e):"^"===z?t=this.renderInverted(o,b,p,e):">"===z?t=this.renderPartial(o,b,p,e):"&"===z?t=this.unescapedValue(o,b):"name"===z?t=this.escapedValue(o,b):"text"===z&&(t=this.rawValue(o)),void 0!==t&&(c+=t);return c},q.prototype.renderSection=function(M,b,o,z){var t=this,c="",n=b.lookup(M[1]);if(n){if(p(n))for(var O=0,i=n.length;O<i;++O)c+=this.renderTokens(M[4],b.push(n[O]),o,z);else if("object"==typeof n||"string"==typeof n||"number"==typeof n)c+=this.renderTokens(M[4],b.push(n),o,z);else if(e(n)){if("string"!=typeof z)throw new Error("Cannot use higher-order sections without the original template");null!=(n=n.call(b.view,z.slice(M[3],M[5]),function(M){return t.render(M,b,o)}))&&(c+=n)}else c+=this.renderTokens(M[4],b,o,z);return c}},q.prototype.renderInverted=function(M,b,e,o){var z=b.lookup(M[1]);if(!z||p(z)&&0===z.length)return this.renderTokens(M[4],b,e,o)},q.prototype.renderPartial=function(M,b,p){if(p){var o=e(p)?p(M[1]):p[M[1]];return null!=o?this.renderTokens(this.parse(o),b,p,o):void 0}},q.prototype.unescapedValue=function(M,b){var p=b.lookup(M[1]);if(null!=p)return p},q.prototype.escapedValue=function(b,p){var e=p.lookup(b[1]);if(null!=e)return M.escape(e)},q.prototype.rawValue=function(M){return M[1]},M.name="mustache.js",M.version="2.3.2",M.tags=["{{","}}"];var u=new q;return M.clearCache=function(){return u.clearCache()},M.parse=function(M,b){return u.parse(M,b)},M.render=function(M,b,e){if("string"!=typeof M)throw new TypeError('Invalid template! Template should be a "string" but "'+((p(o=M)?"array":typeof o)+'" was given as the first argument for mustache#render(template, view, partials)'));var o;return u.render(M,b,e)},M.to_html=function(b,p,o,z){var t=M.render(b,p,o);if(!e(z))return t;z(t)},M.escape=function(M){return String(M).replace(/[&<>"'`=\/]/g,function(M){return O[M]})},M.Scanner=d,M.Context=l,M.Writer=q,M}),function(M,b){"object"==typeof exports&&"undefined"!=typeof module?b(exports):"function"==typeof define&&define.amd?define(["exports"],b):b((M="undefined"!=typeof globalThis?globalThis:M||self).Popper={})}(this,function(M){"use strict";function b(M){if(null==M)return window;if("[object Window]"!==M.toString()){var b=M.ownerDocument;return b&&b.defaultView||window}return M}function p(M){return M instanceof b(M).Element||M instanceof Element}function e(M){return M instanceof b(M).HTMLElement||M instanceof HTMLElement}function o(M){return"undefined"!=typeof ShadowRoot&&(M instanceof b(M).ShadowRoot||M instanceof ShadowRoot)}var z=Math.max,t=Math.min,c=Math.round;function n(){var M=navigator.userAgentData;return null!=M&&M.brands&&Array.isArray(M.brands)?M.brands.map(function(M){return M.brand+"/"+M.version}).join(" "):navigator.userAgent}function O(){return!/^((?!chrome|android).)*safari/i.test(n())}function i(M,o,z){void 0===o&&(o=!1),void 0===z&&(z=!1);var t=M.getBoundingClientRect(),n=1,i=1;o&&e(M)&&(n=M.offsetWidth>0&&c(t.width)/M.offsetWidth||1,i=M.offsetHeight>0&&c(t.height)/M.offsetHeight||1);var r=(p(M)?b(M):window).visualViewport,a=!O()&&z,s=(t.left+(a&&r?r.offsetLeft:0))/n,A=(t.top+(a&&r?r.offsetTop:0))/i,d=t.width/n,l=t.height/i;return{width:d,height:l,top:A,right:s+d,bottom:A+l,left:s,x:s,y:A}}function r(M){var p=b(M);return{scrollLeft:p.pageXOffset,scrollTop:p.pageYOffset}}function a(M){return M?(M.nodeName||"").toLowerCase():null}function s(M){return((p(M)?M.ownerDocument:M.document)||window.document).documentElement}function A(M){return i(s(M)).left+r(M).scrollLeft}function d(M){return b(M).getComputedStyle(M)}function l(M){var b=d(M),p=b.overflow,e=b.overflowX,o=b.overflowY;return/auto|scroll|overlay|hidden/.test(p+o+e)}function q(M,p,o){void 0===o&&(o=!1);var z,t,n=e(p),O=e(p)&&function(M){var b=M.getBoundingClientRect(),p=c(b.width)/M.offsetWidth||1,e=c(b.height)/M.offsetHeight||1;return 1!==p||1!==e}(p),d=s(p),q=i(M,O,o),u={scrollLeft:0,scrollTop:0},f={x:0,y:0};return(n||!n&&!o)&&(("body"!==a(p)||l(d))&&(u=(z=p)!==b(z)&&e(z)?{scrollLeft:(t=z).scrollLeft,scrollTop:t.scrollTop}:r(z)),e(p)?((f=i(p,!0)).x+=p.clientLeft,f.y+=p.clientTop):d&&(f.x=A(d))),{x:q.left+u.scrollLeft-f.x,y:q.top+u.scrollTop-f.y,width:q.width,height:q.height}}function u(M){var b=i(M),p=M.offsetWidth,e=M.offsetHeight;return Math.abs(b.width-p)<=1&&(p=b.width),Math.abs(b.height-e)<=1&&(e=b.height),{x:M.offsetLeft,y:M.offsetTop,width:p,height:e}}function f(M){return"html"===a(M)?M:M.assignedSlot||M.parentNode||(o(M)?M.host:null)||s(M)}function W(M){return["html","body","#document"].indexOf(a(M))>=0?M.ownerDocument.body:e(M)&&l(M)?M:W(f(M))}function h(M,p){var e;void 0===p&&(p=[]);var o=W(M),z=o===(null==(e=M.ownerDocument)?void 0:e.body),t=b(o),c=z?[t].concat(t.visualViewport||[],l(o)?o:[]):o,n=p.concat(c);return z?n:n.concat(h(f(c)))}function R(M){return["table","td","th"].indexOf(a(M))>=0}function m(M){return e(M)&&"fixed"!==d(M).position?M.offsetParent:null}function g(M){for(var p=b(M),z=m(M);z&&R(z)&&"static"===d(z).position;)z=m(z);return z&&("html"===a(z)||"body"===a(z)&&"static"===d(z).position)?p:z||function(M){var b=/firefox/i.test(n());if(/Trident/i.test(n())&&e(M)&&"fixed"===d(M).position)return null;var p=f(M);for(o(p)&&(p=p.host);e(p)&&["html","body"].indexOf(a(p))<0;){var z=d(p);if("none"!==z.transform||"none"!==z.perspective||"paint"===z.contain||-1!==["transform","perspective"].indexOf(z.willChange)||b&&"filter"===z.willChange||b&&z.filter&&"none"!==z.filter)return p;p=p.parentNode}return null}(M)||p}var L="top",v="bottom",N="right",y="left",B="auto",X=[L,v,N,y],w="start",x="end",T="viewport",_="popper",k=X.reduce(function(M,b){return M.concat([b+"-"+w,b+"-"+x])},[]),S=[].concat(X,[B]).reduce(function(M,b){return M.concat([b,b+"-"+w,b+"-"+x])},[]),C=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function E(M){var b=new Map,p=new Set,e=[];function o(M){p.add(M.name),[].concat(M.requires||[],M.requiresIfExists||[]).forEach(function(M){if(!p.has(M)){var e=b.get(M);e&&o(e)}}),e.push(M)}return M.forEach(function(M){b.set(M.name,M)}),M.forEach(function(M){p.has(M.name)||o(M)}),e}function D(M,b){var p=b.getRootNode&&b.getRootNode();if(M.contains(b))return!0;if(p&&o(p)){var e=b;do{if(e&&M.isSameNode(e))return!0;e=e.parentNode||e.host}while(e)}return!1}function P(M){return Object.assign({},M,{left:M.x,top:M.y,right:M.x+M.width,bottom:M.y+M.height})}function I(M,e,o){return e===T?P(function(M,p){var e=b(M),o=s(M),z=e.visualViewport,t=o.clientWidth,c=o.clientHeight,n=0,i=0;if(z){t=z.width,c=z.height;var r=O();(r||!r&&"fixed"===p)&&(n=z.offsetLeft,i=z.offsetTop)}return{width:t,height:c,x:n+A(M),y:i}}(M,o)):p(e)?function(M,b){var p=i(M,!1,"fixed"===b);return p.top=p.top+M.clientTop,p.left=p.left+M.clientLeft,p.bottom=p.top+M.clientHeight,p.right=p.left+M.clientWidth,p.width=M.clientWidth,p.height=M.clientHeight,p.x=p.left,p.y=p.top,p}(e,o):P(function(M){var b,p=s(M),e=r(M),o=null==(b=M.ownerDocument)?void 0:b.body,t=z(p.scrollWidth,p.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),c=z(p.scrollHeight,p.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),n=-e.scrollLeft+A(M),O=-e.scrollTop;return"rtl"===d(o||p).direction&&(n+=z(p.clientWidth,o?o.clientWidth:0)-t),{width:t,height:c,x:n,y:O}}(s(M)))}function F(M,b,o,c){var n="clippingParents"===b?function(M){var b=h(f(M)),o=["absolute","fixed"].indexOf(d(M).position)>=0&&e(M)?g(M):M;return p(o)?b.filter(function(M){return p(M)&&D(M,o)&&"body"!==a(M)}):[]}(M):[].concat(b),O=[].concat(n,[o]),i=O[0],r=O.reduce(function(b,p){var e=I(M,p,c);return b.top=z(e.top,b.top),b.right=t(e.right,b.right),b.bottom=t(e.bottom,b.bottom),b.left=z(e.left,b.left),b},I(M,i,c));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}function j(M){return M.split("-")[0]}function H(M){return M.split("-")[1]}function U(M){return["top","bottom"].indexOf(M)>=0?"x":"y"}function Y(M){var b,p=M.reference,e=M.element,o=M.placement,z=o?j(o):null,t=o?H(o):null,c=p.x+p.width/2-e.width/2,n=p.y+p.height/2-e.height/2;switch(z){case L:b={x:c,y:p.y-e.height};break;case v:b={x:c,y:p.y+p.height};break;case N:b={x:p.x+p.width,y:n};break;case y:b={x:p.x-e.width,y:n};break;default:b={x:p.x,y:p.y}}var O=z?U(z):null;if(null!=O){var i="y"===O?"height":"width";switch(t){case w:b[O]=b[O]-(p[i]/2-e[i]/2);break;case x:b[O]=b[O]+(p[i]/2-e[i]/2)}}return b}function G(M){return Object.assign({},{top:0,right:0,bottom:0,left:0},M)}function V(M,b){return b.reduce(function(b,p){return b[p]=M,b},{})}function $(M,b){void 0===b&&(b={});var e=b,o=e.placement,z=void 0===o?M.placement:o,t=e.strategy,c=void 0===t?M.strategy:t,n=e.boundary,O=void 0===n?"clippingParents":n,r=e.rootBoundary,a=void 0===r?T:r,A=e.elementContext,d=void 0===A?_:A,l=e.altBoundary,q=void 0!==l&&l,u=e.padding,f=void 0===u?0:u,W=G("number"!=typeof f?f:V(f,X)),h=d===_?"reference":_,R=M.rects.popper,m=M.elements[q?h:d],g=F(p(m)?m:m.contextElement||s(M.elements.popper),O,a,c),y=i(M.elements.reference),B=Y({reference:y,element:R,strategy:"absolute",placement:z}),w=P(Object.assign({},R,B)),x=d===_?w:y,k={top:g.top-x.top+W.top,bottom:x.bottom-g.bottom+W.bottom,left:g.left-x.left+W.left,right:x.right-g.right+W.right},S=M.modifiersData.offset;if(d===_&&S){var C=S[z];Object.keys(k).forEach(function(M){var b=[N,v].indexOf(M)>=0?1:-1,p=[L,v].indexOf(M)>=0?"y":"x";k[M]+=C[p]*b})}return k}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var M=arguments.length,b=new Array(M),p=0;p<M;p++)b[p]=arguments[p];return!b.some(function(M){return!(M&&"function"==typeof M.getBoundingClientRect)})}function J(M){void 0===M&&(M={});var b=M,e=b.defaultModifiers,o=void 0===e?[]:e,z=b.defaultOptions,t=void 0===z?K:z;return function(M,b,e){void 0===e&&(e=t);var z,c,n={placement:"bottom",orderedModifiers:[],options:Object.assign({},K,t),modifiersData:{},elements:{reference:M,popper:b},attributes:{},styles:{}},O=[],i=!1,r={state:n,setOptions:function(e){var z="function"==typeof e?e(n.options):e;a(),n.options=Object.assign({},t,n.options,z),n.scrollParents={reference:p(M)?h(M):M.contextElement?h(M.contextElement):[],popper:h(b)};var c,i,s=function(M){var b=E(M);return C.reduce(function(M,p){return M.concat(b.filter(function(M){return M.phase===p}))},[])}((c=[].concat(o,n.options.modifiers),i=c.reduce(function(M,b){var p=M[b.name];return M[b.name]=p?Object.assign({},p,b,{options:Object.assign({},p.options,b.options),data:Object.assign({},p.data,b.data)}):b,M},{}),Object.keys(i).map(function(M){return i[M]})));return n.orderedModifiers=s.filter(function(M){return M.enabled}),n.orderedModifiers.forEach(function(M){var b=M.name,p=M.options,e=void 0===p?{}:p,o=M.effect;if("function"==typeof o){var z=o({state:n,name:b,instance:r,options:e});O.push(z||function(){})}}),r.update()},forceUpdate:function(){if(!i){var M=n.elements,b=M.reference,p=M.popper;if(Q(b,p)){n.rects={reference:q(b,g(p),"fixed"===n.options.strategy),popper:u(p)},n.reset=!1,n.placement=n.options.placement,n.orderedModifiers.forEach(function(M){return n.modifiersData[M.name]=Object.assign({},M.data)});for(var e=0;e<n.orderedModifiers.length;e++)if(!0!==n.reset){var o=n.orderedModifiers[e],z=o.fn,t=o.options,c=void 0===t?{}:t,O=o.name;"function"==typeof z&&(n=z({state:n,options:c,name:O,instance:r})||n)}else n.reset=!1,e=-1}}},update:(z=function(){return new Promise(function(M){r.forceUpdate(),M(n)})},function(){return c||(c=new Promise(function(M){Promise.resolve().then(function(){c=void 0,M(z())})})),c}),destroy:function(){a(),i=!0}};if(!Q(M,b))return r;function a(){O.forEach(function(M){return M()}),O=[]}return r.setOptions(e).then(function(M){!i&&e.onFirstUpdate&&e.onFirstUpdate(M)}),r}}var Z={passive:!0},MM={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(M){var p=M.state,e=M.instance,o=M.options,z=o.scroll,t=void 0===z||z,c=o.resize,n=void 0===c||c,O=b(p.elements.popper),i=[].concat(p.scrollParents.reference,p.scrollParents.popper);return t&&i.forEach(function(M){M.addEventListener("scroll",e.update,Z)}),n&&O.addEventListener("resize",e.update,Z),function(){t&&i.forEach(function(M){M.removeEventListener("scroll",e.update,Z)}),n&&O.removeEventListener("resize",e.update,Z)}},data:{}},bM={name:"popperOffsets",enabled:!0,phase:"read",fn:function(M){var b=M.state,p=M.name;b.modifiersData[p]=Y({reference:b.rects.reference,element:b.rects.popper,strategy:"absolute",placement:b.placement})},data:{}},pM={top:"auto",right:"auto",bottom:"auto",left:"auto"};function eM(M){var p,e=M.popper,o=M.popperRect,z=M.placement,t=M.variation,n=M.offsets,O=M.position,i=M.gpuAcceleration,r=M.adaptive,a=M.roundOffsets,A=M.isFixed,l=n.x,q=void 0===l?0:l,u=n.y,f=void 0===u?0:u,W="function"==typeof a?a({x:q,y:f}):{x:q,y:f};q=W.x,f=W.y;var h=n.hasOwnProperty("x"),R=n.hasOwnProperty("y"),m=y,B=L,X=window;if(r){var w=g(e),T="clientHeight",_="clientWidth";w===b(e)&&"static"!==d(w=s(e)).position&&"absolute"===O&&(T="scrollHeight",_="scrollWidth"),(z===L||(z===y||z===N)&&t===x)&&(B=v,f-=(A&&w===X&&X.visualViewport?X.visualViewport.height:w[T])-o.height,f*=i?1:-1),z!==y&&(z!==L&&z!==v||t!==x)||(m=N,q-=(A&&w===X&&X.visualViewport?X.visualViewport.width:w[_])-o.width,q*=i?1:-1)}var k,S=Object.assign({position:O},r&&pM),C=!0===a?function(M,b){var p=M.x,e=M.y,o=b.devicePixelRatio||1;return{x:c(p*o)/o||0,y:c(e*o)/o||0}}({x:q,y:f},b(e)):{x:q,y:f};return q=C.x,f=C.y,i?Object.assign({},S,((k={})[B]=R?"0":"",k[m]=h?"0":"",k.transform=(X.devicePixelRatio||1)<=1?"translate("+q+"px, "+f+"px)":"translate3d("+q+"px, "+f+"px, 0)",k)):Object.assign({},S,((p={})[B]=R?f+"px":"",p[m]=h?q+"px":"",p.transform="",p))}var oM={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(M){var b=M.state,p=M.options,e=p.gpuAcceleration,o=void 0===e||e,z=p.adaptive,t=void 0===z||z,c=p.roundOffsets,n=void 0===c||c,O={placement:j(b.placement),variation:H(b.placement),popper:b.elements.popper,popperRect:b.rects.popper,gpuAcceleration:o,isFixed:"fixed"===b.options.strategy};null!=b.modifiersData.popperOffsets&&(b.styles.popper=Object.assign({},b.styles.popper,eM(Object.assign({},O,{offsets:b.modifiersData.popperOffsets,position:b.options.strategy,adaptive:t,roundOffsets:n})))),null!=b.modifiersData.arrow&&(b.styles.arrow=Object.assign({},b.styles.arrow,eM(Object.assign({},O,{offsets:b.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:n})))),b.attributes.popper=Object.assign({},b.attributes.popper,{"data-popper-placement":b.placement})},data:{}},zM={name:"applyStyles",enabled:!0,phase:"write",fn:function(M){var b=M.state;Object.keys(b.elements).forEach(function(M){var p=b.styles[M]||{},o=b.attributes[M]||{},z=b.elements[M];e(z)&&a(z)&&(Object.assign(z.style,p),Object.keys(o).forEach(function(M){var b=o[M];!1===b?z.removeAttribute(M):z.setAttribute(M,!0===b?"":b)}))})},effect:function(M){var b=M.state,p={popper:{position:b.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(b.elements.popper.style,p.popper),b.styles=p,b.elements.arrow&&Object.assign(b.elements.arrow.style,p.arrow),function(){Object.keys(b.elements).forEach(function(M){var o=b.elements[M],z=b.attributes[M]||{},t=Object.keys(b.styles.hasOwnProperty(M)?b.styles[M]:p[M]).reduce(function(M,b){return M[b]="",M},{});e(o)&&a(o)&&(Object.assign(o.style,t),Object.keys(z).forEach(function(M){o.removeAttribute(M)}))})}},requires:["computeStyles"]},tM={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(M){var b=M.state,p=M.options,e=M.name,o=p.offset,z=void 0===o?[0,0]:o,t=S.reduce(function(M,p){return M[p]=function(M,b,p){var e=j(M),o=[y,L].indexOf(e)>=0?-1:1,z="function"==typeof p?p(Object.assign({},b,{placement:M})):p,t=z[0],c=z[1];return t=t||0,c=(c||0)*o,[y,N].indexOf(e)>=0?{x:c,y:t}:{x:t,y:c}}(p,b.rects,z),M},{}),c=t[b.placement],n=c.x,O=c.y;null!=b.modifiersData.popperOffsets&&(b.modifiersData.popperOffsets.x+=n,b.modifiersData.popperOffsets.y+=O),b.modifiersData[e]=t}},cM={left:"right",right:"left",bottom:"top",top:"bottom"};function nM(M){return M.replace(/left|right|bottom|top/g,function(M){return cM[M]})}var OM={start:"end",end:"start"};function iM(M){return M.replace(/start|end/g,function(M){return OM[M]})}function rM(M,b){void 0===b&&(b={});var p=b,e=p.placement,o=p.boundary,z=p.rootBoundary,t=p.padding,c=p.flipVariations,n=p.allowedAutoPlacements,O=void 0===n?S:n,i=H(e),r=i?c?k:k.filter(function(M){return H(M)===i}):X,a=r.filter(function(M){return O.indexOf(M)>=0});0===a.length&&(a=r);var s=a.reduce(function(b,p){return b[p]=$(M,{placement:p,boundary:o,rootBoundary:z,padding:t})[j(p)],b},{});return Object.keys(s).sort(function(M,b){return s[M]-s[b]})}var aM={name:"flip",enabled:!0,phase:"main",fn:function(M){var b=M.state,p=M.options,e=M.name;if(!b.modifiersData[e]._skip){for(var o=p.mainAxis,z=void 0===o||o,t=p.altAxis,c=void 0===t||t,n=p.fallbackPlacements,O=p.padding,i=p.boundary,r=p.rootBoundary,a=p.altBoundary,s=p.flipVariations,A=void 0===s||s,d=p.allowedAutoPlacements,l=b.options.placement,q=j(l),u=n||(q!==l&&A?function(M){if(j(M)===B)return[];var b=nM(M);return[iM(M),b,iM(b)]}(l):[nM(l)]),f=[l].concat(u).reduce(function(M,p){return M.concat(j(p)===B?rM(b,{placement:p,boundary:i,rootBoundary:r,padding:O,flipVariations:A,allowedAutoPlacements:d}):p)},[]),W=b.rects.reference,h=b.rects.popper,R=new Map,m=!0,g=f[0],X=0;X<f.length;X++){var x=f[X],T=j(x),_=H(x)===w,k=[L,v].indexOf(T)>=0,S=k?"width":"height",C=$(b,{placement:x,boundary:i,rootBoundary:r,altBoundary:a,padding:O}),E=k?_?N:y:_?v:L;W[S]>h[S]&&(E=nM(E));var D=nM(E),P=[];if(z&&P.push(C[T]<=0),c&&P.push(C[E]<=0,C[D]<=0),P.every(function(M){return M})){g=x,m=!1;break}R.set(x,P)}if(m)for(var I=function(M){var b=f.find(function(b){var p=R.get(b);if(p)return p.slice(0,M).every(function(M){return M})});if(b)return g=b,"break"},F=A?3:1;F>0&&"break"!==I(F);F--);b.placement!==g&&(b.modifiersData[e]._skip=!0,b.placement=g,b.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function sM(M,b,p){return z(M,t(b,p))}var AM={name:"preventOverflow",enabled:!0,phase:"main",fn:function(M){var b=M.state,p=M.options,e=M.name,o=p.mainAxis,c=void 0===o||o,n=p.altAxis,O=void 0!==n&&n,i=p.boundary,r=p.rootBoundary,a=p.altBoundary,s=p.padding,A=p.tether,d=void 0===A||A,l=p.tetherOffset,q=void 0===l?0:l,f=$(b,{boundary:i,rootBoundary:r,padding:s,altBoundary:a}),W=j(b.placement),h=H(b.placement),R=!h,m=U(W),B="x"===m?"y":"x",X=b.modifiersData.popperOffsets,x=b.rects.reference,T=b.rects.popper,_="function"==typeof q?q(Object.assign({},b.rects,{placement:b.placement})):q,k="number"==typeof _?{mainAxis:_,altAxis:_}:Object.assign({mainAxis:0,altAxis:0},_),S=b.modifiersData.offset?b.modifiersData.offset[b.placement]:null,C={x:0,y:0};if(X){if(c){var E,D="y"===m?L:y,P="y"===m?v:N,I="y"===m?"height":"width",F=X[m],Y=F+f[D],G=F-f[P],V=d?-T[I]/2:0,K=h===w?x[I]:T[I],Q=h===w?-T[I]:-x[I],J=b.elements.arrow,Z=d&&J?u(J):{width:0,height:0},MM=b.modifiersData["arrow#persistent"]?b.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},bM=MM[D],pM=MM[P],eM=sM(0,x[I],Z[I]),oM=R?x[I]/2-V-eM-bM-k.mainAxis:K-eM-bM-k.mainAxis,zM=R?-x[I]/2+V+eM+pM+k.mainAxis:Q+eM+pM+k.mainAxis,tM=b.elements.arrow&&g(b.elements.arrow),cM=tM?"y"===m?tM.clientTop||0:tM.clientLeft||0:0,nM=null!=(E=null==S?void 0:S[m])?E:0,OM=F+zM-nM,iM=sM(d?t(Y,F+oM-nM-cM):Y,F,d?z(G,OM):G);X[m]=iM,C[m]=iM-F}if(O){var rM,aM="x"===m?L:y,AM="x"===m?v:N,dM=X[B],lM="y"===B?"height":"width",qM=dM+f[aM],uM=dM-f[AM],fM=-1!==[L,y].indexOf(W),WM=null!=(rM=null==S?void 0:S[B])?rM:0,hM=fM?qM:dM-x[lM]-T[lM]-WM+k.altAxis,RM=fM?dM+x[lM]+T[lM]-WM-k.altAxis:uM,mM=d&&fM?function(M,b,p){var e=sM(M,b,p);return e>p?p:e}(hM,dM,RM):sM(d?hM:qM,dM,d?RM:uM);X[B]=mM,C[B]=mM-dM}b.modifiersData[e]=C}},requiresIfExists:["offset"]},dM={name:"arrow",enabled:!0,phase:"main",fn:function(M){var b,p=M.state,e=M.name,o=M.options,z=p.elements.arrow,t=p.modifiersData.popperOffsets,c=j(p.placement),n=U(c),O=[y,N].indexOf(c)>=0?"height":"width";if(z&&t){var i=function(M,b){return G("number"!=typeof(M="function"==typeof M?M(Object.assign({},b.rects,{placement:b.placement})):M)?M:V(M,X))}(o.padding,p),r=u(z),a="y"===n?L:y,s="y"===n?v:N,A=p.rects.reference[O]+p.rects.reference[n]-t[n]-p.rects.popper[O],d=t[n]-p.rects.reference[n],l=g(z),q=l?"y"===n?l.clientHeight||0:l.clientWidth||0:0,f=A/2-d/2,W=i[a],h=q-r[O]-i[s],R=q/2-r[O]/2+f,m=sM(W,R,h),B=n;p.modifiersData[e]=((b={})[B]=m,b.centerOffset=m-R,b)}},effect:function(M){var b=M.state,p=M.options.element,e=void 0===p?"[data-popper-arrow]":p;null!=e&&("string"!=typeof e||(e=b.elements.popper.querySelector(e)))&&D(b.elements.popper,e)&&(b.elements.arrow=e)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function lM(M,b,p){return void 0===p&&(p={x:0,y:0}),{top:M.top-b.height-p.y,right:M.right-b.width+p.x,bottom:M.bottom-b.height+p.y,left:M.left-b.width-p.x}}function qM(M){return[L,N,v,y].some(function(b){return M[b]>=0})}var uM={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(M){var b=M.state,p=M.name,e=b.rects.reference,o=b.rects.popper,z=b.modifiersData.preventOverflow,t=$(b,{elementContext:"reference"}),c=$(b,{altBoundary:!0}),n=lM(t,e),O=lM(c,o,z),i=qM(n),r=qM(O);b.modifiersData[p]={referenceClippingOffsets:n,popperEscapeOffsets:O,isReferenceHidden:i,hasPopperEscaped:r},b.attributes.popper=Object.assign({},b.attributes.popper,{"data-popper-reference-hidden":i,"data-popper-escaped":r})}},fM=J({defaultModifiers:[MM,bM,oM,zM]}),WM=[MM,bM,oM,zM,tM,aM,AM,dM,uM],hM=J({defaultModifiers:WM});M.applyStyles=zM,M.arrow=dM,M.computeStyles=oM,M.createPopper=hM,M.createPopperLite=fM,M.defaultModifiers=WM,M.detectOverflow=$,M.eventListeners=MM,M.flip=aM,M.hide=uM,M.offset=tM,M.popperGenerator=J,M.popperOffsets=bM,M.preventOverflow=AM,Object.defineProperty(M,"__esModule",{value:!0})}),function(M){var b,p,e="0.5.4",o="hasOwnProperty",z=/[\.\/]/,t=/\s*,\s*/,c=function(M,b){return M-b},n={n:{}},O=function(){for(var M=0,b=this.length;M<b;M++)if(void 0!==this[M])return this[M]},i=function(){for(var M=this.length;--M;)if(void 0!==this[M])return this[M]},r=Object.prototype.toString,a=String,s=Array.isArray||function(M){return M instanceof Array||"[object Array]"==r.call(M)},A=function(M,e){var o,z=p,t=Array.prototype.slice.call(arguments,2),n=A.listeners(M),r=0,a=[],s={},d=[],l=b;d.firstDefined=O,d.lastDefined=i,b=M,p=0;for(var q=0,u=n.length;q<u;q++)"zIndex"in n[q]&&(a.push(n[q].zIndex),n[q].zIndex<0&&(s[n[q].zIndex]=n[q]));for(a.sort(c);a[r]<0;)if(o=s[a[r++]],d.push(o.apply(e,t)),p)return p=z,d;for(q=0;q<u;q++)if("zIndex"in(o=n[q]))if(o.zIndex==a[r]){if(d.push(o.apply(e,t)),p)break;do{if((o=s[a[++r]])&&d.push(o.apply(e,t)),p)break}while(o)}else s[o.zIndex]=o;else if(d.push(o.apply(e,t)),p)break;return p=z,b=l,d};A._events=n,A.listeners=function(M){var b,p,e,o,t,c,O,i,r=s(M)?M:M.split(z),a=n,A=[a],d=[];for(o=0,t=r.length;o<t;o++){for(i=[],c=0,O=A.length;c<O;c++)for(p=[(a=A[c].n)[r[o]],a["*"]],e=2;e--;)(b=p[e])&&(i.push(b),d=d.concat(b.f||[]));A=i}return d},A.separator=function(M){M?(M="["+(M=a(M).replace(/(?=[\.\^\]\[\-])/g,"\\"))+"]",z=new RegExp(M)):z=/[\.\/]/},A.on=function(M,b){if("function"!=typeof b)return function(){};for(var p=s(M)?s(M[0])?M:[M]:a(M).split(t),e=0,o=p.length;e<o;e++)(function(M){for(var p,e=s(M)?M:a(M).split(z),o=n,t=0,c=e.length;t<c;t++)o=(o=o.n).hasOwnProperty(e[t])&&o[e[t]]||(o[e[t]]={n:{}});for(o.f=o.f||[],t=0,c=o.f.length;t<c;t++)if(o.f[t]==b){p=!0;break}!p&&o.f.push(b)})(p[e]);return function(M){+M==+M&&(b.zIndex=+M)}},A.f=function(M){var b=[].slice.call(arguments,1);return function(){A.apply(null,[M,null].concat(b).concat([].slice.call(arguments,0)))}},A.stop=function(){p=1},A.nt=function(M){var p=s(b)?b.join("."):b;return M?new RegExp("(?:\\.|\\/|^)"+M+"(?:\\.|\\/|$)").test(p):p},A.nts=function(){return s(b)?b:b.split(z)},A.off=A.unbind=function(M,b){if(M){var p=s(M)?s(M[0])?M:[M]:a(M).split(t);if(p.length>1)for(var e=0,c=p.length;e<c;e++)A.off(p[e],b);else{p=s(M)?M:a(M).split(z);var O,i,r,d,l,q=[n],u=[];for(e=0,c=p.length;e<c;e++)for(d=0;d<q.length;d+=r.length-2){if(r=[d,1],O=q[d].n,"*"!=p[e])O[p[e]]&&(r.push(O[p[e]]),u.unshift({n:O,name:p[e]}));else for(i in O)O[o](i)&&(r.push(O[i]),u.unshift({n:O,name:i}));q.splice.apply(q,r)}for(e=0,c=q.length;e<c;e++)for(O=q[e];O.n;){if(b){if(O.f){for(d=0,l=O.f.length;d<l;d++)if(O.f[d]==b){O.f.splice(d,1);break}!O.f.length&&delete O.f}for(i in O.n)if(O.n[o](i)&&O.n[i].f){var f=O.n[i].f;for(d=0,l=f.length;d<l;d++)if(f[d]==b){f.splice(d,1);break}!f.length&&delete O.n[i].f}}else for(i in delete O.f,O.n)O.n[o](i)&&O.n[i].f&&delete O.n[i].f;O=O.n}M:for(e=0,c=u.length;e<c;e++){for(i in(O=u[e]).n[O.name].f)continue M;for(i in O.n[O.name].n)continue M;delete O.n[O.name]}}}else A._events=n={n:{}}},A.once=function(M,b){var p=function(){return A.off(M,p),b.apply(this,arguments)};return A.on(M,p)},A.version=e,A.toString=function(){return"You are running Eve "+e},M.eve=A,"undefined"!=typeof module&&module.exports?module.exports=A:"function"==typeof define&&define.amd?define("eve",[],function(){return A}):M.eve=A}("undefined"!=typeof window?window:this),function(M,b){"object"==typeof exports&&"object"==typeof module?module.exports=b():"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?exports.Raphael=b():M.Raphael=b()}(this,function(){return function(M){var b={};function p(e){if(b[e])return b[e].exports;var o=b[e]={exports:{},id:e,loaded:!1};return M[e].call(o.exports,o,o.exports,p),o.loaded=!0,o.exports}return p.m=M,p.c=b,p.p="",p(0)}([function(M,b,p){var e,o;e=[p(1),p(3),p(4)],void 0===(o=function(M){return M}.apply(b,e))||(M.exports=o)},function(M,b,p){var e,o;e=[p(2)],o=function(M){function b(e){if(b.is(e,"function"))return p?e():M.on("raphael.DOMload",e);if(b.is(e,B))return b._engine.create[r](b,e.splice(0,3+b.is(e[0],N))).add(e);var o=Array.prototype.slice.call(arguments,0);if(b.is(o[o.length-1],"function")){var z=o.pop();return p?z.call(b._engine.create[r](b,o)):M.on("raphael.DOMload",function(){z.call(b._engine.create[r](b,o))})}return b._engine.create[r](b,arguments)}b.version="2.2.0",b.eve=M;var p,e,o=/[, ]+/,z={circle:1,rect:1,path:1,ellipse:1,text:1,image:1},t=/\{(\d+)\}/g,c="hasOwnProperty",n={doc:document,win:window},O={was:Object.prototype[c].call(n.win,"Raphael"),is:n.win.Raphael},i=function(){this.ca=this.customAttributes={}},r="apply",a="concat",s="ontouchstart"in n.win||n.win.DocumentTouch&&n.doc instanceof DocumentTouch,A="",d=" ",l=String,q="split",u="click dblclick mousedown mousemove mouseout mouseover mouseup touchstart touchmove touchend touchcancel"[q](d),f={mousedown:"touchstart",mousemove:"touchmove",mouseup:"touchend"},W=l.prototype.toLowerCase,h=Math,R=h.max,m=h.min,g=h.abs,L=h.pow,v=h.PI,N="number",y="string",B="array",X=Object.prototype.toString,w=(b._ISURL=/^url\(['"]?(.+?)['"]?\)$/i,/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+(?:%?\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i),x={NaN:1,Infinity:1,"-Infinity":1},T=/^(?:cubic-)?bezier\(([^,]+),([^,]+),([^,]+),([^\)]+)\)/,_=h.round,k=parseFloat,S=parseInt,C=l.prototype.toUpperCase,E=b._availableAttrs={"arrow-end":"none","arrow-start":"none",blur:0,"clip-rect":"0 0 1e9 1e9",cursor:"default",cx:0,cy:0,fill:"#fff","fill-opacity":1,font:'10px "Arial"',"font-family":'"Arial"',"font-size":"10","font-style":"normal","font-weight":400,gradient:0,height:0,href:"http://raphaeljs.com/","letter-spacing":0,opacity:1,path:"M0,0",r:0,rx:0,ry:0,src:"",stroke:"#000","stroke-dasharray":"","stroke-linecap":"butt","stroke-linejoin":"butt","stroke-miterlimit":0,"stroke-opacity":1,"stroke-width":1,target:"_blank","text-anchor":"middle",title:"Raphael",transform:"",width:0,x:0,y:0,class:""},D=b._availableAnimAttrs={blur:N,"clip-rect":"csv",cx:N,cy:N,fill:"colour","fill-opacity":N,"font-size":N,height:N,opacity:N,path:"path",r:N,rx:N,ry:N,stroke:"colour","stroke-opacity":N,"stroke-width":N,transform:"transform",width:N,x:N,y:N},P=/[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/,I={hs:1,rg:1},F=/,?([achlmqrstvxz]),?/gi,j=/([achlmrqstvz])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,H=/([rstm])[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029,]*((-?\d*\.?\d*(?:e[\-+]?\d+)?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*)+)/gi,U=/(-?\d*\.?\d*(?:e[\-+]?\d+)?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,?[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*/gi,Y=(b._radial_gradient=/^r(?:\(([^,]+?)[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*,[\x09\x0a\x0b\x0c\x0d\x20\xa0\u1680\u180e\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u202f\u205f\u3000\u2028\u2029]*([^\)]+?)\))?/,{}),G=function(M,b){return k(M)-k(b)},V=function(M){return M},$=b._rectPath=function(M,b,p,e,o){return o?[["M",M+o,b],["l",p-2*o,0],["a",o,o,0,0,1,o,o],["l",0,e-2*o],["a",o,o,0,0,1,-o,o],["l",2*o-p,0],["a",o,o,0,0,1,-o,-o],["l",0,2*o-e],["a",o,o,0,0,1,o,-o],["z"]]:[["M",M,b],["l",p,0],["l",0,e],["l",-p,0],["z"]]},K=function(M,b,p,e){return null==e&&(e=p),[["M",M,b],["m",0,-e],["a",p,e,0,1,1,0,2*e],["a",p,e,0,1,1,0,-2*e],["z"]]},Q=b._getPath={path:function(M){return M.attr("path")},circle:function(M){var b=M.attrs;return K(b.cx,b.cy,b.r)},ellipse:function(M){var b=M.attrs;return K(b.cx,b.cy,b.rx,b.ry)},rect:function(M){var b=M.attrs;return $(b.x,b.y,b.width,b.height,b.r)},image:function(M){var b=M.attrs;return $(b.x,b.y,b.width,b.height)},text:function(M){var b=M._getBBox();return $(b.x,b.y,b.width,b.height)},set:function(M){var b=M._getBBox();return $(b.x,b.y,b.width,b.height)}},J=b.mapPath=function(M,b){if(!b)return M;var p,e,o,z,t,c,n;for(o=0,t=(M=yM(M)).length;o<t;o++)for(z=1,c=(n=M[o]).length;z<c;z+=2)p=b.x(n[z],n[z+1]),e=b.y(n[z],n[z+1]),n[z]=p,n[z+1]=e;return M};if(b._g=n,b.type=n.win.SVGAngle||n.doc.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure","1.1")?"SVG":"VML","VML"==b.type){var Z,MM=n.doc.createElement("div");if(MM.innerHTML='<v:shape adj="1"/>',(Z=MM.firstChild).style.behavior="url(#default#VML)",!Z||"object"!=typeof Z.adj)return b.type=A;MM=null}function bM(M){if("function"==typeof M||Object(M)!==M)return M;var b=new M.constructor;for(var p in M)M[c](p)&&(b[p]=bM(M[p]));return b}b.svg=!(b.vml="VML"==b.type),b._Paper=i,b.fn=e=i.prototype=b.prototype,b._id=0,b.is=function(M,b){return"finite"==(b=W.call(b))?!x[c](+M):"array"==b?M instanceof Array:"null"==b&&null===M||b==typeof M&&null!==M||"object"==b&&M===Object(M)||"array"==b&&Array.isArray&&Array.isArray(M)||X.call(M).slice(8,-1).toLowerCase()==b},b.angle=function(M,p,e,o,z,t){if(null==z){var c=M-e,n=p-o;return c||n?(180+180*h.atan2(-n,-c)/v+360)%360:0}return b.angle(M,p,z,t)-b.angle(e,o,z,t)},b.rad=function(M){return M%360*v/180},b.deg=function(M){return Math.round(180*M/v%360*1e3)/1e3},b.snapTo=function(M,p,e){if(e=b.is(e,"finite")?e:10,b.is(M,B)){for(var o=M.length;o--;)if(g(M[o]-p)<=e)return M[o]}else{var z=p%(M=+M);if(z<e)return p-z;if(z>M-e)return p-z+M}return p};var pM,eM;b.createUUID=(pM=/[xy]/g,eM=function(M){var b=16*h.random()|0;return("x"==M?b:3&b|8).toString(16)},function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(pM,eM).toUpperCase()});b.setWindow=function(p){M("raphael.setWindow",b,n.win,p),n.win=p,n.doc=n.win.document,b._engine.initWin&&b._engine.initWin(n.win)};var oM=function(M){if(b.vml){var p,e=/^\s+|\s+$/g;try{var o=new ActiveXObject("htmlfile");o.write("<body>"),o.close(),p=o.body}catch(M){p=createPopup().document.body}var z=p.createTextRange();oM=iM(function(M){try{p.style.color=l(M).replace(e,A);var b=z.queryCommandValue("ForeColor");return"#"+("000000"+(b=(255&b)<<16|65280&b|(16711680&b)>>>16).toString(16)).slice(-6)}catch(M){return"none"}})}else{var t=n.doc.createElement("i");t.title="Raphaël Colour Picker",t.style.display="none",n.doc.body.appendChild(t),oM=iM(function(M){return t.style.color=M,n.doc.defaultView.getComputedStyle(t,A).getPropertyValue("color")})}return oM(M)},zM=function(){return"hsb("+[this.h,this.s,this.b]+")"},tM=function(){return"hsl("+[this.h,this.s,this.l]+")"},cM=function(){return this.hex},nM=function(M,p,e){if(null==p&&b.is(M,"object")&&"r"in M&&"g"in M&&"b"in M&&(e=M.b,p=M.g,M=M.r),null==p&&b.is(M,y)){var o=b.getRGB(M);M=o.r,p=o.g,e=o.b}return(M>1||p>1||e>1)&&(M/=255,p/=255,e/=255),[M,p,e]},OM=function(M,p,e,o){var z={r:M*=255,g:p*=255,b:e*=255,hex:b.rgb(M,p,e),toString:cM};return b.is(o,"finite")&&(z.opacity=o),z};function iM(M,b,p){return function e(){var o=Array.prototype.slice.call(arguments,0),z=o.join("␀"),t=e.cache=e.cache||{},n=e.count=e.count||[];return t[c](z)?(function(M,b){for(var p=0,e=M.length;p<e;p++)if(M[p]===b)return M.push(M.splice(p,1)[0])}(n,z),p?p(t[z]):t[z]):(n.length>=1e3&&delete t[n.shift()],n.push(z),t[z]=M[r](b,o),p?p(t[z]):t[z])}}b.color=function(M){var p;return b.is(M,"object")&&"h"in M&&"s"in M&&"b"in M?(p=b.hsb2rgb(M),M.r=p.r,M.g=p.g,M.b=p.b,M.hex=p.hex):b.is(M,"object")&&"h"in M&&"s"in M&&"l"in M?(p=b.hsl2rgb(M),M.r=p.r,M.g=p.g,M.b=p.b,M.hex=p.hex):(b.is(M,"string")&&(M=b.getRGB(M)),b.is(M,"object")&&"r"in M&&"g"in M&&"b"in M?(p=b.rgb2hsl(M),M.h=p.h,M.s=p.s,M.l=p.l,p=b.rgb2hsb(M),M.v=p.b):(M={hex:"none"}).r=M.g=M.b=M.h=M.s=M.v=M.l=-1),M.toString=cM,M},b.hsb2rgb=function(M,b,p,e){var o,z,t,c,n;return this.is(M,"object")&&"h"in M&&"s"in M&&"b"in M&&(p=M.b,b=M.s,e=M.o,M=M.h),c=(n=p*b)*(1-g((M=(M*=360)%360/60)%2-1)),o=z=t=p-n,OM(o+=[n,c,0,0,c,n][M=~~M],z+=[c,n,n,c,0,0][M],t+=[0,0,c,n,n,c][M],e)},b.hsl2rgb=function(M,b,p,e){var o,z,t,c,n;return this.is(M,"object")&&"h"in M&&"s"in M&&"l"in M&&(p=M.l,b=M.s,M=M.h),(M>1||b>1||p>1)&&(M/=360,b/=100,p/=100),c=(n=2*b*(p<.5?p:1-p))*(1-g((M=(M*=360)%360/60)%2-1)),o=z=t=p-n/2,OM(o+=[n,c,0,0,c,n][M=~~M],z+=[c,n,n,c,0,0][M],t+=[0,0,c,n,n,c][M],e)},b.rgb2hsb=function(M,b,p){var e,o;return M=(p=nM(M,b,p))[0],b=p[1],p=p[2],{h:((0==(o=(e=R(M,b,p))-m(M,b,p))?null:e==M?(b-p)/o:e==b?(p-M)/o+2:(M-b)/o+4)+360)%6*60/360,s:0==o?0:o/e,b:e,toString:zM}},b.rgb2hsl=function(M,b,p){var e,o,z,t;return M=(p=nM(M,b,p))[0],b=p[1],p=p[2],e=((o=R(M,b,p))+(z=m(M,b,p)))/2,{h:((0==(t=o-z)?null:o==M?(b-p)/t:o==b?(p-M)/t+2:(M-b)/t+4)+360)%6*60/360,s:0==t?0:e<.5?t/(2*e):t/(2-2*e),l:e,toString:tM}},b._path2string=function(){return this.join(",").replace(F,"$1")};b._preload=function(M,b){var p=n.doc.createElement("img");p.style.cssText="position:absolute;left:-9999em;top:-9999em",p.onload=function(){b.call(this),this.onload=null,n.doc.body.removeChild(this)},p.onerror=function(){n.doc.body.removeChild(this)},n.doc.body.appendChild(p),p.src=M};function rM(){return this.hex}function aM(M,b){for(var p=[],e=0,o=M.length;o-2*!b>e;e+=2){var z=[{x:+M[e-2],y:+M[e-1]},{x:+M[e],y:+M[e+1]},{x:+M[e+2],y:+M[e+3]},{x:+M[e+4],y:+M[e+5]}];b?e?o-4==e?z[3]={x:+M[0],y:+M[1]}:o-2==e&&(z[2]={x:+M[0],y:+M[1]},z[3]={x:+M[2],y:+M[3]}):z[0]={x:+M[o-2],y:+M[o-1]}:o-4==e?z[3]=z[2]:e||(z[0]={x:+M[e],y:+M[e+1]}),p.push(["C",(-z[0].x+6*z[1].x+z[2].x)/6,(-z[0].y+6*z[1].y+z[2].y)/6,(z[1].x+6*z[2].x-z[3].x)/6,(z[1].y+6*z[2].y-z[3].y)/6,z[2].x,z[2].y])}return p}b.getRGB=iM(function(M){if(!M||(M=l(M)).indexOf("-")+1)return{r:-1,g:-1,b:-1,hex:"none",error:1,toString:rM};if("none"==M)return{r:-1,g:-1,b:-1,hex:"none",toString:rM};!I[c](M.toLowerCase().substring(0,2))&&"#"!=M.charAt()&&(M=oM(M));var p,e,o,z,t,n,O=M.match(w);return O?(O[2]&&(o=S(O[2].substring(5),16),e=S(O[2].substring(3,5),16),p=S(O[2].substring(1,3),16)),O[3]&&(o=S((t=O[3].charAt(3))+t,16),e=S((t=O[3].charAt(2))+t,16),p=S((t=O[3].charAt(1))+t,16)),O[4]&&(n=O[4][q](P),p=k(n[0]),"%"==n[0].slice(-1)&&(p*=2.55),e=k(n[1]),"%"==n[1].slice(-1)&&(e*=2.55),o=k(n[2]),"%"==n[2].slice(-1)&&(o*=2.55),"rgba"==O[1].toLowerCase().slice(0,4)&&(z=k(n[3])),n[3]&&"%"==n[3].slice(-1)&&(z/=100)),O[5]?(n=O[5][q](P),p=k(n[0]),"%"==n[0].slice(-1)&&(p*=2.55),e=k(n[1]),"%"==n[1].slice(-1)&&(e*=2.55),o=k(n[2]),"%"==n[2].slice(-1)&&(o*=2.55),("deg"==n[0].slice(-3)||"°"==n[0].slice(-1))&&(p/=360),"hsba"==O[1].toLowerCase().slice(0,4)&&(z=k(n[3])),n[3]&&"%"==n[3].slice(-1)&&(z/=100),b.hsb2rgb(p,e,o,z)):O[6]?(n=O[6][q](P),p=k(n[0]),"%"==n[0].slice(-1)&&(p*=2.55),e=k(n[1]),"%"==n[1].slice(-1)&&(e*=2.55),o=k(n[2]),"%"==n[2].slice(-1)&&(o*=2.55),("deg"==n[0].slice(-3)||"°"==n[0].slice(-1))&&(p/=360),"hsla"==O[1].toLowerCase().slice(0,4)&&(z=k(n[3])),n[3]&&"%"==n[3].slice(-1)&&(z/=100),b.hsl2rgb(p,e,o,z)):((O={r:p,g:e,b:o,toString:rM}).hex="#"+(16777216|o|e<<8|p<<16).toString(16).slice(1),b.is(z,"finite")&&(O.opacity=z),O)):{r:-1,g:-1,b:-1,hex:"none",error:1,toString:rM}},b),b.hsb=iM(function(M,p,e){return b.hsb2rgb(M,p,e).hex}),b.hsl=iM(function(M,p,e){return b.hsl2rgb(M,p,e).hex}),b.rgb=iM(function(M,b,p){function e(M){return M+.5|0}return"#"+(16777216|e(p)|e(b)<<8|e(M)<<16).toString(16).slice(1)}),b.getColor=function(M){var b=this.getColor.start=this.getColor.start||{h:0,s:1,b:M||.75},p=this.hsb2rgb(b.h,b.s,b.b);return b.h+=.075,b.h>1&&(b.h=0,b.s-=.2,b.s<=0&&(this.getColor.start={h:0,s:1,b:b.b})),p.hex},b.getColor.reset=function(){delete this.start},b.parsePathString=function(M){if(!M)return null;var p=sM(M);if(p.arr)return WM(p.arr);var e={a:7,c:6,h:1,l:2,m:2,r:4,q:4,s:4,t:2,v:1,z:0},o=[];return b.is(M,B)&&b.is(M[0],B)&&(o=WM(M)),o.length||l(M).replace(j,function(M,b,p){var z=[],t=b.toLowerCase();if(p.replace(U,function(M,b){b&&z.push(+b)}),"m"==t&&z.length>2&&(o.push([b][a](z.splice(0,2))),t="l",b="m"==b?"l":"L"),"r"==t)o.push([b][a](z));else for(;z.length>=e[t]&&(o.push([b][a](z.splice(0,e[t]))),e[t]););}),o.toString=b._path2string,p.arr=WM(o),o},b.parseTransformString=iM(function(M){if(!M)return null;var p=[];return b.is(M,B)&&b.is(M[0],B)&&(p=WM(M)),p.length||l(M).replace(H,function(M,b,e){var o=[];W.call(b);e.replace(U,function(M,b){b&&o.push(+b)}),p.push([b][a](o))}),p.toString=b._path2string,p});var sM=function(M){var b=sM.ps=sM.ps||{};return b[M]?b[M].sleep=100:b[M]={sleep:100},setTimeout(function(){for(var p in b)b[c](p)&&p!=M&&(b[p].sleep--,!b[p].sleep&&delete b[p])}),b[M]};function AM(M,b,p,e,o){return M*(M*(-3*b+9*p-9*e+3*o)+6*b-12*p+6*e)-3*b+3*p}function dM(M,b,p,e,o,z,t,c,n){null==n&&(n=1);for(var O=(n=n>1?1:n<0?0:n)/2,i=[-.1252,.1252,-.3678,.3678,-.5873,.5873,-.7699,.7699,-.9041,.9041,-.9816,.9816],r=[.2491,.2491,.2335,.2335,.2032,.2032,.1601,.1601,.1069,.1069,.0472,.0472],a=0,s=0;s<12;s++){var A=O*i[s]+O,d=AM(A,M,p,o,t),l=AM(A,b,e,z,c),q=d*d+l*l;a+=r[s]*h.sqrt(q)}return O*a}function lM(M,b,p,e,o,z,t,c){if(!(R(M,p)<m(o,t)||m(M,p)>R(o,t)||R(b,e)<m(z,c)||m(b,e)>R(z,c))){var n=(M-p)*(z-c)-(b-e)*(o-t);if(n){var O=((M*e-b*p)*(o-t)-(M-p)*(o*c-z*t))/n,i=((M*e-b*p)*(z-c)-(b-e)*(o*c-z*t))/n,r=+O.toFixed(2),a=+i.toFixed(2);if(!(r<+m(M,p).toFixed(2)||r>+R(M,p).toFixed(2)||r<+m(o,t).toFixed(2)||r>+R(o,t).toFixed(2)||a<+m(b,e).toFixed(2)||a>+R(b,e).toFixed(2)||a<+m(z,c).toFixed(2)||a>+R(z,c).toFixed(2)))return{x:O,y:i}}}}function qM(M,p,e){var o=b.bezierBBox(M),z=b.bezierBBox(p);if(!b.isBBoxIntersect(o,z))return e?0:[];for(var t=dM.apply(0,M),c=dM.apply(0,p),n=R(~~(t/5),1),O=R(~~(c/5),1),i=[],r=[],a={},s=e?0:[],A=0;A<n+1;A++){var d=b.findDotsAtSegment.apply(b,M.concat(A/n));i.push({x:d.x,y:d.y,t:A/n})}for(A=0;A<O+1;A++)d=b.findDotsAtSegment.apply(b,p.concat(A/O)),r.push({x:d.x,y:d.y,t:A/O});for(A=0;A<n;A++)for(var l=0;l<O;l++){var q=i[A],u=i[A+1],f=r[l],W=r[l+1],h=g(u.x-q.x)<.001?"y":"x",L=g(W.x-f.x)<.001?"y":"x",v=lM(q.x,q.y,u.x,u.y,f.x,f.y,W.x,W.y);if(v){if(a[v.x.toFixed(4)]==v.y.toFixed(4))continue;a[v.x.toFixed(4)]=v.y.toFixed(4);var N=q.t+g((v[h]-q[h])/(u[h]-q[h]))*(u.t-q.t),y=f.t+g((v[L]-f[L])/(W[L]-f[L]))*(W.t-f.t);N>=0&&N<=1.001&&y>=0&&y<=1.001&&(e?s++:s.push({x:v.x,y:v.y,t1:m(N,1),t2:m(y,1)}))}}return s}function uM(M,p,e){M=b._path2curve(M),p=b._path2curve(p);for(var o,z,t,c,n,O,i,r,a,s,A=e?0:[],d=0,l=M.length;d<l;d++){var q=M[d];if("M"==q[0])o=n=q[1],z=O=q[2];else{"C"==q[0]?(a=[o,z].concat(q.slice(1)),o=a[6],z=a[7]):(a=[o,z,o,z,n,O,n,O],o=n,z=O);for(var u=0,f=p.length;u<f;u++){var W=p[u];if("M"==W[0])t=i=W[1],c=r=W[2];else{"C"==W[0]?(s=[t,c].concat(W.slice(1)),t=s[6],c=s[7]):(s=[t,c,t,c,i,r,i,r],t=i,c=r);var h=qM(a,s,e);if(e)A+=h;else{for(var R=0,m=h.length;R<m;R++)h[R].segment1=d,h[R].segment2=u,h[R].bez1=a,h[R].bez2=s;A=A.concat(h)}}}}}return A}b.findDotsAtSegment=function(M,b,p,e,o,z,t,c,n){var O=1-n,i=L(O,3),r=L(O,2),a=n*n,s=a*n,A=i*M+3*r*n*p+3*O*n*n*o+s*t,d=i*b+3*r*n*e+3*O*n*n*z+s*c,l=M+2*n*(p-M)+a*(o-2*p+M),q=b+2*n*(e-b)+a*(z-2*e+b),u=p+2*n*(o-p)+a*(t-2*o+p),f=e+2*n*(z-e)+a*(c-2*z+e),W=O*M+n*p,R=O*b+n*e,m=O*o+n*t,g=O*z+n*c,N=90-180*h.atan2(l-u,q-f)/v;return(l>u||q<f)&&(N+=180),{x:A,y:d,m:{x:l,y:q},n:{x:u,y:f},start:{x:W,y:R},end:{x:m,y:g},alpha:N}},b.bezierBBox=function(M,p,e,o,z,t,c,n){b.is(M,"array")||(M=[M,p,e,o,z,t,c,n]);var O=NM.apply(null,M);return{x:O.min.x,y:O.min.y,x2:O.max.x,y2:O.max.y,width:O.max.x-O.min.x,height:O.max.y-O.min.y}},b.isPointInsideBBox=function(M,b,p){return b>=M.x&&b<=M.x2&&p>=M.y&&p<=M.y2},b.isBBoxIntersect=function(M,p){var e=b.isPointInsideBBox;return e(p,M.x,M.y)||e(p,M.x2,M.y)||e(p,M.x,M.y2)||e(p,M.x2,M.y2)||e(M,p.x,p.y)||e(M,p.x2,p.y)||e(M,p.x,p.y2)||e(M,p.x2,p.y2)||(M.x<p.x2&&M.x>p.x||p.x<M.x2&&p.x>M.x)&&(M.y<p.y2&&M.y>p.y||p.y<M.y2&&p.y>M.y)},b.pathIntersection=function(M,b){return uM(M,b)},b.pathIntersectionNumber=function(M,b){return uM(M,b,1)},b.isPointInsidePath=function(M,p,e){var o=b.pathBBox(M);return b.isPointInsideBBox(o,p,e)&&uM(M,[["M",p,e],["H",o.x2+10]],1)%2==1},b._removedFactory=function(b){return function(){M("raphael.log",null,"Raphaël: you are calling to method “"+b+"” of removed object",b)}};var fM=b.pathBBox=function(M){var b=sM(M);if(b.bbox)return bM(b.bbox);if(!M)return{x:0,y:0,width:0,height:0,x2:0,y2:0};for(var p,e=0,o=0,z=[],t=[],c=0,n=(M=yM(M)).length;c<n;c++)if("M"==(p=M[c])[0])e=p[1],o=p[2],z.push(e),t.push(o);else{var O=NM(e,o,p[1],p[2],p[3],p[4],p[5],p[6]);z=z[a](O.min.x,O.max.x),t=t[a](O.min.y,O.max.y),e=p[5],o=p[6]}var i=m[r](0,z),s=m[r](0,t),A=R[r](0,z),d=R[r](0,t),l=A-i,q=d-s,u={x:i,y:s,x2:A,y2:d,width:l,height:q,cx:i+l/2,cy:s+q/2};return b.bbox=bM(u),u},WM=function(M){var p=bM(M);return p.toString=b._path2string,p},hM=b._pathToRelative=function(M){var p=sM(M);if(p.rel)return WM(p.rel);b.is(M,B)&&b.is(M&&M[0],B)||(M=b.parsePathString(M));var e=[],o=0,z=0,t=0,c=0,n=0;"M"==M[0][0]&&(t=o=M[0][1],c=z=M[0][2],n++,e.push(["M",o,z]));for(var O=n,i=M.length;O<i;O++){var r=e[O]=[],a=M[O];if(a[0]!=W.call(a[0]))switch(r[0]=W.call(a[0]),r[0]){case"a":r[1]=a[1],r[2]=a[2],r[3]=a[3],r[4]=a[4],r[5]=a[5],r[6]=+(a[6]-o).toFixed(3),r[7]=+(a[7]-z).toFixed(3);break;case"v":r[1]=+(a[1]-z).toFixed(3);break;case"m":t=a[1],c=a[2];default:for(var s=1,A=a.length;s<A;s++)r[s]=+(a[s]-(s%2?o:z)).toFixed(3)}else{r=e[O]=[],"m"==a[0]&&(t=a[1]+o,c=a[2]+z);for(var d=0,l=a.length;d<l;d++)e[O][d]=a[d]}var q=e[O].length;switch(e[O][0]){case"z":o=t,z=c;break;case"h":o+=+e[O][q-1];break;case"v":z+=+e[O][q-1];break;default:o+=+e[O][q-2],z+=+e[O][q-1]}}return e.toString=b._path2string,p.rel=WM(e),e},RM=b._pathToAbsolute=function(M){var p=sM(M);if(p.abs)return WM(p.abs);if(b.is(M,B)&&b.is(M&&M[0],B)||(M=b.parsePathString(M)),!M||!M.length)return[["M",0,0]];var e=[],o=0,z=0,t=0,c=0,n=0;"M"==M[0][0]&&(t=o=+M[0][1],c=z=+M[0][2],n++,e[0]=["M",o,z]);for(var O,i,r=3==M.length&&"M"==M[0][0]&&"R"==M[1][0].toUpperCase()&&"Z"==M[2][0].toUpperCase(),s=n,A=M.length;s<A;s++){if(e.push(O=[]),(i=M[s])[0]!=C.call(i[0]))switch(O[0]=C.call(i[0]),O[0]){case"A":O[1]=i[1],O[2]=i[2],O[3]=i[3],O[4]=i[4],O[5]=i[5],O[6]=+(i[6]+o),O[7]=+(i[7]+z);break;case"V":O[1]=+i[1]+z;break;case"H":O[1]=+i[1]+o;break;case"R":for(var d=[o,z][a](i.slice(1)),l=2,q=d.length;l<q;l++)d[l]=+d[l]+o,d[++l]=+d[l]+z;e.pop(),e=e[a](aM(d,r));break;case"M":t=+i[1]+o,c=+i[2]+z;default:for(l=1,q=i.length;l<q;l++)O[l]=+i[l]+(l%2?o:z)}else if("R"==i[0])d=[o,z][a](i.slice(1)),e.pop(),e=e[a](aM(d,r)),O=["R"][a](i.slice(-2));else for(var u=0,f=i.length;u<f;u++)O[u]=i[u];switch(O[0]){case"Z":o=t,z=c;break;case"H":o=O[1];break;case"V":z=O[1];break;case"M":t=O[O.length-2],c=O[O.length-1];default:o=O[O.length-2],z=O[O.length-1]}}return e.toString=b._path2string,p.abs=WM(e),e},mM=function(M,b,p,e){return[M,b,p,e,p,e]},gM=function(M,b,p,e,o,z){var t=1/3,c=2/3;return[t*M+c*p,t*b+c*e,t*o+c*p,t*z+c*e,o,z]},LM=function(M,b,p,e,o,z,t,c,n,O){var i,r=120*v/180,s=v/180*(+o||0),A=[],d=iM(function(M,b,p){return{x:M*h.cos(p)-b*h.sin(p),y:M*h.sin(p)+b*h.cos(p)}});if(O)y=O[0],B=O[1],L=O[2],N=O[3];else{M=(i=d(M,b,-s)).x,b=i.y,c=(i=d(c,n,-s)).x,n=i.y;h.cos(v/180*o),h.sin(v/180*o);var l=(M-c)/2,u=(b-n)/2,f=l*l/(p*p)+u*u/(e*e);f>1&&(p*=f=h.sqrt(f),e*=f);var W=p*p,R=e*e,m=(z==t?-1:1)*h.sqrt(g((W*R-W*u*u-R*l*l)/(W*u*u+R*l*l))),L=m*p*u/e+(M+c)/2,N=m*-e*l/p+(b+n)/2,y=h.asin(((b-N)/e).toFixed(9)),B=h.asin(((n-N)/e).toFixed(9));(y=M<L?v-y:y)<0&&(y=2*v+y),(B=c<L?v-B:B)<0&&(B=2*v+B),t&&y>B&&(y-=2*v),!t&&B>y&&(B-=2*v)}var X=B-y;if(g(X)>r){var w=B,x=c,T=n;B=y+r*(t&&B>y?1:-1),c=L+p*h.cos(B),n=N+e*h.sin(B),A=LM(c,n,p,e,o,0,t,x,T,[B,w,L,N])}X=B-y;var _=h.cos(y),k=h.sin(y),S=h.cos(B),C=h.sin(B),E=h.tan(X/4),D=4/3*p*E,P=4/3*e*E,I=[M,b],F=[M+D*k,b-P*_],j=[c+D*C,n-P*S],H=[c,n];if(F[0]=2*I[0]-F[0],F[1]=2*I[1]-F[1],O)return[F,j,H][a](A);for(var U=[],Y=0,G=(A=[F,j,H][a](A).join()[q](",")).length;Y<G;Y++)U[Y]=Y%2?d(A[Y-1],A[Y],s).y:d(A[Y],A[Y+1],s).x;return U},vM=function(M,b,p,e,o,z,t,c,n){var O=1-n;return{x:L(O,3)*M+3*L(O,2)*n*p+3*O*n*n*o+L(n,3)*t,y:L(O,3)*b+3*L(O,2)*n*e+3*O*n*n*z+L(n,3)*c}},NM=iM(function(M,b,p,e,o,z,t,c){var n,O=o-2*p+M-(t-2*o+p),i=2*(p-M)-2*(o-p),a=M-p,s=(-i+h.sqrt(i*i-4*O*a))/2/O,A=(-i-h.sqrt(i*i-4*O*a))/2/O,d=[b,c],l=[M,t];return g(s)>"1e12"&&(s=.5),g(A)>"1e12"&&(A=.5),s>0&&s<1&&(n=vM(M,b,p,e,o,z,t,c,s),l.push(n.x),d.push(n.y)),A>0&&A<1&&(n=vM(M,b,p,e,o,z,t,c,A),l.push(n.x),d.push(n.y)),O=z-2*e+b-(c-2*z+e),a=b-e,s=(-(i=2*(e-b)-2*(z-e))+h.sqrt(i*i-4*O*a))/2/O,A=(-i-h.sqrt(i*i-4*O*a))/2/O,g(s)>"1e12"&&(s=.5),g(A)>"1e12"&&(A=.5),s>0&&s<1&&(n=vM(M,b,p,e,o,z,t,c,s),l.push(n.x),d.push(n.y)),A>0&&A<1&&(n=vM(M,b,p,e,o,z,t,c,A),l.push(n.x),d.push(n.y)),{min:{x:m[r](0,l),y:m[r](0,d)},max:{x:R[r](0,l),y:R[r](0,d)}}}),yM=b._path2curve=iM(function(M,b){var p=!b&&sM(M);if(!b&&p.curve)return WM(p.curve);for(var e=RM(M),o=b&&RM(b),z={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},t={x:0,y:0,bx:0,by:0,X:0,Y:0,qx:null,qy:null},c=function(M,b,p){var e,o;if(!M)return["C",b.x,b.y,b.x,b.y,b.x,b.y];switch(!(M[0]in{T:1,Q:1})&&(b.qx=b.qy=null),M[0]){case"M":b.X=M[1],b.Y=M[2];break;case"A":M=["C"][a](LM[r](0,[b.x,b.y][a](M.slice(1))));break;case"S":"C"==p||"S"==p?(e=2*b.x-b.bx,o=2*b.y-b.by):(e=b.x,o=b.y),M=["C",e,o][a](M.slice(1));break;case"T":"Q"==p||"T"==p?(b.qx=2*b.x-b.qx,b.qy=2*b.y-b.qy):(b.qx=b.x,b.qy=b.y),M=["C"][a](gM(b.x,b.y,b.qx,b.qy,M[1],M[2]));break;case"Q":b.qx=M[1],b.qy=M[2],M=["C"][a](gM(b.x,b.y,M[1],M[2],M[3],M[4]));break;case"L":M=["C"][a](mM(b.x,b.y,M[1],M[2]));break;case"H":M=["C"][a](mM(b.x,b.y,M[1],b.y));break;case"V":M=["C"][a](mM(b.x,b.y,b.x,M[1]));break;case"Z":M=["C"][a](mM(b.x,b.y,b.X,b.Y))}return M},n=function(M,b){if(M[b].length>7){M[b].shift();for(var p=M[b];p.length;)i[b]="A",o&&(s[b]="A"),M.splice(b++,0,["C"][a](p.splice(0,6)));M.splice(b,1),q=R(e.length,o&&o.length||0)}},O=function(M,b,p,z,t){M&&b&&"M"==M[t][0]&&"M"!=b[t][0]&&(b.splice(t,0,["M",z.x,z.y]),p.bx=0,p.by=0,p.x=M[t][1],p.y=M[t][2],q=R(e.length,o&&o.length||0))},i=[],s=[],A="",d="",l=0,q=R(e.length,o&&o.length||0);l<q;l++){e[l]&&(A=e[l][0]),"C"!=A&&(i[l]=A,l&&(d=i[l-1])),e[l]=c(e[l],z,d),"A"!=i[l]&&"C"==A&&(i[l]="C"),n(e,l),o&&(o[l]&&(A=o[l][0]),"C"!=A&&(s[l]=A,l&&(d=s[l-1])),o[l]=c(o[l],t,d),"A"!=s[l]&&"C"==A&&(s[l]="C"),n(o,l)),O(e,o,z,t,l),O(o,e,t,z,l);var u=e[l],f=o&&o[l],W=u.length,h=o&&f.length;z.x=u[W-2],z.y=u[W-1],z.bx=k(u[W-4])||z.x,z.by=k(u[W-3])||z.y,t.bx=o&&(k(f[h-4])||t.x),t.by=o&&(k(f[h-3])||t.y),t.x=o&&f[h-2],t.y=o&&f[h-1]}return o||(p.curve=WM(e)),o?[e,o]:e},null,WM),BM=(b._parseDots=iM(function(M){for(var p=[],e=0,o=M.length;e<o;e++){var z={},t=M[e].match(/^([^:]*):?([\d\.]*)/);if(z.color=b.getRGB(t[1]),z.color.error)return null;z.opacity=z.color.opacity,z.color=z.color.hex,t[2]&&(z.offset=t[2]+"%"),p.push(z)}for(e=1,o=p.length-1;e<o;e++)if(!p[e].offset){for(var c=k(p[e-1].offset||0),n=0,O=e+1;O<o;O++)if(p[O].offset){n=p[O].offset;break}n||(n=100,O=o);for(var i=((n=k(n))-c)/(O-e+1);e<O;e++)c+=i,p[e].offset=c+"%"}return p}),b._tear=function(M,b){M==b.top&&(b.top=M.prev),M==b.bottom&&(b.bottom=M.next),M.next&&(M.next.prev=M.prev),M.prev&&(M.prev.next=M.next)}),XM=(b._tofront=function(M,b){b.top!==M&&(BM(M,b),M.next=null,M.prev=b.top,b.top.next=M,b.top=M)},b._toback=function(M,b){b.bottom!==M&&(BM(M,b),M.next=b.bottom,M.prev=null,b.bottom.prev=M,b.bottom=M)},b._insertafter=function(M,b,p){BM(M,p),b==p.top&&(p.top=M),b.next&&(b.next.prev=M),M.next=b.next,M.prev=b,b.next=M},b._insertbefore=function(M,b,p){BM(M,p),b==p.bottom&&(p.bottom=M),b.prev&&(b.prev.next=M),M.prev=b.prev,b.prev=M,M.next=b},b.toMatrix=function(M,b){var p=fM(M),e={_:{transform:A},getBBox:function(){return p}};return wM(e,b),e.matrix}),wM=(b.transformPath=function(M,b){return J(M,XM(M,b))},b._extractTransform=function(M,p){if(null==p)return M._.transform;p=l(p).replace(/\.{3}|\u2026/g,M._.transform||A);var e,o,z=b.parseTransformString(p),t=0,c=1,n=1,O=M._,i=new _M;if(O.transform=z||[],z)for(var r=0,a=z.length;r<a;r++){var s,d,q,u,f,W=z[r],h=W.length,R=l(W[0]).toLowerCase(),m=W[0]!=R,g=m?i.invert():0;"t"==R&&3==h?m?(s=g.x(0,0),d=g.y(0,0),q=g.x(W[1],W[2]),u=g.y(W[1],W[2]),i.translate(q-s,u-d)):i.translate(W[1],W[2]):"r"==R?2==h?(f=f||M.getBBox(1),i.rotate(W[1],f.x+f.width/2,f.y+f.height/2),t+=W[1]):4==h&&(m?(q=g.x(W[2],W[3]),u=g.y(W[2],W[3]),i.rotate(W[1],q,u)):i.rotate(W[1],W[2],W[3]),t+=W[1]):"s"==R?2==h||3==h?(f=f||M.getBBox(1),i.scale(W[1],W[h-1],f.x+f.width/2,f.y+f.height/2),c*=W[1],n*=W[h-1]):5==h&&(m?(q=g.x(W[3],W[4]),u=g.y(W[3],W[4]),i.scale(W[1],W[2],q,u)):i.scale(W[1],W[2],W[3],W[4]),c*=W[1],n*=W[2]):"m"==R&&7==h&&i.add(W[1],W[2],W[3],W[4],W[5],W[6]),O.dirtyT=1,M.matrix=i}M.matrix=i,O.sx=c,O.sy=n,O.deg=t,O.dx=e=i.e,O.dy=o=i.f,1==c&&1==n&&!t&&O.bbox?(O.bbox.x+=+e,O.bbox.y+=+o):O.dirtyT=1}),xM=function(M){var b=M[0];switch(b.toLowerCase()){case"t":return[b,0,0];case"m":return[b,1,0,0,1,0,0];case"r":return 4==M.length?[b,0,M[2],M[3]]:[b,0];case"s":return 5==M.length?[b,1,1,M[3],M[4]]:3==M.length?[b,1,1]:[b,1]}},TM=b._equaliseTransform=function(M,p){p=l(p).replace(/\.{3}|\u2026/g,M),M=b.parseTransformString(M)||[],p=b.parseTransformString(p)||[];for(var e,o,z,t,c=R(M.length,p.length),n=[],O=[],i=0;i<c;i++){if(z=M[i]||xM(p[i]),t=p[i]||xM(z),z[0]!=t[0]||"r"==z[0].toLowerCase()&&(z[2]!=t[2]||z[3]!=t[3])||"s"==z[0].toLowerCase()&&(z[3]!=t[3]||z[4]!=t[4]))return;for(n[i]=[],O[i]=[],e=0,o=R(z.length,t.length);e<o;e++)e in z&&(n[i][e]=z[e]),e in t&&(O[i][e]=t[e])}return{from:n,to:O}};function _M(M,b,p,e,o,z){null!=M?(this.a=+M,this.b=+b,this.c=+p,this.d=+e,this.e=+o,this.f=+z):(this.a=1,this.b=0,this.c=0,this.d=1,this.e=0,this.f=0)}b._getContainer=function(M,p,e,o){var z;if(null!=(z=null!=o||b.is(M,"object")?M:n.doc.getElementById(M)))return z.tagName?null==p?{container:z,width:z.style.pixelWidth||z.offsetWidth,height:z.style.pixelHeight||z.offsetHeight}:{container:z,width:p,height:e}:{container:1,x:M,y:p,width:e,height:o}},b.pathToRelative=hM,b._engine={},b.path2curve=yM,b.matrix=function(M,b,p,e,o,z){return new _M(M,b,p,e,o,z)},function(M){function p(M){return M[0]*M[0]+M[1]*M[1]}function e(M){var b=h.sqrt(p(M));M[0]&&(M[0]/=b),M[1]&&(M[1]/=b)}M.add=function(M,b,p,e,o,z){var t,c,n,O,i=[[],[],[]],r=[[this.a,this.c,this.e],[this.b,this.d,this.f],[0,0,1]],a=[[M,p,o],[b,e,z],[0,0,1]];for(M&&M instanceof _M&&(a=[[M.a,M.c,M.e],[M.b,M.d,M.f],[0,0,1]]),t=0;t<3;t++)for(c=0;c<3;c++){for(O=0,n=0;n<3;n++)O+=r[t][n]*a[n][c];i[t][c]=O}this.a=i[0][0],this.b=i[1][0],this.c=i[0][1],this.d=i[1][1],this.e=i[0][2],this.f=i[1][2]},M.invert=function(){var M=this,b=M.a*M.d-M.b*M.c;return new _M(M.d/b,-M.b/b,-M.c/b,M.a/b,(M.c*M.f-M.d*M.e)/b,(M.b*M.e-M.a*M.f)/b)},M.clone=function(){return new _M(this.a,this.b,this.c,this.d,this.e,this.f)},M.translate=function(M,b){this.add(1,0,0,1,M,b)},M.scale=function(M,b,p,e){null==b&&(b=M),(p||e)&&this.add(1,0,0,1,p,e),this.add(M,0,0,b,0,0),(p||e)&&this.add(1,0,0,1,-p,-e)},M.rotate=function(M,p,e){M=b.rad(M),p=p||0,e=e||0;var o=+h.cos(M).toFixed(9),z=+h.sin(M).toFixed(9);this.add(o,z,-z,o,p,e),this.add(1,0,0,1,-p,-e)},M.x=function(M,b){return M*this.a+b*this.c+this.e},M.y=function(M,b){return M*this.b+b*this.d+this.f},M.get=function(M){return+this[l.fromCharCode(97+M)].toFixed(4)},M.toString=function(){return b.svg?"matrix("+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)].join()+")":[this.get(0),this.get(2),this.get(1),this.get(3),0,0].join()},M.toFilter=function(){return"progid:DXImageTransform.Microsoft.Matrix(M11="+this.get(0)+", M12="+this.get(2)+", M21="+this.get(1)+", M22="+this.get(3)+", Dx="+this.get(4)+", Dy="+this.get(5)+", sizingmethod='auto expand')"},M.offset=function(){return[this.e.toFixed(4),this.f.toFixed(4)]},M.split=function(){var M={};M.dx=this.e,M.dy=this.f;var o=[[this.a,this.c],[this.b,this.d]];M.scalex=h.sqrt(p(o[0])),e(o[0]),M.shear=o[0][0]*o[1][0]+o[0][1]*o[1][1],o[1]=[o[1][0]-o[0][0]*M.shear,o[1][1]-o[0][1]*M.shear],M.scaley=h.sqrt(p(o[1])),e(o[1]),M.shear/=M.scaley;var z=-o[0][1],t=o[1][1];return t<0?(M.rotate=b.deg(h.acos(t)),z<0&&(M.rotate=360-M.rotate)):M.rotate=b.deg(h.asin(z)),M.isSimple=!(+M.shear.toFixed(9)||M.scalex.toFixed(9)!=M.scaley.toFixed(9)&&M.rotate),M.isSuperSimple=!+M.shear.toFixed(9)&&M.scalex.toFixed(9)==M.scaley.toFixed(9)&&!M.rotate,M.noRotation=!+M.shear.toFixed(9)&&!M.rotate,M},M.toTransformString=function(M){var b=M||this[q]();return b.isSimple?(b.scalex=+b.scalex.toFixed(4),b.scaley=+b.scaley.toFixed(4),b.rotate=+b.rotate.toFixed(4),(b.dx||b.dy?"t"+[b.dx,b.dy]:A)+(1!=b.scalex||1!=b.scaley?"s"+[b.scalex,b.scaley,0,0]:A)+(b.rotate?"r"+[b.rotate,0,0]:A)):"m"+[this.get(0),this.get(1),this.get(2),this.get(3),this.get(4),this.get(5)]}}(_M.prototype);for(var kM=function(){this.returnValue=!1},SM=function(){return this.originalEvent.preventDefault()},CM=function(){this.cancelBubble=!0},EM=function(){return this.originalEvent.stopPropagation()},DM=function(M){var b=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,p=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft;return{x:M.clientX+p,y:M.clientY+b}},PM=n.doc.addEventListener?function(M,b,p,e){var o=function(M){var b=DM(M);return p.call(e,M,b.x,b.y)};if(M.addEventListener(b,o,!1),s&&f[b]){var z=function(b){for(var o=DM(b),z=b,t=0,c=b.targetTouches&&b.targetTouches.length;t<c;t++)if(b.targetTouches[t].target==M){(b=b.targetTouches[t]).originalEvent=z,b.preventDefault=SM,b.stopPropagation=EM;break}return p.call(e,b,o.x,o.y)};M.addEventListener(f[b],z,!1)}return function(){return M.removeEventListener(b,o,!1),s&&f[b]&&M.removeEventListener(f[b],z,!1),!0}}:n.doc.attachEvent?function(M,b,p,e){var o=function(M){M=M||n.win.event;var b=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,o=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft,z=M.clientX+o,t=M.clientY+b;return M.preventDefault=M.preventDefault||kM,M.stopPropagation=M.stopPropagation||CM,p.call(e,M,z,t)};return M.attachEvent("on"+b,o),function(){return M.detachEvent("on"+b,o),!0}}:void 0,IM=[],FM=function(b){for(var p,e=b.clientX,o=b.clientY,z=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,t=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft,c=IM.length;c--;){if(p=IM[c],s&&b.touches){for(var O,i=b.touches.length;i--;)if((O=b.touches[i]).identifier==p.el._drag.id){e=O.clientX,o=O.clientY,(b.originalEvent?b.originalEvent:b).preventDefault();break}}else b.preventDefault();var r,a=p.el.node,A=a.nextSibling,d=a.parentNode,l=a.style.display;n.win.opera&&d.removeChild(a),a.style.display="none",r=p.el.paper.getElementByPoint(e,o),a.style.display=l,n.win.opera&&(A?d.insertBefore(a,A):d.appendChild(a)),r&&M("raphael.drag.over."+p.el.id,p.el,r),e+=t,o+=z,M("raphael.drag.move."+p.el.id,p.move_scope||p.el,e-p.el._drag.x,o-p.el._drag.y,e,o,b)}},jM=function(p){b.unmousemove(FM).unmouseup(jM);for(var e,o=IM.length;o--;)(e=IM[o]).el._drag={},M("raphael.drag.end."+e.el.id,e.end_scope||e.start_scope||e.move_scope||e.el,p);IM=[]},HM=b.el={},UM=u.length;UM--;)(function(M){b[M]=HM[M]=function(p,e){return b.is(p,"function")&&(this.events=this.events||[],this.events.push({name:M,f:p,unbind:PM(this.shape||this.node||n.doc,M,p,e||this)})),this},b["un"+M]=HM["un"+M]=function(p){for(var e=this.events||[],o=e.length;o--;)e[o].name!=M||!b.is(p,"undefined")&&e[o].f!=p||(e[o].unbind(),e.splice(o,1),!e.length&&delete this.events);return this}})(u[UM]);HM.data=function(p,e){var o=Y[this.id]=Y[this.id]||{};if(0==arguments.length)return o;if(1==arguments.length){if(b.is(p,"object")){for(var z in p)p[c](z)&&this.data(z,p[z]);return this}return M("raphael.data.get."+this.id,this,o[p],p),o[p]}return o[p]=e,M("raphael.data.set."+this.id,this,e,p),this},HM.removeData=function(M){return null==M?Y[this.id]={}:Y[this.id]&&delete Y[this.id][M],this},HM.getData=function(){return bM(Y[this.id]||{})},HM.hover=function(M,b,p,e){return this.mouseover(M,p).mouseout(b,e||p)},HM.unhover=function(M,b){return this.unmouseover(M).unmouseout(b)};var YM=[];HM.drag=function(p,e,o,z,t,c){function O(O){(O.originalEvent||O).preventDefault();var i=O.clientX,r=O.clientY,a=n.doc.documentElement.scrollTop||n.doc.body.scrollTop,A=n.doc.documentElement.scrollLeft||n.doc.body.scrollLeft;if(this._drag.id=O.identifier,s&&O.touches)for(var d,l=O.touches.length;l--;)if(d=O.touches[l],this._drag.id=d.identifier,d.identifier==this._drag.id){i=d.clientX,r=d.clientY;break}this._drag.x=i+A,this._drag.y=r+a,!IM.length&&b.mousemove(FM).mouseup(jM),IM.push({el:this,move_scope:z,start_scope:t,end_scope:c}),e&&M.on("raphael.drag.start."+this.id,e),p&&M.on("raphael.drag.move."+this.id,p),o&&M.on("raphael.drag.end."+this.id,o),M("raphael.drag.start."+this.id,t||z||this,O.clientX+A,O.clientY+a,O)}return this._drag={},YM.push({el:this,start:O}),this.mousedown(O),this},HM.onDragOver=function(b){b?M.on("raphael.drag.over."+this.id,b):M.unbind("raphael.drag.over."+this.id)},HM.undrag=function(){for(var p=YM.length;p--;)YM[p].el==this&&(this.unmousedown(YM[p].start),YM.splice(p,1),M.unbind("raphael.drag.*."+this.id));!YM.length&&b.unmousemove(FM).unmouseup(jM),IM=[]},e.circle=function(M,p,e){var o=b._engine.circle(this,M||0,p||0,e||0);return this.__set__&&this.__set__.push(o),o},e.rect=function(M,p,e,o,z){var t=b._engine.rect(this,M||0,p||0,e||0,o||0,z||0);return this.__set__&&this.__set__.push(t),t},e.ellipse=function(M,p,e,o){var z=b._engine.ellipse(this,M||0,p||0,e||0,o||0);return this.__set__&&this.__set__.push(z),z},e.path=function(M){M&&!b.is(M,y)&&!b.is(M[0],B)&&(M+=A);var p=b._engine.path(b.format[r](b,arguments),this);return this.__set__&&this.__set__.push(p),p},e.image=function(M,p,e,o,z){var t=b._engine.image(this,M||"about:blank",p||0,e||0,o||0,z||0);return this.__set__&&this.__set__.push(t),t},e.text=function(M,p,e){var o=b._engine.text(this,M||0,p||0,l(e));return this.__set__&&this.__set__.push(o),o},e.set=function(M){!b.is(M,"array")&&(M=Array.prototype.splice.call(arguments,0,arguments.length));var p=new ib(M);return this.__set__&&this.__set__.push(p),p.paper=this,p.type="set",p},e.setStart=function(M){this.__set__=M||this.set()},e.setFinish=function(M){var b=this.__set__;return delete this.__set__,b},e.getSize=function(){var M=this.canvas.parentNode;return{width:M.offsetWidth,height:M.offsetHeight}},e.setSize=function(M,p){return b._engine.setSize.call(this,M,p)},e.setViewBox=function(M,p,e,o,z){return b._engine.setViewBox.call(this,M,p,e,o,z)},e.top=e.bottom=null,e.raphael=b;function GM(){return this.x+d+this.y+d+this.width+" × "+this.height}e.getElementByPoint=function(M,b){var p,e,o,z,t,c,O,i=this,r=i.canvas,a=n.doc.elementFromPoint(M,b);if(n.win.opera&&"svg"==a.tagName){var s=(e=(p=r).getBoundingClientRect(),o=p.ownerDocument,z=o.body,t=o.documentElement,c=t.clientTop||z.clientTop||0,O=t.clientLeft||z.clientLeft||0,{y:e.top+(n.win.pageYOffset||t.scrollTop||z.scrollTop)-c,x:e.left+(n.win.pageXOffset||t.scrollLeft||z.scrollLeft)-O}),A=r.createSVGRect();A.x=M-s.x,A.y=b-s.y,A.width=A.height=1;var d=r.getIntersectionList(A,null);d.length&&(a=d[d.length-1])}if(!a)return null;for(;a.parentNode&&a!=r.parentNode&&!a.raphael;)a=a.parentNode;return a==i.canvas.parentNode&&(a=r),a=a&&a.raphael?i.getById(a.raphaelid):null},e.getElementsByBBox=function(M){var p=this.set();return this.forEach(function(e){b.isBBoxIntersect(e.getBBox(),M)&&p.push(e)}),p},e.getById=function(M){for(var b=this.bottom;b;){if(b.id==M)return b;b=b.next}return null},e.forEach=function(M,b){for(var p=this.bottom;p;){if(!1===M.call(b,p))return this;p=p.next}return this},e.getElementsByPoint=function(M,b){var p=this.set();return this.forEach(function(e){e.isPointInside(M,b)&&p.push(e)}),p},HM.isPointInside=function(M,p){var e=this.realPath=Q[this.type](this);return this.attr("transform")&&this.attr("transform").length&&(e=b.transformPath(e,this.attr("transform"))),b.isPointInsidePath(e,M,p)},HM.getBBox=function(M){if(this.removed)return{};var b=this._;return M?(!b.dirty&&b.bboxwt||(this.realPath=Q[this.type](this),b.bboxwt=fM(this.realPath),b.bboxwt.toString=GM,b.dirty=0),b.bboxwt):((b.dirty||b.dirtyT||!b.bbox)&&(!b.dirty&&this.realPath||(b.bboxwt=0,this.realPath=Q[this.type](this)),b.bbox=fM(J(this.realPath,this.matrix)),b.bbox.toString=GM,b.dirty=b.dirtyT=0),b.bbox)},HM.clone=function(){if(this.removed)return null;var M=this.paper[this.type]().attr(this.attr());return this.__set__&&this.__set__.push(M),M},HM.glow=function(M){if("text"==this.type)return null;var b={width:((M=M||{}).width||10)+(+this.attr("stroke-width")||1),fill:M.fill||!1,opacity:null==M.opacity?.5:M.opacity,offsetx:M.offsetx||0,offsety:M.offsety||0,color:M.color||"#000"},p=b.width/2,e=this.paper,o=e.set(),z=this.realPath||Q[this.type](this);z=this.matrix?J(z,this.matrix):z;for(var t=1;t<p+1;t++)o.push(e.path(z).attr({stroke:b.color,fill:b.fill?b.color:"none","stroke-linejoin":"round","stroke-linecap":"round","stroke-width":+(b.width/p*t).toFixed(3),opacity:+(b.opacity/p).toFixed(3)}));return o.insertBefore(this).translate(b.offsetx,b.offsety)};var VM=function(M,p,e,o,z,t,c,n,O){return null==O?dM(M,p,e,o,z,t,c,n):b.findDotsAtSegment(M,p,e,o,z,t,c,n,function(M,b,p,e,o,z,t,c,n){if(!(n<0||dM(M,b,p,e,o,z,t,c)<n)){var O,i=.5,r=1-i;for(O=dM(M,b,p,e,o,z,t,c,r);g(O-n)>.01;)O=dM(M,b,p,e,o,z,t,c,r+=(O<n?1:-1)*(i/=2));return r}}(M,p,e,o,z,t,c,n,O))},$M=function(M,p){return function(e,o,z){for(var t,c,n,O,i,r="",a={},s=0,A=0,d=(e=yM(e)).length;A<d;A++){if("M"==(n=e[A])[0])t=+n[1],c=+n[2];else{if(s+(O=VM(t,c,n[1],n[2],n[3],n[4],n[5],n[6]))>o){if(p&&!a.start){if(r+=["C"+(i=VM(t,c,n[1],n[2],n[3],n[4],n[5],n[6],o-s)).start.x,i.start.y,i.m.x,i.m.y,i.x,i.y],z)return r;a.start=r,r=["M"+i.x,i.y+"C"+i.n.x,i.n.y,i.end.x,i.end.y,n[5],n[6]].join(),s+=O,t=+n[5],c=+n[6];continue}if(!M&&!p)return{x:(i=VM(t,c,n[1],n[2],n[3],n[4],n[5],n[6],o-s)).x,y:i.y,alpha:i.alpha}}s+=O,t=+n[5],c=+n[6]}r+=n.shift()+n}return a.end=r,(i=M?s:p?a:b.findDotsAtSegment(t,c,n[0],n[1],n[2],n[3],n[4],n[5],1)).alpha&&(i={x:i.x,y:i.y,alpha:i.alpha}),i}},KM=$M(1),QM=$M(),JM=$M(0,1);b.getTotalLength=KM,b.getPointAtLength=QM,b.getSubpath=function(M,b,p){if(this.getTotalLength(M)-p<1e-6)return JM(M,b).end;var e=JM(M,p,1);return b?JM(e,b).end:e},HM.getTotalLength=function(){var M=this.getPath();if(M)return this.node.getTotalLength?this.node.getTotalLength():KM(M)},HM.getPointAtLength=function(M){var b=this.getPath();if(b)return QM(b,M)},HM.getPath=function(){var M,p=b._getPath[this.type];if("text"!=this.type&&"set"!=this.type)return p&&(M=p(this)),M},HM.getSubpath=function(M,p){var e=this.getPath();if(e)return b.getSubpath(e,M,p)};var ZM=b.easing_formulas={linear:function(M){return M},"<":function(M){return L(M,1.7)},">":function(M){return L(M,.48)},"<>":function(M){var b=.48-M/1.04,p=h.sqrt(.1734+b*b),e=p-b,o=-p-b,z=L(g(e),1/3)*(e<0?-1:1)+L(g(o),1/3)*(o<0?-1:1)+.5;return 3*(1-z)*z*z+z*z*z},backIn:function(M){var b=1.70158;return M*M*((b+1)*M-b)},backOut:function(M){var b=1.70158;return(M-=1)*M*((b+1)*M+b)+1},elastic:function(M){return M==!!M?M:L(2,-10*M)*h.sin(2*v*(M-.075)/.3)+1},bounce:function(M){var b=7.5625,p=2.75;return M<1/p?b*M*M:M<2/p?b*(M-=1.5/p)*M+.75:M<2.5/p?b*(M-=2.25/p)*M+.9375:b*(M-=2.625/p)*M+.984375}};ZM.easeIn=ZM["ease-in"]=ZM["<"],ZM.easeOut=ZM["ease-out"]=ZM[">"],ZM.easeInOut=ZM["ease-in-out"]=ZM["<>"],ZM["back-in"]=ZM.backIn,ZM["back-out"]=ZM.backOut;var Mb=[],bb=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(M){setTimeout(M,16)},pb=function(){for(var p=+new Date,e=0;e<Mb.length;e++){var o=Mb[e];if(!o.el.removed&&!o.paused){var z,t,n=p-o.start,O=o.ms,i=o.easing,r=o.from,s=o.diff,A=o.to,l=(o.t,o.el),q={},u={};if(o.initstatus?(n=(o.initstatus*o.anim.top-o.prev)/(o.percent-o.prev)*O,o.status=o.initstatus,delete o.initstatus,o.stop&&Mb.splice(e--,1)):o.status=(o.prev+(o.percent-o.prev)*(n/O))/o.anim.top,!(n<0))if(n<O){var f=i(n/O);for(var W in r)if(r[c](W)){switch(D[W]){case N:z=+r[W]+f*O*s[W];break;case"colour":z="rgb("+[eb(_(r[W].r+f*O*s[W].r)),eb(_(r[W].g+f*O*s[W].g)),eb(_(r[W].b+f*O*s[W].b))].join(",")+")";break;case"path":z=[];for(var h=0,R=r[W].length;h<R;h++){z[h]=[r[W][h][0]];for(var m=1,g=r[W][h].length;m<g;m++)z[h][m]=+r[W][h][m]+f*O*s[W][h][m];z[h]=z[h].join(d)}z=z.join(d);break;case"transform":if(s[W].real)for(z=[],h=0,R=r[W].length;h<R;h++)for(z[h]=[r[W][h][0]],m=1,g=r[W][h].length;m<g;m++)z[h][m]=r[W][h][m]+f*O*s[W][h][m];else{var L=function(M){return+r[W][M]+f*O*s[W][M]};z=[["m",L(0),L(1),L(2),L(3),L(4),L(5)]]}break;case"csv":if("clip-rect"==W)for(z=[],h=4;h--;)z[h]=+r[W][h]+f*O*s[W][h];break;default:var v=[][a](r[W]);for(z=[],h=l.paper.customAttributes[W].length;h--;)z[h]=+v[h]+f*O*s[W][h]}q[W]=z}l.attr(q),function(b,p,e){setTimeout(function(){M("raphael.anim.frame."+b,p,e)})}(l.id,l,o.anim)}else{if(function(p,e,o){setTimeout(function(){M("raphael.anim.frame."+e.id,e,o),M("raphael.anim.finish."+e.id,e,o),b.is(p,"function")&&p.call(e)})}(o.callback,l,o.anim),l.attr(A),Mb.splice(e--,1),o.repeat>1&&!o.next){for(t in A)A[c](t)&&(u[t]=o.totalOrigin[t]);o.el.attr(u),tb(o.anim,o.el,o.anim.percents[0],null,o.totalOrigin,o.repeat-1)}o.next&&!o.stop&&tb(o.anim,o.el,o.next,null,o.totalOrigin,o.repeat)}}}Mb.length&&bb(pb)},eb=function(M){return M>255?255:M<0?0:M};function ob(M,b,p,e,o,z){var t=3*b,c=3*(e-b)-t,n=1-t-c,O=3*p,i=3*(o-p)-O,r=1-O-i;function a(M){return((n*M+c)*M+t)*M}return function(M,b){var p=function(M,b){var p,e,o,z,O,i;for(o=M,i=0;i<8;i++){if(z=a(o)-M,g(z)<b)return o;if(g(O=(3*n*o+2*c)*o+t)<1e-6)break;o-=z/O}if(e=1,o=M,o<(p=0))return p;if(o>e)return e;for(;p<e;){if(z=a(o),g(z-M)<b)return o;M>z?p=o:e=o,o=(e-p)/2+p}return o}(M,b);return((r*p+i)*p+O)*p}(M,1/(200*z))}function zb(M,b){var p=[],e={};if(this.ms=b,this.times=1,M){for(var o in M)M[c](o)&&(e[k(o)]=M[o],p.push(k(o)));p.sort(G)}this.anim=e,this.top=p[p.length-1],this.percents=p}function tb(p,e,z,t,n,O){z=k(z);var i,r,s,A,d,u,f=p.ms,W={},h={},R={};if(t)for(g=0,L=Mb.length;g<L;g++){var m=Mb[g];if(m.el.id==e.id&&m.anim==p){m.percent!=z?(Mb.splice(g,1),s=1):r=m,e.attr(m.totalOrigin);break}}else t=+h;for(var g=0,L=p.percents.length;g<L;g++){if(p.percents[g]==z||p.percents[g]>t*p.top){z=p.percents[g],d=p.percents[g-1]||0,f=f/p.top*(z-d),A=p.percents[g+1],i=p.anim[z];break}t&&e.attr(p.anim[p.percents[g]])}if(i){if(r)r.initstatus=t,r.start=new Date-r.ms*t;else{for(var v in i)if(i[c](v)&&(D[c](v)||e.paper.customAttributes[c](v)))switch(W[v]=e.attr(v),null==W[v]&&(W[v]=E[v]),h[v]=i[v],D[v]){case N:R[v]=(h[v]-W[v])/f;break;case"colour":W[v]=b.getRGB(W[v]);var y=b.getRGB(h[v]);R[v]={r:(y.r-W[v].r)/f,g:(y.g-W[v].g)/f,b:(y.b-W[v].b)/f};break;case"path":var B=yM(W[v],h[v]),X=B[1];for(W[v]=B[0],R[v]=[],g=0,L=W[v].length;g<L;g++){R[v][g]=[0];for(var w=1,x=W[v][g].length;w<x;w++)R[v][g][w]=(X[g][w]-W[v][g][w])/f}break;case"transform":var _=e._,S=TM(_[v],h[v]);if(S)for(W[v]=S.from,h[v]=S.to,R[v]=[],R[v].real=!0,g=0,L=W[v].length;g<L;g++)for(R[v][g]=[W[v][g][0]],w=1,x=W[v][g].length;w<x;w++)R[v][g][w]=(h[v][g][w]-W[v][g][w])/f;else{var C=e.matrix||new _M,P={_:{transform:_.transform},getBBox:function(){return e.getBBox(1)}};W[v]=[C.a,C.b,C.c,C.d,C.e,C.f],wM(P,h[v]),h[v]=P._.transform,R[v]=[(P.matrix.a-C.a)/f,(P.matrix.b-C.b)/f,(P.matrix.c-C.c)/f,(P.matrix.d-C.d)/f,(P.matrix.e-C.e)/f,(P.matrix.f-C.f)/f]}break;case"csv":var I=l(i[v])[q](o),F=l(W[v])[q](o);if("clip-rect"==v)for(W[v]=F,R[v]=[],g=F.length;g--;)R[v][g]=(I[g]-W[v][g])/f;h[v]=I;break;default:for(I=[][a](i[v]),F=[][a](W[v]),R[v]=[],g=e.paper.customAttributes[v].length;g--;)R[v][g]=((I[g]||0)-(F[g]||0))/f}var j=i.easing,H=b.easing_formulas[j];if(!H)if((H=l(j).match(T))&&5==H.length){var U=H;H=function(M){return ob(M,+U[1],+U[2],+U[3],+U[4],f)}}else H=V;if(m={anim:p,percent:z,timestamp:u=i.start||p.start||+new Date,start:u+(p.del||0),status:0,initstatus:t||0,stop:!1,ms:f,easing:H,from:W,diff:R,to:h,el:e,callback:i.callback,prev:d,next:A,repeat:O||p.times,origin:e.attr(),totalOrigin:n},Mb.push(m),t&&!r&&!s&&(m.stop=!0,m.start=new Date-f*t,1==Mb.length))return pb();s&&(m.start=new Date-m.ms*t),1==Mb.length&&bb(pb)}M("raphael.anim.start."+e.id,e,p)}}function cb(M){for(var b=0;b<Mb.length;b++)Mb[b].el.paper==M&&Mb.splice(b--,1)}HM.animateWith=function(M,p,e,o,z,t){var c=this;if(c.removed)return t&&t.call(c),c;var n=e instanceof zb?e:b.animation(e,o,z,t);tb(n,c,n.percents[0],null,c.attr());for(var O=0,i=Mb.length;O<i;O++)if(Mb[O].anim==p&&Mb[O].el==M){Mb[i-1].start=Mb[O].start;break}return c},HM.onAnimation=function(b){return b?M.on("raphael.anim.frame."+this.id,b):M.unbind("raphael.anim.frame."+this.id),this},zb.prototype.delay=function(M){var b=new zb(this.anim,this.ms);return b.times=this.times,b.del=+M||0,b},zb.prototype.repeat=function(M){var b=new zb(this.anim,this.ms);return b.del=this.del,b.times=h.floor(R(M,0))||1,b},b.animation=function(M,p,e,o){if(M instanceof zb)return M;!b.is(e,"function")&&e||(o=o||e||null,e=null),M=Object(M),p=+p||0;var z,t,n={};for(t in M)M[c](t)&&k(t)!=t&&k(t)+"%"!=t&&(z=!0,n[t]=M[t]);if(z)return e&&(n.easing=e),o&&(n.callback=o),new zb({100:n},p);if(o){var O=0;for(var i in M){var r=S(i);M[c](i)&&r>O&&(O=r)}!M[O+="%"].callback&&(M[O].callback=o)}return new zb(M,p)},HM.animate=function(M,p,e,o){var z=this;if(z.removed)return o&&o.call(z),z;var t=M instanceof zb?M:b.animation(M,p,e,o);return tb(t,z,t.percents[0],null,z.attr()),z},HM.setTime=function(M,b){return M&&null!=b&&this.status(M,m(b,M.ms)/M.ms),this},HM.status=function(M,b){var p,e,o=[],z=0;if(null!=b)return tb(M,this,-1,m(b,1)),this;for(p=Mb.length;z<p;z++)if((e=Mb[z]).el.id==this.id&&(!M||e.anim==M)){if(M)return e.status;o.push({anim:e.anim,status:e.status})}return M?0:o},HM.pause=function(b){for(var p=0;p<Mb.length;p++)Mb[p].el.id!=this.id||b&&Mb[p].anim!=b||!1!==M("raphael.anim.pause."+this.id,this,Mb[p].anim)&&(Mb[p].paused=!0);return this},HM.resume=function(b){for(var p=0;p<Mb.length;p++)if(Mb[p].el.id==this.id&&(!b||Mb[p].anim==b)){var e=Mb[p];!1!==M("raphael.anim.resume."+this.id,this,e.anim)&&(delete e.paused,this.status(e.anim,e.status))}return this},HM.stop=function(b){for(var p=0;p<Mb.length;p++)Mb[p].el.id!=this.id||b&&Mb[p].anim!=b||!1!==M("raphael.anim.stop."+this.id,this,Mb[p].anim)&&Mb.splice(p--,1);return this},M.on("raphael.remove",cb),M.on("raphael.clear",cb),HM.toString=function(){return"Raphaël’s object"};var nb,Ob,ib=function(M){if(this.items=[],this.length=0,this.type="set",M)for(var b=0,p=M.length;b<p;b++)!M[b]||M[b].constructor!=HM.constructor&&M[b].constructor!=ib||(this[this.items.length]=this.items[this.items.length]=M[b],this.length++)},rb=ib.prototype;for(var ab in rb.push=function(){for(var M,b,p=0,e=arguments.length;p<e;p++)!(M=arguments[p])||M.constructor!=HM.constructor&&M.constructor!=ib||(this[b=this.items.length]=this.items[b]=M,this.length++);return this},rb.pop=function(){return this.length&&delete this[this.length--],this.items.pop()},rb.forEach=function(M,b){for(var p=0,e=this.items.length;p<e;p++)if(!1===M.call(b,this.items[p],p))return this;return this},HM)HM[c](ab)&&(rb[ab]=function(M){return function(){var b=arguments;return this.forEach(function(p){p[M][r](p,b)})}}(ab));return rb.attr=function(M,p){if(M&&b.is(M,B)&&b.is(M[0],"object"))for(var e=0,o=M.length;e<o;e++)this.items[e].attr(M[e]);else for(var z=0,t=this.items.length;z<t;z++)this.items[z].attr(M,p);return this},rb.clear=function(){for(;this.length;)this.pop()},rb.splice=function(M,b,p){M=M<0?R(this.length+M,0):M,b=R(0,m(this.length-M,b));var e,o=[],z=[],t=[];for(e=2;e<arguments.length;e++)t.push(arguments[e]);for(e=0;e<b;e++)z.push(this[M+e]);for(;e<this.length-M;e++)o.push(this[M+e]);var c=t.length;for(e=0;e<c+o.length;e++)this.items[M+e]=this[M+e]=e<c?t[e]:o[e-c];for(e=this.items.length=this.length-=b-c;this[e];)delete this[e++];return new ib(z)},rb.exclude=function(M){for(var b=0,p=this.length;b<p;b++)if(this[b]==M)return this.splice(b,1),!0},rb.animate=function(M,p,e,o){(b.is(e,"function")||!e)&&(o=e||null);var z,t,c=this.items.length,n=c,O=this;if(!c)return this;o&&(t=function(){! --c&&o.call(O)}),e=b.is(e,y)?e:t;var i=b.animation(M,p,e,t);for(z=this.items[--n].animate(i);n--;)this.items[n]&&!this.items[n].removed&&this.items[n].animateWith(z,i,i),this.items[n]&&!this.items[n].removed||c--;return this},rb.insertAfter=function(M){for(var b=this.items.length;b--;)this.items[b].insertAfter(M);return this},rb.getBBox=function(){for(var M=[],b=[],p=[],e=[],o=this.items.length;o--;)if(!this.items[o].removed){var z=this.items[o].getBBox();M.push(z.x),b.push(z.y),p.push(z.x+z.width),e.push(z.y+z.height)}return{x:M=m[r](0,M),y:b=m[r](0,b),x2:p=R[r](0,p),y2:e=R[r](0,e),width:p-M,height:e-b}},rb.clone=function(M){M=this.paper.set();for(var b=0,p=this.items.length;b<p;b++)M.push(this.items[b].clone());return M},rb.toString=function(){return"Raphaël‘s set"},rb.glow=function(M){var b=this.paper.set();return this.forEach(function(p,e){var o=p.glow(M);null!=o&&o.forEach(function(M,p){b.push(M)})}),b},rb.isPointInside=function(M,b){var p=!1;return this.forEach(function(e){if(e.isPointInside(M,b))return p=!0,!1}),p},b.registerFont=function(M){if(!M.face)return M;this.fonts=this.fonts||{};var b={w:M.w,face:{},glyphs:{}},p=M.face["font-family"];for(var e in M.face)M.face[c](e)&&(b.face[e]=M.face[e]);if(this.fonts[p]?this.fonts[p].push(b):this.fonts[p]=[b],!M.svg)for(var o in b.face["units-per-em"]=S(M.face["units-per-em"],10),M.glyphs)if(M.glyphs[c](o)){var z=M.glyphs[o];if(b.glyphs[o]={w:z.w,k:{},d:z.d&&"M"+z.d.replace(/[mlcxtrv]/g,function(M){return{l:"L",c:"C",x:"z",t:"m",r:"l",v:"c"}[M]||"M"})+"z"},z.k)for(var t in z.k)z[c](t)&&(b.glyphs[o].k[t]=z.k[t])}return M},e.getFont=function(M,p,e,o){if(o=o||"normal",e=e||"normal",p=+p||{normal:400,bold:700,lighter:300,bolder:800}[p]||400,b.fonts){var z,t=b.fonts[M];if(!t){var n=new RegExp("(^|\\s)"+M.replace(/[^\w\d\s+!~.:_-]/g,A)+"(\\s|$)","i");for(var O in b.fonts)if(b.fonts[c](O)&&n.test(O)){t=b.fonts[O];break}}if(t)for(var i=0,r=t.length;i<r&&((z=t[i]).face["font-weight"]!=p||z.face["font-style"]!=e&&z.face["font-style"]||z.face["font-stretch"]!=o);i++);return z}},e.print=function(M,p,e,z,t,c,n,O){c=c||"middle",n=R(m(n||0,1),-1),O=R(m(O||1,3),1);var i,r=l(e)[q](A),a=0,s=0,d=A;if(b.is(z,"string")&&(z=this.getFont(z)),z){i=(t||16)/z.face["units-per-em"];for(var u=z.face.bbox[q](o),f=+u[0],W=u[3]-u[1],h=0,g=+u[1]+("baseline"==c?W+ +z.face.descent:W/2),L=0,v=r.length;L<v;L++){if("\n"==r[L])a=0,y=0,s=0,h+=W*O;else{var N=s&&z.glyphs[r[L-1]]||{},y=z.glyphs[r[L]];a+=s?(N.w||z.w)+(N.k&&N.k[r[L]]||0)+z.w*n:0,s=1}y&&y.d&&(d+=b.transformPath(y.d,["t",a*i,h*i,"s",i,i,f,g,"t",(M-f)/i,(p-g)/i]))}}return this.path(d).attr({fill:"#000",stroke:"none"})},e.add=function(M){if(b.is(M,"array"))for(var p,e=this.set(),o=0,t=M.length;o<t;o++)p=M[o]||{},z[c](p.type)&&e.push(this[p.type]().attr(p));return e},b.format=function(M,p){var e=b.is(p,B)?[0][a](p):arguments;return M&&b.is(M,y)&&e.length-1&&(M=M.replace(t,function(M,b){return null==e[++b]?A:e[b]})),M||A},b.fullfill=(nb=/\{([^\}]+)\}/g,Ob=/(?:(?:^|\.)(.+?)(?=\[|\.|$|\()|\[('|")(.+?)\2\])(\(\))?/g,function(M,b){return String(M).replace(nb,function(M,p){return function(M,b,p){var e=p;return b.replace(Ob,function(M,b,p,o,z){b=b||o,e&&(b in e&&(e=e[b]),"function"==typeof e&&z&&(e=e()))}),e=(null==e||e==p?M:e)+""}(M,p,b)})}),b.ninja=function(){if(O.was)n.win.Raphael=O.is;else{window.Raphael=void 0;try{delete window.Raphael}catch(M){}}return b},b.st=rb,M.on("raphael.DOMload",function(){p=!0}),function(M,p,e){null==M.readyState&&M.addEventListener&&(M.addEventListener(p,e=function(){M.removeEventListener(p,e,!1),M.readyState="complete"},!1),M.readyState="loading"),function p(){/in/.test(M.readyState)?setTimeout(p,9):b.eve("raphael.DOMload")}()}(document,"DOMContentLoaded"),b}.apply(b,e),void 0===o||(M.exports=o)},function(M,b,p){var e,o,z,t,c,n,O,i,r,a,s,A,d,l;t="0.5.0",c="hasOwnProperty",n=/[\.\/]/,O=/\s*,\s*/,i=function(M,b){return M-b},r={n:{}},a=function(){for(var M=0,b=this.length;M<b;M++)if(void 0!==this[M])return this[M]},s=function(){for(var M=this.length;--M;)if(void 0!==this[M])return this[M]},A=Object.prototype.toString,d=String,l=Array.isArray||function(M){return M instanceof Array||"[object Array]"==A.call(M)},eve=function(M,b){var p,e=z,t=Array.prototype.slice.call(arguments,2),c=eve.listeners(M),n=0,O=[],r={},A=[],d=o;A.firstDefined=a,A.lastDefined=s,o=M,z=0;for(var l=0,q=c.length;l<q;l++)"zIndex"in c[l]&&(O.push(c[l].zIndex),c[l].zIndex<0&&(r[c[l].zIndex]=c[l]));for(O.sort(i);O[n]<0;)if(p=r[O[n++]],A.push(p.apply(b,t)),z)return z=e,A;for(l=0;l<q;l++)if("zIndex"in(p=c[l]))if(p.zIndex==O[n]){if(A.push(p.apply(b,t)),z)break;do{if((p=r[O[++n]])&&A.push(p.apply(b,t)),z)break}while(p)}else r[p.zIndex]=p;else if(A.push(p.apply(b,t)),z)break;return z=e,o=d,A},eve._events=r,eve.listeners=function(M){var b,p,e,o,z,t,c,O,i=l(M)?M:M.split(n),a=r,s=[a],A=[];for(o=0,z=i.length;o<z;o++){for(O=[],t=0,c=s.length;t<c;t++)for(p=[(a=s[t].n)[i[o]],a["*"]],e=2;e--;)(b=p[e])&&(O.push(b),A=A.concat(b.f||[]));s=O}return A},eve.separator=function(M){M?(M="["+(M=d(M).replace(/(?=[\.\^\]\[\-])/g,"\\"))+"]",n=new RegExp(M)):n=/[\.\/]/},eve.on=function(M,b){if("function"!=typeof b)return function(){};for(var p=l(M)?l(M[0])?M:[M]:d(M).split(O),e=0,o=p.length;e<o;e++)(function(M){for(var p,e=l(M)?M:d(M).split(n),o=r,z=0,t=e.length;z<t;z++)o=(o=o.n).hasOwnProperty(e[z])&&o[e[z]]||(o[e[z]]={n:{}});for(o.f=o.f||[],z=0,t=o.f.length;z<t;z++)if(o.f[z]==b){p=!0;break}!p&&o.f.push(b)})(p[e]);return function(M){+M==+M&&(b.zIndex=+M)}},eve.f=function(M){var b=[].slice.call(arguments,1);return function(){eve.apply(null,[M,null].concat(b).concat([].slice.call(arguments,0)))}},eve.stop=function(){z=1},eve.nt=function(M){var b=l(o)?o.join("."):o;return M?new RegExp("(?:\\.|\\/|^)"+M+"(?:\\.|\\/|$)").test(b):b},eve.nts=function(){return l(o)?o:o.split(n)},eve.off=eve.unbind=function(M,b){if(M){var p=l(M)?l(M[0])?M:[M]:d(M).split(O);if(p.length>1)for(var e=0,o=p.length;e<o;e++)eve.off(p[e],b);else{p=l(M)?M:d(M).split(n);var z,t,i,a,s,A=[r];for(e=0,o=p.length;e<o;e++)for(a=0;a<A.length;a+=i.length-2){if(i=[a,1],z=A[a].n,"*"!=p[e])z[p[e]]&&i.push(z[p[e]]);else for(t in z)z[c](t)&&i.push(z[t]);A.splice.apply(A,i)}for(e=0,o=A.length;e<o;e++)for(z=A[e];z.n;){if(b){if(z.f){for(a=0,s=z.f.length;a<s;a++)if(z.f[a]==b){z.f.splice(a,1);break}!z.f.length&&delete z.f}for(t in z.n)if(z.n[c](t)&&z.n[t].f){var q=z.n[t].f;for(a=0,s=q.length;a<s;a++)if(q[a]==b){q.splice(a,1);break}!q.length&&delete z.n[t].f}}else for(t in delete z.f,z.n)z.n[c](t)&&z.n[t].f&&delete z.n[t].f;z=z.n}}}else eve._events=r={n:{}}},eve.once=function(M,b){var p=function(){return eve.off(M,p),b.apply(this,arguments)};return eve.on(M,p)},eve.version=t,eve.toString=function(){return"You are running Eve "+t},void 0!==M&&M.exports?M.exports=eve:void 0===(e=function(){return eve}.apply(b,[]))||(M.exports=e)},function(M,b,p){var e,o;e=[p(1)],o=function(M){if(!M||M.svg){var b="hasOwnProperty",p=String,e=parseFloat,o=parseInt,z=Math,t=z.max,c=z.abs,n=z.pow,O=/[, ]+/,i=M.eve,r="",a=" ",s="http://www.w3.org/1999/xlink",A={block:"M5,0 0,2.5 5,5z",classic:"M5,0 0,2.5 5,5 3.5,3 3.5,2z",diamond:"M2.5,0 5,2.5 2.5,5 0,2.5z",open:"M6,1 1,3.5 6,6",oval:"M2.5,0A2.5,2.5,0,0,1,2.5,5 2.5,2.5,0,0,1,2.5,0z"},d={};M.toString=function(){return"Your browser supports SVG.\nYou are running Raphaël "+this.version};var l=function(e,o){if(o)for(var z in"string"==typeof e&&(e=l(e)),o)o[b](z)&&("xlink:"==z.substring(0,6)?e.setAttributeNS(s,z.substring(6),p(o[z])):e.setAttribute(z,p(o[z])));else(e=M._g.doc.createElementNS("http://www.w3.org/2000/svg",e)).style&&(e.style.webkitTapHighlightColor="rgba(0,0,0,0)");return e},q=function(b,o){var O="linear",i=b.id+o,a=.5,s=.5,A=b.node,d=b.paper,q=A.style,f=M._g.doc.getElementById(i);if(!f){if(o=(o=p(o).replace(M._radial_gradient,function(M,b,p){if(O="radial",b&&p){a=e(b);var o=2*((s=e(p))>.5)-1;n(a-.5,2)+n(s-.5,2)>.25&&(s=z.sqrt(.25-n(a-.5,2))*o+.5)&&.5!=s&&(s=s.toFixed(5)-1e-5*o)}return r})).split(/\s*\-\s*/),"linear"==O){var W=o.shift();if(W=-e(W),isNaN(W))return null;var h=[0,0,z.cos(M.rad(W)),z.sin(M.rad(W))],R=1/(t(c(h[2]),c(h[3]))||1);h[2]*=R,h[3]*=R,h[2]<0&&(h[0]=-h[2],h[2]=0),h[3]<0&&(h[1]=-h[3],h[3]=0)}var m=M._parseDots(o);if(!m)return null;if(i=i.replace(/[\(\)\s,\xb0#]/g,"_"),b.gradient&&i!=b.gradient.id&&(d.defs.removeChild(b.gradient),delete b.gradient),!b.gradient){f=l(O+"Gradient",{id:i}),b.gradient=f,l(f,"radial"==O?{fx:a,fy:s}:{x1:h[0],y1:h[1],x2:h[2],y2:h[3],gradientTransform:b.matrix.invert()}),d.defs.appendChild(f);for(var g=0,L=m.length;g<L;g++)f.appendChild(l("stop",{offset:m[g].offset?m[g].offset:g?"100%":"0%","stop-color":m[g].color||"#fff","stop-opacity":isFinite(m[g].opacity)?m[g].opacity:1}))}}return l(A,{fill:u(i),opacity:1,"fill-opacity":1}),q.fill=r,q.opacity=1,q.fillOpacity=1,1},u=function(M){if((b=document.documentMode)&&(9===b||10===b))return"url('#"+M+"')";var b,p=document.location;return"url('"+(p.protocol+"//"+p.host+p.pathname+p.search)+"#"+M+"')"},f=function(M){var b=M.getBBox(1);l(M.pattern,{patternTransform:M.matrix.invert()+" translate("+b.x+","+b.y+")"})},W=function(e,o,z){if("path"==e.type){for(var t,c,n,O,i,a=p(o).toLowerCase().split("-"),s=e.paper,q=z?"end":"start",u=e.node,f=e.attrs,W=f["stroke-width"],h=a.length,R="classic",m=3,g=3,L=5;h--;)switch(a[h]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":R=a[h];break;case"wide":g=5;break;case"narrow":g=2;break;case"long":m=5;break;case"short":m=2}if("open"==R?(m+=2,g+=2,L+=2,n=1,O=z?4:1,i={fill:"none",stroke:f.stroke}):(O=n=m/2,i={fill:f.stroke,stroke:"none"}),e._.arrows?z?(e._.arrows.endPath&&d[e._.arrows.endPath]--,e._.arrows.endMarker&&d[e._.arrows.endMarker]--):(e._.arrows.startPath&&d[e._.arrows.startPath]--,e._.arrows.startMarker&&d[e._.arrows.startMarker]--):e._.arrows={},"none"!=R){var v="raphael-marker-"+R,N="raphael-marker-"+q+R+m+g+"-obj"+e.id;M._g.doc.getElementById(v)?d[v]++:(s.defs.appendChild(l(l("path"),{"stroke-linecap":"round",d:A[R],id:v})),d[v]=1);var y,B=M._g.doc.getElementById(N);B?(d[N]++,y=B.getElementsByTagName("use")[0]):(B=l(l("marker"),{id:N,markerHeight:g,markerWidth:m,orient:"auto",refX:O,refY:g/2}),y=l(l("use"),{"xlink:href":"#"+v,transform:(z?"rotate(180 "+m/2+" "+g/2+") ":r)+"scale("+m/L+","+g/L+")","stroke-width":(1/((m/L+g/L)/2)).toFixed(4)}),B.appendChild(y),s.defs.appendChild(B),d[N]=1),l(y,i);var X=n*("diamond"!=R&&"oval"!=R);z?(t=e._.arrows.startdx*W||0,c=M.getTotalLength(f.path)-X*W):(t=X*W,c=M.getTotalLength(f.path)-(e._.arrows.enddx*W||0)),(i={})["marker-"+q]="url(#"+N+")",(c||t)&&(i.d=M.getSubpath(f.path,t,c)),l(u,i),e._.arrows[q+"Path"]=v,e._.arrows[q+"Marker"]=N,e._.arrows[q+"dx"]=X,e._.arrows[q+"Type"]=R,e._.arrows[q+"String"]=o}else z?(t=e._.arrows.startdx*W||0,c=M.getTotalLength(f.path)-t):(t=0,c=M.getTotalLength(f.path)-(e._.arrows.enddx*W||0)),e._.arrows[q+"Path"]&&l(u,{d:M.getSubpath(f.path,t,c)}),delete e._.arrows[q+"Path"],delete e._.arrows[q+"Marker"],delete e._.arrows[q+"dx"],delete e._.arrows[q+"Type"],delete e._.arrows[q+"String"];for(i in d)if(d[b](i)&&!d[i]){var w=M._g.doc.getElementById(i);w&&w.parentNode.removeChild(w)}}},h={"-":[3,1],".":[1,1],"-.":[3,1,1,1],"-..":[3,1,1,1,1,1],". ":[1,3],"- ":[4,3],"--":[8,3],"- .":[4,3,1,3],"--.":[8,3,1,3],"--..":[8,3,1,3,1,3]},R=function(M,b,e){if(b=h[p(b).toLowerCase()]){for(var o=M.attrs["stroke-width"]||"1",z={round:o,square:o,butt:0}[M.attrs["stroke-linecap"]||e["stroke-linecap"]]||0,t=[],c=b.length;c--;)t[c]=b[c]*o+(c%2?1:-1)*z;l(M.node,{"stroke-dasharray":t.join(",")})}else l(M.node,{"stroke-dasharray":"none"})},m=function(e,z){var n=e.node,i=e.attrs,a=n.style.visibility;for(var A in n.style.visibility="hidden",z)if(z[b](A)){if(!M._availableAttrs[b](A))continue;var d=z[A];switch(i[A]=d,A){case"blur":e.blur(d);break;case"title":var u=n.getElementsByTagName("title");if(u.length&&(u=u[0]))u.firstChild.nodeValue=d;else{u=l("title");var h=M._g.doc.createTextNode(d);u.appendChild(h),n.appendChild(u)}break;case"href":case"target":var m=n.parentNode;if("a"!=m.tagName.toLowerCase()){var L=l("a");m.insertBefore(L,n),L.appendChild(n),m=L}"target"==A?m.setAttributeNS(s,"show","blank"==d?"new":d):m.setAttributeNS(s,A,d);break;case"cursor":n.style.cursor=d;break;case"transform":e.transform(d);break;case"arrow-start":W(e,d);break;case"arrow-end":W(e,d,1);break;case"clip-rect":var v=p(d).split(O);if(4==v.length){e.clip&&e.clip.parentNode.parentNode.removeChild(e.clip.parentNode);var N=l("clipPath"),y=l("rect");N.id=M.createUUID(),l(y,{x:v[0],y:v[1],width:v[2],height:v[3]}),N.appendChild(y),e.paper.defs.appendChild(N),l(n,{"clip-path":"url(#"+N.id+")"}),e.clip=y}if(!d){var B=n.getAttribute("clip-path");if(B){var X=M._g.doc.getElementById(B.replace(/(^url\(#|\)$)/g,r));X&&X.parentNode.removeChild(X),l(n,{"clip-path":r}),delete e.clip}}break;case"path":"path"==e.type&&(l(n,{d:d?i.path=M._pathToAbsolute(d):"M0,0"}),e._.dirty=1,e._.arrows&&("startString"in e._.arrows&&W(e,e._.arrows.startString),"endString"in e._.arrows&&W(e,e._.arrows.endString,1)));break;case"width":if(n.setAttribute(A,d),e._.dirty=1,!i.fx)break;A="x",d=i.x;case"x":i.fx&&(d=-i.x-(i.width||0));case"rx":if("rx"==A&&"rect"==e.type)break;case"cx":n.setAttribute(A,d),e.pattern&&f(e),e._.dirty=1;break;case"height":if(n.setAttribute(A,d),e._.dirty=1,!i.fy)break;A="y",d=i.y;case"y":i.fy&&(d=-i.y-(i.height||0));case"ry":if("ry"==A&&"rect"==e.type)break;case"cy":n.setAttribute(A,d),e.pattern&&f(e),e._.dirty=1;break;case"r":"rect"==e.type?l(n,{rx:d,ry:d}):n.setAttribute(A,d),e._.dirty=1;break;case"src":"image"==e.type&&n.setAttributeNS(s,"href",d);break;case"stroke-width":1==e._.sx&&1==e._.sy||(d/=t(c(e._.sx),c(e._.sy))||1),n.setAttribute(A,d),i["stroke-dasharray"]&&R(e,i["stroke-dasharray"],z),e._.arrows&&("startString"in e._.arrows&&W(e,e._.arrows.startString),"endString"in e._.arrows&&W(e,e._.arrows.endString,1));break;case"stroke-dasharray":R(e,d,z);break;case"fill":var w=p(d).match(M._ISURL);if(w){N=l("pattern");var x=l("image");N.id=M.createUUID(),l(N,{x:0,y:0,patternUnits:"userSpaceOnUse",height:1,width:1}),l(x,{x:0,y:0,"xlink:href":w[1]}),N.appendChild(x),function(b){M._preload(w[1],function(){var M=this.offsetWidth,p=this.offsetHeight;l(b,{width:M,height:p}),l(x,{width:M,height:p})})}(N),e.paper.defs.appendChild(N),l(n,{fill:"url(#"+N.id+")"}),e.pattern=N,e.pattern&&f(e);break}var T=M.getRGB(d);if(T.error){if(("circle"==e.type||"ellipse"==e.type||"r"!=p(d).charAt())&&q(e,d)){if("opacity"in i||"fill-opacity"in i){var _=M._g.doc.getElementById(n.getAttribute("fill").replace(/^url\(#|\)$/g,r));if(_){var k=_.getElementsByTagName("stop");l(k[k.length-1],{"stop-opacity":("opacity"in i?i.opacity:1)*("fill-opacity"in i?i["fill-opacity"]:1)})}}i.gradient=d,i.fill="none";break}}else delete z.gradient,delete i.gradient,!M.is(i.opacity,"undefined")&&M.is(z.opacity,"undefined")&&l(n,{opacity:i.opacity}),!M.is(i["fill-opacity"],"undefined")&&M.is(z["fill-opacity"],"undefined")&&l(n,{"fill-opacity":i["fill-opacity"]});T[b]("opacity")&&l(n,{"fill-opacity":T.opacity>1?T.opacity/100:T.opacity});case"stroke":T=M.getRGB(d),n.setAttribute(A,T.hex),"stroke"==A&&T[b]("opacity")&&l(n,{"stroke-opacity":T.opacity>1?T.opacity/100:T.opacity}),"stroke"==A&&e._.arrows&&("startString"in e._.arrows&&W(e,e._.arrows.startString),"endString"in e._.arrows&&W(e,e._.arrows.endString,1));break;case"gradient":("circle"==e.type||"ellipse"==e.type||"r"!=p(d).charAt())&&q(e,d);break;case"opacity":i.gradient&&!i[b]("stroke-opacity")&&l(n,{"stroke-opacity":d>1?d/100:d});case"fill-opacity":if(i.gradient){(_=M._g.doc.getElementById(n.getAttribute("fill").replace(/^url\(#|\)$/g,r)))&&(k=_.getElementsByTagName("stop"),l(k[k.length-1],{"stop-opacity":d}));break}default:"font-size"==A&&(d=o(d,10)+"px");var S=A.replace(/(\-.)/g,function(M){return M.substring(1).toUpperCase()});n.style[S]=d,e._.dirty=1,n.setAttribute(A,d)}}g(e,z),n.style.visibility=a},g=function(e,z){if("text"==e.type&&(z[b]("text")||z[b]("font")||z[b]("font-size")||z[b]("x")||z[b]("y"))){var t=e.attrs,c=e.node,n=c.firstChild?o(M._g.doc.defaultView.getComputedStyle(c.firstChild,r).getPropertyValue("font-size"),10):10;if(z[b]("text")){for(t.text=z.text;c.firstChild;)c.removeChild(c.firstChild);for(var O,i=p(z.text).split("\n"),a=[],s=0,A=i.length;s<A;s++)O=l("tspan"),s&&l(O,{dy:1.2*n,x:t.x}),O.appendChild(M._g.doc.createTextNode(i[s])),c.appendChild(O),a[s]=O}else for(s=0,A=(a=c.getElementsByTagName("tspan")).length;s<A;s++)s?l(a[s],{dy:1.2*n,x:t.x}):l(a[0],{dy:0});l(c,{x:t.x,y:t.y}),e._.dirty=1;var d=e._getBBox(),q=t.y-(d.y+d.height/2);q&&M.is(q,"finite")&&l(a[0],{dy:q})}},L=function(M){return M.parentNode&&"a"===M.parentNode.tagName.toLowerCase()?M.parentNode:M},v=function(b,p){this[0]=this.node=b,b.raphael=!0,this.id=("0000"+(Math.random()*Math.pow(36,5)|0).toString(36)).slice(-5),b.raphaelid=this.id,this.matrix=M.matrix(),this.realPath=null,this.paper=p,this.attrs=this.attrs||{},this._={transform:[],sx:1,sy:1,deg:0,dx:0,dy:0,dirty:1},!p.bottom&&(p.bottom=this),this.prev=p.top,p.top&&(p.top.next=this),p.top=this,this.next=null},N=M.el;v.prototype=N,N.constructor=v,M._engine.path=function(M,b){var p=l("path");b.canvas&&b.canvas.appendChild(p);var e=new v(p,b);return e.type="path",m(e,{fill:"none",stroke:"#000",path:M}),e},N.rotate=function(M,b,o){if(this.removed)return this;if((M=p(M).split(O)).length-1&&(b=e(M[1]),o=e(M[2])),M=e(M[0]),null==o&&(b=o),null==b||null==o){var z=this.getBBox(1);b=z.x+z.width/2,o=z.y+z.height/2}return this.transform(this._.transform.concat([["r",M,b,o]])),this},N.scale=function(M,b,o,z){if(this.removed)return this;if((M=p(M).split(O)).length-1&&(b=e(M[1]),o=e(M[2]),z=e(M[3])),M=e(M[0]),null==b&&(b=M),null==z&&(o=z),null==o||null==z)var t=this.getBBox(1);return o=null==o?t.x+t.width/2:o,z=null==z?t.y+t.height/2:z,this.transform(this._.transform.concat([["s",M,b,o,z]])),this},N.translate=function(M,b){return this.removed||((M=p(M).split(O)).length-1&&(b=e(M[1])),M=e(M[0])||0,b=+b||0,this.transform(this._.transform.concat([["t",M,b]]))),this},N.transform=function(p){var e=this._;if(null==p)return e.transform;if(M._extractTransform(this,p),this.clip&&l(this.clip,{transform:this.matrix.invert()}),this.pattern&&f(this),this.node&&l(this.node,{transform:this.matrix}),1!=e.sx||1!=e.sy){var o=this.attrs[b]("stroke-width")?this.attrs["stroke-width"]:1;this.attr({"stroke-width":o})}return this},N.hide=function(){return this.removed||(this.node.style.display="none"),this},N.show=function(){return this.removed||(this.node.style.display=""),this},N.remove=function(){var b=L(this.node);if(!this.removed&&b.parentNode){var p=this.paper;for(var e in p.__set__&&p.__set__.exclude(this),i.unbind("raphael.*.*."+this.id),this.gradient&&p.defs.removeChild(this.gradient),M._tear(this,p),b.parentNode.removeChild(b),this.removeData(),this)this[e]="function"==typeof this[e]?M._removedFactory(e):null;this.removed=!0}},N._getBBox=function(){if("none"==this.node.style.display){this.show();var M=!0}var b,p=!1;this.paper.canvas.parentElement?b=this.paper.canvas.parentElement.style:this.paper.canvas.parentNode&&(b=this.paper.canvas.parentNode.style),b&&"none"==b.display&&(p=!0,b.display="");var e={};try{e=this.node.getBBox()}catch(M){e={x:this.node.clientLeft,y:this.node.clientTop,width:this.node.clientWidth,height:this.node.clientHeight}}finally{e=e||{},p&&(b.display="none")}return M&&this.hide(),e},N.attr=function(p,e){if(this.removed)return this;if(null==p){var o={};for(var z in this.attrs)this.attrs[b](z)&&(o[z]=this.attrs[z]);return o.gradient&&"none"==o.fill&&(o.fill=o.gradient)&&delete o.gradient,o.transform=this._.transform,o}if(null==e&&M.is(p,"string")){if("fill"==p&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;if("transform"==p)return this._.transform;for(var t=p.split(O),c={},n=0,r=t.length;n<r;n++)(p=t[n])in this.attrs?c[p]=this.attrs[p]:M.is(this.paper.customAttributes[p],"function")?c[p]=this.paper.customAttributes[p].def:c[p]=M._availableAttrs[p];return r-1?c:c[t[0]]}if(null==e&&M.is(p,"array")){for(c={},n=0,r=p.length;n<r;n++)c[p[n]]=this.attr(p[n]);return c}if(null!=e){var a={};a[p]=e}else null!=p&&M.is(p,"object")&&(a=p);for(var s in a)i("raphael.attr."+s+"."+this.id,this,a[s]);for(s in this.paper.customAttributes)if(this.paper.customAttributes[b](s)&&a[b](s)&&M.is(this.paper.customAttributes[s],"function")){var A=this.paper.customAttributes[s].apply(this,[].concat(a[s]));for(var d in this.attrs[s]=a[s],A)A[b](d)&&(a[d]=A[d])}return m(this,a),this},N.toFront=function(){if(this.removed)return this;var b=L(this.node);b.parentNode.appendChild(b);var p=this.paper;return p.top!=this&&M._tofront(this,p),this},N.toBack=function(){if(this.removed)return this;var b=L(this.node),p=b.parentNode;p.insertBefore(b,p.firstChild),M._toback(this,this.paper);this.paper;return this},N.insertAfter=function(b){if(this.removed||!b)return this;var p=L(this.node),e=L(b.node||b[b.length-1].node);return e.nextSibling?e.parentNode.insertBefore(p,e.nextSibling):e.parentNode.appendChild(p),M._insertafter(this,b,this.paper),this},N.insertBefore=function(b){if(this.removed||!b)return this;var p=L(this.node),e=L(b.node||b[0].node);return e.parentNode.insertBefore(p,e),M._insertbefore(this,b,this.paper),this},N.blur=function(b){var p=this;if(0!==+b){var e=l("filter"),o=l("feGaussianBlur");p.attrs.blur=b,e.id=M.createUUID(),l(o,{stdDeviation:+b||1.5}),e.appendChild(o),p.paper.defs.appendChild(e),p._blur=e,l(p.node,{filter:"url(#"+e.id+")"})}else p._blur&&(p._blur.parentNode.removeChild(p._blur),delete p._blur,delete p.attrs.blur),p.node.removeAttribute("filter");return p},M._engine.circle=function(M,b,p,e){var o=l("circle");M.canvas&&M.canvas.appendChild(o);var z=new v(o,M);return z.attrs={cx:b,cy:p,r:e,fill:"none",stroke:"#000"},z.type="circle",l(o,z.attrs),z},M._engine.rect=function(M,b,p,e,o,z){var t=l("rect");M.canvas&&M.canvas.appendChild(t);var c=new v(t,M);return c.attrs={x:b,y:p,width:e,height:o,rx:z||0,ry:z||0,fill:"none",stroke:"#000"},c.type="rect",l(t,c.attrs),c},M._engine.ellipse=function(M,b,p,e,o){var z=l("ellipse");M.canvas&&M.canvas.appendChild(z);var t=new v(z,M);return t.attrs={cx:b,cy:p,rx:e,ry:o,fill:"none",stroke:"#000"},t.type="ellipse",l(z,t.attrs),t},M._engine.image=function(M,b,p,e,o,z){var t=l("image");l(t,{x:p,y:e,width:o,height:z,preserveAspectRatio:"none"}),t.setAttributeNS(s,"href",b),M.canvas&&M.canvas.appendChild(t);var c=new v(t,M);return c.attrs={x:p,y:e,width:o,height:z,src:b},c.type="image",c},M._engine.text=function(b,p,e,o){var z=l("text");b.canvas&&b.canvas.appendChild(z);var t=new v(z,b);return t.attrs={x:p,y:e,"text-anchor":"middle",text:o,"font-family":M._availableAttrs["font-family"],"font-size":M._availableAttrs["font-size"],stroke:"none",fill:"#000"},t.type="text",m(t,t.attrs),t},M._engine.setSize=function(M,b){return this.width=M||this.width,this.height=b||this.height,this.canvas.setAttribute("width",this.width),this.canvas.setAttribute("height",this.height),this._viewBox&&this.setViewBox.apply(this,this._viewBox),this},M._engine.create=function(){var b=M._getContainer.apply(0,arguments),p=b&&b.container,e=b.x,o=b.y,z=b.width,t=b.height;if(!p)throw new Error("SVG container not found.");var c,n=l("svg"),O="overflow:hidden;";return e=e||0,o=o||0,l(n,{height:t=t||342,version:1.1,width:z=z||512,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"}),1==p?(n.style.cssText=O+"position:absolute;left:"+e+"px;top:"+o+"px",M._g.doc.body.appendChild(n),c=1):(n.style.cssText=O+"position:relative",p.firstChild?p.insertBefore(n,p.firstChild):p.appendChild(n)),(p=new M._Paper).width=z,p.height=t,p.canvas=n,p.clear(),p._left=p._top=0,c&&(p.renderfix=function(){}),p.renderfix(),p},M._engine.setViewBox=function(M,b,p,e,o){i("raphael.setViewBox",this,this._viewBox,[M,b,p,e,o]);var z,c,n=this.getSize(),O=t(p/n.width,e/n.height),r=this.top,s=o?"xMidYMid meet":"xMinYMin";for(null==M?(this._vbSize&&(O=1),delete this._vbSize,z="0 0 "+this.width+a+this.height):(this._vbSize=O,z=M+a+b+a+p+a+e),l(this.canvas,{viewBox:z,preserveAspectRatio:s});O&&r;)c="stroke-width"in r.attrs?r.attrs["stroke-width"]:1,r.attr({"stroke-width":c}),r._.dirty=1,r._.dirtyT=1,r=r.prev;return this._viewBox=[M,b,p,e,!!o],this},M.prototype.renderfix=function(){var M,b=this.canvas,p=b.style;try{M=b.getScreenCTM()||b.createSVGMatrix()}catch(p){M=b.createSVGMatrix()}var e=-M.e%1,o=-M.f%1;(e||o)&&(e&&(this._left=(this._left+e)%1,p.left=this._left+"px"),o&&(this._top=(this._top+o)%1,p.top=this._top+"px"))},M.prototype.clear=function(){M.eve("raphael.clear",this);for(var b=this.canvas;b.firstChild;)b.removeChild(b.firstChild);this.bottom=this.top=null,(this.desc=l("desc")).appendChild(M._g.doc.createTextNode("Created with Raphaël "+M.version)),b.appendChild(this.desc),b.appendChild(this.defs=l("defs"))},M.prototype.remove=function(){for(var b in i("raphael.remove",this),this.canvas.parentNode&&this.canvas.parentNode.removeChild(this.canvas),this)this[b]="function"==typeof this[b]?M._removedFactory(b):null};var y=M.st;for(var B in N)N[b](B)&&!y[b](B)&&(y[B]=function(M){return function(){var b=arguments;return this.forEach(function(p){p[M].apply(p,b)})}}(B))}}.apply(b,e),void 0===o||(M.exports=o)},function(M,b,p){var e,o;e=[p(1)],o=function(M){if(!M||M.vml){var b="hasOwnProperty",p=String,e=parseFloat,o=Math,z=o.round,t=o.max,c=o.min,n=o.abs,O="fill",i=/[, ]+/,r=M.eve,a=" ",s="",A={M:"m",L:"l",C:"c",Z:"x",m:"t",l:"r",c:"v",z:"x"},d=/([clmz]),?([^clmz]*)/gi,l=/ progid:\S+Blur\([^\)]+\)/g,q=/-?[^,\s-]+/g,u="position:absolute;left:0;top:0;width:1px;height:1px;behavior:url(#default#VML)",f=21600,W={path:1,rect:1,image:1},h={circle:1,ellipse:1},R=function(b,p,e){var o=M.matrix();return o.rotate(-b,.5,.5),{dx:o.x(p,e),dy:o.y(p,e)}},m=function(M,b,p,e,o,z){var t=M._,c=M.matrix,i=t.fillpos,r=M.node,s=r.style,A=1,d="",l=f/b,q=f/p;if(s.visibility="hidden",b&&p){if(r.coordsize=n(l)+a+n(q),s.rotation=z*(b*p<0?-1:1),z){var u=R(z,e,o);e=u.dx,o=u.dy}if(b<0&&(d+="x"),p<0&&(d+=" y")&&(A=-1),s.flip=d,r.coordorigin=e*-l+a+o*-q,i||t.fillsize){var W=r.getElementsByTagName(O);W=W&&W[0],r.removeChild(W),i&&(u=R(z,c.x(i[0],i[1]),c.y(i[0],i[1])),W.position=u.dx*A+a+u.dy*A),t.fillsize&&(W.size=t.fillsize[0]*n(b)+a+t.fillsize[1]*n(p)),r.appendChild(W)}s.visibility="visible"}};M.toString=function(){return"Your browser doesn’t support SVG. Falling down to VML.\nYou are running Raphaël "+this.version};var g,L=function(M,b,e){for(var o=p(b).toLowerCase().split("-"),z=e?"end":"start",t=o.length,c="classic",n="medium",O="medium";t--;)switch(o[t]){case"block":case"classic":case"oval":case"diamond":case"open":case"none":c=o[t];break;case"wide":case"narrow":O=o[t];break;case"long":case"short":n=o[t]}var i=M.node.getElementsByTagName("stroke")[0];i[z+"arrow"]=c,i[z+"arrowlength"]=n,i[z+"arrowwidth"]=O},v=function(o,n){o.attrs=o.attrs||{};var r=o.node,l=o.attrs,u=r.style,R=W[o.type]&&(n.x!=l.x||n.y!=l.y||n.width!=l.width||n.height!=l.height||n.cx!=l.cx||n.cy!=l.cy||n.rx!=l.rx||n.ry!=l.ry||n.r!=l.r),v=h[o.type]&&(l.cx!=n.cx||l.cy!=n.cy||l.r!=n.r||l.rx!=n.rx||l.ry!=n.ry),y=o;for(var B in n)n[b](B)&&(l[B]=n[B]);if(R&&(l.path=M._getPath[o.type](o),o._.dirty=1),n.href&&(r.href=n.href),n.title&&(r.title=n.title),n.target&&(r.target=n.target),n.cursor&&(u.cursor=n.cursor),"blur"in n&&o.blur(n.blur),(n.path&&"path"==o.type||R)&&(r.path=function(b){var e=/[ahqstv]/gi,o=M._pathToAbsolute;if(p(b).match(e)&&(o=M._path2curve),e=/[clmz]/g,o==M._pathToAbsolute&&!p(b).match(e)){var t=p(b).replace(d,function(M,b,p){var e=[],o="m"==b.toLowerCase(),t=A[b];return p.replace(q,function(M){o&&2==e.length&&(t+=e+A["m"==b?"l":"L"],e=[]),e.push(z(M*f))}),t+e});return t}var c,n,O=o(b);t=[];for(var i=0,r=O.length;i<r;i++){c=O[i],"z"==(n=O[i][0].toLowerCase())&&(n="x");for(var l=1,u=c.length;l<u;l++)n+=z(c[l]*f)+(l!=u-1?",":s);t.push(n)}return t.join(a)}(~p(l.path).toLowerCase().indexOf("r")?M._pathToAbsolute(l.path):l.path),o._.dirty=1,"image"==o.type&&(o._.fillpos=[l.x,l.y],o._.fillsize=[l.width,l.height],m(o,1,1,0,0,0))),"transform"in n&&o.transform(n.transform),v){var X=+l.cx,w=+l.cy,x=+l.rx||+l.r||0,T=+l.ry||+l.r||0;r.path=M.format("ar{0},{1},{2},{3},{4},{1},{4},{1}x",z((X-x)*f),z((w-T)*f),z((X+x)*f),z((w+T)*f),z(X*f)),o._.dirty=1}if("clip-rect"in n){var _=p(n["clip-rect"]).split(i);if(4==_.length){_[2]=+_[2]+ +_[0],_[3]=+_[3]+ +_[1];var k=r.clipRect||M._g.doc.createElement("div"),S=k.style;S.clip=M.format("rect({1}px {2}px {3}px {0}px)",_),r.clipRect||(S.position="absolute",S.top=0,S.left=0,S.width=o.paper.width+"px",S.height=o.paper.height+"px",r.parentNode.insertBefore(k,r),k.appendChild(r),r.clipRect=k)}n["clip-rect"]||r.clipRect&&(r.clipRect.style.clip="auto")}if(o.textpath){var C=o.textpath.style;n.font&&(C.font=n.font),n["font-family"]&&(C.fontFamily='"'+n["font-family"].split(",")[0].replace(/^['"]+|['"]+$/g,s)+'"'),n["font-size"]&&(C.fontSize=n["font-size"]),n["font-weight"]&&(C.fontWeight=n["font-weight"]),n["font-style"]&&(C.fontStyle=n["font-style"])}if("arrow-start"in n&&L(y,n["arrow-start"]),"arrow-end"in n&&L(y,n["arrow-end"],1),null!=n.opacity||null!=n.fill||null!=n.src||null!=n.stroke||null!=n["stroke-width"]||null!=n["stroke-opacity"]||null!=n["fill-opacity"]||null!=n["stroke-dasharray"]||null!=n["stroke-miterlimit"]||null!=n["stroke-linejoin"]||null!=n["stroke-linecap"]){var E=r.getElementsByTagName(O);if(!(E=E&&E[0])&&(E=g(O)),"image"==o.type&&n.src&&(E.src=n.src),n.fill&&(E.on=!0),null!=E.on&&"none"!=n.fill&&null!==n.fill||(E.on=!1),E.on&&n.fill){var D=p(n.fill).match(M._ISURL);if(D){E.parentNode==r&&r.removeChild(E),E.rotate=!0,E.src=D[1],E.type="tile";var P=o.getBBox(1);E.position=P.x+a+P.y,o._.fillpos=[P.x,P.y],M._preload(D[1],function(){o._.fillsize=[this.offsetWidth,this.offsetHeight]})}else E.color=M.getRGB(n.fill).hex,E.src=s,E.type="solid",M.getRGB(n.fill).error&&(y.type in{circle:1,ellipse:1}||"r"!=p(n.fill).charAt())&&N(y,n.fill,E)&&(l.fill="none",l.gradient=n.fill,E.rotate=!1)}if("fill-opacity"in n||"opacity"in n){var I=((+l["fill-opacity"]+1||2)-1)*((+l.opacity+1||2)-1)*((+M.getRGB(n.fill).o+1||2)-1);I=c(t(I,0),1),E.opacity=I,E.src&&(E.color="none")}r.appendChild(E);var F=r.getElementsByTagName("stroke")&&r.getElementsByTagName("stroke")[0],j=!1;!F&&(j=F=g("stroke")),(n.stroke&&"none"!=n.stroke||n["stroke-width"]||null!=n["stroke-opacity"]||n["stroke-dasharray"]||n["stroke-miterlimit"]||n["stroke-linejoin"]||n["stroke-linecap"])&&(F.on=!0),("none"==n.stroke||null===n.stroke||null==F.on||0==n.stroke||0==n["stroke-width"])&&(F.on=!1);var H=M.getRGB(n.stroke);F.on&&n.stroke&&(F.color=H.hex),I=((+l["stroke-opacity"]+1||2)-1)*((+l.opacity+1||2)-1)*((+H.o+1||2)-1);var U=.75*(e(n["stroke-width"])||1);if(I=c(t(I,0),1),null==n["stroke-width"]&&(U=l["stroke-width"]),n["stroke-width"]&&(F.weight=U),U&&U<1&&(I*=U)&&(F.weight=1),F.opacity=I,n["stroke-linejoin"]&&(F.joinstyle=n["stroke-linejoin"]||"miter"),F.miterlimit=n["stroke-miterlimit"]||8,n["stroke-linecap"]&&(F.endcap="butt"==n["stroke-linecap"]?"flat":"square"==n["stroke-linecap"]?"square":"round"),"stroke-dasharray"in n){var Y={"-":"shortdash",".":"shortdot","-.":"shortdashdot","-..":"shortdashdotdot",". ":"dot","- ":"dash","--":"longdash","- .":"dashdot","--.":"longdashdot","--..":"longdashdotdot"};F.dashstyle=Y[b](n["stroke-dasharray"])?Y[n["stroke-dasharray"]]:s}j&&r.appendChild(F)}if("text"==y.type){y.paper.canvas.style.display=s;var G=y.paper.span,V=l.font&&l.font.match(/\d+(?:\.\d*)?(?=px)/);u=G.style,l.font&&(u.font=l.font),l["font-family"]&&(u.fontFamily=l["font-family"]),l["font-weight"]&&(u.fontWeight=l["font-weight"]),l["font-style"]&&(u.fontStyle=l["font-style"]),V=e(l["font-size"]||V&&V[0])||10,u.fontSize=100*V+"px",y.textpath.string&&(G.innerHTML=p(y.textpath.string).replace(/</g,"<").replace(/&/g,"&").replace(/\n/g,"<br>"));var $=G.getBoundingClientRect();y.W=l.w=($.right-$.left)/100,y.H=l.h=($.bottom-$.top)/100,y.X=l.x,y.Y=l.y+y.H/2,("x"in n||"y"in n)&&(y.path.v=M.format("m{0},{1}l{2},{1}",z(l.x*f),z(l.y*f),z(l.x*f)+1));for(var K=["x","y","text","font","font-family","font-weight","font-style","font-size"],Q=0,J=K.length;Q<J;Q++)if(K[Q]in n){y._.dirty=1;break}switch(l["text-anchor"]){case"start":y.textpath.style["v-text-align"]="left",y.bbx=y.W/2;break;case"end":y.textpath.style["v-text-align"]="right",y.bbx=-y.W/2;break;default:y.textpath.style["v-text-align"]="center",y.bbx=0}y.textpath.style["v-text-kern"]=!0}},N=function(b,z,t){b.attrs=b.attrs||{};b.attrs;var c=Math.pow,n="linear",O=".5 .5";if(b.attrs.gradient=z,z=(z=p(z).replace(M._radial_gradient,function(M,b,p){return n="radial",b&&p&&(b=e(b),p=e(p),c(b-.5,2)+c(p-.5,2)>.25&&(p=o.sqrt(.25-c(b-.5,2))*(2*(p>.5)-1)+.5),O=b+a+p),s})).split(/\s*\-\s*/),"linear"==n){var i=z.shift();if(i=-e(i),isNaN(i))return null}var r=M._parseDots(z);if(!r)return null;if(b=b.shape||b.node,r.length){b.removeChild(t),t.on=!0,t.method="none",t.color=r[0].color,t.color2=r[r.length-1].color;for(var A=[],d=0,l=r.length;d<l;d++)r[d].offset&&A.push(r[d].offset+a+r[d].color);t.colors=A.length?A.join():"0% "+t.color,"radial"==n?(t.type="gradientTitle",t.focus="100%",t.focussize="0 0",t.focusposition=O,t.angle=0):(t.type="gradient",t.angle=(270-i)%360),b.appendChild(t)}return 1},y=function(b,p){this[0]=this.node=b,b.raphael=!0,this.id=M._oid++,b.raphaelid=this.id,this.X=0,this.Y=0,this.attrs={},this.paper=p,this.matrix=M.matrix(),this._={transform:[],sx:1,sy:1,dx:0,dy:0,deg:0,dirty:1,dirtyT:1},!p.bottom&&(p.bottom=this),this.prev=p.top,p.top&&(p.top.next=this),p.top=this,this.next=null},B=M.el;y.prototype=B,B.constructor=y,B.transform=function(b){if(null==b)return this._.transform;var e,o=this.paper._viewBoxShift,z=o?"s"+[o.scale,o.scale]+"-1-1t"+[o.dx,o.dy]:s;o&&(e=b=p(b).replace(/\.{3}|\u2026/g,this._.transform||s)),M._extractTransform(this,z+b);var t,c=this.matrix.clone(),n=this.skew,O=this.node,i=~p(this.attrs.fill).indexOf("-"),r=!p(this.attrs.fill).indexOf("url(");if(c.translate(1,1),r||i||"image"==this.type)if(n.matrix="1 0 0 1",n.offset="0 0",t=c.split(),i&&t.noRotation||!t.isSimple){O.style.filter=c.toFilter();var A=this.getBBox(),d=this.getBBox(1),l=A.x-d.x,q=A.y-d.y;O.coordorigin=l*-f+a+q*-f,m(this,1,1,l,q,0)}else O.style.filter=s,m(this,t.scalex,t.scaley,t.dx,t.dy,t.rotate);else O.style.filter=s,n.matrix=p(c),n.offset=c.offset();return null!==e&&(this._.transform=e,M._extractTransform(this,e)),this},B.rotate=function(M,b,o){if(this.removed)return this;if(null!=M){if((M=p(M).split(i)).length-1&&(b=e(M[1]),o=e(M[2])),M=e(M[0]),null==o&&(b=o),null==b||null==o){var z=this.getBBox(1);b=z.x+z.width/2,o=z.y+z.height/2}return this._.dirtyT=1,this.transform(this._.transform.concat([["r",M,b,o]])),this}},B.translate=function(M,b){return this.removed||((M=p(M).split(i)).length-1&&(b=e(M[1])),M=e(M[0])||0,b=+b||0,this._.bbox&&(this._.bbox.x+=M,this._.bbox.y+=b),this.transform(this._.transform.concat([["t",M,b]]))),this},B.scale=function(M,b,o,z){if(this.removed)return this;if((M=p(M).split(i)).length-1&&(b=e(M[1]),o=e(M[2]),z=e(M[3]),isNaN(o)&&(o=null),isNaN(z)&&(z=null)),M=e(M[0]),null==b&&(b=M),null==z&&(o=z),null==o||null==z)var t=this.getBBox(1);return o=null==o?t.x+t.width/2:o,z=null==z?t.y+t.height/2:z,this.transform(this._.transform.concat([["s",M,b,o,z]])),this._.dirtyT=1,this},B.hide=function(){return!this.removed&&(this.node.style.display="none"),this},B.show=function(){return!this.removed&&(this.node.style.display=s),this},B.auxGetBBox=M.el.getBBox,B.getBBox=function(){var M=this.auxGetBBox();if(this.paper&&this.paper._viewBoxShift){var b={},p=1/this.paper._viewBoxShift.scale;return b.x=M.x-this.paper._viewBoxShift.dx,b.x*=p,b.y=M.y-this.paper._viewBoxShift.dy,b.y*=p,b.width=M.width*p,b.height=M.height*p,b.x2=b.x+b.width,b.y2=b.y+b.height,b}return M},B._getBBox=function(){return this.removed?{}:{x:this.X+(this.bbx||0)-this.W/2,y:this.Y-this.H,width:this.W,height:this.H}},B.remove=function(){if(!this.removed&&this.node.parentNode){for(var b in this.paper.__set__&&this.paper.__set__.exclude(this),M.eve.unbind("raphael.*.*."+this.id),M._tear(this,this.paper),this.node.parentNode.removeChild(this.node),this.shape&&this.shape.parentNode.removeChild(this.shape),this)this[b]="function"==typeof this[b]?M._removedFactory(b):null;this.removed=!0}},B.attr=function(p,e){if(this.removed)return this;if(null==p){var o={};for(var z in this.attrs)this.attrs[b](z)&&(o[z]=this.attrs[z]);return o.gradient&&"none"==o.fill&&(o.fill=o.gradient)&&delete o.gradient,o.transform=this._.transform,o}if(null==e&&M.is(p,"string")){if(p==O&&"none"==this.attrs.fill&&this.attrs.gradient)return this.attrs.gradient;for(var t=p.split(i),c={},n=0,a=t.length;n<a;n++)(p=t[n])in this.attrs?c[p]=this.attrs[p]:M.is(this.paper.customAttributes[p],"function")?c[p]=this.paper.customAttributes[p].def:c[p]=M._availableAttrs[p];return a-1?c:c[t[0]]}if(this.attrs&&null==e&&M.is(p,"array")){for(c={},n=0,a=p.length;n<a;n++)c[p[n]]=this.attr(p[n]);return c}var s;for(var A in null!=e&&((s={})[p]=e),null==e&&M.is(p,"object")&&(s=p),s)r("raphael.attr."+A+"."+this.id,this,s[A]);if(s){for(A in this.paper.customAttributes)if(this.paper.customAttributes[b](A)&&s[b](A)&&M.is(this.paper.customAttributes[A],"function")){var d=this.paper.customAttributes[A].apply(this,[].concat(s[A]));for(var l in this.attrs[A]=s[A],d)d[b](l)&&(s[l]=d[l])}s.text&&"text"==this.type&&(this.textpath.string=s.text),v(this,s)}return this},B.toFront=function(){return!this.removed&&this.node.parentNode.appendChild(this.node),this.paper&&this.paper.top!=this&&M._tofront(this,this.paper),this},B.toBack=function(){return this.removed||this.node.parentNode.firstChild!=this.node&&(this.node.parentNode.insertBefore(this.node,this.node.parentNode.firstChild),M._toback(this,this.paper)),this},B.insertAfter=function(b){return this.removed||(b.constructor==M.st.constructor&&(b=b[b.length-1]),b.node.nextSibling?b.node.parentNode.insertBefore(this.node,b.node.nextSibling):b.node.parentNode.appendChild(this.node),M._insertafter(this,b,this.paper)),this},B.insertBefore=function(b){return this.removed||(b.constructor==M.st.constructor&&(b=b[0]),b.node.parentNode.insertBefore(this.node,b.node),M._insertbefore(this,b,this.paper)),this},B.blur=function(b){var p=this.node.runtimeStyle,e=p.filter;return e=e.replace(l,s),0!==+b?(this.attrs.blur=b,p.filter=e+a+" progid:DXImageTransform.Microsoft.Blur(pixelradius="+(+b||1.5)+")",p.margin=M.format("-{0}px 0 0 -{0}px",z(+b||1.5))):(p.filter=e,p.margin=0,delete this.attrs.blur),this},M._engine.path=function(M,b){var p=g("shape");p.style.cssText=u,p.coordsize=f+a+f,p.coordorigin=b.coordorigin;var e=new y(p,b),o={fill:"none",stroke:"#000"};M&&(o.path=M),e.type="path",e.path=[],e.Path=s,v(e,o),b.canvas&&b.canvas.appendChild(p);var z=g("skew");return z.on=!0,p.appendChild(z),e.skew=z,e.transform(s),e},M._engine.rect=function(b,p,e,o,z,t){var c=M._rectPath(p,e,o,z,t),n=b.path(c),O=n.attrs;return n.X=O.x=p,n.Y=O.y=e,n.W=O.width=o,n.H=O.height=z,O.r=t,O.path=c,n.type="rect",n},M._engine.ellipse=function(M,b,p,e,o){var z=M.path();z.attrs;return z.X=b-e,z.Y=p-o,z.W=2*e,z.H=2*o,z.type="ellipse",v(z,{cx:b,cy:p,rx:e,ry:o}),z},M._engine.circle=function(M,b,p,e){var o=M.path();o.attrs;return o.X=b-e,o.Y=p-e,o.W=o.H=2*e,o.type="circle",v(o,{cx:b,cy:p,r:e}),o},M._engine.image=function(b,p,e,o,z,t){var c=M._rectPath(e,o,z,t),n=b.path(c).attr({stroke:"none"}),i=n.attrs,r=n.node,a=r.getElementsByTagName(O)[0];return i.src=p,n.X=i.x=e,n.Y=i.y=o,n.W=i.width=z,n.H=i.height=t,i.path=c,n.type="image",a.parentNode==r&&r.removeChild(a),a.rotate=!0,a.src=p,a.type="tile",n._.fillpos=[e,o],n._.fillsize=[z,t],r.appendChild(a),m(n,1,1,0,0,0),n},M._engine.text=function(b,e,o,t){var c=g("shape"),n=g("path"),O=g("textpath");e=e||0,o=o||0,t=t||"",n.v=M.format("m{0},{1}l{2},{1}",z(e*f),z(o*f),z(e*f)+1),n.textpathok=!0,O.string=p(t),O.on=!0,c.style.cssText=u,c.coordsize=f+a+f,c.coordorigin="0 0";var i=new y(c,b),r={fill:"#000",stroke:"none",font:M._availableAttrs.font,text:t};i.shape=c,i.path=n,i.textpath=O,i.type="text",i.attrs.text=p(t),i.attrs.x=e,i.attrs.y=o,i.attrs.w=1,i.attrs.h=1,v(i,r),c.appendChild(O),c.appendChild(n),b.canvas.appendChild(c);var A=g("skew");return A.on=!0,c.appendChild(A),i.skew=A,i.transform(s),i},M._engine.setSize=function(b,p){var e=this.canvas.style;return this.width=b,this.height=p,b==+b&&(b+="px"),p==+p&&(p+="px"),e.width=b,e.height=p,e.clip="rect(0 "+b+" "+p+" 0)",this._viewBox&&M._engine.setViewBox.apply(this,this._viewBox),this},M._engine.setViewBox=function(b,p,e,o,z){M.eve("raphael.setViewBox",this,this._viewBox,[b,p,e,o,z]);var t,c,n=this.getSize(),O=n.width,i=n.height;return z&&(e*(t=i/o)<O&&(b-=(O-e*t)/2/t),o*(c=O/e)<i&&(p-=(i-o*c)/2/c)),this._viewBox=[b,p,e,o,!!z],this._viewBoxShift={dx:-b,dy:-p,scale:n},this.forEach(function(M){M.transform("...")}),this},M._engine.initWin=function(M){var b=M.document;b.styleSheets.length<31?b.createStyleSheet().addRule(".rvml","behavior:url(#default#VML)"):b.styleSheets[0].addRule(".rvml","behavior:url(#default#VML)");try{!b.namespaces.rvml&&b.namespaces.add("rvml","urn:schemas-microsoft-com:vml"),g=function(M){return b.createElement("<rvml:"+M+' class="rvml">')}}catch(M){g=function(M){return b.createElement("<"+M+' xmlns="urn:schemas-microsoft.com:vml" class="rvml">')}}},M._engine.initWin(M._g.win),M._engine.create=function(){var b=M._getContainer.apply(0,arguments),p=b.container,e=b.height,o=b.width,z=b.x,t=b.y;if(!p)throw new Error("VML container not found.");var c=new M._Paper,n=c.canvas=M._g.doc.createElement("div"),O=n.style;return z=z||0,t=t||0,o=o||512,e=e||342,c.width=o,c.height=e,o==+o&&(o+="px"),e==+e&&(e+="px"),c.coordsize="21600000 21600000",c.coordorigin="0 0",c.span=M._g.doc.createElement("span"),c.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;",n.appendChild(c.span),O.cssText=M.format("top:0;left:0;width:{0};height:{1};display:inline-block;position:relative;clip:rect(0 {0} {1} 0);overflow:hidden",o,e),1==p?(M._g.doc.body.appendChild(n),O.left=z+"px",O.top=t+"px",O.position="absolute"):p.firstChild?p.insertBefore(n,p.firstChild):p.appendChild(n),c.renderfix=function(){},c},M.prototype.clear=function(){M.eve("raphael.clear",this),this.canvas.innerHTML=s,this.span=M._g.doc.createElement("span"),this.span.style.cssText="position:absolute;left:-9999em;top:-9999em;padding:0;margin:0;line-height:1;display:inline;",this.canvas.appendChild(this.span),this.bottom=this.top=null},M.prototype.remove=function(){for(var b in M.eve("raphael.remove",this),this.canvas.parentNode.removeChild(this.canvas),this)this[b]="function"==typeof this[b]?M._removedFactory(b):null;return!0};var X=M.st;for(var w in B)B[b](w)&&!X[b](w)&&(X[w]=function(M){return function(){var b=arguments;return this.forEach(function(p){p[M].apply(p,b)})}}(w))}}.apply(b,e),void 0===o||(M.exports=o)}])}),function(M){M.color={},M.color.make=function(b,p,e,o){var z={};return z.r=b||0,z.g=p||0,z.b=e||0,z.a=null!=o?o:1,z.add=function(M,b){for(var p=0;p<M.length;++p)z[M.charAt(p)]+=b;return z.normalize()},z.scale=function(M,b){for(var p=0;p<M.length;++p)z[M.charAt(p)]*=b;return z.normalize()},z.toString=function(){return z.a>=1?"rgb("+[z.r,z.g,z.b].join(",")+")":"rgba("+[z.r,z.g,z.b,z.a].join(",")+")"},z.normalize=function(){function M(M,b,p){return b<M?M:b>p?p:b}return z.r=M(0,parseInt(z.r),255),z.g=M(0,parseInt(z.g),255),z.b=M(0,parseInt(z.b),255),z.a=M(0,z.a,1),z},z.clone=function(){return M.color.make(z.r,z.b,z.g,z.a)},z.normalize()},M.color.extract=function(b,p){var e;do{if(""!=(e=b.css(p).toLowerCase())&&"transparent"!=e)break;b=b.parent()}while(!M.nodeName(b.get(0),"body"));return"rgba(0, 0, 0, 0)"==e&&(e="transparent"),M.color.parse(e)},M.color.parse=function(p){var e,o=M.color.make;if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(p))return o(parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10));if(e=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(p))return o(parseInt(e[1],10),parseInt(e[2],10),parseInt(e[3],10),parseFloat(e[4]));if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(p))return o(2.55*parseFloat(e[1]),2.55*parseFloat(e[2]),2.55*parseFloat(e[3]));if(e=/rgba\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\s*\)/.exec(p))return o(2.55*parseFloat(e[1]),2.55*parseFloat(e[2]),2.55*parseFloat(e[3]),parseFloat(e[4]));if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(p))return o(parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16));if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(p))return o(parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16));var z=M.trim(p).toLowerCase();return"transparent"==z?o(255,255,255,0):o((e=b[z]||[0,0,0])[0],e[1],e[2])};var b={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}}(jQuery),function(M){var b=Object.prototype.hasOwnProperty;function p(b,p){var e=p.children("."+b)[0];if(null==e&&((e=document.createElement("canvas")).className=b,M(e).css({direction:"ltr",position:"absolute",left:0,top:0}).appendTo(p),!e.getContext)){if(!window.G_vmlCanvasManager)throw new Error("Canvas is not available. If you're using IE with a fall-back such as Excanvas, then there's either a mistake in your conditional include, or the page has no DOCTYPE and is rendering in Quirks Mode.");e=window.G_vmlCanvasManager.initElement(e)}this.element=e;var o=this.context=e.getContext("2d"),z=window.devicePixelRatio||1,t=o.webkitBackingStorePixelRatio||o.mozBackingStorePixelRatio||o.msBackingStorePixelRatio||o.oBackingStorePixelRatio||o.backingStorePixelRatio||1;this.pixelRatio=z/t,this.resize(p.width(),p.height()),this.textContainer=null,this.text={},this._textCache={}}function e(b,e,o,z){var t=[],c={colors:["#edc240","#afd8f8","#cb4b4b","#4da74d","#9440ed"],legend:{show:!0,noColumns:1,labelFormatter:null,labelBoxBorderColor:"#ccc",container:null,position:"ne",margin:5,backgroundColor:null,backgroundOpacity:.85,sorted:null},xaxis:{show:null,position:"bottom",mode:null,font:null,color:null,tickColor:null,transform:null,inverseTransform:null,min:null,max:null,autoscaleMargin:null,ticks:null,tickFormatter:null,labelWidth:null,labelHeight:null,reserveSpace:null,tickLength:null,alignTicksWithAxis:null,tickDecimals:null,tickSize:null,minTickSize:null},yaxis:{autoscaleMargin:.02,position:"left"},xaxes:[],yaxes:[],series:{points:{show:!1,radius:3,lineWidth:2,fill:!0,fillColor:"#ffffff",symbol:"circle"},lines:{lineWidth:2,fill:!1,fillColor:null,steps:!1},bars:{show:!1,lineWidth:2,barWidth:1,fill:!0,fillColor:null,align:"left",horizontal:!1,zero:!0},shadowSize:3,highlightColor:null},grid:{show:!0,aboveData:!1,color:"#545454",backgroundColor:null,borderColor:null,tickColor:null,margin:0,labelMargin:5,axisMargin:8,borderWidth:2,minBorderMargin:null,markings:null,markingsColor:"#f4f4f4",markingsLineWidth:2,clickable:!1,hoverable:!1,autoHighlight:!0,mouseActiveRadius:10},interaction:{redrawOverlayInterval:1e3/60},hooks:{}},n=null,O=null,i=null,r=null,a=null,s=[],A=[],d={left:0,right:0,top:0,bottom:0},l=0,q=0,u={processOptions:[],processRawData:[],processDatapoints:[],processOffset:[],drawBackground:[],drawSeries:[],draw:[],bindEvents:[],drawOverlay:[],shutdown:[]},f=this;function W(M,b){b=[f].concat(b);for(var p=0;p<M.length;++p)M[p].apply(this,b)}function h(b){t=function(b){for(var p=[],e=0;e<b.length;++e){var o=M.extend(!0,{},c.series);null!=b[e].data?(o.data=b[e].data,delete b[e].data,M.extend(!0,o,b[e]),b[e].data=o.data):o.data=b[e],p.push(o)}return p}(b),function(){var b,p=t.length,e=-1;for(b=0;b<t.length;++b){var o=t[b].color;null!=o&&(p--,"number"==typeof o&&o>e&&(e=o))}p<=e&&(p=e+1);var z,n=[],O=c.colors,i=O.length,r=0;for(b=0;b<p;b++)z=M.color.parse(O[b%i]||"#666"),b%i==0&&b&&(r=r>=0?r<.5?-r-.2:0:-r),n[b]=z.scale("rgb",1+r);var a,d=0;for(b=0;b<t.length;++b){if(null==(a=t[b]).color?(a.color=n[d].toString(),++d):"number"==typeof a.color&&(a.color=n[a.color].toString()),null==a.lines.show){var l,q=!0;for(l in a)if(a[l]&&a[l].show){q=!1;break}q&&(a.lines.show=!0)}null==a.lines.zero&&(a.lines.zero=!!a.lines.fill),a.xaxis=L(s,R(a,"x")),a.yaxis=L(A,R(a,"y"))}}(),function(){var b,p,e,o,z,c,n,O,i,r,a,s,A=Number.POSITIVE_INFINITY,d=Number.NEGATIVE_INFINITY,l=Number.MAX_VALUE;function q(M,b,p){b<M.datamin&&b!=-l&&(M.datamin=b),p>M.datamax&&p!=l&&(M.datamax=p)}for(M.each(m(),function(M,b){b.datamin=A,b.datamax=d,b.used=!1}),b=0;b<t.length;++b)(z=t[b]).datapoints={points:[]},W(u.processRawData,[z,z.data,z.datapoints]);for(b=0;b<t.length;++b){if(a=(z=t[b]).data,!(s=z.datapoints.format)){if((s=[]).push({x:!0,number:!0,required:!0}),s.push({y:!0,number:!0,required:!0}),z.bars.show||z.lines.show&&z.lines.fill){var f=!!(z.bars.show&&z.bars.zero||z.lines.show&&z.lines.zero);s.push({y:!0,number:!0,required:!1,defaultValue:0,autoscale:f}),z.bars.horizontal&&(delete s[s.length-1].y,s[s.length-1].x=!0)}z.datapoints.format=s}if(null==z.datapoints.pointsize){z.datapoints.pointsize=s.length,n=z.datapoints.pointsize,c=z.datapoints.points;var h=z.lines.show&&z.lines.steps;for(z.xaxis.used=z.yaxis.used=!0,p=e=0;p<a.length;++p,e+=n){var R=null==(r=a[p]);if(!R)for(o=0;o<n;++o)O=r[o],(i=s[o])&&(i.number&&null!=O&&(O=+O,isNaN(O)?O=null:O==1/0?O=l:O==-1/0&&(O=-l)),null==O&&(i.required&&(R=!0),null!=i.defaultValue&&(O=i.defaultValue))),c[e+o]=O;if(R)for(o=0;o<n;++o)null!=(O=c[e+o])&&(i=s[o]).autoscale&&(i.x&&q(z.xaxis,O,O),i.y&&q(z.yaxis,O,O)),c[e+o]=null;else if(h&&e>0&&null!=c[e-n]&&c[e-n]!=c[e]&&c[e-n+1]!=c[e+1]){for(o=0;o<n;++o)c[e+n+o]=c[e+o];c[e+1]=c[e-n+1],e+=n}}}}for(b=0;b<t.length;++b)z=t[b],W(u.processDatapoints,[z,z.datapoints]);for(b=0;b<t.length;++b){c=(z=t[b]).datapoints.points,n=z.datapoints.pointsize,s=z.datapoints.format;var g=A,L=A,v=d,N=d;for(p=0;p<c.length;p+=n)if(null!=c[p])for(o=0;o<n;++o)O=c[p+o],(i=s[o])&&!1!==i.autoscale&&O!=l&&O!=-l&&(i.x&&(O<g&&(g=O),O>v&&(v=O)),i.y&&(O<L&&(L=O),O>N&&(N=O)));if(z.bars.show){var y;switch(z.bars.align){case"left":y=0;break;case"right":y=-z.bars.barWidth;break;case"center":y=-z.bars.barWidth/2;break;default:throw new Error("Invalid bar alignment: "+z.bars.align)}z.bars.horizontal?(L+=y,N+=y+z.bars.barWidth):(g+=y,v+=y+z.bars.barWidth)}q(z.xaxis,g,v),q(z.yaxis,L,N)}M.each(m(),function(M,b){b.datamin==A&&(b.datamin=null),b.datamax==d&&(b.datamax=null)})}()}function R(M,b){var p=M[b+"axis"];return"object"==typeof p&&(p=p.n),"number"!=typeof p&&(p=1),p}function m(){return M.grep(s.concat(A),function(M){return M})}function g(M){var b,p,e={};for(b=0;b<s.length;++b)(p=s[b])&&p.used&&(e["x"+p.n]=p.c2p(M.left));for(b=0;b<A.length;++b)(p=A[b])&&p.used&&(e["y"+p.n]=p.c2p(M.top));return void 0!==e.x1&&(e.x=e.x1),void 0!==e.y1&&(e.y=e.y1),e}function L(b,p){return b[p-1]||(b[p-1]={n:p,direction:b==s?"x":"y",options:M.extend(!0,{},b==s?c.xaxis:c.yaxis)}),b[p-1]}function v(b){var p,e=b.labelWidth,o=b.labelHeight,z=b.options.position,t=b.options.tickLength,O=c.grid.axisMargin,i=c.grid.labelMargin,r="x"==b.direction?s:A,a=M.grep(r,function(M){return M&&M.options.position==z&&M.reserveSpace});M.inArray(b,a)==a.length-1&&(O=0),p=0==M.inArray(b,a),null==t&&(t=p?"full":5),isNaN(+t)||(i+=+t),"x"==b.direction?(o+=i,"bottom"==z?(d.bottom+=o+O,b.box={top:n.height-d.bottom,height:o}):(b.box={top:d.top+O,height:o},d.top+=o+O)):(e+=i,"left"==z?(b.box={left:d.left+O,width:e},d.left+=e+O):(d.right+=e+O,b.box={left:n.width-d.right,width:e})),b.position=z,b.tickLength=t,b.box.padding=i,b.innermost=p}function N(){var p,e=m(),o=c.grid.show;for(var z in d){var O=c.grid.margin||0;d[z]="number"==typeof O?O:O[z]||0}for(var z in W(u.processOffset,[d]),d)"object"==typeof c.grid.borderWidth?d[z]+=o?c.grid.borderWidth[z]:0:d[z]+=o?c.grid.borderWidth:0;if(M.each(e,function(M,b){b.show=b.options.show,null==b.show&&(b.show=b.used),b.reserveSpace=b.show||b.options.reserveSpace,function(M){var b=M.options,p=+(null!=b.min?b.min:M.datamin),e=+(null!=b.max?b.max:M.datamax),o=e-p;if(0==o){var z=0==e?1:.01;null==b.min&&(p-=z),null!=b.max&&null==b.min||(e+=z)}else{var t=b.autoscaleMargin;null!=t&&(null==b.min&&(p-=o*t)<0&&null!=M.datamin&&M.datamin>=0&&(p=0),null==b.max&&(e+=o*t)>0&&null!=M.datamax&&M.datamax<=0&&(e=0))}M.min=p,M.max=e}(b)}),o){var i=M.grep(e,function(M){return M.reserveSpace});for(M.each(i,function(b,p){!function(b){var p,e=b.options;p="number"==typeof e.ticks&&e.ticks>0?e.ticks:.3*Math.sqrt("x"==b.direction?n.width:n.height);var o=(b.max-b.min)/p,z=-Math.floor(Math.log(o)/Math.LN10),t=e.tickDecimals;null!=t&&z>t&&(z=t);var c,O=Math.pow(10,-z),i=o/O;i<1.5?c=1:i<3?(c=2,i>2.25&&(null==t||z+1<=t)&&(c=2.5,++z)):c=i<7.5?5:10;c*=O,null!=e.minTickSize&&c<e.minTickSize&&(c=e.minTickSize);if(b.delta=o,b.tickDecimals=Math.max(0,null!=t?t:z),b.tickSize=e.tickSize||c,"time"==e.mode&&!b.tickGenerator)throw new Error("Time mode requires the flot.time plugin.");b.tickGenerator||(b.tickGenerator=function(M){var b,p,e,o=[],z=(p=M.min,(e=M.tickSize)*Math.floor(p/e)),t=0,c=Number.NaN;do{b=c,c=z+t*M.tickSize,o.push(c),++t}while(c<M.max&&c!=b);return o},b.tickFormatter=function(M,b){var p=b.tickDecimals?Math.pow(10,b.tickDecimals):1,e=""+Math.round(M*p)/p;if(null!=b.tickDecimals){var o=e.indexOf("."),z=-1==o?0:e.length-o-1;if(z<b.tickDecimals)return(z?e:e+".")+(""+p).substr(1,b.tickDecimals-z)}return e});M.isFunction(e.tickFormatter)&&(b.tickFormatter=function(M,b){return""+e.tickFormatter(M,b)});if(null!=e.alignTicksWithAxis){var r=("x"==b.direction?s:A)[e.alignTicksWithAxis-1];if(r&&r.used&&r!=b){var a=b.tickGenerator(b);if(a.length>0&&(null==e.min&&(b.min=Math.min(b.min,a[0])),null==e.max&&a.length>1&&(b.max=Math.max(b.max,a[a.length-1]))),b.tickGenerator=function(M){var b,p,e=[];for(p=0;p<r.ticks.length;++p)b=(r.ticks[p].v-r.min)/(r.max-r.min),b=M.min+b*(M.max-M.min),e.push(b);return e},!b.mode&&null==e.tickDecimals){var d=Math.max(0,1-Math.floor(Math.log(b.delta)/Math.LN10)),l=b.tickGenerator(b);l.length>1&&/\..*0$/.test((l[1]-l[0]).toFixed(d))||(b.tickDecimals=d)}}}}(p),function(b){var p,e,o=b.options.ticks,z=[];null==o||"number"==typeof o&&o>0?z=b.tickGenerator(b):o&&(z=M.isFunction(o)?o(b):o);for(b.ticks=[],p=0;p<z.length;++p){var t=null,c=z[p];"object"==typeof c?(e=+c[0],c.length>1&&(t=c[1])):e=+c,null==t&&(t=b.tickFormatter(e,b)),isNaN(e)||b.ticks.push({v:e,label:t})}}(p),function(M,b){M.options.autoscaleMargin&&b.length>0&&(null==M.options.min&&(M.min=Math.min(M.min,b[0].v)),null==M.options.max&&b.length>1&&(M.max=Math.max(M.max,b[b.length-1].v)))}(p,p.ticks),function(M){for(var b=M.options,p=M.ticks||[],e=b.labelWidth||0,o=b.labelHeight||0,z=e||"x"==M.direction?Math.floor(n.width/(p.length||1)):null,t=M.direction+"Axis "+M.direction+M.n+"Axis",c="flot-"+M.direction+"-axis flot-"+M.direction+M.n+"-axis "+t,O=b.font||"flot-tick-label tickLabel",i=0;i<p.length;++i){var r=p[i];if(r.label){var a=n.getTextInfo(c,r.label,O,null,z);e=Math.max(e,a.width),o=Math.max(o,a.height)}}M.labelWidth=b.labelWidth||e,M.labelHeight=b.labelHeight||o}(p)}),p=i.length-1;p>=0;--p)v(i[p]);!function(){var b,p=c.grid.minBorderMargin,e={x:0,y:0};if(null==p)for(p=0,b=0;b<t.length;++b)p=Math.max(p,2*(t[b].points.radius+t[b].points.lineWidth/2));e.x=e.y=Math.ceil(p),M.each(m(),function(M,b){var p=b.direction;b.reserveSpace&&(e[p]=Math.ceil(Math.max(e[p],("x"==p?b.labelWidth:b.labelHeight)/2)))}),d.left=Math.max(e.x,d.left),d.right=Math.max(e.x,d.right),d.top=Math.max(e.y,d.top),d.bottom=Math.max(e.y,d.bottom)}(),M.each(i,function(M,b){!function(M){"x"==M.direction?(M.box.left=d.left-M.labelWidth/2,M.box.width=n.width-d.left-d.right+M.labelWidth):(M.box.top=d.top-M.labelHeight/2,M.box.height=n.height-d.bottom-d.top+M.labelHeight)}(b)})}l=n.width-d.left-d.right,q=n.height-d.bottom-d.top,M.each(e,function(M,b){!function(M){function b(M){return M}var p,e,o=M.options.transform||b,z=M.options.inverseTransform;"x"==M.direction?(p=M.scale=l/Math.abs(o(M.max)-o(M.min)),e=Math.min(o(M.max),o(M.min))):(p=-(p=M.scale=q/Math.abs(o(M.max)-o(M.min))),e=Math.max(o(M.max),o(M.min))),M.p2c=o==b?function(M){return(M-e)*p}:function(M){return(o(M)-e)*p},M.c2p=z?function(M){return z(e+M/p)}:function(M){return e+M/p}}(b)}),o&&M.each(m(),function(M,b){if(b.show&&0!=b.ticks.length){var p,e,o,z,t,c=b.box,O=b.direction+"Axis "+b.direction+b.n+"Axis",i="flot-"+b.direction+"-axis flot-"+b.direction+b.n+"-axis "+O,r=b.options.font||"flot-tick-label tickLabel";n.removeText(i);for(var a=0;a<b.ticks.length;++a)!(p=b.ticks[a]).label||p.v<b.min||p.v>b.max||("x"==b.direction?(z="center",e=d.left+b.p2c(p.v),"bottom"==b.position?o=c.top+c.padding:(o=c.top+c.height-c.padding,t="bottom")):(t="middle",o=d.top+b.p2c(p.v),"left"==b.position?(e=c.left+c.width-c.padding,z="right"):e=c.left+c.padding),n.addText(i,e,o,p.label,r,null,null,z,t))}}),function(){if(b.find(".legend").remove(),!c.legend.show)return;for(var p,e,o=[],z=[],n=!1,O=c.legend.labelFormatter,i=0;i<t.length;++i)(p=t[i]).label&&(e=O?O(p.label,p):p.label)&&z.push({label:e,color:p.color});if(c.legend.sorted)if(M.isFunction(c.legend.sorted))z.sort(c.legend.sorted);else if("reverse"==c.legend.sorted)z.reverse();else{var r="descending"!=c.legend.sorted;z.sort(function(M,b){return M.label==b.label?0:M.label<b.label!=r?1:-1})}for(i=0;i<z.length;++i){var a=z[i];i%c.legend.noColumns==0&&(n&&o.push("</tr>"),o.push("<tr>"),n=!0),o.push('<td class="legendColorBox"><div style="border:1px solid '+c.legend.labelBoxBorderColor+';padding:1px"><div style="width:4px;height:0;border:5px solid '+a.color+';overflow:hidden"></div></div></td><td class="legendLabel">'+a.label+"</td>")}n&&o.push("</tr>");if(0==o.length)return;var s='<table style="font-size:smaller;color:'+c.grid.color+'">'+o.join("")+"</table>";if(null!=c.legend.container)M(c.legend.container).html(s);else{var A="",l=c.legend.position,q=c.legend.margin;null==q[0]&&(q=[q,q]),"n"==l.charAt(0)?A+="top:"+(q[1]+d.top)+"px;":"s"==l.charAt(0)&&(A+="bottom:"+(q[1]+d.bottom)+"px;"),"e"==l.charAt(1)?A+="right:"+(q[0]+d.right)+"px;":"w"==l.charAt(1)&&(A+="left:"+(q[0]+d.left)+"px;");var u=M('<div class="legend">'+s.replace('style="','style="position:absolute;'+A+";")+"</div>").appendTo(b);if(0!=c.legend.backgroundOpacity){var f=c.legend.backgroundColor;null==f&&((f=(f=c.grid.backgroundColor)&&"string"==typeof f?M.color.parse(f):M.color.extract(u,"background-color")).a=1,f=f.toString());var W=u.children();M('<div style="position:absolute;width:'+W.width()+"px;height:"+W.height()+"px;"+A+"background-color:"+f+';"> </div>').prependTo(u).css("opacity",c.legend.backgroundOpacity)}}}()}function y(){n.clear(),W(u.drawBackground,[r]);var M=c.grid;M.show&&M.backgroundColor&&(r.save(),r.translate(d.left,d.top),r.fillStyle=G(c.grid.backgroundColor,q,0,"rgba(255, 255, 255, 0)"),r.fillRect(0,0,l,q),r.restore()),M.show&&!M.aboveData&&X();for(var b=0;b<t.length;++b)W(u.drawSeries,[r,t[b]]),w(t[b]);W(u.draw,[r]),M.show&&M.aboveData&&X(),n.render(),P()}function B(M,b){for(var p,e,o,z,t=m(),c=0;c<t.length;++c)if((p=t[c]).direction==b&&(M[z=b+p.n+"axis"]||1!=p.n||(z=b+"axis"),M[z])){e=M[z].from,o=M[z].to;break}if(M[z]||(p="x"==b?s[0]:A[0],e=M[b+"1"],o=M[b+"2"]),null!=e&&null!=o&&e>o){var n=e;e=o,o=n}return{from:e,to:o,axis:p}}function X(){var b,p,e,o;r.save(),r.translate(d.left,d.top);var z=c.grid.markings;if(z)for(M.isFunction(z)&&((p=f.getAxes()).xmin=p.xaxis.min,p.xmax=p.xaxis.max,p.ymin=p.yaxis.min,p.ymax=p.yaxis.max,z=z(p)),b=0;b<z.length;++b){var t=z[b],n=B(t,"x"),O=B(t,"y");null==n.from&&(n.from=n.axis.min),null==n.to&&(n.to=n.axis.max),null==O.from&&(O.from=O.axis.min),null==O.to&&(O.to=O.axis.max),n.to<n.axis.min||n.from>n.axis.max||O.to<O.axis.min||O.from>O.axis.max||(n.from=Math.max(n.from,n.axis.min),n.to=Math.min(n.to,n.axis.max),O.from=Math.max(O.from,O.axis.min),O.to=Math.min(O.to,O.axis.max),n.from==n.to&&O.from==O.to||(n.from=n.axis.p2c(n.from),n.to=n.axis.p2c(n.to),O.from=O.axis.p2c(O.from),O.to=O.axis.p2c(O.to),n.from==n.to||O.from==O.to?(r.beginPath(),r.strokeStyle=t.color||c.grid.markingsColor,r.lineWidth=t.lineWidth||c.grid.markingsLineWidth,r.moveTo(n.from,O.from),r.lineTo(n.to,O.to),r.stroke()):(r.fillStyle=t.color||c.grid.markingsColor,r.fillRect(n.from,O.to,n.to-n.from,O.from-O.to))))}p=m(),e=c.grid.borderWidth;for(var i=0;i<p.length;++i){var a,s,A,u,W=p[i],h=W.box,R=W.tickLength;if(W.show&&0!=W.ticks.length){for(r.lineWidth=1,"x"==W.direction?(a=0,s="full"==R?"top"==W.position?0:q:h.top-d.top+("top"==W.position?h.height:0)):(s=0,a="full"==R?"left"==W.position?0:l:h.left-d.left+("left"==W.position?h.width:0)),W.innermost||(r.strokeStyle=W.options.color,r.beginPath(),A=u=0,"x"==W.direction?A=l+1:u=q+1,1==r.lineWidth&&("x"==W.direction?s=Math.floor(s)+.5:a=Math.floor(a)+.5),r.moveTo(a,s),r.lineTo(a+A,s+u),r.stroke()),r.strokeStyle=W.options.tickColor,r.beginPath(),b=0;b<W.ticks.length;++b){var g=W.ticks[b].v;A=u=0,isNaN(g)||g<W.min||g>W.max||"full"==R&&("object"==typeof e&&e[W.position]>0||e>0)&&(g==W.min||g==W.max)||("x"==W.direction?(a=W.p2c(g),u="full"==R?-q:R,"top"==W.position&&(u=-u)):(s=W.p2c(g),A="full"==R?-l:R,"left"==W.position&&(A=-A)),1==r.lineWidth&&("x"==W.direction?a=Math.floor(a)+.5:s=Math.floor(s)+.5),r.moveTo(a,s),r.lineTo(a+A,s+u))}r.stroke()}}e&&(o=c.grid.borderColor,"object"==typeof e||"object"==typeof o?("object"!=typeof e&&(e={top:e,right:e,bottom:e,left:e}),"object"!=typeof o&&(o={top:o,right:o,bottom:o,left:o}),e.top>0&&(r.strokeStyle=o.top,r.lineWidth=e.top,r.beginPath(),r.moveTo(0-e.left,0-e.top/2),r.lineTo(l,0-e.top/2),r.stroke()),e.right>0&&(r.strokeStyle=o.right,r.lineWidth=e.right,r.beginPath(),r.moveTo(l+e.right/2,0-e.top),r.lineTo(l+e.right/2,q),r.stroke()),e.bottom>0&&(r.strokeStyle=o.bottom,r.lineWidth=e.bottom,r.beginPath(),r.moveTo(l+e.right,q+e.bottom/2),r.lineTo(0,q+e.bottom/2),r.stroke()),e.left>0&&(r.strokeStyle=o.left,r.lineWidth=e.left,r.beginPath(),r.moveTo(0-e.left/2,q+e.bottom),r.lineTo(0-e.left/2,0),r.stroke())):(r.lineWidth=e,r.strokeStyle=c.grid.borderColor,r.strokeRect(-e/2,-e/2,l+e,q+e))),r.restore()}function w(M){M.lines.show&&function(M){function b(M,b,p,e,o){var z=M.points,t=M.pointsize,c=null,n=null;r.beginPath();for(var O=t;O<z.length;O+=t){var i=z[O-t],a=z[O-t+1],s=z[O],A=z[O+1];if(null!=i&&null!=s){if(a<=A&&a<o.min){if(A<o.min)continue;i=(o.min-a)/(A-a)*(s-i)+i,a=o.min}else if(A<=a&&A<o.min){if(a<o.min)continue;s=(o.min-a)/(A-a)*(s-i)+i,A=o.min}if(a>=A&&a>o.max){if(A>o.max)continue;i=(o.max-a)/(A-a)*(s-i)+i,a=o.max}else if(A>=a&&A>o.max){if(a>o.max)continue;s=(o.max-a)/(A-a)*(s-i)+i,A=o.max}if(i<=s&&i<e.min){if(s<e.min)continue;a=(e.min-i)/(s-i)*(A-a)+a,i=e.min}else if(s<=i&&s<e.min){if(i<e.min)continue;A=(e.min-i)/(s-i)*(A-a)+a,s=e.min}if(i>=s&&i>e.max){if(s>e.max)continue;a=(e.max-i)/(s-i)*(A-a)+a,i=e.max}else if(s>=i&&s>e.max){if(i>e.max)continue;A=(e.max-i)/(s-i)*(A-a)+a,s=e.max}i==c&&a==n||r.moveTo(e.p2c(i)+b,o.p2c(a)+p),c=s,n=A,r.lineTo(e.p2c(s)+b,o.p2c(A)+p)}}r.stroke()}function p(M,b,p){for(var e=M.points,o=M.pointsize,z=Math.min(Math.max(0,p.min),p.max),t=0,c=!1,n=1,O=0,i=0;!(o>0&&t>e.length+o);){var a=e[(t+=o)-o],s=e[t-o+n],A=e[t],d=e[t+n];if(c){if(o>0&&null!=a&&null==A){i=t,o=-o,n=2;continue}if(o<0&&t==O+o){r.fill(),c=!1,n=1,t=O=i+(o=-o);continue}}if(null!=a&&null!=A){if(a<=A&&a<b.min){if(A<b.min)continue;s=(b.min-a)/(A-a)*(d-s)+s,a=b.min}else if(A<=a&&A<b.min){if(a<b.min)continue;d=(b.min-a)/(A-a)*(d-s)+s,A=b.min}if(a>=A&&a>b.max){if(A>b.max)continue;s=(b.max-a)/(A-a)*(d-s)+s,a=b.max}else if(A>=a&&A>b.max){if(a>b.max)continue;d=(b.max-a)/(A-a)*(d-s)+s,A=b.max}if(c||(r.beginPath(),r.moveTo(b.p2c(a),p.p2c(z)),c=!0),s>=p.max&&d>=p.max)r.lineTo(b.p2c(a),p.p2c(p.max)),r.lineTo(b.p2c(A),p.p2c(p.max));else if(s<=p.min&&d<=p.min)r.lineTo(b.p2c(a),p.p2c(p.min)),r.lineTo(b.p2c(A),p.p2c(p.min));else{var l=a,q=A;s<=d&&s<p.min&&d>=p.min?(a=(p.min-s)/(d-s)*(A-a)+a,s=p.min):d<=s&&d<p.min&&s>=p.min&&(A=(p.min-s)/(d-s)*(A-a)+a,d=p.min),s>=d&&s>p.max&&d<=p.max?(a=(p.max-s)/(d-s)*(A-a)+a,s=p.max):d>=s&&d>p.max&&s<=p.max&&(A=(p.max-s)/(d-s)*(A-a)+a,d=p.max),a!=l&&r.lineTo(b.p2c(l),p.p2c(s)),r.lineTo(b.p2c(a),p.p2c(s)),r.lineTo(b.p2c(A),p.p2c(d)),A!=q&&(r.lineTo(b.p2c(A),p.p2c(d)),r.lineTo(b.p2c(q),p.p2c(d)))}}}}r.save(),r.translate(d.left,d.top),r.lineJoin="round";var e=M.lines.lineWidth,o=M.shadowSize;if(e>0&&o>0){r.lineWidth=o,r.strokeStyle="rgba(0,0,0,0.1)";var z=Math.PI/18;b(M.datapoints,Math.sin(z)*(e/2+o/2),Math.cos(z)*(e/2+o/2),M.xaxis,M.yaxis),r.lineWidth=o/2,b(M.datapoints,Math.sin(z)*(e/2+o/4),Math.cos(z)*(e/2+o/4),M.xaxis,M.yaxis)}r.lineWidth=e,r.strokeStyle=M.color;var t=T(M.lines,M.color,0,q);t&&(r.fillStyle=t,p(M.datapoints,M.xaxis,M.yaxis));e>0&&b(M.datapoints,0,0,M.xaxis,M.yaxis);r.restore()}(M),M.bars.show&&function(M){function b(b,p,e,o,z,t,c){for(var n=b.points,O=b.pointsize,i=0;i<n.length;i+=O)null!=n[i]&&x(n[i],n[i+1],n[i+2],p,e,o,z,t,c,r,M.bars.horizontal,M.bars.lineWidth)}var p;switch(r.save(),r.translate(d.left,d.top),r.lineWidth=M.bars.lineWidth,r.strokeStyle=M.color,M.bars.align){case"left":p=0;break;case"right":p=-M.bars.barWidth;break;case"center":p=-M.bars.barWidth/2;break;default:throw new Error("Invalid bar alignment: "+M.bars.align)}var e=M.bars.fill?function(b,p){return T(M.bars,M.color,b,p)}:null;b(M.datapoints,p,p+M.bars.barWidth,0,e,M.xaxis,M.yaxis),r.restore()}(M),M.points.show&&function(M){function b(M,b,p,e,o,z,t,c){for(var n=M.points,O=M.pointsize,i=0;i<n.length;i+=O){var a=n[i],s=n[i+1];null==a||a<z.min||a>z.max||s<t.min||s>t.max||(r.beginPath(),a=z.p2c(a),s=t.p2c(s)+e,"circle"==c?r.arc(a,s,b,0,o?Math.PI:2*Math.PI,!1):c(r,a,s,b,o),r.closePath(),p&&(r.fillStyle=p,r.fill()),r.stroke())}}r.save(),r.translate(d.left,d.top);var p=M.points.lineWidth,e=M.shadowSize,o=M.points.radius,z=M.points.symbol;0==p&&(p=1e-4);if(p>0&&e>0){var t=e/2;r.lineWidth=t,r.strokeStyle="rgba(0,0,0,0.1)",b(M.datapoints,o,null,t+t/2,!0,M.xaxis,M.yaxis,z),r.strokeStyle="rgba(0,0,0,0.2)",b(M.datapoints,o,null,t/2,!0,M.xaxis,M.yaxis,z)}r.lineWidth=p,r.strokeStyle=M.color,b(M.datapoints,o,T(M.points,M.color),0,!1,M.xaxis,M.yaxis,z),r.restore()}(M)}function x(M,b,p,e,o,z,t,c,n,O,i,r){var a,s,A,d,l,q,u,f,W;i?(f=q=u=!0,l=!1,d=b+e,A=b+o,(s=M)<(a=p)&&(W=s,s=a,a=W,l=!0,q=!1)):(l=q=u=!0,f=!1,a=M+e,s=M+o,(d=b)<(A=p)&&(W=d,d=A,A=W,f=!0,u=!1)),s<c.min||a>c.max||d<n.min||A>n.max||(a<c.min&&(a=c.min,l=!1),s>c.max&&(s=c.max,q=!1),A<n.min&&(A=n.min,f=!1),d>n.max&&(d=n.max,u=!1),a=c.p2c(a),A=n.p2c(A),s=c.p2c(s),d=n.p2c(d),t&&(O.beginPath(),O.moveTo(a,A),O.lineTo(a,d),O.lineTo(s,d),O.lineTo(s,A),O.fillStyle=t(A,d),O.fill()),r>0&&(l||q||u||f)&&(O.beginPath(),O.moveTo(a,A+z),l?O.lineTo(a,d+z):O.moveTo(a,d+z),u?O.lineTo(s,d+z):O.moveTo(s,d+z),q?O.lineTo(s,A+z):O.moveTo(s,A+z),f?O.lineTo(a,A+z):O.moveTo(a,A+z),O.stroke()))}function T(b,p,e,o){var z=b.fill;if(!z)return null;if(b.fillColor)return G(b.fillColor,e,o,p);var t=M.color.parse(p);return t.a="number"==typeof z?z:.4,t.normalize(),t.toString()}f.setData=h,f.setupGrid=N,f.draw=y,f.getPlaceholder=function(){return b},f.getCanvas=function(){return n.element},f.getPlotOffset=function(){return d},f.width=function(){return l},f.height=function(){return q},f.offset=function(){var M=i.offset();return M.left+=d.left,M.top+=d.top,M},f.getData=function(){return t},f.getAxes=function(){var b={};return M.each(s.concat(A),function(M,p){p&&(b[p.direction+(1!=p.n?p.n:"")+"axis"]=p)}),b},f.getXAxes=function(){return s},f.getYAxes=function(){return A},f.c2p=g,f.p2c=function(M){var b,p,e,o={};for(b=0;b<s.length;++b)if((p=s[b])&&p.used&&(null==M[e="x"+p.n]&&1==p.n&&(e="x"),null!=M[e])){o.left=p.p2c(M[e]);break}for(b=0;b<A.length;++b)if((p=A[b])&&p.used&&(null==M[e="y"+p.n]&&1==p.n&&(e="y"),null!=M[e])){o.top=p.p2c(M[e]);break}return o},f.getOptions=function(){return c},f.highlight=F,f.unhighlight=j,f.triggerRedrawOverlay=P,f.pointOffset=function(M){return{left:parseInt(s[R(M,"x")-1].p2c(+M.x)+d.left,10),top:parseInt(A[R(M,"y")-1].p2c(+M.y)+d.top,10)}},f.shutdown=function(){k&&clearTimeout(k);i.unbind("mousemove",S),i.unbind("mouseleave",C),i.unbind("click",E),W(u.shutdown,[i])},f.resize=function(){var M=b.width(),p=b.height();n.resize(M,p),O.resize(M,p)},f.hooks=u,function(){for(var b={Canvas:p},e=0;e<z.length;++e){var o=z[e];o.init(f,b),o.options&&M.extend(!0,c,o.options)}}(),function(p){M.extend(!0,c,p),p&&p.colors&&(c.colors=p.colors);null==c.xaxis.color&&(c.xaxis.color=M.color.parse(c.grid.color).scale("a",.22).toString());null==c.yaxis.color&&(c.yaxis.color=M.color.parse(c.grid.color).scale("a",.22).toString());null==c.xaxis.tickColor&&(c.xaxis.tickColor=c.grid.tickColor||c.xaxis.color);null==c.yaxis.tickColor&&(c.yaxis.tickColor=c.grid.tickColor||c.yaxis.color);null==c.grid.borderColor&&(c.grid.borderColor=c.grid.color);null==c.grid.tickColor&&(c.grid.tickColor=M.color.parse(c.grid.color).scale("a",.22).toString());var e,o,z,t={style:b.css("font-style"),size:Math.round(.8*(+b.css("font-size").replace("px","")||13)),variant:b.css("font-variant"),weight:b.css("font-weight"),family:b.css("font-family")};for(t.lineHeight=1.15*t.size,z=c.xaxes.length||1,e=0;e<z;++e)(o=c.xaxes[e])&&!o.tickColor&&(o.tickColor=o.color),o=M.extend(!0,{},c.xaxis,o),c.xaxes[e]=o,o.font&&(o.font=M.extend({},t,o.font),o.font.color||(o.font.color=o.color));for(z=c.yaxes.length||1,e=0;e<z;++e)(o=c.yaxes[e])&&!o.tickColor&&(o.tickColor=o.color),o=M.extend(!0,{},c.yaxis,o),c.yaxes[e]=o,o.font&&(o.font=M.extend({},t,o.font),o.font.color||(o.font.color=o.color));c.xaxis.noTicks&&null==c.xaxis.ticks&&(c.xaxis.ticks=c.xaxis.noTicks);c.yaxis.noTicks&&null==c.yaxis.ticks&&(c.yaxis.ticks=c.yaxis.noTicks);c.x2axis&&(c.xaxes[1]=M.extend(!0,{},c.xaxis,c.x2axis),c.xaxes[1].position="top");c.y2axis&&(c.yaxes[1]=M.extend(!0,{},c.yaxis,c.y2axis),c.yaxes[1].position="right");c.grid.coloredAreas&&(c.grid.markings=c.grid.coloredAreas);c.grid.coloredAreasColor&&(c.grid.markingsColor=c.grid.coloredAreasColor);c.lines&&M.extend(!0,c.series.lines,c.lines);c.points&&M.extend(!0,c.series.points,c.points);c.bars&&M.extend(!0,c.series.bars,c.bars);null!=c.shadowSize&&(c.series.shadowSize=c.shadowSize);null!=c.highlightColor&&(c.series.highlightColor=c.highlightColor);for(e=0;e<c.xaxes.length;++e)L(s,e+1).options=c.xaxes[e];for(e=0;e<c.yaxes.length;++e)L(A,e+1).options=c.yaxes[e];for(var n in u)c.hooks[n]&&c.hooks[n].length&&(u[n]=u[n].concat(c.hooks[n]));W(u.processOptions,[c])}(o),function(){b.css("padding",0).children(":not(.flot-base,.flot-overlay)").remove(),"static"==b.css("position")&&b.css("position","relative");n=new p("flot-base",b),O=new p("flot-overlay",b),r=n.context,a=O.context,i=M(O.element).unbind();var e=b.data("plot");e&&(e.shutdown(),O.clear());b.data("plot",f)}(),h(e),N(),y(),function(){c.grid.hoverable&&(i.mousemove(S),i.bind("mouseleave",C));c.grid.clickable&&i.click(E);W(u.bindEvents,[i])}();var _=[],k=null;function S(M){c.grid.hoverable&&D("plothover",M,function(M){return 0!=M.hoverable})}function C(M){c.grid.hoverable&&D("plothover",M,function(M){return!1})}function E(M){D("plotclick",M,function(M){return 0!=M.clickable})}function D(M,p,e){var o=i.offset(),z=p.pageX-o.left-d.left,n=p.pageY-o.top-d.top,O=g({left:z,top:n});O.pageX=p.pageX,O.pageY=p.pageY;var r=function(M,b,p){var e,o,z,n=c.grid.mouseActiveRadius,O=n*n+1,i=null;for(e=t.length-1;e>=0;--e)if(p(t[e])){var r=t[e],a=r.xaxis,s=r.yaxis,A=r.datapoints.points,d=a.c2p(M),l=s.c2p(b),q=n/a.scale,u=n/s.scale;if(z=r.datapoints.pointsize,a.options.inverseTransform&&(q=Number.MAX_VALUE),s.options.inverseTransform&&(u=Number.MAX_VALUE),r.lines.show||r.points.show)for(o=0;o<A.length;o+=z){var f=A[o],W=A[o+1];if(null!=f&&!(f-d>q||f-d<-q||W-l>u||W-l<-u)){var h=Math.abs(a.p2c(f)-M),R=Math.abs(s.p2c(W)-b),m=h*h+R*R;m<O&&(O=m,i=[e,o/z])}}if(r.bars.show&&!i){var g="left"==r.bars.align?0:-r.bars.barWidth/2,L=g+r.bars.barWidth;for(o=0;o<A.length;o+=z){f=A[o],W=A[o+1];var v=A[o+2];null!=f&&(t[e].bars.horizontal?d<=Math.max(v,f)&&d>=Math.min(v,f)&&l>=W+g&&l<=W+L:d>=f+g&&d<=f+L&&l>=Math.min(v,W)&&l<=Math.max(v,W))&&(i=[e,o/z])}}}return i?(e=i[0],o=i[1],z=t[e].datapoints.pointsize,{datapoint:t[e].datapoints.points.slice(o*z,(o+1)*z),dataIndex:o,series:t[e],seriesIndex:e}):null}(z,n,e);if(r&&(r.pageX=parseInt(r.series.xaxis.p2c(r.datapoint[0])+o.left+d.left,10),r.pageY=parseInt(r.series.yaxis.p2c(r.datapoint[1])+o.top+d.top,10)),c.grid.autoHighlight){for(var a=0;a<_.length;++a){var s=_[a];s.auto!=M||r&&s.series==r.series&&s.point[0]==r.datapoint[0]&&s.point[1]==r.datapoint[1]||j(s.series,s.point)}r&&F(r.series,r.datapoint,M)}b.trigger(M,[O,r])}function P(){var M=c.interaction.redrawOverlayInterval;-1!=M?k||(k=setTimeout(I,M)):I()}function I(){var M,b;for(k=null,a.save(),O.clear(),a.translate(d.left,d.top),M=0;M<_.length;++M)(b=_[M]).series.bars.show?Y(b.series,b.point):U(b.series,b.point);a.restore(),W(u.drawOverlay,[a])}function F(M,b,p){if("number"==typeof M&&(M=t[M]),"number"==typeof b){var e=M.datapoints.pointsize;b=M.datapoints.points.slice(e*b,e*(b+1))}var o=H(M,b);-1==o?(_.push({series:M,point:b,auto:p}),P()):p||(_[o].auto=!1)}function j(M,b){if(null==M&&null==b)return _=[],void P();if("number"==typeof M&&(M=t[M]),"number"==typeof b){var p=M.datapoints.pointsize;b=M.datapoints.points.slice(p*b,p*(b+1))}var e=H(M,b);-1!=e&&(_.splice(e,1),P())}function H(M,b){for(var p=0;p<_.length;++p){var e=_[p];if(e.series==M&&e.point[0]==b[0]&&e.point[1]==b[1])return p}return-1}function U(b,p){var e=p[0],o=p[1],z=b.xaxis,t=b.yaxis,c="string"==typeof b.highlightColor?b.highlightColor:M.color.parse(b.color).scale("a",.5).toString();if(!(e<z.min||e>z.max||o<t.min||o>t.max)){var n=b.points.radius+b.points.lineWidth/2;a.lineWidth=n,a.strokeStyle=c;var O=1.5*n;e=z.p2c(e),o=t.p2c(o),a.beginPath(),"circle"==b.points.symbol?a.arc(e,o,O,0,2*Math.PI,!1):b.points.symbol(a,e,o,O,!1),a.closePath(),a.stroke()}}function Y(b,p){var e="string"==typeof b.highlightColor?b.highlightColor:M.color.parse(b.color).scale("a",.5).toString(),o=e,z="left"==b.bars.align?0:-b.bars.barWidth/2;a.lineWidth=b.bars.lineWidth,a.strokeStyle=e,x(p[0],p[1],p[2]||0,z,z+b.bars.barWidth,0,function(){return o},b.xaxis,b.yaxis,a,b.bars.horizontal,b.bars.lineWidth)}function G(b,p,e,o){if("string"==typeof b)return b;for(var z=r.createLinearGradient(0,e,0,p),t=0,c=b.colors.length;t<c;++t){var n=b.colors[t];if("string"!=typeof n){var O=M.color.parse(o);null!=n.brightness&&(O=O.scale("rgb",n.brightness)),null!=n.opacity&&(O.a*=n.opacity),n=O.toString()}z.addColorStop(t/(c-1),n)}return z}}p.prototype.resize=function(M,b){if(M<=0||b<=0)throw new Error("Invalid dimensions for plot, width = "+M+", height = "+b);var p=this.element,e=this.context,o=this.pixelRatio;this.width!=M&&(p.width=M*o,p.style.width=M+"px",this.width=M),this.height!=b&&(p.height=b*o,p.style.height=b+"px",this.height=b),e.restore(),e.save(),e.scale(o,o)},p.prototype.clear=function(){this.context.clearRect(0,0,this.width,this.height)},p.prototype.render=function(){var M=this._textCache;for(var p in M)if(b.call(M,p)){var e=this.getTextLayer(p),o=M[p];for(var z in e.hide(),o)if(b.call(o,z)){var t=o[z];for(var c in t)if(b.call(t,c)){for(var n,O=t[c].positions,i=0;n=O[i];i++)n.active?n.rendered||(e.append(n.element),n.rendered=!0):(O.splice(i--,1),n.rendered&&n.element.detach());0==O.length&&delete t[c]}}e.show()}},p.prototype.getTextLayer=function(b){var p=this.text[b];return null==p&&(null==this.textContainer&&(this.textContainer=M("<div class='flot-text'></div>").css({position:"absolute",top:0,left:0,bottom:0,right:0,"font-size":"smaller",color:"#545454"}).insertAfter(this.element)),p=this.text[b]=M("<div></div>").addClass(b).css({position:"absolute",top:0,left:0,bottom:0,right:0}).appendTo(this.textContainer)),p},p.prototype.getTextInfo=function(b,p,e,o,z){var t,c,n,O;if(p=""+p,t="object"==typeof e?e.style+" "+e.variant+" "+e.weight+" "+e.size+"px/"+e.lineHeight+"px "+e.family:e,null==(c=this._textCache[b])&&(c=this._textCache[b]={}),null==(n=c[t])&&(n=c[t]={}),null==(O=n[p])){var i=M("<div></div>").html(p).css({position:"absolute","max-width":z,top:-9999}).appendTo(this.getTextLayer(b));"object"==typeof e?i.css({font:t,color:e.color}):"string"==typeof e&&i.addClass(e),O=n[p]={width:i.outerWidth(!0),height:i.outerHeight(!0),element:i,positions:[]},i.detach()}return O},p.prototype.addText=function(M,b,p,e,o,z,t,c,n){var O=this.getTextInfo(M,e,o,z,t),i=O.positions;"center"==c?b-=O.width/2:"right"==c&&(b-=O.width),"middle"==n?p-=O.height/2:"bottom"==n&&(p-=O.height);for(var r,a=0;r=i[a];a++)if(r.x==b&&r.y==p)return void(r.active=!0);r={active:!0,rendered:!1,element:i.length?O.element.clone():O.element,x:b,y:p},i.push(r),r.element.css({top:Math.round(p),left:Math.round(b),"text-align":c})},p.prototype.removeText=function(M,p,e,o,z,t){if(null==o){var c=this._textCache[M];if(null!=c)for(var n in c)if(b.call(c,n)){var O=c[n];for(var i in O)if(b.call(O,i))for(var r=O[i].positions,a=0;s=r[a];a++)s.active=!1}}else{var s;for(r=this.getTextInfo(M,o,z,t).positions,a=0;s=r[a];a++)s.x==p&&s.y==e&&(s.active=!1)}},M.plot=function(b,p,o){return new e(M(b),p,o,M.plot.plugins)},M.plot.version="0.8.2-alpha",M.plot.plugins=[],M.fn.plot=function(b,p){return this.each(function(){M.plot(this,b,p)})}}(jQuery),function(M){var b=function(M){this.tipPosition={x:0,y:0},this.init(M)};b.prototype.init=function(b){var p=this;b.hooks.bindEvents.push(function(b,e){if(p.plotOptions=b.getOptions(),!1!==p.plotOptions.tooltip&&void 0!==p.plotOptions.tooltip){p.tooltipOptions=p.plotOptions.tooltipOpts;var o=p.getDomElement();M(b.getPlaceholder()).bind("plothover",function(M,b,e){var z;e?(z=p.stringFormat(p.tooltipOptions.content,e),o.html(z),p.updateTooltipPosition({x:b.pageX,y:b.pageY}),o.css({left:p.tipPosition.x+p.tooltipOptions.shifts.x,top:p.tipPosition.y+p.tooltipOptions.shifts.y}).show(),"function"==typeof p.tooltipOptions.onHover&&p.tooltipOptions.onHover(e,o)):o.hide().html("")}),e.mousemove(function(M){var b={};b.x=M.pageX,b.y=M.pageY,p.updateTooltipPosition(b)})}})},b.prototype.getDomElement=function(){var b;return M("#flotTip").length>0?b=M("#flotTip"):((b=M("<div />").attr("id","flotTip")).appendTo("body").hide().css({position:"absolute"}),this.tooltipOptions.defaultTheme&&b.css({background:"#fff","z-index":"100",padding:"0.4em 0.6em","border-radius":"0.5em","font-size":"0.8em",border:"1px solid #111",display:"inline-block","white-space":"nowrap"})),b},b.prototype.updateTooltipPosition=function(b){var p=M("#flotTip").outerWidth()+this.tooltipOptions.shifts.x,e=M("#flotTip").outerHeight()+this.tooltipOptions.shifts.y;b.x-M(window).scrollLeft()>M(window).innerWidth()-p&&(b.x-=p),b.y-M(window).scrollTop()>M(window).innerHeight()-e&&(b.y-=e),this.tipPosition.x=b.x,this.tipPosition.y=b.y},b.prototype.stringFormat=function(M,b){var p=/%x\.{0,1}(\d{0,})/,e=/%y\.{0,1}(\d{0,})/;return"function"==typeof M&&(M=M(b.series.data[b.dataIndex][0],b.series.data[b.dataIndex][1])),void 0!==b.series.percent&&(M=this.adjustValPrecision(/%p\.{0,1}(\d{0,})/,M,b.series.percent)),void 0!==b.series.label&&(M=M.replace(/%s/,b.series.label)),this.isTimeMode("xaxis",b)&&this.isXDateFormat(b)&&(M=M.replace(p,this.timestampToDate(b.series.data[b.dataIndex][0],this.tooltipOptions.xDateFormat))),this.isTimeMode("yaxis",b)&&this.isYDateFormat(b)&&(M=M.replace(e,this.timestampToDate(b.series.data[b.dataIndex][1],this.tooltipOptions.yDateFormat))),"number"==typeof b.series.data[b.dataIndex][0]&&(M=this.adjustValPrecision(p,M,b.series.data[b.dataIndex][0])),"number"==typeof b.series.data[b.dataIndex][1]&&(M=this.adjustValPrecision(e,M,b.series.data[b.dataIndex][1])),void 0!==b.series.xaxis.tickFormatter&&(M=M.replace(p,b.series.xaxis.tickFormatter(b.series.data[b.dataIndex][0],b.series.xaxis))),void 0!==b.series.yaxis.tickFormatter&&(M=M.replace(e,b.series.yaxis.tickFormatter(b.series.data[b.dataIndex][1],b.series.yaxis))),M},b.prototype.isTimeMode=function(M,b){return void 0!==b.series[M].options.mode&&"time"===b.series[M].options.mode},b.prototype.isXDateFormat=function(M){return void 0!==this.tooltipOptions.xDateFormat&&null!==this.tooltipOptions.xDateFormat},b.prototype.isYDateFormat=function(M){return void 0!==this.tooltipOptions.yDateFormat&&null!==this.tooltipOptions.yDateFormat},b.prototype.timestampToDate=function(b,p){var e=new Date(b);return M.plot.formatDate(e,p)},b.prototype.adjustValPrecision=function(M,b,p){var e;return null!==b.match(M)&&""!==RegExp.$1&&(e=RegExp.$1,p=p.toFixed(e),b=b.replace(M,p)),b};M.plot.plugins.push({init:function(M){new b(M)},options:{tooltip:!1,tooltipOpts:{content:"%s | X: %x | Y: %y",xDateFormat:null,yDateFormat:null,shifts:{x:10,y:20},defaultTheme:!0,onHover:function(M,b){}}},name:"tooltip",version:"0.6.1"})}(jQuery),function(M){M.plot.plugins.push({init:function(b){function p(){var M=b.getPlaceholder();0!=M.width()&&0!=M.height()&&(b.resize(),b.setupGrid(),b.draw())}b.hooks.bindEvents.push(function(b,e){M(window).bind("resize",p)}),b.hooks.shutdown.push(function(b,e){M(window).unbind("resize",p)})},options:{},name:"resize",version:"1.0"})}(jQuery),function(M){function b(M,b){return b*Math.floor(M/b)}function p(M,b,p,e){if("function"==typeof M.strftime)return M.strftime(b);var o,z=function(M,b){return b=""+(null==b?"0":b),1==(M=""+M).length?b+M:M},t=[],c=!1,n=M.getHours(),O=n<12;null==p&&(p=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]),null==e&&(e=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]),o=n>12?n-12:0==n?12:n;for(var i=0;i<b.length;++i){var r=b.charAt(i);if(c){switch(r){case"a":r=""+e[M.getDay()];break;case"b":r=""+p[M.getMonth()];break;case"d":r=z(M.getDate());break;case"e":r=z(M.getDate()," ");break;case"h":case"H":r=z(n);break;case"I":r=z(o);break;case"l":r=z(o," ");break;case"m":r=z(M.getMonth()+1);break;case"M":r=z(M.getMinutes());break;case"q":r=""+(Math.floor(M.getMonth()/3)+1);break;case"S":r=z(M.getSeconds());break;case"y":r=z(M.getFullYear()%100);break;case"Y":r=""+M.getFullYear();break;case"p":r=O?"am":"pm";break;case"P":r=O?"AM":"PM";break;case"w":r=""+M.getDay()}t.push(r),c=!1}else"%"==r?c=!0:t.push(r)}return t.join("")}function e(M){function b(M,b,p,e){M[b]=function(){return p[e].apply(p,arguments)}}var p={date:M};null!=M.strftime&&b(p,"strftime",M,"strftime"),b(p,"getTime",M,"getTime"),b(p,"setTime",M,"setTime");for(var e=["Date","Day","FullYear","Hours","Milliseconds","Minutes","Month","Seconds"],o=0;o<e.length;o++)b(p,"get"+e[o],M,"getUTC"+e[o]),b(p,"set"+e[o],M,"setUTC"+e[o]);return p}function o(M,b){if("browser"==b.timezone)return new Date(M);if(b.timezone&&"utc"!=b.timezone){if("undefined"!=typeof timezoneJS&&void 0!==timezoneJS.Date){var p=new timezoneJS.Date;return p.setTimezone(b.timezone),p.setTime(M),p}return e(new Date(M))}return e(new Date(M))}var z={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,quarter:7776e6,year:525949.2*60*1e3},t=[[1,"second"],[2,"second"],[5,"second"],[10,"second"],[30,"second"],[1,"minute"],[2,"minute"],[5,"minute"],[10,"minute"],[30,"minute"],[1,"hour"],[2,"hour"],[4,"hour"],[8,"hour"],[12,"hour"],[1,"day"],[2,"day"],[3,"day"],[.25,"month"],[.5,"month"],[1,"month"],[2,"month"]],c=t.concat([[3,"month"],[6,"month"],[1,"year"]]),n=t.concat([[1,"quarter"],[2,"quarter"],[1,"year"]]);M.plot.plugins.push({init:function(e){e.hooks.processOptions.push(function(e,t){M.each(e.getAxes(),function(M,e){var t=e.options;"time"==t.mode&&(e.tickGenerator=function(M){var p=[],e=o(M.min,t),O=0,i=t.tickSize&&"quarter"===t.tickSize[1]||t.minTickSize&&"quarter"===t.minTickSize[1]?n:c;null!=t.minTickSize&&(O="number"==typeof t.tickSize?t.tickSize:t.minTickSize[0]*z[t.minTickSize[1]]);for(var r=0;r<i.length-1&&!(M.delta<(i[r][0]*z[i[r][1]]+i[r+1][0]*z[i[r+1][1]])/2&&i[r][0]*z[i[r][1]]>=O);++r);var a=i[r][0],s=i[r][1];if("year"==s){if(null!=t.minTickSize&&"year"==t.minTickSize[1])a=Math.floor(t.minTickSize[0]);else{var A=Math.pow(10,Math.floor(Math.log(M.delta/z.year)/Math.LN10)),d=M.delta/z.year/A;a=d<1.5?1:d<3?2:d<7.5?5:10,a*=A}a<1&&(a=1)}M.tickSize=t.tickSize||[a,s];var l=M.tickSize[0];s=M.tickSize[1];var q=l*z[s];"second"==s?e.setSeconds(b(e.getSeconds(),l)):"minute"==s?e.setMinutes(b(e.getMinutes(),l)):"hour"==s?e.setHours(b(e.getHours(),l)):"month"==s?e.setMonth(b(e.getMonth(),l)):"quarter"==s?e.setMonth(3*b(e.getMonth()/3,l)):"year"==s&&e.setFullYear(b(e.getFullYear(),l)),e.setMilliseconds(0),q>=z.minute&&e.setSeconds(0),q>=z.hour&&e.setMinutes(0),q>=z.day&&e.setHours(0),q>=4*z.day&&e.setDate(1),q>=2*z.month&&e.setMonth(b(e.getMonth(),3)),q>=2*z.quarter&&e.setMonth(b(e.getMonth(),6)),q>=z.year&&e.setMonth(0);var u,f=0,W=Number.NaN;do{if(u=W,W=e.getTime(),p.push(W),"month"==s||"quarter"==s)if(l<1){e.setDate(1);var h=e.getTime();e.setMonth(e.getMonth()+("quarter"==s?3:1));var R=e.getTime();e.setTime(W+f*z.hour+(R-h)*l),f=e.getHours(),e.setHours(0)}else e.setMonth(e.getMonth()+l*("quarter"==s?3:1));else"year"==s?e.setFullYear(e.getFullYear()+l):e.setTime(W+q)}while(W<M.max&&W!=u);return p},e.tickFormatter=function(M,b){var e=o(M,b.options);if(null!=t.timeformat)return p(e,t.timeformat,t.monthNames,t.dayNames);var c=b.options.tickSize&&"quarter"==b.options.tickSize[1]||b.options.minTickSize&&"quarter"==b.options.minTickSize[1],n=b.tickSize[0]*z[b.tickSize[1]],O=b.max-b.min,i=t.twelveHourClock?" %p":"",r=t.twelveHourClock?"%I":"%H";return p(e,n<z.minute?r+":%M:%S"+i:n<z.day?O<2*z.day?r+":%M"+i:"%b %d "+r+":%M"+i:n<z.month?"%b %d":c&&n<z.quarter||!c&&n<z.year?O<z.year?"%b":"%b %Y":c&&n<z.year?O<z.year?"Q%q":"Q%q %Y":"%Y",t.monthNames,t.dayNames)})})})},options:{xaxis:{timezone:null,timeformat:null,twelveHourClock:!1,monthNames:null}},name:"time",version:"1.0"}),M.plot.formatDate=p}(jQuery),function(M,b,p,e){var o={drag:!0,drop:!0,exclude:"",nested:!0,vertical:!0},z={afterMove:function(M,b,p){},containerPath:"",containerSelector:"ol, ul",distance:0,delay:0,handle:"",itemPath:"",itemSelector:"li",bodyClass:"dragging",draggedClass:"dragged",isValidTarget:function(M,b){return!0},onCancel:function(M,b,p,e){},onDrag:function(M,b,p,e){M.css(b),e.preventDefault()},onDragStart:function(b,p,e,o){b.css({height:b.outerHeight(),width:b.outerWidth()}),b.addClass(p.group.options.draggedClass),M("body").addClass(p.group.options.bodyClass)},onDrop:function(b,p,e,o){b.removeClass(p.group.options.draggedClass).removeAttr("style"),M("body").removeClass(p.group.options.bodyClass)},onMousedown:function(M,b,p){if(!p.target.nodeName.match(/^(input|select|textarea)$/i))return p.type.match(/^mouse/)&&p.preventDefault(),!0},placeholderClass:"placeholder",placeholder:'<li class="placeholder"></li>',pullPlaceholder:!0,serialize:function(b,p,e){var o=M.extend({},b.data());return e?[p]:(p[0]&&(o.children=p),delete o.subContainers,delete o.sortable,o)},tolerance:0},t={},c=0,n={left:0,top:0,bottom:0,right:0},O={start:"touchstart.sortable mousedown.sortable",drop:"touchend.sortable touchcancel.sortable mouseup.sortable",drag:"touchmove.sortable mousemove.sortable",scroll:"scroll.sortable"},i="subContainers";function r(M,b){return Math.max(0,M[0]-b[0],b[0]-M[1])+Math.max(0,M[2]-b[1],b[1]-M[3])}function a(b,p,e,o){var z=b.length,t=o?"offset":"position";for(e=e||0;z--;){var c=b[z].el?b[z].el:M(b[z]),n=c[t]();n.left+=parseInt(c.css("margin-left"),10),n.top+=parseInt(c.css("margin-top"),10),p[z]=[n.left-e,n.left+c.outerWidth()+e,n.top-e,n.top+c.outerHeight()+e]}}function s(M,b){var p=b.offset();return{left:M.left-p.left,top:M.top-p.top}}function A(M,b,p){b=[b.left,b.top],p=p&&[p.left,p.top];for(var e,o=M.length,z=[];o--;)e=M[o],z[o]=[o,r(e,b),p&&r(e,p)];return z=z.sort(function(M,b){return b[1]-M[1]||b[2]-M[2]||b[0]-M[0]})}function d(b){this.options=M.extend({},z,b),this.containers=[],this.options.rootGroup||(this.scrollProxy=M.proxy(this.scroll,this),this.dragProxy=M.proxy(this.drag,this),this.dropProxy=M.proxy(this.drop,this),this.placeholder=M(this.options.placeholder),b.isValidTarget||(this.options.isValidTarget=e))}function l(b,p){this.el=b,this.options=M.extend({},o,p),this.group=d.get(this.options),this.rootGroup=this.options.rootGroup||this.group,this.handle=this.rootGroup.options.handle||this.rootGroup.options.itemSelector;var e=this.rootGroup.options.itemPath;this.target=e?this.el.find(e):this.el,this.target.on(O.start,this.handle,M.proxy(this.dragInit,this)),this.options.drop&&this.group.containers.push(this)}d.get=function(M){return t[M.group]||(M.group===e&&(M.group=c++),t[M.group]=new d(M)),t[M.group]},d.prototype={dragInit:function(b,p){this.$document=M(p.el[0].ownerDocument);var e=M(b.target).closest(this.options.itemSelector);if(e.length){if(this.item=e,this.itemContainer=p,this.item.is(this.options.exclude)||!this.options.onMousedown(this.item,z.onMousedown,b))return;this.setPointer(b),this.toggleListeners("on"),this.setupDelayTimer(),this.dragInitDone=!0}},drag:function(M){if(!this.dragging){if(!this.distanceMet(M)||!this.delayMet)return;this.options.onDragStart(this.item,this.itemContainer,z.onDragStart,M),this.item.before(this.placeholder),this.dragging=!0}this.setPointer(M),this.options.onDrag(this.item,s(this.pointer,this.item.offsetParent()),z.onDrag,M);var b=this.getPointer(M),p=this.sameResultBox,o=this.options.tolerance;(!p||p.top-o>b.top||p.bottom+o<b.top||p.left-o>b.left||p.right+o<b.left)&&(this.searchValidTarget()||(this.placeholder.detach(),this.lastAppendedItem=e))},drop:function(M){this.toggleListeners("off"),this.dragInitDone=!1,this.dragging&&(this.placeholder.closest("html")[0]?this.placeholder.before(this.item).detach():this.options.onCancel(this.item,this.itemContainer,z.onCancel,M),this.options.onDrop(this.item,this.getContainer(this.item),z.onDrop,M),this.clearDimensions(),this.clearOffsetParent(),this.lastAppendedItem=this.sameResultBox=e,this.dragging=!1)},searchValidTarget:function(M,b){M||(M=this.relativePointer||this.pointer,b=this.lastRelativePointer||this.lastPointer);for(var p=A(this.getContainerDimensions(),M,b),o=p.length;o--;){var z=p[o][0];if(!p[o][1]||this.options.pullPlaceholder){var t=this.containers[z];if(!t.disabled){if(!this.$getOffsetParent()){var c=t.getItemOffsetParent();M=s(M,c),b=s(b,c)}if(t.searchValidTarget(M,b))return!0}}}this.sameResultBox&&(this.sameResultBox=e)},movePlaceholder:function(M,b,p,e){var o=this.lastAppendedItem;!e&&o&&o[0]===b[0]||(b[p](this.placeholder),this.lastAppendedItem=b,this.sameResultBox=e,this.options.afterMove(this.placeholder,M,b))},getContainerDimensions:function(){return this.containerDimensions||a(this.containers,this.containerDimensions=[],this.options.tolerance,!this.$getOffsetParent()),this.containerDimensions},getContainer:function(M){return M.closest(this.options.containerSelector).data(p)},$getOffsetParent:function(){if(this.offsetParent===e){var M=this.containers.length-1,b=this.containers[M].getItemOffsetParent();if(!this.options.rootGroup)for(;M--;)if(b[0]!=this.containers[M].getItemOffsetParent()[0]){b=!1;break}this.offsetParent=b}return this.offsetParent},setPointer:function(M){var b=this.getPointer(M);if(this.$getOffsetParent()){var p=s(b,this.$getOffsetParent());this.lastRelativePointer=this.relativePointer,this.relativePointer=p}this.lastPointer=this.pointer,this.pointer=b},distanceMet:function(M){var b=this.getPointer(M);return Math.max(Math.abs(this.pointer.left-b.left),Math.abs(this.pointer.top-b.top))>=this.options.distance},getPointer:function(M){var b=M.originalEvent,p=M.originalEvent.touches&&M.originalEvent.touches[0]||{};return{left:M.pageX||b.pageX||p.pageX,top:M.pageY||b.pageY||p.pageY}},setupDelayTimer:function(){var M=this;this.delayMet=!this.options.delay,this.delayMet||(clearTimeout(this._mouseDelayTimer),this._mouseDelayTimer=setTimeout(function(){M.delayMet=!0},this.options.delay))},scroll:function(M){this.clearDimensions(),this.clearOffsetParent()},toggleListeners:function(b){var p=this;M.each(["drag","drop","scroll"],function(M,e){p.$document[b](O[e],p[e+"Proxy"])})},clearOffsetParent:function(){this.offsetParent=e},clearDimensions:function(){this.traverse(function(M){M._clearDimensions()})},traverse:function(M){M(this);for(var b=this.containers.length;b--;)this.containers[b].traverse(M)},_clearDimensions:function(){this.containerDimensions=e},_destroy:function(){t[this.options.group]=e}},l.prototype={dragInit:function(M){var b=this.rootGroup;!this.disabled&&!b.dragInitDone&&this.options.drag&&this.isValidDrag(M)&&b.dragInit(M,this)},isValidDrag:function(M){return 1==M.which||"touchstart"==M.type&&1==M.originalEvent.touches.length},searchValidTarget:function(M,b){var p=A(this.getItemDimensions(),M,b),e=p.length,o=this.rootGroup,z=!o.options.isValidTarget||o.options.isValidTarget(o.item,this);if(!e&&z)return o.movePlaceholder(this,this.target,"append"),!0;for(;e--;){var t=p[e][0];if(!p[e][1]&&this.hasChildGroup(t)){if(this.getContainerGroup(t).searchValidTarget(M,b))return!0}else if(z)return this.movePlaceholder(t,M),!0}},movePlaceholder:function(b,p){var e=M(this.items[b]),o=this.itemDimensions[b],z="after",t=e.outerWidth(),c=e.outerHeight(),O=e.offset(),i={left:O.left,right:O.left+t,top:O.top,bottom:O.top+c};if(this.options.vertical){var r=(o[2]+o[3])/2;p.top<=r?(z="before",i.bottom-=c/2):i.top+=c/2}else{var a=(o[0]+o[1])/2;p.left<=a?(z="before",i.right-=t/2):i.left+=t/2}this.hasChildGroup(b)&&(i=n),this.rootGroup.movePlaceholder(this,e,z,i)},getItemDimensions:function(){return this.itemDimensions||(this.items=this.$getChildren(this.el,"item").filter(":not(."+this.group.options.placeholderClass+", ."+this.group.options.draggedClass+")").get(),a(this.items,this.itemDimensions=[],this.options.tolerance)),this.itemDimensions},getItemOffsetParent:function(){var M=this.el;return"relative"===M.css("position")||"absolute"===M.css("position")||"fixed"===M.css("position")?M:M.offsetParent()},hasChildGroup:function(M){return this.options.nested&&this.getContainerGroup(M)},getContainerGroup:function(b){var o=M.data(this.items[b],i);if(o===e){var z=this.$getChildren(this.items[b],"container");if(o=!1,z[0]){var t=M.extend({},this.options,{rootGroup:this.rootGroup,group:c++});o=z[p](t).data(p).group}M.data(this.items[b],i,o)}return o},$getChildren:function(b,p){var e=this.rootGroup.options,o=e[p+"Path"],z=e[p+"Selector"];return b=M(b),o&&(b=b.find(o)),b.children(z)},_serialize:function(b,p){var e=this,o=p?"item":"container",z=this.$getChildren(b,o).not(this.options.exclude).map(function(){return e._serialize(M(this),!p)}).get();return this.rootGroup.options.serialize(b,z,p)},traverse:function(b){M.each(this.items||[],function(p){var e=M.data(this,i);e&&e.traverse(b)}),b(this)},_clearDimensions:function(){this.itemDimensions=e},_destroy:function(){var b=this;this.target.off(O.start,this.handle),this.el.removeData(p),this.options.drop&&(this.group.containers=M.grep(this.group.containers,function(M){return M!=b})),M.each(this.items||[],function(){M.removeData(this,i)})}};var q={enable:function(){this.traverse(function(M){M.disabled=!1})},disable:function(){this.traverse(function(M){M.disabled=!0})},serialize:function(){return this._serialize(this.el,!0)},refresh:function(){this.traverse(function(M){M._clearDimensions()})},destroy:function(){this.traverse(function(M){M._destroy()})}};M.extend(l.prototype,q),M.fn[p]=function(b){var o=Array.prototype.slice.call(arguments,1);return this.map(function(){var z=M(this),t=z.data(p);return t&&q[b]?q[b].apply(t,o)||this:(t||b!==e&&"object"!=typeof b||z.data(p,new l(z,b)),this)})}}(jQuery,window,"jqSortable"); ================================================ FILE: modules/backend/assets/js/vueapp/vue-application.js ================================================ /** * Structure: * <div data-control="vue-app"> * <div data-control="vue-container"></div> * <div data-control="vue-container"></div> * <div data-control="vue-container"></div> * </div> */ class VueApp extends oc.ControlBase { init() { this.methods = {}; this.containers = {}; this.state = Vue.reactive({}); this.vueApps = {}; this.state.processing = false; this.state.eventBus = Vue.markRaw(mitt()); this.registerMethod('onCommand', this.onCommand); } connect() { this.element.vueAppInstance = this; this.loadLangMessagesInternal(); this.loadInitialStateInternal(); } disconnect() { this.element.vueAppInstance = null; for (const name in this.methods) { this.methods[name] = null; } } registerState(name, value) { if (name.constructor === {}.constructor) { for (const key in name) { this.registerState(key, name[key]); } } else if (this.state[name] === undefined) { this.state[name] = value; } } getState(name, defaultVal) { return this.state[name] || defaultVal; } getMethod(name) { return this.methods[name]; } registerMethod(name, fn) { this.methods[name] = fn; } createContainer(control, element) { if (!this.element.isConnected) { return; } const self = this; const { app, vm } = oc.mountVueApp(element, { data() { return { state: self.state, }; }, methods: this.methods }); const controlName = this.getContainerNameFromControl(control); this.containers[controlName] = vm; this.vueApps[controlName] = app; if (element.vueContainerInstance) { element.vueContainerInstance.vm = vm; element.vueContainerInstance.app = app; } } destroyContainer(control) { const controlName = this.getContainerNameFromControl(control); if (this.vueApps[controlName]) { this.vueApps[controlName].unmount(); this.vueApps[controlName] = null; } this.containers[controlName] = null; } getContainerNameFromControl(control) { return control.element.dataset.control.replace(/-./g, x => x[1].toUpperCase()); } isFormCommand(command) { let parts = command.split(':'); return parts.length === 2 && parts[0] === 'form'; } /** * Handles commands starting with the "form:" prefix. * All other commands must be handled in a child class. * @param String command * @param Boolean isHotkey * @param Event ev */ async onCommand(command, isHotkey, ev, targetElement, customData) { let parts = command.split(':'); if (parts.length == 2 && parts[0] !== 'form') { throw new Error('Unknown command: ' + command); } const ajaxHandler = parts[1]; let requestConfig = {}; let customDataOptions = customData || {}; if (customDataOptions.request) { requestConfig = customData.request; } if (customDataOptions.confirm) { try { await oc.confirmPromise(customDataOptions.confirm); } catch (error) { return Promise.reject(); } } this.state.processing = true; return oc.request(targetElement, ajaxHandler, { ...requestConfig }) .finally(() => { this.state.processing = false; }); } loadInitialStateInternal() { const stateElements = this.element.querySelectorAll('[data-vue-state]'); stateElements.forEach(stateElement => { const stateIndex = stateElement.getAttribute('data-vue-state') || 'initial'; const stateValue = JSON.parse(stateElement.innerHTML); this.state[stateIndex] = { ...($.oc.vueUtils.getCleanObject(this.state[stateIndex] || {})), ...stateValue }; }); } loadLangMessagesInternal() { const langElements = this.element.querySelectorAll('[data-vue-lang]'); langElements.forEach(langElement => { oc.lang.set(JSON.parse(langElement.innerHTML)); }); } static getFromElement(element) { const appEl = element.closest('[data-control="vue-app"]'); if (appEl && appEl.vueAppInstance) { return appEl.vueAppInstance; } } } oc.registerControl('vue-app', VueApp); oc.VueApp = VueApp; ================================================ FILE: modules/backend/assets/js/vueapp/vue-control-base.js ================================================ /** * Structure: * <div data-control="vue-container"> * <div data-vue-template> * <template></template> * </div> * <script type="text/template" data-vue-state="initial"> * {...json...} * </script> * </div> */ export class VueControlBase extends oc.ControlBase { registerMethod(name, callback) { this.app.registerMethod(name, this.proxy(callback)); } registerState(name, value) { this.app.registerState(name, value); } // Overrides initBefore() { super.initBefore(); this.app = oc.VueApp.getFromElement(this.element); this.state = this.app.state; this.containers = this.app.containers; } connectAfter() { this.vueContainerInstance = this; super.connectAfter(); this.initContainerInternal(); } disconnectAfter() { this.destroyContainerInternal(); super.disconnectAfter(); this.vueContainerInstance = null; } // Internals initContainerInternal() { this.vueElement = this.element.querySelector('[data-vue-template]'); if (!this.vueElement) { throw new Error('Missing an element with data-vue-template'); } oc.pageReady().then(() => { this.app.createContainer(this, this.vueElement); }); } destroyContainerInternal() { this.app.destroyContainer(this); } } oc.registerControl('vue-container', VueControlBase); // Global for backward compatibility oc.VueControlBase = VueControlBase; export default VueControlBase; ================================================ FILE: modules/backend/assets/less/.gitignore ================================================ *.css ================================================ FILE: modules/backend/assets/less/controls/backend-toolbar-buttons.less ================================================ .backend-toolbar-button-focus() { &:focus:not([disabled]) { background: @toolbar-focus-bg; } } .backend-toolbar-button .badge { display: block; z-index: 9; width: 8px; height: 8px; position: absolute; top: 5px; right: -3px; border-radius: 50%; background-color: #dd1100; padding: 0; } button, a { &.backend-toolbar-button { .backend-toolbar-button(); } } @media (hover: hover) { button, a { &.backend-toolbar-button { .backend-toolbar-button-focus(); } } } ================================================ FILE: modules/backend/assets/less/controls/color-mode-selector.less ================================================ div.control-simplelist.is-selectable-box.color-mode-selector { margin-left: 0; margin-top: 10px; border: none; margin-bottom: -16px; ul { margin-bottom: 0; } li { margin: 0 16px 16px 0; width: 215px; &.active .color-mode-box { border-color: @brand-accent; } .heading { margin: 0; text-align: left; padding: 18px 17px; } } .color-mode-box { display: block; border: 2px solid @border-color; background: @input-bg; border-radius: 10px; } } ================================================ FILE: modules/backend/assets/less/controls/common.less ================================================ // // Common control styles // -------------------------------------------------- .oc-progress-bar { background-color: var(--oc-accent, #0076ff); } // // The scroll panel can host a scrollbar control. It has a right border that covers // the scrollbar to satisfy the design requirements. // .control-scrollpanel { position: relative; background: @tertiary-bg; .control-scrollbar { &.vertical > .scrollbar-scrollbar { right: 0; } } } .tooltip { .tooltip-inner { text-align: left; padding: 5px 8px; } &.show { opacity: 1; } } // // General Status Indicator // .status-indicator { width: 10px; height: 10px; border-radius: 20px; display: inline-block; margin-right: 3px; border: 1px solid rgba(var(--bs-body-bg-rgb), 0.9); } // // Logos // .oc-logo-white { background-image: url(../images/october-logo-white.svg); background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; } .oc-logo, .october-cms-logo-grey { background-image: url(../images/october-logo.svg); background-position: 50% 50%; background-repeat: no-repeat; background-size: contain; } .layout.control-tabs.oc-logo-transparent:not(.has-tabs), .flex-layout-column.oc-logo-transparent:not(.has-tabs), .layout-cell.oc-logo-transparent { background-size: auto 38px; background-repeat: no-repeat; background-image: url(../images/october-logo.svg); background-position: 50% 50%; position: relative; } ================================================ FILE: modules/backend/assets/less/controls/filelist.less ================================================ @filelist-active: @brand-selection; @filelist-active-text: #ffffff; @filelist-active-border: @brand-primary; @filelist-norecords-text: #666666; @filelist-norecords-bg: #eeeeee; @filelist-cb-border: #cccccc; @filelist-title-hero: @primary-color; @filelist-hero-item-bg: @primary-bg; @filelist-hero-item-border: @toolbar-border; @filelist-hero-hover-bg: @dropdown-hover-bg; @filelist-hero-hover-text: @dropdown-hover-color; @filelist-hero-active-bg: @dropdown-active-bg; @filelist-hero-active-text: @dropdown-hover-color; // // File list control // -------------------------------------------------- .control-filelist { .listPaddings (@level, @offset-base) when (@level > 0) { > li.group { > ul { > li > a { padding-left: (@level+2)*@offset-base; margin-left: -1*@level*@offset-base; } .listPaddings(@level - 1, @offset-base); } } } .listPaddings (0, 27px) {} p.no-data { padding: 22px 0; margin: 0; color: @filelist-norecords-text; font-size: @font-size-base; text-align: center; font-weight: normal; border-radius: @border-radius-base; } ul { padding: 0; margin: 0; li { font-weight: normal; line-height: 150%; position: relative; list-style: none; a:hover { background: @toolbar-hover-bg; } &.active > a { background: @filelist-active; position: relative; span.title, span.description { color: @filelist-active-text; } } a { display: block; padding: 10px 45px 10px 20px; outline: none; &:hover, &:focus, &:active { text-decoration: none; } span { display: block; &.title { font-weight: normal; color: @toolbar-color; font-size: @font-size-base; } &.description { color: @primary-color; font-size: @font-size-base - 2; white-space: nowrap; font-weight: normal; overflow: hidden; text-overflow: ellipsis; strong { color: @toolbar-color; font-weight: normal; } } } } &.group { > h4, > div.group > h4 { font-weight: normal; font-size: @font-size-base; margin-top: 0; margin-bottom: 0; position: relative; a { padding: 10px 20px 10px 53px; color: @toolbar-color; position: relative; outline: none; &:hover { background: transparent; } &:before, &:after { width: 10px; height: 10px; display: block; position: absolute; top: 1px; } &:after { left: 33px; top: 9px; .icon(@icon-folder); color: @color-list-icon; font-size: 16px; } &:before { left: 20px; top: 9px; color: @color-list-arrow; .icon(@icon-caret-right); transform: rotate(90deg) translate(5px, 0); transition: all 0.1s ease; } } } > ul { > li > a { padding-left: 52px; } > li.group { padding-left: 20px; } .listPaddings(10, 27px); } &[data-status=collapsed] { > h4 a:before, > div.group > h4 a:before { transform: rotate(0deg) translate(3px, 0); } & > ul, & > div.subitems { display: none; } } } > div.controls { position: absolute; right: 19px; top: 6px; .dropdown { width: 14px; height: 21px; &.open a.control { display: block!important; &:before { visibility: visible; display: block; } } } a.control { color: @toolbar-color; font-size: @font-size-base; visibility: hidden; overflow: hidden; width: 14px; height: 21px; display: none; text-decoration: none; cursor: pointer; padding: 0; opacity: 0.5; &:before { visibility: visible; display: block; margin-right: 0; } &:hover { opacity: 1; } } } &:hover { > div.controls, > a.control { display: block!important; > a.control { display: block!important; } } } .checkbox { position: absolute; top: -5px; right: 0; label { margin-right: 0; &:before { border-color: @filelist-cb-border; } } } } } &.single-line { ul { li a span.title { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } } } // // Templates have emphasis // &.filelist-hero { .a-hover() { background: @filelist-hero-hover-bg; border-bottom: 1px solid @filelist-hero-hover-bg !important; span.title, span.description { color: @filelist-hero-hover-text !important; } .list-icon { color: @filelist-hero-hover-text !important; } } .a-active() { background: @filelist-hero-active-bg; border-bottom: 1px solid @filelist-hero-active-bg !important; span.title, span.description { color: @filelist-hero-active-text !important; } .list-icon { color: @filelist-hero-active-text !important; } } ul { li { background: @filelist-hero-item-bg; border-bottom: none; > a { padding: 11px 45px 10px 50px; font-size: @font-size-base - 1; border-bottom: 1px solid @filelist-hero-item-border; span.title { font-size: @font-size-base; font-weight: normal; color: @filelist-title-hero; } span.description { font-size: @font-size-base - 1; } .list-icon { position: absolute; left: 14px; top: 9px; font-size: 22px; color: #b7c0c2; } .list-description { position: absolute; right: 12px; top: 50%; transform: translateY(-50%); font-size: 16px; color: @primary-color; cursor: help; opacity: 0.7; transition: opacity 0.15s ease; &:hover { opacity: 1; } } &:hover { .a-hover(); .list-description { color: @filelist-hero-hover-text; } } &:active { .a-active(); .list-description { color: @filelist-hero-active-text; } } } .checkbox { top: -4px; right: 0; } &.no-description { .list-icon { top: 10px; } } &.has-description > a { padding-right: 40px; } &.active { > a { border-bottom: 1px solid @filelist-active; &:after { display: none; } > span.borders { &:before { content: ' '; position: absolute; width: 100%; height: 1px; display: block; left: 0; background-color: @filelist-active; } &:before {top: -1px;} } &:hover > span.borders:before { background-color: @filelist-hero-hover-bg; } &:active > span.borders:before { background-color: @filelist-hero-active-bg; } span.title, span.description { color: @filelist-hero-active-text !important; } .list-icon { color: @filelist-hero-active-text !important; } } } > h4 { padding-top: 7px; padding-bottom: 6px; border-bottom: 1px solid @filelist-hero-item-border; } > div.controls { display: none; position: absolute; right: 16px; top: 15px; > a.control { width: 16px; height: 23px; background: transparent; overflow: hidden; display: inline-block; color: @filelist-hero-hover-text!important; padding: 0; &:before { font-size: 17px; } } } &:hover > div.controls { display: block; } &.separator { position: relative; border-bottom: 1px solid @border-color; padding: 12px 15px 13px 15px; &:before { z-index: 31; .triangle(down, 19px, 11px, @primary-bg); position: absolute; left: 13px; bottom: -8px; } &:after { z-index: 30; .triangle(down, 17px, 9px, @border-color); position: absolute; left: 14px; bottom: -9px; } h5 { color: @heading-color; font-size: @font-size-base; margin: 0; font-weight: normal; padding: 0; } } } > li.group { > ul > li > a { padding-left: 66px; } } } &.single-level { ul li:hover { background: @filelist-hero-hover-bg; > a { .a-hover(); } } ul li:active { background: @filelist-hero-active-bg; > a { .a-active(); } } } } } .control-filelist.snippet-list { li > a { position: relative; color: @toolbar-color; &:before { .icon-OctoFont(); content: @icon-code-snippet; font-size: 19.5px; position: absolute; width: 17px; height: 19px; left: 18px; top: 12px; } &:hover { &:before { color: @filelist-hero-hover-text; } } } li.group ul li > a:before { left: 34px; } } ================================================ FILE: modules/backend/assets/less/controls/menu-mode-selector.less ================================================ div.control-simplelist.is-selectable-box.menu-mode-selector { margin-left: 0; margin-top: 10px; border: none; li { margin: 0 16px 16px 0; width: 175px; &.active .menu-mode-box { border-color: @brand-accent; } .heading { margin: 0; text-align: left; padding: 18px 17px; } } .menu-mode-box { display: block; border: 2px solid @border-color; background: @input-bg; border-radius: 10px; .mode-image { display: block; height: 42px; border-bottom: 1px solid @border-color; position: relative; &:before { position: absolute; left: 17px; } } &.menu-mode-box-inline .mode-image:before { .backend-icon-sprite-pseudo(131px, 10px, 0, 100px); top: 15px; } &.menu-mode-box-text .mode-image:before { .backend-icon-sprite-pseudo(137px, 6px, 0, 120px); top: 17px; } &.menu-mode-box-tiles .mode-image:before { .backend-icon-sprite-pseudo(126px, 20px, 0, 139px); top: 10px; } &.menu-mode-box-icons .mode-image:before { .backend-icon-sprite-pseudo(79px, 10px, 61px, 169px); top: 15px; } &.menu-mode-box-collapsed .mode-image { &:before { .backend-icon-sprite-pseudo(35px, 10px, 0, 170px); top: 15px; } &:after { position: absolute; right: 17px; top: 13px; .backend-icon-sprite-pseudo(10px, 16px, 44px, 167px); } } &.menu-mode-box-left { height: 98px; .mode-image { width: 42px; height: 93px; float: left; border-bottom: none; border-right: 1px solid @border-color; &:before { top: 17px; .backend-icon-sprite-pseudo(10px, 56px, 148px, 100px); } } .heading { margin-left: 42px; text-align: left; padding: 18px 17px; } } } } ================================================ FILE: modules/backend/assets/less/controls/namevaluelist.less ================================================ table.name-value-list { border-collapse: collapse; font-size: 13px; th, td { padding: 4px 0 4px 0; vertical-align: top; } tr:first-child { th, td { padding-top: 0; } } th { font-weight: 600; color: @primary-color; padding-right: 15px; text-transform: uppercase; } td { color: @text-color; word-wrap: break-word; } } ================================================ FILE: modules/backend/assets/less/controls/onboarding.less ================================================ /* Custom Modal */ .modal-content .onboarding-modal { margin: -1px; border-radius: 15px; .modal-header { height: 132px; border-bottom: none; background-image: url('../images/license-header.png'); background-size: cover; background-repeat: no-repeat; .onboarding-logo { width: 248px; height: 41px; } .btn-close { position: absolute; width: 19px; height: 19px; top: 15px; right: 15px; border: none; background-color: transparent; background-image: url('../images/license-header-close.png'); background-size: cover; background-size: 20px 20px; opacity: 1; } } .modal-footer { .btn { border-radius: 44px; } } } /* Custom Watermark */ body.onboarding-popup-visible { .onboarding-popup-collapsed { display: none; } } .onboarding-popup-collapsed { display: block; position: fixed; cursor: pointer; width: 60px; height: 60px; right: 55px; bottom: 40px; border-radius: 60px; background-color: #E67E21; z-index: 1049; &:after { content: ''; width: 30px; height: 40px; position: absolute; top: 10px; left: 15px; background-image: url('../images/october-leaf-white.svg'); background-size: cover; } > div { position: absolute; width: 70px; height: 70px; left: -5px; top: -5px; transform: rotate(0); display: none; &:before { content: ''; width: 38px; height: 38px; position: absolute; bottom: -4px; right: -1px; opacity: 1; background-image: url('../images/license-spinner.png'); background-size: 39px 39px; } } &.onboarding-popup-just-collapsed > div { transform: rotate(720deg); transition: transform 2s linear; &:before { opacity: 0; transition: opacity 0.5s; transition-delay: 1s; } } &.onboarding-popup-collapse-animation-start > div { display: block; } } @media (max-height: 740px) { .onboarding-popup-collapsed { right: 35px; bottom: 10px; } } ================================================ FILE: modules/backend/assets/less/controls/panels.less ================================================ @panel-border-color: @primary-border; // @deprecated div.panel is used by builder div.panel, div.media-panel { padding: 20px; &.no-padding { padding: 0; } &.padding-top { padding-top: 20px; } &.padding-less { padding: 15px; } &.transparent { background: transparent; } &.border-left { border-left: 1px solid @panel-border-color; } &.border-right { border-right: 1px solid @panel-border-color; } &.border-bottom { border-bottom: 1px solid @panel-border-color; } &.border-top { border-top: 1px solid @panel-border-color; } // Panel sections h3.section, > label { color: @primary-color; font-size: 13px; font-weight: 600; } > label { margin-bottom: 5px; } // Selector group .nav.selector-group { margin: 0 -20px 20px -20px; } } ================================================ FILE: modules/backend/assets/less/controls/reportwidgets.less ================================================ // @deprecated .report-widget { padding: 15px; background: @popup-bg; box-sizing: border-box; border-radius: @border-radius-large; font-size: @font-size-base; h3 { font-size: @font-size-base; color: @color-report-widget-title; text-transform: uppercase; font-weight: 600; margin-top: 0; margin-bottom: 30px; } .height-100 { height: 100px; } .height-200 { height: 200px; } .height-300 { height: 300px; } .height-400 { height: 400px; } .height-500 { height: 500px; } p.report-description { margin-bottom: 0; margin-top: 15px; font-size: 12px; line-height: 190%; color: @color-report-widget-description; } a:not(.btn) { color: @color-report-widget-link; text-decoration: none; &:hover { color: @link-color; text-decoration: none; } } p.flash-message.static { margin-bottom: 0; } .icon-circle, .icon-circle-full { &.success { color: @brand-success; } &.primary { color: @brand-primary; } &.warning { color: @brand-warning; } &.danger { color: @brand-danger; } &.info { color: @brand-info; } } } ================================================ FILE: modules/backend/assets/less/controls/scrollable-panel.less ================================================ .scrollable-panel-container { position: relative; &:before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 0; background: transparent url(../images/scrollable-panel-shadow.png) repeat-x left top; transition: height 0.1s, width 0.1s; } &.scrolled { &:before { height: 9px; } } &.horizontal { &:before { top: 0; width: 0; height: 100%; } } &.horizontal.scrolled:before { &:before { width: 9px; background: transparent url(../images/scrollable-panel-shadow-horizontal.png) repeat-x left top; } } .scrollable { position: absolute; left: 0; top: 0; height: 100%; width: 100%; } } ================================================ FILE: modules/backend/assets/less/controls/scrollbar.less ================================================ // // Scrollbar // -------------------------------------------------- .drag-noselect { user-select: none; } @scrollbar-thumb-size: 6px; .control-scrollbar { position: relative; overflow: hidden; height: 100%; >.scrollbar-scrollbar { position: absolute; z-index: 100; .scrollbar-track { background-color: @color-scrollbar-track; position: relative; .border-radius(5px); .scrollbar-thumb { background-color: @color-scrollbar-thumb; .border-radius(5px); cursor: pointer; overflow: hidden; position: absolute; } } &.disabled { display: none !important; } } &.vertical { >.scrollbar-scrollbar { right: 0; margin-right: 5px; width: @scrollbar-thumb-size; .scrollbar-track { height: 100%; width: @scrollbar-thumb-size; .scrollbar-thumb { height: 20px; width: @scrollbar-thumb-size; top: 0; left: 0; } } &:active, &:hover { width: @scrollbar-thumb-size + 2px; .transition(width .3s); .scrollbar-track, .scrollbar-thumb { width: @scrollbar-thumb-size + 2px; .transition(width .3s); } } } } &.horizontal { >.scrollbar-scrollbar { margin: 0 0 5px; clear: both; height: @scrollbar-thumb-size; .scrollbar-track { width: 100%; height: @scrollbar-thumb-size; .scrollbar-thumb { height: @scrollbar-thumb-size; margin: 2px 0; left: 0; top: 0; } } &:active, &:hover { height: @scrollbar-thumb-size + 2px; .transition(height .3s); .scrollbar-track, .scrollbar-thumb { height: @scrollbar-thumb-size + 2px; .transition(height .3s); } } } } } @media (pointer: coarse) { .control-scrollbar { overflow: auto; } } .no-touch .control-scrollbar { >.scrollbar-scrollbar { opacity: 0; .transition(opacity 0.3s); } &:active >.scrollbar-scrollbar, &:hover >.scrollbar-scrollbar {opacity: 1;} } ================================================ FILE: modules/backend/assets/less/controls/scrollpad.less ================================================ .scrollpad-scrollbar-size-tester { width: 50px; height: 50px; overflow-y: scroll; position: absolute; top: -200px; left: -200px; div { height: 100px; } &::-webkit-scrollbar { width: 0; height: 0; } } div.control-scrollpad { position: relative; width: 100%; height: 100%; overflow: hidden; > div { overflow: hidden; overflow-y: scroll; height: 100%; &::-webkit-scrollbar { width: 0; height: 0; } } &[data-direction=horizontal] > div { overflow-x: scroll; overflow-y: hidden; width: 100%; &::-webkit-scrollbar { width: auto; height: 0; } } > .scrollpad-scrollbar { z-index: 199; // Be careful here position: absolute; top: 0; right: 0; bottom: 0; width: 11px; background-color: @color-scrollbar-track; opacity: 0; overflow: hidden; .border-radius(5px); .transition(opacity 0.3s); .drag-handle { position: absolute; right: 2px; min-height: 10px; width: 7px; background-color: @color-scrollbar-thumb; .border-radius(5px); } &:hover { opacity: .7; transition: opacity 0 linear; } &[data-visible] { opacity: .7; } &[data-hidden] { display: none; } } &[data-direction=horizontal] > .scrollpad-scrollbar { top: auto; left: 0; width: auto; height: 11px; .drag-handle { right: auto; top: 2px; height: 7px; min-height: 0; min-width: 10px; width: auto; } } } ================================================ FILE: modules/backend/assets/less/controls/selector-group.less ================================================ .nav.selector-group { font-size: 13px; letter-spacing: 0.01em; margin-bottom: 20px; li { padding: 0 3px; margin: 0; a { padding: 7px 20px 7px 23px; color: @toolbar-color; border-radius: @border-radius-base; &:hover { background-color: @toolbar-focus-bg; } } &.active { a { background: @brand-selection; padding-left: 20px; color: white; } } i[class^="icon-"] { font-size: 17px; margin-right: 6px; position: relative; top: 1px; } } } ================================================ FILE: modules/backend/assets/less/controls/sidenav-tree.less ================================================ /* @deprecated v4 -sg */ @settings-icon-size: 22px; @settings-color: var(--oc-settings-color); @settings-bg: var(--oc-settings-bg); @settings-item: var(--oc-settings-item); @settings-active-color: var(--oc-settings-active-color); @settings-active-bg: var(--oc-settings-active-bg); @settings-hover-bg: var(--oc-settings-hover-bg); @settings-back-link-color: white; @settings-back-link-bg: var(--bs-secondary); html .sidenav-tree { background: @settings-bg; } .sidenav-tree { width: 300px; flex-shrink: 0; border-right: 1px solid @primary-border; // .scrollbar-scrollbar { // display: none !important; // } .sidenav-tree-scroll-canvas { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } .settings-search-toolbar-item { display: block; background: @input-bg; position: relative; &:before { display: block; width: 15px; height: 15px; position: absolute; background-position: -238px 0; top: 13px; right: 15px; font-size: 0; } input.form-control { border: none; outline: none; padding: 1px 35px 1px 10px; border-bottom: 1px solid @primary-border; height: 40px; background: transparent; border-radius: 0; &.search { background-position: right -78px; } } } ul { padding: 0; margin: 0; list-style: none; } div.scrollbar-thumb { background: rgba(0,0,0,.2) !important; } ul.top-level > li { &[data-status=collapsed] { > div.group { h3:before { transform: rotate(0deg) translate(2px, -2px); } // Hide triangle &:before, &:after { display: none; } } ul { display: none; } } > div.group { position: relative; position: sticky; top: 0; z-index: 1; h3 { user-select: none; font-size: @font-size-base; font-weight: 600; padding: 9px 15px 7px 25px; margin: 0; position: relative; cursor: pointer; &:before { display: block; position: absolute; width: 10px; height: 10px; left: 10px; top: 10px; .icon(@icon-angle-right); transform: rotate(90deg) translate(5px, -3px); transition: all 0.1s ease; font-size: 16px; } } } > ul { li { padding: 5px; a { display: block; position: relative; padding: 10px 5px 15px 44px; text-decoration: none !important; border-radius: @border-radius-large; i { position: absolute; left: 11px; top: 11px; font-size: @settings-icon-size; } span { display: block; line-height: 150%; &.header { margin-bottom: 3px; } &.description { font-size: .875em; } } } a:hover, &.active a { opacity: 1; text-decoration: none; } } } } } .system-home-link { display: block; padding: 13px 15px; background: @settings-back-link-bg; color: @settings-back-link-color; font-size: 14px; line-height: 14px; text-decoration: none; i { display: inline-block; margin-right: 10px; &:before { .backend-icon-sprite-pseudo(24px, 11px, 52px, 0); } } &:hover { color: @settings-back-link-color; text-decoration: none; } &.back-link-other { display: none; margin-bottom: 20px; } @media (max-width: @screen-sm) { &.back-link-other { display: block; } } } .layout-container { .system-home-link.back-link-other { margin: -@padding-standard -@padding-standard @padding-standard -@padding-standard; } } body.slim-container { .layout-container { .system-home-link.back-link-other { margin: -@padding-standard 0 @padding-standard 0; } } } body.compact-container { .layout-container { .system-home-link.back-link-other { margin: 0; } } } @media (max-width: @screen-sm) { .sidenav-tree { border-right: none; width: 100%; height: auto; display: none !important; } body.has-sidenav-tree { #layout-body { display: block; } } } // Expanded body.sidenav-tree-expanded { #layout-body { display: none !important; } .sidenav-tree { display: block !important; margin: 0 auto; border-right: none; border-left: none; flex-shrink: inherit; width: 100%; padding: 30px 10px 50px 10px; .scrollbar-scrollbar { display: none !important; } .system-home-link { display: none !important; } .sidenav-tree-scroll-canvas { position: relative; } ul.top-level > li > div.group { margin-top: 10px; h3 { background: transparent; } } ul.top-level > li > ul { display: flex; flex-direction: row; flex-wrap: wrap; justify-content: flex-start; align-items: stretch; align-content: stretch; > li { display: inline-block; padding: 10px; width: 350px; a { background: @settings-item; padding-top: 12px; padding-right: 15px; padding-bottom: 15px; padding-left: 54px; min-height: 100px; height: 100%; overflow: hidden; i { top: 15px; left: 12px; font-size: 28px; } } a:hover { background: @settings-hover-bg; } } } } .settings-search-toolbar-item { margin: 0px 10px 10px 10px; border-radius: 20px !important; input.form-control { border: 1px solid @input-border; border-radius: 20px !important; padding-left: 15px; line-height: 40px; height: 40px; &:focus { border-color: @input-border-focus; } } } } // Item Styling .sidenav-tree ul.top-level > li { > div.group h3 { color: @settings-color; &:before { color: @settings-color; } } } .sidenav-tree ul.top-level > li > ul li { a { color: @settings-color; span.header { color: @settings-color; } span.description { color: @settings-color; opacity: .7; } } a:hover { background: @settings-hover-bg; color: @settings-color; span.header { color: @settings-color; } span.description { color: @settings-color; opacity: 1; } } &.active a { color: @settings-active-color; background: @settings-active-bg; span.header { color: @settings-active-color; } span.description { color: @settings-active-color; opacity: 1; } } } @media (max-width: @screen-sm) { .sidenav-tree-expanded { .sidenav-tree { > .sidenav-tree-content { // display: table !important; } } #layout-body { display: none !important; } } } @media (max-width: @screen-xs-max) { body.sidenav-tree-expanded { .sidenav-tree { width: 100%; ul.top-level > li > ul > li { width: 100%; } } } } // // Singular mode // body:not(.sidenav-tree-expanded) .sidenav-tree { .is-inactive-group { display: none; } &.is-searching { .is-inactive-group { display: block; } } } ================================================ FILE: modules/backend/assets/less/controls/simplelist.less ================================================ // // Simple List // -------------------------------------------------- // Usage (bullets): // <div class="control-simplelist"> // <ul> // <li>Hello friend</li> // </ul> // </div> // // With icons (no bullets): // <div class="control-simplelist with-icons"> // <ul> // <li class="oc-icon-check">Hello friend</li> // </ul> // </div> // // With checkboxes: // <div class="control-simplelist with-checkboxes"> // <ul> // <li> // <div class="form-check"> // <input class="form-check-input" id="checkbox-example1" name="checkbox" value="1" type="checkbox"> // <label class="form-check-label" for="checkbox-example1"> Dodge Viper</label> // </div> // </li> // </ul> // </div> // // Divided (basic): // <div class="control-simplelist is-divided"> // <ul> // <li>Hello friend</li> // </ul> // </div> // // Selectable: // <div class="control-simplelist is-selectable"> // <ul> // <li> // <a href="#"> // <h5 class="heading">Hello friend</h5> // <p class="description">Something cool over here</p> // </a> // </li> // </ul> // </div> // // Selectable (box): // <div class="control-simplelist is-selectable-box"> // <ul> // <li> // <a href="#"> // <div class="box"> // <div class="image"><i class="icon-user"></i></div> // </div> // <h5 class="heading">Hello friend</h5> // <p class="description">Something cool over here</p> // </a> // </li> // </ul> // </div> // .control-simplelist { padding: 20px 20px 2px 20px; margin-bottom: @padding-standard; border: 1px solid @input-border; background: @input-bg; .border-radius(@border-radius-base); ul { padding-left: 15px; } &.form-control { ul { margin-bottom: 0; } li { padding-top: 5px; padding-bottom: 5px; } } &.with-icons, &.with-checkboxes, &.is-divided, &.is-selectable { ul { list-style-type: none; padding-left: 0; } } &.with-icons { li > i { margin-right: 5px; } } &.with-checkboxes { li { div.custom-checkbox, div.form-check { display: inline-block; } &:first-child { margin-top: 0; } &:last-child { div.custom-checkbox, div.form-check { margin-bottom: 0; label { margin-bottom: 5px; } } } } } &.is-sortable { li { position: relative; padding: 2px 0 2px 24px; } li .drag-handle { width: 24px; height: 24px; cursor: move; text-align: center; color: @toolbar-color; background: @toolbar-bg; border-radius: 3px; text-decoration: none; position: absolute; top: 1px; left: -6px; > i { font-size: 24px; } } li.sortable-chosen.sortable-ghost { position: relative; .drag-handle { background: @toolbar-focus-bg; } } } &.is-scrollable { height: 200px; &.size-tiny { min-height: @size-tiny + 200; } &.size-small { min-height: @size-small + 200; } &.size-large { min-height: @size-large + 200; } &.size-huge { min-height: @size-huge + 200; } &.size-giant { min-height: @size-giant + 200; } } &.is-divided, &.is-selectable, &.is-selectable-box { padding: 0; li { .heading { font-size: 14px; font-weight: 600; margin-top: 10px; } .description {} } } &.is-divided, &.is-selectable { li { padding: 5px 10px; border-bottom: 1px solid @border-color; &:last-child { border-bottom: none; } } } &.is-selectable { li { a { padding: 5px 10px; margin: -5px -10px; display: block; color: @text-color; } &:hover { background: @brand-primary; cursor: pointer; &, a, .heading, .description { color: white; } a { text-decoration: none; } } &.active { a { background: #f0f0f0; &:hover { background: @brand-primary; } } } } } &.is-selectable-box { padding-top: 15px; margin-bottom: 0; background: transparent; &.is-flush { padding: 0; margin-left: -8px; ul { padding-left: 0; } } li { width: 155px; margin: 8px; display: inline-block; text-align: center; vertical-align: top; a { text-decoration: none; display: block; color: @text-color; .box { display: block; width: 155px; height: 155px; border: 3px solid rgba(0,0,0,.1); position: relative; background: @input-bg; .transition(border .3s ease); } .image { display: block; width: 56px; height: 56px; position: absolute; top: 50%; left: 50%; margin-top: -28px; margin-left: -28px; > i { font-size: 56px; color: rgba(0,0,0,.25); } } .heading { margin: 7px 0; padding: 0; } .description { font-size: 12px; } &:hover { .box { border-color: rgba(0,0,0,.2); } .image > i { color: rgba(0,0,0,.45); } } } } li.active a { .box { border-color: @brand-selection; } .image > i { color: rgba(0,0,0,.45); } } } } .list-preview .control-simplelist { &.is-selectable { ul { margin-bottom: 0; } } } ================================================ FILE: modules/backend/assets/less/controls/snackbars.less ================================================ .october-snackbar { padding: 14px 40px 0 16px; background: @color-snackbar; font-size: @font-size-base; border-radius: 4px; box-shadow: 0 1px 3px rgba(0,0,0,0.3); max-width: 100%; margin-right: 16px; position: fixed; z-index: @zindex-snackbar; left: 16px; bottom: 16px; color: white; opacity: 0; &.enter { transition: opacity 0.2s; } &.show-snackbar { opacity: 1; } .snackbar-label { float: left; margin-right: 16px; margin-bottom: 14px; } button { outline: none; -webkit-appearance: none; background: transparent; border-radius: 3px; border: none; color: @color-alert; font-weight: 600; &:focus { background: @background-color-focus-dark; } } .snackbar-dismiss { .backend-hide-text(); width: 22px; height: 22px; position: absolute; right: 10px; top: 14px; &:before { content: ''; width: 7px; height: 7px; left: 7px; top: 8px; display: block; position: absolute; .backend-icon-sprite(156px, 10px); } } .snackbar-action { float: left; margin: 0 0 14px -8px; padding: 1px 8px; text-transform: uppercase; } } ================================================ FILE: modules/backend/assets/less/controls/svg-icons.less ================================================ .svg-icon-container { img.svg-icon { display: inline-block; } &.svg-active-effects { img.svg-icon { filter: grayscale(100%); } &.active { img.svg-icon { filter: none; } } } } body:not(.drag) { .svg-icon-container { &.svg-active-effects:hover { img.svg-icon { filter: none; } } } } // SVG colorization (unused but useful research -sg) /* Set variables (sepia offset -30deg) --oc-mainnav-hue: unit(hue(@brand-mainnav-bg)-30, deg); --oc-mainnav-saturation: 300%; Use filter filter: sepia(100%) hue-rotate(var(--oc-mainnav-hue)) saturate(var(--oc-mainnav-saturation)); Base variables (grayscale) --oc-mainnav-hue: -30deg; // sepia offset: unit(hue(#000)-30, deg) --oc-mainnav-saturation: 0%; */ ================================================ FILE: modules/backend/assets/less/controls/tooltips.less ================================================ .october-tooltip { display: inline-block; padding: @tooltip-padding; position: absolute; border-radius: @tooltip-border-radius; max-width: @tooltip-max-width; transition: opacity 0.15s ease-out, transform 0.15s ease-out; transform: scale(1); opacity: 1; color: @tooltip-color; background: @tooltip-bg; font-size: @tooltip-font-size; line-height: 140%; z-index: @zindex-tooltip; .tooltip-hotkey { display: inline-block; margin-left: 5px; letter-spacing: 1px; &:empty { display: none; } i { font-style: normal; margin-left: 5px; padding: 0 2px; display: inline-block; border-radius: 3px; background: rgba(255, 255, 255, 0.11); color: rgba(255, 255, 255, 0.6); &:last-child { margin-right: -3px; } } } &.tooltip-hidden { display: none; } &.tooltip-invisible { opacity: 0; transform: scale(0.95); } } #flotTip, #chart-tooltip { white-space: nowrap; padding: @tooltip-padding; background: @tooltip-bg; position: absolute; z-index: @zindex-tooltip; color: @tooltip-color; border-radius: @tooltip-border-radius; font-size: @tooltip-font-size; opacity: @tooltip-opacity; } ================================================ FILE: modules/backend/assets/less/controls/tree-path.less ================================================ ul.tree-path { list-style: none; padding: 0; margin-bottom: 0; li { display: inline-block; margin-right: 1px; font-size: 13px; &:after { .icon(@icon-angle-right); display: inline-block; font-size: 13px; margin-left: 5px; position: relative; top: 1px; color: #95a5a6; } &:last-child { a { cursor: default; } &:after { display: none; } } &.go-up { font-size: 12px; margin-right: 7px; a { color: #95a5a6; &:hover { color: @link-color; } } &:after { display: none; } } &.root a { font-weight: 600; color: @primary-color; } a { color: #95a5a6; &:hover { text-decoration: none; } } } } ================================================ FILE: modules/backend/assets/less/controls/treelist.less ================================================ // // Tree List // -------------------------------------------------- .control-treelist { ol { padding: 0; margin: 0; list-style: none; ol { margin: 0; margin-left: 15px; padding-left: 15px; border-left: 1px solid #dbdee0; } } > ol > li > div.record:before { display: none; } li { margin: 0; padding: 0; > div.record { margin: 0; font-size: @font-size-base; margin-bottom: 5px; position: relative; display: block; &:before { color: #bdc3c7; .icon(@icon-circle); font-size: 6px; position: absolute; left: -18px; top: 11px; } > a.move { display: inline-block; padding: 7px 0 7px 10px; text-decoration: none; color: #bdc3c7; &:hover { color: @color-list-hover-bg; } &:before { .icon(@icon-bars); } } > span { color: @color-list-text; display: inline-block; padding: 7px 15px 7px 5px; } } &.dragged { position: absolute; z-index: 2000; width: auto !important; // Prevent browser scrollbars height: auto !important; > div.record { opacity: .5; background: @color-list-hover-bg !important; > a.move:before, > span { color: white; } &:before { display: none; } } } &.placeholder { display: inline-block; position: relative; background: @color-list-hover-bg !important; height: 25px; margin-bottom: 5px; &:before { display: block; position: absolute; .icon(@icon-chevron-left); color: #d35714; left: -10px; top: 8px; z-index: 2000; } } } } ================================================ FILE: modules/backend/assets/less/core/animations.less ================================================ // // Fade In // @-webkit-keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } @keyframes fadeIn { 0% { opacity: 0; } 100% { opacity: 1; } } .fadeIn { -webkit-animation-name: fadeIn; animation-name: fadeIn; } // // Fade In Down // @-webkit-keyframes fadeInDown { 0% { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } 100% { opacity: 1; -webkit-transform: none; transform: none; } } @keyframes fadeInDown { 0% { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); -ms-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } 100% { opacity: 1; -webkit-transform: none; -ms-transform: none; transform: none; } } .fadeInDown { -webkit-animation-name: fadeInDown; animation-name: fadeInDown; } // // Fade In Left // @-webkit-keyframes fadeInLeft { 0% { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } 100% { opacity: 1; -webkit-transform: none; transform: none; } } @keyframes fadeInLeft { 0% { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); -ms-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } 100% { opacity: 1; -webkit-transform: none; -ms-transform: none; transform: none; } } .fadeInLeft { -webkit-animation-name: fadeInLeft; animation-name: fadeInLeft; } // // Fade In Right // @-webkit-keyframes fadeInRight { 0% { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } 100% { opacity: 1; -webkit-transform: none; transform: none; } } @keyframes fadeInRight { 0% { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); -ms-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } 100% { opacity: 1; -webkit-transform: none; -ms-transform: none; transform: none; } } .fadeInRight { -webkit-animation-name: fadeInRight; animation-name: fadeInRight; } // // Fade In Up // @-webkit-keyframes fadeInUp { 0% { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } 100% { opacity: 1; -webkit-transform: none; transform: none; } } @keyframes fadeInUp { 0% { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); -ms-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } 100% { opacity: 1; -webkit-transform: none; -ms-transform: none; transform: none; } } .fadeInUp { -webkit-animation-name: fadeInUp; animation-name: fadeInUp; } // // Fade Out // @-webkit-keyframes fadeOut { 0% { opacity: 1; } 100% { opacity: 0; } } @keyframes fadeOut { 0% { opacity: 1; } 100% { opacity: 0; } } .fadeOut { -webkit-animation-name: fadeOut; animation-name: fadeOut; } // // Fade Out Down // @-webkit-keyframes fadeOutDown { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } } @keyframes fadeOutDown { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(0, 100%, 0); -ms-transform: translate3d(0, 100%, 0); transform: translate3d(0, 100%, 0); } } .fadeOutDown { -webkit-animation-name: fadeOutDown; animation-name: fadeOutDown; } // // Fade Out Left // @-webkit-keyframes fadeOutLeft { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } } @keyframes fadeOutLeft { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(-100%, 0, 0); -ms-transform: translate3d(-100%, 0, 0); transform: translate3d(-100%, 0, 0); } } .fadeOutLeft { -webkit-animation-name: fadeOutLeft; animation-name: fadeOutLeft; } // // Fade Out Right // @-webkit-keyframes fadeOutRight { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } } @keyframes fadeOutRight { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(100%, 0, 0); -ms-transform: translate3d(100%, 0, 0); transform: translate3d(100%, 0, 0); } } .fadeOutRight { -webkit-animation-name: fadeOutRight; animation-name: fadeOutRight; } // // Fade Out Up // @-webkit-keyframes fadeOutUp { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } } @keyframes fadeOutUp { 0% { opacity: 1; } 100% { opacity: 0; -webkit-transform: translate3d(0, -100%, 0); -ms-transform: translate3d(0, -100%, 0); transform: translate3d(0, -100%, 0); } } .fadeOutUp { -webkit-animation-name: fadeOutUp; animation-name: fadeOutUp; } // // Fade Cycle // @-webkit-keyframes fadeCycle { 0% { opacity: 1; } 50% { opacity: .5; } 100% { opacity: 1; } } @keyframes fadeCycle { 0% { opacity: 1; } 50% { opacity: .5; } 100% { opacity: 1; } } .fadeCycle { -webkit-animation: fadeCycle 2s infinite; -moz-animation: fadeCycle 2s infinite; animation: fadeCycle 2s infinite; } ================================================ FILE: modules/backend/assets/less/core/base-editor-styles.less ================================================ @import "boot.less"; @blockquote-level1-color: #5e35b1; @blockquote-level2-color: #00bcd4; @blockquote-level3-color: #43a047; @editor-text-color: #000; a { text-decoration: underline; color: @link-color; } h1 { font-size: 34px; font-weight: normal; margin-bottom: 20px; } h2 { font-size: 26px; font-weight: normal; margin-bottom: 20px; } h3 { font-size: 21px; font-weight: normal; margin-bottom: 20px; } h4 { font-size: 18px; font-weight: normal; margin: 20px 0; } h5 { font-size: 16px; font-weight: normal; color: #434343; } strong { font-weight: 700; } pre { white-space: pre-wrap; word-wrap: break-word; padding: 5px 10px; border-radius: 4px; } code { background: #eee; padding: 0px 3px 2px; display: inline-block; border-radius: 4px; } blockquote { border-left: solid 2px @blockquote-level1-color; margin-left: 0; padding-left: 5px; color: @blockquote-level1-color; font-size: inherit; blockquote { border-color: @blockquote-level2-color; color: @blockquote-level2-color; blockquote { border-color: @blockquote-level3-color; color: @blockquote-level3-color; } } } table { border: none; border-collapse: collapse; empty-cells: show; max-width: 100%; margin-bottom: 10px; td, th { border: 1px solid #ddd; padding: 5px; &:empty { height: 20px; } } th { background: mix(white, @editor-text-color, 90%); } } hr { clear: both; user-select: none; page-break-after: always; } ================================================ FILE: modules/backend/assets/less/core/boot.less ================================================ // // Boots the Core LESS // // Includes non-output LESS files such as mixins and variables // @import "variables/variables.less"; @import "variables/variables.global.less"; @import "variables/variables.form.less"; @import "variables/variables.list.less"; @import "variables/variables.zindex.less"; @import "mixins/mixins.less"; @import "mixins/mixins.css3.less"; @import "mixins/mixins.gradient.less"; @import "mixins/mixins.triangle.less"; @import "mixins/mixins.utility.less"; @import "mixins/mixins.backend-toolbar.less"; // Elements @import "../../foundation/elements/icons/icons.mixins.less"; @import "../../foundation/elements/icons/icons.variables.less"; @import "../../foundation/elements/backendicons/backendicons.mixins.less"; ================================================ FILE: modules/backend/assets/less/core/mixins/mixins.backend-toolbar.less ================================================ .backend-toolbar-button() { line-height: inherit; display: inline-block; color: inherit; padding: 0 6px; min-width: 40px; text-align: center; text-decoration: none !important; border-radius: 4px; outline: none; box-shadow: none; -webkit-appearance: none; border: none; background: transparent; &.control-button { color: @toolbar-color; font-size: @font-size-base; margin-right: 8px; line-height: 30px; } &.icon-only { min-width: 30px; } &[disabled] { cursor: default; > i, > span, &:after { opacity: 0.5; } } i { display: inline-block; position: relative; font-size: 16px; top: 1px; + span.button-label { margin-left: 6px; } } &:not([disabled]):hover { background: @toolbar-hover-bg; } &:not([disabled]):focus { background: @toolbar-focus-bg; } &.has-menu { &:after { .icon-OctoFont(); content: @icon-angle-down-arrow; font-size: 16px; vertical-align: middle; margin-left: 0; margin-right: -3px; position: relative; top: -1px; } } } ================================================ FILE: modules/backend/assets/less/core/mixins/mixins.css3.less ================================================ // Border radius // .border-radius(@radius) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; } // Single side border-radius .border-top-radius(@radius) { border-top-right-radius: @radius; border-top-left-radius: @radius; } .border-right-radius(@radius) { border-bottom-right-radius: @radius; border-top-right-radius: @radius; } .border-bottom-radius(@radius) { border-bottom-right-radius: @radius; border-bottom-left-radius: @radius; } .border-left-radius(@radius) { border-bottom-left-radius: @radius; border-top-left-radius: @radius; } // Drop shadows // // Note: Deprecated `.box-shadow()` as of v3.1.0 since all of Bootstrap's // supported browsers that have box shadow capabilities now support the // standard `box-shadow` property. .box-shadow(@shadow) { -webkit-box-shadow: @shadow; // iOS <4.3 & Android <4.1 box-shadow: @shadow; } // Transitions .transition(@transition) { -webkit-transition: @transition; transition: @transition; } .transition-property(@transition-property) { -webkit-transition-property: @transition-property; transition-property: @transition-property; } .transition-delay(@transition-delay) { -webkit-transition-delay: @transition-delay; transition-delay: @transition-delay; } .transition-duration(@transition-duration) { -webkit-transition-duration: @transition-duration; transition-duration: @transition-duration; } .transition-transform(@transition) { -webkit-transition: -webkit-transform @transition; transition: transform @transition; } // Transformations .rotate(@degrees) { -webkit-transform: rotate(@degrees); -ms-transform: rotate(@degrees); // IE9 only transform: rotate(@degrees); } .scale(@ratio; @ratio-y...) { -webkit-transform: scale(@ratio, @ratio-y); -ms-transform: scale(@ratio, @ratio-y); // IE9 only transform: scale(@ratio, @ratio-y); } .translate(@x; @y) { -webkit-transform: translate(@x, @y); -ms-transform: translate(@x, @y); // IE9 only transform: translate(@x, @y); } .skew(@x; @y) { -webkit-transform: skew(@x, @y); -ms-transform: skewX(@x) skewY(@y); // See https://github.com/twbs/bootstrap/issues/4885; IE9+ transform: skew(@x, @y); } .translate3d(@x; @y; @z) { -webkit-transform: translate3d(@x, @y, @z); transform: translate3d(@x, @y, @z); } .rotateX(@degrees) { -webkit-transform: rotateX(@degrees); -ms-transform: rotateX(@degrees); // IE9 only transform: rotateX(@degrees); } .rotateY(@degrees) { -webkit-transform: rotateY(@degrees); -ms-transform: rotateY(@degrees); // IE9 only transform: rotateY(@degrees); } .perspective(@perspective) { -webkit-perspective: @perspective; -moz-perspective: @perspective; perspective: @perspective; } .perspective-origin(@perspective) { -webkit-perspective-origin: @perspective; -moz-perspective-origin: @perspective; perspective-origin: @perspective; } .transform-origin(@origin) { -webkit-transform-origin: @origin; -moz-transform-origin: @origin; -ms-transform-origin: @origin; // IE9 only transform-origin: @origin; } // Animations .animation(@animation) { -webkit-animation: @animation; animation: @animation; } .animation-name(@name) { -webkit-animation-name: @name; animation-name: @name; } .animation-duration(@duration) { -webkit-animation-duration: @duration; animation-duration: @duration; } .animation-timing-function(@timing-function) { -webkit-animation-timing-function: @timing-function; animation-timing-function: @timing-function; } .animation-delay(@delay) { -webkit-animation-delay: @delay; animation-delay: @delay; } .animation-iteration-count(@iteration-count) { -webkit-animation-iteration-count: @iteration-count; animation-iteration-count: @iteration-count; } .animation-direction(@direction) { -webkit-animation-direction: @direction; animation-direction: @direction; } // Backface visibility // Prevent browsers from flickering when using CSS 3D transforms. // Default value is `visible`, but can be changed to `hidden` .backface-visibility(@visibility){ -webkit-backface-visibility: @visibility; -moz-backface-visibility: @visibility; backface-visibility: @visibility; } // Box sizing .box-sizing(@boxmodel) { -webkit-box-sizing: @boxmodel; -moz-box-sizing: @boxmodel; box-sizing: @boxmodel; } // User select // For selecting text on the page .user-select(@select) { -webkit-user-select: @select; -moz-user-select: @select; -ms-user-select: @select; // IE10+ user-select: @select; } // Resize anything .resizable(@direction) { resize: @direction; // Options: horizontal, vertical, both overflow: auto; // Safari fix } // CSS3 Content Columns .content-columns(@column-count; @column-gap: @grid-gutter-width) { -webkit-column-count: @column-count; -moz-column-count: @column-count; column-count: @column-count; -webkit-column-gap: @column-gap; -moz-column-gap: @column-gap; column-gap: @column-gap; } // Optional hyphenation .hyphens(@mode: auto) { word-wrap: break-word; -webkit-hyphens: @mode; -ms-hyphens: @mode; // IE10+ hyphens: @mode; } // Opacity .opacity(@opacity) { opacity: @opacity; } // Universal transform // -------------------------------------------------- .transform(@transform) { -webkit-transform: @transform; -ms-transform: @transform; // IE9+ transform: @transform; } // Transformations // .scaleAxes(@x, @y) { -webkit-transform: scale(@x, @y); transform: scale(@x, @y); } ================================================ FILE: modules/backend/assets/less/core/mixins/mixins.gradient.less ================================================ // Gradients // -------------------------------------------------- #gradient { // Horizontal gradient, from left to right // // Creates two color stops, start and end, by specifying a color and position for each color stop. .horizontal(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { background-image: -webkit-linear-gradient(left, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ background-image: linear-gradient(to right, @start-color @start-percent, @end-color @end-percent); // Standard background-repeat: repeat-x; } // Vertical gradient, from top to bottom // // Creates two color stops, start and end, by specifying a color and position for each color stop. .vertical(@start-color: #555; @end-color: #333; @start-percent: 0%; @end-percent: 100%) { background-image: -webkit-linear-gradient(top, @start-color @start-percent, @end-color @end-percent); // Safari 5.1-6, Chrome 10+ background-image: linear-gradient(to bottom, @start-color @start-percent, @end-color @end-percent); // Standard background-repeat: repeat-x; } .directional(@start-color: #555; @end-color: #333; @deg: 45deg) { background-repeat: repeat-x; background-image: -webkit-linear-gradient(@deg, @start-color, @end-color); // Safari 5.1-6, Chrome 10+ background-image: linear-gradient(@deg, @start-color, @end-color); // Standard } .horizontal-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { background-image: -webkit-linear-gradient(left, @start-color, @mid-color @color-stop, @end-color); background-image: linear-gradient(to right, @start-color, @mid-color @color-stop, @end-color); background-repeat: no-repeat; } .vertical-three-colors(@start-color: #00b3ee; @mid-color: #7a43b6; @color-stop: 50%; @end-color: #c3325f) { background-image: -webkit-linear-gradient(@start-color, @mid-color @color-stop, @end-color); background-image: linear-gradient(@start-color, @mid-color @color-stop, @end-color); background-repeat: no-repeat; } .radial(@inner-color: #555; @outer-color: #333) { background-image: -webkit-radial-gradient(circle, @inner-color, @outer-color); background-image: radial-gradient(circle, @inner-color, @outer-color); background-repeat: no-repeat; } .striped(@color: rgba(255,255,255,.15); @angle: 45deg) { background-image: -webkit-linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); background-image: linear-gradient(@angle, @color 25%, transparent 25%, transparent 50%, @color 50%, @color 75%, transparent 75%, transparent); } } ================================================ FILE: modules/backend/assets/less/core/mixins/mixins.less ================================================ .svg-fix-load() { /* Fix for SVG icons not rendering on initial page load until repaint (hover, move, etc) */ -webkit-backface-visibility: hidden; backface-visibility: hidden; } .backend-hide-text() { font-size: 0; color: transparent; } ================================================ FILE: modules/backend/assets/less/core/mixins/mixins.triangle.less ================================================ // Triangles // -------------------------------------------------- .triangle-base() { content: ''; display: block; width: 0; height: 0; } .triangle(@direction, @width, @height, @color) when (@direction = up) { .triangle-base(); border-left: (@width/2) solid transparent; border-right: (@width/2) solid transparent; border-bottom: @height solid @color; } .triangle(@direction, @width, @height, @color) when (@direction = down) { .triangle-base(); border-left: (@width/2) solid transparent; border-right: (@width/2) solid transparent; border-top: @height solid @color; border-bottom-width: 0; } .triangle(@direction, @width, @height, @color) when (@direction = left) { .triangle-base(); border-top: (@height/2) solid transparent; border-bottom: (@height/2) solid transparent; border-right: @width solid @color; } .triangle(@direction, @width, @height, @color) when (@direction = right) { .triangle-base(); border-top: (@height/2) solid transparent; border-bottom: (@height/2) solid transparent; border-left: @width solid @color; } ================================================ FILE: modules/backend/assets/less/core/mixins/mixins.utility.less ================================================ // Utilities // ------------------------- // Clearfix // Source: http://nicolasgallagher.com/micro-clearfix-hack/ // // For modern browsers // 1. The space content is one way to avoid an Opera bug when the // contenteditable attribute is included anywhere else in the document. // Otherwise it causes space to appear at the top and bottom of elements // that are clearfixed. // 2. The use of `table` rather than `block` is only necessary if using // `:before` to contain the top-margins of child elements. .clearfix() { &:before, &:after { content: " "; // 1 display: table; // 2 } &:after { clear: both; } } // WebKit-style focus .tab-focus() { // Default outline: thin dotted; // WebKit outline: 5px auto -webkit-focus-ring-color; outline-offset: -2px; } // Center-align a block level element .center-block() { display: block; margin-left: auto; margin-right: auto; } // Sizing shortcuts .size(@width; @height) { width: @width; height: @height; } .square(@size) { .size(@size; @size); } // Placeholder text .placeholder(@color: @input-color-placeholder) { &::-moz-placeholder { color: @color; // Firefox opacity: 1; } // See https://github.com/twbs/bootstrap/pull/11526 &:-ms-input-placeholder { color: @color; } // Internet Explorer 10+ &::-webkit-input-placeholder { color: @color; } // Safari and Chrome } // Text overflow // Requires inline-block or block for proper styling .text-overflow() { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } // CSS image replacement // // Heads up! v3 launched with with only `.hide-text()`, but per our pattern for // mixins being reused as classes with the same name, this doesn't hold up. As // of v3.0.1 we have added `.text-hide()` and deprecated `.hide-text()`. Note // that we cannot chain the mixins together in Less, so they are repeated. // // Source: https://github.com/h5bp/html5-boilerplate/commit/aa0396eae757 // Deprecated as of v3.0.1 (will be removed in v4) .hide-text() { font: ~"0/0" a; color: transparent; text-shadow: none; background-color: transparent; border: 0; } // New mixin to use as of v3.0.1 .text-hide() { .hide-text(); } // Retina images // // Short retina mixin for setting background-image and -size .img-retina(@file-1x; @file-2x; @width-1x; @height-1x) { background-image: url("@{file-1x}"); @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and ( min-device-pixel-ratio: 2), only screen and ( min-resolution: 192dpi), only screen and ( min-resolution: 2dppx) { background-image: url("@{file-2x}"); background-size: @width-1x @height-1x; } } // Responsive utilities // ------------------------- // More easily include all the states for responsive-utilities.less. .responsive-visibility() { display: block !important; table& { display: table; } tr& { display: table-row !important; } th&, td& { display: table-cell !important; } } .responsive-invisibility() { display: none !important; } ================================================ FILE: modules/backend/assets/less/core/utility.less ================================================ // Floats // ------------------------- .clearfix { .clearfix(); } .center-block { .center-block(); } .pull-right { float: right !important; } .pull-left { float: left !important; } // Toggling content // ------------------------- .oc-hide { display: none !important; } .oc-show { display: block !important; } .oc-invisible { visibility: hidden; } .text-hide { .text-hide(); } // Hide from screenreaders and browsers // // Credit: HTML5 Boilerplate .hidden { display: none !important; visibility: hidden !important; } // // Typography // -------------------------------------------------- .t-ww { word-wrap: break-word; word-break: break-word; } .t-nw { white-space: nowrap; } // // Width // -------------------------------------------------- .w-0 { width: 0 !important; } .w-60 { width: 60px !important; } .w-120 { width: 120px !important; } .w-130 { width: 130px !important; } .w-140 { width: 140px !important; } .w-150 { width: 150px !important; } .w-200 { width: 200px !important; } .w-300 { width: 300px !important; } .w-350 { width: 350px !important; } .mw-400 { max-width: 400px !important; } .mw-450 { max-width: 450px !important; } .mw-500 { max-width: 500px !important; } .mw-550 { max-width: 550px !important; } .mw-600 { max-width: 600px !important; } .mw-650 { max-width: 650px !important; } .mw-700 { max-width: 700px !important; } .mw-750 { max-width: 750px !important; } .mw-800 { max-width: 800px !important; } .mw-850 { max-width: 850px !important; } .mw-900 { max-width: 900px !important; } .mw-950 { max-width: 950px !important; } .mw-1000 { max-width: 1000px !important; } .mw-1050 { max-width: 1050px !important; } .mw-1100 { max-width: 1100px !important; } .mw-1150 { max-width: 1150px !important; } .mw-1200 { max-width: 1200px !important; } .mw-1250 { max-width: 1250px !important; } .mw-1400 { max-width: 1400px !important; } .mw-auto { max-width: auto !important; } ================================================ FILE: modules/backend/assets/less/core/variables/variables.form.less ================================================ // // Forms // -------------------------------------------------- @input-border-radius: 4px; @input-border-fade: darken(#cfd7e1, 10%); @input-box-shadow: none; @input-focus-box-shadow: 0 0 0 0.25rem rgba(53, 66, 91, 0.1); @input-color-placeholder: #cccccc; @input-color-disabled: @color-grey-2; @input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2); @input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2); @input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2); @legend-color: @gray-dark; @legend-border-color: #e5e5e5; @input-group-addon-bg: @gray-lighter; @input-group-addon-border-color: @input-border; @label-font-size: 1rem; @input-font-size: 1rem; @input-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s; @form-breakpoint-min: 770px; @form-breakpoint-max: (@form-breakpoint-min - 1); @color-form-required-asterisk: @brand-danger; @color-form-field-bg: #ffffff; @color-form-field-icon: #bdbdbd; ================================================ FILE: modules/backend/assets/less/core/variables/variables.global.less ================================================ // Breakpoints // -------------------------------------------------- // Extra small screen @screen-xs-min: 576px; // Small screen / tablet @screen-sm-min: 768px; // Medium screen / desktop @screen-md-min: 992px; // Large screen / wide desktop @screen-lg-min: 1200px; // Extra large screen @screen-xl-min: 1400px; // So media queries don't overlap when required, provide a maximum @screen-xs-max: (@screen-sm-min - 1); @screen-sm-max: (@screen-md-min - 1); @screen-md-max: (@screen-lg-min - 1); @screen-lg-max: (@screen-xl-min - 1); // // Breakpoints (@deprecated) // -------------------------------------------------- @screen-xs: @screen-xs-min; @screen-phone: @screen-xs-min; @screen-sm: @screen-sm-min; @screen-tablet: @screen-sm-min; @screen-md: @screen-md-min; @screen-desktop: @screen-md-min; @screen-lg: @screen-lg-min; @screen-lg-desktop: @screen-lg-min; // // Typography // -------------------------------------------------- @font-family-sans-serif: sans-serif; @font-family-serif: serif; @font-family-monospace: monospace; @font-family-base: @font-family-sans-serif; @font-size-base: 14px; @font-size-large: ceil((@font-size-base * 1.25)); // ~18px @font-size-small: ceil((@font-size-base * 0.85)); // ~12px @font-size-h1: floor((@font-size-base * 2.6)); // ~36px @font-size-h2: floor((@font-size-base * 2.15)); // ~30px @font-size-h3: ceil((@font-size-base * 1.7)); // ~24px @font-size-h4: ceil((@font-size-base * 1.25)); // ~18px @font-size-h5: @font-size-base; @font-size-h6: ceil((@font-size-base * 0.85)); // ~12px @line-height-base: 1.428571429; // 20/14 @line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px @headings-font-family: inherit; @headings-font-weight: 400; @headings-line-height: 1.1; @headings-color: inherit; @component-offset-horizontal: 180px; @abbr-border-color: @gray-light; @headings-small-color: @gray-light; @blockquote-small-color: @gray-light; @blockquote-font-size: (@font-size-base * 1.25); @blockquote-border-color: @gray-lighter; @page-header-border-color: @gray-lighter; @dl-horizontal-offset: @component-offset-horizontal; @hr-border: @gray-lighter; // // Sizes // -------------------------------------------------- @size-tiny: 50px; @size-small: 100px; @size-large: 200px; @size-huge: 250px; @size-giant: 350px; // // Colors // -------------------------------------------------- @color-focus: @color-grey-2; @gray-darker: lighten(#000, 13.5%); // #222 @gray-dark: lighten(#000, 20%); // #333 @gray: lighten(#000, 33.5%); // #555 @gray-light: #98A0A0; @gray-lighter: lighten(#000, 93.5%); // #eee @state-success-text: #3c763d; @state-success-bg: #dff0d8; @state-success-border: darken(spin(@state-success-bg, -10), 5%); @state-info-text: #31708f; @state-info-bg: #d9edf7; @state-info-border: darken(spin(@state-info-bg, -10), 7%); @state-warning-text: #8a6d3b; @state-warning-bg: #fcf8e3; @state-warning-border: darken(spin(@state-warning-bg, -10), 5%); @state-danger-text: #a94442; @state-danger-bg: #f2dede; @state-danger-border: darken(spin(@state-danger-bg, -10), 5%); // // New October UI Kit colors // @color-grey-1: #35425b; @color-grey-2: #72809d; @color-grey-3: #d7e1eA; @color-grey-4: #f0f4f8; @color-grey-3-light: #e9edf3; @color-text-grey-1: #536061; @color-text-grey-4: #5E6D8C; @primary-darker: #5A5CEF; @color-grey-6: #95A5A6; @color-grey-6-darker: #899C9D; @color-grey-7: #2C3E4F; @color-alert: #FFD422; @background-color-focus: rgba(215,225,234,0.7); @background-color-focus-dark: rgba(215,225,234,0.2); @outline-focus-shadow: ~"0 0 0px 2px rgba(0,0,0,0.15)"; @box-shadow-z1: ~"-2px 2px 5px rgba(67, 86, 100, 0.12)"; @box-shadow-z2: ~"0 0 32px rgba(67, 86, 100, 0.2)"; @box-shadow-symmetrical-z2: ~"0 16px 32px rgba(67, 86, 100, 0.2)"; @mobile-dropdown-shadow: ~"0 0 10px rgba(0, 0, 0, 0.1)"; // // General // -------------------------------------------------- @padding-standard: 20px; @padding-base-vertical: 8px; @padding-base-horizontal: 13px; @padding-large-vertical: 10px; @padding-large-horizontal: 16px; @padding-small-vertical: 5px; @padding-small-horizontal: 10px; @padding-xs-vertical: 3px; @padding-xs-horizontal: 7px; @line-height-large: 1.3333333; // extra decimals for Win 8.1 Chrome @line-height-small: 1.5; @border-radius-base: 4px; @border-radius-large: 6px; @border-radius-small: 3px; @component-active-color: #fff; @component-active-bg: @brand-primary; @caret-width-base: 4px; @caret-width-large: 5px; @overlay-box-shadow: ~"0 1px 6px rgba(0, 0, 0, 0.12), 0 1px 4px rgba(0, 0, 0, 0.24)"; @overlay-background: rgba(0, 0, 0, @backdrop-opacity); ================================================ FILE: modules/backend/assets/less/core/variables/variables.less ================================================ // // Paths // -------------------------------------------------- @font-path: "../font"; @image-path: "../images"; @type-font-path: "../font"; // // Override UI variables // -------------------------------------------------- @font-family-base: var(--bs-body-font-family); @body-bg: var(--bs-body-bg); @text-color: var(--bs-body-color); @text-muted: var(--bs-secondary-color); @link-color: var(--bs-link-color); @link-hover-color: var(--bs-link-hover-color); @heading-color: var(--bs-heading-color); @emphasis-color: var(--bs-emphasis-color); @border-color: var(--bs-border-color); @popup-bg: var(--oc-popup-bg); @popup-border: var(--oc-popup-border); @backdrop-opacity: var(--bs-backdrop-opacity); // // Primary Colors // -------------------------------------------------- @brand-primary: var(--bs-primary); @brand-secondary: var(--bs-secondary); @brand-success: var(--bs-success); @brand-info: var(--bs-info); @brand-warning: var(--bs-warning); @brand-danger: var(--bs-danger); @brand-light: var(--bs-light); @brand-dark: var(--bs-dark); @brand-accent: var(--oc-accent); @brand-selection: var(--oc-selection); @brand-selection-text: var(--oc-selection-text); @primary-color: var(--oc-primary-color); @primary-border: var(--oc-primary-border); @primary-bg: var(--oc-primary-bg); @secondary-color: var(--bs-secondary-color); @secondary-bg: var(--bs-secondary-bg); @secondary-bg-alt: var(--oc-secondary-bg); // Used by secondary button @tertiary-color: var(--bs-tertiary-color); @tertiary-bg: var(--bs-tertiary-bg); // // Form Variables // -------------------------------------------------- @input-bg: var(--oc-form-control-bg); @input-disabled-bg: var(--oc-form-control-disabled-bg); @input-disabled-color: var(--oc-form-control-disabled-color); @input-placeholder-color: var(--bs-tertiary-color); @input-color: var(--bs-body-color); @input-border: var(--bs-border-color); @input-border-focus: var(--oc-border-focus); @input-translatable-color: var(--oc-input-translatable-color); @input-translatable-bg: var(--oc-input-translatable-bg); @input-selection-color: var(--oc-input-selection-color); @input-selection-bg: var(--oc-input-selection-bg); // // Component Variables // -------------------------------------------------- @mainnav-color: var(--oc-mainnav-color); @mainnav-bg: var(--oc-mainnav-bg); @mainnav-icon-color: var(--oc-mainnav-icon-color); @sidebar-color: var(--oc-sidebar-color); @sidebar-bg: var(--oc-sidebar-bg); @sidebar-active-color: var(--oc-sidebar-active-color); @sidebar-active-bg: var(--oc-sidebar-active-bg); @sidebar-active-border: var(--oc-sidebar-active-border); @sidebar-hover-bg: var(--oc-sidebar-hover-bg); @editor-bg: var(--oc-editor-bg); @editor-section-color: var(--oc-editor-section-color); @editor-section-bg: var(--oc-editor-section-bg); @editor-tab-color: var(--oc-editor-tab-color); @editor-tab-bg: var(--oc-editor-tab-bg); @editor-tab-active-color: var(--oc-editor-tab-active-color); @editor-tab-active-bg: var(--oc-editor-tab-active-bg); @document-toolbar-bg: var(--oc-document-toolbar-bg); @document-tabs-bg: var(--oc-document-tabs-bg); @document-content-bg: var(--oc-document-content-bg); @document-ruler-color: var(--oc-document-ruler-color); @document-ruler-bg: var(--oc-document-ruler-bg); @document-ruler-tick: var(--oc-document-ruler-tick); @toolbar-color: var(--oc-toolbar-color); @toolbar-bg: var(--oc-toolbar-bg); @toolbar-border: var(--oc-toolbar-border); @toolbar-hover-color: var(--oc-toolbar-hover-color); @toolbar-hover-bg: var(--oc-toolbar-hover-bg); @toolbar-focus-bg: var(--oc-toolbar-hover-bg); @tab-color: var(--oc-tab-color); @tab-bg: var(--oc-tab-bg); @tab-active-color: var(--oc-tab-active-color); @tab-border: var(--oc-tab-border); @tab-hover-bg: var(--oc-tab-hover-bg); @dropdown-bg: var(--bs-modal-bg); @dropdown-hover-color: var(--oc-dropdown-hover-color); @dropdown-hover-bg: var(--oc-dropdown-hover-bg); @dropdown-active-bg: var(--oc-dropdown-active-bg); @dropdown-trigger-bg: var(--oc-dropdown-trigger-bg); @dropdown-trigger-color: var(--oc-dropdown-trigger-color); @dropdown-trigger-border: var(--oc-dropdown-trigger-border); // // Colors // -------------------------------------------------- @color-footer: rgba(255,255,255,.8); @color-footer-border: #dfdfdf; @color-footer-text: #666666; @color-scrollbar-track: transparent; @color-scrollbar-thumb: rgba(0,0,0,.35); @color-scrollpanel-border: #efefef; @color-scroll-indicator: #bbbbbb; @color-outer-muted-text: rgba(255,255,255,.44); @color-breadcrumb-text-active: #9da3a7; @color-breadcrumb-text: #9B9B9B; @color-breadcrumb-background: #2b343d; @color-sortable-caret: #999999; @color-sortable-active: @brand-secondary; @color-report-widget-title: #7e8c8d; @color-report-widget-control-inactive: #b6b6b6; @color-report-widget-description: @color-report-widget-title; @color-report-widget-link: @color-report-widget-title; @color-snackbar: #323232; // // Sizes // -------------------------------------------------- @size-tiny: 50px; @size-small: 100px; @size-large: 200px; @size-huge: 250px; @size-giant: 350px; // // Media breakpoints // -------------------------------------------------- @menu-breakpoint-min: 769px; @menu-breakpoint-max: (@menu-breakpoint-min - 1); @mobile-breakpoint-max: 414px; // // Document UI // -------------------------------------------------- @document-ui-base-padding: 20px; // // Close icons // -------------------------------------------------- @close-font-weight: bold; @close-color: var(--bs-emphasis-color); @close-text-shadow: 0 1px 0 var(--bs-body-bg); ================================================ FILE: modules/backend/assets/less/core/variables/variables.list.less ================================================ //== Tables // //## Customizes the `.table` component with basic values, each used across all table variations. @table-cell-padding: 8px; @table-condensed-cell-padding: 5px; @table-bg: transparent; @table-bg-accent: #f9f9f9; @table-bg-hover: #f5f5f5; @table-bg-active: #FFF5CB; @table-border-color: #ddd; @color-list-active: #dddddd; @color-list-hover: #dddddd; @color-list-active-border: @brand-primary; @color-list-arrow: #cfcfcf; @color-list-icon: #a1aab1; @color-list-parent-bg: #ffffff; @color-list-nav-arrow: #34495e; @color-list-head-bg: @color-grey-4; @color-list-progress-bg: #0181b9; @color-list-border: #D4D8DA; @color-list-row-border: #ECF0F1; @color-list-head-border: @primary-border; @color-list-border-light: @color-grey-3; @color-list-text-head: @color-grey-1; @color-list-text: var(--bs-table-color); @color-list-text-active: #000000; @color-list-text-tree: var(--bs-table-color); @color-list-stripe-active: @brand-primary; @color-list-accent: #F7F9FB; @color-list-norecords-text: @secondary-color; @color-list-hover-bg: @background-color-focus; @color-list-hover-bg-active: darken(@table-bg-active, 5%); @color-list-hover-text: @color-list-text-active; @color-list-active-bg: @color-grey-3; @color-list-active-text: @color-list-text-active; @color-list-active-sort: #c63e26; @color-list-grid: #E4E7E8; @color-list-container-bg: #ffffff; @color-status-list-text: #7e8c8d; ================================================ FILE: modules/backend/assets/less/core/variables/variables.zindex.less ================================================ // // "Windex" Z-Index Window Manager // -------------------------------------------------- // // Z-Index frequencies: // // 0-100 - Primary layer (body / content) // 100-200 - Primary menus / dropdowns // // 300-400 - Secondary layer (full screen) // 400-500 - Secondary menus / dropdowns // // 500-600 - Tertiary layer (popups) // 600-700 - Tertiary menus / dropdowns // // 1000-10000 - Reserved for frequency manager // // 10000+ - Always on top // // // Z-Indexes // -------------------------------------------------- // Primary @zindex-filter: 10; @zindex-button: 10; @zindex-form: 10; @zindex-checkbox: 10; @zindex-breadcrumb: 10; @zindex-chart: 10; @zindex-tab: 10; @zindex-loader: 10; @zindex-navbar: 100; @zindex-navbar-fixed: 110; // Secondary @zindex-fullscreen: 300; // Tertiary @zindex-modal-background: 500; @zindex-modal: 600; @zindex-popover: 600; @zindex-dropdown: 600; // Always on top @zindex-inspector: 10000; @zindex-datepicker: 10100; @zindex-flashmessage: 10300; @zindex-select: 10400; @zindex-alert: 10500; @zindex-snackbar: 10600; @zindex-tooltip: 10700; ================================================ FILE: modules/backend/assets/less/layout/fancylayout.less ================================================ @color-fancy-master-tabs-bg: var(--oc-fancy-tabs-bg); @color-fancy-master-tabs-active-text: @text-color; @color-fancy-master-tabs-inactive-text: rgba(255, 255, 255, .5); @color-fancy-master-panel-bg: @brand-secondary; @color-fancy-secondary-tabs-bg: @body-bg; @color-fancy-secondary-tabs-active-text: @text-color; @color-fancy-secondary-tabs-inactive-text: @color-text-grey-1; @color-fancy-primary-tabs-bg: #7F8C8D; @color-fancy-primary-tabs-inactive-text: @color-text-grey-1; @color-fancy-primary-tabs-active-text: @text-color; @color-fancy-primary-tabs-active-bg: @body-bg; @color-fancy-primary-tabs-inactive-bg: #d5d9d8; @color-fancy-form-tabless-fields-bg: @body-bg; @color-fancy-form-label: @primary-color; @color-fancy-form-text: @text-color; @color-fancy-form-text-selection: @brand-secondary; @color-fancy-form-placeholder: rgba(0, 0, 0, .5); @color-fancy-form-inactive-tab: transparent; :root, [data-bs-theme="light"] { --oc-fancy-tabs-bg: @brand-secondary; } [data-bs-theme="dark"] { --oc-fancy-tabs-bg: var(--oc-editor-tab-bg); } body.breadcrumb-fancy .control-breadcrumb, .control-breadcrumb.breadcrumb-fancy { margin-bottom: 0; margin-left: 15px; margin-top: 10px; margin-bottom: 10px; } .fancy-layout { // // Fancy form tabs // .tab-collapse-icon { position: absolute; display: block; text-decoration: none; outline: none; opacity: .6; transition: all 0.3s; font-size: 12px; color: @color-fancy-master-tabs-active-text; right: 11px; &:hover { text-decoration: none; opacity: 1; } &.primary { color: @color-fancy-secondary-tabs-bg; bottom: -25px; z-index: 100; .scaleAxes(1, -1); i { position: relative; display: block; } } // Disable for v2 &.tabless { display: none; } } .control-tabs, &.control-tabs { &.master-tabs { &:before, &:after { top: 13px; font-size: 14px; color: @color-fancy-master-tabs-inactive-text; } &:before { left: 8px; } &:after { right: 8px; } &.scroll-before:before { color: @color-fancy-master-tabs-active-text; } &.scroll-after:after { color: @color-fancy-master-tabs-active-text; } > div > div.tabs-container { background: @color-fancy-master-tabs-bg; padding-left: 20px; padding-right: 20px; > ul.nav-tabs { margin-left: -8px; > li { margin-left: -5px; padding-top: 3px; span.tab-close { top: 14px; right: -5px; left: auto; z-index: 110; font-family: sans-serif; color: rgba(255, 255, 255, 0.3); i { top: 4px; right: 1px; font-style: normal; font-weight: bold; font-size: 16px; } &:hover { color: white !important; } } a { border-bottom: none; background: transparent; font-size: 14px; color: @color-fancy-master-tabs-inactive-text; padding: 6px 0 0 24px!important; overflow: visible; text-decoration: none; &:hover { color: white; } > span.title { position: relative; display: inline-block; padding: 12px 5px 0 5px; height: 38px; font-size: 14px; z-index: 100; background-color: @color-fancy-form-inactive-tab; &:before, &:after { content: ' '; position: absolute; width: 20px; display: block; height: 37px; top: 0; z-index: 100; background-color: @color-fancy-form-inactive-tab; } &:before { left: -14px; border-radius: 8px 0 0 0; transform: skewX(-10deg); } &:after { right: -14px; border-radius: 0 8px 0 0; transform: skewX(10deg); } span { border-top: none; padding: 0; margin-top: 0; overflow: visible; } } &:before { z-index: 110; position: absolute; top: 18px; left: 22px; } &[class*=icon] > span.title { padding-left: 18px; } } &.active { top: 1px; a { z-index: 107; color: @color-fancy-master-tabs-active-text; } span.tab-close { color: rgba(var(--bs-body-color-rgb), 0.3); &:hover { color: @color-fancy-master-tabs-active-text !important; } } a > span.title { background-color: @color-fancy-form-tabless-fields-bg; z-index: 105; &:before { z-index: 107; background-color: @color-fancy-form-tabless-fields-bg; } &:after { background-color: @color-fancy-form-tabless-fields-bg; z-index: 107; } } } &[data-modified] { span.tab-close i { top: 5px; .hide-text(); color: inherit; &:before { .icon(@icon-circle-full); font-size: 9px; } } } &:first-child { margin-left: 0; } } } } &[data-closable] { > div > div.tabs-container { > ul.nav-tabs { > li { a > span.title { padding-right: 10px; } } } } } &.has-tabs { &:before, &:after {display: block;} } } &.secondary-tabs { // Target horizontal scroll indicators &:before { left: 5px; } &:after { right: 5px; } > div > ul.nav-tabs { position: relative; border-top: 1px solid @primary-border; background: @color-fancy-secondary-tabs-bg; padding-top: 10px; &:before { position: absolute; bottom: 0; height: 1px; width: 100%; z-index: @zindex-tab - 1; content: ' '; border-bottom: 2px solid @primary-border; } > li { border-right: none; padding-right: 0; margin-right: -10px; vertical-align: top; a { font-size: @font-size-base; font-weight: 600; padding-bottom: 3px; margin: 0; position: relative; top: -1px; z-index: @zindex-tab + 1; background: transparent; overflow: visible; border-bottom: 1px solid transparent; span { position: relative; display: inline-block; padding: 4px 25px 0px; .box-sizing(border-box); &:before, &:after { content: ''; display: none; border-top: 2px solid @primary-border; position: absolute; background: transparent; top: 0; z-index: -1; width: 20px; bottom: -2px; transform-origin: bottom; } &:before { left: 0; border-left: 2px solid @primary-border; .border-radius(8px 0 0 0); .transform( ~'skewX(-10deg)'); } &:after { right: 0; border-right: 2px solid @primary-border; .border-radius(0 8px 0 0); .transform( ~'skewX(10deg)'); } span { border-top: 2px solid transparent; margin-top: -4px; padding-left: 0; padding-right: 0; padding-top: 7px; } } } &:hover { a { color: @color-fancy-secondary-tabs-active-text; } } &:first-child { // Will cause issues when first child is hidden padding-left: 10px; } &:last-child { margin-right: 0; } &.active { a { z-index: @zindex-tab + 3; top: 0; > span.title { // z-index: @zindex-tab + 2; border-top-color: @primary-border; &:before, &:after { display: block; border-color: @primary-border; } span { border-top-color: @primary-border; } } &:before { position: absolute; bottom: -1px; height: 2.2px; right: 2px; left: 2px; content: ' '; background-color: @color-fancy-secondary-tabs-bg; } } &.tab-content-bg { a { span.title { &:before, &:after { background-color: @body-bg; } span { background-color: @body-bg; margin-left: -6px; padding-left: 6px; margin-right: -6px; padding-right: 6px; margin-bottom: -6px; padding-bottom: 6px; } } &:before { background-color: @body-bg; } } } } } } .tab-collapse-icon { .tab-collapse-icon(); &.primary { color: @color-fancy-master-tabs-active-text; top: 15px; right: 11px; bottom: auto; } } &.primary-collapsed { .tab-collapse-icon.primary { .scaleAxes(1, 1); } } } &.primary-tabs { border-top: 1px solid @primary-border; &.master-area { > div > ul.nav-tabs { .transition(background-color 0.5s); background: @body-bg; } } > div > ul.nav-tabs { background: @color-fancy-primary-tabs-bg; margin-left: 0 !important; margin-right: 0 !important; &:before { border-bottom-width: 1px; } > li { background: transparent; border: none; margin-right: -8px; &:first-child { margin-left: -15px; } a { background: transparent; border: none; padding: 3px 10px 3px; font-size: 14px; font-weight: 400; color: @color-fancy-primary-tabs-inactive-text; top: 2px; span.title { border-bottom: 2px solid transparent; border-top: none; padding: 0 7px 6px; &:before, &:after { display: none !important; } span { border-width: 0; vertical-align: top; } } &:before { top: 2px; bottom: -6px; } } &.active { a { color: @color-fancy-primary-tabs-active-text; font-weight: 600; &:before { display: none; } span.title { border-bottom-color: @brand-primary; } } } } } > .tab-content > .tab-pane { padding: @padding-standard @padding-standard 0 @padding-standard; &.pane-compact { padding: 0; } } &.collapsed { display: none; } } &.has-tabs { > div.tab-content { background: @body-bg; } } > div.tab-content { > div.tab-pane { padding: 0; &.padded-pane { padding: @padding-standard @padding-standard 0 @padding-standard; } } } } // // Forms and buttons // .form-tabless-fields:not(.not-fancy) { .clearfix(); position: relative; background: @color-fancy-form-tabless-fields-bg; padding: 10px 15px 0 15px; label { text-transform: uppercase; font-size: 12px; color: @color-fancy-form-label; margin-bottom: 0; } input[type=text] { background: transparent; border: none; color: @color-fancy-form-text; font-size: 24px; font-weight: 400; height: auto; padding: 0; box-shadow: none; border: 1px solid transparent; &:focus, &:hover { border: 1px solid @primary-border; } } .form-group { padding-bottom: 0; &.is-required { > label:after { display: none; } } .form-translatable { position: absolute; margin: 0; right: 3px; top: 28px; } } .tab-collapse-icon { .tab-collapse-icon(); &.tabless { top: 14px; } } &.collapsed { padding: 5px 23px 0 10px; .tab-collapse-icon { &.tabless { .scaleAxes(1, -1); } } .form-group:not(.collapse-visible) { display: none; } .form-buttons { margin-left: 10px; padding-bottom: 0; } } .loading-indicator-container { .loading-indicator { background-color: @color-fancy-form-tabless-fields-bg; color: @color-fancy-form-label; > span, > div { margin-left: 15px; } } } } .form-buttons { margin-top: 10px; padding-top: 5px; padding-bottom: 3px; margin-left: -15px; margin-right: -15px; padding-left: 10px; padding-right: 10px; border-top: 1px solid @primary-border; &.loading-indicator-container.in-progress { overflow: hidden; } .btn { padding: 6px; margin-right: 8px; background: transparent; color: @toolbar-color; font-size: @font-size-base; font-weight: normal; box-shadow: none; &:before { margin-right: 2px; } &:hover { background: @toolbar-focus-bg; } &:last-child { margin-right: 0; } &[class^="oc-icon-"], &[class*=" oc-icon-"] { &:before { opacity: 1; } } } } form.oc-data-changed { .btn.save { opacity: 1; } } // // Code editor // .field-codeeditor { border: none !important; .border-radius(0); .editor-code { .border-radius(0); } } // // Markdown Editor (Legacy) // .field-markdowneditor { border: none !important; } // // Rich editor // .field-richeditor { border: none; &, .fr-toolbar, .fr-wrapper { .border-radius(0); .border-top-radius(0); } } .secondary-content-tabs .field-richeditor { .fr-toolbar { background: @body-bg; } } } body.side-panel-not-fixed { .fancy-layout { .field-richeditor { border-left: none; } } } ================================================ FILE: modules/backend/assets/less/layout/flexlayout.less ================================================ .flex-layout-column { display: flex; flex-direction: column; &.absolute { position: absolute !important; } &.fill-container { position: absolute; left: 0; top: 0; width: 100%; height: 100%; } } .flex-layout-row { display: flex; flex-direction: row; } .flex-layout-column, .flex-layout-row { &.justify-center { justify-content: center; } &.align-center { align-items: center; align-content: center; } &.full-height { min-height: 100%; // height: 100%; } &.full-width { width: 100%; } &.full-height-strict { height: 100%; } } .flex-layout-item { margin: 0; &.fix { flex: 0 0 auto; } &.stretch { flex: 1 1 auto; } &.stretch-constrain { flex: 1; } &.center { align-self: center; } &.relative { position: relative; } &.layout-container { max-width: none; } } ================================================ FILE: modules/backend/assets/less/layout/flyout.less ================================================ .flyout-container { > .flyout-content { overflow: hidden; width: 0; left: 0!important; transition: width 0.1s; } } .flyout-overlay { width: 100%; height: 100%; top: 0; z-index: 5000; position: absolute; background-color: rgba(0,0,0,0); transition: background-color 0.3s; } .flyout-toggle { position: absolute; top: 20px; left: 0; width: 23px; height: 25px; background: @color-grey-1; cursor: pointer; .border-right-radius(4px); color: #bdc3c7; font-size: 10px; i { margin: 7px 0 0 6px; display: inline-block; } &:hover i { color: #ffffff; } } body.flyout-visible { overflow: hidden; .flyout-overlay { background-color: rgba(0,0,0,0.3); } } // Proxy container #layout-sidenav-responsive.has-toggle { position: relative; ul.nav { padding-left: 35px; } .flyout-toggle { top: 18px; } } ================================================ FILE: modules/backend/assets/less/layout/footer.less ================================================ @footer-zindex: 100; @footer-height: 60; #layout-footer { width: 100%; z-index: @footer-zindex; height: @footer-height + 0px; position: fixed; bottom: 0; color: @color-footer-text; background-color: @color-footer; border-top: 1px solid @color-footer-border; .brand, .tagline { margin: 10px; height: (@footer-height - 20) + 0px; line-height: (@footer-height - 20) + 0px; } .brand { float: left; font-size: 16px; .logo { margin: 0 10px; } .name { } } .tagline { float: right; p { color: lighten(@color-footer-text, 20%); } } } ================================================ FILE: modules/backend/assets/less/layout/form-with-sidebar.less ================================================ .form-with-sidebar { .form-with-sidebar-canvas { position: absolute; top: 0; bottom: 0; left: 0; right: 0; } > .form-sidebar { width: 300px; background: var(--bs-tertiary-bg); border-left: 1px solid @primary-border; } &.sidebar-width-350 > .form-sidebar { width: 350px; } &.sidebar-width-400 > .form-sidebar { width: 400px; } &.sidebar-width-450 > .form-sidebar { width: 450px; } &.sidebar-width-500 > .form-sidebar { width: 500px; } &.sidebar-width-550 > .form-sidebar { width: 550px; } &.sidebar-width-600 > .form-sidebar { width: 600px; } &.sidebar-width-650 > .form-sidebar { width: 650px; } &.sidebar-width-700 > .form-sidebar { width: 700px; } &.sidebar-width-750 > .form-sidebar { width: 750px; } } @media (max-width: @screen-md) { .form-with-sidebar { flex-direction: column-reverse; .form-with-sidebar-canvas { position: relative; } > .form-contents { height: auto; .control-breadcrumb { display: none; } } > .form-sidebar { width: 100% !important; height: auto; border-left: none; border-bottom: 1px solid @primary-border; .control-scrollbar { overflow: visible; height: auto; .scrollbar-scrollbar { display: none !important; } } } } } ================================================ FILE: modules/backend/assets/less/layout/formdocumentlayout.less ================================================ .form-document-layout { .control-tabs.primary-tabs:not(.is-nested) { > div > ul.nav-tabs { padding: 13px 0; background: @document-tabs-bg; border-bottom: 1px solid @primary-border; &:before { display: none; } > li { border-right: 1px solid @primary-border; border-bottom: none; margin: 0!important; padding: 0; &:first-child { margin-left: -12px!important; } &:last-child { border-right: none; } a { padding: 2px 12px 0; height: 24px; border: none; top: 0; &:before { display: none; } > span.title { padding: 0; margin: 0; &:before, &:after { display: none; } > span { &:before, &:after { display: none; } margin: 0; padding: 0; border-top: none; color: inherit; background-color: transparent; } } } &.active a { color: @brand-primary; } } } // Do not display primary tabs if there is just one tab &[data-single-tab] { > div > ul.nav-tabs { display: none!important; } } } .document-header .form-tabless-fields { .form-group.primary-title-field { .form-label, .form-translatable { display: none; } .form-control { display: block; font-size: 24px; width: 100%; border: 1px solid @body-bg; outline: none; background: transparent; color: @input-color; padding: 1px; &:not([disabled]):hover, &:not([disabled]):focus { border: 1px solid @input-border; box-shadow: none; } } span.form-control { opacity: .5; } } } div.primary-tabs-container > div > .layout-row { display: table-cell; .tab-pane.is-adaptive { padding-top: 0; } } .component-backend-document .document-progress-indicator { z-index: 1; } .form-group.span-adaptive { margin-left: -@padding-standard; margin-right: -@padding-standard; > .form-label, > .form-translatable { display: none; } } .record-management-controls { padding-left: 20px; padding-bottom: 20px; } } ================================================ FILE: modules/backend/assets/less/layout/layout.less ================================================ :root, [data-bs-theme="light"] { --oc-page-size-outer-bg: var(--bs-tertiary-bg); --oc-page-size-inner-bg: var(--bs-body-bg); --oc-page-size-border: var(--bs-border-color); } [data-bs-theme="dark"] { --oc-page-size-outer-bg: var(--bs-tertiary-bg); --oc-page-size-inner-bg: var(--bs-body-bg); --oc-page-size-border: var(--bs-border-color); } // // Common layout elements // -------------------------------------------------- @media (pointer: fine) { body.drag * { cursor: grab !important; } } // Used by sortable plugin body.dragging, body.dragging * { cursor: move !important; } body.loading, body.loading * { cursor: wait !important; } body.no-select { user-select: none; cursor: default !important; } // // Layout canvas // html, body { height: 100%; font-size: 14px; line-height: 1.42857143; /* The html and body elements cannot have any padding or margin. */ } body { -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } body.has-page-size { background: var(--oc-page-size-outer-bg); #layout-body { background: var(--oc-page-size-inner-bg); } &.has-sidenav-tree { #layout-body { border-right: 1px solid var(--oc-page-size-border); } } } #layout-canvas { min-height: 100%; height: 100%; } #layout-body { // Stops content escaping the flex box width: 0; } .layout-container, .padded-container { padding: @padding-standard @padding-standard 0 @padding-standard; // Container to sit flush to the element above .container-flush { padding-top: 0; } .padded-container-inset { margin-left: -@padding-standard; margin-right: -@padding-standard; } } .whiteboard { background: white; } [data-bs-theme="dark"] .whiteboard { background: #181a1e; } .layout-fill-container { position: absolute; left: 0; top: 0; width: 100%; height: 100%; } // // Calculated fixed width // [data-calculate-width] { > form, > div { display: inline-block; } } // // Layout styles // body.compact-container { .layout-container { padding: 0 !important; } } body.slim-container { .layout-container { padding-left: 0 !important; padding-right: 0 !important; } } ================================================ FILE: modules/backend/assets/less/layout/mainmenu.items.less ================================================ @color-sidebarnav-counter-bg: #ff3e1d; @color-sidebarnav-counter-text: #ffffff; ul.mainmenu-items { padding: 0; margin: 0; font-size: 0; white-space: nowrap; user-select: none; > li.mainmenu-item { display: block; } } .mainmenu-item { display: inline-block; position: relative; vertical-align: top; user-select: none; > a, > .mainmenu-item-container { // height: define in subclass; // padding: define in subclass; display: flex; flex-direction: row; align-items: baseline; text-decoration: none!important; outline: none; color: @mainnav-color; &:after { opacity: .5; } } .nav-label { opacity: .5; font-size: @font-size-base; white-space: nowrap; text-overflow: ellipsis; flex: 1 1 auto; } .nav-icon { opacity: .5; position: absolute; // Don't let icon fonts height affect the layout top: 0; display: inline-block; height: 100%; color: @mainnav-icon-color; // line-height: define in subclass; // left: define in subclass; // width: define in subclass; .svg-icon { // height: define in subclass; // width: define in subclass; .svg-fix-load(); position: relative; } i { // line-height: define in subclass; // font-size: define in subclass; vertical-align: middle; display: block; height: 100%; &:before { position: relative; // top: define in subclass; } } } span.counter { flex: 0 0 auto; position: relative; top: 1px; padding: 2px 2px; background-color: @color-sidebarnav-counter-bg; color: @color-sidebarnav-counter-text; font-size: 14px; line-height: 100%; opacity: 1; border-radius: 4px; transform: scale(1); transition: transform 0.3s; margin-left: 6px; &.empty { transform: scale(0); opacity: 0; padding: 0; margin-left: 0!important; } } &.has-subitems { > a:after, > .mainmenu-item-container:after { // .backend-icon-sprite-pseudo(define in subclass); display: inline-block; } span.counter { right: 17px } } &.mainmenu-account { .nav-icon { opacity: 1; width: 42px; } } &.active, &.active-dropdown { .nav-label, .nav-icon, > a:after { opacity: 1; } } &.has-solidicon .nav-icon { opacity: 1; } } body:not(.drag) { .mainmenu-item:hover { .nav-label, .nav-icon, > a:after { opacity: 1; } } ul.mainmenu-items.hover-effects { li > a { &:hover { background: @brand-primary; color: white; } } } } @media (pointer: coarse) { .mainmenu-item { .nav-label { font-size: @font-size-base + 2; } } } ================================================ FILE: modules/backend/assets/less/layout/mainmenu.left.less ================================================ @mainmenu-mode-left-width: 63px; .left-side-menu-container { display: none !important; width: @mainmenu-mode-left-width; .layout-mainmenu { position: fixed; height: 100%; width: @mainmenu-mode-left-width; .main-menu-container { position: absolute; width: 100%; height: 100%; .navbar { position: absolute; padding-right: 0; width: 100%; height: 100%; flex-direction: column; &.control-toolbar { padding-bottom: 0; [data-control=toolbar] { width: auto; } .toolbar-item { padding-right: 0; padding-bottom: 20px; &:last-child { padding-bottom: 0; } &:before { display: none; } &:after { content: ''; position: absolute; bottom: -5px; left: 0; width: 100%; height: 9px; top: auto; display: block!important; background: transparent url(../../images/scrollable-panel-shadow.png) repeat-x left top; transition: opacity 0.1s; opacity: 0; } &.scroll-after:after { opacity: 1; } &.fix-width:after { display: none !important; } } [data-control="toolbar"] { height: 100%; } } ul.mainmenu-items[data-main-menu] { margin-left: 10px; &.mainmenu-general { margin-left: 15px; } &.mainmenu-extras > li.mainmenu-item.mainmenu-preview { > a { padding-left: 0; &:after { top: 27px; right: 15px; } .nav-label { padding-left: 13px; } .nav-icon { left: 5px; position: static; width: 40px; i { position: relative; top: -15px; width: 40px; } } .nav-icon .nav-colorpicker { top: 5px; } } } > li.mainmenu-item { display: block; margin-right: 0; margin-bottom: 15px; text-align: center; &.mainmenu-toggle { display: none; } &.mainmenu-account { .nav-label { position: relative; top: 5px; padding-left: 11px; } > a:after { top: 17px; right: 15px; } .nav-label, > a:after { display: none; } } .nav-icon i { display: inline-block; } .nav-label { padding-left: 10px; text-align: left; // visibility: hidden; display: none; } > a { padding-right: 15px; width: 100%; > span.counter { left: -20px; } &:after { top: 18.4px; // visibility: hidden; display: none; } } &.has-subitems > a:after { transform: rotate(-90deg); } } } } } } &.width-check { .layout-mainmenu .main-menu-container .navbar.control-toolbar { div[data-control="toolbar"] { width: auto !important; } ul.mainmenu-items[data-main-menu] > li.mainmenu-item { .nav-label, > a:after { visibility: hidden; display: block; } } } } } body.reveal-left-side-menu { .left-side-menu-container { .layout-mainmenu { z-index: @zindex-popover - 1; box-shadow: 10px 0 10px rgba(0,0,0,0.2); .main-menu-container .navbar { [data-control="toolbar"] { width: 100%; } ul.mainmenu-items[data-main-menu] { > li.mainmenu-item { .nav-label { // visibility: visible; display: block; } a:after { // visibility: visible; display: block; } > a > span.counter { left: -10px; } } } } } } } body.left-menu-submenu-displayed { overflow: hidden; ul.mainmenu-items.mainmenu-submenu-dropdown { box-shadow: 10px 0 15px rgba(0, 0, 0, 0.3); border-bottom-left-radius: 0; border-top-right-radius: 6px; margin-top: 10px; li { &:last-child { margin-bottom: 6px; } &:first-child { margin-top: 6px; } } } } body.main-menu-left { .left-side-menu-container { display: block !important; } } div.mainmenu-leftmenu-overlay { &:extend(div.mainmenu-submenu-overlay); z-index: @zindex-popover - 2!important; } ================================================ FILE: modules/backend/assets/less/layout/mainmenu.less ================================================ // // Top navigation bar // -------------------------------------------------- @mainmenu-mode-tile-height: 78px; @mainmenu-mode-inline-height: 70px; div.mainmenu-account-avatar { overflow: hidden; border-radius: 9px; border: 1px solid rgba(236, 240, 241, 0.1); display: inline-block; width: 42px; height: 42px; vertical-align: middle; img { width: 42px; height: 42px; display: block; } } .mainmenu-account { &.active-dropdown div.mainmenu-account-avatar { box-shadow: 0 0 4px 0 @link-color; } } .layout-mainmenu { .control-toolbar .toolbar-item.toolbar-primary { &:before { left: 0; } &:after { right: 0; } } } ================================================ FILE: modules/backend/assets/less/layout/mainmenu.logo.less ================================================ :root { --oc-nav-logo-offset-top: -2px; --oc-nav-logo-offset-start: 0; --oc-nav-logo-opacity: .5; } .layout-mainmenu .navbar.has-logo { .toolbar-logo { position: relative; } ul.mainmenu-items[data-main-menu] { margin-left: 10px; li.is-dashboard { display: none; } } .toolbar-item.toolbar-primary { &:before { left: -5px; } } &.navbar-mode-tile { .mainmenu-logo { padding-top: 20px; } } } .mainmenu-logo { display: block; padding-top: 15px; padding-left: 20px; padding-right: 10px; .nav-logo { height: 40px; position: relative; top: var(--oc-nav-logo-offset-top); left: var(--oc-nav-logo-offset-start); opacity: var(--oc-nav-logo-opacity); } &.active, &.active-dropdown, &:hover { .nav-logo { opacity: 1; } } } @media (max-width: @screen-sm) { .mainmenu-logo { display: none; } } ================================================ FILE: modules/backend/assets/less/layout/mainmenu.responsive.less ================================================ #layout-mainmenu-responsive-container { position: fixed; top: 0; right: 0; width: 0; max-width: 100%; height: 100%; z-index: @zindex-popover + 1; overflow: hidden; transition: width .25s ease-in-out; nav.responsive-menu-pane { z-index: @zindex-popover + 2; background-color: @mainnav-bg; transition: margin .25s ease-in-out; position: absolute; top: 0; right: 0; width: 100%; height: 100%; border-left: 1px solid rgba(255,255,255,0.1); // margin-right: -100%; display: flex; flex-direction: column; &.mainmenu-pane { box-shadow: -10px 0 10px rgba(0,0,0,0.2); } .menu-header { padding: 25px; flex: 0 0 auto; .mainmenu-item { .mainmenu-item-container { padding-left: 50px; white-space: nowrap; .nav-icon { left: 0; } .company-name, .user-name { text-overflow: ellipsis; overflow: hidden; } .company-name { font-size: @font-size-base + 2; } .user-name { color: rgba(255,255,255,.7); cursor: pointer; &:hover { color: @mainnav-color; } } } > a { cursor: default; pointer-events: none; padding: 7px 10px 7px 43px; .nav-icon { line-height: 34px; left: 0; width: 30px; .svg-icon { height: 30px; width: 30px; } i { line-height: inherit; font-size: 30px; } } .counter { display: none; } .nav-label { display: block; overflow: hidden; width: 100%; } } &.has-subitems{ .mainmenu-item-container:after { bottom: 4px; cursor: pointer; } } } &.has-back-link { .mainmenu-item { margin-left: 36px; } .go-back-link { display: block; width: 24px; height: 34px; position: absolute; left: 25px; top: 24px; z-index: @zindex-popover + 3; .hide-text(); &:after { .backend-icon-sprite-pseudo(24px, 11px, 52px, 0); position: absolute; left: 0; top: 12px; } } } .close-link { display: none; position: absolute; width: 24px; height: 24px; left: 19px; top: 33px; .hide-text(); z-index: @zindex-popover + 3; &:after { .backend-icon-sprite-pseudo(11px, 11px, 96px, 0); position: absolute; left: 6px; top: 7px; } } } .scrollable-panel-container { flex: 1 1 auto; } .mainmenu-item { &.has-subitems { > a, > .mainmenu-item-container { padding-right: 30px; &:after { .backend-icon-sprite-pseudo(24px, 11px, 22px, 0); position: absolute; right: 0; // bottom: xxx; } } } } .mainmenu-items { &.scrollable { overflow: hidden; } > .mainmenu-item { margin-bottom: 6px; > a { padding: 7px 25px 7px 60px; } &.has-subitems > a { padding-right: 55px; &:after { right: 25px; top: 11px; } } .nav-label { display: block; overflow: hidden; } .nav-icon { left: 25px; width: 20px; line-height: 34px; .svg-icon { width: 24px; } i { font-size: 24px; line-height: inherit; } } .counter { top: 0; } } } &.submenu-pane { z-index: @zindex-popover + 3; margin-right: -100%; box-shadow: none; .menu-header { &[data-submenu-index=account] { .go-back-link { top: 30px; } .mainmenu-item { height: 42px; } } .mainmenu-item { .mainmenu-item-container { .company-name { display: none; } .user-name { color: @mainnav-color; position: relative; top: 11px; cursor: default; } } } } .mainmenu-item.section-user-title { display: none; } .mainmenu-item { &.divider { height: 1px; margin: 5px 0; background: rgba(255, 255, 255, 0.1); } &.section-title { color: white; padding: 7px 17px; white-space: nowrap; font-weight: 600; .nav-label { opacity: .5; margin-right: 0; display: block; overflow: hidden; max-width: 250px; vertical-align: middle; } } } } } } body.responsive-submenu-displayed { #layout-mainmenu-responsive-container .responsive-menu-pane { &.mainmenu-pane { margin-right: 100%; } &.submenu-pane { margin-right: 0; } } } body.responsive-menu-displayed { overflow: hidden; #layout-mainmenu-responsive-container { width: 300px; box-shadow: -10px 0 10px rgba(0,0,0,0.2); } } @media (pointer: coarse) { #layout-mainmenu-responsive-container { nav.responsive-menu-pane { .mainmenu-items { > .mainmenu-item { margin-bottom: 12px; .nav-icon { line-height: 38px; } } } &.mainmenu-pane .menu-header { padding-left: 60px; .close-link { display: block; } } } } } @media (max-width: @mobile-breakpoint-max) { body.responsive-menu-displayed { #layout-mainmenu-responsive-container { width: @mobile-breakpoint-max; } } } ================================================ FILE: modules/backend/assets/less/layout/mainmenu.submenu.dropdown.less ================================================ ul.mainmenu-items.mainmenu-submenu-dropdown { display: none; position: absolute; background: @mainnav-bg; box-shadow: 0 10px 15px rgba(0, 0, 0, 0.3); z-index: @zindex-popover+1; border-bottom-left-radius: 6px; border-bottom-right-radius: 6px; user-select: none; padding: 0; margin: 0; &.show { display: block; } > li.mainmenu-item { a { padding: 7px 17px 7px 47px; } .nav-label, .nav-icon { opacity: 1; } .nav-icon { left: 17px; width: 20px; line-height: 34px; .svg-icon { width: 20px; } i { font-size: 20px; line-height: inherit; } } span.counter { font-size: 12px; padding: 2px 3px; margin: 2px 0 0 10px; } &:last-child { margin-bottom: 6px; } &.divider { height: 1px; margin: 5px 0; background: rgba(255, 255, 255, 0.1); } &.section-title { color: white; padding: 7px 17px; white-space: nowrap; font-weight: 600; .nav-label { margin-right: 0; display: block; overflow: hidden; max-width: 250px; vertical-align: middle; } } } // Selectable bullets > li.mainmenu-item.has-bullet { &.is-selected { a:before { content: ""; background-color: white; border-radius: 10px; position: absolute; top: 50%; left: 21px; height: 8px; width: 8px; margin-top: -4px; } } } // Flags used in dropdowns > li.mainmenu-item.has-flag { .nav-label { padding-right: 25px; } .nav-icon.nav-icon-flag { top: 2px; left: auto; right: 17px; i { opacity: 1; font-size: 14px; display: inline-block; height: 14px; border-radius: 2px; box-shadow: inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), 0.2); } } } } div.mainmenu-submenu-overlay { position: fixed; z-index: @zindex-popover; left: 0; top: 0; width: 100%; height: 100%; display: none; background: rgba(0,0,0,0.01); opacity: 0.01; &.show { display: block; } } @media (pointer: coarse) { ul.mainmenu-items { &.mainmenu-submenu-dropdown { > li.mainmenu-item { .nav-icon { line-height: 38px; } } } } } ================================================ FILE: modules/backend/assets/less/layout/mainmenu.top.less ================================================ .layout-mainmenu { .navbar { padding: 0 20px 0 0; height: @mainmenu-mode-inline-height; background-color: @mainnav-bg; [data-control="toolbar"] { position: absolute; } ul.mainmenu-items[data-main-menu] { margin-left: 20px; margin-top: 7px; > li.mainmenu-item { display: inline-block; margin-right: 15px; &:last-child { margin-right: 0; } > a { height: 50px; padding: 15px 10px 0 38px; } &.has-subitems { .nav-label { padding-right: 17px; } > a:after { .icon-OctoFont(); content: @icon-angle-down-arrow; position: absolute; right: 6px; top: 19.4px; font-size: 19.5px; } } .nav-label { font-size: @font-size-base + 2; } .nav-icon { line-height: 52px; left: 0; width: 30px; text-align: center; .svg-icon { height: 30px; width: 30px; } i { line-height: inherit; font-size: 30px; } } .nav-icon .nav-colorpicker { width: 0; height: 0; background-color: transparent; border-right-color: var(--background-color); border-bottom-color: var(--background-color); border-top-color: var(--foreground-color); border-left-color: var(--foreground-color); border-width: 10px; border-style: solid; border-radius: 20px; display: inline-block; position: relative; top: 10px; &:after { content: ""; top: -10px; left: -10px; width: 20px; height: 20px; position: absolute; box-shadow: inset 0 0 0 1px rgba(var(--bs-body-bg-rgb), 0.2); border-radius: 20px; } } &.mainmenu-preview > a { padding-left: 34px; } &.mainmenu-preview:not(.has-nolabel) > a { padding-right: 15px; &:after { right: 11px; } } &.mainmenu-taskbar > a { padding-right: 0; } } &.mainmenu-extras { margin-left: 10px; > li.mainmenu-item { &.mainmenu-taskbar, &.mainmenu-preview { margin-right: 0; .nav-icon { left: 0; i { font-size: 20px; &:before { top: 1px; } } } } &.mainmenu-account { margin-right: 0; > a { padding: 0; margin-top: 2px; width: 42px; // Hide caret &:after { display: none; } } .nav-icon { left: 0; width: auto; position: static; } } } li.mainmenu-toggle { display: none; } } } } } @media (min-width: @screen-sm-min) { .layout-mainmenu .navbar { &.navbar-mode-icons { ul.mainmenu-items[data-main-menu] { > li.mainmenu-item.has-subitems > a:after, .nav-label { display: none; } .nav-icon { text-align: center; } } } &.navbar-mode-tile { height: @mainmenu-mode-tile-height; ul.mainmenu-items[data-main-menu] { margin-top: 0; > li.mainmenu-item { text-align: center; > a { padding: 11px 15px 10px; height: auto; display: block; } .nav-label { display: block; overflow: hidden; max-width: 150px; } &.has-subitems { .nav-label { padding-right: 17px; } a:after { margin: 0; top: auto; right: 11px; bottom: 8.9px } } .nav-icon { display: block; height: 30px; width: auto; position: static; line-height: 1; margin-bottom: 4px; .svg-icon, i { display: inline-block; } i:before { margin-right: 0; } } .nav-icon .nav-colorpicker { top: 7px; } span.counter { margin: 0; position: absolute; top: 8px; left: 50%; } &.mainmenu-account { > a { padding: 12px 0 0 0; margin-top: 1px; width: auto; } .nav-icon { height: auto; } div.mainmenu-account-avatar { width: 52px; height: 52px; img { width: 50px; height: 50px; } } } &.mainmenu-preview.has-nolabel { > a { width: auto; margin-top: 14px; } } } } } &.navbar-mode-text { ul.mainmenu-items.mainmenu-general > li.mainmenu-item { > a { padding: 15px 10px 0 10px; } .nav-icon { display: none; } } } } } .main-menu-collapse() { ul.mainmenu-items.mainmenu-general > li.mainmenu-item { &:not(.active) { display: none; } > a { cursor: default; pointer-events: none; } span.counter, &.has-subitems > a:after { display: none; } } ul.mainmenu-items[data-main-menu] { &.mainmenu-extras { li.mainmenu-toggle { display: inline-block; margin-right: -10px; > a { .hide-text(); width: 50px; position: relative; opacity: .7; &:before { .backend-icon-sprite-pseudo(20px, 18px, 0, 0); position: absolute; top: 19px; left: 18px; } &:hover { opacity: 1; } } } } } } @media (max-width: @screen-xs-max) { #layout-mainmenu { .navbar { .main-menu-collapse(); } } } #layout-mainmenu .navbar.navbar-mode-collapse { .main-menu-collapse(); } body.main-menu-left { #layout-mainmenu .main-menu-container { display: none; } } ================================================ FILE: modules/backend/assets/less/layout/outerlayout.less ================================================ // Layout for "Outside" pages, such as the Login screen // html body.outer { background: white; } body.outer { .outer-form-cell { width: 350px; padding: @padding-standard * 2; border-right: 1px solid #ECF0F1; vertical-align: top; } .outer-theme-cell { background-color: #FEF6EB; vertical-align: middle; text-align: center; overflow: hidden; img { display: inline-block; margin: 0 auto; } } h1 { margin: 0 0 20px 0; padding: 0; text-align: center; .hide-text(); img { max-width: 180px; width: 100%; display: inline-block; } } .outer-form-container { margin: 0 auto; p { color: @color-grey-7; } h2 { font-size: 22px; font-family: @font-family-serif; margin: 0; padding: 10px 0 30px 0; color: @color-grey-7; text-align: center; &:empty { padding: 0; } &:after { content: ''; display: block; height: 2px; width: 60px; margin: 30px auto 20px; background: @color-text-grey-1; } } .forgot-password { margin-top: 8px; a { color: @color-text-grey-1; text-decoration: underline; } } // Fix for some third-party plugins // .horizontal-form { input.form-control { margin-bottom: 20px; } + .pull-right.forgot-password { margin-top: -47px; position: relative; } } } } body.outer.setup .outer-form-cell { width: 500px; } @media (max-width: @screen-xs) { body.outer { .outer-form-cell { width: 100% !important; } .outer-theme-cell { display: none; } } } ================================================ FILE: modules/backend/assets/less/layout/sidenav-responsive.less ================================================ .layout-sidenav.sidenav-responsive { position: static; height: 60px; ul { padding: 13px 20px 0 20px; overflow: visible; > li.mainmenu-item { display: inline-block; margin: 0 10px 0 0; > a span.counter { position: relative; top: 0; right: 0; } &.divider { height: 60px; width: 1.4px; margin: -13px 10px 0 0; border-left: 1px solid @border-color; + .section-title { margin-left: -10px; } } &.sidebar-button { margin-bottom: 0; margin-right: 25px; > a { margin: 0; height: 34px; padding: 7px 33px 0 13px; .nav-icon { top: 0; } } } } > li.mainmenu-item:not(.sidebar-button) { > a { border-radius: 20px; padding: 7px 10px 7px 41px; .nav-icon { left: 15px; } } &.active { > a { border-left: none; } } } } } .responsive-sidebar-toolbar { background: @sidebar-bg; &:before, &:after { display: none !important; } } .secondary-nav > .control-toolbar { padding-bottom: 0; } .secondary-nav { display: none; } body:not(.drag) { .layout-sidenav.sidenav-responsive { ul > li.mainmenu-item:not(.sidebar-button) > a:hover { background: @sidebar-hover-bg; } } } body.sidenav-responsive { .secondary-nav { display: block; } } @media (max-width: @screen-xs-max) { .secondary-nav { display: block; } } ================================================ FILE: modules/backend/assets/less/layout/sidenav.less ================================================ // // Side navigation bar // -------------------------------------------------- .layout-sidenav-container { > .layout-sidenav-spacer { position: relative; height: 100%; width: 240px; } } nav.layout-sidenav { position: absolute; height: 100%; width: 100%; box-sizing: border-box; font-size: @font-size-base; background: @sidebar-bg; ul { position: relative; margin: 0; padding: 25px 25px 25px 0; height: 100%; overflow: hidden; > li.mainmenu-item { margin: 0 0 10px 0; > a { padding: 7px 10px 7px 58px; border-top-right-radius: 20px; border-bottom-right-radius: 20px; margin: 0; transition: padding 0.1s; display: flex; flex-direction: row; &:hover { background: transparent; } .nav-icon { left: 25px; width: 20px; line-height: 34px; opacity: 1; text-align: center; .svg-icon { width: 20px; -webkit-filter: grayscale(100%) invert(100%); filter: grayscale(100%) invert(100%); } i { font-size: 20px; line-height: inherit; color: @sidebar-color; } } .nav-label { color: @sidebar-color; font-size: @font-size-base; opacity: 1; overflow: hidden; } span.counter { position: absolute; top: 10px; right: 10px; font-size: 12px; transition: all 0.1s; } } &.has-counter > a { padding-right: 25px; } &:last-child { margin-bottom: 0; } &.divider { height: 1px; margin: 5px 0 10px; background: @primary-border; margin-right: -25px; } &.section-title { color: @sidebar-color; padding: 7px 0 7px 17px; white-space: nowrap; font-weight: 600; margin-bottom: 0; transition: margin 0.1s ease-in-out; transition-delay: .25s; .nav-label { opacity: 1; margin-right: 0; display: block; overflow: hidden; max-width: 250px; vertical-align: middle; } } &.active { > a { background: @sidebar-active-bg !important; border-left: 3px solid @sidebar-active-border; padding-left: 55px; .nav-label { color: @sidebar-active-color; font-weight: 600; } .nav-icon { opacity: 1; i { color: @sidebar-active-color; } } } } &.sidebar-button { margin-bottom: 25px; > a { margin-left: 15px; background: @brand-primary; padding: 9px 38px 0 13px; border-radius: 5px; transition: all 0.1s ease-in-out; transition-property: border-radius, padding; height: 40px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.27); min-width: 40px; &:hover { background: @primary-darker; } &:active { box-shadow: none; } .nav-icon { transition: width 0.1s ease-in-out; transition-delay: .25s; width: 40px; top: 3px; right: 0; left: auto; text-align: center; .svg-icon, i { color: white; } } .nav-label { transition: opacity 0.1s ease-in-out; transition-delay: .25s; opacity: 1; color: white; font-weight: 600; } } &.active > a { background: @brand-primary !important; &:hover { background: @primary-darker !important; } } } } } } @media (max-width: @screen-md-max) { .layout-sidenav-container > .layout-sidenav-spacer { width: 70px; } #layout-sidenav { transition: width 0.1s, box-shadow 0.1s ease-in-out; box-shadow: none; } #layout-sidenav:not(:hover) { ul { > li.mainmenu-item { > a { padding-right: 0; .nav-label { visibility: hidden; } span.counter { top: -8px; right: 1px; } } &.section-title { transition: none; margin-right: -15px; } &.sidebar-button > a { margin-left: 15px; border-radius: 25px; width: 40px; padding: 9px 13px 0 0; .nav-label { transition: none; opacity: 0; } .nav-icon { transition: none; width: 20px; } } } } } #layout-sidenav:hover { z-index: 20; width: 240px; box-shadow: 5px 0 5px rgba(0,0,0,0.1); transition-delay: .25s; ul > li.mainmenu-item > a { transition-delay: .25s; } ul > li.mainmenu-item > a span.counter { top: 9px; right: 10px; transition-delay: .25s; } } } body:not(.drag) { #layout-sidenav { ul > li.mainmenu-item:not(.sidebar-button) > a:hover { background: @sidebar-hover-bg; } } } .hide-sidenav() { .layout-sidenav-container { display: none!important; } } body.sidenav-responsive { .hide-sidenav(); } @media (max-width: @screen-xs-max) { .hide-sidenav(); } ================================================ FILE: modules/backend/assets/less/layout/sidepanel.less ================================================ // // Side panel // -------------------------------------------------- #layout-side-panel { border-right: 1px solid @primary-border; .sidepanel-content-header { background: @color-grey-3; font-size: 15px; padding: 12px 20px 13px; position: relative; } } body.display-side-panel { #layout-side-panel { display: block; position: absolute; // This needs to be higher than the dropdown overlay, otherwise the // mouseout event fires and sidebar hides when opening a dropdown. z-index: @zindex-dropdown; width: 350px; border-right: none; .box-shadow(3px 0px 3px 0 rgba(0, 0, 0, 0.1)); } } [data-bs-theme="dark"] { #layout-side-panel .sidepanel-content-header { background: @secondary-bg; } } ================================================ FILE: modules/backend/assets/less/october.less ================================================ // // Boot // @import "core/boot.less"; @import "core/utility.less"; @import "core/animations.less"; // // Backend Components // @import "../foundation/controls/build.less"; @import "../foundation/elements/build.less"; @import "../foundation/migrate/build.less"; // // Global Widgets // @import "../../widgets/lists/assets/less/list.less"; @import "../../widgets/filter/assets/less/filter.less"; @import "../../widgets/form/assets/less/form.less"; // // October Controls // @import "core/boot.less"; @import "controls/simplelist.less"; @import "controls/scrollbar.less"; @import "controls/scrollable-panel.less"; @import "controls/filelist.less"; @import "controls/common.less"; @import "controls/reportwidgets.less"; @import "controls/treelist.less"; @import "controls/sidenav-tree.less"; @import "controls/panels.less"; @import "controls/selector-group.less"; @import "controls/tree-path.less"; @import "controls/namevaluelist.less"; @import "controls/scrollpad.less"; @import "controls/svg-icons.less"; @import "controls/snackbars.less"; @import "controls/tooltips.less"; @import "controls/backend-toolbar-buttons.less"; @import "controls/menu-mode-selector.less"; @import "controls/color-mode-selector.less"; @import "controls/onboarding.less"; // Layout @import "layout/layout.less"; @import "layout/flexlayout.less"; @import "layout/mainmenu.items.less"; @import "layout/mainmenu.top.less"; @import "layout/mainmenu.less"; @import "layout/mainmenu.left.less"; @import "layout/mainmenu.submenu.dropdown.less"; @import "layout/mainmenu.responsive.less"; @import "layout/mainmenu.logo.less"; @import "layout/sidenav.less"; @import "layout/sidenav-responsive.less"; @import "layout/sidepanel.less"; @import "layout/footer.less"; @import "layout/outerlayout.less"; @import "layout/fancylayout.less"; @import "layout/formdocumentlayout.less"; @import "layout/form-with-sidebar.less"; @import "layout/flyout.less"; ================================================ FILE: modules/backend/assets/vendor/daterangepicker/README.md ================================================ # Date Range Picker ![Improvely.com](https://i.imgur.com/UTRlaar.png) This date range picker component creates a dropdown menu from which a user can select a range of dates. I created it while building the UI for [Improvely](http://www.improvely.com), which needed a way to select date ranges for reports. Features include limiting the selectable date range, localizable strings and date formats, a single date picker mode, a time picker, and predefined date ranges. ## [Documentation and Live Usage Examples](http://www.daterangepicker.com) ## [See It In a Live Application](https://awio.iljmp.com/5/drpdemogh) ## License The MIT License (MIT) Copyright (c) 2012-2019 Dan Grossman Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: modules/backend/assets/vendor/daterangepicker/daterangepicker.css ================================================ .daterangepicker { position: absolute; color: inherit; background-color: #fff; border-radius: 4px; border: 1px solid #ddd; width: 278px; max-width: none; padding: 0; margin-top: 7px; top: 100px; left: 20px; z-index: 3001; display: none; font-family: arial; font-size: 15px; line-height: 1em; } .daterangepicker:before, .daterangepicker:after { position: absolute; display: inline-block; border-bottom-color: rgba(0, 0, 0, 0.2); content: ''; } .daterangepicker:before { top: -7px; border-right: 7px solid transparent; border-left: 7px solid transparent; border-bottom: 7px solid #ccc; } .daterangepicker:after { top: -6px; border-right: 6px solid transparent; border-bottom: 6px solid #fff; border-left: 6px solid transparent; } .daterangepicker.opensleft:before { right: 9px; } .daterangepicker.opensleft:after { right: 10px; } .daterangepicker.openscenter:before { left: 0; right: 0; width: 0; margin-left: auto; margin-right: auto; } .daterangepicker.openscenter:after { left: 0; right: 0; width: 0; margin-left: auto; margin-right: auto; } .daterangepicker.opensright:before { left: 9px; } .daterangepicker.opensright:after { left: 10px; } .daterangepicker.drop-up { margin-top: -7px; } .daterangepicker.drop-up:before { top: initial; bottom: -7px; border-bottom: initial; border-top: 7px solid #ccc; } .daterangepicker.drop-up:after { top: initial; bottom: -6px; border-bottom: initial; border-top: 6px solid #fff; } .daterangepicker.single .daterangepicker .ranges, .daterangepicker.single .drp-calendar { float: none; } .daterangepicker.single .drp-selected { display: none; } .daterangepicker.show-calendar .drp-calendar { display: block; } .daterangepicker.show-calendar .drp-buttons { display: block; } .daterangepicker.auto-apply .drp-buttons { display: none; } .daterangepicker .drp-calendar { display: none; max-width: 270px; } .daterangepicker .drp-calendar.left { padding: 8px 0 8px 8px; } .daterangepicker .drp-calendar.right { padding: 8px; } .daterangepicker .drp-calendar.single .calendar-table { border: none; } .daterangepicker .calendar-table .next span, .daterangepicker .calendar-table .prev span { color: #fff; border: solid black; border-width: 0 2px 2px 0; border-radius: 0; display: inline-block; padding: 3px; } .daterangepicker .calendar-table .next span { transform: rotate(-45deg); -webkit-transform: rotate(-45deg); } .daterangepicker .calendar-table .prev span { transform: rotate(135deg); -webkit-transform: rotate(135deg); } .daterangepicker .calendar-table th, .daterangepicker .calendar-table td { white-space: nowrap; text-align: center; vertical-align: middle; min-width: 32px; width: 32px; height: 24px; line-height: 24px; font-size: 12px; border-radius: 4px; border: 1px solid transparent; white-space: nowrap; cursor: pointer; } .daterangepicker .calendar-table { border: 1px solid #fff; border-radius: 4px; background-color: #fff; } .daterangepicker .calendar-table table { width: 100%; margin: 0; border-spacing: 0; border-collapse: collapse; } .daterangepicker td.available:hover, .daterangepicker th.available:hover { background-color: #eee; border-color: transparent; color: inherit; } .daterangepicker td.week, .daterangepicker th.week { font-size: 80%; color: #ccc; } .daterangepicker td.off, .daterangepicker td.off.in-range, .daterangepicker td.off.start-date, .daterangepicker td.off.end-date { background-color: #fff; border-color: transparent; color: #999; } .daterangepicker td.in-range { background-color: #ebf4f8; border-color: transparent; color: #000; border-radius: 0; } .daterangepicker td.start-date { border-radius: 4px 0 0 4px; } .daterangepicker td.end-date { border-radius: 0 4px 4px 0; } .daterangepicker td.start-date.end-date { border-radius: 4px; } .daterangepicker td.active, .daterangepicker td.active:hover { background-color: #357ebd; border-color: transparent; color: #fff; } .daterangepicker th.month { width: auto; } .daterangepicker td.disabled, .daterangepicker option.disabled { color: #999; cursor: not-allowed; text-decoration: line-through; } .daterangepicker select.monthselect, .daterangepicker select.yearselect { font-size: 12px; padding: 1px; height: auto; margin: 0; cursor: default; } .daterangepicker select.monthselect { margin-right: 2%; width: 56%; } .daterangepicker select.yearselect { width: 40%; } .daterangepicker select.hourselect, .daterangepicker select.minuteselect, .daterangepicker select.secondselect, .daterangepicker select.ampmselect { width: 50px; margin: 0 auto; background: #eee; border: 1px solid #eee; padding: 2px; outline: 0; font-size: 12px; } .daterangepicker .calendar-time { text-align: center; margin: 4px auto 0 auto; line-height: 30px; position: relative; } .daterangepicker .calendar-time select.disabled { color: #ccc; cursor: not-allowed; } .daterangepicker .drp-buttons { clear: both; text-align: right; padding: 8px; border-top: 1px solid #ddd; display: none; line-height: 12px; vertical-align: middle; } .daterangepicker .drp-selected { display: inline-block; font-size: 12px; padding-right: 8px; } .daterangepicker .drp-buttons .btn { margin-left: 8px; font-size: 12px; font-weight: bold; padding: 4px 8px; } .daterangepicker.show-ranges.single.rtl .drp-calendar.left { border-right: 1px solid #ddd; } .daterangepicker.show-ranges.single.ltr .drp-calendar.left { border-left: 1px solid #ddd; } .daterangepicker.show-ranges.rtl .drp-calendar.right { border-right: 1px solid #ddd; } .daterangepicker.show-ranges.ltr .drp-calendar.left { border-left: 1px solid #ddd; } .daterangepicker .ranges { float: none; text-align: left; margin: 0; } .daterangepicker.show-calendar .ranges { margin-top: 8px; } .daterangepicker .ranges ul { list-style: none; margin: 0 auto; padding: 0; width: 100%; } .daterangepicker .ranges li { font-size: 12px; padding: 8px 12px; cursor: pointer; } .daterangepicker .ranges li:hover { background-color: #eee; } .daterangepicker .ranges li.active { background-color: #08c; color: #fff; } /* Larger Screen Styling */ @media (min-width: 564px) { .daterangepicker { width: auto; } .daterangepicker .ranges ul { width: 140px; } .daterangepicker.single .ranges ul { width: 100%; } .daterangepicker.single .drp-calendar.left { clear: none; } .daterangepicker.single .ranges, .daterangepicker.single .drp-calendar { float: left; } .daterangepicker { direction: ltr; text-align: left; } .daterangepicker .drp-calendar.left { clear: left; margin-right: 0; } .daterangepicker .drp-calendar.left .calendar-table { border-right: none; border-top-right-radius: 0; border-bottom-right-radius: 0; } .daterangepicker .drp-calendar.right { margin-left: 0; } .daterangepicker .drp-calendar.right .calendar-table { border-left: none; border-top-left-radius: 0; border-bottom-left-radius: 0; } .daterangepicker .drp-calendar.left .calendar-table { padding-right: 8px; } .daterangepicker .ranges, .daterangepicker .drp-calendar { float: left; } } @media (min-width: 730px) { .daterangepicker .ranges { width: auto; } .daterangepicker .ranges { float: left; } .daterangepicker.rtl .ranges { float: right; } .daterangepicker .drp-calendar.left { clear: none !important; } } ================================================ FILE: modules/backend/assets/vendor/daterangepicker/daterangepicker.js ================================================ /** * @version: 3.0.5 * @author: Dan Grossman http://www.dangrossman.info/ * @copyright: Copyright (c) 2012-2019 Dan Grossman. All rights reserved. * @license: Licensed under the MIT license. See http://www.opensource.org/licenses/mit-license.php * @website: http://www.daterangepicker.com/ */ // Following the UMD template https://github.com/umdjs/umd/blob/master/templates/returnExportsGlobal.js (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Make globaly available as well define(['moment', 'jquery'], function (moment, jquery) { if (!jquery.fn) jquery.fn = {}; // webpack server rendering if (typeof moment !== 'function' && moment.default) moment = moment.default return factory(moment, jquery); }); } else if (typeof module === 'object' && module.exports) { // Node / Browserify //isomorphic issue var jQuery = (typeof window != 'undefined') ? window.jQuery : undefined; if (!jQuery) { jQuery = require('jquery'); if (!jQuery.fn) jQuery.fn = {}; } var moment = (typeof window != 'undefined' && typeof window.moment != 'undefined') ? window.moment : require('moment'); module.exports = factory(moment, jQuery); } else { // Browser globals root.daterangepicker = factory(root.moment, root.jQuery); } }(this, function(moment, $) { var DateRangePicker = function(element, options, cb) { //default settings for options this.parentEl = 'body'; this.element = $(element); this.startDate = moment().startOf('day'); this.endDate = moment().endOf('day'); this.minDate = false; this.maxDate = false; this.maxSpan = false; this.autoApply = false; this.singleDatePicker = false; this.showDropdowns = false; this.minYear = moment().subtract(100, 'year').format('YYYY'); this.maxYear = moment().add(100, 'year').format('YYYY'); this.showWeekNumbers = false; this.showISOWeekNumbers = false; this.showCustomRangeLabel = true; this.timePicker = false; this.timePicker24Hour = false; this.timePickerIncrement = 1; this.timePickerSeconds = false; this.linkedCalendars = true; this.autoUpdateInput = true; this.alwaysShowCalendars = false; this.ranges = {}; this.opens = 'right'; if (this.element.hasClass('pull-right')) this.opens = 'left'; this.drops = 'down'; if (this.element.hasClass('dropup')) this.drops = 'up'; this.buttonClasses = 'btn btn-sm'; this.applyButtonClasses = 'btn-primary'; this.cancelButtonClasses = 'btn-default'; this.locale = { direction: 'ltr', format: moment.localeData().longDateFormat('L'), separator: ' - ', applyLabel: 'Apply', cancelLabel: 'Cancel', weekLabel: 'W', customRangeLabel: 'Custom Range', daysOfWeek: moment.weekdaysMin(), monthNames: moment.monthsShort(), firstDay: moment.localeData().firstDayOfWeek() }; this.callback = function() { }; //some state information this.isShowing = false; this.leftCalendar = {}; this.rightCalendar = {}; //custom options from user if (typeof options !== 'object' || options === null) options = {}; //allow setting options with data attributes //data-api options will be overwritten with custom javascript options options = $.extend(this.element.data(), options); //html template for the picker UI if (typeof options.template !== 'string' && !(options.template instanceof $)) options.template = '<div class="daterangepicker">' + '<div class="ranges"></div>' + '<div class="drp-calendar left">' + '<div class="calendar-table"></div>' + '<div class="calendar-time"></div>' + '</div>' + '<div class="drp-calendar right">' + '<div class="calendar-table"></div>' + '<div class="calendar-time"></div>' + '</div>' + '<div class="drp-buttons">' + '<span class="drp-selected"></span>' + '<button class="cancelBtn" type="button"></button>' + '<button class="applyBtn" disabled="disabled" type="button"></button> ' + '</div>' + '</div>'; this.parentEl = (options.parentEl && $(options.parentEl).length) ? $(options.parentEl) : $(this.parentEl); this.container = $(options.template).appendTo(this.parentEl); // // handle all the possible options overriding defaults // if (typeof options.locale === 'object') { if (typeof options.locale.direction === 'string') this.locale.direction = options.locale.direction; if (typeof options.locale.format === 'string') this.locale.format = options.locale.format; if (typeof options.locale.separator === 'string') this.locale.separator = options.locale.separator; if (typeof options.locale.daysOfWeek === 'object') this.locale.daysOfWeek = options.locale.daysOfWeek.slice(); if (typeof options.locale.monthNames === 'object') this.locale.monthNames = options.locale.monthNames.slice(); if (typeof options.locale.firstDay === 'number') this.locale.firstDay = options.locale.firstDay; if (typeof options.locale.applyLabel === 'string') this.locale.applyLabel = options.locale.applyLabel; if (typeof options.locale.cancelLabel === 'string') this.locale.cancelLabel = options.locale.cancelLabel; if (typeof options.locale.weekLabel === 'string') this.locale.weekLabel = options.locale.weekLabel; if (typeof options.locale.customRangeLabel === 'string'){ //Support unicode chars in the custom range name. var elem = document.createElement('textarea'); elem.innerHTML = options.locale.customRangeLabel; var rangeHtml = elem.value; this.locale.customRangeLabel = rangeHtml; } } this.container.addClass(this.locale.direction); if (typeof options.startDate === 'string') this.startDate = moment(options.startDate, this.locale.format); if (typeof options.endDate === 'string') this.endDate = moment(options.endDate, this.locale.format); if (typeof options.minDate === 'string') this.minDate = moment(options.minDate, this.locale.format); if (typeof options.maxDate === 'string') this.maxDate = moment(options.maxDate, this.locale.format); if (typeof options.startDate === 'object') this.startDate = moment(options.startDate); if (typeof options.endDate === 'object') this.endDate = moment(options.endDate); if (typeof options.minDate === 'object') this.minDate = moment(options.minDate); if (typeof options.maxDate === 'object') this.maxDate = moment(options.maxDate); // sanity check for bad options if (this.minDate && this.startDate.isBefore(this.minDate)) this.startDate = this.minDate.clone(); // sanity check for bad options if (this.maxDate && this.endDate.isAfter(this.maxDate)) this.endDate = this.maxDate.clone(); if (typeof options.applyButtonClasses === 'string') this.applyButtonClasses = options.applyButtonClasses; if (typeof options.applyClass === 'string') //backwards compat this.applyButtonClasses = options.applyClass; if (typeof options.cancelButtonClasses === 'string') this.cancelButtonClasses = options.cancelButtonClasses; if (typeof options.cancelClass === 'string') //backwards compat this.cancelButtonClasses = options.cancelClass; if (typeof options.maxSpan === 'object') this.maxSpan = options.maxSpan; if (typeof options.dateLimit === 'object') //backwards compat this.maxSpan = options.dateLimit; if (typeof options.opens === 'string') this.opens = options.opens; if (typeof options.drops === 'string') this.drops = options.drops; if (typeof options.showWeekNumbers === 'boolean') this.showWeekNumbers = options.showWeekNumbers; if (typeof options.showISOWeekNumbers === 'boolean') this.showISOWeekNumbers = options.showISOWeekNumbers; if (typeof options.buttonClasses === 'string') this.buttonClasses = options.buttonClasses; if (typeof options.buttonClasses === 'object') this.buttonClasses = options.buttonClasses.join(' '); if (typeof options.showDropdowns === 'boolean') this.showDropdowns = options.showDropdowns; if (typeof options.minYear === 'number') this.minYear = options.minYear; if (typeof options.maxYear === 'number') this.maxYear = options.maxYear; if (typeof options.showCustomRangeLabel === 'boolean') this.showCustomRangeLabel = options.showCustomRangeLabel; if (typeof options.singleDatePicker === 'boolean') { this.singleDatePicker = options.singleDatePicker; if (this.singleDatePicker) this.endDate = this.startDate.clone(); } if (typeof options.timePicker === 'boolean') this.timePicker = options.timePicker; if (typeof options.timePickerSeconds === 'boolean') this.timePickerSeconds = options.timePickerSeconds; if (typeof options.timePickerIncrement === 'number') this.timePickerIncrement = options.timePickerIncrement; if (typeof options.timePicker24Hour === 'boolean') this.timePicker24Hour = options.timePicker24Hour; if (typeof options.autoApply === 'boolean') this.autoApply = options.autoApply; if (typeof options.autoUpdateInput === 'boolean') this.autoUpdateInput = options.autoUpdateInput; if (typeof options.linkedCalendars === 'boolean') this.linkedCalendars = options.linkedCalendars; if (typeof options.isInvalidDate === 'function') this.isInvalidDate = options.isInvalidDate; if (typeof options.isCustomDate === 'function') this.isCustomDate = options.isCustomDate; if (typeof options.alwaysShowCalendars === 'boolean') this.alwaysShowCalendars = options.alwaysShowCalendars; // update day names order to firstDay if (this.locale.firstDay != 0) { var iterator = this.locale.firstDay; while (iterator > 0) { this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift()); iterator--; } } var start, end, range; //if no start/end dates set, check if an input element contains initial values if (typeof options.startDate === 'undefined' && typeof options.endDate === 'undefined') { if ($(this.element).is(':text')) { var val = $(this.element).val(), split = val.split(this.locale.separator); start = end = null; if (split.length == 2) { start = moment(split[0], this.locale.format); end = moment(split[1], this.locale.format); } else if (this.singleDatePicker && val !== "") { start = moment(val, this.locale.format); end = moment(val, this.locale.format); } if (start !== null && end !== null) { this.setStartDate(start); this.setEndDate(end); } } } if (typeof options.ranges === 'object') { for (range in options.ranges) { if (typeof options.ranges[range][0] === 'string') start = moment(options.ranges[range][0], this.locale.format); else start = moment(options.ranges[range][0]); if (typeof options.ranges[range][1] === 'string') end = moment(options.ranges[range][1], this.locale.format); else end = moment(options.ranges[range][1]); // If the start or end date exceed those allowed by the minDate or maxSpan // options, shorten the range to the allowable period. if (this.minDate && start.isBefore(this.minDate)) start = this.minDate.clone(); var maxDate = this.maxDate; if (this.maxSpan && maxDate && start.clone().add(this.maxSpan).isAfter(maxDate)) maxDate = start.clone().add(this.maxSpan); if (maxDate && end.isAfter(maxDate)) end = maxDate.clone(); // If the end of the range is before the minimum or the start of the range is // after the maximum, don't display this range option at all. if ((this.minDate && end.isBefore(this.minDate, this.timepicker ? 'minute' : 'day')) || (maxDate && start.isAfter(maxDate, this.timepicker ? 'minute' : 'day'))) continue; //Support unicode chars in the range names. var elem = document.createElement('textarea'); elem.innerHTML = range; var rangeHtml = elem.value; this.ranges[rangeHtml] = [start, end]; } var list = '<ul>'; for (range in this.ranges) { list += '<li data-range-key="' + range + '">' + range + '</li>'; } if (this.showCustomRangeLabel) { list += '<li data-range-key="' + this.locale.customRangeLabel + '">' + this.locale.customRangeLabel + '</li>'; } list += '</ul>'; this.container.find('.ranges').prepend(list); } if (typeof cb === 'function') { this.callback = cb; } if (!this.timePicker) { this.startDate = this.startDate.startOf('day'); this.endDate = this.endDate.endOf('day'); this.container.find('.calendar-time').hide(); } //can't be used together for now if (this.timePicker && this.autoApply) this.autoApply = false; if (this.autoApply) { this.container.addClass('auto-apply'); } if (typeof options.ranges === 'object') this.container.addClass('show-ranges'); if (this.singleDatePicker) { this.container.addClass('single'); this.container.find('.drp-calendar.left').addClass('single'); this.container.find('.drp-calendar.left').show(); this.container.find('.drp-calendar.right').hide(); if (!this.timePicker) { this.container.addClass('auto-apply'); } } if ((typeof options.ranges === 'undefined' && !this.singleDatePicker) || this.alwaysShowCalendars) { this.container.addClass('show-calendar'); } this.container.addClass('opens' + this.opens); //apply CSS classes and labels to buttons this.container.find('.applyBtn, .cancelBtn').addClass(this.buttonClasses); if (this.applyButtonClasses.length) this.container.find('.applyBtn').addClass(this.applyButtonClasses); if (this.cancelButtonClasses.length) this.container.find('.cancelBtn').addClass(this.cancelButtonClasses); this.container.find('.applyBtn').html(this.locale.applyLabel); this.container.find('.cancelBtn').html(this.locale.cancelLabel); // // event listeners // this.container.find('.drp-calendar') .on('click.daterangepicker', '.prev', $.proxy(this.clickPrev, this)) .on('click.daterangepicker', '.next', $.proxy(this.clickNext, this)) .on('mousedown.daterangepicker', 'td.available', $.proxy(this.clickDate, this)) .on('mouseenter.daterangepicker', 'td.available', $.proxy(this.hoverDate, this)) .on('change.daterangepicker', 'select.yearselect', $.proxy(this.monthOrYearChanged, this)) .on('change.daterangepicker', 'select.monthselect', $.proxy(this.monthOrYearChanged, this)) .on('change.daterangepicker', 'select.hourselect,select.minuteselect,select.secondselect,select.ampmselect', $.proxy(this.timeChanged, this)) this.container.find('.ranges') .on('click.daterangepicker', 'li', $.proxy(this.clickRange, this)) this.container.find('.drp-buttons') .on('click.daterangepicker', 'button.applyBtn', $.proxy(this.clickApply, this)) .on('click.daterangepicker', 'button.cancelBtn', $.proxy(this.clickCancel, this)) if (this.element.is('input') || this.element.is('button')) { this.element.on({ 'click.daterangepicker': $.proxy(this.show, this), 'focus.daterangepicker': $.proxy(this.show, this), 'keyup.daterangepicker': $.proxy(this.elementChanged, this), 'keydown.daterangepicker': $.proxy(this.keydown, this) //IE 11 compatibility }); } else { this.element.on('click.daterangepicker', $.proxy(this.toggle, this)); this.element.on('keydown.daterangepicker', $.proxy(this.toggle, this)); } // // if attached to a text input, set the initial value // this.updateElement(); }; DateRangePicker.prototype = { constructor: DateRangePicker, setStartDate: function(startDate) { if (typeof startDate === 'string') this.startDate = moment(startDate, this.locale.format); if (typeof startDate === 'object') this.startDate = moment(startDate); if (!this.timePicker) this.startDate = this.startDate.startOf('day'); if (this.timePicker && this.timePickerIncrement) this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); if (this.minDate && this.startDate.isBefore(this.minDate)) { this.startDate = this.minDate.clone(); if (this.timePicker && this.timePickerIncrement) this.startDate.minute(Math.round(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); } if (this.maxDate && this.startDate.isAfter(this.maxDate)) { this.startDate = this.maxDate.clone(); if (this.timePicker && this.timePickerIncrement) this.startDate.minute(Math.floor(this.startDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); } if (!this.isShowing) this.updateElement(); this.updateMonthsInView(); }, setEndDate: function(endDate) { if (typeof endDate === 'string') this.endDate = moment(endDate, this.locale.format); if (typeof endDate === 'object') this.endDate = moment(endDate); if (!this.timePicker) this.endDate = this.endDate.endOf('day'); if (this.timePicker && this.timePickerIncrement) this.endDate.minute(Math.round(this.endDate.minute() / this.timePickerIncrement) * this.timePickerIncrement); if (this.endDate.isBefore(this.startDate)) this.endDate = this.startDate.clone(); if (this.maxDate && this.endDate.isAfter(this.maxDate)) this.endDate = this.maxDate.clone(); if (this.maxSpan && this.startDate.clone().add(this.maxSpan).isBefore(this.endDate)) this.endDate = this.startDate.clone().add(this.maxSpan); this.previousRightTime = this.endDate.clone(); this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); if (!this.isShowing) this.updateElement(); this.updateMonthsInView(); }, isInvalidDate: function() { return false; }, isCustomDate: function() { return false; }, updateView: function() { if (this.timePicker) { this.renderTimePicker('left'); this.renderTimePicker('right'); if (!this.endDate) { this.container.find('.right .calendar-time select').attr('disabled', 'disabled').addClass('disabled'); } else { this.container.find('.right .calendar-time select').removeAttr('disabled').removeClass('disabled'); } } if (this.endDate) this.container.find('.drp-selected').html(this.startDate.format(this.locale.format) + this.locale.separator + this.endDate.format(this.locale.format)); this.updateMonthsInView(); this.updateCalendars(); this.updateFormInputs(); }, updateMonthsInView: function() { if (this.endDate) { //if both dates are visible already, do nothing if (!this.singleDatePicker && this.leftCalendar.month && this.rightCalendar.month && (this.startDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.startDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) && (this.endDate.format('YYYY-MM') == this.leftCalendar.month.format('YYYY-MM') || this.endDate.format('YYYY-MM') == this.rightCalendar.month.format('YYYY-MM')) ) { return; } this.leftCalendar.month = this.startDate.clone().date(2); if (!this.linkedCalendars && (this.endDate.month() != this.startDate.month() || this.endDate.year() != this.startDate.year())) { this.rightCalendar.month = this.endDate.clone().date(2); } else { this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); } } else { if (this.leftCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM') && this.rightCalendar.month.format('YYYY-MM') != this.startDate.format('YYYY-MM')) { this.leftCalendar.month = this.startDate.clone().date(2); this.rightCalendar.month = this.startDate.clone().date(2).add(1, 'month'); } } if (this.maxDate && this.linkedCalendars && !this.singleDatePicker && this.rightCalendar.month > this.maxDate) { this.rightCalendar.month = this.maxDate.clone().date(2); this.leftCalendar.month = this.maxDate.clone().date(2).subtract(1, 'month'); } }, updateCalendars: function() { if (this.timePicker) { var hour, minute, second; if (this.endDate) { hour = parseInt(this.container.find('.left .hourselect').val(), 10); minute = parseInt(this.container.find('.left .minuteselect').val(), 10); if (isNaN(minute)) { minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10); } second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; if (!this.timePicker24Hour) { var ampm = this.container.find('.left .ampmselect').val(); if (ampm === 'PM' && hour < 12) hour += 12; if (ampm === 'AM' && hour === 12) hour = 0; } } else { hour = parseInt(this.container.find('.right .hourselect').val(), 10); minute = parseInt(this.container.find('.right .minuteselect').val(), 10); if (isNaN(minute)) { minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10); } second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; if (!this.timePicker24Hour) { var ampm = this.container.find('.right .ampmselect').val(); if (ampm === 'PM' && hour < 12) hour += 12; if (ampm === 'AM' && hour === 12) hour = 0; } } this.leftCalendar.month.hour(hour).minute(minute).second(second); this.rightCalendar.month.hour(hour).minute(minute).second(second); } this.renderCalendar('left'); this.renderCalendar('right'); //highlight any predefined range matching the current start and end dates this.container.find('.ranges li').removeClass('active'); if (this.endDate == null) return; this.calculateChosenLabel(); }, renderCalendar: function(side) { // // Build the matrix of dates that will populate the calendar // var calendar = side == 'left' ? this.leftCalendar : this.rightCalendar; var month = calendar.month.month(); var year = calendar.month.year(); var hour = calendar.month.hour(); var minute = calendar.month.minute(); var second = calendar.month.second(); var daysInMonth = moment([year, month]).daysInMonth(); var firstDay = moment([year, month, 1]); var lastDay = moment([year, month, daysInMonth]); var lastMonth = moment(firstDay).subtract(1, 'month').month(); var lastYear = moment(firstDay).subtract(1, 'month').year(); var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth(); var dayOfWeek = firstDay.day(); //initialize a 6 rows x 7 columns array for the calendar var calendar = []; calendar.firstDay = firstDay; calendar.lastDay = lastDay; for (var i = 0; i < 6; i++) { calendar[i] = []; } //populate the calendar with date objects var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1; if (startDay > daysInLastMonth) startDay -= 7; if (dayOfWeek == this.locale.firstDay) startDay = daysInLastMonth - 6; var curDate = moment([lastYear, lastMonth, startDay, 12, minute, second]); var col, row; for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add(24, 'hour')) { if (i > 0 && col % 7 === 0) { col = 0; row++; } calendar[row][col] = curDate.clone().hour(hour).minute(minute).second(second); curDate.hour(12); if (this.minDate && calendar[row][col].format('YYYY-MM-DD') == this.minDate.format('YYYY-MM-DD') && calendar[row][col].isBefore(this.minDate) && side == 'left') { calendar[row][col] = this.minDate.clone(); } if (this.maxDate && calendar[row][col].format('YYYY-MM-DD') == this.maxDate.format('YYYY-MM-DD') && calendar[row][col].isAfter(this.maxDate) && side == 'right') { calendar[row][col] = this.maxDate.clone(); } } //make the calendar object available to hoverDate/clickDate if (side == 'left') { this.leftCalendar.calendar = calendar; } else { this.rightCalendar.calendar = calendar; } // // Display the calendar // var minDate = side == 'left' ? this.minDate : this.startDate; var maxDate = this.maxDate; var selected = side == 'left' ? this.startDate : this.endDate; var arrow = this.locale.direction == 'ltr' ? {left: 'chevron-left', right: 'chevron-right'} : {left: 'chevron-right', right: 'chevron-left'}; var html = '<table class="table-condensed">'; html += '<thead>'; html += '<tr>'; // add empty cell for week number if (this.showWeekNumbers || this.showISOWeekNumbers) html += '<th></th>'; if ((!minDate || minDate.isBefore(calendar.firstDay)) && (!this.linkedCalendars || side == 'left')) { html += '<th class="prev available"><span></span></th>'; } else { html += '<th></th>'; } var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY"); if (this.showDropdowns) { var currentMonth = calendar[1][1].month(); var currentYear = calendar[1][1].year(); var maxYear = (maxDate && maxDate.year()) || (this.maxYear); var minYear = (minDate && minDate.year()) || (this.minYear); var inMinYear = currentYear == minYear; var inMaxYear = currentYear == maxYear; var monthHtml = '<select class="monthselect">'; for (var m = 0; m < 12; m++) { if ((!inMinYear || (minDate && m >= minDate.month())) && (!inMaxYear || (maxDate && m <= maxDate.month()))) { monthHtml += "<option value='" + m + "'" + (m === currentMonth ? " selected='selected'" : "") + ">" + this.locale.monthNames[m] + "</option>"; } else { monthHtml += "<option value='" + m + "'" + (m === currentMonth ? " selected='selected'" : "") + " disabled='disabled'>" + this.locale.monthNames[m] + "</option>"; } } monthHtml += "</select>"; var yearHtml = '<select class="yearselect">'; for (var y = minYear; y <= maxYear; y++) { yearHtml += '<option value="' + y + '"' + (y === currentYear ? ' selected="selected"' : '') + '>' + y + '</option>'; } yearHtml += '</select>'; dateHtml = monthHtml + yearHtml; } html += '<th colspan="5" class="month">' + dateHtml + '</th>'; if ((!maxDate || maxDate.isAfter(calendar.lastDay)) && (!this.linkedCalendars || side == 'right' || this.singleDatePicker)) { html += '<th class="next available"><span></span></th>'; } else { html += '<th></th>'; } html += '</tr>'; html += '<tr>'; // add week number label if (this.showWeekNumbers || this.showISOWeekNumbers) html += '<th class="week">' + this.locale.weekLabel + '</th>'; $.each(this.locale.daysOfWeek, function(index, dayOfWeek) { html += '<th>' + dayOfWeek + '</th>'; }); html += '</tr>'; html += '</thead>'; html += '<tbody>'; //adjust maxDate to reflect the maxSpan setting in order to //grey out end dates beyond the maxSpan if (this.endDate == null && this.maxSpan) { var maxLimit = this.startDate.clone().add(this.maxSpan).endOf('day'); if (!maxDate || maxLimit.isBefore(maxDate)) { maxDate = maxLimit; } } for (var row = 0; row < 6; row++) { html += '<tr>'; // add week number if (this.showWeekNumbers) html += '<td class="week">' + calendar[row][0].week() + '</td>'; else if (this.showISOWeekNumbers) html += '<td class="week">' + calendar[row][0].isoWeek() + '</td>'; for (var col = 0; col < 7; col++) { var classes = []; //highlight today's date if (calendar[row][col].isSame(new Date(), "day")) classes.push('today'); //highlight weekends if (calendar[row][col].isoWeekday() > 5) classes.push('weekend'); //grey out the dates in other months displayed at beginning and end of this calendar if (calendar[row][col].month() != calendar[1][1].month()) classes.push('off', 'ends'); //don't allow selection of dates before the minimum date if (this.minDate && calendar[row][col].isBefore(this.minDate, 'day')) classes.push('off', 'disabled'); //don't allow selection of dates after the maximum date if (maxDate && calendar[row][col].isAfter(maxDate, 'day')) classes.push('off', 'disabled'); //don't allow selection of date if a custom function decides it's invalid if (this.isInvalidDate(calendar[row][col])) classes.push('off', 'disabled'); //highlight the currently selected start date if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD')) classes.push('active', 'start-date'); //highlight the currently selected end date if (this.endDate != null && calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD')) classes.push('active', 'end-date'); //highlight dates in-between the selected dates if (this.endDate != null && calendar[row][col] > this.startDate && calendar[row][col] < this.endDate) classes.push('in-range'); //apply custom classes for this date var isCustom = this.isCustomDate(calendar[row][col]); if (isCustom !== false) { if (typeof isCustom === 'string') classes.push(isCustom); else Array.prototype.push.apply(classes, isCustom); } var cname = '', disabled = false; for (var i = 0; i < classes.length; i++) { cname += classes[i] + ' '; if (classes[i] == 'disabled') disabled = true; } if (!disabled) cname += 'available'; html += '<td class="' + cname.replace(/^\s+|\s+$/g, '') + '" data-title="' + 'r' + row + 'c' + col + '">' + calendar[row][col].date() + '</td>'; } html += '</tr>'; } html += '</tbody>'; html += '</table>'; this.container.find('.drp-calendar.' + side + ' .calendar-table').html(html); }, renderTimePicker: function(side) { // Don't bother updating the time picker if it's currently disabled // because an end date hasn't been clicked yet if (side == 'right' && !this.endDate) return; var html, selected, minDate, maxDate = this.maxDate; if (this.maxSpan && (!this.maxDate || this.startDate.clone().add(this.maxSpan).isBefore(this.maxDate))) maxDate = this.startDate.clone().add(this.maxSpan); if (side == 'left') { selected = this.startDate.clone(); minDate = this.minDate; } else if (side == 'right') { selected = this.endDate.clone(); minDate = this.startDate; //Preserve the time already selected var timeSelector = this.container.find('.drp-calendar.right .calendar-time'); if (timeSelector.html() != '') { selected.hour(!isNaN(selected.hour()) ? selected.hour() : timeSelector.find('.hourselect option:selected').val()); selected.minute(!isNaN(selected.minute()) ? selected.minute() : timeSelector.find('.minuteselect option:selected').val()); selected.second(!isNaN(selected.second()) ? selected.second() : timeSelector.find('.secondselect option:selected').val()); if (!this.timePicker24Hour) { var ampm = timeSelector.find('.ampmselect option:selected').val(); if (ampm === 'PM' && selected.hour() < 12) selected.hour(selected.hour() + 12); if (ampm === 'AM' && selected.hour() === 12) selected.hour(0); } } if (selected.isBefore(this.startDate)) selected = this.startDate.clone(); if (maxDate && selected.isAfter(maxDate)) selected = maxDate.clone(); } // // hours // html = '<select class="hourselect">'; var start = this.timePicker24Hour ? 0 : 1; var end = this.timePicker24Hour ? 23 : 12; for (var i = start; i <= end; i++) { var i_in_24 = i; if (!this.timePicker24Hour) i_in_24 = selected.hour() >= 12 ? (i == 12 ? 12 : i + 12) : (i == 12 ? 0 : i); var time = selected.clone().hour(i_in_24); var disabled = false; if (minDate && time.minute(59).isBefore(minDate)) disabled = true; if (maxDate && time.minute(0).isAfter(maxDate)) disabled = true; if (i_in_24 == selected.hour() && !disabled) { html += '<option value="' + i + '" selected="selected">' + i + '</option>'; } else if (disabled) { html += '<option value="' + i + '" disabled="disabled" class="disabled">' + i + '</option>'; } else { html += '<option value="' + i + '">' + i + '</option>'; } } html += '</select> '; // // minutes // html += ': <select class="minuteselect">'; for (var i = 0; i < 60; i += this.timePickerIncrement) { var padded = i < 10 ? '0' + i : i; var time = selected.clone().minute(i); var disabled = false; if (minDate && time.second(59).isBefore(minDate)) disabled = true; if (maxDate && time.second(0).isAfter(maxDate)) disabled = true; if (selected.minute() == i && !disabled) { html += '<option value="' + i + '" selected="selected">' + padded + '</option>'; } else if (disabled) { html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>'; } else { html += '<option value="' + i + '">' + padded + '</option>'; } } html += '</select> '; // // seconds // if (this.timePickerSeconds) { html += ': <select class="secondselect">'; for (var i = 0; i < 60; i++) { var padded = i < 10 ? '0' + i : i; var time = selected.clone().second(i); var disabled = false; if (minDate && time.isBefore(minDate)) disabled = true; if (maxDate && time.isAfter(maxDate)) disabled = true; if (selected.second() == i && !disabled) { html += '<option value="' + i + '" selected="selected">' + padded + '</option>'; } else if (disabled) { html += '<option value="' + i + '" disabled="disabled" class="disabled">' + padded + '</option>'; } else { html += '<option value="' + i + '">' + padded + '</option>'; } } html += '</select> '; } // // AM/PM // if (!this.timePicker24Hour) { html += '<select class="ampmselect">'; var am_html = ''; var pm_html = ''; if (minDate && selected.clone().hour(12).minute(0).second(0).isBefore(minDate)) am_html = ' disabled="disabled" class="disabled"'; if (maxDate && selected.clone().hour(0).minute(0).second(0).isAfter(maxDate)) pm_html = ' disabled="disabled" class="disabled"'; if (selected.hour() >= 12) { html += '<option value="AM"' + am_html + '>AM</option><option value="PM" selected="selected"' + pm_html + '>PM</option>'; } else { html += '<option value="AM" selected="selected"' + am_html + '>AM</option><option value="PM"' + pm_html + '>PM</option>'; } html += '</select>'; } this.container.find('.drp-calendar.' + side + ' .calendar-time').html(html); }, updateFormInputs: function() { if (this.singleDatePicker || (this.endDate && (this.startDate.isBefore(this.endDate) || this.startDate.isSame(this.endDate)))) { this.container.find('button.applyBtn').removeAttr('disabled'); } else { this.container.find('button.applyBtn').attr('disabled', 'disabled'); } }, move: function() { var parentOffset = { top: 0, left: 0 }, containerTop; var parentRightEdge = $(window).width(); if (!this.parentEl.is('body')) { parentOffset = { top: this.parentEl.offset().top - this.parentEl.scrollTop(), left: this.parentEl.offset().left - this.parentEl.scrollLeft() }; parentRightEdge = this.parentEl[0].clientWidth + this.parentEl.offset().left; } if (this.drops == 'up') containerTop = this.element.offset().top - this.container.outerHeight() - parentOffset.top; else containerTop = this.element.offset().top + this.element.outerHeight() - parentOffset.top; // Force the container to it's actual width this.container.css({ top: 0, left: 0, right: 'auto' }); var containerWidth = this.container.outerWidth(); this.container[this.drops == 'up' ? 'addClass' : 'removeClass']('drop-up'); if (this.opens == 'left') { var containerRight = parentRightEdge - this.element.offset().left - this.element.outerWidth(); if (containerWidth + containerRight > $(window).width()) { this.container.css({ top: containerTop, right: 'auto', left: 9 }); } else { this.container.css({ top: containerTop, right: containerRight, left: 'auto' }); } } else if (this.opens == 'center') { var containerLeft = this.element.offset().left - parentOffset.left + this.element.outerWidth() / 2 - containerWidth / 2; if (containerLeft < 0) { this.container.css({ top: containerTop, right: 'auto', left: 9 }); } else if (containerLeft + containerWidth > $(window).width()) { this.container.css({ top: containerTop, left: 'auto', right: 0 }); } else { this.container.css({ top: containerTop, left: containerLeft, right: 'auto' }); } } else { var containerLeft = this.element.offset().left - parentOffset.left; if (containerLeft + containerWidth > $(window).width()) { this.container.css({ top: containerTop, left: 'auto', right: 0 }); } else { this.container.css({ top: containerTop, left: containerLeft, right: 'auto' }); } } }, show: function(e) { if (this.isShowing) return; // Create a click proxy that is private to this instance of datepicker, for unbinding this._outsideClickProxy = $.proxy(function(e) { this.outsideClick(e); }, this); // Bind global datepicker mousedown for hiding and $(document) .on('mousedown.daterangepicker', this._outsideClickProxy) // also support mobile devices .on('touchend.daterangepicker', this._outsideClickProxy) // also explicitly play nice with Bootstrap dropdowns, which stopPropagation when clicking them .on('click.daterangepicker', '[data-toggle=dropdown]', this._outsideClickProxy) // and also close when focus changes to outside the picker (eg. tabbing between controls) .on('focusin.daterangepicker', this._outsideClickProxy); // Reposition the picker if the window is resized while it's open $(window).on('resize.daterangepicker', $.proxy(function(e) { this.move(e); }, this)); this.oldStartDate = this.startDate.clone(); this.oldEndDate = this.endDate.clone(); this.previousRightTime = this.endDate.clone(); this.updateView(); this.container.show(); this.move(); this.element.trigger('show.daterangepicker', this); this.isShowing = true; }, hide: function(e) { if (!this.isShowing) return; //incomplete date selection, revert to last values if (!this.endDate) { this.startDate = this.oldStartDate.clone(); this.endDate = this.oldEndDate.clone(); } //if a new date range was selected, invoke the user callback function if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate)) this.callback(this.startDate.clone(), this.endDate.clone(), this.chosenLabel); //if picker is attached to a text input, update it this.updateElement(); $(document).off('.daterangepicker'); $(window).off('.daterangepicker'); this.container.hide(); this.element.trigger('hide.daterangepicker', this); this.isShowing = false; }, toggle: function(e) { if (this.isShowing) { this.hide(); } else { this.show(); } }, outsideClick: function(e) { var target = $(e.target); // if the page is clicked anywhere except within the daterangerpicker/button // itself then call this.hide() if ( // ie modal dialog fix e.type == "focusin" || target.closest(this.element).length || target.closest(this.container).length || target.closest('.calendar-table').length ) return; this.hide(); this.element.trigger('outsideClick.daterangepicker', this); }, showCalendars: function() { this.container.addClass('show-calendar'); this.move(); this.element.trigger('showCalendar.daterangepicker', this); }, hideCalendars: function() { this.container.removeClass('show-calendar'); this.element.trigger('hideCalendar.daterangepicker', this); }, clickRange: function(e) { var label = e.target.getAttribute('data-range-key'); this.chosenLabel = label; if (label == this.locale.customRangeLabel) { this.showCalendars(); } else { var dates = this.ranges[label]; this.startDate = dates[0]; this.endDate = dates[1]; if (!this.timePicker) { this.startDate.startOf('day'); this.endDate.endOf('day'); } if (!this.alwaysShowCalendars) this.hideCalendars(); this.clickApply(); } }, clickPrev: function(e) { var cal = $(e.target).parents('.drp-calendar'); if (cal.hasClass('left')) { this.leftCalendar.month.subtract(1, 'month'); if (this.linkedCalendars) this.rightCalendar.month.subtract(1, 'month'); } else { this.rightCalendar.month.subtract(1, 'month'); } this.updateCalendars(); }, clickNext: function(e) { var cal = $(e.target).parents('.drp-calendar'); if (cal.hasClass('left')) { this.leftCalendar.month.add(1, 'month'); } else { this.rightCalendar.month.add(1, 'month'); if (this.linkedCalendars) this.leftCalendar.month.add(1, 'month'); } this.updateCalendars(); }, hoverDate: function(e) { //ignore dates that can't be selected if (!$(e.target).hasClass('available')) return; var title = $(e.target).attr('data-title'); var row = title.substr(1, 1); var col = title.substr(3, 1); var cal = $(e.target).parents('.drp-calendar'); var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; //highlight the dates between the start date and the date being hovered as a potential end date var leftCalendar = this.leftCalendar; var rightCalendar = this.rightCalendar; var startDate = this.startDate; if (!this.endDate) { this.container.find('.drp-calendar tbody td').each(function(index, el) { //skip week numbers, only look at dates if ($(el).hasClass('week')) return; var title = $(el).attr('data-title'); var row = title.substr(1, 1); var col = title.substr(3, 1); var cal = $(el).parents('.drp-calendar'); var dt = cal.hasClass('left') ? leftCalendar.calendar[row][col] : rightCalendar.calendar[row][col]; if ((dt.isAfter(startDate) && dt.isBefore(date)) || dt.isSame(date, 'day')) { $(el).addClass('in-range'); } else { $(el).removeClass('in-range'); } }); } }, clickDate: function(e) { if (!$(e.target).hasClass('available')) return; var title = $(e.target).attr('data-title'); var row = title.substr(1, 1); var col = title.substr(3, 1); var cal = $(e.target).parents('.drp-calendar'); var date = cal.hasClass('left') ? this.leftCalendar.calendar[row][col] : this.rightCalendar.calendar[row][col]; // // this function needs to do a few things: // * alternate between selecting a start and end date for the range, // * if the time picker is enabled, apply the hour/minute/second from the select boxes to the clicked date // * if autoapply is enabled, and an end date was chosen, apply the selection // * if single date picker mode, and time picker isn't enabled, apply the selection immediately // * if one of the inputs above the calendars was focused, cancel that manual input // if (this.endDate || date.isBefore(this.startDate, 'day')) { //picking start if (this.timePicker) { var hour = parseInt(this.container.find('.left .hourselect').val(), 10); if (!this.timePicker24Hour) { var ampm = this.container.find('.left .ampmselect').val(); if (ampm === 'PM' && hour < 12) hour += 12; if (ampm === 'AM' && hour === 12) hour = 0; } var minute = parseInt(this.container.find('.left .minuteselect').val(), 10); if (isNaN(minute)) { minute = parseInt(this.container.find('.left .minuteselect option:last').val(), 10); } var second = this.timePickerSeconds ? parseInt(this.container.find('.left .secondselect').val(), 10) : 0; date = date.clone().hour(hour).minute(minute).second(second); } this.endDate = null; this.setStartDate(date.clone()); } else if (!this.endDate && date.isBefore(this.startDate)) { //special case: clicking the same date for start/end, //but the time of the end date is before the start date this.setEndDate(this.startDate.clone()); } else { // picking end if (this.timePicker) { var hour = parseInt(this.container.find('.right .hourselect').val(), 10); if (!this.timePicker24Hour) { var ampm = this.container.find('.right .ampmselect').val(); if (ampm === 'PM' && hour < 12) hour += 12; if (ampm === 'AM' && hour === 12) hour = 0; } var minute = parseInt(this.container.find('.right .minuteselect').val(), 10); if (isNaN(minute)) { minute = parseInt(this.container.find('.right .minuteselect option:last').val(), 10); } var second = this.timePickerSeconds ? parseInt(this.container.find('.right .secondselect').val(), 10) : 0; date = date.clone().hour(hour).minute(minute).second(second); } this.setEndDate(date.clone()); if (this.autoApply) { this.calculateChosenLabel(); this.clickApply(); } } if (this.singleDatePicker) { this.setEndDate(this.startDate); if (!this.timePicker) this.clickApply(); } this.updateView(); //This is to cancel the blur event handler if the mouse was in one of the inputs e.stopPropagation(); }, calculateChosenLabel: function () { var customRange = true; var i = 0; for (var range in this.ranges) { if (this.timePicker) { var format = this.timePickerSeconds ? "YYYY-MM-DD HH:mm:ss" : "YYYY-MM-DD HH:mm"; //ignore times when comparing dates if time picker seconds is not enabled if (this.startDate.format(format) == this.ranges[range][0].format(format) && this.endDate.format(format) == this.ranges[range][1].format(format)) { customRange = false; this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key'); break; } } else { //ignore times when comparing dates if time picker is not enabled if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) { customRange = false; this.chosenLabel = this.container.find('.ranges li:eq(' + i + ')').addClass('active').attr('data-range-key'); break; } } i++; } if (customRange) { if (this.showCustomRangeLabel) { this.chosenLabel = this.container.find('.ranges li:last').addClass('active').attr('data-range-key'); } else { this.chosenLabel = null; } this.showCalendars(); } }, clickApply: function(e) { this.hide(); this.element.trigger('apply.daterangepicker', this); }, clickCancel: function(e) { this.startDate = this.oldStartDate; this.endDate = this.oldEndDate; this.hide(); this.element.trigger('cancel.daterangepicker', this); }, monthOrYearChanged: function(e) { var isLeft = $(e.target).closest('.drp-calendar').hasClass('left'), leftOrRight = isLeft ? 'left' : 'right', cal = this.container.find('.drp-calendar.'+leftOrRight); // Month must be Number for new moment versions var month = parseInt(cal.find('.monthselect').val(), 10); var year = cal.find('.yearselect').val(); if (!isLeft) { if (year < this.startDate.year() || (year == this.startDate.year() && month < this.startDate.month())) { month = this.startDate.month(); year = this.startDate.year(); } } if (this.minDate) { if (year < this.minDate.year() || (year == this.minDate.year() && month < this.minDate.month())) { month = this.minDate.month(); year = this.minDate.year(); } } if (this.maxDate) { if (year > this.maxDate.year() || (year == this.maxDate.year() && month > this.maxDate.month())) { month = this.maxDate.month(); year = this.maxDate.year(); } } if (isLeft) { this.leftCalendar.month.month(month).year(year); if (this.linkedCalendars) this.rightCalendar.month = this.leftCalendar.month.clone().add(1, 'month'); } else { this.rightCalendar.month.month(month).year(year); if (this.linkedCalendars) this.leftCalendar.month = this.rightCalendar.month.clone().subtract(1, 'month'); } this.updateCalendars(); }, timeChanged: function(e) { var cal = $(e.target).closest('.drp-calendar'), isLeft = cal.hasClass('left'); var hour = parseInt(cal.find('.hourselect').val(), 10); var minute = parseInt(cal.find('.minuteselect').val(), 10); if (isNaN(minute)) { minute = parseInt(cal.find('.minuteselect option:last').val(), 10); } var second = this.timePickerSeconds ? parseInt(cal.find('.secondselect').val(), 10) : 0; if (!this.timePicker24Hour) { var ampm = cal.find('.ampmselect').val(); if (ampm === 'PM' && hour < 12) hour += 12; if (ampm === 'AM' && hour === 12) hour = 0; } if (isLeft) { var start = this.startDate.clone(); start.hour(hour); start.minute(minute); start.second(second); this.setStartDate(start); if (this.singleDatePicker) { this.endDate = this.startDate.clone(); } else if (this.endDate && this.endDate.format('YYYY-MM-DD') == start.format('YYYY-MM-DD') && this.endDate.isBefore(start)) { this.setEndDate(start.clone()); } } else if (this.endDate) { var end = this.endDate.clone(); end.hour(hour); end.minute(minute); end.second(second); this.setEndDate(end); } //update the calendars so all clickable dates reflect the new time component this.updateCalendars(); //update the form inputs above the calendars with the new time this.updateFormInputs(); //re-render the time pickers because changing one selection can affect what's enabled in another this.renderTimePicker('left'); this.renderTimePicker('right'); }, elementChanged: function() { if (!this.element.is('input')) return; if (!this.element.val().length) return; var dateString = this.element.val().split(this.locale.separator), start = null, end = null; if (dateString.length === 2) { start = moment(dateString[0], this.locale.format); end = moment(dateString[1], this.locale.format); } if (this.singleDatePicker || start === null || end === null) { start = moment(this.element.val(), this.locale.format); end = start; } if (!start.isValid() || !end.isValid()) return; this.setStartDate(start); this.setEndDate(end); this.updateView(); }, keydown: function(e) { //hide on tab or enter if ((e.keyCode === 9) || (e.keyCode === 13)) { this.hide(); } //hide on esc and prevent propagation if (e.keyCode === 27) { e.preventDefault(); e.stopPropagation(); this.hide(); } }, updateElement: function() { if (this.element.is('input') && this.autoUpdateInput) { var newValue = this.startDate.format(this.locale.format); if (!this.singleDatePicker) { newValue += this.locale.separator + this.endDate.format(this.locale.format); } if (newValue !== this.element.val()) { this.element.val(newValue).trigger('change'); } } }, remove: function() { this.container.remove(); this.element.off('.daterangepicker'); this.element.removeData(); } }; $.fn.daterangepicker = function(options, callback) { var implementOptions = $.extend(true, {}, $.fn.daterangepicker.defaultOptions, options); this.each(function() { var el = $(this); if (el.data('daterangepicker')) el.data('daterangepicker').remove(); el.data('daterangepicker', new DateRangePicker(el, implementOptions, callback)); }); return this; }; return DateRangePicker; })); ================================================ FILE: modules/backend/behaviors/FormController.php ================================================ <?php namespace Backend\Behaviors; use Str; use App; use Lang; use Flash; use Event; use Redirect; use Backend; use BackendAuth; use Backend\Classes\FormField; use Backend\Classes\ControllerBehavior; use October\Rain\Router\Helper as RouterHelper; use ApplicationException; use ForbiddenException; use Exception; /** * FormController adds features for working with backend forms. This behavior will inject * CRUD actions to the controller -- including create, update and preview -- along with * some relevant AJAX handlers. * * Each action supports a custom context code, allowing fields to be displayed or hidden * on a contextual basis, as specified by the form field definitions or some other * custom logic. * * This behavior is implemented in the controller like so: * * public $implement = [ * \Backend\Behaviors\FormController::class, * ]; * * public $formConfig = 'config_form.yaml'; * * The `$formConfig` property makes reference to the form configuration * values as either a YAML file, located in the controller view directory, * or directly as a PHP array. * * @see https://docs.octobercms.com/4.x/extend/forms/form-controller.html Form Controller Documentation * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class FormController extends ControllerBehavior { use \Backend\Traits\FormModelSaver; use \Backend\Behaviors\FormController\HasMultisite; use \Backend\Behaviors\FormController\HasMultisiteGroup; use \Backend\Behaviors\FormController\HasOverrides; use \Backend\Behaviors\FormController\HasFormDesigns; use \Backend\Behaviors\FormController\HasRenderers; /** * @var \Backend\Classes\Controller|FormController controller reference */ protected $controller; /** * @var \Backend\Widgets\Form formWidget object */ protected $formWidget; /** * @inheritDoc */ protected $requiredProperties = ['formConfig']; /** * @var array requiredConfig that must exist when applying the primary config file */ protected $requiredConfig = ['modelClass', 'form']; /** * @var array actions visible in context of the controller */ protected $actions = ['create', 'update', 'preview']; /** * @var string context to pass to the form widget */ protected $context; /** * @var Model model used by the form */ protected $model; /** * @var array customMessages contains default messages that you can override */ protected $customMessages = [ 'notFound' => "Form record with an ID of :id could not be found.", 'flashCreate' => ":name Created", 'flashUpdate' => ":name Updated", 'flashDelete' => ":name Deleted", ]; /** * __construct the behavior * @param Backend\Classes\Controller $controller */ public function __construct($controller) { parent::__construct($controller); // Build configuration $this->setConfig($controller->formConfig, $this->requiredConfig); if (!$this->isPopupDesign()) { $this->hidePopupDesign(); } } /** * beforeDisplay fires before the page is displayed and AJAX is executed. */ public function beforeDisplay() { if ($this->isPopupDesign()) { $this->beforeDisplayPopup(); } } /** * initForm initializes the form configuration against a model and context value. * This will process the configuration found in the `$formConfig` property * and prepare the Form widget, which is the underlying tool used for * actually rendering the form. The model used by this form is passed * to this behavior via this method as the first argument. * * @see Backend\Widgets\Form * @param October\Rain\Database\Model $model * @param string $context Form context * @return void */ public function initForm($model, $context = null) { if ($context !== null) { $this->context = $context; } $context = $this->formGetContext(); $formConfig = $this->config = $this->controller->formGetConfig(); // Each page can supply a unique form definition, if desired $formFields = $this->getConfig("{$context}[form]", $formConfig->form); $config = $this->makeConfig($formFields); $config->model = $model; $config->arrayName = class_basename($model); $config->context = $this->getConfig("{$context}[context]", $context); $config->surveyMode = $this->isSurveyDesign(); $config->sessionKey = post('_form_session_key'); $config->horizontalMode = $this->isHorizontalForm(); // Make Form Widget and apply extensions $this->formWidget = $this->makeWidget(\Backend\Widgets\Form::class, $config); // Setup the default preview mode on form initialization if the context is preview if ($config->context === 'preview') { $this->formWidget->previewMode = true; } $this->formWidget->bindEvent('form.extendFieldsBefore', function () { $this->controller->formExtendFieldsBefore($this->formWidget); }); $this->formWidget->bindEvent('form.extendFields', function ($fields) { $this->controller->formExtendFields($this->formWidget, $fields); }); $this->formWidget->bindEvent('form.beforeRefresh', function ($holder) { $result = $this->controller->formExtendRefreshData($this->formWidget, $holder->data); if (is_array($result)) { $holder->data = $result; } }); $this->formWidget->bindEvent('form.refreshFields', function ($fields) { return $this->controller->formExtendRefreshFields($this->formWidget, $fields); }); $this->formWidget->bindEvent('form.refresh', function ($result) { return $this->controller->formExtendRefreshResults($this->formWidget, $result); }); $this->formWidget->bindToController(); // Detected Relation controller behavior if ($this->controller->isClassExtendedWith(\Backend\Behaviors\RelationController::class)) { $this->controller->initRelation($model); } $this->prepareVars($model); $this->model = $model; } /** * Prepares commonly used view data. * @param October\Rain\Database\Model $model */ protected function prepareVars($model) { $this->controller->vars['formModel'] = $model; $this->controller->vars['formContext'] = $this->formGetContext(); $this->controller->vars['formRecordName'] = Lang::get($this->getConfig('name', 'backend::lang.model.name')); $this->controller->vars['formSidebarWidth'] = $this->getDesignFormSize('sidebarSize'); } // // Create // /** * create controller action used for creating new model records. * * @param string $context Form context * @return void */ public function create($context = null) { if (!$this->controller->formCheckPermission('modelCreate')) { throw new ForbiddenException; } try { $this->context = $context ?: $this->getConfig('create[context]', FormField::CONTEXT_CREATE); $this->controller->bodyClass ??= $this->getDesignBodyClass(); $this->controller->pageSize ??= $this->getDesignFormSize(); $this->controller->pageTitle ??= $this->getLang('create[title]', 'backend::lang.form.create_title'); $model = $this->controller->formCreateModelObject(); $model = $this->controller->formExtendModel($model) ?: $model; $this->initForm($model); } catch (Exception $ex) { $this->controller->handleError($ex); } } /** * create_onSave AJAX handler called from the create action and * primarily used for creating new records. * * This handler will invoke the unique controller overrides * `formBeforeCreate` and `formAfterCreate`. * * @param string $context Form context * @return mixed */ public function create_onSave($context = null) { if (!$this->controller->formCheckPermission('modelCreate')) { throw new ForbiddenException; } $this->context = $context ?: $this->getConfig('create[context]', FormField::CONTEXT_CREATE); $model = $this->controller->formCreateModelObject(); $model = $this->controller->formExtendModel($model) ?: $model; $this->initForm($model); $this->controller->formBeforeSave($model); $this->controller->formBeforeCreate($model); $this->controller->fireSystemEvent('backend.form.beforeSave', [$model]); $this->controller->fireSystemEvent('backend.form.beforeCreate', [$model]); $this->performSaveOnModel( $model, $this->formWidget->getSaveData(), ['sessionKey' => $this->formWidget->getSessionKey(), 'propagate' => true] ); $this->controller->formAfterSave($model); $this->controller->formAfterCreate($model); $this->controller->fireSystemEvent('backend.form.afterSave', [$model]); $this->controller->fireSystemEvent('backend.form.afterCreate', [$model]); Flash::success($this->getCustomLang('flashCreate')); if ($redirect = $this->makeRedirect('create', $model)) { return $redirect; } } /** * create_onCancel AJAX handler called from the create action and * used for aborting record creation * * This handler will invoke the unique controller override * `formAfterCancel`. * * @return mixed */ public function create_onCancel($context = null) { $this->context = $context ?: $this->getConfig('create[context]', FormField::CONTEXT_CREATE); $model = $this->controller->formCreateModelObject(); $model = $this->controller->formExtendModel($model) ?: $model; $this->initForm($model); $model->cancelDeferred($this->formWidget->getSessionKey()); $this->controller->formAfterCancel($model); $this->controller->fireSystemEvent('backend.form.afterCancel', [$model]); if ($redirect = $this->makeRedirect('cancel')) { return $redirect; } } // // Update // /** * update controller action used for updating existing model records. * This action takes a record identifier (primary key of the model) * to locate the record used for sourcing the existing form values. * * @param int $recordId Record identifier * @param string $context Form context * @return void */ public function update($recordId = null, $context = null) { if (!$this->controller->formCheckPermission('modelUpdate')) { throw new ForbiddenException; } try { $this->context = $context ?: $this->getConfig('update[context]', FormField::CONTEXT_UPDATE); $this->controller->bodyClass ??= $this->getDesignBodyClass(); $this->controller->pageSize ??= $this->getDesignFormSize(); $this->controller->pageTitle ??= $this->getLang('update[title]', 'backend::lang.form.update_title'); $model = $this->controller->formFindModelObject($recordId); // Multisite if ($this->controller->formHasMultisite($model)) { if ($redirect = $this->makeMultisiteRedirect('create', $model)) { return $redirect; } $this->addHandlerToSiteSwitcher(); } $this->initForm($model); } catch (Exception $ex) { $this->controller->handleError($ex); } } /** * update_onSave AJAX handler called from the update action and * primarily used for updating existing records. * * This handler will invoke the unique controller overrides * `formBeforeUpdate` and `formAfterUpdate`. * * @param int $recordId Record identifier * @param string $context Form context * @return mixed */ public function update_onSave($recordId = null, $context = null) { if (!$this->controller->formCheckPermission('modelUpdate')) { throw new ForbiddenException; } $this->context = $context ?: $this->getConfig('update[context]', FormField::CONTEXT_UPDATE); $model = $this->controller->formFindModelObject($recordId); $this->initForm($model); $this->controller->formBeforeSave($model); $this->controller->formBeforeUpdate($model); $this->controller->fireSystemEvent('backend.form.beforeSave', [$model]); $this->controller->fireSystemEvent('backend.form.beforeUpdate', [$model]); $this->performSaveOnModel( $model, $this->formWidget->getSaveData(), ['sessionKey' => $this->formWidget->getSessionKey(), 'propagate' => true] ); $this->controller->formAfterSave($model); $this->controller->formAfterUpdate($model); $this->controller->fireSystemEvent('backend.form.afterSave', [$model]); $this->controller->fireSystemEvent('backend.form.afterUpdate', [$model]); Flash::success($this->getCustomLang('flashUpdate')); if ($redirect = $this->makeRedirect('update', $model)) { return $redirect; } } /** * update_onDelete AJAX handler called from the update action and * used for deleting existing records. * * This handler will invoke the unique controller override * `formAfterDelete`. * * @param int $recordId Record identifier * @return mixed */ public function update_onDelete($recordId = null) { if (!$this->controller->formCheckPermission('modelDelete')) { throw new ForbiddenException; } $this->context = $this->getConfig('update[context]', FormField::CONTEXT_UPDATE); $model = $this->controller->formFindModelObject($recordId); $this->initForm($model); $model->delete(); $this->controller->formAfterDelete($model); $this->controller->fireSystemEvent('backend.form.afterDelete', [$model]); Flash::success($this->getCustomLang('flashDelete')); if ($redirect = $this->makeRedirect('delete', $model)) { return $redirect; } } /** * update_onCancel AJAX handler called from the update action and * used for aborting existing record updates. * * This handler will invoke the unique controller override * `formAfterCancel`. * * @param int $recordId Record identifier * @return mixed */ public function update_onCancel($recordId = null) { $this->context = $this->getConfig('update[context]', FormField::CONTEXT_UPDATE); $model = $this->controller->formFindModelObject($recordId); $this->initForm($model); $model->cancelDeferred($this->formWidget->getSessionKey()); $this->controller->formAfterCancel($model); $this->controller->fireSystemEvent('backend.form.afterCancel', [$model]); if ($redirect = $this->makeRedirect('cancel')) { return $redirect; } } // // Preview // /** * preview controller action used for viewing existing model records. * This action takes a record identifier (primary key of the model) * to locate the record used for sourcing the existing preview data. * * @param int $recordId Record identifier * @param string $context Form context * @return void */ public function preview($recordId = null, $context = null) { if (!$this->controller->formCheckPermission('modelPreview')) { throw new ForbiddenException; } try { $this->context = $context ?: $this->getConfig('preview[context]', FormField::CONTEXT_PREVIEW); $this->controller->bodyClass ??= $this->getDesignBodyClass(); $this->controller->pageSize ??= $this->getDesignFormSize(); $this->controller->pageTitle ??= $this->getLang('preview[title]', 'backend::lang.form.preview_title'); $model = $this->controller->formFindModelObject($recordId); // Multisite if ($this->controller->formHasMultisite($model)) { if ($redirect = $this->makeMultisiteRedirect('preview', $model)) { return $redirect; } $this->addHandlerToSiteSwitcher(); } $this->initForm($model); } catch (Exception $ex) { $this->controller->handleError($ex); } } // // Utils // /** * formRender the prepared form markup. This method is usually called from a view file. * * <?= $this->formRender() ?> * * The first argument supports an array of render options. The supported * options can be found via the `render` method of the Form widget class. * * <?= $this->formRender(['preview' => true, 'section' => 'primary']) ?> * * @see Backend\Widgets\Form * @param array $options Render options * @return string Rendered HTML for the form. */ public function formRender($options = []) { if (!$this->formWidget) { throw new ApplicationException(Lang::get('backend::lang.form.behavior_not_ready')); } // Sections provided by the behavior, then use the widget as fallback $section = strtolower($options['section'] ?? ''); switch ($section) { case 'buttons': return $this->formMakePartial($this->isPopupDesign() ? 'popup_buttons' : 'buttons'); } return $this->formWidget->render($options); } /** * formRenderDesign renders a preset form design as either: * basic, custom, sidebar, document, popup */ public function formRenderDesign($options = []) { if ($this->controller->hasFatalError()) { return $this->formMakePartial($this->isPopupDesign() ? 'popup_error' : 'error', [ 'fatalError' => $this->controller->getFatalError() ]); } if (!isset($options['displayMode'])) { $options['displayMode'] = $this->getDesignDisplayMode(); } $this->vars['options'] = $options; $displayMode = strtolower($options['displayMode'] ?? 'basic'); switch ($displayMode) { case 'popup': case 'sidebar': case 'document': return $this->formMakePartial("mode_{$displayMode}"); case 'custom': return $this->formRender(); default: return $this->formMakePartial('mode_basic'); } } /** * formMakePartial is a controller accessor for making partials within this behavior. * @param string $partial * @param array $params * @return string */ public function formMakePartial($partial, $params = []) { $contents = $this->controller->makePartial('form_'.$partial, $params + $this->vars, false); if (!$contents) { $contents = $this->makePartial($partial, $params); } return $contents; } /** * formGetModel returns the model initialized by this form behavior. * The model will be provided by one of the page actions or AJAX * handlers via the `initForm` method. * * @return \October\Rain\Database\Model */ public function formGetModel() { return $this->model; } /** * formGetContext returns the active form context, either obtained from the postback * variable called `form_context` or detected from the configuration, * or routing parameters. * * @return string */ public function formGetContext() { return post('form_context') ?: $this->context; } /** * createModel internal method used to prepare the form model object. * * @return \October\Rain\Database\Model */ protected function createModel() { return App::make($this->config->modelClass); } /** * makeRedirect returns a Redirect object based on supplied context and parses * the model primary key. * * @param string $context Redirect context, eg: create, update, delete * @param Model $model The active model to parse in it's ID and attributes. * @return Redirect */ public function makeRedirect($context = null, $model = null, $queryParams = []) { $redirectUrl = null; if (post('close') && !ends_with($context, '-close')) { $context .= '-close'; } if (post('refresh', false)) { return Redirect::refresh(); } if (post('redirect', true)) { $redirectUrl = $this->getRedirectUrl($context); } if ($model && $redirectUrl) { $redirectUrl = RouterHelper::replaceParameters($model, $redirectUrl); } $url = $this->controller->formGetRedirectUrl($context, $model); if ($url) { $redirectUrl = $url; } if (!$redirectUrl) { return null; } if ($queryParams) { $redirectUrl .= '?' . http_build_query($queryParams); } if (starts_with($redirectUrl, ['//', 'http://', 'https://'])) { $redirect = Redirect::to($redirectUrl); } else { $redirect = Backend::redirect($redirectUrl); } return $redirect; } /** * getRedirectUrl is an internal method that returns a redirect URL from the config * based on supplied context. Otherwise the default redirect is used. * * @param string $context Redirect context, eg: create, update, delete. * @return string */ protected function getRedirectUrl($context = null) { $redirectContext = explode('-', $context, 2)[0]; $redirectSource = ends_with($context, '-close') ? 'redirectClose' : 'redirect'; // Get the redirect for the provided context $redirects = [$context => $this->getConfig("{$redirectContext}[{$redirectSource}]", '')]; // Assign the default redirect afterwards to prevent the // source for the default redirect being default[redirect] $redirects['default'] = $this->getConfig('defaultRedirect', ''); if (empty($redirects[$context])) { return $redirects['default']; } return $redirects[$context]; } /** * getLang parses in some default variables to a language string defined in config. * * @param string $name Configuration property containing the language string * @param string $default A default language string to use if the config is not found * @param array $extras Any extra params to include in the language string variables * @return string The translated string. */ protected function getLang($name, $default = null, $extras = []) { $name = $this->getConfig($name, $default); $vars = $extras + [ 'name' => Lang::get($this->getConfig('name', 'backend::lang.model.name')) ]; return Lang::get($name, $vars); } /** * getCustomLang parses custom messages provided by the config */ protected function getCustomLang(string $name, ?string $default = null, array $extras = []): string { $foundKey = $this->getConfig("{$this->context}[customMessages][{$name}]"); // @deprecated messages can be local to the config if ($foundKey === null) { $foundKey = $this->getConfig("{$this->context}[{$name}]"); } if ($foundKey === null) { $foundKey = $this->getConfig("customMessages[{$name}]"); } // @deprecated flashSave overrides flashCreate and flashUpdate if ($foundKey === null && in_array($name, ['flashCreate', 'flashUpdate'])) { return $this->getCustomLang('flashSave', $this->customMessages[$name], $extras); } if ($foundKey === null) { $foundKey = $default; } if ($foundKey === null) { $foundKey = $this->customMessages[$name] ?? '???'; } $vars = $extras + [ 'name' => Lang::get($this->getConfig('name', 'backend::lang.model.name')) ]; return Lang::get($foundKey, $vars); } // // Pass-through Helpers // /** * formGetWidget returns the form widget used by this behavior. * * @return Backend\Widgets\Form */ public function formGetWidget() { return $this->formWidget; } /** * formGetId returns a unique ID for the form widget used by this behavior. * This is useful for dealing with identifiers in the markup. * * <div id="<?= $this->formGetId()">...</div> * * A suffix may be used passed as the first argument to reuse * the identifier in other areas. * * <button id="<?= $this->formGetId('button')">...</button> * * @param string $suffix * @return string */ public function formGetId($suffix = null) { return $this->formWidget->getId($suffix); } /** * formGetSessionKey is a helper to get the form session key. * @return string */ public function formGetSessionKey() { return $this->formWidget->getSessionKey(); } /** * formGetConfig returns the configuration used by this behavior. You may override this * method in your controller as an alternative to defining a formConfig property. * @return object */ public function formGetConfig() { $config = $this->config; $config->modelClass = Str::normalizeClassName($config->modelClass); return $config; } /** * formSetSaveValue will override the save values passed to the form. Set the value * to null to omit the field from the dataset. */ public function formSetSaveValue($key, $value) { $this->formWidget->setSaveDataOverride($key, $value); } /** * formCheckPermission checks if a custom permission has been specified */ public function formCheckPermission(string $name) { $foundKey = $this->getConfig("permissions[{$name}]"); return $foundKey ? BackendAuth::userHasAccess($foundKey) : true; } // // Overrides // /** * formFindModelObject finds a Model record by its primary identifier, used by update * actions. This logic can be changed by overriding it in the controller. * @param string $recordId * @return Model */ public function formFindModelObject($recordId) { if (!strlen($recordId)) { throw new ApplicationException($this->getCustomLang('notFound', 'backend::lang.form.missing_id')); } $model = $this->controller->formCreateModelObject(); // Prepare query and find model record $query = $model->newQuery(); // Remove multisite restriction if ($this->controller->formHasMultisite($model)) { $query->withSites(); } elseif ($this->controller->formHasMultisiteGroup($model)) { $query->withSiteGroups(); } $this->controller->formExtendQuery($query); $result = $query->find($recordId); if (!$result) { throw new ApplicationException($this->getCustomLang('notFound', null, [ 'class' => get_class($model), 'id' => $recordId ])); } $result = $this->controller->formExtendModel($result) ?: $result; return $result; } /** * extendFormFields is a static helper for extending form fields * @deprecated for best performance, use Event class directly, see docs * @link https://docs.octobercms.com/4.x/extend/forms/form-controller.html#extending-form-fields */ public static function extendFormFields($callback) { $calledClass = self::getCalledExtensionClass(); Event::listen('backend.form.extendFields', function ($widget) use ($calledClass, $callback) { if (!is_a($widget->getController(), $calledClass)) { return; } call_user_func_array($callback, [$widget, $widget->model, $widget->getContext()]); }); } } ================================================ FILE: modules/backend/behaviors/ImportExportController.php ================================================ <?php namespace Backend\Behaviors; use App; use Lang; use Backend; use BackendAuth; use Backend\Classes\ControllerBehavior; use Illuminate\Database\Eloquent\MassAssignmentException; use ApplicationException; use ForbiddenException; use Exception; /** * ImportExportController adds features for importing and exporting data. * * This behavior is implemented in the controller like so: * * public $implement = [ * \Backend\Behaviors\ImportExportController::class, * ]; * * public $importExportConfig = 'config_import_export.yaml'; * * The `$importExportConfig` property makes reference to the configuration * values as either a YAML file, located in the controller view directory, * or directly as a PHP array. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class ImportExportController extends ControllerBehavior { use \Backend\Behaviors\ImportExportController\ActionImport; use \Backend\Behaviors\ImportExportController\ActionExport; use \Backend\Behaviors\ImportExportController\HasListExport; use \Backend\Behaviors\ImportExportController\CanFormatCsv; use \Backend\Behaviors\ImportExportController\CanFormatJson; /** * @inheritDoc */ protected $requiredProperties = ['importExportConfig']; /** * @var array requiredConfig values that must exist when applying the primary config file. */ protected $requiredConfig = []; /** * @var array actions visible in context of the controller */ protected $actions = ['import', 'export', 'download']; /** * __construct the behavior * @param Backend\Classes\Controller $controller */ public function __construct($controller) { parent::__construct($controller); // Build configuration $this->setConfig($controller->importExportConfig, $this->requiredConfig); } /** * beforeDisplay fires before the page is displayed and AJAX is executed. */ public function beforeDisplay() { if ($this->controller->getAction() === 'import') { $this->beforeDisplayImport(); } elseif ($this->controller->getAction() === 'export') { $this->beforeDisplayExport(); } } /** * beforeDisplayImport loads the import form widgets */ public function beforeDisplayImport() { if ($this->importUploadFormWidget = $this->makeImportUploadFormWidget()) { $this->importUploadFormWidget->bindToController(); } if ($this->importOptionsFormWidget = $this->makeImportOptionsFormWidget()) { $this->importOptionsFormWidget->bindToController(); } } /** * beforeDisplayExport loads the export form widgets */ public function beforeDisplayExport() { if ($this->exportFormatFormWidget = $this->makeExportFormatFormWidget()) { $this->exportFormatFormWidget->bindToController(); } if ($this->exportOptionsFormWidget = $this->makeExportOptionsFormWidget()) { $this->exportOptionsFormWidget->bindToController(); } } // // Import // /** * import action */ public function import() { if ($response = $this->checkPermissionsForType('import')) { return $response; } $this->addJs('js/october.import.js'); $this->addCss('css/import.css'); $this->controller->pageTitle = $this->controller->pageTitle ?: Lang::get($this->getConfig('import[title]', 'Import Records')); $this->prepareImportVars(); } /** * onImport */ public function onImport() { try { $this->actionImport(); } catch (MassAssignmentException $ex) { $this->controller->handleError(new ApplicationException(Lang::get( 'backend::lang.model.mass_assignment_failed', ['attribute' => $ex->getMessage()] ))); } catch (Exception $ex) { $this->controller->handleError($ex); } return $this->importExportMakePartial('import_result_form'); } /** * onImportLoadColumnSampleForm */ public function onImportLoadColumnSampleForm() { $this->actionImportLoadColumnSampleForm(); return $this->importExportMakePartial('column_sample_form'); } /** * onImportLoadForm */ public function onImportLoadForm() { try { if (!$this->isCustomFileFormat()) { $this->checkRequiredImportColumns(); } } catch (Exception $ex) { $this->controller->handleError($ex); } return $this->importExportMakePartial('import_form'); } // // Export // /** * export action */ public function export() { if ($response = $this->checkPermissionsForType('export')) { return $response; } if ($response = $this->checkUseListExportMode()) { return $response; } $this->addJs('js/october.export.js'); $this->addCss('css/export.css'); $this->controller->pageTitle = $this->controller->pageTitle ?: Lang::get($this->getConfig('export[title]', 'Export Records')); $this->prepareExportVars(); } /** * download action */ public function download($name, $outputName = null) { $this->controller->pageTitle = $this->controller->pageTitle ?: Lang::get($this->getConfig('export[title]', 'Export Records')); return $this->exportGetModel()->download($name, $outputName); } /** * onExport */ public function onExport() { try { $this->actionExport(); } catch (MassAssignmentException $ex) { $this->controller->handleError(new ApplicationException(Lang::get( 'backend::lang.model.mass_assignment_failed', ['attribute' => $ex->getMessage()] ))); } catch (Exception $ex) { $this->controller->handleError($ex); } return $this->importExportMakePartial('export_result_form'); } /** * onExportLoadForm */ public function onExportLoadForm() { return $this->importExportMakePartial('export_form'); } // // Internals // /** * importExportMakePartial controller accessor for making partials within this behavior. * @param string $partial * @param array $params * @return string Partial contents */ public function importExportMakePartial($partial, $params = []) { $contents = $this->controller->makePartial('import_export_'.$partial, $params + $this->vars, false); if (!$contents) { $contents = $this->makePartial($partial, $params); } return $contents; } /** * checkPermissionsForType checks to see if the import/export is controlled by permissions * and if the logged in user has permissions. */ protected function checkPermissionsForType($type) { if ( ($permissions = $this->getConfig($type.'[permissions]')) && (!BackendAuth::getUser()->hasAnyAccess((array) $permissions)) ) { throw new ForbiddenException; } } /** * makeOptionsFormWidgetForType */ protected function makeOptionsFormWidgetForType($type) { if (!$this->getConfig($type)) { return null; } $fieldConfig = $this->getConfig($type.'[form]'); if ($fieldConfig !== null) { $widgetConfig = $this->makeConfig($fieldConfig); $widgetConfig->model = $this->getModelForType($type); $widgetConfig->alias = $type.'OptionsForm'; $widgetConfig->arrayName = ucfirst($type).'Options'; return $this->makeWidget(\Backend\Widgets\Form::class, $widgetConfig); } return null; } /** * getModelForType */ protected function getModelForType($type) { $cacheProperty = $type.'Model'; if ($this->{$cacheProperty} !== null) { return $this->{$cacheProperty}; } $modelClass = $this->getConfig($type.'[modelClass]'); if (!$modelClass) { throw new ApplicationException(__("Please specify the modelClass property for :type", [ 'type' => $type ])); } $model = App::make($modelClass); $this->controller->importExportExtendModel($model); return $this->{$cacheProperty} = $model; } /** * makeListColumns */ protected function makeListColumns($config, $model) { $config = $this->makeConfig($config); $config->model = $model; $widget = $this->makeWidget(\Backend\Widgets\Lists::class, $config); $columns = $widget->getColumns(); if (!isset($columns) || !is_array($columns)) { return null; } $result = []; foreach ($columns as $attribute => $column) { $result[$attribute] = $column->label; } return $result; } /** * getRedirectUrlForType */ protected function getRedirectUrlForType($type = null) { $redirect = $this->getConfig($type.'[redirect]'); if ($redirect !== null) { return $redirect ? Backend::url($redirect) : 'javascript:;'; } return $this->controller->actionUrl($type); } /** * getFormatOptionsForPost returns the file format options from postback. This method * can be used to define presets. */ protected function getFormatOptionsForPost(): array { $defaults = [ 'file_format' => 'json', 'format_delimiter' => ',', 'format_enclosure' => '"', 'format_escape' => '\\', 'format_encoding' => 'UTF-8', 'first_row_titles' => true, ]; return [ 'file_format' => post('file_format', $this->getConfig('defaultFormatOptions[fileFormat]', $defaults['file_format'])), 'format_delimiter' => post('format_delimiter', $this->getConfig('defaultFormatOptions[delimiter]', $defaults['format_delimiter'])), 'format_enclosure' => post('format_enclosure', $this->getConfig('defaultFormatOptions[enclosure]', $defaults['format_enclosure'])), 'format_escape' => post('format_escape', $this->getConfig('defaultFormatOptions[escape]', $defaults['format_escape'])), 'format_encoding' => post('format_encoding', $this->getConfig('defaultFormatOptions[encoding]', $defaults['format_encoding'])), 'first_row_titles' => post('first_row_titles', $this->getConfig('defaultFormatOptions[firstRowTitles]', $defaults['first_row_titles'])), ]; } /** * getFormatOptionsForModel returns the file format options used by models. */ protected function getFormatOptionsForModel(): array { $options = [ 'fileFormat' => post('file_format', $this->getConfig('defaultFormatOptions[fileFormat]')), 'delimiter' => post('format_delimiter', $this->getConfig('defaultFormatOptions[delimiter]')), 'enclosure' => post('format_enclosure', $this->getConfig('defaultFormatOptions[enclosure]')), 'escape' => post('format_escape', $this->getConfig('defaultFormatOptions[escape]')), 'encoding' => post('format_encoding', $this->getConfig('defaultFormatOptions[encoding]')), 'firstRowTitles' => (bool) post('first_row_titles', $this->getConfig('defaultFormatOptions[firstRowTitles]', true)), 'customJson' => $this->getConfig('defaultFormatOptions[customJson]'), ]; if ($options['fileFormat'] !== 'csv_custom') { $options['delimiter'] = null; $options['enclosure'] = null; $options['escape'] = null; $options['encoding'] = null; } return $options; } /** * isCustomFileFormat returns true if the process is using a custom format * via `customJson` or otherwise. */ protected function isCustomFileFormat() { if (!$fileFormat = post('file_format', 'json')) { return false; } if ($fileFormat !== 'json') { return false; } return (bool) $this->getFormatOptionsForModel()['customJson']; } // // Overrides // /** * importExportGetFileName * @return string */ public function importExportGetFileName() { return $this->exportFileName; } /** * importExportExtendModel * @param Model $model * @return Model */ public function importExportExtendModel($model) { return $model; } /** * importExportExtendColumns */ public function importExportExtendColumns($columns, $context = null) { return $columns; } } ================================================ FILE: modules/backend/behaviors/ListController.php ================================================ <?php namespace Backend\Behaviors; use App; use Lang; use Event; use Flash; use BackendAuth; use ApplicationException; use Backend\Classes\ControllerBehavior; use ForbiddenException; /** * ListController adds features for working with backend lists * * This behavior is implemented in the controller like so: * * public $implement = [ * \Backend\Behaviors\ListController::class, * ]; * * public $listConfig = 'config_list.yaml'; * * The `$listConfig` property makes reference to the list configuration * values as either a YAML file, located in the controller view directory, * or directly as a PHP array. * * @see https://docs.octobercms.com/4.x/extend/lists/list-controller.html List Controller Documentation * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class ListController extends ControllerBehavior { use \Backend\Behaviors\ListController\HasOverrides; /** * @var array listDefinitions are keys for alias and value for configuration. */ protected $listDefinitions; /** * @var string primaryDefinition list alias to use. Default: list */ protected $primaryDefinition; /** * @var array listConfig are keys for alias and value for config objects. */ protected $listConfig = []; /** * @var \Backend\Classes\WidgetBase[] listWidgets reference to the list widget object. */ protected $listWidgets = []; /** * @var \Backend\Classes\WidgetBase[] toolbarWidgets reference to the toolbar widget objects. */ protected $toolbarWidgets = []; /** * @var \Backend\Classes\WidgetBase[] filterWidgets reference to the filter widget objects. */ protected $filterWidgets = []; /** * @var array requiredProperties in the controller */ protected $requiredProperties = ['listConfig']; /** * @var array requiredConfig values that must exist when applying the primary config file. * - modelClass: Class name for the model * - list: List column definitions */ protected $requiredConfig = ['modelClass', 'list']; /** * @var array actions visible in context of the controller */ protected $actions = ['index']; /** * __construct the behavior * @param \Backend\Classes\Controller $controller */ public function __construct($controller) { parent::__construct($controller); // Extract list definitions if (is_array($controller->listConfig)) { $this->listDefinitions = $controller->listConfig; $this->primaryDefinition = key($this->listDefinitions); } else { $this->listDefinitions = ['list' => $controller->listConfig]; $this->primaryDefinition = 'list'; } // Build configuration $this->setConfig($this->listDefinitions[$this->primaryDefinition], $this->requiredConfig); } /** * makeLists creates all the list widgets based on the definitions. * @return array */ public function makeLists() { foreach ($this->listDefinitions as $definition => $config) { $this->listWidgets[$definition] = $this->makeList($definition); } return $this->listWidgets; } /** * makeList prepares the widgets used by this action * @return \Backend\Classes\WidgetBase */ public function makeList($definition = null) { if (!$definition || !isset($this->listDefinitions[$definition])) { $definition = $this->primaryDefinition; } $listConfig = $this->config = $this->controller->listGetConfig($definition); // Create the model $model = $this->createModel(); $model = $this->controller->listExtendModel($model, $definition); // Prepare the list widget $widgetConfig = $this->makeConfig($listConfig->list); $widgetConfig->model = $model; $widgetConfig->alias = $listConfig->widgetAlias ?? $definition; // Prepare the columns configuration $configFieldsToTransfer = [ 'recordUrl', 'recordOnClick', 'recordsPerPage', 'perPageOptions', 'showPageNumbers', 'noRecordsMessage', 'defaultSort', 'showSorting', 'showSetup', 'expandLastColumn', 'showCheckboxes', 'customViewPath', 'customPageName', ]; foreach ($configFieldsToTransfer as $field) { if (isset($listConfig->{$field})) { $widgetConfig->{$field} = $listConfig->{$field}; } } // List Widget with extensibility $structureConfig = $this->makeListStructureConfig($widgetConfig, $listConfig); if ($structureConfig) { $widget = $this->makeWidget(\Backend\Widgets\ListStructure::class, $structureConfig); } else { $widget = $this->makeWidget(\Backend\Widgets\Lists::class, $widgetConfig); } $widget->bindEvent('list.extendColumns', function () use ($widget) { $this->controller->listExtendColumns($widget); }); $widget->bindEvent('list.extendQueryBefore', function ($query) use ($definition) { $this->controller->listExtendQueryBefore($query, $definition); }); $widget->bindEvent('list.extendQuery', function ($query) use ($definition) { $this->controller->listExtendQuery($query, $definition); }); $widget->bindEvent('list.extendSortColumn', function ($query, $sortColumn, $sortDirection) use ($definition) { $this->controller->listExtendSortColumn($query, $sortColumn, $sortDirection, $definition); }); $widget->bindEvent('list.extendRecords', function ($records) use ($definition) { return $this->controller->listExtendRecords($records, $definition); }); $widget->bindEvent('list.injectRowClass', function ($record) use ($definition) { return $this->controller->listInjectRowClass($record, $definition); }); $widget->bindEvent('list.overrideColumnValue', function ($record, $column, $value) use ($definition) { return $this->controller->listOverrideColumnValue($record, $column->columnName, $definition); }); $widget->bindEvent('list.overrideHeaderValue', function ($column, $value) use ($definition) { return $this->controller->listOverrideHeaderValue($column->columnName, $definition); }); $widget->bindEvent('list.overrideRecordAction', function ($record, $url, $onClick) use ($definition) { return $this->controller->listOverrideRecordUrl($record, $definition); }); $widget->bindEvent('list.reorderStructure', function ($record) use ($definition) { return $this->controller->listAfterReorder($record, $definition); }); $widget->bindEvent('list.refresh', function ($result) use ($widget, $definition) { return $this->controller->listExtendRefreshResults($widget, $result, $definition); }); $widget->bindToController(); // Prepare the toolbar widget (optional) if (isset($listConfig->toolbar)) { $toolbarConfig = $this->makeConfig($listConfig->toolbar); $toolbarConfig->alias = $widget->alias . 'Toolbar'; $toolbarWidget = $this->makeWidget(\Backend\Widgets\Toolbar::class, $toolbarConfig); $toolbarWidget->listWidgetId = $widget->getId(); $toolbarWidget->cssClasses[] = 'list-header'; // Pass the list setup AJAX handler to the toolbar if (isset($listConfig->showSetup) && $listConfig->showSetup) { $toolbarWidget->setupHandler = $widget->getEventHandler('onLoadSetup'); } // Link the Search Widget to the List Widget if ($searchWidget = $toolbarWidget->getSearchWidget()) { $searchWidget->bindEvent('search.submit', function () use ($widget, $searchWidget) { $widget->setSearchTerm($searchWidget->getActiveTerm(), true); return $widget->onRefresh(); }); // Pass search options $widget->setSearchOptions([ 'mode' => $searchWidget->mode, 'scope' => $searchWidget->scope, ]); // Find predefined search term $widget->setSearchTerm($searchWidget->getActiveTerm()); } // Bind to controller $toolbarWidget->bindToController(); $this->toolbarWidgets[$definition] = $toolbarWidget; } // Prepare the filter widget (optional) if (isset($listConfig->filter)) { $widget->cssClasses[] = 'list-flush'; $filterConfig = $this->makeConfig($listConfig->filter); $filterConfig->model = $model; $filterConfig->alias = $widget->alias . 'Filter'; $filterConfig->customPageName = $listConfig->customPageName ?? null; $filterWidget = $this->makeWidget(\Backend\Widgets\Filter::class, $filterConfig); // Filter the list when the scopes are changed $filterWidget->bindEvent('filter.update', function() use ($widget) { return $widget->onFilter(); }); // Filter Widget with extensibility $filterWidget->bindEvent('filter.extendScopes', function() use ($filterWidget) { $this->controller->listFilterExtendScopes($filterWidget); }); // Extend the query of the list of options $filterWidget->bindEvent('filter.extendQuery', function($query, $scope) { $this->controller->listFilterExtendQuery($query, $scope); }); // Apply predefined filter values $widget->addFilter([$filterWidget, 'applyAllScopesToQuery']); // Bind to controller $filterWidget->bindToController(); $this->filterWidgets[$definition] = $filterWidget; } return $widget; } /** * makeListStructureConfig */ protected function makeListStructureConfig(object $widgetConfig, object $config): ?object { // @deprecated old API if (isset($config->showTree)) { $widgetConfig->showTree = $config->showTree; $widgetConfig->treeExpanded = $config->treeExpanded ?? false; $widgetConfig->showReorder = false; if (!isset($config->structure)) { return $widgetConfig; } } // New API if (isset($config->structure)) { return $this->mergeConfig($widgetConfig, $config->structure); } return null; } /** * index controller action * @return void */ public function index() { if (!$this->controller->pageTitle) { $this->controller->pageTitle = Lang::get($this->getConfig( 'title', 'backend::lang.list.default_title' )); } $this->controller->bodyClass ??= 'slim-container'; $this->makeLists(); } /** * index_onDelete bulk deletes records. * @return void */ public function index_onDelete() { if (method_exists($this->controller, 'onDelete')) { return call_user_func_array([$this->controller, 'onDelete'], func_get_args()); } // Establish the list definition $definition = post('definition', $this->primaryDefinition); if (!isset($this->listDefinitions[$definition])) { throw new ApplicationException(Lang::get('backend::lang.list.missing_parent_definition', compact('definition'))); } $this->config = $this->controller->listGetConfig($definition); // Check conditions for deletion if (!$this->listCanDeleteRecords()) { throw new ForbiddenException; } // Validate checked identifiers $checkedIds = post('checked'); if (!$checkedIds || !is_array($checkedIds) || !count($checkedIds)) { Flash::error(Lang::get('backend::lang.list.delete_selected_empty')); return $this->controller->listRefresh(); } // Create the model $model = $this->createModel(); $model = $this->controller->listExtendModel($model, $definition); // Create the query $query = $model->newQuery(); $this->controller->listExtendQueryBefore($query, $definition); $query->whereIn($model->getQualifiedKeyName(), $checkedIds); $this->controller->listExtendQuery($query, $definition); // Delete records $records = $query->get(); if ($records->count()) { foreach ($records as $record) { $record->delete(); } Flash::success(Lang::get('backend::lang.list.delete_selected_success')); } else { Flash::error(Lang::get('backend::lang.list.delete_selected_empty')); } return $this->controller->listRefresh($definition); } /** * listCanDeleteRecords determines if records can be deleted from the list */ protected function listCanDeleteRecords(): bool { if (!$this->getConfig('showCheckboxes')) { return false; } if ($requiredPermission = $this->getConfig('requiredPermissions[recordDelete]')) { return BackendAuth::userHasAccess($requiredPermission); } return true; } /** * createModel is an internal method used to prepare the list model object. * @return \October\Rain\Database\Model */ protected function createModel() { return App::make($this->config->modelClass); } /** * listRender renders the widget collection. * @param string $definition Optional list definition. * @return string Rendered HTML for the list. */ public function listRender($definition = null) { if (!count($this->listWidgets)) { throw new ApplicationException(Lang::get('backend::lang.list.behavior_not_ready')); } if (!$definition || !isset($this->listDefinitions[$definition])) { $definition = $this->primaryDefinition; } $vars = [ 'toolbar' => null, 'filter' => null, 'list' => null, ]; if (isset($this->toolbarWidgets[$definition])) { $vars['toolbar'] = $this->toolbarWidgets[$definition]; } if (isset($this->filterWidgets[$definition])) { $vars['filter'] = $this->filterWidgets[$definition]; } $vars['list'] = $this->listWidgets[$definition]; return $this->listMakePartial('container', $vars); } /** * listMakePartial is a controller accessor for making partials within this behavior. * @param string $partial * @param array $params * @return string Partial contents */ public function listMakePartial($partial, $params = []) { $contents = $this->controller->makePartial('list_'.$partial, $params + $this->vars, false); if (!$contents) { $contents = $this->makePartial($partial, $params); } return $contents; } /** * listRefresh refreshes the list container only, useful for returning in custom AJAX requests. * @param string $definition Optional list definition. * @return array The list element selector as the key, and the list contents are the value. */ public function listRefresh($definition = null) { if (!count($this->listWidgets)) { $this->makeLists(); } if (!$definition || !isset($this->listDefinitions[$definition])) { $definition = $this->primaryDefinition; } return $this->listWidgets[$definition]->onRefresh(); } /** * listGetWidget returns the widget used by this behavior. * @return \Backend\Classes\WidgetBase */ public function listGetWidget($definition = null) { if (!$definition) { $definition = $this->primaryDefinition; } return array_get($this->listWidgets, $definition); } /** * listGetFilterWidget returns the filter widget used by this behavior. * @return \Backend\Classes\WidgetBase */ public function listGetFilterWidget($definition = null) { if (!$definition) { $definition = $this->primaryDefinition; } return array_get($this->filterWidgets, $definition); } /** * listGetToolbarWidget returns the toolbar widget used by this behavior. * @return \Backend\Classes\WidgetBase */ public function listGetToolbarWidget($definition = null) { if (!$definition) { $definition = $this->primaryDefinition; } return array_get($this->toolbarWidgets, $definition); } /** * listGetId returns a unique ID for the list widget used by this behavior. * This is useful for dealing with identifiers in the markup. * * <div id="<?= $this->listGetId()">...</div> * * A suffix may be used passed as the first argument to reuse * the identifier in other areas. * * <button id="<?= $this->listGetId('button')">...</button> * * @param string $suffix * @return string */ public function listGetId($suffix = null, $definition = null) { return $this->listGetWidget($definition)->getId($suffix); } /** * listGetConfig returns the configuration used by this behavior. You may override this * method in your controller as an alternative to defining a listConfig property. * @return object|null */ public function listGetConfig($definition = null) { if (!$definition) { $definition = $this->primaryDefinition; } $config = array_get($this->listConfig, $definition); if (!$config) { $config = $this->listConfig[$definition] = $this->makeConfig($this->listDefinitions[$definition], $this->requiredConfig); } return $config; } // // Overrides // /** * extendListColumns is a static helper for extending list columns. * @deprecated for best performance, use Event class directly, see docs * @link https://docs.octobercms.com/4.x/extend/lists/list-controller.html#extending-column-definitions */ public static function extendListColumns($callback) { $calledClass = self::getCalledExtensionClass(); Event::listen('backend.list.extendColumns', function ($widget) use ($calledClass, $callback) { if (!is_a($widget->getController(), $calledClass)) { return; } call_user_func_array($callback, [$widget, $widget->model]); }); } /** * extendListFilterScopes is a static helper for extending filter scopes. * @deprecated for best performance, use Event class directly, see docs * @link https://docs.octobercms.com/4.x/extend/lists/list-controller.html#extending-filter-scopes */ public static function extendListFilterScopes($callback) { $calledClass = self::getCalledExtensionClass(); Event::listen('backend.filter.extendScopes', function ($widget) use ($calledClass, $callback) { if (!is_a($widget->getController(), $calledClass)) { return; } call_user_func_array($callback, [$widget]); }); } } ================================================ FILE: modules/backend/behaviors/RelationController.php ================================================ <?php namespace Backend\Behaviors; use Lang; use Flash; use Request; use Form as FormHelper; use October\Rain\Html\Helper as HtmlHelper; use Backend\Classes\FormField; use Backend\Classes\ControllerBehavior; use Illuminate\Database\Eloquent\Relations\HasOneOrMany; use October\Rain\Database\Model; use ApplicationException; /** * RelationController uses a combination of lists and forms for managing Model relations. * * This behavior is implemented in the controller like so: * * public $implement = [ * \Backend\Behaviors\RelationController::class, * ]; * * public $relationConfig = 'config_relation.yaml'; * * The `$relationConfig` property makes reference to the configuration * values as either a YAML file, located in the controller view directory, * or directly as a PHP array. * * @see https://docs.octobercms.com/4.x/extend/forms/relation-controller.html Relation Controller Documentation * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class RelationController extends ControllerBehavior { use \Backend\Traits\FormModelSaver; use \Backend\Behaviors\RelationController\HasOverrides; use \Backend\Behaviors\RelationController\HasViewMode; use \Backend\Behaviors\RelationController\HasManageMode; use \Backend\Behaviors\RelationController\HasPivotMode; use \Backend\Behaviors\RelationController\HasExtraConfig; use \Backend\Behaviors\RelationController\HasNestedRelations; /** * @var const PARAM_FIELD postback parameter for the active relationship field */ const PARAM_FIELD = '_relation_field'; /** * @var const PARAM_EXTRA_CONFIG postback parameter for read only mode */ const PARAM_EXTRA_CONFIG = '_relation_extra_config'; /** * @var Backend\Widgets\Search searchWidget */ protected $searchWidget; /** * @var Backend\Widgets\Toolbar toolbarWidget */ protected $toolbarWidget; /** * @var array requiredProperties */ protected $requiredProperties = []; /** * @var array requiredRelationProperties that must exist for each relationship definition */ protected $requiredRelationProperties = ['label']; /** * @var array requiredConfig that must exist when applying the primary config file */ protected $requiredConfig = []; /** * @var array actions visible in context of the controller */ protected $actions = []; /** * @var object originalConfig values */ protected $originalConfig; /** * @var bool initialized informs if everything is ready */ protected $initialized = false; /** * @var string relationType */ public $relationType; /** * @var string relationName */ public $relationName; /** * @var Model relationModel */ public $relationModel; /** * @var Model relationParent */ public $relationParent; /** * @var Model relationObject */ public $relationObject; /** * @var Model model used as parent of the relationship */ protected $model; /** * @var string field for the relationship as defined in the configuration */ protected $field; /** * @var string alias is something unique to pass to widgets */ protected $alias; /** * @var array toolbarButtons to display in view mode. */ protected $toolbarButtons; /** * @var string eventTarget that triggered an AJAX event (button, list) */ protected $eventTarget; /** * @var string sessionKey used by forms for deferred bindings */ public $sessionKey; /** * @var string relationSessionKey used for binding relations */ public $relationSessionKey; /** * @var bool|null readOnly disables the ability to add, update, delete or create relations */ public $readOnly = null; /** * @var bool deferredBinding defers all binding actions using a session key */ public $deferredBinding = false; /** * @var string popupSize as, either giant, huge, large, small, tiny or adaptive */ public $popupSize = 'huge'; /** * @var string externalToolbarAppState defines a mount point for the editor toolbar. * Must include a module name that exports the Vue application and a state element name. * Format: stateElementName * Only works in Vue applications and form document layouts. */ public $externalToolbarAppState; /** * @var array customMessages contains default messages that you can override */ protected $customMessages = [ 'buttonCreate' => "Create :name", 'buttonCreateForm' => "Create", 'buttonCancelForm' => "Cancel", 'buttonCloseForm' => "Close", 'buttonUpdate' => "Update :name", 'buttonUpdateForm' => "Update", 'buttonAdd' => "Add :name", 'buttonAddMany' => "Add Selected", 'buttonAddForm' => "Add", 'buttonLink' => "Link :name", 'buttonDelete' => "Delete", 'buttonDeleteMany' => "Delete Selected", 'buttonRemove' => "Remove", 'buttonRemoveMany' => "Remove Selected", 'buttonUnlink' => "Unlink", 'buttonUnlinkMany' => "Unlink Selected", 'confirmDelete' => "Are you sure?", 'confirmUnlink' => "Are you sure?", 'titlePreviewForm' => "Preview :name", 'titleCreateForm' => "Create :name", 'titleUpdateForm' => "Update :name", 'titleLinkForm' => "Link a New :name", 'titleAddForm' => "Add a New :name", 'titlePivotForm' => "Related :name Data", 'flashCreate' => ":name Created", 'flashUpdate' => ":name Updated", 'flashDelete' => ":name Deleted", 'flashAdd' => ":name Added", 'flashLink' => ":name Linked", 'flashRemove' => ":name Removed", 'flashUnlink' => ":name Unlinked", ]; /** * __construct the behavior * @param Backend\Classes\Controller $controller */ public function __construct($controller) { parent::__construct($controller); // Build configuration $this->setConfig($controller->relationConfig ?? [], $this->requiredConfig); } /** * beforeDisplay fires before the page is displayed and AJAX is executed. */ public function beforeDisplay() { $this->addJs('js/october.relation.js'); $this->addCss('css/relation.css'); } /** * validateField validates the supplied field and initializes the relation manager. * @param string $field The relationship field. * @return string The active field name. */ protected function validateField($field = null) { $field = $field ?: post(self::PARAM_FIELD); if ($field && $field !== $this->field) { $this->initRelation($this->model, $field); } if (!$field && !$this->field) { throw new ApplicationException(Lang::get('backend::lang.relation.missing_definition', compact('field'))); } return $field ?: $this->field; } /** * prepareVars for display */ public function prepareVars() { $this->vars['relationLabel'] = $this->config->label ?: $this->field; $this->vars['relationField'] = $this->field; $this->vars['relationPopupSize'] = $this->popupSize; $this->vars['relationReadOnly'] = $this->readOnly; $this->vars['relationType'] = $this->relationType; $this->vars['relationSearchWidget'] = $this->searchWidget; $this->vars['relationToolbarWidget'] = $this->toolbarWidget; $this->vars['relationToolbarButtons'] = $this->toolbarButtons; $this->vars['relationSessionKey'] = $this->relationSessionKey; $this->vars['relationExtraConfig'] = $this->extraConfig; // Manage $this->vars['relationManageId'] = $this->manageId; $this->vars['relationManageTitle'] = $this->manageTitle; $this->vars['relationManageFilterWidget'] = $this->manageFilterWidget; $this->vars['relationManageFormWidget'] = $this->manageFormWidget; $this->vars['relationManageListWidget'] = $this->manageListWidget; $this->vars['relationManageModel'] = $this->manageModel; $this->vars['relationManageMode'] = $this->manageMode; // View $this->vars['relationViewFilterWidget'] = $this->viewFilterWidget; $this->vars['relationViewFormWidget'] = $this->viewFormWidget; $this->vars['relationViewListWidget'] = $this->viewListWidget; $this->vars['relationViewModel'] = $this->viewModel; $this->vars['relationViewMode'] = $this->viewMode; // Pivot $this->vars['relationPivotId'] = $this->pivotId; $this->vars['relationPivotTitle'] = $this->pivotTitle; $this->vars['relationPivotWidget'] = $this->pivotWidget; // Misc $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState; $this->vars['formSessionKey'] = post('_form_session_key', post('_session_key', FormHelper::getSessionKey())); // @deprecated $this->vars['relationManageWidget'] = $this->relationGetManageWidget(); $this->vars['relationViewWidget'] = $this->relationGetViewWidget(); } /** * beforeAjax is needed because each AJAX request must initialize the * relation's field name (_relation_field). */ protected function beforeAjax() { if ($this->initialized) { return; } if ($fatalError = $this->controller->getFatalError()) { throw new ApplicationException($fatalError); } $this->validateField(); $this->setExtraConfigForChain(); $this->prepareVars(); $this->initialized = true; } // // Interface // /** * initRelation prepares the widgets used by this behavior * @param Model $model * @param string $field * @return void */ public function initRelation($model, $field = null) { if ($extraConfig = post(self::PARAM_EXTRA_CONFIG)) { $this->setExtraConfig($extraConfig); $this->initNestedRelation($model, $field); } $this->initRelationInternal($model, $field); } /** * initRelationInternal is an internal method for initRelation * @param Model $model * @param string $field * @return void */ protected function initRelationInternal($model, $field = null) { if ($this->originalConfig === null) { $this->originalConfig = $this->controller->relationGetConfig(); } if ($field === null) { $field = post(self::PARAM_FIELD); } $this->config = $this->originalConfig; $this->model = $model; $this->field = $field; if (!$field) { return; } if (!$this->model) { throw new ApplicationException(Lang::get('backend::lang.relation.missing_model', [ 'class' => get_class($this->controller), ])); } if (!$this->model instanceof Model) { throw new ApplicationException(Lang::get('backend::lang.model.invalid_class', [ 'model' => get_class($this->model), 'class' => get_class($this->controller), ])); } // Configuration details if (!$this->relationHasField($field)) { throw new ApplicationException(Lang::get('backend::lang.relation.missing_definition', compact('field'))); } $this->applyExtraConfig($field); $this->alias = camel_case('relation ' . HtmlHelper::nameToId($field)); $this->config = $this->makeConfig($this->originalConfig->{$field}, $this->requiredRelationProperties); $this->controller->relationExtendConfig($this->config, $this->field, $this->model); $this->manageId = $this->getManageIdForField($field); $this->pivotId = post('pivot_id'); $this->foreignId = post('foreign_id'); [$this->sessionKey, $this->relationSessionKey] = $this->getSessionKeysForField($field); // Relationship details [$nestedModel, $nestedField] = $this->makeNestedRelationModel($this->model, $this->config->valueFrom ?? $field); if (!$nestedModel->hasRelation($nestedField)) { throw new ApplicationException(Lang::get('backend::lang.model.missing_relation', ['class' => get_class($nestedModel), 'relation' => $nestedField])); } $this->relationParent = $nestedModel; $this->relationName = $nestedField; $this->relationType = $nestedModel->getRelationType($nestedField); $this->relationObject = $nestedModel->{$nestedField}(); $this->relationModel = $this->relationObject instanceof HasOneOrMany ? $this->relationObject->make() : $this->relationObject->getRelated(); $this->readOnly = $this->getConfig('readOnly'); $this->popupSize = $this->getConfig('popupSize', 950); $this->externalToolbarAppState = $this->getConfig('externalToolbarAppState'); $this->eventTarget = $this->evalEventTarget(); $this->deferredBinding = $this->evalDeferredBinding(); $this->viewMode = $this->evalViewMode(); $this->manageMode = $this->evalManageMode(); $this->manageTitle = $this->evalManageTitle(); $this->pivotTitle = $this->evalPivotTitle(); $this->toolbarButtons = $this->evalToolbarButtons(); // Toolbar widget if ($this->toolbarWidget = $this->makeToolbarWidget()) { $this->toolbarWidget->bindToController(); } // Search widget if ($this->searchWidget = $this->makeSearchWidget()) { $this->searchWidget->bindToController(); } // View widgets if ($this->viewFilterWidget = $this->makeFilterWidgetFor('view')) { $this->controller->relationExtendViewFilterWidget($this->viewFilterWidget, $this->field, $this->model); $this->viewFilterWidget->bindToController(); } if ($this->viewListWidget = $this->makeViewListWidget()) { $this->controller->relationExtendViewListWidget($this->viewListWidget, $this->field, $this->model); $this->controller->relationExtendViewWidget($this->viewListWidget, $this->field, $this->model); $this->viewListWidget->bindToController(); } if ($this->viewFormWidget = $this->makeViewFormWidget()) { $this->controller->relationExtendViewFormWidget($this->viewFormWidget, $this->field, $this->model); $this->controller->relationExtendViewWidget($this->viewFormWidget, $this->field, $this->model); $this->viewFormWidget->bindToController(); } // Manage widgets if ($this->manageFilterWidget = $this->makeFilterWidgetFor('manage')) { $this->controller->relationExtendManageFilterWidget($this->manageFilterWidget, $this->field, $this->model); $this->manageFilterWidget->bindToController(); } if ($this->manageListWidget = $this->makeManageListWidget()) { $this->controller->relationExtendManageListWidget($this->manageListWidget, $this->field, $this->model); $this->controller->relationExtendManageWidget($this->manageListWidget, $this->field, $this->model); $this->manageListWidget->bindToController(); } if ($this->manageFormWidget = $this->makeManageFormWidget()) { $this->controller->relationExtendManageFormWidget($this->manageFormWidget, $this->field, $this->model); $this->controller->relationExtendManageWidget($this->manageFormWidget, $this->field, $this->model); $this->manageFormWidget->bindToController(); } // Pivot widget if ($this->pivotWidget = $this->makePivotFormWidget()) { $this->controller->relationExtendPivotFormWidget($this->pivotWidget, $this->field, $this->model); $this->controller->relationExtendPivotWidget($this->pivotWidget, $this->field, $this->model); $this->pivotWidget->bindToController(); } } /** * relationHasField */ public function relationHasField(string $field): bool { if ($this->originalConfig === null) { $this->config = $this->originalConfig = $this->controller->relationGetConfig(); } return (bool) ($this->originalConfig->{$field} ?? false); } /** * relationRegisterField registers a new relation dynamically */ public function relationRegisterField(string $relationName, array $config) { if ($this->originalConfig === null) { $this->config = $this->originalConfig = $this->controller->relationGetConfig(); } $this->originalConfig->{$relationName} = $config; } /** * relationRender renders the relationship manager. * @param string $field The relationship field. * @param array $options * @return string Rendered HTML for the relationship manager. */ public function relationRender($field = null, $options = []) { if ($field === null) { $field = $this->field; } // Session key if (is_string($options)) { $options = ['sessionKey' => $options]; } if (isset($options['sessionKey'])) { $this->sessionKey = $options['sessionKey']; } // Apply options and extra config $allowConfig = ['readOnly', 'readOnlyDefault', 'recordUrl', 'recordOnClick']; $extraConfig = array_only($options, $allowConfig); $this->setExtraConfigForRender($extraConfig); $this->applyExtraConfig($field); // Initialize $this->validateField($field); $this->prepareVars(); // Determine the partial to use based on the supplied section option $section = strtolower($options['section'] ?? ''); return match ($section) { 'toolbar' => $this->toolbarWidget?->render(), 'view' => $this->relationMakePartial('view'), default => $this->relationMakePartial('container'), }; } /** * relationRefresh refreshes the relation container only, useful for returning in custom AJAX requests. * @param string $field Relation definition. * @return array The relation element selector as the key, and the relation view contents are the value. */ public function relationRefresh($field = null) { $field = $this->validateField($field); $result = ['#'.$this->relationGetId('view') => $this->relationRenderView($field)]; if ($toolbar = $this->relationRenderToolbar($field)) { $result['#'.$this->relationGetId('toolbar')] = $toolbar; } if ($eventResult = $this->controller->relationExtendRefreshResults($field)) { $result = $eventResult + $result; } return $result; } /** * relationRenderToolbar renders the toolbar only. * @param string $field The relationship field. * @return string Rendered HTML for the toolbar. */ public function relationRenderToolbar($field = null) { return $this->relationRender($field, ['section' => 'toolbar']); } /** * relationRenderView renders the view only. * @param string $field The relationship field. * @return string Rendered HTML for the view. */ public function relationRenderView($field = null) { return $this->relationRender($field, ['section' => 'view']); } /** * relationMakePartial is a controller accessor for making partials within this behavior. * @param string $partial * @param array $params * @return string Partial contents */ public function relationMakePartial($partial, $params = []) { $contents = $this->controller->makePartial('relation_'.$partial, $params + $this->vars, false); if (!$contents) { $contents = $this->makePartial($partial, $params); } return $contents; } /** * relationGetId returns a unique ID for this relation and field combination. * @param string $suffix A suffix to use with the identifier. * @return string */ public function relationGetId($suffix = null) { $id = class_basename($this); if ($this->field) { $id .= '-' . HtmlHelper::nameToId($this->field); } if ($suffix !== null) { $id .= '-' . $suffix; } return $this->controller->getId($id); } /** * relationGetSessionKey returns the active session key for relation binding. */ public function relationGetSessionKey() { return $this->relationSessionKey; } /** * relationGetConfig returns the configuration used by this behavior. You may override this * method in your controller as an alternative to defining a relationConfig property. * @return object */ public function relationGetConfig() { return $this->config; } /** * relationGetMessage is a public API for accessing custom messages */ public function relationGetMessage(string $code): string { return $this->getCustomLang($code); } // // Widgets // /** * makeFilterWidgetFor * @param $type string Either 'manage' or 'view' * @return \Backend\Classes\WidgetBase|null */ protected function makeFilterWidgetFor($type) { if (!$this->getConfig($type . '[filter]')) { return null; } $filterConfig = $this->makeConfig($this->getConfig("{$type}[filter]")); $filterConfig->model = $this->relationModel; $filterConfig->alias = $this->alias . ucfirst($type) . 'Filter'; $filterConfig->customPageName = $this->getConfig("{$type}[customPageName]", false); $filterWidget = $this->makeWidget(\Backend\Widgets\Filter::class, $filterConfig); return $filterWidget; } /** * makeToolbarWidget */ protected function makeToolbarWidget() { $defaultConfig = []; // Add buttons to toolbar $defaultButtons = null; if (!$this->readOnly && $this->toolbarButtons) { $defaultButtons = '~/modules/backend/behaviors/relationcontroller/partials/_toolbar.php'; } $defaultConfig['buttons'] = $this->getConfig('view[toolbarPartial]', $defaultButtons); // Make config $toolbarConfig = $this->makeConfig($this->getConfig('toolbar', $defaultConfig)); $toolbarConfig->alias = $this->alias . 'Toolbar'; // Add search to toolbar $useSearch = $this->viewMode === 'multi' && $this->getConfig('view[showSearch]'); if ($useSearch) { $toolbarConfig->search = [ 'prompt' => 'backend::lang.list.search_prompt' ]; } // No buttons, no search should mean no toolbar if (empty($toolbarConfig->search) && empty($toolbarConfig->buttons)) { return; } $toolbarWidget = $this->makeWidget(\Backend\Widgets\Toolbar::class, $toolbarConfig); $toolbarWidget->cssClasses[] = 'list-header'; return $toolbarWidget; } /** * makeSearchWidget */ protected function makeSearchWidget() { if (!$this->getConfig('manage[showSearch]')) { return null; } $config = $this->makeConfig(); $config->alias = $this->alias . 'ManageSearch'; $config->growable = false; $config->prompt = 'backend::lang.list.search_prompt'; $widget = $this->makeWidget(\Backend\Widgets\Search::class, $config); $widget->cssClasses[] = 'recordfinder-search'; // Persist the search term across AJAX requests only if (!Request::ajax()) { $widget->setActiveTerm(null); } return $widget; } // // Helpers // /** * findExistingRelationIds returns the existing record IDs for the relation. */ protected function findExistingRelationIds($checkIds = null) { $foreignKeyName = $this->relationModel->getQualifiedKeyName(); $results = $this->relationObject ->getBaseQuery() ->select($foreignKeyName); if ($checkIds !== null && is_array($checkIds) && count($checkIds)) { $results = $results->whereIn($foreignKeyName, $checkIds); } return $results->pluck($foreignKeyName)->all(); } /** * evalDeferredBinding */ protected function evalDeferredBinding(): bool { if ($this->relationType === 'hasManyThrough') { return false; } return $this->getConfig('deferredBinding') || !$this->relationParent->exists; } /** * evalToolbarButtons determines the default buttons based on the model relationship type. */ protected function evalToolbarButtons(): array { $buttons = $this->getConfig('view[toolbarButtons]'); if ($buttons === false) { return []; } elseif (is_string($buttons)) { return array_map('trim', explode('|', $buttons)); } elseif (is_array($buttons)) { return $buttons; } if ($this->manageMode === 'pivot') { return ['add', 'remove']; } switch ($this->relationType) { case 'hasMany': case 'morphMany': return ['create', 'delete']; case 'belongsToMany': case 'morphedByMany': case 'morphToMany': return ['create', 'add', 'delete', 'remove']; case 'hasOne': case 'morphOne': case 'belongsTo': return ['create', 'update', 'link', 'delete', 'unlink']; case 'hasManyThrough': return []; } return []; } /** * evalFormContext determines supplied form context */ protected function evalFormContext($mode = 'manage', $exists = false) { $config = $this->config->{$mode} ?? []; $context = FormField::CONTEXT_CREATE; if ($exists) { $context = FormField::CONTEXT_UPDATE; } if ($this->readOnly) { $context = FormField::CONTEXT_PREVIEW; } if ($configContext = array_get($config, 'context')) { $context = is_array($configContext) ? array_get($configContext, $context, $context) : $configContext; } return $context; } /** * makeConfigForMode returns the configuration for a mode (view, manage, pivot) for an * expected type (list, form) and uses fallback configuration */ protected function makeConfigForMode($mode = 'view', $type = 'list') { $config = null; // Look for $this->config->view['list'] if ( isset($this->config->{$mode}) && array_key_exists($type, $this->config->{$mode}) ) { $config = $this->config->{$mode}[$type]; } // Look for $this->config->list elseif (isset($this->config->{$type})) { $config = $this->config->{$type}; } // Apply substitutes: // - view.list => manage.list if ($config === null) { if ($mode === 'manage' && $type === 'list') { return $this->makeConfigForMode('view', $type); } return false; } return $this->makeConfig($config); } /** * getCustomLang parses custom messages provided by the config */ protected function getCustomLang(string $name, ?string $default = null, array $extras = []): string { $foundKey = $this->getConfig("customMessages[{$name}]"); if ($foundKey === null) { $foundKey = $this->originalConfig->customMessages[$name] ?? null; } if ($foundKey === null) { $foundKey = $default; } if ($foundKey === null) { $foundKey = $this->customMessages[$name] ?? '???'; } $vars = $extras + [ 'name' => Lang::get($this->getConfig('label', $this->field)) ]; return Lang::get($foundKey, $vars); } /** * showFlashMessage displays a flash message if its found */ protected function showFlashMessage(string $message): void { if (!$this->useFlashMessages()) { return; } if ($message = $this->getCustomLang($message)) { Flash::success($message); } } /** * useFlashMessages determines if flash messages should be used */ protected function useFlashMessages(): bool { $useFlash = $this->getConfig('showFlash'); if ($useFlash === null) { $useFlash = $this->originalConfig->showFlash ?? null; } if ($useFlash === null) { $useFlash = true; } return $useFlash; } } ================================================ FILE: modules/backend/behaviors/ReorderController.php ================================================ <?php namespace Backend\Behaviors; use Lang; use Backend; use ApplicationException; use Backend\Classes\ControllerBehavior; /** * ReorderController is deprecated * @deprecated see ListController with structure config * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class ReorderController extends ControllerBehavior { /** * @inheritDoc */ protected $requiredProperties = ['reorderConfig']; /** * @var array Configuration values that must exist when applying the primary config file. */ protected $requiredConfig = ['modelClass']; /** * @var array Visible actions in context of the controller */ protected $actions = ['reorder']; /** * @var Model Import model */ public $model; /** * @var string Model attribute to use for the display name */ public $nameFrom = 'name'; /** * @var bool Display parent/child relationships in the list. */ protected $showTree = false; /** * @var string Reordering mode. * - simple: October\Rain\Database\Traits\Sortable * - nested: October\Rain\Database\Traits\NestedTree */ protected $sortMode; /** * @var Backend\Classes\WidgetBase Reference to the widget used for the toolbar. */ protected $toolbarWidget; /** * __construct the behavior * @param Backend\Classes\Controller $controller */ public function __construct($controller) { parent::__construct($controller); /* * Build configuration */ $this->config = $this->makeConfig($this->controller->reorderConfig, $this->requiredConfig); /* * Populate from config */ $this->nameFrom = $this->getConfig('nameFrom', $this->nameFrom); } /** * beforeDisplay fires before the page is displayed and AJAX is executed. */ public function beforeDisplay() { /* * Widgets */ if ($this->toolbarWidget = $this->makeToolbarWidget()) { $this->toolbarWidget->bindToController(); } } // // Controller actions // public function reorder() { $this->addJs('js/october.reorder.js'); $this->controller->pageTitle = $this->controller->pageTitle ?: Lang::get($this->getConfig('title', 'backend::lang.reorder.default_title')); $this->validateModel(); $this->prepareVars(); } // // AJAX // public function onReorder() { $model = $this->validateModel(); /* * Simple */ if ($this->sortMode == 'simple') { if ( (!$ids = post('record_ids')) || (!$orders = post('sort_orders')) ) { return; } $model->setSortableOrder($ids, $orders); } /* * Nested set */ elseif ($this->sortMode == 'nested') { $sourceNode = $model->find(post('sourceNode')); $targetNode = post('targetNode') ? $model->find(post('targetNode')) : null; if ($sourceNode == $targetNode) { return; } switch (post('position')) { case 'before': $sourceNode->moveBefore($targetNode); break; case 'after': $sourceNode->moveAfter($targetNode); break; case 'child': $sourceNode->makeChildOf($targetNode); break; default: $sourceNode->makeRoot(); break; } } } // // Reordering // /** * Prepares common form data */ protected function prepareVars() { $this->vars['reorderRecords'] = $this->getRecords(); $this->vars['reorderModel'] = $this->model; $this->vars['reorderSortMode'] = $this->sortMode; $this->vars['reorderShowTree'] = $this->showTree; $this->vars['reorderToolbarWidget'] = $this->toolbarWidget; } public function reorderRender() { return $this->reorderMakePartial('container'); } public function reorderGetModel() { if ($this->model !== null) { return $this->model; } $modelClass = $this->getConfig('modelClass'); if (!$modelClass) { throw new ApplicationException('Please specify the modelClass property for reordering'); } return $this->model = new $modelClass; } /** * Returns the display name for a record. * @return string */ public function reorderGetRecordName($record) { return $record->{$this->nameFrom}; } /** * validateModel validates the supplied form model. */ protected function validateModel() { $model = $this->controller->reorderGetModel(); $modelTraits = class_uses($model); if (isset($modelTraits[\October\Rain\Database\Traits\Sortable::class])) { $this->sortMode = 'simple'; } elseif (isset($modelTraits[\October\Rain\Database\Traits\NestedTree::class])) { $this->sortMode = 'nested'; $this->showTree = true; } else { throw new ApplicationException('The model must implement the NestedTree or Sortable traits.'); } return $model; } /** * Returns all the records from the supplied model. * @return Collection */ protected function getRecords() { $records = null; $model = $this->controller->reorderGetModel(); $query = $model->newQuery(); $this->controller->reorderExtendQuery($query); if ($this->sortMode == 'simple') { $records = $query ->orderBy($model->getSortOrderColumn()) ->get() ; } elseif ($this->sortMode == 'nested') { $records = $query->getNested(); } return $records; } /** * Extend the query used for finding reorder records. Extra conditions * can be applied to the query, for example, $query->withTrashed(); * @param October\Rain\Database\Builder $query * @return void */ public function reorderExtendQuery($query) { } // // Widgets // protected function makeToolbarWidget() { if ($toolbarConfig = $this->getConfig('toolbar')) { $toolbarConfig = $this->makeConfig($toolbarConfig); $toolbarWidget = $this->makeWidget(\Backend\Widgets\Toolbar::class, $toolbarConfig); } else { $toolbarWidget = null; } return $toolbarWidget; } // // Helpers // /** * Controller accessor for making partials within this behavior. * @param string $partial * @param array $params * @return string Partial contents */ public function reorderMakePartial($partial, $params = []) { $contents = $this->controller->makePartial( 'reorder_' . $partial, $params + $this->vars, false ); if (!$contents) { $contents = $this->makePartial($partial, $params); } return $contents; } } ================================================ FILE: modules/backend/behaviors/UserPreferencesModel.php ================================================ <?php namespace Backend\Behaviors; use System\Behaviors\SettingsModel; use Backend\Models\UserPreference; /** * UserPreferencesModel extension, identical to System\Behaviors\SettingsModel * except values are set against the logged in user's preferences via Backend\Models\UserPreference * * Add this the model class definition: * * public $implement = [\Backend\Behaviors\UserPreferencesModel::class]; * public $settingsCode = 'author.plugin::code'; * public $settingsFields = 'fields.yaml'; * * @todo This class will be deprecated soon * @see Backend\Models\UserPreferenceModel */ class UserPreferencesModel extends SettingsModel { /** * @var array Internal cache of model objects. */ private static $instances = []; /** * Constructor */ public function __construct($model) { parent::__construct($model); $this->model->setTable('backend_user_preferences'); } /** * Create an instance of the settings model, intended as a static method */ public function instance() { if (isset(self::$instances[$this->recordCode])) { return self::$instances[$this->recordCode]; } $item = $this->getSettingsRecord(); if (!$item) { $this->model->initSettingsData(); $item = $this->model; } return self::$instances[$this->recordCode] = $item; } /** * Checks if the model has been set up previously, intended as a static method */ public function isConfigured() { return $this->getSettingsRecord() !== null; } /** * Returns the raw Model record that stores the settings. * @return Model */ public function getSettingsRecord() { $item = UserPreference::forUser(); $record = $item ->scopeApplyKeyAndUser($this->model, $this->recordCode, $item->userContext) ->remember(1440, $this->getCacheKey()) ->first(); return $record ?: null; } /** * Before the model is saved, ensure the record code is set * and the jsonable field values */ public function beforeModelSave() { $preferences = UserPreference::forUser(); [$namespace, $group, $item] = $preferences->parseKey($this->recordCode); $this->model->item = $item; $this->model->group = $group; $this->model->namespace = $namespace; $this->model->user_id = $preferences->userContext->id; if ($this->fieldValues) { $this->model->value = $this->fieldValues; } } /** * Checks if a key is legitimate or should be added to * the field value collection */ protected function isKeyAllowed($key) { /* * Let the core columns through */ if ($key == 'namespace' || $key == 'group') { return true; } return parent::isKeyAllowed($key); } /** * Returns a cache key for this record. */ protected function getCacheKey() { $item = UserPreference::forUser(); $userId = $item->userContext ? $item->userContext->id : 0; return $this->recordCode.'-userpreference-'.$userId; } } ================================================ FILE: modules/backend/behaviors/formcontroller/HasFormDesigns.php ================================================ <?php namespace Backend\Behaviors\FormController; use Backend; use ApplicationException; /** * HasFormDesigns */ trait HasFormDesigns { /** * getDesignDisplayMode returns the display mode taken from the form configuration, * defaults to `basic` display mode. */ protected function getDesignDisplayMode() { return $this->getConfig( "{$this->context}[design][displayMode]", $this->getConfig('design[displayMode]') ) ?: 'basic'; } /** * getDesignFormSize returns the page size taken from the form configuration, * can also specify a custom configuration name, e.g. `sidebarSize`. */ protected function getDesignFormSize($name = 'size') { $value = $this->getConfig( "{$this->context}[design][{$name}]", $this->getConfig("design[{$name}]") ) ?: 'auto'; return Backend::sizeToPixels($value) ?: null; } /** * getDesignBodyClass */ protected function getDesignBodyClass() { if ($this->getDesignDisplayMode() === 'sidebar') { return 'compact-container'; } return null; } /** * isHorizontalForm */ protected function isHorizontalForm(): bool { if ($this->getConfig("{$this->context}[design][horizontalMode]", $this->getConfig('design[horizontalMode]'))) { return true; } return $this->getDesignDisplayMode() === 'survey'; } /** * isSurveyDesign */ protected function isSurveyDesign(): bool { if ($this->getConfig("{$this->context}[design][surveyMode]", $this->getConfig('design[surveyMode]'))) { return true; } return $this->getDesignDisplayMode() === 'survey'; } /** * isPopupDesign */ protected function isPopupDesign(): bool { return $this->getDesignDisplayMode() === 'popup'; } /** * beforeDisplayPopup */ protected function beforeDisplayPopup() { $updateId = $this->getPopupFormRecordId(); // Emulate the form action if (post('form_popup_flag')) { if ($updateId) { $this->update($updateId); } else { $this->create(); } return; } // Initialize the model for relation AJAX requests inside popup forms // this is needed since bindToPopups doesn't propagate far enough, so // this could be removed if that ability was improved to go further. if ($this->controller->isClassExtendedWith(\Backend\Behaviors\RelationController::class)) { $this->controller->initRelation($this->controller->formCreateModelObject()); } } /** * hidePopupDesign */ protected function hidePopupDesign() { $this->extensionHideMethod('index_onPopupLoadForm'); $this->extensionHideMethod('index_onPopupSave'); $this->extensionHideMethod('index_onPopupDelete'); $this->extensionHideMethod('index_onPopupCancel'); } /** * index_onPopupLoadForm */ public function index_onLoadPopupForm() { if (!$this->isPopupDesign()) { throw new ApplicationException(__("This form is not using a popup design.")); } if ($id = $this->getPopupFormRecordId()) { $this->update($id); $this->vars['popupTitle'] = $this->getLang('update[title]', 'backend::lang.form.update_title'); $this->vars['recordId'] = $id; } else { $this->create(); $this->vars['popupTitle'] = $this->getLang('create[title]', 'backend::lang.form.create_title'); } $this->vars['popupSize'] = $this->controller->pageSize; return $this->formRenderDesign(); } /** * index_onSave */ public function index_onPopupSave() { if ($id = $this->getPopupFormRecordId()) { $this->update_onSave($id); } else { $this->create_onSave(); } return $this->controller->listRefresh(); } /** * index_onPopupCancel */ public function index_onPopupCancel() { if ($id = $this->getPopupFormRecordId()) { $this->update_onCancel($id); } else { $this->create_onCancel(); } } /** * index_onPopupDelete */ public function index_onPopupDelete() { if ($id = $this->getPopupFormRecordId()) { $this->update_onDelete($id); } return $this->controller->listRefresh(); } /** * getPopupFormRecordId returns the target identifier for the record, * contained within the `form_record_id` postback value. The value is * decoded since HTML attributes are escaped and it may be a string. */ protected function getPopupFormRecordId(): string { return urldecode((string) post('form_record_id')); } } ================================================ FILE: modules/backend/behaviors/formcontroller/HasMultisite.php ================================================ <?php namespace Backend\Behaviors\FormController; use Site; /** * HasMultisite contains logic for managing multisite records */ trait HasMultisite { /** * formHasMultisite */ public function formHasMultisite($model) { return $model && $model->isClassInstanceOf(\October\Contracts\Database\MultisiteInterface::class) && $model->isMultisiteEnabled(); } /** * makeMultisiteRedirect */ public function makeMultisiteRedirect($context = null, $model = null) { if (!$model || !$this->controller->formHasMultisite($model)) { return; } $activeSiteId = Site::getSiteIdFromContext(); if ((int) $model->site_id === (int) $activeSiteId) { return; } $otherModel = $model->findOrCreateForSite($activeSiteId); return $this->makeRedirect($context, $otherModel, ['_site_id' => $activeSiteId]); } /** * onSwitchSite */ public function onSwitchSite($recordId = null) { $result = []; $siteId = post('site_id'); $model = $this->controller->formFindModelObject($recordId); if (!$siteId || !$model) { return $result; } $otherModel = $model->findForSite($siteId); // Model missing or trashed $showConfirm = !$otherModel || ( $otherModel->isClassInstanceOf(\October\Contracts\Database\SoftDeleteInterface::class) && $otherModel->trashed() ); if ($showConfirm) { $result['confirm'] = __('A record does not exist for the selected site. Create one?'); } return $result; } /** * addHandlerToSiteSwitcher */ protected function addHandlerToSiteSwitcher() { $siteSwitcher = $this->getWidget('siteSwitcher'); if (!$siteSwitcher) { return; } $siteSwitcher->setSwitchHandler('onSwitchSite'); } } ================================================ FILE: modules/backend/behaviors/formcontroller/HasMultisiteGroup.php ================================================ <?php namespace Backend\Behaviors\FormController; /** * HasMultisiteGroup contains logic for managing multisite group records. * * Unlike HasMultisite which handles per-site record switching, this concern * handles models scoped by site_group_id (tenant). The site group * context determines which records are visible, and language/translation * is handled separately by the Translate plugin. */ trait HasMultisiteGroup { /** * formHasMultisiteGroup checks if a model uses site group scoping */ public function formHasMultisiteGroup($model) { return $model && $model->isClassInstanceOf(\October\Contracts\Database\MultisiteGroupInterface::class) && $model->isMultisiteGroupEnabled(); } } ================================================ FILE: modules/backend/behaviors/formcontroller/HasOverrides.php ================================================ <?php namespace Backend\Behaviors\FormController; use Backend; /** * HasOverrides in the controller */ trait HasOverrides { /** * formGetRedirectUrl returns a URL based on supplied context, * relative URLs are treated as backend URLs * @param string $context * @param \Model $model * @return string */ public function formGetRedirectUrl($context = null, $model = null) { } /** * formBeforeSave is called before the creation or updating form is saved * @param \Model */ public function formBeforeSave($model) { /** * @event backend.form.beforeSave * Called before the form model is saved * * Example usage: * * Event::listen('backend.form.beforeSave', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * $model->slug = Str::slug($model->name); * }); * */ } /** * formAfterSave is called after the creation or updating form is saved * @param \Model */ public function formAfterSave($model) { /** * @event backend.form.afterSave * Called after the form model is saved * * Example usage: * * Event::listen('backend.form.afterSave', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * $model->slug = Str::slug($model->name); * }); * */ } /** * formBeforeCreate is called before the creation form is saved * @param \Model */ public function formBeforeCreate($model) { /** * @event backend.form.beforeCreate * Called before the form model is created * * Example usage: * * Event::listen('backend.form.beforeCreate', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * $model->slug = Str::slug($model->name); * }); * */ } /** * formAfterCreate is called after the creation form is saved * @param \Model */ public function formAfterCreate($model) { /** * @event backend.form.afterCreate * Called after the form model is created * * Example usage: * * Event::listen('backend.form.afterCreate', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * $model->slug = Str::slug($model->name); * }); * */ } /** * formBeforeUpdate is called before the updating form is saved * @param \Model */ public function formBeforeUpdate($model) { /** * @event backend.form.beforeUpdate * Called before the form model is updated * * Example usage: * * Event::listen('backend.form.beforeUpdate', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * $model->slug = Str::slug($model->name); * }); * */ } /** * formAfterUpdate is called after the updating form is saved * @param \Model */ public function formAfterUpdate($model) { /** * @event backend.form.afterUpdate * Called after the form model is updated * * Example usage: * * Event::listen('backend.form.afterUpdate', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * $model->slug = Str::slug($model->name); * }); * */ } /** * formAfterDelete called after the form model is deleted * @param \Model */ public function formAfterDelete($model) { /** * @event backend.form.afterDelete * Called after the form model is deleted * * Example usage: * * Event::listen('backend.form.afterDelete', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * // Delete other records * }); * */ } /** * formAfterCancel called after the user has cancelled the form * @param \Model */ public function formAfterCancel($model) { /** * @event backend.form.afterCancel * Called after the form model has deferred binding cancelled * * Example usage: * * Event::listen('backend.form.afterCancel', function ((\Backend\Classes\Controller) $controller, (\Model) $model) { * // Delete other records * }); * */ } /** * formCreateModelObject creates a new instance of a form model. This logic can * be changed by overriding it in the controller. * @return Model */ public function formCreateModelObject() { return $this->createModel(); } /** * formExtendFieldsBefore is called before the form fields are defined * @param \Backend\Widgets\Form $host The hosting form widget * @return void */ public function formExtendFieldsBefore($host) { } /** * formExtendFields is called after the form fields are defined * @param \Backend\Widgets\Form $host The hosting form widget * @param \October\Rain\Element\ElementHolder|array $fields Array of all defined form field objects (\Backend\Classes\FormField) * @return void */ public function formExtendFields($host, $fields) { } /** * formExtendRefreshData is called before the form is refreshed, should return an array * of additional save data. * @param \Backend\Widgets\Form $host The hosting form widget * @param array $saveData Current save data * @return array */ public function formExtendRefreshData($host, $saveData) { } /** * formExtendRefreshFields is called when the form is refreshed, giving the opportunity * to modify the form fields. * @param \Backend\Widgets\Form $host The hosting form widget * @param array $fields Current form fields * @return array */ public function formExtendRefreshFields($host, $fields) { } /** * formExtendRefreshResults is called after the form is refreshed, should return an * array of additional result parameters. * @param \Backend\Widgets\Form $host The hosting form widget * @param array $result Current result parameters. * @return array */ public function formExtendRefreshResults($host, $result) { } /** * formExtendModel extends the supplied model used by create and update actions, the model can * be altered by overriding it in the controller. * @param \Model $model * @return Model */ public function formExtendModel($model) { } /** * formExtendQuery extends the query used for finding the form model. Extra conditions * can be applied to the query, for example, $query->withTrashed(); * @param October\Rain\Database\Builder $query * @return void */ public function formExtendQuery($query) { } } ================================================ FILE: modules/backend/behaviors/formcontroller/HasRenderers.php ================================================ <?php namespace Backend\Behaviors\FormController; use SystemException; /** * HasRenderers */ trait HasRenderers { /** * formRenderField is a view helper to render a single form field. * * <?= $this->formRenderField('field_name') ?> * * @param string $name Field name * @param array $options (e.g. ['useContainer'=>false]) * @return string HTML markup */ public function formRenderField($name, $options = []) { return $this->formWidget->renderField($name, $options); } /** * formRefreshField is a view helper to render a field from AJAX based on their field names. * @param array|string $names */ public function formRefreshFields($names): array { $result = []; foreach ((array) $names as $name) { if (!$fieldObject = $this->formWidget->getField($name)) { throw new SystemException("Field {$name} was not found in the form definitions."); } $result['#' . $fieldObject->getId('group')] = $this->formRenderField($name, ['useContainer' => false]); } return $result; } /** * formRenderPreview is a view helper to render the form in preview mode. * * <?= $this->formRenderPreview() ?> * * @return string The form HTML markup. */ public function formRenderPreview() { return $this->formWidget->render(['preview' => true]); } /** * formHasOutsideFields is a view helper to check if a form tab has fields in the * non-tabbed section (outside fields). * * <?php if ($this->formHasOutsideFields()): ?> * <!-- Do something --> * <?php endif ?> * * @return bool */ public function formHasOutsideFields() { return $this->formWidget->getTab('outside')->hasFields(); } /** * formRenderOutsideFields is a view helper to render the form fields belonging to the * non-tabbed section (outside form fields). * * <?= $this->formRenderOutsideFields() ?> * * @return string HTML markup */ public function formRenderOutsideFields($options = []) { return $this->formWidget->render(['section' => 'outside'] + $options); } /** * formHasPrimaryTabs is a view helper to check if a form tab has fields in the * primary tab section. * * <?php if ($this->formHasPrimaryTabs()): ?> * <!-- Do something --> * <?php endif ?> * * @return bool */ public function formHasPrimaryTabs() { return $this->formWidget->getTab('primary')->hasFields(); } /** * formRenderPrimaryTabs is a view helper to render the form fields belonging to the * primary tabs section. * * <?= $this->formRenderPrimaryTabs() ?> * * @return string HTML markup */ public function formRenderPrimaryTabs($options = []) { return $this->formWidget->render(['section' => 'primary'] + $options); } /** * formRenderPrimaryTab renders the contents of a primary tab */ public function formRenderPrimaryTab($tabName, $options = []) { return $this->formWidget->renderTab($tabName, $options); } /** * formHasSecondaryTabs is a view helper to check if a form tab has fields in the * secondary tab section. * * <?php if ($this->formHasSecondaryTabs()): ?> * <!-- Do something --> * <?php endif ?> * * @return bool */ public function formHasSecondaryTabs() { return $this->formWidget->getTab('secondary')->hasFields(); } /** * formRenderSecondaryTabs is a view helper to render the form fields belonging to the * secondary tabs section. * * <?= $this->formRenderPrimaryTabs() ?> * * @return string HTML markup */ public function formRenderSecondaryTabs($options = []) { return $this->formWidget->render(['section' => 'secondary'] + $options); } /** * formRenderSecondaryTab renders the contents of a secondary tab */ public function formRenderSecondaryTab($tabName, $options = []) { return $this->formWidget->renderTab($tabName, ['secondaryTab' => true] + $options); } } ================================================ FILE: modules/backend/behaviors/formcontroller/partials/_buttons.php ================================================ <div> <?php if (!$this->formGetModel()->exists): ?> <?= Ui::ajaxButton( label: __("Create"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Create & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataBrowserRedirectBack: true, dataRequestData: "close: true", dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> <?php else: ?> <?= Ui::ajaxButton( label: __("Save"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Save & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataBrowserRedirectBack: true, dataRequestData: "close: true", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?php if ($this->formCheckPermission('modelDelete')): ?> <?= Ui::iconButton( label: __("Delete"), icon: 'oc-icon-delete', handler: 'onDelete', danger: true, hotkey: ['shift+option+d'], class: 'pull-right', dataBrowserRedirectBack: true, dataRequestConfirm: __("Delete this record?"), dataRequestMessage: __("Deleting :name...", ['name' => $formRecordName]) ) ?> <?php endif ?> <?php endif ?> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <?= Ui::ajaxButton( label: __("Cancel"), handler: 'onCancel', hotkey: ['shift+option+c'], href: 'javascript:;', class: 'btn-link p-0', dataBrowserRedirectBack: true, dataRequestData: "close: true", dataRequestMessage: __("Loading...") ) ?> </span> </div> ================================================ FILE: modules/backend/behaviors/formcontroller/partials/_error.php ================================================ <div class="form-fatal-error"> <p class="flash-message static error"> <?= e($fatalError) ?> </p> <p> <?= Ui::button( label: __("Return to Previous Page"), href: Backend::url($this->formGetConfig()->defaultRedirect ?? ''), icon: 'icon-arrow-left', secondary: true, dataBrowserRedirectBack: true ) ?> </p> </div> ================================================ FILE: modules/backend/behaviors/formcontroller/partials/_mode_basic.php ================================================ <?php $isHorizontal = $this->formGetWidget()->horizontalMode; ?> <?= Form::open(['class' => 'd-flex flex-column h-100 design-basic']) ?> <?= Block::placeholder('form:before-form') ?> <div class="flex-grow-1"> <?= $this->formRender($options) ?> </div> <?= Block::placeholder('form:after-form') ?> <?php if ($this->formGetContext() !== 'preview'): ?> <div class="form-buttons pt-3 <?= $isHorizontal ? 'is-horizontal' : '' ?>"> <div data-control="loader-container"> <?= $this->formRender(['section' => 'buttons']) ?> </div> </div> <?php endif ?> <?= Form::close() ?> ================================================ FILE: modules/backend/behaviors/formcontroller/partials/_mode_popup.php ================================================ <?= Form::open([ 'id' => $this->formGetId('managePopup'), 'data-popup-size' => $popupSize ?? 950 ]) ?> <input type="hidden" name="form_popup_flag" value="1" /> <input type="hidden" name="form_record_id" value="<?= $recordId ?? '' ?>" /> <div class="modal-header"> <h4 class="modal-title"><?= e($popupTitle ?? '') ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <?= $this->formRender() ?> </div> <div class="modal-footer"> <div class="form-buttons"> <?= $this->formRender(['section' => 'buttons']) ?> </div> </div> <?= Form::close() ?> <script> oc.popup.focusFirstInput('#<?= $this->formGetId('managePopup') ?>'); oc.popup.bindToPopups('#<?= $this->formGetId('managePopup') ?>', { form_popup_flag: 1, form_record_id: '<?= $recordId ?? '' ?>' }); </script> ================================================ FILE: modules/backend/behaviors/formcontroller/partials/_mode_sidebar.php ================================================ <?php $isHorizontal = $this->formGetWidget()->horizontalMode; ?> <?php Block::put('form-contents') ?> <?= Block::placeholder('form:before-form') ?> <div class="layout-row"> <?= $this->formRenderOutsideFields(['useContainer' => false]) ?> <?= $this->formRenderPrimaryTabs(['useContainer' => false]) ?> </div> <?= Block::placeholder('form:after-form') ?> <?php if ($this->formGetContext() !== 'preview'): ?> <div class="form-buttons pt-3 <?= $isHorizontal ? 'is-horizontal' : '' ?>"> <div data-control="loader-container"> <?= $this->formRender(['section' => 'buttons']) ?> </div> </div> <?php endif ?> <?php Block::endPut() ?> <?php Block::put('form-sidebar') ?> <div class="hide-tabs"> <?= $this->formRenderSecondaryTabs(['useContainer' => false]) ?> </div> <?php Block::endPut() ?> <?php Block::put('body') ?> <?= Form::open(['class'=>'position-relative h-100']) ?> <div id="<?= $this->formGetId() ?>" data-control="formwidget" data-refresh-handler="<?= $this->formGetWidget()->getEventHandler('onRefresh') ?>" class="form-widget form-elements layout <?= $isHorizontal ? 'form-horizontal' : '' ?>" role="form"> <?= $this->makeLayout('form-with-sidebar', ['sidebarWidth' => $formSidebarWidth]) ?> </div> <?= Form::close() ?> <?php Block::endPut() ?> ================================================ FILE: modules/backend/behaviors/formcontroller/partials/_popup_buttons.php ================================================ <?php $isPreview = $this->formGetWidget()->previewMode; ?> <div> <?php if ($isPreview): ?> <?= Ui::button( label: __("Close"), dataDismiss: 'popup' ) ?> <?php else: ?> <?php if (!$this->formGetModel()->exists): ?> <?= Ui::ajaxButton( label: __("Create"), handler: 'onPopupSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataPopupLoadIndicator: true ) ?> <?php else: ?> <?= Ui::ajaxButton( label: __("Save"), handler: 'onPopupSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataPopupLoadIndicator: true ) ?> <?php if ($this->formCheckPermission('modelDelete')): ?> <?= Ui::ajaxButton( label: __("Delete"), handler: 'onPopupDelete', class: 'btn-danger pull-right', icon: 'icon-delete', dataRequestConfirm: __("Delete this record?"), dataPopupLoadIndicator: true ) ?> <?php endif ?> <?php endif ?> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <?= Ui::ajaxButton( label: __("Cancel"), handler: 'onPopupCancel', class: 'btn-link p-0', dataBrowserRedirectBack: true, dataRequestData: "close: true", dataDismiss: 'popup' ) ?> </span> <?php endif ?> </div> ================================================ FILE: modules/backend/behaviors/formcontroller/partials/_popup_error.php ================================================ <div class="modal-body"> <p class="flash-message static error"><?= e($fatalError) ?></p> </div> <div class="modal-footer"> <?= Ui::button(__("Close"))->dismissPopup() ?> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/ActionExport.php ================================================ <?php namespace Backend\Behaviors\ImportExportController; use Lang; use File; use Backend; use ApplicationException; /** * ActionExport contains logic for exports */ trait ActionExport { /** * @var Model exportModel */ public $exportModel; /** * @var array exportColumns configuration. */ public $exportColumns; /** * @var string exportFileName used for export output. */ protected $exportFileName; /** * @var Backend\Classes\WidgetBase exportFormatFormWidget reference to the widget used for standard export options. */ protected $exportFormatFormWidget; /** * @var Backend\Classes\WidgetBase exportOptionsFormWidget reference to the widget used for custom export options. */ protected $exportOptionsFormWidget; /** * actionExport handles the export action logic */ protected function actionExport() { $model = $this->exportGetModel(); $columns = $this->processExportColumnsFromPost(); if ($optionData = post('ExportOptions')) { $model->fill($optionData); } $exportOptions = $this->getFormatOptionsForModel(); $exportOptions['sessionKey'] = $this->exportFormatFormWidget->getSessionKey(); $model->file_format = $exportOptions['fileFormat'] ?? 'json'; $reference = $model->export($columns, $exportOptions); $fileUrl = $this->controller->actionUrl( 'download', $reference.'/'.$this->makeExportFileName($model->file_format) ); $this->vars['fileUrl'] = $fileUrl; $this->vars['returnUrl'] = $this->getRedirectUrlForType('export'); } /** * makeExportFileName */ protected function makeExportFileName($mode = 'json') { // Locate filename $fileName = $this->controller->importExportGetFileName(); if (!$fileName) { $fileName = $this->getConfig('export[fileName]', 'export'); } // Remove extension $fileName = File::name($fileName); $extension = 'csv'; if ($mode === 'json') { $extension = 'json'; } return $fileName . '.' . $extension; } /** * prepareExportVars for the view data. * @return void */ public function prepareExportVars() { $this->vars['exportFormatFormWidget'] = $this->exportFormatFormWidget; $this->vars['exportOptionsFormWidget'] = $this->exportOptionsFormWidget; $this->vars['exportColumns'] = $this->getExportColumns(); $this->vars['exportCustomFormat'] = $this->isCustomFileFormat(); // Make these variables available to widgets $this->controller->vars += $this->vars; } /** * exportRender */ public function exportRender() { return $this->importExportMakePartial('container_export'); } /** * exportGetModel */ public function exportGetModel() { return $this->getModelForType('export'); } /** * getExportColumns */ protected function getExportColumns() { if ($this->exportColumns !== null) { return $this->exportColumns; } $columnConfig = $this->getConfig('export[list]'); $columns = $this->makeListColumns($columnConfig, $this->exportGetModel()); $columns = $this->controller->importExportExtendColumns($columns, 'export'); if (empty($columns)) { throw new ApplicationException(__("Please specify some columns to export.")); } return $this->exportColumns = $columns; } /** * makeExportFormatFormWidget */ protected function makeExportFormatFormWidget() { if (!$this->getConfig('export') || $this->getConfig('export[useList]')) { return null; } $widgetConfig = $this->makeConfig('~/modules/backend/behaviors/importexportcontroller/partials/fields_export.yaml'); $widgetConfig->model = $this->exportGetModel(); $widgetConfig->alias = 'exportUploadForm'; $widget = $this->makeWidget(\Backend\Widgets\Form::class, $widgetConfig); // Set presets $widget->setFormValues($this->getFormatOptionsForPost()); // Reset data on refresh $widget->bindEvent('form.beforeRefresh', function ($holder) { $holder->data = []; }); return $widget; } /** * makeExportOptionsFormWidget */ protected function makeExportOptionsFormWidget() { $widget = $this->makeOptionsFormWidgetForType('export'); if (!$widget && $this->exportFormatFormWidget) { $stepSection = $this->exportFormatFormWidget->getField('step3_section'); $stepSection->hidden = true; } return $widget; } /** * processExportColumnsFromPost */ protected function processExportColumnsFromPost() { $visibleColumns = post('visible_columns', []); $columns = post('export_columns', []); foreach ($columns as $key => $columnName) { if (!isset($visibleColumns[$columnName])) { unset($columns[$key]); } } $result = []; $definitions = $this->getExportColumns(); foreach ($columns as $column) { if (isset($definitions[$column])) { $result[$column] = $definitions[$column]; } } return $result; } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/ActionImport.php ================================================ <?php namespace Backend\Behaviors\ImportExportController; use Str; use Lang; use Backend; use ApplicationException; /** * ActionImport contains logic for imports */ trait ActionImport { /** * @var Model importModel */ public $importModel; /** * @var array importColumns configuration. */ public $importColumns; /** * @var Backend\Classes\WidgetBase importUploadFormWidget reference to the widget used for uploading import file. */ protected $importUploadFormWidget; /** * @var Backend\Classes\WidgetBase importOptionsFormWidget reference to the widget used for specifying import options. */ protected $importOptionsFormWidget; /** * actionImport handles the import action logic */ public function actionImport() { $model = $this->importGetModel(); $matches = post('column_match', []); if ($optionData = post('ImportOptions')) { $model->fill($optionData); } $importOptions = $this->getFormatOptionsForModel(); $importOptions['sessionKey'] = $this->importUploadFormWidget->getSessionKey(); $model->file_format = $importOptions['fileFormat'] ?? 'json'; $model->import($matches, $importOptions); $this->vars['importResults'] = $model->getResultStats(); $this->vars['returnUrl'] = $this->getRedirectUrlForType('import'); $this->vars['sourceIndexOffset'] = $this->getImportSourceIndexOffset($importOptions['firstRowTitles']); } /** * actionImportLoadColumnSampleForm */ public function actionImportLoadColumnSampleForm() { if (($columnId = post('file_column_id', false)) === false) { throw new ApplicationException(__("Missing column identifier")); } $columns = $this->getImportFileColumns(); if (!array_key_exists($columnId, $columns)) { throw new ApplicationException(__("Unknown column")); } $path = $this->getImportFilePath(); if (!$fileFormat = post('file_format', 'json')) { return null; } if ($fileFormat === 'json') { $data = $this->getImportSampleColumnsFromJson($path, (int) $columnId); } else { $data = $this->getImportSampleColumnsFromCsv($path, (int) $columnId); } // Clean up data foreach ($data as $index => $sample) { $data[$index] = Str::limit($sample, 100); if (!strlen($data[$index])) { unset($data[$index]); } } $this->vars['columnName'] = array_get($columns, $columnId); $this->vars['columnData'] = $data; } /** * prepareImportVars for the view data. */ public function prepareImportVars() { $this->vars['importUploadFormWidget'] = $this->importUploadFormWidget; $this->vars['importOptionsFormWidget'] = $this->importOptionsFormWidget; $this->vars['importDbColumns'] = $this->getImportDbColumns(); $this->vars['importFileColumns'] = $this->getImportFileColumns(); $this->vars['importCustomFormat'] = $this->isCustomFileFormat(); // Make these variables available to widgets $this->controller->vars += $this->vars; } /** * importRender */ public function importRender() { return $this->importExportMakePartial('container_import'); } /** * importGetModel */ public function importGetModel() { return $this->getModelForType('import'); } /** * getImportDbColumns */ protected function getImportDbColumns() { if ($this->importColumns !== null) { return $this->importColumns; } $columnConfig = $this->getConfig('import[list]'); $columns = $this->makeListColumns($columnConfig, $this->importGetModel()); $columns = $this->controller->importExportExtendColumns($columns, 'import'); if (empty($columns)) { throw new ApplicationException(__("Please specify some columns to import.")); } return $this->importColumns = $columns; } /** * getImportFileColumns */ protected function getImportFileColumns() { if (!$path = $this->getImportFilePath()) { return null; } if (!$fileFormat = post('file_format', 'json')) { return null; } if ($fileFormat === 'json') { return $this->getImportFileColumnsFromJson($path); } else { return $this->getImportFileColumnsFromCsv($path); } } /** * getImportSourceIndexOffset to add to the reported row number in status messages * * @param bool $firstRowTitles Whether or not the first row contains column titles * @return int $offset */ protected function getImportSourceIndexOffset($firstRowTitles) { return $firstRowTitles ? 2 : 1; } /** * makeImportUploadFormWidget */ protected function makeImportUploadFormWidget() { if (!$this->getConfig('import')) { return null; } $widgetConfig = $this->makeConfig('~/modules/backend/behaviors/importexportcontroller/partials/fields_import.yaml'); $widgetConfig->model = $this->importGetModel(); $widgetConfig->alias = 'importUploadForm'; $widget = $this->makeWidget(\Backend\Widgets\Form::class, $widgetConfig); // Set presets $widget->setFormValues($this->getFormatOptionsForPost()); // Reset data on refresh $widget->bindEvent('form.beforeRefresh', function ($holder) { $holder->data = []; }); return $widget; } /** * makeImportOptionsFormWidget */ protected function makeImportOptionsFormWidget() { $widget = $this->makeOptionsFormWidgetForType('import'); if (!$widget && $this->importUploadFormWidget) { $stepSection = $this->importUploadFormWidget->getField('step3_section'); $stepSection->hidden = true; } return $widget; } /** * getImportFilePath */ protected function getImportFilePath() { return $this ->importGetModel() ->getImportFilePath($this->importUploadFormWidget->getSessionKey()); } /** * importIsColumnRequired */ public function importIsColumnRequired($columnName) { $model = $this->importGetModel(); return $model->isAttributeRequired($columnName); } /** * checkRequiredImportColumns */ protected function checkRequiredImportColumns() { if (!$matches = post('column_match', [])) { throw new ApplicationException(__("Please match some columns first.")); } $dbColumns = $this->getImportDbColumns(); foreach ($dbColumns as $column => $label) { if (!$this->importIsColumnRequired($column)) { continue; } $found = false; foreach ($matches as $matchedColumns) { if (in_array($column, $matchedColumns)) { $found = true; break; } } if (!$found) { throw new ApplicationException(__("Please specify a match for the required field :label.", [ 'label' => __($label) ])); } } } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/CanFormatCsv.php ================================================ <?php namespace Backend\Behaviors\ImportExportController; use League\Csv\Statement as CsvStatement; use League\Csv\Writer as CsvWriter; use League\Csv\CharsetConverter; use Backend\Behaviors\ImportExportController\TranscodeFilter; use League\Csv\Reader as CsvReader; use ApplicationException; use SplTempFileObject; /** * CanFormatCsv contains logic for CSV files */ trait CanFormatCsv { /** * getImportFileColumnsFromCsv path */ protected function getImportFileColumnsFromCsv($path) { $reader = $this->createCsvReader($path); $firstRow = $reader->fetchOne(0); if (!post('first_row_titles')) { array_walk($firstRow, function (&$value, $key) { $value = 'Column #'.($key + 1); }); } // Prevents unfriendly error to be thrown due to bad encoding at response time. if (json_encode($firstRow) === false) { throw new ApplicationException(__("Source file encoding is not recognized. Please select the custom file format option with the proper encoding to import your file.")); } return $firstRow; } /** * getImportSampleColumnsFromCsv */ protected function getImportSampleColumnsFromCsv($path, $columnIndex) { $reader = $this->createCsvReader($path); if (post('first_row_titles')) { $reader->setHeaderOffset(0); } $result = (new CsvStatement) ->limit(50) ->process($reader) ->fetchColumnByOffset((int) $columnIndex) ; $data = iterator_to_array($result, false); return $data; } /** * createCsvReader creates a new CSV reader with options selected by the user */ protected function createCsvReader(string $path): CsvReader { $reader = CsvReader::createFromPath($path); $options = $this->getFormatOptionsForModel(); if ($options['delimiter'] !== null) { $reader->setDelimiter($options['delimiter']); } if ($options['enclosure'] !== null) { $reader->setEnclosure($options['enclosure']); } if ($options['escape'] !== null) { $reader->setEscape($options['escape']); } if ( $options['encoding'] !== null && $reader->supportsStreamFilterOnRead() ) { $reader->addStreamFilter(sprintf( '%s%s:%s', TranscodeFilter::FILTER_NAME, strtolower($options['encoding']), 'utf-8' )); } return $reader; } /** * exportFromListAsCsv */ protected function exportFromListAsCsv($widget, $options): string { // Parse defaults $options = array_merge([ 'firstRowTitles' => true, 'useOutput' => false, 'fileName' => 'export.csv', 'delimiter' => null, 'enclosure' => null, 'escape' => null, 'encoding' => null ], $options); // Prepare CSV $csv = CsvWriter::createFromString(); $csv->setOutputBOM(CsvWriter::BOM_UTF8); if ($options['delimiter'] !== null) { $csv->setDelimiter($options['delimiter']); } if ($options['enclosure'] !== null) { $csv->setEnclosure($options['enclosure']); } if ($options['escape'] !== null) { $csv->setEscape($options['escape']); } if ( $options['encoding'] !== null && $csv->supportsStreamFilterOnWrite() ) { CharsetConverter::addTo($csv, 'UTF-8', $options['encoding']); } // Locate columns from widget $columns = $widget->getVisibleColumns(); // Add headers if ($options['firstRowTitles']) { $headers = []; foreach ($columns as $column) { $headers[] = $widget->getHeaderValue($column); } $csv->insertOne($headers); } // Add records $getter = $this->getConfig('export[useList][raw]', false) ? 'getColumnValueRaw' : 'getColumnValue'; $query = $widget->prepareQuery(); $results = $query->get(); if ($event = $widget->fireSystemEvent('backend.list.extendRecords', [&$results])) { $results = $event; } foreach ($results as $result) { $record = []; foreach ($columns as $column) { $value = $widget->$getter($result, $column); if (is_array($value)) { $value = implode('|', $value); } $record[] = $value; } $csv->insertOne($record); } // Output if ($options['useOutput']) { $csv->output($options['fileName']); } return $csv->toString(); } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/CanFormatJson.php ================================================ <?php namespace Backend\Behaviors\ImportExportController; use File; /** * CanFormatJson contains logic for JSON files */ trait CanFormatJson { /** * getImportFileColumnsFromJson */ protected function getImportFileColumnsFromJson($path) { $jsonPath = File::get($path); $contents = json_decode($jsonPath, true); if ($contents === null) { return []; } if (!is_array($contents)) { return []; } $firstRow = array_first($contents); if (!is_array($firstRow)) { return []; } return array_keys($firstRow); } /** * getImportSampleColumnsFromJson */ protected function getImportSampleColumnsFromJson($path, $columnIndex) { $jsonPath = File::get($path); $contents = json_decode($jsonPath, true); $result = []; $limit = 0; foreach ($contents as $content) { $count = 0; foreach ($content as $key => $val) { if ($count === $columnIndex) { $result[] = $val; break; } $count++; } $limit++; if ($limit > 50) { break; } } return $result; } /** * exportFromListAsJson */ protected function exportFromListAsJson($widget, $options): string { $jsonResult = []; // Locate columns from widget $columns = $widget->getVisibleColumns(); // Add records $getter = $this->getConfig('export[useList][raw]', false) ? 'getColumnValueRaw' : 'getColumnValue'; $query = $widget->prepareQuery(); $results = $query->get(); if ($event = $widget->fireSystemEvent('backend.list.extendRecords', [&$results])) { $results = $event; } foreach ($results as $result) { $record = []; foreach ($columns as $column) { $value = $widget->$getter($result, $column); if (is_array($value)) { $value = implode('|', $value); } $record[] = $value; } $jsonResult[] = $record; } return json_encode($jsonResult, JSON_PRETTY_PRINT); } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/HasListExport.php ================================================ <?php namespace Backend\Behaviors\ImportExportController; use Lang; use Response; use ApplicationException; /** * HasListExport contains logic for imports */ trait HasListExport { /** * checkUseListExportMode */ protected function checkUseListExportMode() { if (!$useList = $this->getConfig('export[useList]')) { return false; } if (!$this->controller->isClassExtendedWith(\Backend\Behaviors\ListController::class)) { throw new ApplicationException(__("You must implement the controller behavior ListController with the export 'useList' option enabled.")); } if (is_array($useList)) { $listDefinition = array_get($useList, 'definition'); } else { $listDefinition = $useList; } return $this->exportFromList($listDefinition); } /** * exportFromList outputs the list results as a CSV export. * @param string $definition * @param array $options */ public function exportFromList($definition = null, $options = []) { $lists = $this->controller->makeLists(); $widget = $lists[$definition] ?? reset($lists); // Parse options $options = array_merge([ 'fileFormat' => $this->getConfig('defaultFormatOptions[fileFormat]', 'csv'), 'delimiter' => $this->getConfig('defaultFormatOptions[delimiter]', ','), 'enclosure' => $this->getConfig('defaultFormatOptions[enclosure]', '"'), 'escape' => $this->getConfig('defaultFormatOptions[escape]', '\\'), 'encoding' => $this->getConfig('defaultFormatOptions[encoding]', 'utf-8'), ], $options); // Prepare output $fileFormat = $options['fileFormat']; $filename = e($this->makeExportFileName($fileFormat)); // JSON if ($fileFormat === 'json') { return Response::make( $this->exportFromListAsJson($widget, $options), 200, [ 'Content-Type' => 'application/json', 'Content-Disposition' => sprintf('%s; filename="%s"', 'attachment', $filename) ] ); } // CSV return Response::make( $this->exportFromListAsCsv($widget, $options), 200, [ 'Content-Type' => 'text/csv', 'Content-Transfer-Encoding' => 'binary', 'Content-Disposition' => sprintf('%s; filename="%s"', 'attachment', $filename) ] ); } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/TranscodeFilter.php ================================================ <?php namespace Backend\Behaviors\ImportExportController; use php_user_filter; // phpcs:ignoreFile stream_filter_register(TranscodeFilter::FILTER_NAME . "*", TranscodeFilter::class); /** * TranscodeFilter converts CSV source files from one encoding to another. */ class TranscodeFilter extends php_user_filter { const FILTER_NAME = 'october.csv.transcode.'; /** * @var string encodingFrom */ protected $encodingFrom = 'auto'; /** * @var string encodingTo */ protected $encodingTo; /** * filter */ public function filter($in, $out, &$consumed, $closing): int { while ($resource = stream_bucket_make_writeable($in)) { $resource->data = @mb_convert_encoding( $resource->data, $this->encodingTo, $this->encodingFrom ); $consumed += $resource->datalen; stream_bucket_append($out, $resource); } return PSFS_PASS_ON; } /** * onCreate */ public function onCreate(): bool { if (strpos($this->filtername, self::FILTER_NAME) !== 0) { return false; } $params = substr($this->filtername, strlen(self::FILTER_NAME)); if (!preg_match('/^([-\w]+)(:([-\w]+))?$/', $params, $matches)) { return false; } if (isset($matches[1])) { $this->encodingFrom = $matches[1]; } $this->encodingTo = mb_internal_encoding(); if (isset($matches[3])) { $this->encodingTo = $matches[3]; } $this->params['locale'] = setlocale(LC_CTYPE, '0'); if (stripos($this->params['locale'], 'UTF-8') === false) { setlocale(LC_CTYPE, 'en_US.UTF-8'); } return true; } /** * onClose */ public function onClose(): void { setlocale(LC_CTYPE, $this->params['locale']); } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/assets/css/export.css ================================================ .export-behavior .export-columns{padding-bottom:0} ================================================ FILE: modules/backend/behaviors/importexportcontroller/assets/css/import.css ================================================ .import-behavior ul{list-style:none;margin:0;padding:0}.import-behavior ul li{font-size:13px}.import-behavior ul li.placeholder{display:block;position:relative}.import-behavior ul li.dragged{box-shadow:0 3px 6px rgba(0,0,0,.075);position:absolute;z-index:2000}.import-behavior .import-db-columns,.import-behavior .import-file-columns{background:var(--bs-tertiary-bg);height:400px;overflow:auto;padding:5px}.import-behavior .import-db-columns>ul{min-height:380px}.import-behavior .import-file-columns .upload-prompt{display:block;left:0;margin-top:-10px;position:absolute;right:0;text-align:center;top:50%}.import-behavior .import-column-bindings>ul>li,.import-behavior .import-db-columns>ul>li{cursor:pointer}.import-behavior .import-db-columns>ul>li,.import-behavior .import-file-columns>ul>li,.import-behavior ul li.dragged{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:3px;margin-bottom:5px}.import-behavior .import-db-columns>ul>li div.import-column-name>span,.import-behavior .import-db-columns>ul>li>span,.import-behavior .import-file-columns>ul>li div.import-column-name>span,.import-behavior .import-file-columns>ul>li>span,.import-behavior ul li.dragged div.import-column-name>span,.import-behavior ul li.dragged>span{display:block;padding:8px 8px 8px 12px}.import-behavior .import-db-columns>ul>li .column-icon{color:#ccc;left:-3px;position:relative}.import-behavior .import-db-columns>ul>li:hover .column-icon{color:#4da7e8}.import-behavior .import-db-columns>ul>li.is-required .column-icon{color:#ab2a1c}.import-behavior .import-file-columns>ul>li:after,.import-behavior .import-file-columns>ul>li:before{content:" ";display:table}.import-behavior .import-file-columns>ul>li:after{clear:both}.import-behavior .import-file-columns>ul>li.is-ignored{display:none}.import-behavior .import-file-columns>ul>li .column-success-icon{display:none;left:-2px;position:relative;width:15px}.import-behavior .import-file-columns>ul>li.is-matched .column-success-icon{display:inline-block}.import-behavior .import-file-columns>ul>li.is-matched .column-ignore-button{display:none!important}.import-behavior .import-file-columns>ul div.import-column-name{float:left;width:45%}.import-behavior .import-file-columns>ul div.import-column-name>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.import-behavior .import-file-columns>ul div.import-column-name a.column-label{color:var(--bs-body-color)}.import-behavior .import-file-columns>ul div.import-column-name a.column-ignore-button{background:var(--bs-secondary-bg);border-radius:15px;color:var(--bs-secondary-color);display:inline-block;font-size:10px;height:15px;left:-3px;position:relative;text-align:center;text-decoration:none;top:-1px;width:15px}.import-behavior .import-file-columns>ul div.import-column-name a.column-ignore-button:hover{background:#ab2a1c;color:#fff}.import-behavior .import-file-columns>ul .import-column-bindings>ul{float:right;width:55%}.import-behavior .import-column-bindings>ul{background:var(--bs-secondary-bg);min-height:34px;position:relative}.import-behavior .import-column-bindings>ul:after{border-bottom:17px solid transparent;border-left:18px solid var(--oc-form-control-bg);border-top:17px solid transparent;content:"";display:block;height:0;left:0;position:absolute;top:0;width:0}.import-behavior .import-column-bindings>ul:before{color:var(--bs-tertiary-color);content:attr(data-empty-text);padding:8px 8px 8px 28px;position:absolute}.import-behavior .import-column-bindings>ul>li .column-icon{color:var(--bs-body-color);float:right;margin:3px}.import-behavior .import-column-bindings>ul>li:hover .column-icon{color:var(--bs-emphasis-color)}.import-behavior .import-column-bindings>ul>li:not(.dragged){background:var(--bs-secondary-bg);color:var(--bs-emphasis-color);position:relative}.import-behavior .import-column-bindings>ul>li:not(.dragged)>span{display:block;padding:8px 8px 8px 28px} ================================================ FILE: modules/backend/behaviors/importexportcontroller/assets/js/october.export.js ================================================ /* * Scripts for the Export controller behavior. */ +function ($) { "use strict"; var ExportBehavior = function() { this.processExport = function () { var $form = $('#exportColumns').closest('form'); $form.request('onExport', { success: function(data) { $('#exportContainer').html(data.result); oc.Events.dispatch('render'); } }) } } $.oc.exportBehavior = new ExportBehavior; }(window.jQuery); ================================================ FILE: modules/backend/behaviors/importexportcontroller/assets/js/october.import.js ================================================ /* * Scripts for the Import controller behavior. */ +function ($) { "use strict"; var ImportBehavior = function() { this.processImport = function () { var $form = $('#importColumnMatcher').closest('form'); $form.request('onImport', { success: function(data) { $('#importContainer').html(data.result); oc.Events.dispatch('render'); } }); } this.loadFileColumnSample = function(el) { var $el = $(el), $column = $el.closest('[data-column-id]'), columnId = $column.data('column-id'); $el.popup({ handler: 'onImportLoadColumnSampleForm', extraData: { file_column_id: columnId } }); } this.bindColumnSorting = function() { var sortableOptions = { group: 'import-fields', onEnd: $.proxy(this.onDropColumn, this) }; $('#importDbColumns > ul, .import-column-bindings > ul').each(function() { var oldSortable = $(this).data('oc.sortable'); if (oldSortable) { oldSortable.destroy(); } $(this).data('oc.sortable', Sortable.create(this, sortableOptions)); }); } this.onDropColumn = function (event) { var $dbItem = $(event.item), $fileColumns = $('#importFileColumns'), $fileItem, isMatch = $.contains($fileColumns.get(0), $dbItem.get(0)), matchColumnId; // Has a previous match? matchColumnId = $dbItem.data('column-matched-id') if (matchColumnId !== null) { $fileItem = $('[data-column-id='+matchColumnId+']', $fileColumns); this.toggleMatchState($fileItem); } // Is a new match? if (isMatch) { $fileItem = $dbItem.closest('[data-column-id]'); this.matchColumn($dbItem, $fileItem); } else { this.unmatchColumn($dbItem); } } this.toggleMatchState = function ($container) { var hasItems = !!$('.import-column-bindings li', $container).length; $container.toggleClass('is-matched', hasItems); } this.ignoreFileColumn = function(el) { var $el = $(el), $column = $el.closest('[data-column-id]'); $column.addClass('is-ignored'); $('#showIgnoredColumnsButton').removeClass('disabled'); } this.showIgnoredColumns = function() { $('#importFileColumns li.is-ignored').removeClass('is-ignored'); $('#showIgnoredColumnsButton').addClass('disabled'); } this.autoMatchColumns = function() { var self = this, fileColumns = {}, $this, name, label; $('#importFileColumns li').each(function() { $this = $(this); name = $.trim($('.column-label', $this).text()); fileColumns[name] = $this; }); $('#importDbColumns li').each(function() { $this = $(this); label = $.trim($('> span', $this).text()); name = $this.data('column-name'); var matchedColumn = fileColumns[name] || fileColumns[label]; if (matchedColumn) { $this.appendTo($('.import-column-bindings > ul', matchedColumn)); self.matchColumn($this, matchedColumn); } }); } this.matchColumn = function($dbItem, $fileItem) { var matchColumnId = $fileItem.data('column-id'), dbColumnName = $dbItem.data('column-name'), $dbItemMatchInput = $('[data-column-match-input]', $dbItem); this.toggleMatchState($fileItem); $dbItem.data('column-matched-id', matchColumnId); $dbItemMatchInput.attr('name', 'column_match['+matchColumnId+'][]'); $dbItemMatchInput.attr('value', dbColumnName); } this.unmatchColumn = function($dbItem) { var $dbItemMatchInput = $('[data-column-match-input]', $dbItem); $dbItem.removeData('column-matched-id'); $dbItemMatchInput.attr('name', ''); $dbItemMatchInput.attr('value', ''); } } $.oc.importBehavior = new ImportBehavior; }(window.jQuery); ================================================ FILE: modules/backend/behaviors/importexportcontroller/assets/less/export.less ================================================ @import "../../../../assets/less/core/boot.less"; .export-behavior { .export-columns { // background: @primary-bg; // padding: @padding-standard; padding-bottom: 0; // max-height: 400px; // overflow: auto; } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/assets/less/import.less ================================================ @import "../../../../assets/less/core/boot.less"; @columns-bg: @tertiary-bg; @column-label-color: @text-color; @column-item-bg: @input-bg; @column-item-border: @input-border; @bound-color: @emphasis-color; @bound-bg: @secondary-bg; @unbound-color: @tertiary-color; @unbound-bg: @secondary-bg; @column-padding: 8px; @column-font-size: 13px; .import-behavior { ul { margin: 0; padding: 0; list-style: none; li { font-size: @column-font-size; } li.placeholder { display: block; position: relative; } li.dragged { position: absolute; z-index: 2000; .box-shadow(0 3px 6px rgba(0,0,0,.075)); } } .import-file-columns, .import-db-columns { height: 400px; background: @columns-bg; padding: 5px; overflow: auto; } .import-db-columns { > ul { min-height: 380px; } } .import-file-columns { .upload-prompt { display: block; text-align: center; position: absolute; top: 50%; left: 0; right: 0; margin-top: -10px; } } .import-column-bindings > ul > li, .import-db-columns > ul > li { cursor: pointer; } ul li.dragged, .import-file-columns > ul > li, .import-db-columns > ul > li { background: @column-item-bg; border: 1px solid @column-item-border; border-radius: 3px; margin-bottom: 5px; div.import-column-name > span, > span { display: block; padding: @column-padding; padding-left: (@column-padding * 1.5); } } .import-db-columns > ul { > li { .column-icon { color: #ccc; position: relative; left: -3px; } &:hover .column-icon { color: #4da7e8; } &.is-required { .column-icon { color: #ab2a1c; } } } } .import-file-columns > ul { > li { .clearfix; &.is-ignored { display: none; } .column-success-icon { display: none; position: relative; left: -2px; width: 15px; } &.is-matched { .column-success-icon { display: inline-block; } .column-ignore-button { display: none !important; } } } div.import-column-name { float: left; width: 45%; > span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } a.column-label { color: @column-label-color; } a.column-ignore-button { color: @secondary-color; background: @secondary-bg; font-size: 10px; border-radius: 15px; display: inline-block; text-decoration: none; width: 15px; height: 15px; text-align: center; position: relative; top: -1px; left: -3px; &:hover { color: white; background: #ab2a1c; } } } .import-column-bindings > ul { float: right; width: 55%; } } .import-column-bindings > ul { background: @unbound-bg; position: relative; min-height: (@column-padding * 2) + 18px; &:after { .triangle(right, 18px, (@column-padding * 2) + 18px, @column-item-bg); position: absolute; top: 0; left: 0; } &:before { position: absolute; padding: @column-padding; padding-left: 28px; content: attr(data-empty-text); color: @unbound-color; } > li { .column-icon { color: @text-color; float: right; margin: 3px; } &:hover { .column-icon { color: @emphasis-color; } } } > li:not(.dragged) { color: @bound-color; background: @bound-bg; position: relative; > span { display: block; padding: @column-padding; padding-left: 28px; } } } } ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_column_sample_form.php ================================================ <div class="modal-header"> <h4 class="modal-title"><?= e(__('Column preview')) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <p> <?= e(__('Column')) ?>: <strong><?= $columnName ?></strong> </p> <div class="list-preview"> <div class="control-simplelist is-divided is-scrollable size-small" data-control="simplelist"> <ul> <?php foreach ($columnData as $sample): ?> <li class="oc-icon-file"> <?= e($sample) ?> </li> <?php endforeach ?> </ul> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= e(trans('backend::lang.form.close')) ?> </button> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_container_export.php ================================================ <div class="export-behavior"> <?= $exportFormatFormWidget->render() ?> <?php if ($exportOptionsFormWidget): ?> <?= $exportOptionsFormWidget->render() ?> <?php endif ?> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_container_import.php ================================================ <div class="import-behavior"> <?= $importUploadFormWidget->render() ?> <?php if ($importOptionsFormWidget): ?> <?= $importOptionsFormWidget->render() ?> <?php endif ?> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_export_columns.php ================================================ <div id="exportColumns"> <?php if (!$exportCustomFormat): ?> <label class="form-label"> <?= __("Columns") ?> </label> <div class="export-columns"> <div class="control-simplelist with-checkboxes is-sortable" data-control="simplelist"> <ul> <?php foreach ($exportColumns as $key => $column): ?> <li> <span class="drag-handle" title="<?= __("Reorder") ?>"> <i class="icon-list-reorder"></i> </span> <div class="form-check"> <input type="hidden" name="export_columns[]" value="<?= $key ?>" /> <input class="form-check-input" id="<?= $this->getId('exportCheckbox-'.$key) ?>" name="visible_columns[<?= $key ?>]" value="1" checked="checked" type="checkbox" /> <label class="form-check-label" for="<?= $this->getId('exportCheckbox-'.$key) ?>"> <?= e(__($column)) ?> </label> </div> </li> <?php endforeach ?> </ul> </div> </div> <?php else: ?> <p> <?= __("A custom schema is used for this file format.") ?> </p> <?php endif ?> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_export_form.php ================================================ <div id="exportFormPopup"> <?php if (!$this->fatalError): ?> <?= Form::open(['id' => 'exportForm']) ?> <div class="modal-header"> <h4 class="modal-title"><?= __("Export progress") ?></h4> </div> <div id="exportContainer"> <div class="modal-body"> <div class="loading-indicator-container"> <p> </p> <div class="loading-indicator is-transparent"> <div><?= __("Processing") ?></div> <span></span> </div> </div> <p> </p> </div> </div> <?= Form::close() ?> <script> $('#exportFormPopup').on('popupComplete', function() { $.oc.exportBehavior.processExport(); }); </script> <?php else: ?> <div class="modal-header"> <h4 class="modal-title"><?= e(__('Export error')) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <p class="flash-message static error"><?= e($this->fatalError) ?></p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= e(trans('backend::lang.form.close')) ?> </button> </div> <?php endif ?> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_export_result_form.php ================================================ <?php if (!$this->fatalError): ?> <div class="modal-body"> <p> <?= __("File export process completed!") ?> <?= __("The browser will now redirect to the file download.") ?> </p> </div> <div class="modal-footer"> <a href="<?= $returnUrl ?>" class="btn btn-success" data-dismiss="popup"> <?= __("Complete") ?> </a> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= __("Close") ?> </button> </div> <script> window.location = '<?= $fileUrl ?>'; </script> <?php else: ?> <div class="modal-body"> <p class="flash-message static error"><?= e($this->fatalError) ?></p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= __("Close") ?> </button> </div> <?php endif ?> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_import_column_matcher.php ================================================ <div id="importColumnMatcher"> <?php if (!$importCustomFormat): ?> <div class="form-group"> <?= $this->importExportMakePartial('import_toolbar') ?> </div> <div class="row"> <div class="col-md-6"> <div class="form-group"> <label class="form-label"> <?= __("File columns") ?> </label> <?= $this->importExportMakePartial('import_file_columns') ?> </div> </div> <div class="col-md-6"> <div class="form-group"> <label class="form-label"> <?= __("Database fields") ?> </label> <?= $this->importExportMakePartial('import_db_columns') ?> </div> </div> </div> <?php else: ?> <p> <?= __("A custom schema is used for this file format.") ?> </p> <?php endif ?> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_import_db_columns.php ================================================ <div class="import-db-columns" id="importDbColumns"> <ul> <?php foreach ($importDbColumns as $column => $label): ?> <?php $isRequired = $this->importIsColumnRequired($column); $iconName = $isRequired ? 'icon-asterisk' : 'icon-link'; ?> <li class="<?= $isRequired ? 'is-required' : '' ?>" data-column-name="<?= e($column) ?>"> <span> <i class="column-icon <?= $iconName ?>"></i> <?= e(__($label)) ?> </span> <input type="hidden" data-column-match-input /> </li> <?php endforeach ?> </ul> </div> <script> addEventListener('render', function() { $.oc.importBehavior.bindColumnSorting(); }); </script> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_import_file_columns.php ================================================ <div class="import-file-columns" id="importFileColumns"> <?php if ($importFileColumns): ?> <ul> <?php foreach ($importFileColumns as $index => $column): ?> <li data-column-id="<?= $index ?>"> <div class="import-column-name"> <span> <i class="column-success-icon text-success icon-check"></i> <a href="javascript:;" class="column-ignore-button" data-toggle="tooltip" data-delay="300" data-placement="right" title="<?= __("Ignore this column") ?>" onclick="$.oc.importBehavior.ignoreFileColumn(this)" > <i class="icon-close"></i> </a> <a href="javascript:;" class="column-label" onclick="$.oc.importBehavior.loadFileColumnSample(this)" > <?= $column ?> </a> </span> </div> <div class="import-column-bindings"> <ul data-empty-text="<?= __("Drop column here...") ?>"></ul> </div> </li> <?php endforeach ?> </ul> <?php else: ?> <p class="upload-prompt"> <?= __("Please upload a valid CSV file.") ?> </p> <?php endif ?> </div> <script> addEventListener('render', function() { $.oc.importBehavior.bindColumnSorting(); }); </script> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_import_form.php ================================================ <div id="importFormPopup"> <?php if (!$this->fatalError): ?> <?= Form::open(['id' => 'importForm']) ?> <div class="modal-header"> <h4 class="modal-title"><?= __("Import progress") ?></h4> </div> <div id="importContainer"> <div class="modal-body"> <div class="loading-indicator-container"> <p> </p> <div class="loading-indicator is-transparent"> <div><?= __("Processing") ?></div> <span></span> </div> </div> <p> </p> </div> </div> <?= Form::close() ?> <script> $('#importFormPopup').on('popupComplete', function() { $.oc.importBehavior.processImport(); }); </script> <?php else: ?> <div class="modal-header"> <h4 class="modal-title"><?= e(__('Import error')) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <p class="flash-message static error"><?= e($this->fatalError) ?></p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= e(trans('backend::lang.form.close')) ?> </button> </div> <?php endif ?> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_import_result_form.php ================================================ <?php if (!$this->fatalError): ?> <div class="modal-body"> <div class="scoreboard"> <div data-control="toolbar"> <div class="scoreboard-item title-value"> <h4><?= __("Created") ?></h4> <p><?= $importResults->created ?></p> </div> <div class="scoreboard-item title-value"> <h4><?= __("Updated") ?></h4> <p><?= $importResults->updated ?></p> </div> <?php if ($importResults->skippedCount): ?> <div class="scoreboard-item title-value"> <h4><?= __("Skipped") ?></h4> <p><?= $importResults->skippedCount ?></p> </div> <?php endif ?> <?php if ($importResults->warningCount): ?> <div class="scoreboard-item title-value"> <h4><?= __("Warnings") ?></h4> <p><?= $importResults->warningCount ?></p> </div> <?php endif ?> <div class="scoreboard-item title-value"> <h4><?= __("Errors") ?></h4> <p><?= $importResults->errorCount ?></p> </div> </div> </div> <?php if ($importResults->hasMessages): ?> <?php $tabs = [ 'skipped' => __("Skipped Rows"), 'warnings' => __("Warnings"), 'errors' => __("Errors"), ]; if (!$importResults->skippedCount) unset($tabs['skipped']); if (!$importResults->warningCount) unset($tabs['warnings']); if (!$importResults->errorCount) unset($tabs['errors']); ?> <div class="control-tabs secondary-tabs" data-control="tab"> <ul class="nav nav-tabs"> <?php $count = 0; foreach ($tabs as $code => $tab): ?> <li class="<?= $count++ == 0 ? 'active' : '' ?>"> <a href="#importTab<?= $code ?>"> <?= $tab ?> </a> </li> <?php endforeach ?> </ul> <div class="tab-content"> <?php $count = 0; foreach ($tabs as $code => $tab): ?> <div class="tab-pane <?= $count++ == 0 ? 'active' : '' ?>"> <div class="control-simplelist is-divided is-scrollable size-small" data-control="simplelist"> <ul> <?php foreach ($importResults->{$code} as $row => $message): ?> <li> <strong><?= e(trans('backend::lang.import_export.row', ['row' => $row + $sourceIndexOffset])) ?></strong> - <?= e($message) ?> </li> <?php endforeach ?> </ul> </div> </div> <?php endforeach ?> </div> </div> <?php endif ?> </div> <div class="modal-footer"> <a href="<?= $returnUrl ?>" class="btn btn-success" data-dismiss="popup"> <?= __("Complete") ?> </a> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= __("Close") ?> </button> </div> <?php else: ?> <div class="modal-body"> <p class="flash-message static error"><?= e($this->fatalError) ?></p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= __("Close") ?> </button> </div> <?php endif ?> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/_import_toolbar.php ================================================ <div data-control="toolbar"> <a href="javascript:;" id="showIgnoredColumnsButton" class="btn btn-sm btn-secondary oc-icon-eye disabled" onclick="$.oc.importBehavior.showIgnoredColumns()"> <?= __("Show Ignored Columns") ?> </a> <a href="javascript:;" id="autoMatchColumnsButton" class="btn btn-sm btn-secondary oc-icon-bullseye" onclick="$.oc.importBehavior.autoMatchColumns()"> <?= __("Auto Match Columns") ?> </a> </div> ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/fields_export.yaml ================================================ # =================================== # Field Definitions # =================================== fields: step1_section: label: "1. Export output format" type: section file_format: label: File Format type: dropdown options: json: JSON csv: CSV csv_custom: CSV Custom span: left format_delimiter: label: Delimiter Character span: left trigger: action: show condition: value[csv_custom] field: file_format format_enclosure: label: Enclosure Character span: auto trigger: action: show condition: value[csv_custom] field: file_format format_escape: label: Escape Character span: auto trigger: action: show condition: value[csv_custom] field: file_format format_encoding: label: File Encoding span: auto type: dropdown trigger: action: show condition: value[csv_custom] field: file_format step2_section: label: 2. Select columns to export type: section export_columns: type: partial path: ~/modules/backend/behaviors/importexportcontroller/partials/_export_columns.php span: left dependsOn: file_format step3_section: label: 3. Set export options type: section ================================================ FILE: modules/backend/behaviors/importexportcontroller/partials/fields_import.yaml ================================================ # =================================== # Field Definitions # =================================== fields: step1_section: label: "1. Upload an Import File" type: section file_format: label: File Format type: dropdown options: json: JSON csv: CSV csv_custom: CSV Custom span: right import_file: label: Import File type: fileupload mode: file span: left fileTypes: [csv, json] useCaption: false format_delimiter: label: Delimiter Character span: left trigger: action: show condition: value[csv_custom] field: file_format format_enclosure: label: Enclosure Character span: auto trigger: action: show condition: value[csv_custom] field: file_format format_escape: label: Escape Character span: auto trigger: action: show condition: value[csv_custom] field: file_format format_encoding: label: File Encoding span: auto type: dropdown trigger: action: show condition: value[csv_custom] field: file_format first_row_titles: label: First row contains column titles comment: Leave this checked if the first row in the CSV is used as the column titles. type: checkbox span: left trigger: action: show condition: value[csv][csv_custom] field: file_format step2_section: label: "2. Match the File Columns to Database Fields" type: section column_matcher: type: partial path: ~/modules/backend/behaviors/importexportcontroller/partials/_import_column_matcher.php dependsOn: [import_file, file_format, first_row_titles, format_delimiter, format_enclosure, format_escape, format_encoding] step3_section: label: "3. Set Import Options" type: section ================================================ FILE: modules/backend/behaviors/listcontroller/HasOverrides.php ================================================ <?php namespace Backend\Behaviors\ListController; /** * HasOverrides in the controller */ trait HasOverrides { /** * listExtendColumns is called after the list columns are defined. * @param \Backend\Widgets\List $host The hosting list widget * @return void */ public function listExtendColumns($host) { } /** * listFilterExtendScopes is called after the filter scopes are defined. * @param \Backend\Widgets\Filter $host The hosting filter widget * @return void */ public function listFilterExtendScopes($host) { } /** * listExtendModel controller override: Extend supplied model * @param Model $model * @return Model */ public function listExtendModel($model, $definition = null) { return $model; } /** * listExtendQueryBefore controller override: Extend the query used for populating the list * before the default query is processed. * @param \October\Rain\Database\Builder $query */ public function listExtendQueryBefore($query, $definition = null) { } /** * listExtendQuery controller override: Extend the query used for populating the list * after the default query is processed. * @param \October\Rain\Database\Builder $query */ public function listExtendQuery($query, $definition = null) { } /** * listExtendSortColumn controller override: Customize the sort column and direction * to include secondary sorting columns if necessary * @param \October\Rain\Database\Builder $query */ public function listExtendSortColumn($query, $sortColumn, $sortDirection, $definition = null) { } /** * listExtendRecords controller override: Extend the records used for populating the list * after the query is processed. * @param Illuminate\Contracts\Pagination\LengthAwarePaginator|Illuminate\Database\Eloquent\Collection $records */ public function listExtendRecords($records, $definition = null) { } /** * listFilterExtendQuery controller override: Extend the query used for populating the filter * options before the default query is processed. * @param \October\Rain\Database\Builder $query * @param array $scope */ public function listFilterExtendQuery($query, $scope) { } /** * listInjectRowClass returns a CSS class name for a list row (<tr class="...">). * @param Model $record The populated model used for the column * @param string $definition List definition (optional) * @return string CSS class name */ public function listInjectRowClass($record, $definition = null) { } /** * listOverrideColumnValue replaces a table column value (<td>...</td>) * @param Model $record The populated model used for the column * @param string $columnName The column name to override * @param string $definition List definition (optional) * @return string HTML view */ public function listOverrideColumnValue($record, $columnName, $definition = null) { } /** * listOverrideHeaderValue replaces the entire table header contents (<th>...</th>) with custom HTML * @param string $columnName The column name to override * @param string $definition List definition (optional) * @return string HTML view */ public function listOverrideHeaderValue($columnName, $definition = null) { } /** * listOverrideRecordUrl overrides the record url for the given record * @param \October\Rain\Database\Model $record * @param string|null $definition List definition (optional) * @return string|array|void New url or complex directive */ public function listOverrideRecordUrl($record, $definition = null) { } /** * listAfterReorder is called after the list record structure is reordered * @param \October\Rain\Database\Model $record * @param string|null $definition List definition (optional) */ public function listAfterReorder($record, $definition = null) { } /** * listExtendRefreshResults is called when the list is refreshed using AJAX, * and should return an array of additional partial updates. * @param Backend\Widgets\List $host * @param array $result * @param string $definition List definition (optional) * @return array */ public function listExtendRefreshResults($host, $result, $definition = null) { } } ================================================ FILE: modules/backend/behaviors/listcontroller/partials/_container.php ================================================ <?php if ($toolbar): ?> <?= $toolbar->render() ?> <?php endif ?> <div class="list-widget-container"> <?php if ($filter): ?> <?= $filter->render() ?> <?php endif ?> <?= $list->render() ?> </div> ================================================ FILE: modules/backend/behaviors/relationcontroller/HasExtraConfig.php ================================================ <?php namespace Backend\Behaviors\RelationController; /** * HasExtraConfig implements state for the relation controller */ trait HasExtraConfig { /** * @var array extraConfig as a final state */ protected $extraConfig = []; /** * @var string extraConfigChain provided by the relationship chain */ protected $extraConfigChain = []; /** * @var string extraConfigRender provided by the relationRender method */ protected $extraConfigRender = []; /** * @var bool bumpSessionKeys is used to create a new session for forms */ protected $bumpSessionKeys = false; /** * setExtraConfigForChain returns extra config with the relation chain, encoded */ protected function setExtraConfigForChain() { if ($this->bumpSessionKeys) { $this->relationSessionKey = $this->sessionKey; $this->sessionKey = str_random(40); } $extraConfig = $this->extraConfig; $extraConfig['chain'][] = $this->field; $extraConfig['manageIds'][$this->field] = $this->manageId; $extraConfig['sessionKeys'][$this->field] = [$this->sessionKey, $this->relationSessionKey]; $this->extraConfigChain = $this->extraConfig = $extraConfig; } /** * setExtraConfigForRender comes from the render call method */ protected function setExtraConfigForRender($config) { $this->extraConfigRender = $config; $this->setExtraConfig($config); } /** * setExtraConfig usually comes from the postback variable */ protected function setExtraConfig($config) { if (is_string($config)) { $config = json_decode($config, true); } if (!is_array($config)) { $config = []; } $this->extraConfig = array_merge( $config, $this->extraConfigChain, $this->extraConfigRender ); } /** * applyExtraConfig */ protected function applyExtraConfig($field = null) { if (!$field) { $field = $this->field; } $config = $this->extraConfig; $originalConfig = $this->originalConfig->{$field} ?? null; if (!$config || !$originalConfig) { return; } // readOnlyDefault is used by the relation widget to apply a soft // default value, i.e. where a value is otherwise unspecified. // In order of application: 1. default 2. config 3. render if ( array_key_exists('readOnlyDefault', $config) && !array_key_exists('readOnly', $config) && !array_key_exists('readOnly', $originalConfig) ) { $config['readOnly'] = $config['readOnlyDefault']; } $parsedConfig = array_only($config, ['readOnly']); $parsedConfig['view'] = array_only($config, ['recordUrl', 'recordOnClick']); $this->originalConfig->{$field} = array_replace_recursive( $originalConfig, $parsedConfig ); } } ================================================ FILE: modules/backend/behaviors/relationcontroller/HasManageMode.php ================================================ <?php namespace Backend\Behaviors\RelationController; use Lang; use Request; use Illuminate\Database\Eloquent\Relations\HasOneOrMany; use Backend\Widgets\Form as FormWidget; use Backend\Widgets\Lists as ListWidget; use ApplicationException; /** * HasManageMode contains logic for managing related records */ trait HasManageMode { /** * @var ListWidget|null manageListWidget used for managing as a list */ protected $manageListWidget; /** * @var FormWidget|null manageFormWidget used for managing as a form */ protected $manageFormWidget; /** * @var Model manageModel is a reference to the model used for manage form */ protected $manageModel; /** * @var \Backend\Widgets\Filter manageFilterWidget */ protected $manageFilterWidget; /** * @var string manageTitle used for the manage popup */ protected $manageTitle; /** * @var string manageMode of relation as list, form, or pivot */ protected $manageMode; /** * @var int manageId is the primary id of an existing relation record */ protected $manageId; /** * relationGetManageFormWidget returns the manage form widget used by this behavior */ public function relationGetManageFormWidget(): ?FormWidget { return $this->manageFormWidget; } /** * relationGetManageListWidget returns the manage list widget used by this behavior */ public function relationGetManageListWidget(): ?ListWidget { return $this->manageListWidget; } /** * relationGetManageWidget returns the manage widget used by this behavior * @deprecated use relationGetManageListWidget or relationGetManageFormWidget * @return \Backend\Classes\WidgetBase */ public function relationGetManageWidget() { // Multiple (has many, belongs to many) if ($this->manageMode === 'list' || $this->manageMode === 'pivot') { return $this->manageListWidget; } // Single (belongs to, has one) if ($this->manageMode === 'form') { return $this->manageFormWidget; } return null; } /** * makeManageListWidget prepares the list widget for management */ protected function makeManageListWidget(): ?ListWidget { if (!$config = $this->makeConfigForMode('manage', 'list')) { return null; } $this->manageModel = $this->relationModel; $isPivot = $this->manageMode === 'pivot'; $config->model = $this->manageModel; $config->alias = $this->alias . 'ManageList'; $config->showSetup = $this->getConfig('manage[showSetup]', false); $config->showCheckboxes = $this->getConfig('manage[showCheckboxes]', !$isPivot); $config->showSorting = $this->getConfig('manage[showSorting]', !$isPivot); $config->defaultSort = $this->getConfig('manage[defaultSort]'); $config->recordsPerPage = $this->getConfig('manage[recordsPerPage]'); $config->customPageName = $this->getConfig('manage[customPageName]', false); $config->recordOnClick = $this->getConfig('manage[recordOnClick]'); if ($this->viewMode === 'single') { $config->showCheckboxes = false; $config->recordOnClick ??= sprintf( "oc.relationBehavior.clickManageListRecord(this, ':%s', '%s', '%s')", $this->manageModel->getKeyName(), $this->relationGetId(), $this->relationSessionKey ); } elseif ($config->showCheckboxes) { $config->recordOnClick ??= "oc.relationBehavior.toggleListCheckbox(this)"; } elseif ($isPivot) { $config->recordOnClick ??= sprintf( "oc.relationBehavior.clickManagePivotListRecord(this, ':%s', '%s', '%s')", $this->manageModel->getKeyName(), $this->relationGetId(), $this->relationSessionKey ); } $widget = $this->makeWidget(ListWidget::class, $config); // Apply defined constraints if ($sqlConditions = $this->getConfig('manage[conditions]')) { $widget->bindEvent('list.extendQueryBefore', function ($query) use ($sqlConditions) { $query->whereRaw($sqlConditions); }); } elseif ($scopeMethod = $this->getConfig('manage[scope]')) { $widget->bindEvent('list.extendQueryBefore', function ($query) use ($scopeMethod) { $query->$scopeMethod($this->relationParent); }); } else { $widget->bindEvent('list.extendQueryBefore', function ($query) { $this->relationObject->addDefinedConstraintsToQuery($query); // Reset any orders that come from the definition since they may // reference the pivot table that isn't included in this query if (in_array($this->relationType, ['belongsToMany', 'morphedByMany', 'morphToMany'])) { $query->getQuery()->reorder(); } }); } // Link the Search Widget to the List Widget if ($this->searchWidget) { $this->searchWidget->bindEvent('search.submit', function () use ($widget) { $widget->setSearchTerm($this->searchWidget->getActiveTerm()); return $widget->onRefresh(); }); // Pass search options $widget->setSearchOptions([ 'mode' => $this->getConfig('manage[searchMode]'), 'scope' => $this->getConfig('manage[searchScope]'), ]); // Persist the search term across AJAX requests only if (Request::ajax()) { $widget->setSearchTerm($this->searchWidget->getActiveTerm()); } } // Link the Filter Widget to the List Widget if ($this->manageFilterWidget) { $this->manageFilterWidget->bindEvent('filter.update', function () use ($widget) { return $widget->onFilter(); }); // Apply predefined filter values $widget->addFilter([$this->manageFilterWidget, 'applyAllScopesToQuery']); } // Exclude existing relationships for non-incrementing pivots if (!$this->isPivotIncrementing()) { $widget->bindEvent('list.extendQuery', function ($query) { if (count($existingIds = $this->findExistingRelationIds())) { $query->whereNotIn($this->manageModel->getQualifiedKeyName(), $existingIds); } }); } return $widget; } /** * makeManageFormWidget prepares the form widget for management */ protected function makeManageFormWidget(): ?FormWidget { if (!$config = $this->makeConfigForMode('manage', 'form')) { return null; } $this->manageModel = $this->relationModel; // Existing record if ($this->manageId) { $this->manageModel = $this->findManageModelObject($this->manageId); if (!$this->manageModel) { throw new ApplicationException(Lang::get('backend::lang.model.not_found', [ 'class' => get_class($this->relationModel), 'id' => $this->manageId, ])); } } $config->model = $this->manageModel; $config->arrayName = class_basename($this->relationModel); $config->context = $this->evalFormContext('manage', !!$this->manageId); $config->alias = $this->alias . 'ManageForm'; $config->parentFieldName = $this->field; $widget = $this->makeWidget(FormWidget::class, $config); return $widget; } /** * onRelationManageForm */ public function onRelationManageForm() { // The form should not share its session key with the parent $this->bumpSessionKeys = true; $this->beforeAjax(); if ($this->manageMode === 'form' && !$this->manageFormWidget) { throw new ApplicationException("Missing configuration for [manage.{$this->manageMode}] in RelationController definition [{$this->field}]."); } if ($this->manageMode !== 'form' && !$this->manageListWidget) { throw new ApplicationException("Missing configuration for [manage.{$this->manageMode}] in RelationController definition [{$this->field}]."); } // Updating an existing record if ($this->manageMode === 'pivot' && ($this->manageId || $this->pivotId)) { return $this->onRelationManagePivotForm(); } $this->vars['newSessionKey'] = $this->sessionKey; return $this->relationMakePartial('manage_' . $this->manageMode); } /** * onRelationManageCreate a new related model */ public function onRelationManageCreate() { $this->beforeAjax(); $saveData = $this->manageFormWidget->getSaveData(); $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null; $parentModel = $this->relationObject->getParent(); $newModel = $this->relationModel; $this->controller->relationBeforeSave($this->field, $newModel); $this->controller->relationBeforeCreate($this->field, $newModel); $modelsToSave = $this->prepareModelsToSave($newModel, $saveData); foreach ($modelsToSave as $modelToSave) { $modelToSave->save(['sessionKey' => $this->manageFormWidget->getSessionKey(), 'propagate' => true]); } // No need to add relationships that have a valid association via HasOneOrMany::make if (!$this->relationObject instanceof HasOneOrMany || !$parentModel->exists) { $this->relationObject->add($newModel, $sessionKey); } // Belongs To won't save when using add() so it should occur if the conditions are right. if ($this->relationType === 'belongsTo' && $parentModel->exists && !$this->deferredBinding) { $parentModel->save(); } // Display updated form if ($this->viewMode === 'single') { $this->viewFormWidget->model = $newModel; $this->viewFormWidget->setFormValues($saveData); } $this->controller->relationAfterSave($this->field, $newModel); $this->controller->relationAfterCreate($this->field, $newModel); $this->showFlashMessage('flashCreate'); return $this->relationRefresh(); } /** * onRelationManageUpdate an existing related model's fields */ public function onRelationManageUpdate() { $this->beforeAjax(); $saveData = $this->manageFormWidget->getSaveData(); $this->controller->relationBeforeSave($this->field, $this->manageModel); $this->controller->relationBeforeUpdate($this->field, $this->manageModel); $modelsToSave = $this->prepareModelsToSave($this->manageModel, $saveData); foreach ($modelsToSave as $modelToSave) { $modelToSave->save(['sessionKey' => $this->manageFormWidget->getSessionKey(), 'propagate' => true]); } // Display updated form if ($this->viewMode === 'single') { $this->viewFormWidget->setFormValues($saveData); } $this->controller->relationAfterSave($this->field, $this->manageModel); $this->controller->relationAfterUpdate($this->field, $this->manageModel); $this->showFlashMessage('flashUpdate'); return $this->relationRefresh(); } /** * onRelationManageDelete an existing related model completely */ public function onRelationManageDelete() { $this->beforeAjax(); $deletedModels = []; // Multiple (has many, belongs to many) if ($this->viewMode === 'multi') { if (($checkedIds = post('checked')) && is_array($checkedIds)) { foreach ($checkedIds as $relationId) { if ($pivotKey = $this->isPivotIncrementing()) { $obj = $this->relationObject->wherePivot($pivotKey, $relationId)->first(); } else { $obj = $this->findManageModelObject($relationId); } if (!$obj) { continue; } $obj->delete(); $deletedModels[] = $obj; } } } // Single (belongs to, has one) elseif ($this->viewMode === 'single') { $relatedModel = $this->viewModel; if ($relatedModel->exists) { $relatedModel->delete(); $deletedModels[] = $relatedModel; } $this->resetViewWidgetModel(); $this->viewModel = $this->relationModel; } $this->controller->relationAfterDelete($this->field, $deletedModels); $this->showFlashMessage('flashDelete'); return $this->relationRefresh(); } /** * onRelationManageAdd an existing related model to the primary model */ public function onRelationManageAdd() { $this->beforeAjax(); $recordId = post('record_id'); $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null; // Add if ($this->viewMode === 'multi') { $checkedIds = $recordId ? [$recordId] : $this->manageListWidget->getAllCheckedIds(); if (is_array($checkedIds)) { // Remove existing relations from the array $existingIds = $this->findExistingRelationIds($checkedIds); $checkedIds = array_diff($checkedIds, $existingIds); $foreignKeyName = $this->relationModel->getKeyName(); $models = $this->relationModel->whereIn($foreignKeyName, $checkedIds)->get(); $this->controller->relationBeforeAdd($this->field, $models); foreach ($models as $model) { $this->relationObject->add($model, $sessionKey); } $this->controller->relationAfterAdd($this->field, $models); } $this->showFlashMessage('flashAdd'); } // Link elseif ($this->viewMode === 'single') { if ($recordId && ($model = $this->findManageModelObject($recordId))) { $this->relationObject->add($model, $sessionKey); $this->viewFormWidget->setFormValues($model->attributes); // Belongs To won't save when using add() so it should occur if the conditions are right. if ($this->relationType === 'belongsTo' && !$this->deferredBinding) { $parentModel = $this->relationObject->getParent(); if ($parentModel->exists) { $parentModel->save(); } } } $this->showFlashMessage('flashLink'); } return $this->relationRefresh(); } /** * onRelationManageRemove an existing related model from the primary model */ public function onRelationManageRemove() { $this->beforeAjax(); $recordId = post('record_id'); $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null; $relatedModel = $this->relationModel; // Remove if ($this->viewMode === 'multi') { $checkedIds = $recordId ? [$recordId] : post('checked'); if (is_array($checkedIds)) { if ($pivotKey = $this->isPivotIncrementing()) { $models = $this->relationObject->wherePivotIn($pivotKey, $checkedIds)->get(); } else { $foreignKeyName = $relatedModel->getKeyName(); $models = $relatedModel->whereIn($foreignKeyName, $checkedIds)->get(); } $this->controller->relationBeforeRemove($this->field, $models); foreach ($models as $model) { $this->relationObject->remove($model, $sessionKey); } $this->controller->relationAfterRemove($this->field, $models); } $this->showFlashMessage('flashRemove'); } // Unlink elseif ($this->viewMode === 'single') { if ($this->relationType === 'belongsTo') { $this->relationObject->dissociate(); $this->relationObject->getParent()->save(); } elseif ($this->relationType === 'hasOne' || $this->relationType === 'morphOne') { if ($obj = $this->findManageModelObject($recordId)) { $this->relationObject->remove($obj, $sessionKey); } elseif ($this->viewModel->exists) { $this->relationObject->remove($this->viewModel, $sessionKey); } } $this->resetViewWidgetModel(); $this->showFlashMessage('flashUnlink'); } return $this->relationRefresh(); } /** * evalManageTitle determines the management mode popup title */ protected function evalManageTitle(): string { if ($customTitle = $this->getConfig('manage[title]')) { return Lang::get($customTitle); } switch ($this->manageMode) { case 'pivot': case 'list': if ($this->eventTarget === 'button-link') { return $this->getCustomLang('titleLinkForm'); } else { return $this->getCustomLang('titleAddForm'); } case 'form': if ($this->readOnly) { return $this->getCustomLang('titlePreviewForm'); } elseif ($this->manageId) { return $this->getCustomLang('titleUpdateForm'); } else { return $this->getCustomLang('titleCreateForm'); } } return ''; } /** * evalManageMode determines the management mode based on the relation type and settings * @return string */ protected function evalManageMode() { switch ($this->eventTarget) { case 'button-create': case 'button-update': return 'form'; case 'button-link': return 'list'; } switch ($this->relationType) { case 'belongsTo': return 'list'; case 'morphToMany': case 'morphedByMany': case 'belongsToMany': if (isset($this->config->pivot)) { return 'pivot'; } elseif ($this->eventTarget === 'list') { return 'form'; } else { return 'list'; } case 'hasOne': case 'morphOne': case 'hasMany': case 'morphMany': case 'hasManyThrough': if ($this->eventTarget === 'button-add') { return 'list'; } return 'form'; } } /** * findManageModelObject for the current field */ protected function findManageModelObject($recordId) { if (!strlen($recordId)) { return null; } $query = $this->relationModel->newQuery(); $this->controller->relationExtendManageFormQuery($this->field, $query); return $query->find($recordId); } } ================================================ FILE: modules/backend/behaviors/relationcontroller/HasNestedRelations.php ================================================ <?php namespace Backend\Behaviors\RelationController; use Form as FormHelper; use October\Rain\Html\Helper as HtmlHelper; /** * HasNestedRelations implements nested relation chains */ trait HasNestedRelations { /** * @var array manageIds provided by the relationship chain */ protected $manageIds = []; /** * @var array sessionKeys provided by the relationship chain */ protected $sessionKeys = []; /** * getSessionKeysForField returns a session key for saving a form and for binding a relation, * the result is an array with [formSessionKey, relationSessionKey] */ protected function getSessionKeysForField($field): array { if (isset($this->sessionKeys[$field])) { return $this->sessionKeys[$field]; } if ($configSessionKey = $this->getConfig('sessionKey')) { return $this->sessionKeys[$field] = [$configSessionKey, $configSessionKey]; } $sessionKey = post('_session_key', FormHelper::getSessionKey()); $relationSessionKey = post('_relation_session_key', $sessionKey); return $this->sessionKeys[$field] = [$sessionKey, $relationSessionKey]; } /** * getManageIdForField */ protected function getManageIdForField($field) { // Field checksum for manage id if ($field === post('_relation_field') && ($manageId = post('manage_id', -1)) !== -1) { return $this->manageIds[$field] = $manageId; } if (isset($this->manageIds[$field])) { return $this->manageIds[$field]; } return null; } /** * initNestedRelation checks the extra configuration for a relationship chain * and binds the manage forms to the controller, which may contain additional * relation definitions via the relation form widget. */ protected function initNestedRelation($model, $parentField) { // Process session keys $sessionKeys = $this->extraConfig['sessionKeys'] ?? []; foreach ($sessionKeys as $field => $keys) { if (is_array($keys)) { $this->sessionKeys[$field] = $keys; } } // Process manage IDs $manageIds = $this->extraConfig['manageIds'] ?? []; foreach ($manageIds as $field => $id) { $this->manageIds[$field] = $id; } // Process nesting chain $checked = []; $checked[$parentField] = true; $chain = $this->extraConfig['chain'] ?? []; foreach ($chain as $field) { if (!$field || isset($checked[$field])) { continue; } $this->initRelationInternal($model, $field); $checked[$field] = true; } } /** * makeNestedRelationModel resolves a relation based on a nested field name * E.g: model[relation1][relation2] → $model->relation1()->relation2() */ protected function makeNestedRelationModel($model, $field) { if (!str_contains($field, '[') || !str_contains($field, ']')) { return [$model, $field]; } if ($result = $this->resolveNestedRelationModelFromManageId($model, $field)) { return $result; } if ($result = $this->resolveNestedRelationModelFromModelRelationship($model, $field)) { return $result; } // Fallback with an empty related model return $this->resolveNestedRelationModelFromDefault($model, $field); } /** * resolveNestedRelationModelFromModelRelationship returns a nested relation model * locating it using `array_get` to resolve the value */ protected function resolveNestedRelationModelFromModelRelationship($model, $field): ?array { $parts = HtmlHelper::nameToArray($field); $lastField = array_pop($parts); // Custom array_get() function to look for [id:x] segments $arrayGet = function($model, $parts, $default = null) { foreach ($parts as $segment) { $isPrimaryKey = str_starts_with($segment, 'id:'); if ($isPrimaryKey) { $segment = ltrim($segment, 'id:'); } if ($isPrimaryKey && $model instanceof \Illuminate\Support\Collection) { $model = $model->find($segment); } else { $model = array_get($model, $segment); } // Prevents an empty collection resolving as true here if ($model instanceof \Illuminate\Support\Collection && $model->isEmpty()) { return $default; } if (!$model) { return $default; } } return $model; }; if ($lookupModel = $arrayGet($model, $parts)) { return [$lookupModel, $lastField]; } return null; } /** * resolveNestedRelationModelFromManageId returns a resolved relation with a single hop */ protected function resolveNestedRelationModelFromManageId($model, $field): ?array { // Looking for a direct hop up, so pop off the end $parts = HtmlHelper::nameToArray($field); array_pop($parts); // Rebuild the field name with the end popped off $parentField = array_shift($parts); if ($parts) { $parentField .= '['.implode('][', $parts).']'; } // Locate the parent in the manage IDs, populate the model if possible if (array_key_exists($parentField, $this->manageIds)) { [$lastModel, $lastField] = $this->resolveNestedRelationModelFromDefault($model, $field); if ( ($parentId = $this->manageIds[$parentField]) && ($manageModel = $lastModel->find($parentId)) ) { $lastModel = $manageModel; } return [$lastModel, $lastField]; } return null; } /** * resolveNestedRelationModelFromDefault */ protected function resolveNestedRelationModelFromDefault($model, $field): array { $parts = array_filter(HtmlHelper::nameToArray($field), function($val) { return !is_numeric(ltrim($val, 'id:')); }); $lastModel = $model; $lastField = array_pop($parts); while ($rootField = array_shift($parts)) { $lastModel = $lastModel->$rootField()->getRelated(); } return [$lastModel, $lastField]; } } ================================================ FILE: modules/backend/behaviors/relationcontroller/HasOverrides.php ================================================ <?php namespace Backend\Behaviors\RelationController; /** * HasOverrides in the controller */ trait HasOverrides { /** * relationBeforeSave is called before the creation or updating form is saved * @param string $field * @param \Model $model */ public function relationBeforeSave($field, $model) { } /** * relationAfterSave is called after the creation or updating form is saved * @param string $field * @param \Model $model */ public function relationAfterSave($field, $model) { } /** * relationBeforeCreate is called before the creation form is saved * @param string $field * @param \Model $model */ public function relationBeforeCreate($field, $model) { } /** * relationAfterCreate is called after the creation form is saved * @param string $field * @param \Model $model */ public function relationAfterCreate($field, $model) { } /** * relationBeforeUpdate is called before the updating form is saved * @param string $field * @param \Model $model */ public function relationBeforeUpdate($field, $model) { } /** * relationAfterUpdate is called after the updating form is saved * @param string $field * @param \Model $model */ public function relationAfterUpdate($field, $model) { } /** * relationAfterDelete called after the related models are deleted * @param string $field * @param iterable $models */ public function relationAfterDelete($field, $models) { } /** * relationBeforeAdd is called before the adding related models * @param string $field * @param iterable $models */ public function relationBeforeAdd($field, $models) { } /** * relationAfterAdd is called after the adding related models * @param string $field * @param iterable $models */ public function relationAfterAdd($field, $models) { } /** * relationBeforeRemove is called before the removing related models * @param string $field * @param iterable $models */ public function relationBeforeRemove($field, $models) { } /** * relationAfterRemove is called after the removing related models * @param string $field * @param iterable $models */ public function relationAfterRemove($field, $models) { } /** * relationAfterCancel called after the user has cancelled the form * @param string $field * @param \Model $model */ public function relationAfterCancel($field, $model) { } /** * relationExtendConfig provides an opportunity to manipulate the field configuration. * @param object $config * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendConfig($config, $field, $model) { } /** * relationExtendManageFormQuery extends the query used for finding the form model. Extra conditions * can be applied to the query, for example, $query->withTrashed(); * @param \October\Rain\Database\Builder $query * @return void */ public function relationExtendManageFormQuery($field, $query) { } /** * relationExtendViewListWidget provides an opportunity to manipulate the view widget. * @param \Backend\Widgets\List $widget * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendViewListWidget($widget, $field, $model) { } /** * relationExtendViewFormWidget provides an opportunity to manipulate the manage widget. * @param \Backend\Widgets\Form $widget * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendViewFormWidget($widget, $field, $model) { } /** * relationExtendManageListWidget provides an opportunity to manipulate the view widget. * @param \Backend\Widgets\List $widget * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendManageListWidget($widget, $field, $model) { } /** * relationExtendManageFormWidget provides an opportunity to manipulate the manage widget. * @param \Backend\Widgets\Form $widget * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendManageFormWidget($widget, $field, $model) { } /** * relationExtendPivotWidget provides an opportunity to manipulate the pivot widget. * @param \Backend\Widgets\Form $widget * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendPivotFormWidget($widget, $field, $model) { } /** * relationExtendManageFilterWidget provides an opportunity to manipulate the manage filter widget. * @param \Backend\Widgets\Filter $widget * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendManageFilterWidget($widget, $field, $model) { } /** * relationExtendViewFilterWidget provides an opportunity to manipulate the view filter widget. * @param \Backend\Widgets\Filter $widget * @param string $field * @param \October\Rain\Database\Model $model */ public function relationExtendViewFilterWidget($widget, $field, $model) { } /** * relationExtendRefreshResults is needed because the view widget is often * refreshed when the manage widget makes a change, you can use this method * to inject additional containers when this process occurs. Return an array * with the extra values to send to the browser, eg: * * return ['#myCounter' => 'Total records: 6']; * * @param string $field * @return array */ public function relationExtendRefreshResults($field) { } /** * @deprecated use relationExtendViewListWidget or relationExtendViewFormWidget */ public function relationExtendViewWidget($widget, $field, $model) { } /** * @deprecated use relationExtendManageListWidget or relationExtendManageFormWidget */ public function relationExtendManageWidget($widget, $field, $model) { } /** * @deprecated use relationExtendPivotFormWidget */ public function relationExtendPivotWidget($widget, $field, $model) { } } ================================================ FILE: modules/backend/behaviors/relationcontroller/HasPivotMode.php ================================================ <?php namespace Backend\Behaviors\RelationController; use Db; use Lang; use ApplicationException; use Backend\Widgets\Form as FormWidget; use Exception; /** * HasPivotMode contains logic for managing pivot records */ trait HasPivotMode { /** * @var Backend\Classes\WidgetBase pivotWidget for relations with pivot data */ protected $pivotWidget; /** * @var Model pivotModel is a reference to the model used for pivot form */ protected $pivotModel; /** * @var string pivotTitle used for the pivot popup */ protected $pivotTitle; /** * @var int pivotId of a pivot record using an incrementing id */ protected $pivotId; /** * @var int foreignId of a selected pivot record */ protected $foreignId; /** * makePivotFormWidget return a form widget based on pivot configuration */ protected function makePivotFormWidget(): ?FormWidget { if ($this->manageMode !== 'pivot') { return null; } if (!$config = $this->makeConfigForMode('pivot', 'form')) { return null; } $config->model = $this->relationModel; $config->arrayName = class_basename($this->relationModel); $config->context = $this->evalFormContext('pivot', !!$this->manageId); $config->alias = $this->alias . 'ManagePivotForm'; $foreignKeyName = $this->relationModel->getQualifiedKeyName(); // Incrementing pivot record if ($this->pivotId && ($pivotKey = $this->isPivotIncrementing())) { $this->pivotModel = $this->relationObject->wherePivot($pivotKey, $this->pivotId)->first(); if ($this->pivotModel) { $config->model = $this->pivotModel; } else { throw new ApplicationException(Lang::get('backend::lang.model.not_found', [ 'class' => get_class($this->relationObject->newPivot()), 'id' => $this->pivotId, ])); } } // Existing record elseif ($this->manageId) { $this->pivotModel = $this->relationObject->where($foreignKeyName, $this->manageId)->first(); if ($this->pivotModel) { $config->model = $this->pivotModel; } else { throw new ApplicationException(Lang::get('backend::lang.model.not_found', [ 'class' => get_class($config->model), 'id' => $this->manageId, ])); } } // New record else { if ($this->foreignId) { $foreignModel = $this->relationModel ->whereIn($foreignKeyName, (array) $this->foreignId) ->first(); if ($foreignModel) { $foreignModel->exists = false; $config->model = $foreignModel; } } $config->model->setRelation('pivot', $this->relationObject->newPivot()); } return $this->makeWidget(FormWidget::class, $config); } /** * onRelationManageAddPivot adds multiple items using a single pivot form. */ public function onRelationManageAddPivot() { return $this->onRelationManagePivotForm(); } /** * onRelationManagePivotForm */ public function onRelationManagePivotForm() { $this->beforeAjax(); if (!$this->pivotWidget) { throw new ApplicationException("Missing configuration for [pivot.form] in RelationController definition [{$this->field}]."); } $this->vars['foreignId'] = $this->foreignId ?: post('checked'); return $this->relationMakePartial('pivot_form'); } /** * onRelationManagePivotCreate */ public function onRelationManagePivotCreate() { $this->beforeAjax(); // If the pivot model fails for some reason, abort the sync Db::transaction(function () { // Add the checked IDs to the pivot table $foreignIds = (array) $this->foreignId; $saveData = (array) $this->pivotWidget->getSaveData(); $pivotData = $this->getPivotDataForAttach($saveData); // Two methods are used to synchronize the records, the first inserts records in // bulk but may encounter collisions. The fallback adds records one at a time // and checks for collisions with existing records. try { $this->relationObject->attach($foreignIds, $pivotData); } catch (Exception $ex) { $this->relationObject->sync(array_fill_keys($foreignIds, $pivotData), false); } // Find newly attached models to save with deferred binding and nesting $foreignKeyName = $this->relationModel->getQualifiedKeyName(); if ($pivotKey = $this->isPivotIncrementing()) { // Must guess the models here since there is no way to fetch the last incrementing IDs $hydratedModels = $this->relationObject ->whereIn($foreignKeyName, $foreignIds) ->limit(count($foreignIds)) ->orderBy($this->relationObject->qualifyPivotColumn($pivotKey), 'desc') ->get(); } else { $hydratedModels = $this->relationObject->whereIn($foreignKeyName, $foreignIds)->get(); } // Save data to models foreach ($hydratedModels as $hydratedModel) { $modelsToSave = $this->prepareModelsToSave($hydratedModel, $saveData); foreach ($modelsToSave as $modelToSave) { $modelToSave->save(['sessionKey' => $this->pivotWidget->getSessionKey()]); } } }); $this->showFlashMessage('flashAdd'); return ['#'.$this->relationGetId('view') => $this->relationRenderView()]; } /** * onRelationManagePivotUpdate */ public function onRelationManagePivotUpdate() { $this->beforeAjax(); // Save data to model $saveData = $this->pivotWidget->getSaveData(); $modelsToSave = $this->prepareModelsToSave($this->pivotModel, $saveData); foreach ($modelsToSave as $modelToSave) { $modelToSave->save(['sessionKey' => $this->pivotWidget->getSessionKey()]); } $this->showFlashMessage('flashUpdate'); return ['#'.$this->relationGetId('view') => $this->relationRenderView()]; } /** * evalPivotTitle determines the pivot mode popup title */ protected function evalPivotTitle(): string { if ($customTitle = $this->getConfig('pivot[title]')) { return $customTitle; } return $this->getCustomLang('titlePivotForm'); } /** * getPivotDataForAttach returns either a list of IDs to sync, or an associative * array with sync keys and pivot attributes as values. * * This method only exists to send the pivot attributes to the `model.relation.attach` * event. The attributes are set and saved a second time via the regular life cycle. * Eloquent should not send it to SQL twice if the attributes are an exact match. */ protected function getPivotDataForAttach(array $saveData): array { if (!isset($saveData['pivot']) || !is_array($saveData['pivot'])) { return []; } $pivotModel = $this->relationObject->newPivot(); $this->setModelAttributes($pivotModel, $saveData['pivot']); // Emulate save events for attribute manipulation $pivotModel->fireEvent('model.beforeSave'); $pivotModel->fireEvent('model.beforeCreate'); $pivotModel->fireEvent('model.beforeSaveDone'); $pivotData = $pivotModel->getAttributes(); if (!$pivotData) { return []; } return $pivotData; } /** * isPivotIncrementing */ protected function isPivotIncrementing() { if ($this->manageMode !== 'pivot') { return false; } $definition = $this->relationParent->getRelationDefinition($this->relationName); if (!isset($definition['pivotModel'])) { return false; } if (is_string($pivotKey = $definition['pivotKey'] ?? null)) { return $pivotKey; } return false; } } ================================================ FILE: modules/backend/behaviors/relationcontroller/HasViewMode.php ================================================ <?php namespace Backend\Behaviors\RelationController; use Request; use October\Rain\Database\Model; use Backend\Widgets\Form as FormWidget; use Backend\Widgets\Lists as ListWidget; use Backend\Widgets\ListStructure as ListStructureWidget; /** * HasViewMode contains logic for viewing related records */ trait HasViewMode { /** * @var ListWidget|null viewListWidget used for viewing as a list */ protected $viewListWidget; /** * @var FormWidget|null viewFormWidget used for viewing as a form */ protected $viewFormWidget; /** * @var \Backend\Widgets\Filter viewFilterWidget */ protected $viewFilterWidget; /** * @var Model viewModel is a reference to the model used for viewing (form only) */ protected $viewModel; /** * @var string viewMode if relation has many (multi) or has one (single) */ protected $viewMode; /** * relationGetManageFormWidget returns the manage form widget used by this behavior */ public function relationGetViewFormWidget(): ?FormWidget { return $this->viewFormWidget; } /** * relationGetViewListWidget returns the manage list widget used by this behavior */ public function relationGetViewListWidget(): ?ListWidget { return $this->viewListWidget; } /** * relationGetViewWidget returns the view widget used by this behavior * @deprecated use relationGetViewListWidget or relationGetViewFormWidget * @return \Backend\Classes\WidgetBase */ public function relationGetViewWidget() { // Multiple (has many, belongs to many) if ($this->viewMode === 'multi') { return $this->viewListWidget; } // Single (belongs to, has one) if ($this->viewMode === 'single') { return $this->viewFormWidget; } return null; } /** * makeViewListWidget prepares the list widget for viewing */ protected function makeViewListWidget(): ?ListWidget { if ($this->viewMode !== 'multi') { return null; } if (!$config = $this->makeConfigForMode('view', 'list')) { return null; } $this->viewModel = $this->relationModel; $isPivot = in_array($this->relationType, ['belongsToMany', 'morphedByMany', 'morphToMany']); $isPivotIncrementing = $this->isPivotIncrementing(); $config->model = $this->viewModel; $config->alias = $this->alias . 'ViewList'; $config->showSetup = $this->getConfig('view[showSetup]', false); $config->showSorting = $this->getConfig('view[showSorting]', true); $config->defaultSort = $this->getConfig('view[defaultSort]'); $config->recordsPerPage = $this->getConfig('view[recordsPerPage]'); $config->showCheckboxes = $this->getConfig('view[showCheckboxes]', !$this->readOnly); $config->recordUrl = $this->getConfig('view[recordUrl]', null); $config->customViewPath = $this->getConfig('view[customViewPath]', null); $config->customPageName = $this->getConfig('view[customPageName]', camel_case(class_basename($this->relationModel).'Page')); $config->pivotMode = $isPivotIncrementing; if ($isPivotIncrementing) { $defaultOnClick = sprintf( "oc.relationBehavior.clickViewPivotListRecord(this, ':%s', '%s', '%s')", $isPivotIncrementing, $this->relationGetId(), $this->relationSessionKey ); } else { $defaultOnClick = sprintf( "oc.relationBehavior.clickViewListRecord(this, ':%s', '%s', '%s')", $this->viewModel->getKeyName(), $this->relationGetId(), $this->relationSessionKey ); } if ($config->recordUrl) { $defaultOnClick = null; } elseif ( !$this->makeConfigForMode('manage', 'form') && !$this->makeConfigForMode('pivot', 'form') ) { $defaultOnClick = null; } $config->recordOnClick = $this->getConfig('view[recordOnClick]', $defaultOnClick); if ($emptyMessage = $this->getConfig('emptyMessage')) { $config->noRecordsMessage = $emptyMessage; } if ($isPivot) { $this->viewModel->setRelation('pivot', $this->relationObject->newPivot()); } // Make structure enabled widget $structureConfig = $this->makeListStructureConfig($config); if ($structureConfig) { $widget = $this->makeWidget(ListStructureWidget::class, $structureConfig); } else { $widget = $this->makeWidget(ListWidget::class, $config); } // Linkage for JS plugins if ($this->toolbarWidget) { $this->toolbarWidget->listWidgetId = $widget->getId(); // Pass the list setup AJAX handler to the toolbar if ($config->showSetup) { $this->toolbarWidget->setupHandler = $widget->getEventHandler('onLoadSetup'); } } // Custom structure reordering logic if ( $this->relationParent->isClassInstanceOf(\October\Contracts\Database\SortableRelationInterface::class) && $this->relationParent->isSortableRelation($this->relationName) ) { $widget->bindEvent('list.beforeReorderStructure', function () { // Set sort orders in deferred bindings as well if ($this->deferredBinding) { $this->relationParent->sessionKey = $this->relationSessionKey; } $this->relationParent->setSortableRelationOrder($this->relationName, post('sort_orders'), true); return false; }, -1); } // Apply defined constraints if ($sqlConditions = $this->getConfig('view[conditions]')) { $widget->bindEvent('list.extendQueryBefore', function ($query) use ($sqlConditions) { $query->whereRaw($sqlConditions); }); } elseif ($scopeMethod = $this->getConfig('view[scope]')) { $widget->bindEvent('list.extendQueryBefore', function ($query) use ($scopeMethod) { $query->$scopeMethod($this->relationParent); }); } else { $widget->bindEvent('list.extendQueryBefore', function ($query) { $this->relationObject->addDefinedConstraintsToQuery($query); }); } // Constrain the query by the relationship and deferred items $widget->bindEvent('list.extendQuery', function (&$query) use ($isPivot) { $this->relationObject->setQuery($query); $sessionKey = $this->deferredBinding ? $this->relationSessionKey : null; if ($sessionKey) { $this->relationObject->withDeferredQuery(null, $sessionKey); } elseif ($this->relationParent->exists) { $this->relationObject->addConstraints(); } // Allows pivot data to enter the fray by replacing the query if ($isPivot) { $this->relationObject->setQuery($query->getQuery()); $query = $this->relationObject; } }); // Constrain the list by the search widget, if available if ( $this->toolbarWidget && $this->getConfig('view[showSearch]') && $searchWidget = $this->toolbarWidget->getSearchWidget() ) { $searchWidget->bindEvent('search.submit', function () use ($widget, $searchWidget) { $widget->setSearchTerm($searchWidget->getActiveTerm()); return $widget->onRefresh(); }); // Pass search options $widget->setSearchOptions([ 'mode' => $this->getConfig('view[searchMode]'), 'scope' => $this->getConfig('view[searchScope]'), ]); // Persist the search term across AJAX requests only if (Request::ajax()) { $widget->setSearchTerm($searchWidget->getActiveTerm()); } else { $searchWidget->setActiveTerm(null); } } // Link the Filter Widget to the List Widget if ($this->viewFilterWidget) { $this->viewFilterWidget->bindEvent('filter.update', function () use ($widget) { return $widget->onFilter(); }); // Apply predefined filter values $widget->addFilter([$this->viewFilterWidget, 'applyAllScopesToQuery']); } return $widget; } /** * makeViewFormWidget prepares the form widget for viewing */ protected function makeViewFormWidget(): ?FormWidget { if ($this->viewMode !== 'single') { return null; } if (!$config = $this->makeConfigForMode('view', 'form')) { return null; } $this->viewModel = $this->relationObject->getResults() ?: $this->relationModel; $config->model = $this->viewModel; $config->arrayName = class_basename($this->relationModel); $config->context = 'relation'; $config->alias = $this->alias . 'ViewForm'; $widget = $this->makeWidget(FormWidget::class, $config); $widget->previewMode = true; return $widget; } /** * makeListStructureConfig */ protected function makeListStructureConfig(object $config): ?object { $structureConfig = $this->makeConfigForMode('view', 'structure'); if (!$structureConfig) { return null; } if ( $this->relationParent->isClassInstanceOf(\October\Contracts\Database\SortableRelationInterface::class) && $this->relationParent->isSortableRelation($this->relationName) ) { $structureConfig->includeSortOrders = true; } return $this->mergeConfig($config, $structureConfig); } // // AJAX (Buttons) // /** * onRelationButtonAdd */ public function onRelationButtonAdd() { return $this->onRelationManageForm(); } /** * onRelationButtonCreate */ public function onRelationButtonCreate() { return $this->onRelationManageForm(); } /** * onRelationButtonDelete */ public function onRelationButtonDelete() { return $this->onRelationManageDelete(); } /** * onRelationButtonLink */ public function onRelationButtonLink() { return $this->onRelationManageForm(); } /** * onRelationButtonUnlink */ public function onRelationButtonUnlink() { return $this->onRelationManageRemove(); } /** * onRelationButtonRemove */ public function onRelationButtonRemove() { return $this->onRelationManageRemove(); } /** * onRelationButtonUpdate */ public function onRelationButtonUpdate() { return $this->onRelationManageForm(); } // // AJAX (List events) // /** * onRelationClickManageList */ public function onRelationClickManageList() { return $this->onRelationManageAdd(); } /** * onRelationClickManageListPivot */ public function onRelationClickManageListPivot() { return $this->onRelationManagePivotForm(); } /** * onRelationClickViewList */ public function onRelationClickViewList() { return $this->onRelationManageForm(); } /** * onRelationClickViewListPivot */ public function onRelationClickViewListPivot() { return $this->onRelationManageForm(); } /** * evalEventTarget determines the source of an AJAX event used for determining * the manage mode state. See the `evalManageMode` method. * @return string */ protected function evalEventTarget() { switch ($this->controller->getAjaxHandler()) { case 'onRelationButtonAdd': return 'button-add'; case 'onRelationButtonCreate': return 'button-create'; case 'onRelationButtonLink': return 'button-link'; case 'onRelationButtonUpdate': return 'button-update'; case 'onRelationClickViewList': return 'list'; default: return ''; } } /** * evalViewMode determines the view mode based on the model relationship type * @return string */ protected function evalViewMode() { if ($viewMode = $this->getConfig('manage[viewMode]')) { return $viewMode; } switch ($this->relationType) { case 'hasMany': case 'morphMany': case 'morphToMany': case 'morphedByMany': case 'belongsToMany': case 'hasManyThrough': return 'multi'; case 'hasOne': case 'morphOne': case 'belongsTo': return 'single'; default: return ''; } } /** * resetViewWidgetModel is an internal method used when deleting singular relationships */ protected function resetViewWidgetModel() { $this->viewFormWidget->model = $this->relationModel; $this->viewFormWidget->setFormValues([]); } } ================================================ FILE: modules/backend/behaviors/relationcontroller/assets/css/relation.css ================================================ .relation-behavior.relation-view-multi,.relation-behavior.relation-view-single{background:var(--oc-form-control-bg);border:1px solid var(--bs-border-color);border-radius:4px;margin-bottom:20px;overflow:hidden}.relation-behavior.relation-view-multi .control-filter,.relation-behavior.relation-view-single .control-filter{border-top:none}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar{border-bottom:1px solid var(--oc-border-color);padding:0}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .loading-indicator-container.size-input-text .loading-indicator>span,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .loading-indicator-container.size-input-text .loading-indicator>span{top:7px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .toolbar-item.toolbar-primary,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .toolbar-item.toolbar-primary{padding:3px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .search-input-container:before,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .search-input-container:before{right:10px;top:11px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .search-input-container .form-control,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .search-input-container .form-control{border-bottom:none;border-radius:0;border-right:none;border-top:none;padding-bottom:8px;padding-top:8px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup{border-left:1px solid var(--oc-border-color);width:35px}.relation-behavior.relation-view-multi .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup a>span,.relation-behavior.relation-view-single .relation-toolbar .control-toolbar .toolbar-item.toolbar-setup a>span{margin-left:5px}.relation-behavior.relation-view-multi .control-list,.relation-behavior.relation-view-single .control-list{border:none;margin-bottom:0}.relation-behavior.relation-view-single{background:transparent}.relation-behavior.relation-view-single .relation-toolbar .control-toolbar{background:var(--oc-form-control-bg);border-bottom:1px solid var(--oc-toolbar-border)}.relation-behavior.relation-view-single>.relation-manager{padding:20px 20px 0}.widget-field.span-adaptive>.relation-widget .relation-behavior{border-left:none;border-radius:0;border-right:none;border-top:none}.widget-field.span-adaptive>.relation-widget .relation-behavior .relation-toolbar{display:none}.widget-field>.relation-widget .relation-behavior{margin-bottom:0}.relation-behavior{margin-bottom:20px}.relation-behavior .control-list{border:1px solid #eee}.relation-behavior .control-list thead>tr>th{border-top:none!important;border-color:#eee}.relation-behavior .control-list table.table.data{border-bottom:none}.relation-behavior .control-list .list-content+.list-footer{border-top:1px solid var(--bs-border-color)}.relation-behavior .control-list .list-footer .pagination{--bs-pagination-bg:var(--oc-form-control-bg)}.relation-behavior .control-toolbar{padding:0 20px 20px}.relation-behavior .control-toolbar .toolbar-item.toolbar-primary:before{left:0}.relation-behavior .control-toolbar .toolbar-item.toolbar-primary:after{right:0}.relation-behavior .control-toolbar .toolbar-item .form-control.search{padding-bottom:5px;padding-top:5px}.relation-behavior .control-toolbar .loading-indicator-container.size-input-text{min-height:0}.relation-behavior .control-toolbar .loading-indicator-container.size-input-text .loading-indicator>span{top:4px}.relation-behavior .list-header{padding:0!important}.relation-behavior .control-list:last-child>table{margin-bottom:0}.relation-flush .control-list{border-top:none}.relation-inset{margin-left:-20px;margin-right:-20px}.form-group>.relation-behavior .control-toolbar{padding:0 0 10px} ================================================ FILE: modules/backend/behaviors/relationcontroller/assets/js/october.relation.js ================================================ /* * Scripts for the Relation controller behavior. */ +function ($) { "use strict"; class RelationBehavior extends oc.ControlBase { static instanceCounter = 0; init() { this.instanceNumber = ++this.constructor.instanceCounter; } connect() { this.listen('trigger:after-update', this.extendExternalToolbar); // External toolbar oc.pageReady().then(() => { this.initToolbarExtensionPoint(); this.mountExternalToolbarEventBusEvents(); this.extendExternalToolbar(); }); } disconnect() { } initToolbarExtensionPoint() { if (!this.config.externalToolbarAppState) { return; } const point = $.oc.vueUtils.getToolbarExtensionPoint( this.config.externalToolbarAppState, this.element ); if (point) { this.toolbarExtensionPoint = point.state; this.externalToolbarEventBusObj = point.bus; } } mountExternalToolbarEventBusEvents() { if (!this.externalToolbarEventBusObj) { return; } this.externalToolbarEventBusObj.on('toolbarcmd', this.proxy(this.onToolbarExternalCommand)); this.externalToolbarEventBusObj.on('extendapptoolbar', this.proxy(this.extendExternalToolbar)); } unmountExternalToolbarEventBusEvents() { if (!this.externalToolbarEventBusObj) { return; } this.externalToolbarEventBusObj.off('toolbarcmd', this.proxy(this.onToolbarExternalCommand)); this.externalToolbarEventBusObj.off('extendapptoolbar', this.proxy(this.extendExternalToolbar)); } onToolbarExternalCommand(ev) { var $el = $(this.element); var cmdPrefix = 'relationcontroller-toolbar-' + this.instanceNumber + '-'; if (ev.command.substring(0, cmdPrefix.length) != cmdPrefix) { return; } var buttonClassName = ev.command.substring(cmdPrefix.length), $toolbar = $el.find('.relation-toolbar .control-toolbar'), $button = $toolbar.find('[class="'+buttonClassName+'"]'); $button.get(0).click(ev.ev); } extendExternalToolbar() { var $el = $(this.element); if (!$el.is(":visible") || !this.toolbarExtensionPoint) { return; } this.toolbarExtensionPoint.splice(0, this.toolbarExtensionPoint.length); this.toolbarExtensionPoint.push({ type: 'separator' }); var $buttons = $el.find('.relation-toolbar .control-toolbar .btn'); $buttons.each((index, button) => { var $button = $(button), $icon = $button.find('i[class^=icon]'); this.toolbarExtensionPoint.push( { type: 'button', icon: $icon.attr('class'), label: $button.text(), command: 'relationcontroller-toolbar-' + this.instanceNumber + '-' + $button.attr('class'), disabled: $button.attr('disabled') !== undefined } ); }); } static toggleListCheckbox(el) { $(el).closest('.control-list').listWidget('toggleChecked', [el]); } static clickViewListRecord(target, recordId, relationId, sessionKey) { var newPopup = $(target), $container = $('#'+relationId), requestData = paramToObj('data-request-data', $container.data('request-data')); newPopup.popup({ handler: 'onRelationClickViewList', extraData: $.extend({}, requestData, { 'manage_id': recordId, '_relation_session_key': sessionKey }) }); } static clickViewPivotListRecord(target, recordId, relationId, sessionKey) { var newPopup = $(target), $container = $('#'+relationId), requestData = paramToObj('data-request-data', $container.data('request-data')); newPopup.popup({ handler: 'onRelationClickViewListPivot', extraData: $.extend({}, requestData, { 'pivot_id': recordId, '_relation_session_key': sessionKey }) }); } static clickManageListRecord(target, recordId, relationId, sessionKey) { var oldPopup = $('#relationManagePopup'), $container = $('#'+relationId), requestData = paramToObj('data-request-data', $container.data('request-data')); $(target).request('onRelationClickManageList', { data: $.extend({}, requestData, { 'record_id': recordId, '_relation_session_key': sessionKey }) }) .done(() => { if (requestData['_relation_field']) { this.changed(requestData['_relation_field'], 'added'); } }); oldPopup.popup('hide'); } static clickManagePivotListRecord(target, foreignId, relationId, sessionKey) { var oldPopup = $('#relationManagePivotPopup'), newPopup = $(target), $container = $('#'+relationId), requestData = paramToObj('data-request-data', $container.data('request-data')); if (oldPopup.length) { oldPopup.popup('hide'); } newPopup.popup({ handler: 'onRelationClickManageListPivot', extraData: $.extend({}, requestData, { 'foreign_id': foreignId, '_relation_session_key': sessionKey }) }); } // This function is called every time a record is created, added, removed // or deleted using the relation widget. It triggers the change.oc.formwidget // event to notify other elements on the page about the changed form state. static changed(relationId, event) { $('[data-field-name="' + relationId + '"]').trigger('change.oc.formwidget', { event: event }); } // @deprecated use oc.popup.bindToPopups static bindToPopups(container, vars) { return oc.popup.bindToPopups(container, vars); } } function paramToObj(name, value) { if (value === undefined) value = '' if (typeof value == 'object') return value try { return oc.parseJSON("{" + value + "}") } catch (e) { throw new Error('Error parsing the '+name+' attribute value. '+e) } } oc.registerControl('relation-controller', RelationBehavior); oc.relationBehavior = RelationBehavior; // @deprecated $.oc.relationBehavior = RelationBehavior; }(window.jQuery); ================================================ FILE: modules/backend/behaviors/relationcontroller/assets/less/relation.field.less ================================================ .widget-field.span-adaptive > .relation-widget { .relation-behavior { border-top: none; border-left: none; border-right: none; border-radius: 0; .relation-toolbar { display: none; } } } .widget-field > .relation-widget { .relation-behavior { margin-bottom: 0; } } ================================================ FILE: modules/backend/behaviors/relationcontroller/assets/less/relation.less ================================================ @import "../../../../assets/less/core/boot.less"; @color-relation-border: #eeeeee; @import "relation.ui.less"; @import "relation.field.less"; .relation-behavior { margin-bottom: 20px; .control-list { border: 1px solid @color-relation-border; thead > tr > th { border-top: none !important; border-color: @color-relation-border; } table.table.data { border-bottom: none; } .list-content + .list-footer { border-top: 1px solid @input-border; } .list-footer .pagination { --bs-pagination-bg: @input-bg; } } .control-toolbar { padding: 0 20px 20px 20px; .toolbar-item.toolbar-primary { &:before { left: 0; } &:after { right: 0; } } .toolbar-item .form-control.search { padding-top: 5px; padding-bottom: 5px; } .loading-indicator-container.size-input-text { min-height: 0; .loading-indicator > span { top: 4px; } } } .list-header { padding: 0 !important; } .control-list:last-child > table { margin-bottom: 0; } } // Relation manager to sit flush to the element above .relation-flush { .control-list { border-top: none; } } // Relation manager to sit inset the standard padding (20px) .relation-inset { margin-left: -20px; margin-right: -20px; } // Displayed in a form field .form-group > .relation-behavior { .control-toolbar { padding: 0 0 10px 0; } } ================================================ FILE: modules/backend/behaviors/relationcontroller/assets/less/relation.ui.less ================================================ .relation-behavior { &.relation-view-multi, &.relation-view-single { border: 1px solid @input-border; border-radius: @input-border-radius; // border-top: 1px solid @input-border; // border-bottom: 1px solid @input-border; margin-bottom: 20px; background: @input-bg; overflow: hidden; .relation-manager { // border-top: 1px solid var(--oc-border-color); } .control-filter { border-top: none; } .relation-toolbar .control-toolbar { padding: 0; border-bottom: 1px solid var(--oc-border-color); .loading-indicator-container.size-input-text .loading-indicator > span { top: 7px; } .toolbar-item.toolbar-primary { padding: 3px; } .search-input-container { &:before { right: 10px; top: 11px; } .form-control { border-radius: 0; border-top: none; border-bottom: none; border-right: none; padding-top: 8px; padding-bottom: 8px; } } .toolbar-item.toolbar-setup { border-left: 1px solid var(--oc-border-color); width: 35px; a > span { margin-left: 5px; } } } .control-list { margin-bottom: 0; border: none; } } &.relation-view-single { background: transparent; .relation-toolbar .control-toolbar { background: @input-bg; border-bottom: 1px solid @toolbar-border; } > .relation-manager { padding: 20px 20px 0 20px; } } } ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_button_add.php ================================================ <a data-control="popup" data-handler="onRelationButtonAdd" href="javascript:;" class="btn btn-sm btn-secondary relation-button-add" > <i class="icon-list-add"></i> <?= e($this->relationGetMessage('buttonAdd')) ?> </a> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_button_create.php ================================================ <a data-control="popup" data-handler="onRelationButtonCreate" data-request-data="manage_id: null" href="javascript:;" class="btn btn-sm btn-secondary relation-button-create" > <i class="icon-create"></i> <?= e($this->relationGetMessage('buttonCreate')) ?> </a> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_button_delete.php ================================================ <?php if ($relationViewMode == 'single'): ?> <button class="btn btn-sm btn-secondary relation-button-delete" data-request="onRelationButtonDelete" data-request-confirm="<?= e($this->relationGetMessage('confirmDelete')) ?>" data-request-success="oc.relationBehavior.changed('<?= e($relationField) ?>', 'deleted')" data-stripe-load-indicator > <i class="icon-delete"></i> <?= e($this->relationGetMessage('buttonDelete')) ?> </button> <?php else: ?> <button class="btn btn-sm btn-secondary relation-button-delete" disabled="disabled" data-request="onRelationButtonDelete" data-request-confirm="<?= e($this->relationGetMessage('confirmDelete')) ?>" data-request-success="oc.relationBehavior.changed('<?= e($relationField) ?>', 'deleted')" data-list-checked-trigger data-list-checked-request data-stripe-load-indicator > <i class="icon-delete"></i> <?= e($this->relationGetMessage('buttonDeleteMany')) ?> <span data-list-checked-counter></span> </button> <?php endif ?> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_button_link.php ================================================ <a data-control="popup" data-handler="onRelationButtonLink" href="javascript:;" class="btn btn-sm btn-secondary relation-button-link" > <i class="icon-link"></i> <?= e($this->relationGetMessage('buttonLink')) ?> </a> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_button_remove.php ================================================ <?php if ($relationViewMode == 'single'): ?> <button class="btn btn-sm btn-secondary relation-button-remove" data-request="onRelationButtonRemove" data-request-success="oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')" data-stripe-load-indicator > <i class="icon-list-remove"></i> <?= e($this->relationGetMessage('buttonRemove')) ?> </button> <?php else: ?> <button class="btn btn-sm btn-secondary relation-button-remove" disabled="disabled" data-request="onRelationButtonRemove" data-request-success="oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')" data-list-checked-trigger data-list-checked-request data-stripe-load-indicator > <i class="icon-list-remove"></i> <?= e($this->relationGetMessage('buttonRemoveMany')) ?> <span data-list-checked-counter></span> </button> <?php endif ?> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_button_unlink.php ================================================ <?php if ($relationViewMode == 'single'): ?> <button class="btn btn-sm btn-secondary relation-button-unlink" data-request="onRelationButtonUnlink" data-request-success="oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')" data-request-confirm="<?= e($this->relationGetMessage('confirmUnlink')) ?>" data-stripe-load-indicator > <i class="icon-unlink"></i> <?= e($this->relationGetMessage('buttonUnlink')) ?> </button> <?php else: ?> <button class="btn btn-sm btn-secondary relation-button-unlink" disabled="disabled" data-request="onRelationButtonUnlink" data-request-success="oc.relationBehavior.changed('<?= e($relationField) ?>', 'removed')" data-request-confirm="<?= e($this->relationGetMessage('confirmUnlink')) ?>" data-list-checked-trigger data-list-checked-request data-stripe-load-indicator > <i class="icon-unlink"></i> <?= e($this->relationGetMessage('buttonUnlinkMany')) ?> <span data-list-checked-counter></span> </button> <?php endif ?> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_button_update.php ================================================ <a data-control="popup" data-handler="onRelationButtonUpdate" data-request-data="manage_id: '<?= $relationManageId ?>'" href="javascript:;" class="btn btn-sm btn-secondary relation-button-update" > <i class="icon-settings"></i> <?= e($this->relationGetMessage('buttonUpdate')) ?> </a> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_container.php ================================================ <div id="<?= $this->relationGetId() ?>" data-control="relation-controller" data-request-data="_relation_field: '<?= $relationField ?>', _relation_extra_config: '<?= e(json_encode($relationExtraConfig)) ?>'" class="relation-behavior relation-view-<?= $relationViewMode ?>" <?php if ($externalToolbarAppState): ?>data-external-toolbar-app-state="<?= e($externalToolbarAppState)?>"<?php endif ?> > <?php if ($toolbar = $this->relationRenderToolbar()): ?> <!-- Relation Toolbar --> <div id="<?= $this->relationGetId('toolbar') ?>" class="relation-toolbar"> <?= $toolbar ?> </div> <?php endif ?> <!-- Relation View --> <div id="<?= $this->relationGetId('view') ?>" class="relation-manager"> <?= $this->relationRenderView() ?> </div> </div> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_manage_form.php ================================================ <div id="<?= $relationManageFormWidget->getId('managePopup') ?>" data-popup-size="<?= $relationPopupSize ?? 950 ?>" > <?php if ($relationManageId): ?> <?= Form::ajax('onRelationManageUpdate', [ 'sessionKey' => $newSessionKey, 'data-popup-load-indicator' => true, 'data-request-success' => "oc.relationBehavior.changed('" . e($relationField) . "', 'updated')", ]) ?> <!-- Passable fields --> <input type="hidden" name="_relation_field" value="<?= $relationField ?>" /> <input type="hidden" name="_relation_extra_config" value="<?= e(json_encode($relationExtraConfig)) ?>" /> <input type="hidden" name="_form_session_key" value="<?= $formSessionKey ?>" /> <div class="modal-header"> <h4 class="modal-title"><?= e($relationManageTitle) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <?= $relationManageFormWidget->render(['preview' => $relationReadOnly]) ?> </div> <div class="modal-footer"> <?php if ($relationReadOnly): ?> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCloseForm')) ?> </button> <?php else: ?> <button type="submit" class="btn btn-primary"> <?= e($this->relationGetMessage('buttonUpdateForm')) ?> </button> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <a href="javascript:;" class="btn btn-link p-0" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCancelForm')) ?> </a> </span> <?php endif ?> </div> <?= Form::close() ?> <?php else: ?> <?= Form::ajax('onRelationManageCreate', [ 'sessionKey' => $newSessionKey, 'data-popup-load-indicator' => true, 'data-request-success' => "oc.relationBehavior.changed('" . e($relationField) . "', 'created')", ]) ?> <!-- Passable fields --> <input type="hidden" name="_relation_field" value="<?= $relationField ?>" /> <input type="hidden" name="_relation_extra_config" value="<?= e(json_encode($relationExtraConfig)) ?>" /> <input type="hidden" name="_form_session_key" value="<?= $formSessionKey ?>" /> <div class="modal-header"> <h4 class="modal-title"><?= e($relationManageTitle) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <?= $relationManageFormWidget->render() ?> </div> <div class="modal-footer"> <button type="submit" class="btn btn-primary"> <?= e($this->relationGetMessage('buttonCreateForm')) ?> </button> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <a href="javascript:;" class="btn btn-link p-0" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCancelForm')) ?> </a> </span> </div> <?= Form::close() ?> <?php endif ?> </div> <script> oc.popup.bindToPopups('#<?= $relationManageFormWidget->getId("managePopup") ?>', { _relation_field: '<?= $relationField ?>', _relation_extra_config: '<?= e(json_encode($relationExtraConfig)) ?>', _form_session_key: '<?= $formSessionKey ?>' }); </script> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_manage_list.php ================================================ <div id="relationManagePopup" data-popup-size="<?= $relationPopupSize ?? 950 ?>" > <?= Form::open() ?> <input type="hidden" name="_relation_field" value="<?= $relationField ?>" /> <input type="hidden" name="_relation_extra_config" value="<?= e(json_encode($relationExtraConfig)) ?>" /> <div class="modal-header"> <h4 class="modal-title"><?= e($relationManageTitle) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="list-flush" data-list-linkage="<?= $relationManageListWidget->getId() ?>"> <?php if ($relationSearchWidget): ?> <?= $relationSearchWidget->render() ?> <?php endif ?> <?php if ($relationManageFilterWidget): ?> <?= $relationManageFilterWidget->render() ?> <?php endif ?> <?= $relationManageListWidget->render() ?> </div> <div class="modal-footer"> <?php if ($relationManageListWidget->showCheckboxes): ?> <button type="button" class="btn btn-primary" data-request="onRelationManageAdd" data-dismiss="popup" data-request-success="oc.relationBehavior.changed('<?= e($relationField) ?>', 'added')" data-stripe-load-indicator> <?= e($this->relationGetMessage('buttonAddMany')) ?> </button> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <a href="javascript:;" class="btn btn-link p-0" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCancelForm')) ?> </a> </span> <?php else: ?> <button type="button" class="btn btn-secondary me-auto" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCloseForm')) ?> </button> <?php endif ?> <?php if ($relationManageListWidget->showSetup): ?> <button class="btn btn-circle btn-secondary ms-auto" title="<?= __("List Setup") ?>" data-handler="<?= $relationManageListWidget->getEventHandler('onLoadSetup') ?>" data-control="popup" type="button"> <i class="icon-text-format-ul"></i> </button> <?php endif ?> </div> <?= Form::close() ?> </div> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_manage_pivot.php ================================================ <div id="relationManagePivotPopup" data-popup-size="<?= $relationPopupSize ?? 950 ?>" > <?= Form::open() ?> <input type="hidden" name="_relation_field" value="<?= $relationField ?>" /> <input type="hidden" name="_relation_extra_config" value="<?= e(json_encode($relationExtraConfig)) ?>" /> <div class="modal-header"> <h4 class="modal-title"><?= e($relationManageTitle) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <?php if (!$relationSearchWidget): ?> <div class="modal-body py-3"> <p class="mb-0 text-muted"><?= e(trans('backend::lang.relation.help')) ?></p> </div> <?php endif ?> <div class="list-flush"> <?php if ($relationSearchWidget): ?> <?= $relationSearchWidget->render() ?> <?php endif ?> <?php if ($relationManageFilterWidget): ?> <?= $relationManageFilterWidget->render() ?> <?php endif ?> <?= $relationManageListWidget->render() ?> </div> <div class="modal-footer"> <?php if ($relationManageListWidget->showCheckboxes): ?> <button type="button" class="btn btn-primary" data-control="popup" data-handler="onRelationManageAddPivot" data-dismiss="popup" data-stripe-load-indicator> <?= e($this->relationGetMessage('buttonAddMany')) ?> </button> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <a href="javascript:;" class="btn btn-link p-0" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCancelForm')) ?> </a> </span> <?php else: ?> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCloseForm')) ?> </button> <?php endif ?> </div> <?= Form::close() ?> </div> <script> setTimeout( function() { $('#relationManagePivotPopup input.form-control:first').focus() }, 310 ); </script> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_pivot_form.php ================================================ <div id="<?= $relationPivotWidget->getId('pivotPopup') ?>" data-popup-size="<?= $relationPopupSize ?? 950 ?>" > <?php if ($relationManageId || $relationPivotId): ?> <?= Form::ajax('onRelationManagePivotUpdate', [ 'data-popup-load-indicator' => true, 'data-request-success' => "oc.relationBehavior.changed('" . e($relationField) . "', 'updated')", ]) ?> <!-- Passable fields --> <input type="hidden" name="_relation_field" value="<?= $relationField ?>" /> <input type="hidden" name="_relation_extra_config" value="<?= e(json_encode($relationExtraConfig)) ?>" /> <?php if ($relationPivotId): ?> <input type="hidden" name="pivot_id" value="<?= $relationPivotId ?>" /> <?php endif ?> <div class="modal-header"> <h4 class="modal-title"><?= e($relationPivotTitle) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <?= $relationPivotWidget->render(['preview' => $relationReadOnly]) ?> </div> <div class="modal-footer"> <?php if ($relationReadOnly): ?> <button type="button" class="btn btn-secondary" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCloseForm')) ?> </button> <?php else: ?> <button type="submit" class="btn btn-primary"> <?= __("Update") ?> </button> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <a href="javascript:;" class="btn btn-link p-0" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCancelForm')) ?> </a> </span> <?php endif ?> </div> <?= Form::close() ?> <?php else: ?> <?= Form::ajax('onRelationManagePivotCreate', [ 'data-popup-load-indicator' => true, 'data-request-success' => "oc.relationBehavior.changed('" . e($relationField) . "', 'created')", ]) ?> <!-- Passable fields --> <input type="hidden" name="_relation_field" value="<?= $relationField ?>" /> <input type="hidden" name="_relation_extra_config" value="<?= e(json_encode($relationExtraConfig)) ?>" /> <?php foreach ((array) $foreignId as $fid): ?> <input type="hidden" name="foreign_id[]" value="<?= $fid ?>" /> <?php endforeach ?> <div class="modal-header"> <h4 class="modal-title"><?= e($relationPivotTitle) ?></h4> <button type="button" class="btn-close" data-dismiss="popup"></button> </div> <div class="modal-body"> <?= $relationPivotWidget->render() ?> </div> <div class="modal-footer"> <button type="submit" class="btn btn-primary"> <?= e($this->relationGetMessage('buttonAddForm')) ?> </button> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <a href="javascript:;" class="btn btn-link p-0" data-dismiss="popup"> <?= e($this->relationGetMessage('buttonCancelForm')) ?> </a> </span> </div> <?= Form::close() ?> <?php endif ?> </div> <script> oc.popup.bindToPopups('#<?= $relationPivotWidget->getId("pivotPopup") ?>', { _relation_field: '<?= $relationField ?>' }); </script> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_toolbar.php ================================================ <div data-control="toolbar"> <?php foreach ($relationToolbarButtons as $button): ?> <?php if ($button == 'update'): ?> <?= $this->relationMakePartial('button_update', [ 'relationManageId' => $relationManageId ?: $relationViewModel->getKey() ]) ?> <?php else: ?> <?= $this->relationMakePartial('button_'.$button) ?> <?php endif ?> <?php endforeach ?> </div> ================================================ FILE: modules/backend/behaviors/relationcontroller/partials/_view.php ================================================ <?php if ($relationViewFilterWidget): ?> <?= $relationViewFilterWidget->render() ?> <?php endif ?> <?php if ($relationViewMode === 'single'): ?> <?= $relationViewFormWidget->render() ?> <?php else: ?> <?= $relationViewListWidget->render() ?> <?php endif ?> ================================================ FILE: modules/backend/behaviors/reordercontroller/assets/js/october.reorder.js ================================================ /* * Scripts for the Reorder controller behavior. * * The following functions are observed: * - Simple sorting: Post back the original sort orders and the new ordered identifiers. * - Nested sorting: Post back source and target nodes IDs and the move positioning. */ +function ($) { "use strict"; var ReorderBehavior = function() { this.sortMode = null this.simpleSortOrders = [] this.initSorting = function (mode) { this.sortMode = mode; if (mode == 'simple') { this.initSortingSimple(); } $('#reorderTreeList').on('move.oc.treelist', $.proxy(this.processReorder, this)); } this.processReorder = function(ev, sortData){ var postData if (this.sortMode == 'simple') { postData = { sort_orders: this.simpleSortOrders } } else if (this.sortMode == 'nested') { postData = this.getNestedMoveData(sortData) } $('#reorderTreeList').request('onReorder', { data: postData }) } this.getNestedMoveData = function (sortData) { var $el, $item = sortData.item, moveData = { targetNode: 0, sourceNode: $item.data('recordId'), position: 'root' } if (($el = $item.next()) && $el.length) { moveData.position = 'before' } else if (($el = $item.prev()) && $el.length) { moveData.position = 'after' } else if (($el = $item.parents('li:first')) && $el.length) { moveData.position = 'child' } if ($el.length) { moveData.targetNode = $el.data('recordId') } return moveData } this.initSortingSimple = function () { var sortOrders = []; $('#reorderTreeList li').each(function(){ sortOrders.push($(this).data('recordSortOrder')); }); this.simpleSortOrders = sortOrders; } } $.oc.reorderBehavior = new ReorderBehavior; }(window.jQuery); ================================================ FILE: modules/backend/behaviors/reordercontroller/partials/_container.htm ================================================ <?php if ($reorderToolbarWidget): ?> <!-- Reorder Toolbar --> <div id="<?= $this->getId('reorderToolbar') ?>" class="reorder-toolbar"> <?= $reorderToolbarWidget->render() ?> </div> <?php endif ?> <!-- Reorder List --> <?= Form::open() ?> <div id="reorderTreeList" class="control-treelist" data-control="treelist" <?= $reorderShowTree ? '' : 'data-nested="0"' ?> data-handle="<?= $reorderShowTree ? 'a.move' : '> li > .record > a.move' ?>" data-stripe-load-indicator> <?php if ($reorderRecords): ?> <ol id="reorderRecords"> <?= $this->reorderMakePartial('records', ['records' => $reorderRecords]) ?> </ol> <?php else: ?> <p><?= Lang::get('backend::lang.reorder.no_records') ?></p> <?php endif ?> </div> <?= Form::close() ?> <script> addEventListener('render', function() { $.oc.reorderBehavior.initSorting('<?= $reorderSortMode ?>'); }); </script> ================================================ FILE: modules/backend/behaviors/reordercontroller/partials/_records.htm ================================================ <?php foreach ($records as $record): ?> <li data-record-id="<?= $record->getKey() ?>" <?php if ($reorderSortMode === 'simple'): ?> data-record-sort-order="<?= $record->{$record->getSortOrderColumn()} ?>" <?php endif ?> > <div class="record"> <a href="javascript:;" class="move"></a> <span><?= e($this->reorderGetRecordName($record)) ?></span> <input name="record_ids[]" type="hidden" value="<?= $record->getKey() ?>" /> </div> <?php if ($reorderShowTree): ?> <ol> <?php if ($record->children): ?> <?= $this->reorderMakePartial('records', ['records' => $record->children]) ?> <?php endif ?> </ol> <?php endif ?> </li> <?php endforeach ?> ================================================ FILE: modules/backend/classes/AuthManager.php ================================================ <?php namespace Backend\Classes; use October\Rain\Auth\Manager as RainAuthManager; /** * AuthManager is backend authentication manager. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class AuthManager extends RainAuthManager { /** * {@inheritdoc} */ protected static $instance; /** * {@inheritdoc} */ protected $sessionKey = 'admin_auth'; /** * {@inheritdoc} */ protected $userModel = \Backend\Models\User::class; /** * @var string roleModel class */ protected $roleModel = \Backend\Models\UserRole::class; /** * {@inheritdoc} */ protected $groupModel = \Backend\Models\UserGroup::class; /** * {@inheritdoc} */ protected $throttleModel = \Backend\Models\UserThrottle::class; /** * {@inheritdoc} */ protected $requireActivation = false; /** * userHasAccess is identical to User::hasAccess */ public function userHasAccess($permissions, $all = true) { if ($user = $this->getUser()) { return $user->hasAccess($permissions, $all); } return false; } /** * userHasAccess is identical to User::hasPermission */ public function userHasPermission($permissions, $all = true) { if ($user = $this->getUser()) { return $user->hasPermission($permissions, $all); } return false; } /** * {@inheritdoc} */ protected function createUserModelQuery() { return parent::createUserModelQuery()->withTrashed(); } /** * {@inheritdoc} */ protected function validateUserModel($user) { if (!$user instanceof $this->userModel) { return false; } if ($user->deleted_at !== null) { return false; } return $user; } } ================================================ FILE: modules/backend/classes/BackendController.php ================================================ <?php namespace Backend\Classes; use App; use Site; use File; use View; use System; use Request; use Response; use Illuminate\Routing\Controller as ControllerBase; use October\Rain\Router\Helper as RouterHelper; use System\Classes\PluginManager; use Closure; /** * BackendController is the master controller for all back-end pages. * All requests that are prefixed with the backend URI pattern are sent here, * then the next URI segments are analyzed and the request is routed to the * relevant back-end controller. * * For example, a request with the URL `/backend/acme/blog/posts` will look * for the `Posts` controller inside the `Acme.Blog` plugin. * * @see Backend\Classes\Controller Base class for back-end controllers * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class BackendController extends ControllerBase { use \October\Rain\Extension\ExtendableTrait; /** * @var array Behaviors implemented by this controller. */ public $implement; /** * @var string Allows early access to page action. */ public static $action; /** * @var array Allows early access to page parameters. */ public static $params; /** * __construct a new BackendController instance */ public function __construct() { $this->extendableConstruct(); } /** * extend this object properties upon construction */ public static function extend(Closure $callback) { self::extendableExtendCallback($callback); } /** * run finds and serves the requested backend controller * If the controller cannot be found, returns the Cms page with the URL /404. * If the /404 page doesn't exist, returns the system 404 page. * @param string $url Specifies the requested page URL. * If the parameter is omitted, the current URL used. * @return string Returns the processed page content. */ public function run($url = null) { $params = RouterHelper::segmentizeUrl($url); // Database check if (!App::hasDatabase()) { return System::checkDebugMode() ? Response::make(View::make('backend::no_database'), 200) : $this->runPageNotFound(); } // Locate edit site $this->findEditSite(); // Look for App or Module controller $module = $params[0] ?? 'backend'; $controller = $params[1] ?? 'index'; $isApp = strtolower($module) === 'app'; $controllerClass = "{$module}\\Controllers\\{$controller}"; $controllerBase = $isApp ? base_path() : base_path('modules'); // Store the current context self::$action = $params[2] ?? 'index'; self::$params = array_slice($params, 3); if ($controllerObj = $this->findController( $controllerClass, self::$action, $controllerBase )) { if (!$isApp && !System::hasModule(ucfirst($module))) { return Response::make(View::make('backend::404'), 404); } return $controllerObj->run(self::$action, self::$params); } // Look for Plugin controller using hint segment $hint = $params[0] ?? null; $namespace = PluginManager::instance()->getPluginHints()[$hint] ?? null; if ($namespace && str_contains($namespace, '.')) { [$author, $plugin] = explode('.', strtolower($namespace)); $controller = $params[1] ?? 'index'; $controllerClass = "{$author}\\{$plugin}\Controllers\\{$controller}"; // Store the current context self::$action = $params[2] ?? 'index'; self::$params = array_slice($params, 3); if ($controllerObj = $this->findController( $controllerClass, self::$action, plugins_path() )) { return $controllerObj->run(self::$action, self::$params); } } // Look for a Plugin controller if (count($params) >= 2) { [$author, $plugin] = $params; $controller = $params[2] ?? 'index'; $controllerClass = "{$author}\\{$plugin}\Controllers\\{$controller}"; // Store the current context self::$action = $params[3] ?? 'index'; self::$params = array_slice($params, 4); if ($controllerObj = $this->findController( $controllerClass, self::$action, plugins_path() )) { if (PluginManager::instance()->isDisabled(ucfirst($author).'.'.ucfirst($plugin))) { return Response::make(View::make('backend::404'), 404); } return $controllerObj->run(self::$action, self::$params); } } // Fall back to CMS controller return $this->runPageNotFound(); } /** * findEditSite locates the edit site based on the current request */ protected function findEditSite() { if (!Site::hasAnyEditSite()) { return; } if ($id = get('_site_id')) { Site::applyEditSiteId($id); } elseif ($id = Request::header('X_SITE_ID')) { Site::applyEditSiteId($id); } elseif ($site = Site::getEditSiteFromRequest()) { Site::applyEditSite($site); } } /** * runPageNotFound display a CMS 404 page, if one is available. For security reasons, * the backend 404 page is not used unless an admin session is found, this prevents * random discovery of the admin panel URL by crawlers or bots. */ protected function runPageNotFound() { if (System::hasModule('Cms') && !\BackendAuth::getUser()) { return \Cms::pageNotFound(); } return Response::make(View::make('backend::404'), 404); } /** * findController is used internally to find a backend controller with a * callable action method * @param string $controller Specifies a method name to execute. * @param string $action Specifies a method name to execute. * @param string $inPath Base path for class file location. * @return ControllerBase|false Returns the backend controller object */ protected function findController($controller, $action, $inPath) { // Workaround: Composer does not support case insensitivity. if (!class_exists($controller)) { $controllerFile = $inPath.'/'.strtolower(str_replace('\\', '/', $controller)) . '.php'; if ( strpos($controllerFile, '..') !== false || strpos($controllerFile, './') !== false || strpos($controllerFile, '//') !== false ) { return false; } if ($controllerFile = File::existsInsensitive($controllerFile)) { include_once $controllerFile; } } if (!class_exists($controller)) { return false; } $controllerObj = App::make($controller); // Parse the action now that the controller class is loaded self::$action = $this->parseAction($controllerObj, $action); if ($controllerObj->actionExists(self::$action)) { return $controllerObj; } return false; } /** * parseAction processes the action name, since dashes are not supported in PHP methods. * WildcardControllers keep the original action name since it is used as a parameter. */ protected function parseAction($controller, string $actionName): string { if ($controller instanceof WildcardController) { return $actionName; } if (strpos($actionName, '-') === false) { return $actionName; } return snake_case(camel_case($actionName)); } } ================================================ FILE: modules/backend/classes/Controller.php ================================================ <?php namespace Backend\Classes; use Site; use Lang; use View; use Flash; use Config; use System; use Request; use Backend; use Redirect; use Response; use BackendAuth; use Backend\Models\UserPreference; use Backend\Models\Preference as BackendPreference; use October\Rain\Exception\SystemException; use October\Rain\Exception\ValidationException; use October\Rain\Exception\ApplicationException; use October\Rain\Extension\Extendable; use Illuminate\Database\Eloquent\MassAssignmentException; use Larajax\Exceptions\ComponentNotFound; use Larajax\Exceptions\HandlerNameInvalid; use Larajax\Exceptions\HandlerNotFound; use Larajax\Contracts\AjaxControllerInterface; use ForbiddenException; use Throwable; /** * Controller is a backend base controller class used by all Backend controllers * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Controller extends Extendable implements AjaxControllerInterface { use \System\Traits\ViewMaker; use \System\Traits\AssetMaker; use \System\Traits\ConfigMaker; use \System\Traits\EventEmitter; use \System\Traits\ResponseMaker; use \System\Traits\DependencyMaker; use \System\Traits\SecurityController; use \Backend\Traits\VueMaker; use \Backend\Traits\ErrorMaker; use \Backend\Traits\WidgetMaker; use \Larajax\Traits\AjaxController; /** * @var object user reference to administrator. */ protected $user; /** * @var \Larajax\Classes\ComponentContainer widget is a collection of WidgetBase classes used on this page. */ public $widget; /** * @var bool suppressView prevents the automatic view display. */ public $suppressView = false; /** * @var array params used by the router. */ protected $params; /** * @var string action being called in the page */ protected $action; /** * @var string actionView to render, defaults to action name */ protected $actionView; /** * @var array publicActions available without authentication. */ protected $publicActions = []; /** * @var array requiredPermissions to view this page. */ protected $requiredPermissions = []; /** * @var string pageTitle */ public $pageTitle; /** * @var mixed pageSize defines the maximum page size */ public $pageSize; /** * @var string pageTitleTemplate */ public $pageTitleTemplate; /** * @var string bodyClass property used for customizing the layout on a controller basis. */ public $bodyClass; /** * @var mixed turboRouter for the AJAX framework. Supported values: * - true: enables turbo (outputs visit-control=enable) * - false: disables turbo (no turbo meta tags) * - string: shorthand for visit-control value, e.g. 'reload', 'disable' * - array: each key maps to a turbo-{key} meta tag, e.g. ['visit-control' => 'reload'] */ public $turboRouter; /** * @deprecated use $turboRouter instead */ public $turboVisitControl; /** * @var array hiddenActions are methods that cannot be called as actions. */ public $hiddenActions = [ 'run' ]; /** * @var array guarded methods that cannot be called as actions. */ protected $guarded = []; /** * __construct the controller. */ public function __construct() { if (!is_array($this->implement)) { $this->implement = []; } // Establish component container $this->widget = $this->componentContainer = new \Larajax\Classes\ComponentContainer($this); // Allow early access to route data. $this->action = BackendController::$action; $this->params = BackendController::$params; // Apply $guarded methods to hidden actions $this->hiddenActions = array_merge($this->hiddenActions, $this->guarded); // Define layout and view paths $this->layout = $this->layout ?: 'default'; $this->layoutPath = Skin::getActive()->getLayoutPaths(); $this->viewPath = $this->configPath = $this->guessViewPath(); // Add layout paths from the plugin / module context $relativePath = dirname(dirname(strtolower(str_replace('\\', '/', get_called_class())))); $this->layoutPath[] = "~/modules/{$relativePath}/layouts"; $this->layoutPath[] = "~/plugins/{$relativePath}/layouts"; // Enable turbo router if (Config::get('backend.turbo_router', false)) { $this->turboRouter ??= true; } // Create a new instance of the admin user $this->user = BackendAuth::getUser(); // Site switcher if ($this->user && Site::hasAnyEditSite()) { (new \Backend\Widgets\SiteSwitcher($this))->bindToController(); } // Impersonate backend role if ($this->user && BackendAuth::isRoleImpersonator()) { (new \Backend\Widgets\RoleImpersonator($this))->bindToController(); } // Boot behavior constructors parent::__construct(); } /** * beforeDisplay is a method to override in your controller as a way to execute logic before * each action executes. It is preferred over placing logic in the constructor */ public function beforeDisplay() { } /** * run executes the controller action * @param string $action The action name. * @param array $params Routing parameters to pass to the action. * @return mixed The action result. */ public function run($action = null, $params = []) { $this->action = $action; $this->params = $params; // Check security token. // @see \System\Traits\SecurityController if (!$this->verifyCsrfToken()) { return Request::ajax() ? ajax()->error(Lang::get('system::lang.page.invalid_token.label'), 403)->reload() : Backend::redirectGuest('backend/auth'); } // Check forced HTTPS protocol. // @see \System\Traits\SecurityController if (!$this->verifyForceSecure()) { return Redirect::secure(Request::path()); } // Check that user is logged in and has permission to view this page if (!$this->isPublicAction($action)) { // Not logged in, redirect to login screen or show ajax error. if (!BackendAuth::check()) { return Request::ajax() ? ajax()->error(Lang::get('backend::lang.page.access_denied.label'), 403) : Backend::redirectGuest('backend/auth'); } // Check general permission to backend if (!BackendAuth::userHasAccess('general.backend')) { throw new ForbiddenException; } // Check access groups against the page definition if ($this->requiredPermissions && !$this->user->hasAnyAccess($this->requiredPermissions)) { throw new ForbiddenException; } if (System::hasModule('Cms') && \Cms\Models\MaintenanceSetting::isEnabledForBackend()) { return View::make('backend::in_maintenance'); } if ($this->user->hasPasswordExpired() && !$this instanceof \Backend\Controllers\AuthGates) { return Backend::redirect('backend/authgates/expired'); } } // Logic hook for all actions if ($hook = $this->beforeDisplay()) { return $hook; } /** * @event backend.page.beforeDisplay * Provides an opportunity to override backend page content * * Example usage: * * Event::listen('backend.page.beforeDisplay', function ((\Backend\Classes\Controller) $backendController, (string) $action, (array) $params) { * traceLog('redirect all backend pages to google'); * return Redirect::to('https://google.com'); * }); * * Or * * $backendController->bindEvent('page.beforeDisplay', function ((string) $action, (array) $params) { * traceLog('redirect all backend pages to google'); * return Redirect::to('https://google.com'); * }); * */ if ($event = $this->fireSystemEvent('backend.page.beforeDisplay', [$action, $params])) { return $event; } // Register Vue components used on every page $this->registerVueComponent(\Backend\VueComponents\Modal::class); // Set the admin preference locale BackendPreference::setAppLocale(); BackendPreference::setAppFallbackLocale(); // Execute page action or AJAX event if ($ajaxResponse = $this->execAjaxHandlers()) { $result = $ajaxResponse; } else { $result = $this->execPageAction($action, $params); } // Prepare and return response // @see \System\Traits\ResponseMaker return $this->makeResponse($result); } /** * actionExists is used internally to determines whether an action with the specified name exists. * * - Action must be a class public method. * - Action name can not be prefixed with the underscore character. * - Action name must be lowercase. * - Action must not appear in hiddenActions. * * @param string $name Specifies the action name. * @param bool $internal Allow protected actions. * @return bool */ public function actionExists($name, $internal = false) { // Must have length, not start with underscore and actually exist if (!strlen($name) || substr($name, 0, 1) === '_' || !$this->methodExists($name)) { return false; } // Only allow lowercase actions if (strtolower($name) !== $name) { return false; } // Checks hidden actions foreach ($this->hiddenActions as $method) { if (strtolower($name) === strtolower($method)) { return false; } } // Internal method check $ownMethod = method_exists($this, $name); if ($ownMethod) { $methodInfo = new \ReflectionMethod($this, $name); $public = $methodInfo->isPublic(); if ($public) { return true; } } if ($internal && (($ownMethod && $methodInfo->isProtected()) || !$ownMethod)) { return true; } if (!$ownMethod) { return true; } return false; } /** * actionUrl returns a URL for this controller and supplied action. */ public function actionUrl($action = null, $path = null) { if ($action === null) { $action = $this->action; } $class = get_called_class(); $uriPath = dirname(dirname(strtolower(str_replace('\\', '/', $class)))); $controllerName = strtolower(class_basename($class)); $url = $uriPath.'/'.$controllerName.'/'.$action; if ($path) { $url .= '/'.$path; } return Backend::url($url); } /** * pageAction invokes the current controller action without rendering a view. */ public function pageAction() { if (!$this->action) { return; } $this->suppressView = true; $this->execPageAction($this->action, $this->params); } /** * This method is used internally. * Invokes the controller action and loads the corresponding view. * @param string $actionName Specifies a action name to execute. * @param array $parameters A list of the action parameters. */ protected function execPageAction($actionName, $parameters) { $result = null; if (!$this->actionExists($actionName)) { if (System::checkDebugMode()) { throw new SystemException(sprintf( "Action %s is not found in the controller %s", $actionName, get_class($this) )); } else { Response::make(View::make('backend::404'), 404); } } // Execute the action $result = $this->makeCallMethod($this, $actionName, $parameters); // Expecting \Response and \RedirectResponse if ($result instanceof \Symfony\Component\HttpFoundation\Response) { return $result; } // No page title if (!$this->pageTitle) { $this->pageTitle = Lang::get('backend::lang.page.untitled'); } // Load the view if (!$this->suppressView && $result === null) { return $this->makeView($this->actionView ?: $actionName); } return $this->makeViewContent($result); } /** * onAjax generic handler */ public function onAjax() { } /** * getAjaxHandler returns the AJAX handler for the current request, if available. * @return string */ public function getAjaxHandler() { $request = $this->getAjaxRequest(); if ($request->hasAjaxHandler()) { return $request->qualifiedHandler; } return null; } /** * makePartialForAjax proxies to makePartial * @see \Larajax\Traits\AjaxController */ protected function makePartialForAjax($partial) { if (!preg_match('/^(?!.*\/\/)[a-z0-9\_][a-z0-9\_\-\/]*$/i', $partial)) { throw new ApplicationException(Lang::get('backend::lang.partial.invalid_name', ['name'=>e($partial)])); } return $this->makePartial($partial); } /** * makeCallForAjax proxies to makeCallMethod * @see \Larajax\Traits\AjaxController */ protected function makeCallForAjax($callable, $parameters) { [$instance, $method] = $callable; if ($instance instanceof \Backend\Classes\WidgetBase) { $this->addViewPath($instance->getViewPaths()); $result = $this->makeCallMethod($instance, $method, $parameters); $this->vars = $instance->vars + $this->vars; return $result; } return $this->makeCallMethod($instance, $method, $parameters); } /** * execAjaxHandlers is used internally and invokes a controller event handler and * loads the supplied partials. */ protected function execAjaxHandlers() { $handler = $this->getAjaxHandler(); if (!$handler) { return null; } try { try { // Execute the page action so behaviors and widgets are initialized $this->pageAction(); if ($this->fatalError) { throw new ApplicationException($this->fatalError); } /** * @event backend.ajax.beforeRunHandler * Provides an opportunity to modify an AJAX request * * The parameter provided is `$handler` (the requested AJAX handler to be run) * * Example usage (forwards AJAX handlers to a backend widget): * * Event::listen('backend.ajax.beforeRunHandler', function ((\Backend\Classes\Controller) $controller, (string) $handler) { * if (strpos($handler, '::')) { * [$componentAlias, $handlerName] = explode('::', $handler); * if ($componentAlias === $this->getBackendWidgetAlias()) { * return $this->backendControllerProxy->runAjaxHandler($handler); * } * } * }); * * Or * * $this->controller->bindEvent('ajax.beforeRunHandler', function ((string) $handler) { * if (strpos($handler, '::')) { * [$componentAlias, $handlerName] = explode('::', $handler); * if ($componentAlias === $this->getBackendWidgetAlias()) { * return $this->backendControllerProxy->runAjaxHandler($handler); * } * } * }); * */ if ($event = $this->fireSystemEvent('backend.ajax.beforeRunHandler', [$handler])) { $response = ajax()::wrap($event); } else { $response = $this->callAjaxAction($this->action, $this->params); } } catch (ComponentNotFound $ex) { throw new ApplicationException(Lang::get('backend::lang.widget.not_bound', ['name'=>$this->getAjaxRequest()->component])); } catch (HandlerNameInvalid $ex) { throw new ApplicationException(Lang::get('backend::lang.ajax_handler.invalid_name', ['name'=>$handler])); } catch (HandlerNotFound $ex) { throw new ApplicationException(Lang::get('backend::lang.ajax_handler.not_found', ['name'=>e($handler)])); } catch (MassAssignmentException $ex) { throw new ApplicationException(Lang::get('backend::lang.model.mass_assignment_failed', ['attribute' => $ex->getMessage()])); } } catch (ValidationException $ex) { Flash::error($ex->getMessage()); $response = ajax()->invalidFields($ex->errors()); } catch (Throwable $ex) { $response = ajax()->exception($ex); } if ($this->hasAssetsDefined()) { foreach ($this->getAssetPathsWithAttributes() as $type => $paths) { $response->asset($type, $paths); } } $response = $this->outputVueComponentsForAjax($response); if (!$response->isRedirect() && Flash::check()) { $response->update([ '#layout-flash-messages' => $this->makeLayoutPartial('flash_messages') ]); } return $response; } // // Getters // /** * getParams returns the action parameters */ public function getParams() { return $this->params; } /** * getAction returns the action name */ public function getAction() { return $this->action; } /** * getPublicActions returns the controllers public actions */ public function getPublicActions() { return $this->publicActions; } /** * isPublicAction returns true if the current action is public */ public function isPublicAction(?string $action): bool { if (!$action) { return false; } return in_array($action, $this->publicActions); } /** * getId returns a unique ID for the controller and route. Useful in creating HTML markup. */ public function getId($suffix = null) { $id = class_basename(get_called_class()) . '-' . $this->action; if ($suffix !== null) { $id .= '-' . $suffix; } return $id; } // // Hints // /** * makeHintPartial renders a hint partial, used for displaying informative information that * can be hidden by the user. If you don't want to render a partial, you can * supply content via the 'content' key of $params. * @param string $name Unique key name * @param string $partial Reference to content (partial name) * @param array $params Extra parameters * @return string */ public function makeHintPartial($name, $partial = null, $params = []) { if (is_array($partial)) { $params = $partial; $partial = null; } if (!$partial) { $partial = array_get($params, 'partial', $name); } return $this->makeLayoutPartial('hint', [ 'hintName' => $name, 'hintPartial' => $partial, 'hintContent' => array_get($params, 'content'), 'hintParams' => $params ] + $params); } /** * onHideBackendHint ajax handler to hide a backend hint, once hidden the partial * will no longer display for the user. * @return void */ public function onHideBackendHint() { if (!$name = post('name')) { throw new ApplicationException('Missing a hint name.'); } $preferences = UserPreference::forUser(); $hiddenHints = $preferences->get('backend::hints.hidden', []); $hiddenHints[$name] = 1; $preferences->set('backend::hints.hidden', $hiddenHints); } /** * isBackendHintHidden checks if a hint has been hidden by the user. * @param string $name Unique key name * @return bool */ public function isBackendHintHidden($name) { $hiddenHints = UserPreference::forUser()->get('backend::hints.hidden', []); return array_key_exists($name, $hiddenHints); } // // Turbo // /** * getTurboMetaTags returns an array of turbo meta tag definitions * based on the $turboRouter property configuration. */ public function getTurboMetaTags(): array { $turboRouter = $this->turboRouter; // Fallback to deprecated property if ($turboRouter === null && $this->turboVisitControl !== null) { $turboRouter = $this->turboVisitControl === 'disable' ? false : ['visit-control' => $this->turboVisitControl]; } // Disabled if ($turboRouter === null || $turboRouter === false) { return []; } // Simple enable if ($turboRouter === true) { $turboRouter = ['visit-control' => 'enable']; } // String shorthand, e.g. 'reload' → ['visit-control' => 'reload'] if (is_string($turboRouter)) { $turboRouter = ['visit-control' => $turboRouter]; } // Default turbo-root if (!isset($turboRouter['root'])) { $turboRouter['root'] = \Backend::baseUrl(); } // Build meta tags $tags = []; foreach ($turboRouter as $key => $value) { $tags[] = ['name' => "turbo-{$key}", 'content' => $value]; } return $tags; } } ================================================ FILE: modules/backend/classes/ControllerBehavior.php ================================================ <?php namespace Backend\Classes; use Lang; use ApplicationException; use October\Rain\Extension\ExtensionBase; use System\Traits\ViewMaker; /** * ControllerBehavior base class * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class ControllerBehavior extends ExtensionBase { use \Backend\Traits\WidgetMaker; use \Backend\Traits\SessionMaker; use \System\Traits\AssetMaker; use \System\Traits\ConfigMaker; use \System\Traits\ViewMaker { ViewMaker::makeFileContents as localMakeFileContents; } /** * @var object config supplied. */ protected $config; /** * @var \Backend\Classes\Controller controller reference. */ protected $controller; /** * @var array requiredProperties that must exist in the controller using this behavior. */ protected $requiredProperties = []; /** * @var array actions visible in context of the controller. Only takes effect if it is an array */ protected $actions; /** * __construct the behavior */ public function __construct($controller) { $this->controller = $controller; $this->viewPath = $this->configPath = $this->guessViewPath('/partials'); $this->assetPath = $this->guessViewPath('/assets', true); // Validate controller properties foreach ($this->requiredProperties as $property) { if (!isset($controller->{$property})) { throw new ApplicationException(Lang::get('system::lang.behavior.missing_property', [ 'class' => get_class($controller), 'property' => $property, 'behavior' => get_called_class() ])); } } // Hide all methods that aren't explicitly listed as actions if (is_array($this->actions)) { $this->hideAction(array_diff(get_class_methods(get_class($this)), $this->actions)); } // Constructor logic that is protected by authentication $controller->bindEvent('page.beforeDisplay', function() { $this->beforeDisplay(); }); } /** * beforeDisplay fires before the page is displayed and AJAX is executed. */ public function beforeDisplay() { } /** * setConfig sets the configuration values * @param mixed $config Config object or array * @param array $required Required config items */ public function setConfig($config, $required = []) { $this->config = $this->makeConfig($config, $required); } /** * getConfig is a safe accessor for configuration values * @param string $name Config name, supports array names like "field[key]" * @param mixed $default Default value if nothing is found * @return string */ public function getConfig($name = null, $default = null) { if (!$this->config) { return $default; } return $this->getConfigValueFrom($this->config, $name, $default); } /** * hideAction protects a public method from being available as an controller action. * These methods could be defined in a controller to override a behavior default action. * Such methods should be defined as public, to allow the behavior object to access it. * By default public methods of a controller are considered as actions. * To prevent this occurrence, methods should be hidden by using this method. * @param mixed $methodName Specifies a method name. */ protected function hideAction($methodName) { if (!is_array($methodName)) { $methodName = [$methodName]; } $this->controller->hiddenActions = array_merge($this->controller->hiddenActions, $methodName); } /** * makeFileContents makes all views in context of the controller, not the behavior. * @param string $filePath Absolute path to the view file. * @param array $extraParams Parameters that should be available to the view. * @return string */ public function makeFileContents($filePath, $extraParams = []) { $this->controller->vars = array_merge($this->controller->vars, $this->vars); return $this->controller->makeFileContents($filePath, $extraParams); } /** * @deprecated */ protected function controllerMethodExists($methodName) { return method_exists($this->controller, $methodName); } } ================================================ FILE: modules/backend/classes/FilterScope.php ================================================ <?php namespace Backend\Classes; use Arr; use Lang; use October\Rain\Html\Helper as HtmlHelper; use October\Rain\Element\Filter\ScopeDefinition; use Illuminate\Support\Collection; use SystemException; /** * FilterScope is a translation of the filter scope configuration * * @method ScopeDefinition arrayName(string $arrayName) arrayName if the scope element names should be contained in an array. * @method ScopeDefinition idPrefix(string $prefix) idPrefix to the scope identifier so it can be totally unique. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class FilterScope extends ScopeDefinition { /** * getOptionsFromModel looks at the model for defined options. */ public function getOptionsFromModel($model, $scopeOptions) { // Method name if (is_string($scopeOptions)) { $scopeOptions = $this->getOptionsFromModelAsString($model, $scopeOptions); } // Cast collections to array if ($scopeOptions instanceof Collection) { $scopeOptions = $scopeOptions->all(); } // Always be an array if ($scopeOptions === null) { return $scopeOptions = []; } return $scopeOptions; } /** * getOptionsFromModelAsString where options are an explicit method reference */ protected function getOptionsFromModelAsString($model, string $methodName) { // Calling via ClassName::method if ( strpos($methodName, '::') !== false && ($staticMethod = explode('::', $methodName)) && count($staticMethod) === 2 && is_callable($staticMethod) ) { $scopeOptions = $staticMethod($model, $this); if (!is_array($scopeOptions)) { throw new SystemException(Lang::get('backend::lang.field.options_static_method_invalid_value', [ 'class' => $staticMethod[0], 'method' => $staticMethod[1] ])); } } // Calling via $model->method else { if (!$this->objectMethodExists($model, $methodName)) { throw new SystemException(Lang::get('backend::lang.filter.options_method_not_exists', [ 'model' => get_class($model), 'method' => $methodName, 'filter' => $this->fieldName ])); } $scopeOptions = $model->$methodName($this); } return $scopeOptions; } /** * applyScopeMethodToQuery */ public function applyScopeMethodToQuery($query, $methodName = null) { if (!$methodName) { $methodName = $this->modelScope; } // Calling via ClassName::method if ( is_string($methodName) && strpos($methodName, '::') !== false && ($staticMethod = explode('::', $methodName)) && count($staticMethod) === 2 && is_callable($staticMethod) ) { $methodName = $staticMethod; } // Calling via query builder if (is_string($methodName)) { $query->$methodName($this); } // Calling via callable else { $methodName($query, $this); } } /** * getName returns a value suitable for the scope name property. * @param string $arrayName * @return string */ public function getName($arrayName = null) { if ($arrayName === null) { $arrayName = $this->arrayName; } if ($arrayName) { return $arrayName.'['.implode('][', HtmlHelper::nameToArray($this->scopeName)).']'; } return $this->scopeName; } /** * getId returns a value suitable for the scope id property. */ public function getId($suffix = null) { $id = 'scope'; $id .= '-'.$this->scopeName; if ($suffix) { $id .= '-'.$suffix; } if ($this->idPrefix) { $id = $this->idPrefix . '-' . $id; } return HtmlHelper::nameToId($id); } /** * getDefaultScopeValue returns a fully qualified scope default value */ public function getDefaultScopeValue() { $defaults = $this->defaults; if ($defaults === null) { return null; } // Basic value if (is_scalar($defaults)) { return ['value' => $defaults]; } // Invalid value if (!is_array($defaults)) { return null; } // Numerical array if (Arr::isList($defaults)) { return ['value' => $defaults]; } // Associative array return $defaults; } /** * objectMethodExists is an internal helper for method existence checks. * @param object $object * @param string $method */ protected function objectMethodExists($object, $method): bool { if (method_exists($object, 'methodExists')) { return $object->methodExists($method); } return method_exists($object, $method); } } ================================================ FILE: modules/backend/classes/FilterWidgetBase.php ================================================ <?php namespace Backend\Classes; use Backend\Classes\FilterScope; /** * FilterWidgetBase class contains widgets used specifically for filters * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ abstract class FilterWidgetBase extends WidgetBase { /** * @var \October\Rain\Database\Model|null model is the related model object for the filter. */ public $model; /** * @var bool isJsonable determines if the filtered column is stored as JSON in the database. */ public $isJsonable; /** * @var FilterScope filterScope object containing general filter scope information. */ protected $filterScope; /** * @var string scopeName contains the raw scope name */ protected $scopeName; /** * @var string valueFrom contains the attribute value source */ protected $valueFrom; /** * @var Backend\Widgets\Filter parentFilter that contains this scope */ protected $parentFilter = null; /** * __construct * @param Controller $controller * @param FilterScope $filterScope * @param array $configuration */ public function __construct($controller, $filterScope, $configuration = []) { $this->filterScope = $filterScope; $this->scopeName = $filterScope->scopeName; $this->valueFrom = $filterScope->valueFrom ?: $this->scopeName; $this->config = $this->makeConfig($configuration); $this->fillFromConfig([ 'model', 'isJsonable', 'parentFilter', ]); parent::__construct($controller, $configuration); } /** * getParentFilter retrieves the parent form for this formwidget * @return Backend\Widgets\Filter|null */ public function getParentFilter() { return $this->parentFilter; } /** * renderForm the form to use for filtering */ public function renderForm() { } /** * getScopeName returns the HTML element field name for this widget, used for * capturing user input, passed back to the getSaveValue method when saving. * @return string */ public function getScopeName() { return $this->filterScope->getName(); } /** * getLoadValue returns the value for this form field, * supports nesting via HTML array. * @return string */ public function getLoadValue() { return $this->filterScope->scopeValue; } /** * getHeaderValue looks up the scope header */ public function getHeaderValue() { return $this->getParentFilter()->getHeaderValue($this->filterScope); } /** * getActiveValue */ public function getActiveValue() { if (post('clearScope')) { return null; } return post($this->getScopeName(), post("Filter")); } /** * getFilterScope */ public function getFilterScope() { return $this->filterScope; } /** * applyScopeToQuery */ public function applyScopeToQuery($query) { } /** * hasPostValue */ protected function hasPostValue($name): bool { $value = post( $this->getScopeName() . "[{$name}]", post("Filter[{$name}]") ); return strlen(trim((string) $value)) > 0; } } ================================================ FILE: modules/backend/classes/FormField.php ================================================ <?php namespace Backend\Classes; use Str; use Arr; use Site; use Html; use Lang; use October\Rain\Database\Model; use October\Rain\Html\Helper as HtmlHelper; use October\Rain\Element\Form\FieldDefinition; use Illuminate\Support\Collection; use SystemException; use Exception; /** * FormField definition is a translation of the form field configuration * * @method FormField arrayName(string $arrayName) arrayName if the field element names should be contained in an array. * @method FormField idPrefix(string $idPrefix) idPrefix to the field identifier so it can be totally unique. * @method FormField context(string $context) Specifies contextual visibility of this form field. * @method FormField required(bool $required) Specifies if this field is mandatory. * @method FormField translatable(bool $translatable) Specifies if this field supports translated values. * @method FormField stretch(bool $stretch) Specifies if this field stretch to fit the page height. * @method FormField attributes(array $attributes) Contains a list of attributes specified in the field configuration. * @method FormField containerAttributes(array $containerAttributes) Contains a list of attributes for the field container. * @method FormField cssClass(string $cssClass) Specifies a CSS class to attach to the field container. * @method FormField path(string $path) Specifies a path for partial-type fields. * @method FormField dependsOn(array $dependsOn) Other field names this field depends on, when the other fields are modified, this field will update. * @method FormField changeHandler(string $changeHandler) AJAX handler for the change event. * @method FormField trigger(array $trigger) Other field names this field can be triggered by, see the Trigger API documentation. * @method FormField preset(array $preset) Other field names text is converted in to a URL, slug or file name value in this field. * @method FormField permissions(array $permissions) permissions needed to view this field * @method FormField valueTrans(bool $valueTrans) valueTrans determines if display values (model attributes) should be translated * @method FormField tooltip(array|string $tooltip) tooltip to display next to the field label, as an array supports: title, placement, icon, isHtml * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class FormField extends FieldDefinition { /** * @var int Value returned when the form field should not contribute any save data. */ const NO_SAVE_DATA = -1; /** * @var string A special character in yaml config files to indicate a field higher in hierarchy */ const HIERARCHY_UP = '^'; /** * @var string Field contexts */ const CONTEXT_CREATE = 'create'; const CONTEXT_UPDATE = 'update'; const CONTEXT_PREVIEW = 'preview'; const CONTEXT_REFRESH = 'refresh'; /** * __construct using old and new interface */ public function __construct($config = [], $label = null) { // @deprecated old API if (!is_array($config)) { return parent::__construct([ 'fieldName' => $config, 'label' => $label ]); } parent::__construct($config); } /** * initDefaultValues for this field */ protected function initDefaultValues() { parent::initDefaultValues(); $this ->valueTrans(true) ->attributes([]) ; } /** * isSelected determines if the provided value matches this field's value. * @param string $value * @return bool */ public function isSelected($value = true) { if ($this->value === null) { return false; } return (string) $value === (string) $this->value; } /** * hasAttribute checks if the field has the supplied [unfiltered] attribute. * @param string $name * @param string $position * @return bool */ public function hasAttribute($name, $position = 'field') { $posKey = $position === 'container' ? 'containerAttributes' : 'attributes'; if (!isset($this->config[$posKey])) { return false; } return array_key_exists($name, $this->config[$posKey]); } /** * getAttributes returns the attributes for this field at a given position. * @param string $position * @return array */ public function getAttributes($position = 'field', $htmlBuild = true) { $posKey = $position === 'container' ? 'containerAttributes' : 'attributes'; $result = $this->config[$posKey] ?? []; $result = $this->filterAttributes($result, $position); return $htmlBuild ? Html::attributes($result) : $result; } /** * filterAttributes adds any circumstantial attributes to the field based on other * settings, such as the 'disabled' option. * @param array $attributes * @param string $position * @return array */ protected function filterAttributes($attributes, $position = 'field') { $position = strtolower($position); $attributes = $this->filterTriggerAttributes($attributes, $position); $attributes = $this->filterPresetAttributes($attributes, $position); if ($position === 'field' && $this->disabled) { $attributes = $attributes + ['disabled' => 'disabled']; } if ($position === 'field' && $this->autoFocus) { $attributes = $attributes + ['autofocus' => 'autofocus']; } if ($position === 'field' && $this->readOnly) { $attributes = $attributes + ['readonly' => 'readonly']; if ($this->type === 'checkbox' || $this->type === 'switch') { $attributes = $attributes + ['onclick' => 'return false;']; } } return $attributes; } /** * filterTriggerAttributes adds attributes used specifically by the Trigger API * @param array $attributes * @param string $position * @return array */ protected function filterTriggerAttributes($attributes, $position = 'field') { if (!$this->trigger || !is_array($this->trigger)) { return $attributes; } $triggerAction = array_get($this->trigger, 'action'); $triggerField = array_get($this->trigger, 'field'); $triggerCondition = array_get($this->trigger, 'condition'); $triggerForm = $this->arrayName; $triggerMulti = ''; // Apply these to container if (in_array($triggerAction, ['hide', 'show']) && $position !== 'container') { return $attributes; } // Apply these to field/input if (in_array($triggerAction, ['enable', 'disable', 'empty']) && $position !== 'field') { return $attributes; } // Reduce the field reference for the trigger condition field $triggerFieldParentLevel = Str::getPrecedingSymbols($triggerField, self::HIERARCHY_UP); if ($triggerFieldParentLevel > 0) { // Remove the preceding symbols from the trigger field name $triggerField = substr($triggerField, $triggerFieldParentLevel); $triggerForm = HtmlHelper::reduceNameHierarchy($triggerForm, $triggerFieldParentLevel); } // Preserve multi field types if (Str::endsWith($triggerField, '[]')) { $triggerField = substr($triggerField, 0, -2); $triggerMulti = '[]'; } // Final compilation if ($this->arrayName) { $fullTriggerField = $triggerForm.'['.implode('][', HtmlHelper::nameToArray($triggerField)).']'.$triggerMulti; } else { $fullTriggerField = $triggerField.$triggerMulti; } $newAttributes = [ 'data-trigger' => '[name="'.$fullTriggerField.'"]', 'data-trigger-action' => $triggerAction, 'data-trigger-condition' => $triggerCondition, 'data-trigger-closest-parent' => 'form, div[data-control="formwidget"]' ]; return $attributes + $newAttributes; } /** * filterPresetAttributes adds attributes used specifically by the Input Preset API * @param array $attributes * @param string $position * @return array */ protected function filterPresetAttributes($attributes, $position = 'field') { if (!$this->preset || $position !== 'field') { return $attributes; } if (!is_array($this->preset)) { $this->preset = ['field' => $this->preset, 'type' => 'slug']; } $presetField = array_get($this->preset, 'field'); $presetType = array_get($this->preset, 'type'); if ($this->arrayName) { $fullPresetField = $this->arrayName.'['.implode('][', HtmlHelper::nameToArray($presetField)).']'; } else { $fullPresetField = $presetField; } $newAttributes = [ 'data-input-preset' => '[name="'.$fullPresetField.'"]', 'data-input-preset-type' => $presetType, 'data-input-preset-closest-parent' => 'form' ]; if ($prefixInput = array_get($this->preset, 'prefixInput')) { $newAttributes['data-input-preset-prefix-input'] = $prefixInput; } return $attributes + $newAttributes; } /** * getName returns a value suitable for the field name property. The array name is taken * from the field or can be specified in the arguments. * @param string $arrayName * @return string */ public function getName($arrayName = null) { if ($arrayName === null) { $arrayName = $this->arrayName; } if ($arrayName) { return $arrayName.'['.implode('][', HtmlHelper::nameToArray($this->fieldName)).']'; } return $this->fieldName; } /** * getId returns a value suitable for the field id property. * @param string $suffix Specify a suffix string * @return string */ public function getId($suffix = null) { $id = 'field'; if ($this->arrayName) { $id .= '-'.$this->arrayName; } $id .= '-'.$this->fieldName; if ($suffix) { $id .= '-'.$suffix; } if ($this->idPrefix) { $id = $this->idPrefix . '-' . $id; } return HtmlHelper::nameToId($id); } /** * getDisplayValue checks to see if display values (model attributes) should be translated, * and also escapes the value */ public function getDisplayValue($value) { if ($this->valueTrans) { return e(__($value)); } return e($value); } /** * getTranslatableMessage */ public function getTranslatableMessage(): string { if ($editSite = Site::getEditSite()) { return e($editSite->name); } return ''; } /** * getCallableMethodFromValue checks for a string "Class::method" or as an * array [Class, method] usually from a YAML definition */ public function getCallableMethodFromValue($value): ?array { if ( is_string($value) && count($staticMethod = explode('::', $value)) === 2 && is_callable($value) ) { return $staticMethod; } if ( is_array($value) && count($value) === 2 && Arr::isList($value) ) { return $value; } return null; } /** * getValueFromData returns this fields value from a supplied data set, which can be * an array or a model or another generic collection. * @param mixed $data * @param mixed $default * @return mixed */ public function getValueFromData($data, $default = null) { $fieldName = $this->valueFrom ?: $this->fieldName; return $this->getFieldNameFromData($fieldName, $data, $default); } /** * getDefaultFromData returns the default value for this field, the supplied data is used * to source data when defaultFrom is specified. * @param mixed $data * @return mixed */ public function getDefaultFromData($data) { if ($this->defaultFrom) { return $this->getFieldNameFromData($this->defaultFrom, $data); } if ($this->defaults !== '') { return $this->defaults; } return null; } /** * resolveModelAttribute returns the final model and attribute name of a nested attribute. Eg: * * [$model, $attribute] = $this->resolveAttribute('person[phone]'); * * @param string $attribute * @return array */ public function resolveModelAttribute($model, $attribute = null) { return $this->resolveModelAttributeInternal($model, $attribute); } /** * nearestModelAttribute returns the nearest model and attribute name of a nested attribute, * which is useful for checking if an attribute is jsonable or a relation. */ public function nearestModelAttribute($model, $attribute = null) { return $this->resolveModelAttributeInternal($model, $attribute, [ 'nearMatch' => true, 'objectOnly' => true ]); } /** * resolveModelAttributeInternal is an internal method resolver for resolveModelAttribute */ protected function resolveModelAttributeInternal($model, $attribute = null, $options = []) { extract(array_merge([ 'objectOnly' => false, 'nearMatch' => false ], $options)); if ($attribute === null) { $attribute = $this->valueFrom ?: $this->fieldName; } $parts = is_array($attribute) ? $attribute : HtmlHelper::nameToArray($attribute); $last = array_pop($parts); foreach ($parts as $part) { if ($objectOnly && !is_object($model->{$part})) { if ($nearMatch) { return [$model, $part]; } continue; } $model = $model->{$part}; } return [$model, $last]; } /** * getFieldNameFromData is an internal method to extract the value of a field name * from a data set. * @param string $fieldName * @param mixed $data * @param mixed $default * @return mixed */ protected function getFieldNameFromData($fieldName, $data, $default = null) { // Array field name, eg: field[key][key2][key3] $keyParts = HtmlHelper::nameToArray($fieldName); $lastField = end($keyParts); $result = $data; // Loop the field key parts and build a value. // To support relations only the last field should return the // relation value, all others will look up the relation object as normal. foreach ($keyParts as $key) { if ($result instanceof Model && $result->hasRelation($key)) { if ($key === $lastField) { $result = $result->getRelationSimpleValue($key) ?: $default; } else { $result = $result->{$key}; } } elseif (is_array($result)) { if (!array_key_exists($key, $result)) { return $default; } $result = $result[$key]; } else { if (!isset($result->{$key})) { return $default; } $result = $result->{$key}; } } return $result; } /** * getOptionsFromModel looks at the model for defined options. */ public function getOptionsFromModel($model, $fieldOptions, $data) { // Preset if (is_string($fieldOptions) && str_starts_with($fieldOptions, 'preset:')) { $fieldOptions = \System\Classes\PresetManager::instance()->getPreset($fieldOptions); } // Method name elseif (is_string($fieldOptions)) { $fieldOptions = $this->getOptionsFromModelAsString($model, $fieldOptions, $data); } // Default collection elseif ($fieldOptions === null || $fieldOptions === true) { $fieldOptions = $this->getOptionsFromModelAsDefault($model, $data); } // Cast collections to array if ($fieldOptions instanceof Collection) { $fieldOptions = $fieldOptions->all(); } return $fieldOptions; } /** * getOptionsFromModelAsString where options are an explicit method reference */ protected function getOptionsFromModelAsString($model, string $methodName, $data) { // Calling via ClassName::method if ($callableMethod = $this->getCallableMethodFromValue($methodName)) { $fieldOptions = $callableMethod($model, $this); if (!is_array($fieldOptions)) { throw new SystemException(Lang::get('backend::lang.field.options_static_method_invalid_value', [ 'class' => $callableMethod[0], 'method' => $callableMethod[1] ])); } } // Calling via $model->method else { if (!$this->objectMethodExists($model, $methodName)) { throw new SystemException(Lang::get('backend::lang.field.options_method_not_exists', [ 'model' => get_class($model), 'method' => $methodName, 'field' => $this->fieldName ])); } $fieldOptions = $model->$methodName($this->value, $this->fieldName, $data); } return $fieldOptions; } /** * getOptionsFromModelAsDefault refers to the model method or any of its behaviors */ protected function getOptionsFromModelAsDefault($model, $data) { try { [$model, $attribute] = $this->resolveModelAttributeInternal($model, $this->fieldName, ['objectOnly' => true]); } catch (Exception $ex) { throw new SystemException(Lang::get('backend::lang.field.options_method_invalid_model', [ 'model' => get_class($model), 'field' => $this->fieldName ])); } $methodName = 'get'.studly_case($attribute).'Options'; if ( !$this->objectMethodExists($model, $methodName) && !$this->objectMethodExists($model, 'getDropdownOptions') ) { throw new SystemException(Lang::get('backend::lang.field.options_method_not_exists', [ 'model' => get_class($model), 'method' => $methodName, 'field' => $this->fieldName ])); } if ($this->objectMethodExists($model, $methodName)) { $fieldOptions = $model->$methodName($this->value, $data); } else { $fieldOptions = $model->getDropdownOptions($attribute, $this->value, $data); } return $fieldOptions; } /** * objectMethodExists is an internal helper for method existence checks. * * @param object $object * @param string $method * @return boolean */ protected function objectMethodExists($object, $method) { if (method_exists($object, 'methodExists')) { return $object->methodExists($method); } return method_exists($object, $method); } } ================================================ FILE: modules/backend/classes/FormTabs.php ================================================ <?php namespace Backend\Classes; use Str; use October\Rain\Html\Helper as HtmlHelper; use October\Rain\Element\Form\FieldsetDefinition; /** * FormTabs is a fieldset definition for backend tabs * * @method FormTabs section(string $section) section specifies the form section these tabs belong to * @method FormTabs lazy(array $lazy) lazy is the names of tabs to lazy load * @method FormTabs adaptive(array $adaptive) adaptive is the names of tabs that use the entire screen space * @method FormTabs defaultTab(string $defaultTab) defaultTab is default tab label to use when none is specified * @method FormTabs activeTab(string $activeTab) activeTab is the selected tab when the form first loads, name or index. * @method FormTabs icons(array $icons) icons lists of icons for their corresponding tabs * @method FormTabs stretch(bool $stretch) stretch should these tabs stretch to the bottom of the page layout * @method FormTabs cssClass(string $cssClass) cssClass specifies a CSS class to attach to the tab container * @method FormTabs paneCssClass(array $paneCssClass) paneCssClass specifies a CSS class to an individual tab pane * @method FormTabs linkable(bool $linkable) linkable means tab gets url fragment to be linkable * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class FormTabs extends FieldsetDefinition { const SECTION_OUTSIDE = 'outside'; const SECTION_PRIMARY = 'primary'; const SECTION_SECONDARY = 'secondary'; /** * initDefaultValues for this scope */ protected function initDefaultValues() { parent::initDefaultValues(); $this ->section(self::SECTION_OUTSIDE) ->defaultTab('backend::lang.form.undefined_tab') ->linkable() ->icons([]) ->lazy([]) ->adaptive([]) ; } /** * evalConfig */ public function evalConfig(array $config) { if (isset($config['section']) && $config['section'] === self::SECTION_OUTSIDE) { $this->suppressTabs(); } } /** * isLazy checks if a tab should be lazy loaded */ public function isLazy($tabName): bool { return in_array($tabName, $this->config['lazy']); } /** * addLazy flags a tab to be lazy loaded */ public function addLazy($tabName) { $this->config['lazy'] = array_merge((array) $this->config['lazy'], (array) $tabName); } /** * isAdaptive checks if a tab uses adaptive sizing */ public function isAdaptive($tabName): bool { return in_array($tabName, $this->config['adaptive']); } /** * addAdaptive flags a tab to use adaptive sizing */ public function addAdaptive($tabName) { $this->config['adaptive'] = array_merge((array) $this->config['adaptive'], (array) $tabName); } /** * getIcon returns an icon for the tab based on the tab's name * @param string $name * @return string */ public function getIcon($name) { if (!empty($this->config['icons'][$name])) { return $this->config['icons'][$name]; } } /** * getPaneCssClass returns a tab pane CSS class * @param string $index * @param string $label * @return string */ public function getPaneCssClass($index = null, $label = null) { if (!isset($this->config['paneCssClass'])) { return ''; } if (is_string($this->config['paneCssClass'])) { return $this->config['paneCssClass']; } if ($index !== null && isset($this->config['paneCssClass'][$index])) { return $this->config['paneCssClass'][$index]; } if ($label !== null && isset($this->config['paneCssClass'][$label])) { return $this->config['paneCssClass'][$label]; } return $this->config['paneCssClass']['*'] ?? ''; } /** * setPaneCssClass appends a CSS class to the tab pane */ public function setPaneCssClass($tabNameOrIndex, string $cssClass, bool $overwrite = false) { if (is_string($this->config['paneCssClass'])) { $this->config['paneCssClass'] = ['*' => $this->config['paneCssClass']]; } if ($overwrite) { $this->config['paneCssClass'][$tabNameOrIndex] = $cssClass; } else { $currentValue = $this->config['paneCssClass'][$tabNameOrIndex] ?? ''; $this->config['paneCssClass'][$tabNameOrIndex] = trim($currentValue . ' ' . $cssClass); } } /** * isPaneActive returns a tab pane CSS class */ public function isPaneActive($index = null, $label = null): bool { if ($this->activeTab === null) { return $index === 1; } if ($index !== null && $this->activeTab === $index) { return true; } if ($label !== null && $this->activeTab === $label) { return true; } return false; } /** * getPaneAnchorId returns a value suitable for the pane id property. * @return string */ public function getPaneAnchorId($index = null, $label = null) { $id = $this->section . 'tab'; if ($this->linkable) { $id .= '-' . (Str::slug(__($label)) ?: $index); } else { $id .= '-' . $index; } return HtmlHelper::nameToId($id); } /** * getPaneId */ public function getPaneId($tabName) { if ($id = $this->getIdentifier($tabName)) { return "pane-{$id}"; } return null; } /** * getTabId */ public function getTabId($tabName) { if ($id = $this->getIdentifier($tabName)) { return "tab-{$id}"; } return null; } /** * getIdentifier returns an API identifier for the specified tab */ public function getIdentifier($tabName): ?string { return $this->config['identifiers'][$tabName] ?? null; } /** * addIdentifier adds a new API identifier for the specified tab */ public function addIdentifier($tabName, $identifier) { $this->config['identifiers'][$tabName] = $identifier; } } ================================================ FILE: modules/backend/classes/FormWidgetBase.php ================================================ <?php namespace Backend\Classes; use October\Rain\Html\Helper as HtmlHelper; /** * FormWidgetBase class contains widgets used specifically for forms * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ abstract class FormWidgetBase extends WidgetBase { // // Configurable Properties // /** * @var \October\Rain\Database\Model model object for the form. */ public $model; /** * @var array data containing field values, if none supplied model should be used. */ public $data; /** * @var string sessionKey for the active session, used for editing forms and deferred bindings. */ public $sessionKey; /** * @var string sessionKeySuffix adds some extra uniqueness to the session key. */ public $sessionKeySuffix; /** * @var bool previewMode renders this form with uneditable preview data. */ public $previewMode = false; /** * @var bool showLabels determines if this form field should display comments and labels. */ public $showLabels = true; // // Object Properties // /** * @var FormField formField object containing general form field information. */ protected $formField; /** * @var \Backend\Widgets\Form The parent form that contains this field */ protected $parentForm = null; /** * @var string fieldName */ protected $fieldName; /** * @var string Model attribute to get/set value from. */ protected $valueFrom; /** * __construct * @param Controller $controller * @param FormField $formField * @param array $configuration */ public function __construct($controller, $formField, $configuration = []) { $this->formField = $formField; $this->fieldName = $formField->fieldName; $this->valueFrom = $formField->valueFrom ?: $this->fieldName; $this->config = $this->makeConfig($configuration); $this->fillFromConfig([ 'model', 'data', 'sessionKey', 'sessionKeySuffix', 'previewMode', 'showLabels', 'parentForm', ]); parent::__construct($controller, $configuration); } /** * getParentForm retrieves the parent form for this formwidget * @return \Backend\Widgets\Form|null */ public function getParentForm() { return $this->parentForm; } /** * getFieldName returns the HTML element field name for this widget, used for * capturing user input, passed back to the getSaveValue method when saving. * @return string */ public function getFieldName() { return $this->formField->getName(); } /** * getId returns a unique ID for this widget. Useful in creating HTML markup. */ public function getId($suffix = null) { $id = parent::getId($suffix); $id .= '-' . $this->fieldName; return HtmlHelper::nameToId($id); } /** * getSaveValue processes the postback value for this widget. If the value is omitted from * postback data, the form widget will be skipped. * @param mixed $value The existing value for this widget. * @return string The new value for this widget. */ public function getSaveValue($value) { return $value; } /** * getLoadValue returns the value for this form field, * supports nesting via HTML array. * @return string */ public function getLoadValue() { if ($this->formField->value !== null) { return $this->formField->value; } $defaultValue = $this->model && !$this->model->exists ? $this->formField->getDefaultFromData($this->data ?: $this->model) : null; return $this->formField->getValueFromData($this->data ?: $this->model, $defaultValue); } /** * resetFormValue from the form field, triggered by the parent form calling `setFormValues` * and the new value is in the formField object `value` property. */ public function resetFormValue() { } /** * getSessionKey returns the active session key, including suffix. * @return string */ public function getSessionKey() { return $this->sessionKey . $this->sessionKeySuffix; } } ================================================ FILE: modules/backend/classes/ListColumn.php ================================================ <?php namespace Backend\Classes; use October\Rain\Database\Model; use October\Rain\Html\Helper as HtmlHelper; use October\Rain\Element\Lists\ColumnDefinition; /** * ListColumn definition is a translation of the list column configuration * * @method ListColumn valueFrom(string $valueFrom) valueFrom is a model attribute to use for the accessed value * @method ListColumn displayFrom(string $displayFrom) displayFrom is a model attribute to use for the displayed value * @method ListColumn defaults(string $defaults) defaults specifies a default value when value is empty * @method ListColumn sqlSelect(string $sqlSelect) sqlSelect is a custom SQL for selecting this record display value, the `@` symbol is replaced with the table name. * @method ListColumn relation(string $relation) Relation name, if this column represents a model relationship. * @method ListColumn relationCount(bool $relationCount) Count mode to display the number of related records. * @method ListColumn relationWith(string $relationWith) Eager load this dot-notated relation definition with the list query. * @method ListColumn width(string $width) sets the column width, can be specified in percents (10%) or pixels (50px). * @method ListColumn cssClass(string $cssClass) Specify a CSS class to attach to the list cell element. * @method ListColumn headCssClass(string $headCssClass) Specify a CSS class to attach to the list header cell element. * @method ListColumn format(string $format) Specify a format or style for the column value, such as a Date. * @method ListColumn path(string $path) Specifies a path for partial-type fields. * @method ListColumn sortableDefault(string $sortableDefault) sortableDefault makes the field sorted by default, either as asc or desc. * @method ListColumn valueTrans(bool $valueTrans) valueTrans determines if display values (model attributes) should be translated * @method ListColumn tooltip(array|string $tooltip) tooltip to display next to the column header, as an array supports: title, placement, icon, isHtml * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class ListColumn extends ColumnDefinition { /** * __construct using old and new interface */ public function __construct($config = [], $label = null) { // @deprecated old API if (!is_array($config)) { return parent::__construct([ 'columnName' => $config, 'label' => $label ]); } parent::__construct($config); } /** * initDefaultValues for this field */ protected function initDefaultValues() { parent::initDefaultValues(); $this ->valueTrans(true) ; } /** * evalConfig */ public function evalConfig(array $config) { if (isset($config['select'])) { // @deprecated use below $this->sqlSelect($config['select']); // $this->sqlSelect(array_pull($config, 'select')); } if (isset($config['default'])) { $this->defaults($config['default']); } } /** * select */ public function select($column) { $this->sqlSelect($column); } /** * getName returns a HTML valid name for the column name. * @return string */ public function getName() { return HtmlHelper::nameToId($this->columnName); } /** * getId returns a value suitable for the column id property. * @param string $suffix Specify a suffix string * @return string */ public function getId($suffix = null) { $id = 'column'; $id .= '-'.$this->columnName; if ($suffix) { $id .= '-'.$suffix; } return HtmlHelper::nameToId($id); } /** * getDisplayValue checks to see if display values (model attributes) should be translated, * and also escapes the value */ public function getDisplayValue($value) { if ($this->valueTrans) { return e(__($value)); } return e($value); } /** * getAlignClass returns the column specific alignment css class. * @return string */ public function getAlignClass() { return $this->align ? 'list-cell-align-' . $this->align : ''; } /** * useRelationCount */ public function useRelationCount(): bool { if (!$this->relation) { return false; } // @deprecated use relationCount instead if (($value = $this->getConfig('useRelationCount')) !== null) { return $value; } return (bool) $this->relationCount; } /** * getValueFromData returns this columns value from a supplied data set, which can be * an array or a model or another generic collection. * @param mixed $data * @param mixed $default * @return mixed */ public function getValueFromData($data, $default = null) { $columnName = $this->valueFrom ?: $this->columnName; return $this->getColumnNameFromData($columnName, $data, $default); } /** * Internal method to extract the value of a column name from a data set. * @param string $columnName * @param mixed $data * @param mixed $default * @return mixed */ protected function getColumnNameFromData($columnName, $data, $default = null) { /* * Array column name, eg: column[key][key2][key3] */ $keyParts = HtmlHelper::nameToArray($columnName); $result = $data; /* * Loop the column key parts and build a value. * To support relations only the last column should return the * relation value, all others will look up the relation object as normal. */ foreach ($keyParts as $key) { if ($result instanceof Model && $result->hasRelation($key)) { $result = $result->{$key}; } else { if (is_array($result) && array_key_exists($key, $result)) { $result = $result[$key]; } elseif ($result instanceof Model) { $result = $result->getAttribute($key); if ($result === null) { return $default; } } elseif (!isset($result->{$key})) { return $default; } else { $result = $result->{$key}; } } } return $result; } } ================================================ FILE: modules/backend/classes/LoginCustomization.php ================================================ <?php namespace Backend\Classes; use Url; use Backend\Models\BrandSetting; use Exception; use File; /** * LoginCustomization */ class LoginCustomization { /** * getCustomizationVariables */ public static function getCustomizationVariables($controller) { $result = []; try { $result['logo'] = BrandSetting::getLogo(); } catch (Exception $ex) { $result['logo'] = BrandSetting::getDefaultLogo(); } if (!$result['logo']) { $result['logo'] = Url::asset('/modules/backend/assets/images/october-logo.svg'); } $result['loginCustomization'] = BrandSetting::getLoginPageCustomization(); $defaultImageNum = rand(1, 5); $result['defaultImage1x'] = $defaultImageNum.'.png'; $result['defaultImage2x'] = $defaultImageNum.'@2x.png'; return (object)$result; } public static function getGeneratedImageData() { $index = rand(1, 7); $basePath = base_path() . '/modules/backend/assets/images/october-login-ai-generated/'; $backgroundPath = $basePath . $index . '/background.css'; return (object)[ 'img' => $index.'/image.png', 'background' => File::get($backgroundPath) ]; } } ================================================ FILE: modules/backend/classes/MainMenuItem.php ================================================ <?php namespace Backend\Classes; use Html; use October\Rain\Element\Navigation\ItemDefinition; /** * MainMenuItem * * @method MainMenuItem owner(string $owner) owner * @method MainMenuItem iconSvg(null|string $iconSvg) iconSvg * @method MainMenuItem counter(mixed $counter) counter * @method MainMenuItem counterLabel(null|string $counterLabel) counterLabel * @method MainMenuItem attributes(array $attributes) attributes * @method MainMenuItem permissions(array $permissions) permissions * @method MainMenuItem sideMenu(SideMenuItem[] $sideMenu) sideMenu * @method MainMenuItem useDropdown(bool $useDropdown) useDropdown * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class MainMenuItem extends ItemDefinition { /** * initDefaultValues for this scope */ protected function initDefaultValues() { parent::initDefaultValues(); $this ->order(500) ->permissions([]) ->sideMenu([]) ->useDropdown(true) ; } /** * addPermission * @param string $permission * @param array $definition */ public function addPermission(string $permission, array $definition) { $this->config['permissions'][$permission] = $definition; } /** * addSideMenuItem * @param SideMenuItem $sideMenu */ public function addSideMenuItem(SideMenuItem $sideMenu) { $this->config['sideMenu'][$sideMenu->code] = $sideMenu; } /** * getSideMenuItem */ public function getSideMenuItem(string $code): ?SideMenuItem { return $this->config['sideMenu'][$code] ?? null; } /** * removeSideMenuItem * @param string $code */ public function removeSideMenuItem(string $code) { unset($this->config['sideMenu'][$code]); } /** * itemAttributes returns HTML attributes for the list item */ public function itemAttributes(): string { if ($this->attributes === null) { return ''; } return Html::attributes(array_except($this->attributes, ['target'])); } /** * linkAttributes returns HTML for the anchor link */ public function linkAttributes(): string { if (!isset($this->attributes['target'])) { return ''; } return Html::attributes(array_only($this->attributes, ['target'])); } } ================================================ FILE: modules/backend/classes/NavigationManager.php ================================================ <?php namespace Backend\Classes; use App; use Log; use Event; use System; use BackendAuth; use System\Classes\PluginManager; use SystemException; use Throwable; /** * NavigationManager manages the backend navigation. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class NavigationManager { use \Backend\Classes\NavigationManager\HasNavigationContext; use \Backend\Classes\NavigationManager\HasTailorNavigationContext; const ITEM_TYPE_ADD_BUTTON = 'add-button'; /** * @var MainMenuItem[]|null items contains a list of registered items. */ protected $items; /** * @var array|null menuDisplayTree */ protected $menuDisplayTree; /** * instance creates a new instance of this singleton */ public static function instance(): static { return App::make('backend.menu'); } /** * registerCallback function that defines menu items. * The callback function should register menu items by calling the manager's * `registerMenuItems` method. The manager instance is passed to the callback * function as an argument. Usage: * * BackendMenu::registerCallback(function ($manager) { * $manager->registerMenuItems([...]); * }); * * @deprecated this will be removed in a later version * @param callable $callback A callable function. */ public function registerCallback(callable $callback) { App::extendInstance('backend.menu', $callback); } /** * init this class items */ public function init() { if ($this->items === null) { $this->loadItems(); } } /** * loadItems from modules and plugins */ protected function loadItems() { $this->items = []; // Load module items foreach (System::listModules() as $module) { if ($provider = App::getProvider($module . '\\ServiceProvider')) { $items = $provider->registerNavigation(); if (is_array($items)) { $this->registerMenuItems('October.'.$module, $items); } } } // Load plugin items, prevent system crashes foreach (PluginManager::instance()->getPlugins() as $id => $plugin) { try { $items = $plugin->registerNavigation(); if (is_array($items)) { $this->registerMenuItems($id, $items); } } catch (Throwable $ex) { Log::error($ex); } } // Load app items if ($app = App::getProvider(\App\Provider::class)) { $items = $app->registerNavigation(); if (is_array($items)) { $this->registerMenuItems('October.App', $items); } } /** * @event backend.menu.extendItems * Provides an opportunity to manipulate the backend navigation * * Example usage: * * Event::listen('backend.menu.extendItems', function ((\Backend\Classes\NavigationManager) $manager) { * $manager->addMainMenuItems(...) * $manager->addSideMenuItems(...) * $manager->removeMainMenuItem(...) * }); * */ Event::fire('backend.menu.extendItems', [$this]); // Sort menu items uasort($this->items, static function ($a, $b) { return (int) $a->order - (int) $b->order; }); // Filter items user lacks permission for $user = BackendAuth::getUser(); $this->items = $this->filterItemPermissions($user, $this->items); foreach ($this->items as $item) { $sideMenu = $item->sideMenu; if (!$sideMenu || !count($sideMenu)) { continue; } // Apply incremental default orders $orderCount = 0; foreach ($sideMenu as $sideMenuItem) { if ($sideMenuItem->order !== -1) { continue; } $sideMenuItem->order = ($orderCount += 100); } // Sort side menu items uasort($sideMenu, static function ($a, $b) { return $a->order - $b->order; }); // Filter items user lacks permission for $item->sideMenu($this->filterItemPermissions($user, $sideMenu)); } } /** * registerMenuItems for the back-end menu items. * The argument is an array of the main menu items. The array keys represent the * menu item codes, specific for the plugin/module. Each element in the * array should be an associative array with the following keys: * - label - specifies the menu label localization string key, required. * - icon - an icon name from the Font Awesome icon collection, required. * - url - the back-end relative URL the menu item should point to, required. * - permissions - an array of permissions the back-end user should have, optional. * The item will be displayed if the user has any of the specified permissions. * - order - a position of the item in the menu, optional. * - counter - an optional numeric value to output near the menu icon. The value should be * a number or a callable returning a number. * - counterLabel - an optional string value to describe the numeric reference in counter. * - sideMenu - an array of side menu items, optional. If provided, the array items * should represent the side menu item code, and each value should be an associative * array with the following keys: * - label - specifies the menu label localization string key, required. * - icon - an icon name from the Font Awesome icon collection, required. * - url - the back-end relative URL the menu item should point to, required. * - attributes - an array of attributes and values to apply to the menu item, optional. * - permissions - an array of permissions the back-end user should have, optional. * - counter - an optional numeric value to output near the menu icon. The value should be * a number or a callable returning a number. * - counterLabel - an optional string value to describe the numeric reference in counter. * @param string $owner Specifies the menu items owner plugin or module in the format Author.Plugin. * @param array $definitions An array of the menu item definitions. */ public function registerMenuItems($owner, array $definitions) { $this->init(); $this->addMainMenuItems($owner, $definitions); } /** * addMainMenuItems dynamically adds an array of main menu items. * @param string $owner * @param array $definitions */ public function addMainMenuItems($owner, array $definitions) { foreach ($definitions as $code => $definition) { $this->addMainMenuItem($owner, $code, $definition); } } /** * addMainMenuItem dynamically adds a single main menu item. * @param string $owner * @param string $code * @param array $definition */ public function addMainMenuItem($owner, $code, array $definition) { if ($this->items === null) { throw new SystemException('Unable to add navigation items before they are loaded.'); } $itemKey = $this->makeItemKey($owner, $code); if (isset($this->items[$itemKey])) { $definition = array_merge( $this->items[$itemKey]->toArray(), $definition ); } $item = array_merge($definition, [ 'code' => $code, 'owner' => $owner ]); $sideMenu = array_pull($item, 'sideMenu'); $this->items[$itemKey] = $this->defineMainMenuItem($item); if (is_array($sideMenu)) { $this->addSideMenuItems($owner, $code, $sideMenu); } } /** * defineMainMenuItem */ protected function defineMainMenuItem(array $config): MainMenuItem { return (new MainMenuItem)->useConfig($config); } /** * getMainMenuItem returns a main menu item */ public function getMainMenuItem(string $owner, string $code): ?MainMenuItem { $itemKey = $this->makeItemKey($owner, $code); return $this->items[$itemKey] ?? null; } /** * removeMainMenuItem removes a single main menu item * @param $owner * @param $code */ public function removeMainMenuItem($owner, $code) { if ($this->items === null) { throw new SystemException('Unable to remove navigation items before they are loaded.'); } $itemKey = $this->makeItemKey($owner, $code); unset($this->items[$itemKey]); } /** * addSideMenuItems dynamically adds an array of side menu items * @param string $owner * @param string $code * @param array $definitions */ public function addSideMenuItems($owner, $code, array $definitions) { foreach ($definitions as $sideCode => $definition) { if (is_array($definition)) { $this->addSideMenuItem($owner, $code, $sideCode, $definition); } } } /** * addSideMenuItem dynamically add a single side menu item * @param string $owner * @param string $code * @param string $sideCode * @param array $definition * @return bool */ public function addSideMenuItem($owner, $code, $sideCode, array $definition) { if ($this->items === null) { throw new SystemException('Unable to add navigation items before they are loaded.'); } $itemKey = $this->makeItemKey($owner, $code); if (!isset($this->items[$itemKey])) { return false; } $mainItem = $this->items[$itemKey]; $definition = array_merge($definition, [ 'code' => $sideCode, 'owner' => $owner ]); if (isset($mainItem->sideMenu[$sideCode])) { $definition = array_merge( $mainItem->sideMenu[$sideCode]->toArray(), $definition ); } $item = $this->defineSideMenuItem($definition); $this->items[$itemKey]->addSideMenuItem($item); return true; } /** * defineSideMenuItem */ protected function defineSideMenuItem(array $config): SideMenuItem { return (new SideMenuItem)->useConfig($config); } /** * getSideMenuItem returns a side menu item */ public function getSideMenuItem(string $owner, string $code, string $sideCode): ?SideMenuItem { return $this->getMainMenuItem($owner, $code)?->getSideMenuItem($sideCode); } /** * removeSideMenuItems with multiple codes * @param string $owner * @param string $code * @param array $sideCodes * @return void */ public function removeSideMenuItems($owner, $code, $sideCodes) { foreach ($sideCodes as $sideCode) { $this->removeSideMenuItem($owner, $code, $sideCode); } } /** * removeSideMenuItem removes a single main menu item * @param string $owner * @param string $code * @param string $sideCode * @return bool */ public function removeSideMenuItem($owner, $code, $sideCode) { if ($this->items === null) { throw new SystemException('Unable to remove navigation items before they are loaded.'); } $itemKey = $this->makeItemKey($owner, $code); if (!isset($this->items[$itemKey])) { return false; } $mainItem = $this->items[$itemKey]; $mainItem->removeSideMenuItem($sideCode); return true; } /** * listMainMenuItems returns a list of the main menu items. * @return array */ public function listMainMenuItems() { $this->init(); foreach ($this->items as $item) { if ($item->counter === false) { continue; } // Counter specified $item->counter = $this->getCallableCounterValue($item); // Guess counter from sub items if ($item->counter === null && ($sideItems = $this->listSideMenuItems($item->owner, $item->code))) { $subCount = 0; foreach ($sideItems as $sideItem) { if ($sideItem->counter !== null) { $subCount += $sideItem->counter; } } if ($subCount > 0) { $item->counter = $subCount; } } } return $this->items; } /** * listSideMenuItems returns a list of side menu items for the currently active main menu item. * The currently active main menu item is set with the setContext methods. * @param null $owner * @param null $code * @return SideMenuItem[] * @throws SystemException */ public function listSideMenuItems($owner = null, $code = null) { $this->init(); $activeItem = null; if ($owner !== null && $code !== null) { $activeItem = $this->items[$this->makeItemKey($owner, $code)] ?? null; } else { foreach ($this->listMainMenuItems() as $item) { if ($this->isMainMenuItemActive($item)) { $activeItem = $item; break; } } } if (!$activeItem) { return []; } $items = $activeItem->sideMenu; // Process counters foreach ($items as $item) { $item->counter = $this->getCallableCounterValue($item); } return $items; } /** * listMainMenuItemsWithSubitems prepares data for displaying the top menu and side * (collapsable) menu. Uses caching to avoid running counter functions twice. */ public function listMainMenuItemsWithSubitems() { if ($this->menuDisplayTree !== null) { return $this->menuDisplayTree; } $mainMenuItems = $this->listMainMenuItems(); $this->menuDisplayTree = []; foreach ($mainMenuItems as $mainMenuItem) { $subMenuItems = $this->listSideMenuItems($mainMenuItem->owner, $mainMenuItem->code); $this->menuDisplayTree[] = (object)[ 'mainMenuItem' => $mainMenuItem, 'subMenuItems' => $subMenuItems, 'subMenuHasDropdown' => $mainMenuItem->useDropdown && count($subMenuItems) ]; } return $this->menuDisplayTree; } /** * listMainMenuSubItems uses cached result of listMainMenuItemsWithSubitems to return * submenu items and avoid duplicate counter calls. */ public function listMainMenuSubItems() { $allItems = $this->listMainMenuItemsWithSubitems(); foreach ($allItems as $itemInfo) { if ($this->isMainMenuItemActive($itemInfo->mainMenuItem)) { return $itemInfo->subMenuItems; } } return []; } /** * getActiveMainMenuItem returns the currently active main menu item * @return null|MainMenuItem $item Returns the item object or null. * @throws SystemException */ public function getActiveMainMenuItem() { foreach ($this->listMainMenuItems() as $item) { if ($this->isMainMenuItemActive($item)) { return $item; } } return null; } /** * getCallableCounterValue returns the counter value for a menu item */ protected function getCallableCounterValue($item) { $counterValue = $item->counter; if (empty($counterValue)) { return null; } if (is_int($counterValue)) { return $counterValue; } if ( is_string($counterValue) && strpos($counterValue, '::') !== false && ($staticMethod = explode('::', $counterValue)) && count($staticMethod) === 2 && is_callable($staticMethod) ) { return $staticMethod($item); } if (is_callable($counterValue)) { return $counterValue($item); } return (int) $item->counter; } /** * filterItemPermissions removes menu items from an array if the supplied user lacks permission. * @param \Backend\Models\User $user A user object * @param MainMenuItem[]|SideMenuItem[] $items A collection of menu items * @return array The filtered menu items */ protected function filterItemPermissions($user, array $items) { if (!$user) { return $items; } $items = array_filter($items, static function ($item) use ($user) { if (!$item->permissions || !count($item->permissions)) { return true; } return $user->hasAnyAccess($item->permissions); }); return $items; } /** * makeItemKey is an internal method to make a unique key for an item. * @param string $owner * @param string $code * @return string */ protected function makeItemKey($owner, $code) { return strtoupper($owner).'.'.strtoupper($code); } /** * resetCache resets any memory or cache involved with the sites */ public function resetCache() { $this->items = null; $this->menuDisplayTree = null; } } ================================================ FILE: modules/backend/classes/ReportWidgetBase.php ================================================ <?php namespace Backend\Classes; use Backend\Classes\DashReport; /** * @deprecated use Dashboard\Classes\ReportWidgetBase */ abstract class ReportWidgetBase extends \Dashboard\Classes\ReportWidgetBase { } ================================================ FILE: modules/backend/classes/RoleManager.php ================================================ <?php namespace Backend\Classes; use App; use Event; use System; use System\Classes\PluginManager; use October\Rain\Exception\SystemException; /** * RoleManager manages the backend roles and permissions. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class RoleManager { /** * @var array|null permissions registered. */ protected $permissions; /** * @var array|null permissionRoles is a list of registered permission roles. */ protected $permissionRoles; /** * instance creates a new instance of this singleton */ public static function instance(): static { return App::make('backend.roles'); } /** * registerCallback registers a callback function that defines authentication permissions. * The callback function should register permissions by calling the manager's * registerPermissions() function. The manager instance is passed to the * callback function as an argument. Usage: * * RoleManager::registerCallback(function ($manager) { * $manager->registerPermissions([...]); * }); * * @deprecated this will be removed in a later version * @param callable $callback A callable function. */ public function registerCallback(callable $callback) { App::extendInstance('backend.roles', $callback); } /** * init this class items */ public function init() { if ($this->permissions === null) { $this->loadPermissions(); } } /** * loadItems from modules and plugins */ protected function loadPermissions() { $this->permissions = []; // Load module items foreach (System::listModules() as $module) { if ($provider = App::getProvider($module . '\\ServiceProvider')) { $items = $provider->registerPermissions(); if (is_array($items)) { $this->registerPermissions('October.'.$module, $items); } } } // Load plugin items foreach (PluginManager::instance()->getPlugins() as $id => $plugin) { $items = $plugin->registerPermissions(); if (is_array($items)) { $this->registerPermissions($id, $items); } } // Load app items if ($app = App::getProvider(\App\Provider::class)) { $items = $app->registerPermissions(); if (is_array($items)) { $this->registerPermissions('October.App', $items); } } /** * @event backend.roles.extendPermissions * Provides an opportunity to manipulate the permissions * * Example usage: * * Event::listen('backend.roles.extendPermissions', function ((\Backend\Classes\RoleManager) $manager) { * $manager->registerPermissions(...) * }); * */ Event::fire('backend.roles.extendPermissions', [$this]); // Sort permission items usort($this->permissions, function ($a, $b) { if ($a->order === $b->order) { return 0; } return $a->order > $b->order ? 1 : -1; }); } /** * registerPermissions registers the back-end permission items. * The argument is an array of the permissions. The array keys represent the * permission codes, specific for the plugin/module. Each element in the * array should be an associative array with the following keys: * - label - specifies the menu label localization string key, required. * - order - a position of the item in the menu, optional. * - comment - a brief comment that describes the permission, optional. * - tab - assign this permission to a tabbed group, optional. * @param string $owner Specifies the permissions' owner plugin or module in the format Author.Plugin * @param array $definitions An array of the menu item definitions. */ public function registerPermissions($owner, array $definitions) { $this->init(); foreach ($definitions as $code => $definition) { if ($definition && is_array($definition)) { $permission = new RolePermission(array_merge($definition, [ 'code' => $code, 'owner' => $owner ])); $this->permissions[] = $permission; } } } /** * removePermission removes a single back-end permission. Where owner specifies the * permissions' owner plugin or module in the format Author.Plugin. Where code is * the permission to remove. */ public function removePermission(string $owner, string $code) { if ($this->permissions === null) { throw new SystemException('Unable to remove permissions before they are loaded.'); } $ownerPermissions = array_filter($this->permissions, function ($permission) use ($owner) { return $permission->owner === $owner; }); foreach ($ownerPermissions as $key => $permission) { if ($permission->code === $code) { unset($this->permissions[$key]); } } } /** * listPermissions returns a list of the registered permissions items. */ public function listPermissions(): array { $this->init(); return $this->permissions; } /** * listPermissionsForUser returns permissions that the user has access to. */ public function listPermissionsForUser($user): array { return array_filter($this->listPermissions(), function($permission) use ($user) { return $user->hasAccess($permission->code); }); } /** * listPermissionsForRole returns an array of registered permissions belonging to a * given role code. * @param string $role * @param bool $includeOrphans */ public function listPermissionsForRole($role, $includeOrphans = true): array { if ($this->permissionRoles === null) { $this->permissionRoles = []; foreach ($this->listPermissions() as $permission) { if ($permission->roles) { foreach ((array) $permission->roles as $_role) { $this->permissionRoles[$_role][$permission->code] = 1; } } else { $this->permissionRoles['*'][$permission->code] = 1; } } } $result = $this->permissionRoles[$role] ?? []; if ($includeOrphans) { $result += $this->permissionRoles['*'] ?? []; } return $result; } /** * hasPermissionsForRole checks if the user has the permissions for a role. */ public function hasPermissionsForRole($role): bool { return !!$this->listPermissionsForRole($role, false); } /** * resetCache resets any memory or cache involved with the sites */ public function resetCache() { $this->permissions = null; $this->permissionRoles = null; } } ================================================ FILE: modules/backend/classes/RolePermission.php ================================================ <?php namespace Backend\Classes; use October\Rain\Element\ElementBase; /** * RolePermission * * @method RolePermission code(string $code) code * @method RolePermission label(string $label) label * @method RolePermission comment(string $comment) comment * @method RolePermission children(array $children) children * @method RolePermission roles(array $roles) roles * @method RolePermission order(int $order) order * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class RolePermission extends ElementBase { /** * initDefaultValues override method */ protected function initDefaultValues() { $this->order(500); } /** * addChild */ public function addChild($permission): static { $children = $this->children; $children[$permission->code] = $permission; $this->children($children); return $this; } } ================================================ FILE: modules/backend/classes/SettingsController.php ================================================ <?php namespace Backend\Classes; use System; use BackendMenu; use System\Classes\SettingsManager; /** * SettingsController is used for settings pages * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class SettingsController extends Controller { /** * @var string settingsItemCode determines the settings code */ public $settingsItemCode; /** * __construct */ public function __construct() { BackendMenu::setContext('October.System', 'system', 'settings'); SettingsManager::setContext($this->findSettingsContextFromClass($this), $this->settingsItemCode); parent::__construct(); } /** * findSettingsContextFromClass converts a controller class to a plugin code, * if the author code is a module name, then we assume it is a module. */ protected function findSettingsContextFromClass() { $classNameArray = explode('\\', get_class($this)); $authorCode = array_shift($classNameArray); $pluginCode = array_shift($classNameArray); if (System::hasModule($authorCode)) { return 'October.'.$authorCode; } return $authorCode.'.'.$pluginCode; } } ================================================ FILE: modules/backend/classes/SideMenuItem.php ================================================ <?php namespace Backend\Classes; use Html; use October\Rain\Element\Navigation\ItemDefinition; /** * SideMenuItem * * @method SideMenuItem owner(string $owner) owner * @method SideMenuItem iconSvg(null|string $iconSvg) iconSvg * @method SideMenuItem counter(null|int|callable $counter) counter * @method SideMenuItem counterLabel(null|string $counterLabel) counterLabel * @method SideMenuItem attributes(array $attributes) attributes * @method SideMenuItem permissions(array $permissions) permissions * @method SideMenuItem itemType(string $itemType) itemType * @method SideMenuItem visibleOn(string|array $visibleOn) visibleOn another side menu item code * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class SideMenuItem extends ItemDefinition { /** * initDefaultValues for this scope */ protected function initDefaultValues() { parent::initDefaultValues(); $this ->attributes([]) ->permissions([]) ; } /** * addAttribute * @param null|string|int $attribute * @param null|string|array $value */ public function addAttribute($attribute, $value) { $this->config['attributes'][$attribute] = $value; } /** * removeAttribute */ public function removeAttribute($attribute) { unset($this->config['attributes'][$attribute]); } /** * addPermission * @deprecated recommend not using this method until v4 when signature is fixed * should be a non-associative array */ public function addPermission(string $permission, array $definition) { $this->config['permissions'][$permission] = $definition; } /** * removePermission * @deprecated recommend not using this method until v4 when signature is fixed * should spin over every value and remove via located key * @param string $permission * @return void */ public function removePermission(string $permission) { unset($this->config['permissions'][$permission]); } /** * itemAttributes returns HTML attributes for the list item */ public function itemAttributes(): string { if ($this->attributes === null) { return ''; } return Html::attributes(array_except($this->attributes, ['target'])); } /** * linkAttributes returns HTML for the anchor link */ public function linkAttributes(): string { if (!isset($this->attributes['target'])) { return ''; } return Html::attributes(array_only($this->attributes, ['target'])); } } ================================================ FILE: modules/backend/classes/Skin.php ================================================ <?php namespace Backend\Classes; use File; use Config; use October\Rain\Router\Helper as RouterHelper; /** * Skin Base class is used for defining skins. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ abstract class Skin { /** * Returns information about this skin, including name and description. */ abstract public function skinDetails(); /** * @var string skinPath is the absolute path to this skin. */ public $skinPath; /** * @var string publicSkinPath to this skin. */ public $publicSkinPath; /** * @var string defaultSkinPath, usually the root level of modules/backend. */ public $defaultSkinPath; /** * @var string defaultPublicSkinPath */ public $defaultPublicSkinPath; /** * @var Skin skinCache of the active skin. */ private static $skinCache; /** * __construct */ public function __construct() { $this->defaultSkinPath = base_path() . '/modules/backend'; /* * Guess the skin path */ $class = get_called_class(); $classFolder = strtolower(class_basename($class)); $classFile = realpath(dirname(File::fromClass($class))); $this->skinPath = $classFile ? $classFile . '/' . $classFolder : $this->defaultSkinPath; $this->publicSkinPath = File::localToPublic($this->skinPath); $this->defaultPublicSkinPath = File::localToPublic($this->defaultSkinPath); } /** * getPath looks up a path to a skin-based file, if it doesn't exist, the default path is used. * @param string $path * @param boolean $isPublic * @return string */ public function getPath($path = null, $isPublic = false) { $path = RouterHelper::normalizeUrl($path); $assetFile = $this->skinPath . $path; if (File::isFile($assetFile)) { return $isPublic ? $this->publicSkinPath . $path : $this->skinPath . $path; } return $isPublic ? $this->defaultPublicSkinPath . $path : $this->defaultSkinPath . $path; } /** * getLayoutPaths returns an array of paths where skin layouts can be found. * @return array */ public function getLayoutPaths() { return [$this->skinPath.'/layouts', $this->defaultSkinPath.'/layouts']; } /** * getActive returns the active skin. */ public static function getActive() { if (self::$skinCache !== null) { return self::$skinCache; } $skinClass = Config::get('backend.skin', \Backend\Skins\Standard::class); $skinObject = new $skinClass(); return self::$skinCache = $skinObject; } } ================================================ FILE: modules/backend/classes/VueComponentBase.php ================================================ <?php namespace Backend\Classes; use File; use SystemException; use October\Rain\Extension\Extendable; use Backend\Classes\Controller; /** * VueComponentBase class. * * Each component must include two files: * vuecomponents/mycomponents * - partials/_mycomponents.php * - assets/js/mycomponents.js * * The optional CSS file is loaded automatically if presented: * vuecomponents/mycomponents * - assets/css/mycomponents.css * * Components can have subcomponents. Each subcomponent * must be presented with a JavaScript file and partial. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ abstract class VueComponentBase extends Extendable { use \System\Traits\ViewMaker; use \System\Traits\AssetMaker; /** * @var \Backend\Classes\Controller controller object */ protected $controller; /** * @var string componentName is the Vue component tag name. * Must be defined in each component class. */ protected $componentName; /** * @var array require Vue component class names for this component. */ protected $require = []; /** * @var array subcomponents this component provides */ private $subcomponents = []; /** * @var array esmModules are JavaScript-only ESM modules (no template) */ private $esmModules = []; /** * __construct * @param \Backend\Classes\Controller $controller */ public function __construct(Controller $controller) { $this->controller = $controller; $this->viewPath = $this->guessViewPath('/partials'); $this->assetPath = $this->guessViewPath('/assets', true); // Prepare assets used by this widget. $this->loadDependencyAssets(); $this->loadDefaultAssets(); $this->loadAssets(); $this->registerSubcomponents(); $this->prepareVars(); parent::__construct(); } /** * render the default component partial. */ public function render() { return $this->makePartial($this->getComponentBaseName()); } /** * renderSubcomponent */ public function renderSubcomponent($name) { if (!array_key_exists($name, $this->subcomponents)) { throw new SystemException(sprintf('Subcomponent not registered: %s', $name)); } return $this->makePartial($name); } /** * getDependencies */ public function getDependencies() { return $this->require; } /** * getSubcomponents */ public function getSubcomponents() { return array_keys($this->subcomponents); } /** * getEsmModules returns JS-only ESM modules (no templates) */ public function getEsmModules() { return array_keys($this->esmModules); } /** * getEsmModulePath returns the ESM module path for this component. * By default, derived from the component's asset path. */ public function getEsmModulePath(): string { $baseName = $this->getComponentBaseName(); return $this->assetPath . "/js/{$baseName}.js"; } /** * getSubcomponentEsmPath returns the ESM path for a specific subcomponent. */ public function getSubcomponentEsmPath(string $name): string { return $this->assetPath . "/js/{$name}.js"; } /** * loadDefaultAssets adds the default CSS file for this component. * JavaScript is loaded via ESM imports in VueMaker::outputVueComponentTemplates() */ protected function loadDefaultAssets() { $baseName = $this->getComponentBaseName(); $cssPath = "css/{$baseName}.css"; if (File::exists(base_path($this->assetPath.'/'.$cssPath))) { $this->addCss($cssPath); } } /** * prepareVars required by the component's partials */ protected function prepareVars() { } /** * loadAssets adds component specific asset files. Use $this->addJs() and * $this->addCss() to register new assets to include on the page. * The default component script and CSS file are loaded automatically. * @return void */ protected function loadAssets() { } /** * loadDependencyAssets adds dependency assets required for the component. * This method is called before the component's default resources are loaded. * Use $this->addJs() and $this->addCss() to register new assets to include * on the page. * @return void */ protected function loadDependencyAssets() { } /** * getComponentBaseName */ protected function getComponentBaseName() { $classNameArray = explode('\\', get_class($this)); return strtolower(end($classNameArray)); } /** * getComponentName returns the Vue component tag name. */ public function getComponentName(): string { if (!$this->componentName) { throw new SystemException(sprintf( 'Vue component [%s] must define a $componentName property.', get_class($this) )); } return $this->componentName; } /** * getSubcomponentName returns the Vue component tag name for a subcomponent. */ public function getSubcomponentName(string $subcomponent): string { return $this->getComponentName() . '-' . $subcomponent; } /** * registerSubcomponent adds a subcomponent. * @param string $name The component name. * A JavaScript file and partial with the same name must exist. * JavaScript is loaded via ESM imports in VueMaker::outputVueComponentTemplates() */ protected function registerSubcomponent($name) { $name = strtolower($name); $this->subcomponents[$name] = true; } /** * registerEsmModule adds a JavaScript-only ESM module (no template). * Use this for utility/helper modules that don't have Vue templates. * @param string $name The module name (without .js extension). */ protected function registerEsmModule($name) { $name = strtolower($name); $this->esmModules[$name] = true; } /** * registerSubcomponents */ protected function registerSubcomponents() { } } ================================================ FILE: modules/backend/classes/WidgetBase.php ================================================ <?php namespace Backend\Classes; use October\Rain\Html\Helper as HtmlHelper; use October\Rain\Extension\Extendable; use Larajax\Contracts\ViewComponentInterface; use stdClass; /** * WidgetBase class * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ abstract class WidgetBase extends Extendable implements ViewComponentInterface { use \System\Traits\ViewMaker; use \System\Traits\AssetMaker; use \System\Traits\ConfigMaker; use \System\Traits\EventEmitter; use \Backend\Traits\ErrorMaker; use \Backend\Traits\WidgetMaker; use \Backend\Traits\SessionMaker; use \Larajax\Traits\ViewComponent; /** * @var string defaultAlias to identify this widget. */ protected $defaultAlias = 'widget'; /** * __construct the widget * @param \Backend\Classes\Controller $controller * @param array $configuration Proactive configuration definition. */ public function __construct($controller, $config = []) { $this->controller = $controller; $this->viewPath = $this->configPath = $this->guessViewPath('/partials'); $this->assetPath = $this->guessViewPath('/assets', true); // Apply configuration values to a new config object, if a parent // constructor hasn't done it already. if ($this->config === null) { $this->config = $this->makeConfig($config); } // If no alias is set by the configuration. if (!isset($this->alias)) { $this->alias = $this->config->alias ?? $this->defaultAlias; } // Prepare assets used by this widget. $this->loadAssets(); parent::__construct(); // Initialize the widget. if (!$this->getConfig('noInit', false)) { $this->init(); } } /** * init the widget, called by the constructor and free from its parameters. * @return void */ public function init() { } /** * render the widget's primary contents. * @return string HTML markup supplied by this widget. */ public function render() { } /** * loadAssets adds widget specific asset files. Use $this->addJs() and $this->addCss() * to register new assets to include on the page. * @return void */ protected function loadAssets() { } /** * fillFromConfig transfers config values stored inside the $config property directly * on to the root object properties. If no properties are defined * all config will be transferred if it finds a matching property. * @param array $properties * @return void */ protected function fillFromConfig($properties = null) { if ($properties === null) { $properties = array_keys((array) $this->config); } foreach ($properties as $property) { if (property_exists($this, $property)) { $this->{$property} = $this->getConfig($property, $this->{$property}); } } } /** * getId returns a unique ID for this widget. Useful in creating HTML markup. * @param string $suffix An extra string to append to the ID. * @return string A unique identifier. */ public function getId($suffix = null) { $id = class_basename(get_called_class()); if ($this->alias !== $this->defaultAlias) { $id .= '-' . $this->alias; } if ($suffix !== null) { $id .= '-' . $suffix; } return HtmlHelper::nameToId($id); } /** * getEventHandler returns a fully qualified event handler name for this widget. * @param string $name The ajax event handler name. * @return string */ public function getEventHandler($name) { return $this->alias . '::' . $name; } /** * getConfig is a safe accessor for configuration values * @param string $name Config name, supports array names like "field[key]" * @param mixed $default Default value if nothing is found * @return string */ public function getConfig($name = null, $default = null) { if (!$this->config) { return $default; } return $this->getConfigValueFrom($this->config, $name, $default); } /** * getController returns the controller using this widget. */ public function getController() { return $this->controller; } } ================================================ FILE: modules/backend/classes/WidgetManager.php ================================================ <?php namespace Backend\Classes; use App; use System\Classes\PluginManager; /** * WidgetManager * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class WidgetManager { use \Backend\Classes\WidgetManager\HasFormWidgets; use \Backend\Classes\WidgetManager\HasFilterWidgets; use \Backend\Classes\WidgetManager\HasReportWidgets; /** * @var \System\Classes\PluginManager pluginManager */ protected $pluginManager; /** * __construct this class */ public function __construct() { $this->pluginManager = PluginManager::instance(); } /** * instance creates a new instance of this singleton */ public static function instance(): static { return App::make('backend.widgets'); } } ================================================ FILE: modules/backend/classes/WildcardController.php ================================================ <?php namespace Backend\Classes; /** * WildcardController is used for controllers with a single action * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class WildcardController extends Controller { /** * run the action that is always index */ public function run($action = null, $params = []) { if ($action !== 'index') { $params = array_merge([$action], $params); } return parent::run('index', $params); } /** * actionExists is always true for wildcards */ public function actionExists($name, $internal = false) { return true; } } ================================================ FILE: modules/backend/classes/navigationmanager/HasNavigationContext.php ================================================ <?php namespace Backend\Classes\NavigationManager; /** * HasNavigationContext * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ trait HasNavigationContext { /** * @var string contextOwner */ protected $contextOwner; /** * @var string contextMainMenuItemCode */ protected $contextMainMenuItemCode; /** * @var string contextSideMenuItemCode */ protected $contextSideMenuItemCode; /** * @var array contextSidenavPartials */ protected $contextSidenavPartials = []; /** * setContext sets the navigation context for the current controller. The function sets * the navigation owner, main menu item code and the side menu item code (optional). * The navigation owner is in the format of Author.Plugin or Module name. * @param string $owner * @param string $mainMenuItemCode * @param string $sideMenuItemCode */ public function setContext($owner, $mainMenuItemCode, $sideMenuItemCode = null) { $this->setContextOwner($owner); $this->setContextMainMenu($mainMenuItemCode); $this->setContextSideMenu($sideMenuItemCode); } /** * setContextOwner sets the navigation context owner. * The navigation owner is in the format of Author.Plugin or Module name. * @param string $owner */ public function setContextOwner($owner) { $this->contextOwner = $owner; } /** * setContextMainMenu specifies a code of the main menu item in the current * navigation context. * @param string $mainMenuItemCode */ public function setContextMainMenu($mainMenuItemCode) { $this->contextMainMenuItemCode = $mainMenuItemCode; } /** * setContextSideMenu specifies a code of the side menu item in the current navigation context. * If the code is set to TRUE, the first item will be flagged as active. * @param string $sideMenuItemCode */ public function setContextSideMenu($sideMenuItemCode) { $this->contextSideMenuItemCode = $sideMenuItemCode; } /** * getContext returns information about the current navigation context. * @return mixed Returns an object with the following fields: * - mainMenuCode * - sideMenuCode * - owner */ public function getContext() { return (object)[ 'mainMenuCode' => $this->contextMainMenuItemCode, 'sideMenuCode' => $this->contextSideMenuItemCode, 'owner' => $this->contextOwner ]; } /** * isMainMenuItemActive determines if a main menu item is active. * Returns true if the menu item is active. * @param \Backend\Classes\MainMenuItem $item * @return bool */ public function isMainMenuItemActive($item) { return $this->contextOwner === $item->owner && $this->contextMainMenuItemCode === $item->code; } /** * isDashboardItemActive determines if the dashboard is active. * @return bool */ public function isDashboardItemActive() { return $this->contextOwner === 'October.Dashboard' && $this->contextMainMenuItemCode === 'dashboard'; } /** * isSideMenuItemActive determines if a side menu item is active. * @param SideMenuItem $item */ public function isSideMenuItemActive($item): bool { if ($this->contextSideMenuItemCode === true) { $this->contextSideMenuItemCode = null; return true; } return $this->contextOwner === $item->owner && $this->contextSideMenuItemCode === $item->code; } /** * isSideMenuItemActive determines if a side menu item is active. * @param SideMenuItem $item */ public function isSideMenuItemVisible($item): bool { if (!$item->visibleOn) { return true; } if ($this->contextOwner === $item->owner && in_array($this->contextSideMenuItemCode, (array) $item->visibleOn)) { return true; } return false; } /** * registerContextSidenavPartial registers a special side navigation partial for a specific * main menu. The sidenav partial replaces the standard side navigation. * @param string $owner Specifies the navigation owner in the format Vendor/Module. * @param string $mainMenuItemCode Specifies the main menu item code. * @param string $partial Specifies the partial name. */ public function registerContextSidenavPartial($owner, $mainMenuItemCode, $partial) { $this->contextSidenavPartials[$owner.$mainMenuItemCode] = $partial; } /** * getContextSidenavPartial returns the side navigation partial for a specific main menu * previously registered with the registerContextSidenavPartial() method. * @param string $owner Specifies the navigation owner in the format Vendor/Module. * @param string $mainMenuItemCode Specifies the main menu item code. * @return mixed Returns the partial name or null. */ public function getContextSidenavPartial($owner, $mainMenuItemCode) { $key = $owner.$mainMenuItemCode; return $this->contextSidenavPartials[$key] ?? null; } } ================================================ FILE: modules/backend/classes/navigationmanager/HasTailorNavigationContext.php ================================================ <?php namespace Backend\Classes\NavigationManager; use System; use Tailor\Classes\BlueprintIndexer; /** * HasTailorNavigationContext * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ trait HasTailorNavigationContext { /** * setTailorContextUuid */ public function setTailorContextUuid(string $uuid, ?string $sideMenuItemCode = null) { if (!System::hasModule('Tailor')) { return; } $blueprint = BlueprintIndexer::instance()->find($uuid); if (!$blueprint) { return; } $this->setContext( 'October.Tailor', $blueprint->getNavigationCodeName(), $sideMenuItemCode ); } /** * setTailorContext */ public function setTailorContext(string $handle, ?string $sideMenuItemCode = null) { if (!System::hasModule('Tailor')) { return; } $blueprint = BlueprintIndexer::instance()->findByHandle($handle); if (!$blueprint) { return; } $this->setContext( 'October.Tailor', $blueprint->getNavigationCodeName(), $sideMenuItemCode ); } } ================================================ FILE: modules/backend/classes/widgetmanager/HasFilterWidgets.php ================================================ <?php namespace Backend\Classes\WidgetManager; use App; use Str; use System; /** * HasFilterWidgets * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ trait HasFilterWidgets { /** * @var array filterWidgets */ protected $filterWidgets; /** * @var array filterWidgetCallbacks cache */ protected $filterWidgetCallbacks = []; /** * @var array filterWidgetHints keyed by their code. * Stored in the form of ['filterwidgetcode' => 'FilterWidgetClass']. */ protected $filterWidgetHints; /** * listFilterWidgets returns a list of registered filter widgets. * @return array Array keys are class names. */ public function listFilterWidgets() { if ($this->filterWidgets === null) { $this->filterWidgets = []; // Load external widgets foreach ($this->filterWidgetCallbacks as $callback) { $callback($this); } // Load module items foreach (System::listModules() as $module) { if ($provider = App::getProvider($module . '\\ServiceProvider')) { $widgets = $provider->registerFilterWidgets(); if (is_array($widgets)) { foreach ($widgets as $className => $widgetInfo) { $this->registerFilterWidget($className, $widgetInfo); } } } } // Load plugin widgets foreach ($this->pluginManager->getPlugins() as $plugin) { $widgets = $plugin->registerFilterWidgets(); if (!is_array($widgets)) { continue; } foreach ($widgets as $className => $widgetInfo) { $this->registerFilterWidget($className, $widgetInfo); } } // Load app widgets if ($app = App::getProvider(\App\Provider::class)) { $widgets = $app->registerFilterWidgets(); if (is_array($widgets)) { foreach ($widgets as $className => $widgetInfo) { $this->registerFilterWidget($className, $widgetInfo); } } } } return $this->filterWidgets; } /** * getFilterWidgets returns the raw array of registered filter widgets. * @return array Array keys are class names. */ public function getFilterWidgets() { return $this->filterWidgets; } /* * registerFilterWidget registers a single filter widget. */ public function registerFilterWidget($className, $widgetInfo) { if (!is_array($widgetInfo)) { $widgetInfo = ['code' => $widgetInfo]; } $widgetCode = $widgetInfo['code'] ?? null; if (!$widgetCode) { $widgetCode = Str::getClassId($className); } $this->filterWidgets[$className] = $widgetInfo; $this->filterWidgetHints[$widgetCode] = $className; } /** * registerFilterWidgets manually registers filter widget for consideration. Usage: * * WidgetManager::registerFilterWidgets(function ($manager) { * $manager->registerFilterWidget(\Backend\FilterWidgets\DateRange::class, 'daterange'); * }); * */ public function registerFilterWidgets(callable $definitions) { $this->filterWidgetCallbacks[] = $definitions; } /** * resolveFilterWidget returns a class name from a filter widget code * Normalizes a class name or converts an code to its class name. * Returns the class name resolved, or the original name. * @param string $name * @return string */ public function resolveFilterWidget($name) { if ($this->filterWidgets === null) { $this->listFilterWidgets(); } $hints = $this->filterWidgetHints; if (isset($hints[$name])) { return $hints[$name]; } $_name = Str::normalizeClassName($name); if (isset($this->filterWidgets[$_name])) { return $_name; } return $name; } } ================================================ FILE: modules/backend/classes/widgetmanager/HasFormWidgets.php ================================================ <?php namespace Backend\Classes\WidgetManager; use App; use Str; use System; /** * HasFormWidgets * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ trait HasFormWidgets { /** * @var array formWidgets stored in the form of ['FormWidgetClass' => $formWidgetInfo] */ protected $formWidgets; /** * @var array formWidgetCallbacks cache */ protected $formWidgetCallbacks = []; /** * @var array formWidgetHints keyed by their code. * Stored in the form of ['formwidgetcode' => 'FormWidgetClass']. */ protected $formWidgetHints; /** * listFormWidgets returns a list of registered form widgets. * @return array Array keys are class names. */ public function listFormWidgets() { if ($this->formWidgets === null) { $this->formWidgets = []; // Load external widgets foreach ($this->formWidgetCallbacks as $callback) { $callback($this); } // Load module items foreach (System::listModules() as $module) { if ($provider = App::getProvider($module . '\\ServiceProvider')) { $widgets = $provider->registerFormWidgets(); if (is_array($widgets)) { foreach ($widgets as $className => $widgetInfo) { $this->registerFormWidget($className, $widgetInfo); } } } } // Load plugin widgets foreach ($this->pluginManager->getPlugins() as $plugin) { $widgets = $plugin->registerFormWidgets(); if (!is_array($widgets)) { continue; } foreach ($widgets as $className => $widgetInfo) { $this->registerFormWidget($className, $widgetInfo); } } // Load app widgets if ($app = App::getProvider(\App\Provider::class)) { $widgets = $app->registerFormWidgets(); if (is_array($widgets)) { foreach ($widgets as $className => $widgetInfo) { $this->registerFormWidget($className, $widgetInfo); } } } } return $this->formWidgets; } /** * registerFormWidget registers a single form widget. * @param string $className Widget class name. * @param array $widgetInfo Registration information, can contain a `code` key. * @return void */ public function registerFormWidget($className, $widgetInfo = null) { if (!is_array($widgetInfo)) { $widgetInfo = ['code' => $widgetInfo]; } $widgetCode = $widgetInfo['code'] ?? null; if (!$widgetCode) { $widgetCode = Str::getClassId($className); } $this->formWidgets[$className] = $widgetInfo; $this->formWidgetHints[$widgetCode] = $className; } /** * registerFormWidgets manually registers form widget for consideration. Usage: * * WidgetManager::registerFormWidgets(function ($manager) { * $manager->registerFormWidget(\Backend\FormWidgets\CodeEditor::class, 'codeeditor'); * }); * */ public function registerFormWidgets(callable $definitions) { $this->formWidgetCallbacks[] = $definitions; } /** * resolveFormWidget returns a class name from a form widget code * Normalizes a class name or converts an code to its class name. * Returns the class name resolved, or the original name. * @param string $name * @return string */ public function resolveFormWidget($name) { if ($this->formWidgets === null) { $this->listFormWidgets(); } $hints = $this->formWidgetHints; if (isset($hints[$name])) { return $hints[$name]; } $_name = Str::normalizeClassName($name); if (isset($this->formWidgets[$_name])) { return $_name; } return $name; } } ================================================ FILE: modules/backend/classes/widgetmanager/HasReportWidgets.php ================================================ <?php namespace Backend\Classes\WidgetManager; use App; use Str; use Event; use System; use BackendAuth; use SystemException; /** * HasReportWidgets * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ trait HasReportWidgets { /** * @var array reportWidgets */ protected $reportWidgets; /** * @var array reportWidgetCallbacks cache */ protected $reportWidgetCallbacks = []; /** * @var array reportWidgetHints keyed by their code. * Stored in the report of ['reportwidgetcode' => 'FormWidgetClass']. */ protected $reportWidgetHints; /** * listReportWidgets returns a list of registered report widgets. * @return array Array keys are class names. */ public function listReportWidgets() { if ($this->reportWidgets === null) { $this->reportWidgets = []; // Load external widgets foreach ($this->reportWidgetCallbacks as $callback) { $callback($this); } // Load module items foreach (System::listModules() as $module) { if ($provider = App::getProvider($module . '\\ServiceProvider')) { $widgets = $provider->registerReportWidgets(); if (is_array($widgets)) { foreach ($widgets as $className => $widgetInfo) { $this->registerReportWidget($className, $widgetInfo); } } } } // Load plugin widgets foreach ($this->pluginManager->getPlugins() as $plugin) { $widgets = $plugin->registerReportWidgets(); if (!is_array($widgets)) { continue; } foreach ($widgets as $className => $widgetInfo) { $this->registerReportWidget($className, $widgetInfo); } } // Load app widgets if ($app = App::getProvider(\App\Provider::class)) { $widgets = $app->registerReportWidgets(); if (is_array($widgets)) { foreach ($widgets as $className => $widgetInfo) { $this->registerReportWidget($className, $widgetInfo); } } } } /** * @event system.reportwidgets.extendItems * Enables adding or removing report widgets. * * You will have access to the WidgetManager instance and be able to call the appropriate methods * $manager->registerReportWidget(); * $manager->removeReportWidget(); * * Example usage: * * Event::listen('system.reportwidgets.extendItems', function ($manager) { * $manager->removeReportWidget('Acme\ReportWidgets\YourWidget'); * }); * */ Event::fire('system.reportwidgets.extendItems', [$this]); $user = BackendAuth::getUser(); foreach ($this->reportWidgets as $widget => $config) { if (!empty($config['permissions'])) { if (!$user->hasAccess($config['permissions'], false)) { unset($this->reportWidgets[$widget]); } } } return $this->reportWidgets; } /** * getReportWidgets returns the raw array of registered report widgets. * @return array Array keys are class names. */ public function getReportWidgets() { return $this->reportWidgets; } /* * registerReportWidget registers a single report widget. */ public function registerReportWidget($className, $widgetInfo) { if (!is_array($widgetInfo)) { $widgetInfo = ['code' => $widgetInfo]; } $widgetCode = $widgetInfo['code'] ?? null; if (!$widgetCode) { $widgetCode = Str::getClassId($className); } $this->reportWidgets[$className] = $widgetInfo; $this->reportWidgetHints[$widgetCode] = $className; } /** * registerReportWidgets manually registers report widget for consideration. Usage: * * WidgetManager::registerReportWidgets(function ($manager) { * $manager->registerReportWidget(\RainLab\GoogleAnalytics\ReportWidgets\TrafficOverview::class, [ * 'name' => 'Google Analytics traffic overview', * 'context' => 'dashboard' * ]); * }); * */ public function registerReportWidgets(callable $definitions) { $this->reportWidgetCallbacks[] = $definitions; } /** * resolveReportWidget returns a class name from a report widget code * Normalizes a class name or converts an code to its class name. * Returns the class name resolved, or the original name. * @param string $name * @return string */ public function resolveReportWidget($name) { if ($this->reportWidgets === null) { $this->listReportWidgets(); } $hints = $this->reportWidgetHints; if (isset($hints[$name])) { return $hints[$name]; } $_name = Str::normalizeClassName($name); if (isset($this->reportWidgets[$_name])) { return $_name; } return $name; } /** * removeReportWidget removes a registered ReportWidget. * @param string $className Widget class name. * @return void */ public function removeReportWidget($className) { if (!$this->reportWidgets) { throw new SystemException('Unable to remove a widget before widgets are loaded.'); } unset($this->reportWidgets[$className]); } } ================================================ FILE: modules/backend/composer.json ================================================ { "name": "october/backend", "type": "october-module", "description": "Backend module for October CMS", "homepage": "https://octobercms.com", "keywords": ["october cms", "october", "backend"], "authors": [ { "name": "Alexey Bobkov", "email": "aleksey.bobkov@gmail.com" }, { "name": "Samuel Georges", "email": "daftspunky@gmail.com" } ] } ================================================ FILE: modules/backend/controllers/AccessLogs.php ================================================ <?php namespace Backend\Controllers; use Backend; use BackendMenu; use Backend\Classes\Controller; use System\Classes\SettingsManager; /** * Access Logs controller * * @package october\system * @author Alexey Bobkov, Samuel Georges */ class AccessLogs extends Controller { /** * @var array Extensions implemented by this controller. */ public $implement = [ \Backend\Behaviors\ListController::class ]; /** * @var array `ListController` configuration. */ public $listConfig = 'config_list.yaml'; /** * @var array Permissions required to view this page. */ public $requiredPermissions = ['utilities.logs']; /** * Constructor. */ public function __construct() { parent::__construct(); BackendMenu::setContext('October.System', 'system', 'settings'); SettingsManager::setContext('October.Backend', 'access_logs'); } public function index_onRefresh() { return $this->listRefresh(); } } ================================================ FILE: modules/backend/controllers/Auth.php ================================================ <?php namespace Backend\Controllers; use App; use Log; use Mail; use Flash; use System; use Config; use Backend; use Request; use Validator; use BackendAuth; use Backend\Models\AccessLog; use Backend\Classes\Controller; use Backend\Models\User as UserModel; use System\Classes\UpdateManager; use ApplicationException; use ValidationException; use NotFoundException; use Exception; /** * Auth is the backend authentication controller * * @package october\backend * @author Alexey Bobkov, Samuel Georges * */ class Auth extends Controller { /** * @var array publicActions defines controller actions visible to unauthenticated users */ protected $publicActions = [ 'index', 'signin', 'signout', 'restore', 'reset', 'migrate', 'setup' ]; /** * @var array vueComponents classes to implement */ public $vueComponents = []; /** * __construct is the constructor */ public function __construct() { parent::__construct(); $this->layout = 'auth'; } /** * index is the default route, redirects to signin or migrate */ public function index() { if ($this->checkAdminAccounts()) { return Backend::redirect('backend/auth/migrate'); } else { return Backend::redirect('backend/auth/signin'); } } /** * signin displays the log in page */ public function signin() { $this->bodyClass = 'signin'; // Clear Cache and any previous data to fix invalid security token issue $this->setResponseHeader('Cache-Control', 'no-cache, no-store, must-revalidate'); try { if ($this->checkPostbackFlag()) { return $this->handleSubmitSignin(); } } catch (Exception $ex) { Flash::error($ex->getMessage()); } } /** * handleSubmitSignin handles the submission of the sign in form */ protected function handleSubmitSignin() { $rules = [ 'login' => 'required|between:2,255', 'password' => 'required|between:4,255' ]; $validation = Validator::make(post(), $rules, [], [ 'login' => __('Username'), 'password' => __('Password'), ]); if ($validation->fails()) { throw new ValidationException($validation); } // Determine remember policy $remember = Config::get('backend.force_remember'); if ($remember === null) { $remember = post('remember'); } // Authenticate user $user = BackendAuth::authenticate([ 'login' => post('login'), 'password' => post('password') ], (bool) $remember); // Log the sign in event AccessLog::add($user); // Redirect to the intended page after successful sign in return Backend::redirectIntended('backend'); } /** * signout logs out a backend user */ public function signout() { BackendAuth::logout(); // Add HTTP Header 'Clear Site Data' to purge all sensitive data upon signout if (Request::secure()) { $this->setResponseHeader( 'Clear-Site-Data', 'cache, cookies, storage, executionContexts' ); } return Backend::redirect('backend'); } /** * restore displays a page to request a password reset verification code */ public function restore() { if (!$this->checkCanReset()) { throw new NotFoundException; } try { if ($this->checkPostbackFlag()) { return $this->handleSubmitRestore(); } } catch (Exception $ex) { Flash::error($ex->getMessage()); } } /** * handleSubmitRestore submits the restore form */ protected function handleSubmitRestore() { $rules = [ 'login' => 'required|between:2,255' ]; $validation = Validator::make(post(), $rules, [], ['login' => __('Username')]); if ($validation->fails()) { throw new ValidationException($validation); } $user = BackendAuth::findUserByLogin(post('login')); if (!$user) { // For security reasons, only show detailed error when debug mode is on if (System::checkDebugMode()) { throw new ValidationException([ 'login' => __("A user could not be found with a login value of ':login'", ['login' => post('login')]) ]); } } else { // User found, send reset email $code = $user->getResetPasswordCode(); $link = Backend::url('backend/auth/reset/' . $user->id . '/' . $code); $data = [ 'name' => $user->full_name, 'link' => $link, ]; Mail::send('backend:restore', $data, function ($message) use ($user) { $message->to($user->email, $user->full_name)->subject(__('Password Reset')); }); } Flash::success(__('If your account was found, a message has been sent to your email address with instructions.')); return Backend::redirect('backend/auth/signin'); } /** * reset backend user password using verification code */ public function reset($userId = null, $code = null) { if (!$this->checkCanReset()) { throw new NotFoundException; } try { if ($this->checkPostbackFlag()) { return $this->handleSubmitReset(); } if (!$userId || !$code) { throw new ApplicationException(__('Invalid password reset data supplied. Please try again!')); } } catch (Exception $ex) { Flash::error($ex->getMessage()); } $this->vars['code'] = $code; $this->vars['id'] = $userId; } /** * handleSubmitReset submits the reset form */ protected function handleSubmitReset() { if (!post('id') || !post('code')) { throw new ApplicationException(__('Invalid password reset data supplied. Please try again!')); } $rules = [ 'password' => 'required|between:4,255' ]; $validation = Validator::make(post(), $rules, [], [ 'password' => __('Password'), ]); if ($validation->fails()) { throw new ValidationException($validation); } $code = post('code'); $user = BackendAuth::findUserById(post('id')); if (!$user || !$user->checkResetPasswordCode($code)) { throw new ApplicationException(__('Invalid password reset data supplied. Please try again!')); } // Validate password against policy $user->validatePasswordPolicy(post('password')); if (!$user->attemptResetPassword($code, post('password'))) { throw new ApplicationException(__('Unable to reset your password!')); } // Clear the code used to reset the password $user->clearResetPassword(); // Clear throttles BackendAuth::clearThrottleForUserId($user->id); Flash::success(__('Password has been reset. You may now sign in.')); return Backend::redirect('backend/auth/signin'); } /** * setup will allow a user to create the first admin account */ public function setup() { $this->bodyClass = 'setup'; if (!$this->checkAdminAccounts()) { return Backend::redirect('backend/auth/signin'); } try { if ($this->checkPostbackFlag()) { return $this->handleSubmitSetup(); } } catch (Exception $ex) { Flash::error($ex->getMessage()); } } /** * handleSubmitSetup creates a new admin */ protected function handleSubmitSetup() { if (!$this->checkAdminAccounts()) { return Backend::redirect('backend/auth/signin'); } // Validate user input $rules = [ 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required|between:6,255|email|unique:backend_users', 'login' => 'required|between:2,255|unique:backend_users', 'password' => 'required:create|between:4,255|confirmed', 'password_confirmation' => 'required_with:password|between:4,255' ]; $validation = Validator::make(post(), $rules, [], [ 'first_name' => __('First name'), 'last_name' => __('Last name'), 'email' => __('Email'), 'login' => __('Username'), 'password' => __('Password'), 'password_confirmation' => __('Confirm Password'), ]); if ($validation->fails()) { throw new ValidationException($validation); } // Validate password against policy (new UserModel)->validatePasswordPolicy(post('password')); // Create user and sign in $user = UserModel::createDefaultAdmin(post()); BackendAuth::login($user); // Redirect Flash::success(__('Welcome to your Administration Area, :name', ['name' => e(post('first_name'))])); return Backend::redirectIntended('backend'); } /** * migrate shows a progress bar while the database migrates */ public function migrate() { $this->bodyClass = 'setup'; if (!$this->checkAdminAccounts()) { return Backend::redirect('backend/auth/signin'); } } /** * migrate_onMigrate migrates the database */ public function migrate_onMigrate() { if (!$this->checkAdminAccounts()) { return Backend::redirect('backend/auth/signin'); } try { UpdateManager::instance()->update(); } catch (Exception $ex) { Log::error($ex); Flash::error($ex->getMessage()); } return Backend::redirect('backend/auth/setup'); } /** * checkPostbackFlag checks to see if the form has been submitted */ protected function checkPostbackFlag(): bool { return Request::method() === 'POST' && post('postback'); } /** * checkAdminAccounts will determine if this is a new installation */ protected function checkAdminAccounts(): bool { // Debug mode must be turned on if (!System::checkDebugMode()) { return false; } // There must be no admin accounts, with database migrated if (System::hasDatabase() && UserModel::count() > 0) { return false; } // Ensures database hasn't fallen over if (!App::hasDatabase()) { return false; } return true; } /** * checkCanReset password via self service */ protected function checkCanReset(): bool { return (bool) Config::get('backend.password_policy.allow_reset', true); } } ================================================ FILE: modules/backend/controllers/AuthGates.php ================================================ <?php namespace Backend\Controllers; use Flash; use Backend; use Request; use Validator; use BackendAuth; use Backend\Classes\Controller; use ApplicationException; use ValidationException; /** * AuthGates is authentication services for the logged in users, isolated from the Auth controller * for security reasons, which has public actions, but also gated from all other protected actions. * * @package october\backend * @author Alexey Bobkov, Samuel Georges * */ class AuthGates extends Controller { /** * @var array vueComponents classes to implement */ public $vueComponents = []; /** * __construct is the constructor */ public function __construct() { parent::__construct(); $this->layout = 'auth'; } /** * expired shows a password reset screen when the password has expired */ public function expired() { } /** * expired_onSubmit submits the expired password form */ protected function expired_onSubmit() { $rules = [ 'current_password' => 'required|between:4,255', 'password' => 'required|between:4,255|confirmed|different:current_password', 'password_confirmation' => 'required_with:password|between:4,255' ]; $validation = Validator::make(post(), $rules, [], [ 'current_password' => __("Current Password"), 'password' => __("New Password"), 'password_confirmation' => __("Confirm Password"), ]); if ($validation->fails()) { throw new ValidationException($validation); } $user = $this->user; if (!$user || !$user->checkPassword(post('current_password'))) { throw new ApplicationException(__("Current password does not match. Please try again!")); } // Validate password against policy $user->validatePasswordPolicy(post('password')); // Reset the user password and clear any code used to reset the password $user->password = post('password'); $user->password_changed_at = $user->freshTimestamp(); $user->is_password_expired = false; $user->reset_password_code = null; $user->forceSave(); // Clear throttles BackendAuth::clearThrottleForUserId($user->id); Flash::success(__("Password has been reset. You may now sign in.")); return Backend::redirect('backend/auth/signin'); } } ================================================ FILE: modules/backend/controllers/Files.php ================================================ <?php namespace Backend\Controllers; use View; use Event; use Cache; use Config; use Backend; use Response; use System\Models\File as FileModel; use Backend\Classes\Controller; use ApplicationException; use ForbiddenException; use Exception; /** * Files controller used for delivering protected system files, and generating URLs * for accessing them. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Files extends Controller { /** * get will output a file, or fall back on the 404 page */ public function get($code = null) { try { return $this->findFileObject($code)->output(); } catch (ForbiddenException $ex) { throw $ex; } catch (Exception $ex) { } return Response::make(View::make('backend::404'), 404); } /** * thumb will output a thumbnail, or fall back on the 404 page */ public function thumb($code = null, $width = 100, $height = 100, $mode = 'auto', $extension = 'auto') { try { return $this->findFileObject($code)->outputThumb( $width, $height, compact('mode', 'extension') ); } catch (ForbiddenException $ex) { throw $ex; } catch (Exception $ex) { } return Response::make(View::make('backend::404'), 404); } /** * getTemporaryUrl attempts to return a redirect to a temporary URL to the asset instead * of streaming the asset - if supported * * @param System|Models\File $file * @param string|null $path Optional, defaults to the getDiskPath() of the file * @return string|null */ protected static function getTemporaryUrl($file, $path = null) { // Get the disk and adapter used $url = null; $disk = $file->getDisk(); $adapter = $disk->getAdapter(); if (class_exists('\League\Flysystem\Cached\CachedAdapter') && $adapter instanceof \League\Flysystem\Cached\CachedAdapter) { $adapter = $adapter->getAdapter(); } if ( (class_exists('\League\Flysystem\AwsS3v3\AwsS3V3Adapter') && $adapter instanceof \League\Flysystem\AwsS3v3\AwsS3V3Adapter) || (class_exists('\League\Flysystem\Rackspace\RackspaceAdapter') && $adapter instanceof \League\Flysystem\Rackspace\RackspaceAdapter) || method_exists($adapter, 'getTemporaryUrl') ) { if (empty($path)) { $path = $file->getDiskPath(); } // Check to see if the URL has already been generated $pathKey = 'backend.file:' . $path; $url = Cache::get($pathKey); // The AWS S3 storage drivers will return a valid temporary URL // even if the file does not exist if (!$url && $disk->exists($path)) { $expires = now()->addSeconds(Config::get('filesystems.disks.uploads.ttl', 3600)); $url = Cache::remember($pathKey, $expires, function () use ($disk, $path, $expires) { return $disk->temporaryUrl($path, $expires); }); } } return $url; } /** * getDownloadUrl returns the URL for downloading a system file. * @param $file System\Models\File * @return string */ public static function getDownloadUrl($file) { if ($url = static::getTemporaryUrl($file)) { return $url; } return Backend::url('backend/files/get/' . self::getUniqueCode($file)); } /** * Returns the URL for downloading a system file. * @param $file System\Models\File * @param $width int * @param $height int * @param $options array * @return string */ public static function getThumbUrl($file, $width, $height, $options) { if ($url = static::getTemporaryUrl($file, $file->getDiskPath($file->getThumbFilename($width, $height, $options)))) { return $url; } return Backend::url('backend/files/thumb/' . self::getUniqueCode($file)) . '/' . $width . '/' . $height . '/' . $options['mode'] . '/' . $options['extension']; } /** * Returns a unique code used for masking the file identifier. * @param $file System\Models\File * @return string */ public static function getUniqueCode($file) { if (!$file) { return null; } $hash = md5($file->file_name . '!' . $file->disk_name); return base64_encode($file->id . '!' . $hash); } /** * findFileObject locates a file model based on the unique code. * @param $code string * @return System\Models\File */ protected function findFileObject($code) { if (!$code) { throw new ApplicationException('Missing code'); } $parts = explode('!', base64_decode($code)); if (count($parts) < 2) { throw new ApplicationException('Invalid code'); } [$id, $hash] = $parts; if (!$file = FileModel::find((int) $id)) { throw new ApplicationException('File not found'); } // Ensure that the file model utilized for this request is // the one specified in the relationship configuration if ($file->attachment) { $fileModel = $file->attachment->{$file->field}()->getRelated(); // Only attempt to get file model through its assigned class // when the assigned class differs from the default one that // the file has already been loaded from if (get_class($file) !== get_class($fileModel)) { $file = $fileModel->find($file->id); } } $verifyCode = self::getUniqueCode($file); if ($code != $verifyCode) { throw new ApplicationException('Invalid hash'); } /** * @event backend.files.get * Fires before a file is output. * * Example usage: * * Event::listen('backend.files.get', function ((\System\Models\File) $file) { * // Block access to this file * return false; * * // Or signal access denied * throw new \ForbiddenException; * }); * */ $response = Event::fire('backend.files.get', [$file], true); if ($response === false) { throw new ApplicationException('File access halted'); } return $file; } } ================================================ FILE: modules/backend/controllers/Index.php ================================================ <?php namespace Backend\Controllers; use View; use Response; use Redirect; use BackendMenu; use Backend\Classes\Controller; /** * Index controller for the dashboard * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Index extends Controller { /** * index controller action */ public function index() { if ($first = array_first(BackendMenu::listMainMenuItems())) { return Redirect::intended($first->url); } return Response::make(View::make('backend::404'), 404); } } ================================================ FILE: modules/backend/controllers/Preferences.php ================================================ <?php namespace Backend\Controllers; use Lang; use Flash; use Backend; use BackendMenu; use Backend\Classes\Controller; use System\Classes\SettingsManager; use Backend\Models\Preference as PreferenceModel; /** * Preferences controller * * @package october\backend * @author Alexey Bobkov, Samuel Georges * */ class Preferences extends Controller { public $implement = [ \Backend\Behaviors\FormController::class ]; /** * @var array formConfig `FormController` configuration. */ public $formConfig = 'config_form.yaml'; /** * @var array requiredPermissions to view this page. */ public $requiredPermissions = ['preferences']; /** * __construct */ public function __construct() { parent::__construct(); $this->addCss('/modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css'); $this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/build-min.js'); $this->addJs('/modules/backend/assets/js/preferences/preferences.js'); BackendMenu::setContext('October.System', 'system', 'mysettings'); SettingsManager::setContext('October.Backend', 'preferences'); } /** * index */ public function index() { $this->pageTitle = "Backend Preferences"; $this->asExtension('FormController')->update(); } /** * formExtendFields removes the code editor tab if there is no permission. */ public function formExtendFields($form) { if (!$this->user->hasAccess('preferences.code_editor')) { $form->removeTab('Code Editor'); } } /** * index_onSave */ public function index_onSave() { return $this->asExtension('FormController')->update_onSave(); } /** * index_onResetDefault */ public function index_onResetDefault() { $model = $this->formFindModelObject(); $model->resetDefault(); Flash::success(Lang::get('backend::lang.form.reset_success')); return Backend::redirect('backend/preferences'); } /** * formFindModelObject */ public function formFindModelObject() { return PreferenceModel::instance(); } } ================================================ FILE: modules/backend/controllers/UserGroups.php ================================================ <?php namespace Backend\Controllers; use Backend\Classes\SettingsController; /** * UserGroups controller * * @package october\backend * @author Alexey Bobkov, Samuel Georges * */ class UserGroups extends SettingsController { /** * @var array Extensions implemented by this controller. */ public $implement = [ \Backend\Behaviors\FormController::class, \Backend\Behaviors\ListController::class, \Backend\Behaviors\RelationController::class ]; /** * @var array formConfig for `FormController` configuration. */ public $formConfig = 'config_form.yaml'; /** * @var array listConfig for `ListController` configuration. */ public $listConfig = 'config_list.yaml'; /** * @var array relationConfig for `RelationController` configuration. */ public $relationConfig = 'config_relation.yaml'; /** * @var array Permissions required to view this page. */ public $requiredPermissions = ['admins.groups']; /** * @var string settingsItemCode determines the settings code */ public $settingsItemCode = 'admingroups'; } ================================================ FILE: modules/backend/controllers/UserRoles.php ================================================ <?php namespace Backend\Controllers; use Backend; use BackendAuth; use Backend\Classes\SettingsController; use Config; use ForbiddenException; /** * UserRoles controller * * @package october\backend * @author Alexey Bobkov, Samuel Georges * */ class UserRoles extends SettingsController { /** * @var array Extensions implemented by this controller. */ public $implement = [ \Backend\Behaviors\FormController::class, \Backend\Behaviors\ListController::class ]; /** * @var array `FormController` configuration. */ public $formConfig = 'config_form.yaml'; /** * @var array `ListController` configuration. */ public $listConfig = 'config_list.yaml'; /** * @var array Permissions required to view this page. */ public $requiredPermissions = ['admins.roles']; /** * @var string settingsItemCode determines the settings code */ public $settingsItemCode = 'adminroles'; /** * onImpersonateRole */ public function onImpersonateRole($roleId = null) { if ($role = $this->formFindModelObject($roleId)) { BackendAuth::impersonateRole($role); } return Backend::redirect(''); } /** * listExtendQuery */ public function listExtendQuery($query) { $this->applyRankPermissionsToQuery($query); } /** * formExtendQuery */ public function formExtendQuery($query) { $this->applyRankPermissionsToQuery($query); } /** * applyRankPermissionsToQuery */ protected function applyRankPermissionsToQuery($query) { // Super users have no restrictions if ($this->user->isSuperUser()) { return; } // Fetch user role, including impersonation $userRole = $this->user->getRoleImpersonation() ?: $this->user->role; // User has no role and therefore cannot manage roles if (!$userRole || !$userRole->sort_order) { $query->whereRaw('1 = 2'); return; } $query->where( 'sort_order', $this->allowPeerManagement() ? '>=' : '>', $userRole->sort_order ); } /** * allowPeerManagement returns true if users can manage other peers */ public function allowPeerManagement(): bool { return Config::get('backend.user_peer_management', false); } } ================================================ FILE: modules/backend/controllers/Users.php ================================================ <?php namespace Backend\Controllers; use Lang; use Flash; use Config; use System; use Backend; use Redirect; use BackendAuth; use Backend\Models\UserRole; use Backend\Models\UserGroup; use Backend\Classes\SettingsController; use ForbiddenException; /** * Users controller for backend users * * @package october\backend * @author Alexey Bobkov, Samuel Georges * */ class Users extends SettingsController { /** * @var array Extensions implemented by this controller. */ public $implement = [ \Backend\Behaviors\FormController::class, \Backend\Behaviors\ListController::class ]; /** * @var array `FormController` configuration. */ public $formConfig = 'config_form.yaml'; /** * @var array `ListController` configuration. */ public $listConfig = 'config_list.yaml'; /** * @var array Permissions required to view this page. */ public $requiredPermissions = ['admins.manage']; /** * @var string HTML body tag class */ public $bodyClass = 'compact-container'; /** * @var string settingsItemCode determines the settings code */ public $settingsItemCode = 'administrators'; /** * __construct */ public function __construct() { parent::__construct(); if ($this->isMyAccount()) { $this->requiredPermissions = null; } } /** * index controller action * @return void */ public function index() { $this->bodyClass = 'slim-container'; return $this->asExtension('ListController')->index(); } /** * formExtendFields adds available permission fields to the User form. * Mark default groups as checked for new Users. */ public function formExtendFields($form) { // Remove permissions on own account if ($this->isMyAccount()) { $form->removeField('role'); $form->removeField('permissions'); return; } // Add super user flag if ($this->user->isSuperUser()) { $form->addField('is_superuser') ->context(['create', 'update']) ->tab('backend::lang.user.permissions') ->label('backend::lang.user.superuser') ->comment('backend::lang.user.superuser_comment') ->displayAs('switch'); } // Manage other admins if ($form->getContext() !== 'create' && !BackendAuth::userHasAccess('admins.manage.other_admins')) { $form->removeField('password'); $form->removeField('password_confirmation'); $form->getField('email')->disabled(); } // Filter the role options to those below rank if (!$this->user->isSuperUser()) { $form->getField('role')->options(function() { return $this->getRankedRoleOptions(); }); } // Mark default groups if (!$form->model->exists) { $defaultGroupIds = UserGroup::where('is_new_user_default', true)->pluck('id')->all(); if ($groupField = $form->getField('groups')) { $groupField->value($defaultGroupIds); } } } /** * listExtendQuery extends the list query to hide superusers if the current user is not a superuser themselves */ public function listExtendQuery($query) { $this->applyRankPermissionsToQuery($query); } /** * listFilterExtendScopes prevents non-superusers from even seeing the is_superuser filter */ public function listFilterExtendScopes($filterWidget) { if (!$this->user->isSuperUser()) { $filterWidget->removeScope('is_superuser'); } } /** * listInjectRowClass strikes out deleted records */ public function listInjectRowClass($record, $definition = null) { if ($record->trashed()) { return 'strike'; } } /** * formExtendModel */ public function formExtendModel($model) { if (!$this->user->isSuperUser() && !$this->isMyAccount()) { $model->addValidationRule('role', 'required'); } } /** * formExtendQuery extends the form query to prevent non-superusers from accessing superusers at all */ public function formExtendQuery($query) { $this->applyRankPermissionsToQuery($query); // Ensure soft-deleted records can still be managed $query->withTrashed(); } /** * formBeforeSave */ public function formBeforeSave($model) { // Prevent outranked roles from being selected if ( !$this->user->isSuperUser() && ($role = UserRole::find(post('User[role]'))) ) { if ( !$this->user->role || ($this->allowPeerManagement() ? $role->sort_order < $this->user->role->sort_order : $role->sort_order <= $this->user->role->sort_order) ) { throw new ForbiddenException; } } } /** * formBeforeCreate */ public function formBeforeCreate($model) { // In production, we assume the user creating the new user is not the // new user so password must always be reset for security reasons if (!System::checkDebugMode()) { $model->is_password_expired = true; } } /** * getRoleOptions returns available role options */ protected function getRankedRoleOptions() { $user = BackendAuth::getUser(); if (!$user || !$user->role || !$user->role->sort_order) { return []; } $roles = UserRole::where( 'sort_order', $this->allowPeerManagement() ? '>=' : '>', $user->role->sort_order )->get(); $result = []; foreach ($roles as $role) { $result[$role->id] = [$role->name, $role->description]; } return $result; } /** * applyRankPermissionsToQuery */ protected function applyRankPermissionsToQuery($query) { // Super users have no restrictions if ($this->user->isSuperUser()) { return; } // Hide super users $query->where('is_superuser', false); // Hide users above rank, not including self $query->where(function($q) { $q->where('id', $this->user->id); if ($this->user->role && $this->user->role->sort_order) { $q->orWhereHas('role', function($q) { $q->where( 'sort_order', $this->allowPeerManagement() ? '>=' : '>', $this->user->role->sort_order ); }); } }); } /** * update controller */ public function update($recordId, $context = null) { // Users cannot edit themselves, only use My Settings if (!$this->isMyAccount() && $recordId == $this->user->id) { return Backend::redirect('backend/users/myaccount'); } return $this->asExtension('FormController')->update($recordId, $context); } /** * update_onRestore handles restoring users */ public function update_onRestore($recordId) { $this->formFindModelObject($recordId)->restore(); Flash::success(Lang::get('backend::lang.form.restore_success', ['name' => Lang::get('backend::lang.user.name')])); return Redirect::refresh(); } /** * myaccount controller */ public function myaccount() { $this->pageTitle = "My Account"; return $this->update($this->user->id, 'myaccount'); } /** * myaccount_onSave proxies the update onSave event */ public function myaccount_onSave() { $result = $this->asExtension('FormController')->update_onSave($this->user->id, 'myaccount'); // If the password or login name has been updated, reauthenticate the user $loginChanged = $this->user->login != post('User[login]'); $passwordChanged = strlen(post('User[password]')); if ($loginChanged || $passwordChanged) { // Determine remember policy $remember = Config::get('backend.force_remember'); if ($remember === null) { $remember = BackendAuth::hasRemember(); } BackendAuth::login($this->user->reload(), (bool) $remember); } return $result; } /** * allowPeerManagement returns true if users can manage other peers */ protected function allowPeerManagement(): bool { return Config::get('backend.user_peer_management', false); } /** * isMyAccount returns true if self managing */ protected function isMyAccount(): bool { return $this->action == 'myaccount'; } } ================================================ FILE: modules/backend/controllers/accesslogs/_hint.php ================================================ <p> <?= __('This log displays a list of successful sign in attempts by administrators. Records are kept for a total of :days days.', ['days' => 60]) ?> </p> ================================================ FILE: modules/backend/controllers/accesslogs/_list_toolbar.php ================================================ <div data-control="toolbar"> <?= Ui::ajaxButton( label: __("Refresh"), handler: 'onRefresh', icon: 'oc-icon-refresh', primary: true, dataRequestMessage: __("Updating...") ) ?> </div> ================================================ FILE: modules/backend/controllers/accesslogs/config_list.yaml ================================================ # =================================== # List Behavior Config # =================================== title: Access Log list: ~/modules/backend/models/accesslog/columns.yaml filter: ~/modules/backend/models/accesslog/scopes.yaml modelClass: Backend\Models\AccessLog noRecordsMessage: backend::lang.list.no_records recordsPerPage: 30 showSetup: true defaultSort: column: created_at direction: desc toolbar: buttons: list_toolbar search: prompt: backend::lang.list.search_prompt ================================================ FILE: modules/backend/controllers/accesslogs/index.php ================================================ <div class="padded-container container-flush"> <?= $this->makeHintPartial('backend_accesslogs_hint', 'hint') ?> </div> <?= $this->listRender() ?> ================================================ FILE: modules/backend/controllers/auth/migrate.php ================================================ <h2><?= __("Getting Ready") ?></h2> <div class="progress bar-loading-indicator" id="executeLoadingBar"> <div class="progress-bar"></div> </div> <div class="loading-indicator-container"> <div data-wait-longer="<?= __("Just a few more minutes") ?>..." class="mt-2 text-center"><?= __("Migrating Database") ?>...</div> </div> <script> jQuery(function() { var waitLonger = setTimeout(function() { $('[data-wait-longer]').text($('[data-wait-longer]').data('wait-longer')); $('#executeLoadingBar').addClass('fadeCycle'); }, 80 * 1000); $.request('onMigrate').done(function(data) { clearTimeout(waitLonger); }); }); </script> ================================================ FILE: modules/backend/controllers/auth/reset.php ================================================ <h2><?= __("Password Reset") ?></h2> <?= Form::open() ?> <input type="hidden" name="postback" value="1" /> <input type="hidden" name="id" value="<?= e($id) ?>" /> <input type="hidden" name="code" value="<?= e($code) ?>" /> <p><?= __('Please enter a new password.') ?></p> <div class="form-elements" role="form"> <!-- Password --> <div class="form-group"> <label class="form-label" for="password-input"> <?= __('Password') ?> </label> <input type="password" name="password" id="password-input" value="" class="form-control password" autocomplete="off" maxlength="255" /> </div> <!-- Submit Login --> <button type="submit" class="btn btn-primary"> <?= __('Reset') ?> </button> <p class="pull-right forgot-password"> <a href="<?= Backend::url('backend/auth') ?>" class="text-muted"> <?= e(trans('backend::lang.form.cancel')) ?> </a> </p> </div> <?= Form::close() ?> ================================================ FILE: modules/backend/controllers/auth/restore.php ================================================ <h2><?= __('Password Restore') ?></h2> <?= Form::open() ?> <input type="hidden" name="postback" value="1" /> <p><?= __('Please enter your login to restore the password.') ?></p> <div class="form-elements" role="form"> <!-- Username --> <div class="form-group"> <label class="form-label" for="login-input"> <?= __('Username') ?> </label> <input type="text" name="login" id="login-input" value="<?= e(post('login')) ?>" class="form-control" placeholder="" autocomplete="off" maxlength="255" /> </div> <button type="submit" class="btn btn-primary restore-button"> <?= __('Restore') ?> </button> <p class="pull-right forgot-password"> <a href="<?= Backend::url('backend/auth') ?>" class="text-muted"> <?= e(trans('backend::lang.form.cancel')) ?> </a> </p> </div> <?= Form::close() ?> <?= $this->fireViewEvent('backend.auth.extendRestoreView') ?> ================================================ FILE: modules/backend/controllers/auth/setup.php ================================================ <h2><?= __('Create Account') ?></h2> <?= Form::open() ?> <input type="hidden" name="postback" value="1" /> <p><?= __("Please create a new account for logging in to the Administration Area.") ?></p> <div class="form-elements" role="form"> <div class="form-group text-field span-left"> <label class="form-label" for="adminFirstName"><?= __("First Name") ?></label> <input id="adminFirstName" type="text" name="first_name" class="form-control" value="<?= e(post('first_name')) ?>" placeholder="eg: Admin" /> </div> <div class="form-group text-field span-right"> <label class="form-label" for="adminLastName"><?= __("Last Name") ?></label> <input id="adminLastName" type="text" name="last_name" class="form-control" value="<?= e(post('last_name')) ?>" placeholder="eg: Person" /> </div> <div class="form-group text-field span-full"> <label class="form-label" for="adminEmail"><?= __("Email Address") ?></label> <input id="adminEmail" type="text" name="email" class="form-control" value="<?= e(post('email')) ?>" placeholder="eg: admin@domain.tld" onkeyup="suggestUsernameForSetup(this)" /> </div> <div class="form-group text-field span-full"> <label class="form-label" for="adminLogin"><?= __("Pick a Username") ?></label> <input id="adminLogin" type="text" name="login" class="form-control" value="<?= e(post('login')) ?>" placeholder="eg: myusername" /> </div> <div class="form-group text-field span-left"> <label class="form-label" for="adminPassword"><?= __("Enter New Password") ?></label> <input id="adminPassword" type="password" name="password" class="form-control" value="" /> </div> <div class="form-group text-field span-right"> <label class="form-label" for="adminConfirmPassword"><?= __("Confirm Password") ?></label> <input id="adminConfirmPassword" type="password" name="password_confirmation" class="form-control" value="" /> </div> <!-- Submit Form --> <button type="submit" class="btn btn-primary pull-right"> <?= __("Create Account") ?> </button> </div> <?= Form::close() ?> <script> // Suggest a custom username function suggestUsernameForSetup(el) { var email = el.value, username = email.slice(0, email.indexOf('@')); document.querySelectorAll('input[name="login"]').forEach(function(input) { input.placeholder = 'eg: ' + (username || 'myusername'); }); } </script> ================================================ FILE: modules/backend/controllers/auth/signin.php ================================================ <h2><?= e(Backend\Models\BrandSetting::get('app_tagline')) ?></h2> <p><?= e(Backend\Models\BrandSetting::get('login_prompt')) ?></p> <?= Form::open() ?> <input type="hidden" name="postback" value="1" /> <div class="form-elements" role="form"> <!-- Login --> <div class="form-group"> <label class="form-label" for="login-input"> <?= __('Username') ?> </label> <input type="text" name="login" value="<?= e(post('login')) ?>" class="form-control" id="login-input" autocomplete="off" maxlength="255" /> </div> <!-- Password --> <div class="form-group"> <label class="form-label" for="password-input"> <?= __('Password') ?> </label> <input type="password" name="password" value="" id="password-input" class="form-control" autocomplete="off" maxlength="255" /> </div> <?php if (Config::get('backend.force_remember') === null): ?> <!-- Remember Checkbox --> <div class="form-group"> <div class="form-check"> <input class="form-check-input" type="checkbox" id="remember" name="remember" <?= post('remember') ? 'checked' : '' ?> /> <label class="form-check-label" for="remember"> <?= __('Stay logged in') ?> </label> </div> </div> <?php endif ?> <!-- Submit Login --> <button type="submit" class="btn btn-primary login-button"> <?= __('Login') ?> </button> <?php if (Config::get('backend.password_policy.allow_reset', true) === true): ?> <!-- Forgot password? --> <p class="pull-right forgot-password"> <a href="<?= Backend::url('backend/auth/restore') ?>"> <?= __('Forgot password?') ?> </a> </p> <?php endif ?> </div> <?= Form::close() ?> <?= $this->fireViewEvent('backend.auth.extendSigninView') ?> ================================================ FILE: modules/backend/controllers/authgates/expired.php ================================================ <h2><?= __("Password Reset") ?></h2> <?= Form::ajax('onSubmit') ?> <p><?= __("Your password has expired, please create a new one for security reasons.") ?></p> <div class="form-elements" role="form"> <!-- Current Password --> <div class="form-group"> <label class="form-label" for="currentPasswordInput"> <?= __("Current Password") ?> </label> <input type="password" name="current_password" id="currentPasswordInput" value="<?= e(post('current_password')) ?>" class="form-control password" autocomplete="off" maxlength="255" /> </div> <!-- Password --> <div class="form-group"> <label class="form-label" for="passwordInput"> <?= __("New Password") ?> </label> <input type="password" name="password" id="passwordInput" value="<?= e(post('password')) ?>" class="form-control password" autocomplete="off" maxlength="255" /> </div> <!-- Confirm Password --> <div class="form-group"> <label class="form-label" for="passwordConfirmationInput"> <?= __("Confirm Password") ?> </label> <input type="password" name="password_confirmation" id="passwordConfirmationInput" value="<?= e(post('password_confirmation')) ?>" class="form-control password" autocomplete="off" maxlength="255" /> </div> <!-- Submit Login --> <button type="submit" class="btn btn-primary"> <?= __("Reset") ?> </button> <p class="pull-right forgot-password"> <a href="<?= Backend::url('backend/auth/signout') ?>" class="text-muted"> <?= e(trans('backend::lang.account.sign_out')) ?> </a> </p> </div> <?= Form::close() ?> ================================================ FILE: modules/backend/controllers/preferences/_example_code.php ================================================ form, fieldset, h5, h6, pre, blockquote, ol, dl, dt, dd, address, dd, dtm, div, td, th, hr { margin: 0; padding: 0; } body { background-color: white; font: 62.5% Helvetica, Arial, Tahoma, Verdana, Helvetica, sans-serif; } p { font-size: 12px; } ================================================ FILE: modules/backend/controllers/preferences/_field_editor_preview.php ================================================ <div id="editorpreferencesCodeeditor" class="field-codeeditor size-large position-relative h-100" data-control="codeeditor" data-font-size="<?= $model->editor_font_size ?>" data-word-wrap="<?= $model->editor_word_wrap ?>" data-code-folding="<?= $model->editor_code_folding ?>" data-tab-size="<?= $model->editor_tab_size ?>" data-theme="<?= $model->editor_theme ?>" data-show-invisibles="<?= $model->editor_show_invisibles ?>" data-highlight-active-line="<?= $model->editor_highlight_active_line ?>" data-use-soft-tabs="<?= !$model->editor_use_hard_tabs ?>" data-autocompletion="<?= $model->editor_autocompletion ?>" data-display-indent-guides="<?= $model->editor_display_indent_guides ?>" data-show-print-margin="<?= $model->editor_show_print_margin ?>" data-show-gutter="<?= $model->editor_show_gutter ? 'true' : 'false' ?>" data-language="css" data-margin="0" data-vendor-path="<?= Url::to('/modules/backend/formwidgets/codeeditor/assets/vendor/ace') ?>/"> <textarea name="editorpreferences_codeeditor"><?= e($this->makePartial('example_code')) ?></textarea> </div> ================================================ FILE: modules/backend/controllers/preferences/config_form.yaml ================================================ # =================================== # Form Behavior Config # =================================== name: "Backend Preferences" form: ~/modules/backend/models/preference/fields.yaml modelClass: Backend\Models\Preference defaultRedirect: system/settings ================================================ FILE: modules/backend/controllers/preferences/index.php ================================================ <?php if (!$this->fatalError): ?> <?= Form::open(['class'=>'layout']) ?> <div class="layout-row"> <?= $this->formRender() ?> </div> <div class="form-buttons"> <div data-control="loader-container"> <?= Ui::ajaxButton( label: __("Save Changes"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataRequestMessage: __("Saving...") ) ?> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <?= Ui::button( label: __("Cancel"), href: Backend::url('system/settings'), class: 'btn-link p-0' ) ?> </span> <span class="pull-right btn-text"> <?= Ui::ajaxButton( label: __("Reset to Default"), handler: 'onResetDefault', class: 'btn-link p-0', dataRequestData: "redirect: false", dataRequestConfirm: __("Are you sure?"), dataRequestMessage: __("Resetting...") ) ?> </span> </div> </div> <?= Form::close() ?> <?php else: ?> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to System Settings"), href: Backend::url('system/settings'), secondary: true ) ?> </p> <?php endif ?> ================================================ FILE: modules/backend/controllers/usergroups/_list_toolbar.php ================================================ <div data-control="toolbar"> <?= Ui::button( label: __("New Group"), href: Backend::url('backend/usergroups/create'), icon: 'oc-icon-plus', primary: true ) ?> </div> ================================================ FILE: modules/backend/controllers/usergroups/_relation_users.php ================================================ <?= $this->relationRender('users') ?> ================================================ FILE: modules/backend/controllers/usergroups/config_form.yaml ================================================ # =================================== # Form Behavior Config # =================================== name: backend::lang.user.group.name form: ~/modules/backend/models/usergroup/fields.yaml modelClass: Backend\Models\UserGroup defaultRedirect: backend/usergroups create: redirect: backend/usergroups/update/:id redirectClose: backend/usergroups update: redirect: backend/usergroups redirectClose: backend/usergroups ================================================ FILE: modules/backend/controllers/usergroups/config_list.yaml ================================================ # =================================== # List Behavior Config # =================================== title: backend::lang.user.group.list_title list: ~/modules/backend/models/usergroup/columns.yaml modelClass: Backend\Models\UserGroup recordUrl: backend/usergroups/update/:id noRecordsMessage: backend::lang.list.no_records recordsPerPage: 25 showSetup: true toolbar: buttons: list_toolbar search: prompt: backend::lang.list.search_prompt ================================================ FILE: modules/backend/controllers/usergroups/config_relation.yaml ================================================ # =================================== # Relation Behavior Config # =================================== users: label: backend::lang.user.group.users_count list: ~/modules/backend/models/user/columns.yaml view: toolbarButtons: add|remove ================================================ FILE: modules/backend/controllers/usergroups/create.php ================================================ <?php Block::put('breadcrumb') ?> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="<?= Backend::url('backend/usergroups') ?>"><?= __("Team Groups") ?></a></li> <li class="breadcrumb-item active" aria-current="page"><?= e(__($this->pageTitle)) ?></li> </ol> <?php Block::endPut() ?> <?php if (!$this->fatalError): ?> <?= Form::open(['class'=>'layout']) ?> <div class="layout-row"> <?= $this->formRender() ?> </div> <div class="form-buttons"> <div data-control="loader-container" class="control-loader-container"> <?= Ui::ajaxButton( label: __("Create"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Create & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataRequestData: "close: true", dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> </div> </div> <?= Form::close() ?> <?php else: ?> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to Groups List"), href: Backend::url('backend/usergroups'), secondary: true ) ?> </p> <?php endif ?> ================================================ FILE: modules/backend/controllers/usergroups/index.php ================================================ <?= $this->listRender() ?> ================================================ FILE: modules/backend/controllers/usergroups/update.php ================================================ <?php Block::put('breadcrumb') ?> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="<?= Backend::url('backend/usergroups') ?>"><?= __("Team Groups") ?></a></li> <li class="breadcrumb-item active" aria-current="page"><?= e(__($this->pageTitle)) ?></li> </ol> <?php Block::endPut() ?> <?php if (!$this->fatalError): ?> <?= Form::open(['class'=>'layout']) ?> <div class="layout-row"> <?= $this->formRender() ?> </div> <div class="form-buttons"> <div data-control="loader-container" class="control-loader-container"> <?= Ui::ajaxButton( label: __("Save"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Save & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataRequestData: "close: true", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?= Ui::iconButton( label: __("Delete"), icon: 'oc-icon-delete', handler: 'onDelete', danger: true, class: 'pull-right', dataRequestConfirm: __("Are you sure?"), dataRequestMessage: __("Deleting :name...", ['name' => $formRecordName]) ) ?> </div> </div> <?= Form::close() ?> <?php else: ?> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to Groups List"), href: Backend::url('backend/usergroups'), secondary: true ) ?> </p> <?php endif ?> ================================================ FILE: modules/backend/controllers/userroles/_action_view_as.php ================================================ <div class="field-action"> <div class="row"> <div class="col-md-8"> <h5><?= __("View As Role") ?></h5> <p><?= __("This lets you test the actions this role can perform.") ?></p> </div> <div class="col-md-4"> <div class="field-action-button"> <?= Ui::ajaxButton( label: __("View As Role"), handler: 'onImpersonateRole', secondary: true, dataStripeLoadIndicator: true ) ?> </div> </div> </div> </div> ================================================ FILE: modules/backend/controllers/userroles/_list_toolbar.php ================================================ <div data-control="toolbar"> <?= Ui::button( label: __("New Role"), href: Backend::url('backend/userroles/create'), icon: 'oc-icon-plus', primary: true ) ?> </div> ================================================ FILE: modules/backend/controllers/userroles/config_form.yaml ================================================ # =================================== # Form Behavior Config # =================================== name: backend::lang.user.role.name form: ~/modules/backend/models/userrole/fields.yaml modelClass: Backend\Models\UserRole defaultRedirect: backend/userroles create: redirect: backend/userroles/update/:id redirectClose: backend/userroles update: redirect: backend/userroles redirectClose: backend/userroles ================================================ FILE: modules/backend/controllers/userroles/config_list.yaml ================================================ # =================================== # List Behavior Config # =================================== title: backend::lang.user.role.list_title list: ~/modules/backend/models/userrole/columns.yaml modelClass: Backend\Models\UserRole recordUrl: backend/userroles/update/:id noRecordsMessage: backend::lang.list.no_records recordsPerPage: 25 showSetup: true expandLastColumn: true structure: showTree: false showReorder: true maxDepth: 1 toolbar: buttons: list_toolbar search: prompt: backend::lang.list.search_prompt ================================================ FILE: modules/backend/controllers/userroles/create.php ================================================ <?php Block::put('breadcrumb') ?> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="<?= Backend::url('backend/userroles') ?>"><?= __("Role Permissions") ?></a></li> <li class="breadcrumb-item active" aria-current="page"><?= e(__($this->pageTitle)) ?></li> </ol> <?php Block::endPut() ?> <?php if (!$this->fatalError): ?> <?= Form::open(['class'=>'layout']) ?> <div class="layout-row"> <?= $this->formRender() ?> </div> <div class="form-buttons"> <div data-control="loader-container" class="control-loader-container"> <?= Ui::ajaxButton( label: __("Create"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Create & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataRequestData: "close: true", dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> </div> </div> <?= Form::close() ?> <?php else: ?> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to Roles List"), href: Backend::url('backend/userroles'), secondary: true ) ?> </p> <?php endif ?> ================================================ FILE: modules/backend/controllers/userroles/index.php ================================================ <?= $this->listRender() ?> ================================================ FILE: modules/backend/controllers/userroles/update.php ================================================ <?php Block::put('breadcrumb') ?> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="<?= Backend::url('backend/userroles') ?>"><?= __("Role Permissions") ?></a></li> <li class="breadcrumb-item active" aria-current="page"><?= e(__($this->pageTitle)) ?></li> </ol> <?php Block::endPut() ?> <?php if (!$this->fatalError): ?> <?= Form::open(['class'=>'layout']) ?> <div class="layout-row"> <?= $this->formRender() ?> </div> <div class="form-buttons"> <div data-control="loader-container" class="control-loader-container"> <?= Ui::ajaxButton( label: __("Save"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Save & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataRequestData: "close: true", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?= Ui::iconButton( label: __("Delete"), icon: 'oc-icon-delete', handler: 'onDelete', danger: true, class: 'pull-right', dataRequestConfirm: __("Are you sure?"), dataRequestMessage: __("Deleting :name...", ['name' => $formRecordName]) ) ?> </div> </div> <?= Form::close() ?> <?php else: ?> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to Roles List"), href: Backend::url('backend/userroles'), secondary: true ) ?> </p> <?php endif ?> ================================================ FILE: modules/backend/controllers/users/_hint_trashed.php ================================================ <div class="layout-row min-size"> <div class="callout callout-danger"> <div class="header"> <i class="icon-trash"></i> <h3><?= e(trans('backend::lang.user.trashed_hint_title')) ?></h3> <p><?= e(trans('backend::lang.user.trashed_hint_desc')) ?></p> </div> </div> </div> ================================================ FILE: modules/backend/controllers/users/_list_toolbar.php ================================================ <div data-control="toolbar"> <?php if (BackendAuth::userHasAccess('admins.manage.create')): ?> <?= Ui::button( label: __("New Administrator"), href: Backend::url('backend/users/create'), icon: 'oc-icon-plus', primary: true ) ?> <?php endif ?> </div> ================================================ FILE: modules/backend/controllers/users/config_form.yaml ================================================ # =================================== # Form Behavior Config # =================================== name: backend::lang.user.name form: ~/modules/backend/models/user/fields.yaml modelClass: Backend\Models\User defaultRedirect: backend/users create: redirect: backend/users/update/:id redirectClose: backend/users update: redirect: backend/users redirectClose: backend/users permissions: modelCreate: admins.manage.create modelDelete: admins.manage.delete ================================================ FILE: modules/backend/controllers/users/config_list.yaml ================================================ # =================================== # List Behavior Config # =================================== title: backend::lang.user.list_title list: ~/modules/backend/models/user/columns.yaml filter: ~/modules/backend/models/user/scopes.yaml modelClass: Backend\Models\User recordUrl: backend/users/update/:id noRecordsMessage: backend::lang.list.no_records recordsPerPage: 20 showSetup: true # showCheckboxes: true toolbar: buttons: list_toolbar search: prompt: backend::lang.list.search_prompt ================================================ FILE: modules/backend/controllers/users/create.php ================================================ <?php Block::put('breadcrumb') ?> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="<?= Backend::url('backend/users') ?>"><?= __("Administrators") ?></a></li> <li class="breadcrumb-item active" aria-current="page"><?= e(__($this->pageTitle)) ?></li> </ol> <?php Block::endPut() ?> <?php if (!$this->fatalError): ?> <?php Block::put('form-contents') ?> <div class="layout"> <div class="layout-row"> <?= $this->formRenderOutsideFields() ?> <?= $this->formRenderPrimaryTabs() ?> </div> <div class="form-buttons"> <div data-control="loader-container" class="control-loader-container"> <?= Ui::ajaxButton( label: __("Create"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Create & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataRequestData: "close: true", dataRequestMessage: __("Creating :name...", ['name' => $formRecordName]) ) ?> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <?= Ui::button( label: __("Cancel"), href: Backend::url('backend/users'), class: 'btn-link p-0' ) ?> </span> </div> </div> </div> <?php Block::endPut() ?> <?php Block::put('form-sidebar') ?> <div class="hide-tabs"><?= $this->formRenderSecondaryTabs() ?></div> <?php Block::endPut() ?> <?php Block::put('body') ?> <?= Form::open(['class'=>'position-relative h-100']) ?> <?= $this->makeLayout('form-with-sidebar') ?> <?= Form::close() ?> <?php Block::endPut() ?> <?php else: ?> <nav class="control-breadcrumb"> <?= Block::placeholder('breadcrumb') ?> </nav> <div class="padded-container"> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to Admins List"), href: Backend::url('backend/users'), secondary: true ) ?> </p> </div> <?php endif ?> ================================================ FILE: modules/backend/controllers/users/index.php ================================================ <?= $this->listRender() ?> ================================================ FILE: modules/backend/controllers/users/myaccount.php ================================================ <?php if ($this->user->hasAccess('admins.manage')): ?> <?php Block::put('breadcrumb') ?> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="<?= Backend::url('backend/users') ?>"><?= __("Administrators") ?></a></li> <li class="breadcrumb-item active" aria-current="page"><?= e(__($this->pageTitle)) ?></li> </ol> <?php Block::endPut() ?> <?php endif ?> <?php if (!$this->fatalError): ?> <?php Block::put('form-contents') ?> <div class="layout"> <div class="layout-row"> <?= $this->formRenderOutsideFields() ?> <?= $this->formRenderPrimaryTabs() ?> </div> <div class="form-buttons"> <div data-control="loader-container" class="control-loader-container"> <?= Ui::ajaxButton( label: __("Save"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?php if ($this->user->hasAccess('admins.manage')): ?> <?= Ui::ajaxButton( label: __("Save & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataRequestData: "close: true", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?php endif ?> </div> </div> </div> <?php Block::endPut() ?> <?php Block::put('form-sidebar') ?> <div class="hide-tabs"><?= $this->formRenderSecondaryTabs() ?></div> <?php Block::endPut() ?> <?php Block::put('body') ?> <?= Form::open(['class'=>'position-relative h-100']) ?> <?= $this->makeLayout('form-with-sidebar') ?> <?= Form::close() ?> <?php Block::endPut() ?> <?php else: ?> <nav class="control-breadcrumb"> <?= Block::placeholder('breadcrumb') ?> </nav> <div class="padded-container"> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to Admins List"), href: Backend::url('backend/users'), secondary: true ) ?> </p> </div> <?php endif ?> ================================================ FILE: modules/backend/controllers/users/update.php ================================================ <?php Block::put('breadcrumb') ?> <ol class="breadcrumb"> <li class="breadcrumb-item"><a href="<?= Backend::url('backend/users') ?>"><?= __("Administrators") ?></a></li> <li class="breadcrumb-item active" aria-current="page"><?= e(__($this->pageTitle)) ?></li> </ol> <?php Block::endPut() ?> <?php if (!$this->fatalError): ?> <?php Block::put('form-contents') ?> <?php if ($formModel->trashed()): ?> <?= $this->makePartial('hint_trashed') ?> <?php endif ?> <div class="layout"> <div class="layout-row"> <?= $this->formRenderOutsideFields() ?> <?= $this->formRenderPrimaryTabs() ?> </div> <div class="form-buttons"> <div data-control="loader-container" class="control-loader-container"> <?= Ui::ajaxButton( label: __("Save"), handler: 'onSave', primary: true, hotkey: ['ctrl+s', 'cmd+s'], dataRequestData: "redirect: false", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <?= Ui::ajaxButton( label: __("Save & Close"), handler: 'onSave', secondary: true, hotkey: ['ctrl+enter', 'cmd+enter'], dataRequestData: "close: true", dataRequestMessage: __("Saving :name...", ['name' => $formRecordName]) ) ?> <span class="btn-text"> <span class="button-separator"><?= __("or") ?></span> <?= Ui::button( label: __("Cancel"), href: Backend::url('backend/users'), class: 'btn-link p-0' ) ?> </span> <?php if (BackendAuth::userHasAccess('admins.manage.delete')): ?> <?php if ($formModel->trashed()): ?> <?= Ui::iconButton( label: __("Restore"), icon: 'oc-icon-user-plus', handler: 'onRestore', class: 'info pull-right', dataRequestConfirm: __("Are you sure?"), dataRequestMessage: __("Restoring :name...", ['name' => $formRecordName]) ) ?> <?php else: ?> <?= Ui::iconButton( label: __("Delete"), icon: 'oc-icon-delete', handler: 'onDelete', danger: true, class: 'pull-right', dataRequestConfirm: __("Are you sure?"), dataRequestMessage: __("Deleting :name...", ['name' => $formRecordName]) ) ?> <?php endif ?> <?php endif ?> </div> </div> </div> <?php Block::endPut() ?> <?php Block::put('form-sidebar') ?> <div class="hide-tabs"><?= $this->formRenderSecondaryTabs() ?></div> <?php Block::endPut() ?> <?php Block::put('body') ?> <?= Form::open(['class'=>'position-relative h-100']) ?> <?= $this->makeLayout('form-with-sidebar') ?> <?= Form::close() ?> <?php Block::endPut() ?> <?php else: ?> <nav class="control-breadcrumb"> <?= Block::placeholder('breadcrumb') ?> </nav> <div class="padded-container"> <p class="flash-message static error"><?= e(__($this->fatalError)) ?></p> <p> <?= Ui::button( label: __("Return to Admins List"), href: Backend::url('backend/users'), secondary: true ) ?> </p> </div> <?php endif ?> ================================================ FILE: modules/backend/database/migrations/2013_10_01_000001_Db_Backend_Users.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::create('backend_users', function (Blueprint $table) { $table->increments('id'); $table->string('first_name')->nullable(); $table->string('last_name')->nullable(); $table->string('login')->unique('login_unique')->index('login_index'); $table->string('email')->unique('email_unique'); $table->string('password'); $table->string('activation_code')->nullable()->index('act_code_index'); $table->string('persist_code')->nullable(); $table->string('reset_password_code')->nullable()->index('reset_code_index'); $table->mediumText('permissions')->nullable(); $table->boolean('is_activated')->default(false); $table->boolean('is_superuser')->default(false); $table->timestamp('activated_at')->nullable(); $table->timestamp('last_login')->nullable(); $table->timestamp('deleted_at')->nullable(); $table->integer('role_id')->unsigned()->nullable()->index('admin_role_index'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('backend_users'); } }; ================================================ FILE: modules/backend/database/migrations/2013_10_01_000002_Db_Backend_User_Groups.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::create('backend_user_groups', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unique('name_unique'); $table->string('code')->nullable()->index('code_index'); $table->text('description')->nullable(); $table->boolean('is_new_user_default')->default(false); $table->timestamps(); }); } public function down() { Schema::dropIfExists('backend_user_groups'); } }; ================================================ FILE: modules/backend/database/migrations/2013_10_01_000003_Db_Backend_Users_Groups.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::create('backend_users_groups', function (Blueprint $table) { $table->integer('user_id')->unsigned(); $table->integer('user_group_id')->unsigned(); $table->primary(['user_id', 'user_group_id'], 'user_group'); }); } public function down() { Schema::dropIfExists('backend_users_groups'); } }; ================================================ FILE: modules/backend/database/migrations/2013_10_01_000004_Db_Backend_User_Throttle.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::create('backend_user_throttle', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned()->nullable()->index(); $table->string('ip_address')->nullable()->index(); $table->integer('attempts')->default(0); $table->timestamp('last_attempt_at')->nullable(); $table->boolean('is_suspended')->default(0); $table->timestamp('suspended_at')->nullable(); $table->boolean('is_banned')->default(0); $table->timestamp('banned_at')->nullable(); }); } public function down() { Schema::dropIfExists('backend_user_throttle'); } }; ================================================ FILE: modules/backend/database/migrations/2014_01_04_000005_Db_Backend_User_Preferences.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::create('backend_user_preferences', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->string('namespace', 100); $table->string('group', 50); $table->string('item', 150); $table->text('value')->nullable(); $table->index(['user_id', 'namespace', 'group', 'item'], 'user_item_index'); }); } public function down() { Schema::dropIfExists('backend_user_preferences'); } }; ================================================ FILE: modules/backend/database/migrations/2014_10_01_000006_Db_Backend_Access_Log.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::create('backend_access_log', function (Blueprint $table) { $table->increments('id'); $table->integer('user_id')->unsigned(); $table->string('ip_address')->nullable(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('backend_access_log'); } }; ================================================ FILE: modules/backend/database/migrations/2017_10_01_000010_Db_Backend_User_Roles.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::create('backend_user_roles', function (Blueprint $table) { $table->increments('id'); $table->string('name')->unique('role_unique'); $table->string('code')->nullable()->index('role_code_index'); $table->string('color_background')->nullable(); $table->text('description')->nullable(); $table->mediumText('permissions')->nullable(); $table->boolean('is_system')->default(0); $table->integer('sort_order')->nullable(); $table->timestamps(); }); } public function down() { Schema::dropIfExists('backend_user_roles'); } }; ================================================ FILE: modules/backend/database/migrations/2018_12_16_000011_Db_Backend_Add_Deleted_At.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { if (!Schema::hasColumn('backend_users', 'deleted_at')) { Schema::table('backend_users', function (Blueprint $table) { $table->timestamp('deleted_at')->nullable()->after('updated_at'); }); } } public function down() { if (Schema::hasColumn('backend_users', 'deleted_at')) { Schema::table('backend_users', function (Blueprint $table) { $table->dropColumn('deleted_at'); }); } } }; ================================================ FILE: modules/backend/database/migrations/2022_10_01_000012_Db_Backend_User_Roles_Sortable.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { if (!Schema::hasColumns('backend_user_roles', ['sort_order', 'color_background'])) { Schema::table('backend_user_roles', function (Blueprint $table) { $table->integer('sort_order')->nullable(); $table->string('color_background')->nullable(); }); } } public function down() { if (Schema::hasColumn('backend_user_roles', 'sort_order')) { Schema::dropColumns('backend_user_roles', 'sort_order'); } if (Schema::hasColumn('backend_user_roles', 'color_background')) { Schema::dropColumns('backend_user_roles', 'color_background'); } } }; ================================================ FILE: modules/backend/database/migrations/2023_10_01_000013_Db_Add_Site_To_Preferences.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::table('backend_user_preferences', function (Blueprint $table) { $table->integer('site_id')->nullable()->unsigned(); $table->integer('site_root_id')->nullable()->unsigned(); }); } public function down() { if (Schema::hasColumn('backend_user_preferences', 'site_id')) { Schema::dropColumns('backend_user_preferences', 'site_id'); } if (Schema::hasColumn('backend_user_preferences', 'site_root_id')) { Schema::dropColumns('backend_user_preferences', 'site_root_id'); } } }; ================================================ FILE: modules/backend/database/migrations/2023_10_01_000014_Db_Add_User_Expired_Password.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::table('backend_users', function (Blueprint $table) { $table->boolean('is_password_expired')->default(false); $table->timestamp('password_changed_at')->nullable(); }); } public function down() { Schema::table('backend_users', function (Blueprint $table) { $table->dropColumn('is_password_expired'); $table->dropColumn('password_changed_at'); }); } }; ================================================ FILE: modules/backend/database/migrations/2024_10_01_000017_Db_Migrate_v4_0_0.php ================================================ <?php use October\Rain\Database\Schema\Blueprint; use October\Rain\Database\Updates\Migration; return new class extends Migration { public function up() { Schema::dropIfExists('backend_dashboards'); Schema::dropIfExists('backend_report_data_cache'); } public function down() { } }; ================================================ FILE: modules/backend/database/seeds/DatabaseSeeder.php ================================================ <?php namespace Backend\Database\Seeds; use Seeder; use Model; /** * DatabaseSeeder */ class DatabaseSeeder extends Seeder { /** * run the database seeds. */ public function run() { Model::unguard(); $this->call(\Backend\Database\Seeds\SeedSetupAdmin::class, true); // @vuedashboard // $this->call(\Backend\Database\Seeds\DefaultDashboard::class, true); Model::reguard(); } } ================================================ FILE: modules/backend/database/seeds/SeedSetupAdmin.php ================================================ <?php namespace Backend\Database\Seeds; use Seeder; use Backend\Models\UserRole; use Backend\Models\UserGroup; /** * SeedSetupAdmin */ class SeedSetupAdmin extends Seeder { public function run() { UserRole::create([ 'name' => 'Developer', 'code' => UserRole::CODE_DEVELOPER, 'description' => 'Site administrator with access to developer tools.', 'color_background' => '#3498db', 'sort_order' => 1 ]); UserRole::create([ 'name' => 'Publisher', 'code' => UserRole::CODE_PUBLISHER, 'description' => 'Site editor with access to publishing tools.', 'color_background' => '#1abc9c', 'sort_order' => 2 ]); UserGroup::create([ 'name' => 'Owners', 'code' => UserGroup::CODE_OWNERS, 'description' => 'Default group for website owners.', 'is_new_user_default' => false ]); } } ================================================ FILE: modules/backend/facades/Backend.php ================================================ <?php namespace Backend\Facades; use October\Rain\Support\Facade; /** * Backend facade * * @method static string assetVersion() * @method static string uri() * @method static string url(string $path = null, mixed $parameters = [], bool|null $secure = null) * @method static string baseUrl(string $path = null) * @method static string skinAsset(string $path = null) * @method static \Illuminate\Http\RedirectResponse redirect(string $path, int $status = 302, array $headers = [], bool|null $secure = null) * @method static \Illuminate\Http\RedirectResponse redirectGuest(string $path, int $status = 302, array $headers = [], bool|null $secure = null) * @method static \Illuminate\Http\RedirectResponse redirectIntended(string $path, int $status = 302, array $headers = [], bool|null $secure = null) * @method static \Carbon\Carbon makeCarbon(mixed $value, bool $throwException = true) * @method static string date(mixed $dateTime, array $options = []) * @method static string dateTime(mixed $dateTime, array $options = []) * @method static int sizeToPixels(mixed $size) * * @see \Backend\Helpers\Backend */ class Backend extends Facade { /** * getFacadeAccessor returns the registered name of the component * @return string */ protected static function getFacadeAccessor() { return 'backend.helper'; } } ================================================ FILE: modules/backend/facades/BackendAuth.php ================================================ <?php namespace Backend\Facades; use October\Rain\Support\Facade; /** * BackendAuth * @see \Backend\Classes\AuthManager */ class BackendAuth extends Facade { /** * getFacadeAccessor returns the registered name of the component * @return string */ protected static function getFacadeAccessor() { return 'backend.auth'; } } ================================================ FILE: modules/backend/facades/BackendMenu.php ================================================ <?php namespace Backend\Facades; use October\Rain\Support\Facade; /** * BackendMenu * * @method static void setContext(string $owner, string $mainMenuItemCode, string $sideMenuItemCode = null) * @method static void setContextOwner(string $owner) * @method static void setContextMainMenu(string $mainMenuItemCode) * @method static void setContextSideMenu(string $sideMenuItemCode) * @method static void setTailorContext(string $handle, string $sideMenuItemCode = null) * @method static void setTailorContextUuid(string $uuid, string $sideMenuItemCode = null) * @method static bool isMainMenuItemActive(\Backend\Classes\MainMenuItem $item) * @method static bool isSideMenuItemActive(\Backend\Classes\SideMenuItem $item) * @method static bool isDashboardItemActive() * @method static object getContext() * * @see \Backend\Classes\NavigationManager */ class BackendMenu extends Facade { /** * getFacadeAccessor returns the registered name of the component * @return string */ protected static function getFacadeAccessor() { return 'backend.menu'; } } ================================================ FILE: modules/backend/facades/BackendUi.php ================================================ <?php namespace Backend\Facades; use October\Rain\Support\Facade; /** * @deprecated see System\Facades\Ui */ class BackendUi extends Facade { /** * getFacadeAccessor returns the registered name of the component * @return string */ protected static function getFacadeAccessor() { return 'system.ui'; } } ================================================ FILE: modules/backend/filterwidgets/Date.php ================================================ <?php namespace Backend\FilterWidgets; use Db; use DbDongle; use Date as DateFacade; use Backend\Classes\FilterWidgetBase; use Exception; /** * Date filter * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Date extends FilterWidgetBase { const CONDITION_EQUALS = 'equals'; const CONDITION_NOT_EQUALS = 'notEquals'; const CONDITION_BETWEEN = 'between'; const CONDITION_BEFORE = 'before'; const CONDITION_AFTER = 'after'; /** * init */ public function init() { $scope = $this->filterScope; if (!$scope->conditions) { $scope->conditions = [ self::CONDITION_EQUALS => true, self::CONDITION_NOT_EQUALS => true, self::CONDITION_BETWEEN => true, self::CONDITION_BEFORE => true, self::CONDITION_AFTER => true ]; } if (!$scope->minDate) { $scope->minDate = '1970-01-01'; } if (!$scope->maxDate) { $scope->maxDate = '2199-12-31'; } if (!$scope->firstDay) { $scope->firstDay = 0; } if (!$scope->yearRange) { $scope->yearRange = 10; } if ($scope->useTimezone === null) { $scope->useTimezone = true; } } /** * @inheritDoc */ protected function loadAssets() { $this->addJs('js/datefilter.js'); } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('date'); } /** * renderForm the form to use for filtering */ public function renderForm() { $this->prepareVars(); return $this->makePartial('date_form'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['scope'] = $this->filterScope; } /** * getActiveValue */ public function getActiveValue() { if (post('clearScope')) { return null; } $value = post('Filter'); $condition = post('Filter[condition]'); if ($condition === self::CONDITION_BETWEEN) { if (!$this->hasPostValue('beforeRaw') && !$this->hasPostValue('afterRaw')) { return null; } if (!$this->hasPostValue('beforeRaw')) { $value['value'] = post('Filter[after]'); $value['valueRaw'] = post('Filter[afterRaw]'); $value['condition'] = self::CONDITION_AFTER; } elseif (!$this->hasPostValue('afterRaw')) { $value['value'] = post('Filter[before]'); $value['valueRaw'] = post('Filter[beforeRaw]'); $value['condition'] = self::CONDITION_BEFORE; } } else { if (!$this->hasPostValue('valueRaw')) { return null; } } return $value; } /** * applyScopeToQuery */ public function applyScopeToQuery($query) { $scope = $this->filterScope; // Scope if ($scope->modelScope) { $scope->applyScopeMethodToQuery($query); return; } // Condition $scopeConditions = (array) $scope->conditions; $activeCondition = $scope->condition; // Raw SQL query $sqlCondition = $scopeConditions[$activeCondition] ?? null; if (is_string($sqlCondition)) { // @deprecated adapt legacy format $sqlCondition = str_replace(["':filtered'", "':value'", "':valueDate'", "':after'", "':afterDate'", "':before'", "':beforeDate'"], [':value', ':value', ':valueDate', ':after', ':afterDate', ':before', ':beforeDate'], $sqlCondition); $query->whereRaw(DbDongle::parse($sqlCondition, [ 'value' => $this->parseDate($scope->value), 'valueDate' => $this->parseDate($scope->value, ['isDateOnly' => true]), 'after' => $this->parseDate($scope->after), 'afterDate' => $this->parseDate($scope->after, ['isDateOnly' => true]), 'before' => $this->parseDate($scope->before), 'beforeDate' => $this->parseDate($scope->before, ['isDateOnly' => true]), ])); return; } // Default query if ($activeCondition === self::CONDITION_EQUALS) { $query ->where($this->valueFrom, '>=', $this->parseDate($scope->value, ['returnObject' => true])) ->where($this->valueFrom, '<=', $this->parseDate($scope->value, ['returnObject' => true, 'isEndOfDay' => true])); return; } if ($activeCondition === self::CONDITION_NOT_EQUALS) { $query ->where(function($query) use ($scope) { $query ->where($this->valueFrom, '>', $this->parseDate($scope->value, ['returnObject' => true, 'isEndOfDay' => true])) ->orWhere($this->valueFrom, '<', $this->parseDate($scope->value, ['returnObject' => true])); }); return; } if ($activeCondition === self::CONDITION_BETWEEN) { $query ->where($this->valueFrom, '>=', $this->parseDate($scope->after, ['returnObject' => true])) ->where($this->valueFrom, '<=', $this->parseDate($scope->before, ['returnObject' => true])); return; } if ($activeCondition === self::CONDITION_AFTER) { $query->where($this->valueFrom, '>=', $this->parseDate($scope->value, ['returnObject' => true])); return; } if ($activeCondition === self::CONDITION_BEFORE) { $query->where($this->valueFrom, '<=', $this->parseDate($scope->value, ['returnObject' => true])); return; } } /** * parseDate for SQL */ public function parseDate($value, array $options = []) { extract(array_merge([ 'isDateOnly' => false, 'isEndOfDay' => false, 'returnObject' => false, ], $options)); try { if (is_int($value)) { $date = DateFacade::createFromTimestamp($value); } elseif (strtolower($value) === 'now') { $date = DateFacade::now()->startOfDay(); } else { $date = DateFacade::parse($value); } if ($isEndOfDay) { $date = $date->copy()->addDay()->addMinutes(-1); } if ($returnObject) { return $date; } if ($isDateOnly) { return $date->format('Y-m-d'); } return $date->format('Y-m-d H:i:s'); } catch (Exception $ex) { if ($returnObject) { return $value; } return Db::getPdo()->quote($value); } } /** * getConditionLang */ public function getConditionLang($condition) { switch ($condition) { case self::CONDITION_EQUALS: return __('is equal to'); case self::CONDITION_NOT_EQUALS: return __('not equal to'); case self::CONDITION_BETWEEN: return __('is between'); case self::CONDITION_BEFORE: return __('is before'); case self::CONDITION_AFTER: return __('is after'); } } } ================================================ FILE: modules/backend/filterwidgets/Group.php ================================================ <?php namespace Backend\FilterWidgets; use Db; use Str; use Lang; use DbDongle; use Backend\Classes\FilterWidgetBase; use October\Rain\Element\ElementHolder; use October\Rain\Html\Helper as HtmlHelper; use ApplicationException; /** * Group filter * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Group extends FilterWidgetBase { const MODE_EXCLUDE = 'exclude'; const MODE_INCLUDE = 'include'; /** * @inheritDoc */ protected function loadAssets() { $this->addJs('js/groupfilter.js'); } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('group'); } /** * renderForm the form to use for filtering */ public function renderForm() { $this->prepareVars(); return $this->makePartial('group_form'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['scope'] = $this->filterScope; } /** * getActiveValue */ public function getActiveValue() { if (post('clearScope')) { return null; } $value = post('Filter'); if (!$this->hasPostValue('value')) { return null; } $value['value'] = json_decode($value['value'], true); if (!$value['value']) { return null; } // @deprecated this is to keep support with v1 API where values were inside the keys $value['value'] = array_combine($value['value'], $value['value']); return $value; } /** * applyScopeToQuery */ public function applyScopeToQuery($query) { $scope = $this->filterScope; // Scope if ($scope->modelScope) { $scope->applyScopeMethodToQuery($query); return; } // Active value $activeValue = (array) $scope->value; if (!count($activeValue)) { return; } // Raw SQL query $sqlCondition = $scope->conditions; if (is_string($sqlCondition)) { $filtered = implode(',', array_build($activeValue, function ($key, $_value) { return [$key, Db::getPdo()->quote($_value)]; })); $query->whereRaw(DbDongle::parse(strtr($sqlCondition, [ ':filtered' => $filtered, ':value' => $filtered, ]))); return; } // Check for null existence check if (($nullKey = array_search(null, $activeValue)) !== false) { unset($activeValue[$nullKey]); } // Default query $activeField = HtmlHelper::nameToDot($this->valueFrom); if ($this->model) { $action = $scope->mode === static::MODE_EXCLUDE ? 'whereDoesntHave' : 'whereHas'; $query->{$action}($activeField, function($q) use ($activeValue) { $q->whereIn($q->getModel()->getQualifiedKeyName(), $activeValue); }); if ($nullKey !== false) { $query->orDoesntHave($activeField); } } elseif ($this->isJsonable) { $action = $scope->mode === static::MODE_EXCLUDE ? 'whereJsonDoesntContain' : 'whereJsonContains'; $query->{$action}($this->valueFrom, array_values($activeValue)); } else { $action = $scope->mode === static::MODE_EXCLUDE ? 'whereNotIn' : 'whereIn'; $query->{$action}($this->valueFrom, $activeValue); if ($nullKey !== false) { $query->orWhereNull($this->valueFrom); } } } /** * onGetGroupOptions */ public function onGetGroupOptions() { $scope = $this->filterScope; $searchQuery = post('search'); $available = $this->getAvailableOptions($searchQuery); $active = $searchQuery ? [] : $this->filterActiveOptions((array) $scope->value, $available); return [ 'options' => [ 'available' => $this->optionsToAjax($available), 'active' => $this->optionsToAjax($active), ] ]; } /** * getAvailableOptions returns the available options a scope can use, either from the * model relation or from a supplied array. Optionally apply a search constraint * to the options */ protected function getAvailableOptions(?string $searchQuery = null): array { $available = []; $scope = $this->filterScope; if ($scope->options || $scope->optionsMethod) { $available = $this->getOptionsFromArray($searchQuery); } else { $nameColumn = $scope->nameFrom; $options = $this->getOptionsFromModel($searchQuery); foreach ($options as $option) { $available[$option->getKey()] = $option->{$nameColumn}; } } if ($scope->emptyOption) { $available = ['' => Lang::get($scope->emptyOption)] + $available; } return $available; } /** * filterActiveOptions removes any already selected options from the available options, * returns a newly built array */ protected function filterActiveOptions(array $activeKeys, array $availableOptions): array { $active = []; foreach ($availableOptions as $id => $option) { if (!in_array($id, $activeKeys)) { continue; } $active[$id] = $option; } return $active; } /** * getOptionsFromModel looks at the model for defined scope items. * @return Collection */ protected function getOptionsFromModel($searchQuery = null) { $scope = $this->filterScope; $model = $this->model; $query = $model->newQuery(); $query->limit(200); // Apply a model scope to the options query if ($scope->optionsScope) { $scope->applyScopeMethodToQuery($query, $scope->optionsScope); } // Extensibility $this->getParentFilter()->extendScopeModelQuery($scope, $query); if (!$searchQuery) { // If scope has active filter(s) run additional query and merge it with base query if ($scope->value) { $modelIds = array_keys((array) $scope->value); $activeOptions = $model->newQuery()->findMany($modelIds); } $modelOptions = isset($activeOptions) ? $query->get()->merge($activeOptions) : $query->get(); return $modelOptions; } $searchFields = [$model->getKeyName(), $scope->nameFrom]; return $query->searchWhere($searchQuery, $searchFields)->get(); } /** * getOptionsFromArray looks at the defined set of options for scope items, or the model method. * @return array */ protected function getOptionsFromArray($searchQuery = null) { // Load the data $model = $this->model; $scope = $this->filterScope; $options = $scope->optionsMethod ?: $scope->options; // Calling via ClassName::method if (is_string($options)) { if ( count($staticMethod = explode('::', $options)) === 2 && is_callable($staticMethod) ) { $options = $staticMethod($model, $scope); if (!is_array($options)) { throw new ApplicationException(Lang::get('backend::lang.field.options_static_method_invalid_value', [ 'class' => $staticMethod[0], 'method' => $staticMethod[1] ])); } } // Calling via $model->method else { $methodName = $options; if (!$model->methodExists($methodName)) { throw new ApplicationException(Lang::get('backend::lang.filter.options_method_not_exists', [ 'model' => get_class($model), 'method' => $methodName, 'filter' => $scope->scopeName ])); } // For passing to events // @deprecated v4 review this interface to closer resemble the form field // interface (FormField and FilterScope) $holder = new ElementHolder($this->getParentFilter()->getScopes()); $options = $model->$methodName($holder); } } if (!is_array($options)) { $options = []; } // Apply the search $searchQuery = Str::lower($searchQuery); if (strlen($searchQuery)) { $options = $this->filterOptionsBySearch($options, $searchQuery); } return $options; } /** * filterOptionsBySearch filters an array of options by a search term. * @param array $options * @param string $query * @return array */ protected function filterOptionsBySearch($options, $query) { $filteredOptions = []; $optionMatchesSearch = function ($words, $option) { foreach ($words as $word) { $word = trim($word); if (!strlen($word)) { continue; } if (!Str::contains(Str::lower($option), $word)) { return false; } } return true; }; // Exact foreach ($options as $index => $option) { if (Str::is(Str::lower($option), $query)) { $filteredOptions[$index] = $option; unset($options[$index]); } } // Fuzzy $words = explode(' ', $query); foreach ($options as $index => $option) { if ($optionMatchesSearch($words, $option)) { $filteredOptions[$index] = $option; } } return $filteredOptions; } /** * optionsToAjax converts a key/pair array to a named array {id: 1, name: 'Foobar'} */ protected function optionsToAjax(array $options): array { $processed = []; foreach ($options as $id => $result) { $name = is_array($result) ? ($result[0] ?? '') : $result; $processed[] = ['id' => $id, 'name' => __($name)]; } return $processed; } } ================================================ FILE: modules/backend/filterwidgets/Number.php ================================================ <?php namespace Backend\FilterWidgets; use Db; use DbDongle; use Backend\Classes\FilterWidgetBase; /** * Number filter * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Number extends FilterWidgetBase { const CONDITION_EQUALS = 'equals'; const CONDITION_BETWEEN = 'between'; const CONDITION_GREATER = 'greater'; const CONDITION_LESSER = 'lesser'; /** * init */ public function init() { $scope = $this->filterScope; if (!$scope->conditions) { $scope->conditions = [ self::CONDITION_EQUALS => true, self::CONDITION_BETWEEN => true, self::CONDITION_GREATER => true, self::CONDITION_LESSER => true ]; } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('number'); } /** * renderForm the form to use for filtering */ public function renderForm() { $this->prepareVars(); return $this->makePartial('number_form'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['scope'] = $this->filterScope; } /** * getActiveValue */ public function getActiveValue() { if (post('clearScope')) { return null; } $value = post('Filter'); $condition = post('Filter[condition]'); if ($condition === self::CONDITION_BETWEEN) { if (!$this->hasPostValue('min') && !$this->hasPostValue('max')) { return null; } if (!$this->hasPostValue('min')) { $value['value'] = post('Filter[max]'); $value['condition'] = self::CONDITION_LESSER; } elseif (!$this->hasPostValue('max')) { $value['value'] = post('Filter[min]'); $value['condition'] = self::CONDITION_GREATER; } } else { if (!$this->hasPostValue('value')) { return null; } } return $value; } /** * applyScopeToQuery */ public function applyScopeToQuery($query) { $scope = $this->filterScope; // Scope if ($scope->modelScope) { $scope->applyScopeMethodToQuery($query); return; } // Condition $scopeConditions = (array) $scope->conditions; $activeCondition = $scope->condition; // Raw SQL query $sqlCondition = $scopeConditions[$activeCondition] ?? null; if (is_string($sqlCondition)) { $query->whereRaw(DbDongle::parse(strtr($sqlCondition, [ ':filtered' => $this->parseNumber($scope->value), ':value' => $this->parseNumber($scope->value), ':min' => $this->parseNumber($scope->min), ':max' => $this->parseNumber($scope->max), ]))); return; } // Default query if ($activeCondition === self::CONDITION_EQUALS) { $query->where($this->valueFrom, $scope->value); return; } if ($activeCondition === self::CONDITION_BETWEEN) { $query ->where($this->valueFrom, '>=', $scope->min) ->where($this->valueFrom, '<=', $scope->max); return; } if ($activeCondition === self::CONDITION_GREATER) { $query->where($this->valueFrom, '>=', $scope->value); return; } if ($activeCondition === self::CONDITION_LESSER) { $query->where($this->valueFrom, '<=', $scope->value); return; } } /** * parseNumber for SQL */ public function parseNumber($value, array $options = []) { if (!is_numeric($value)) { return ''; } // Arithmetic operator return +$value; } /** * getConditionLang */ public function getConditionLang($condition) { switch ($condition) { case self::CONDITION_EQUALS: return __('is equal to'); case self::CONDITION_BETWEEN: return __('is between'); case self::CONDITION_GREATER: return __('is greater than'); case self::CONDITION_LESSER: return __('is less than'); } } } ================================================ FILE: modules/backend/filterwidgets/Text.php ================================================ <?php namespace Backend\FilterWidgets; use Db; use DbDongle; use Backend\Classes\FilterWidgetBase; /** * Text filter * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Text extends FilterWidgetBase { const CONDITION_EQUALS = 'equals'; const CONDITION_CONTAINS = 'contains'; /** * init */ public function init() { $scope = $this->filterScope; if (!$scope->conditions) { $scope->conditions = [ self::CONDITION_EQUALS => true, self::CONDITION_CONTAINS => true ]; } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('text'); } /** * renderForm the form to use for filtering */ public function renderForm() { $this->prepareVars(); return $this->makePartial('text_form'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['scope'] = $this->filterScope; } /** * getActiveValue */ public function getActiveValue() { if (post('clearScope')) { return null; } if (!$this->hasPostValue('value')) { return null; } return post('Filter'); } /** * applyScopeToQuery */ public function applyScopeToQuery($query) { $scope = $this->filterScope; // Scope if ($scope->modelScope) { $scope->applyScopeMethodToQuery($query); return; } // Condition $scopeConditions = (array) $scope->conditions; $activeCondition = $scope->condition; $activeValue = $scope->value; // Raw SQL query $sqlCondition = $scopeConditions[$activeCondition] ?? null; if (is_string($sqlCondition)) { $query->whereRaw(DbDongle::parse($sqlCondition, [ 'value' => $activeValue, ])); return; } // Default query if ($activeCondition === self::CONDITION_CONTAINS) { $query->where($this->valueFrom, 'LIKE', '%'.$activeValue.'%'); return; } $query->where($this->valueFrom, $activeValue); } /** * getConditionLang */ public function getConditionLang($condition) { switch ($condition) { case self::CONDITION_EQUALS: return __('is equal to'); case self::CONDITION_CONTAINS: return __('contains'); } } } ================================================ FILE: modules/backend/filterwidgets/date/assets/js/datefilter.js ================================================ /* * DateFilter plugin * * Data attributes: * - data-control="datefilter" - enables the plugin on an element * - data-data-locker="input#locker" - Input element to store and restore the chosen color * * JavaScript API: * $('div#someElement').dateFilter({ dataLocker: 'input#locker' }) * * Dependencies: * - Some other plugin (filename.js) */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype; var DateFilter = function(element, options) { this.options = options; this.$el = $(element); this.$pickers = $('[data-datepicker]', this.$el); $.oc.foundation.controlUtils.markDisposable(element); Base.call(this); this.init(); } DateFilter.prototype = Object.create(BaseProto); DateFilter.prototype.constructor = DateFilter; DateFilter.DEFAULTS = { } DateFilter.prototype.init = function() { this.dbDateTimeFormat = 'YYYY-MM-DD HH:mm:ss'; this.dbDateFormat = 'YYYY-MM-DD'; this.initRegion(); this.initDatePickers(); } DateFilter.prototype.initDatePickers = function() { var self = this, scopeData = this.$el.data('scope-data'); this.$pickers.each(function(index, datepicker) { var $datepicker = $(datepicker), defaultValue = self.getDatePickerValue($datepicker); var pikadayOptions = { minDate: new Date(scopeData.minDate), maxDate: new Date(scopeData.maxDate), firstDay: scopeData.firstDay, yearRange: scopeData.yearRange, showWeekNumber: scopeData.showWeekNumber, setDefaultDate: defaultValue !== '' ? defaultValue.toDate() : '', format: self.getDateFormat(), i18n: self.getLang('datepicker'), onSelect: function() { self.onSelectDatePicker.call(self, this, $datepicker); } } if (defaultValue !== '') { $datepicker.val(defaultValue.format(self.getDateFormat())); } $datepicker.pikaday(pikadayOptions); }); } DateFilter.prototype.onSelectDatePicker = function(datepicker, $input) { var pickerMoment = datepicker.getMoment(), pickerValue = pickerMoment.format(this.dbDateTimeFormat); // Convert from user preference to UTC var momentObj = moment .tz(pickerValue, this.dbDateTimeFormat, this.timezone) .tz(this.appTimezone); var lockerValue = momentObj.format(this.dbDateTimeFormat); this.setDataLocker($input, lockerValue); } DateFilter.prototype.getDatePickerValue = function($datepicker) { var rawValue = $datepicker.val(); if (rawValue !== '') { rawValue = this.makeMoment(rawValue, this.getDateFormat()); } // Look at the locker for the default value if (!rawValue) { rawValue = this.getDataLocker($datepicker) if (rawValue !== '') { rawValue = this.makeMoment(rawValue, this.dbDateFormat); } } return rawValue; } DateFilter.prototype.makeMoment = function(value, format) { if (value === 'now') { return moment(); } return moment(value, format); } DateFilter.prototype.getDataLocker = function(picker) { var $picker = $(picker), $locker = $('#' + $picker.data('datepicker-target')); return $locker.val(); } DateFilter.prototype.setDataLocker = function(picker, value) { var $picker = $(picker), $locker = $('#' + $picker.data('datepicker-target')); $locker.val(value); } DateFilter.prototype.initRegion = function() { this.locale = $('meta[name="backend-locale"]').attr('content'); this.timezone = $('meta[name="backend-timezone"]').attr('content'); this.appTimezone = $('meta[name="app-timezone"]').attr('content'); if (!this.appTimezone) { this.appTimezone = 'UTC'; } if (!this.timezone) { this.timezone = 'UTC'; } // Set both timezones to UTC to disable converting between them var scopeData = this.$el.data('scope-data'); if (!scopeData.useTimezone) { this.appTimezone = 'UTC'; this.timezone = 'UTC'; } } DateFilter.prototype.dispose = function() { this.$el.off('dispose-control', this.proxy(this.dispose)); this.$el.removeData('oc.datefilter'); this.$el = null; this.options = null; BaseProto.dispose.call(this); } DateFilter.prototype.getDateFormat = function () { if (this.locale) { return moment() .locale(this.locale) .localeData() .longDateFormat('l'); } return this.dbDateFormat; } DateFilter.prototype.getLang = function(name, defaultValue) { if ($.oc === undefined || $.oc.lang === undefined) { return defaultValue; } return $.oc.lang.get(name, defaultValue); } // DATEFILTER PLUGIN DEFINITION // ============================ var old = $.fn.dateFilter; $.fn.dateFilter = function (option) { var args = Array.prototype.slice.call(arguments, 1), result this.each(function () { var $this = $(this); var data = $this.data('oc.datefilter'); var options = $.extend({}, DateFilter.DEFAULTS, $this.data(), typeof option == 'object' && option); if (!data) $this.data('oc.datefilter', (data = new DateFilter(this, options))); if (typeof option == 'string') result = data[option].apply(data, args); if (typeof result != 'undefined') return false; }); return result ? result : this; } $.fn.dateFilter.Constructor = DateFilter; // DATEFILTER NO CONFLICT // ================= $.fn.dateFilter.noConflict = function () { $.fn.dateFilter = old; return this; } // DATEFILTER DATA-API // =============== $(document).render(function() { $('[data-control="datefilter"]').dateFilter(); }); }(window.jQuery); ================================================ FILE: modules/backend/filterwidgets/date/partials/_date.php ================================================ <a href="javascript:;" class="filter-scope <?= $scope->scopeValue ? 'active' : '' ?>" data-scope-name="<?= $scope->scopeName ?>" > <span class="filter-label"><?= e($this->getHeaderValue()) ?></span> <?php if ($scope->scopeValue): ?> <span class="filter-setting">1</span> <?php endif ?> </a> ================================================ FILE: modules/backend/filterwidgets/date/partials/_date_form.php ================================================ <div data-control="datefilter" class="filter-box loading-indicator-container size-input-text" data-scope-data="<?= e(json_encode([ 'minDate' => $scope->minDate, 'maxDate' => $scope->maxDate, 'firstDay' => $scope->firstDay, 'yearRange' => $scope->yearRange, 'showWeekNumber' => $scope->showWeekNumber, 'useTimezone' => $scope->useTimezone, ])) ?>" > <?php if (is_array($scope->conditions) && count($scope->conditions) === 1): ?> <?php foreach ($scope->conditions as $condition => $value): ?> <div class="filter-facet"> <div class="facet-item"> <input type="hidden" name="Filter[condition]" value="<?= $condition ?>" /> <span><?= $this->getConditionLang($condition) ?></span> </div> <?php if ($condition === 'between'): ?> <?= $this->makePartial('item_between') ?> <?php else: ?> <?= $this->makePartial('item_single') ?> <?php endif ?> </div> <?php endforeach ?> <?php else: ?> <div class="filter-facet"> <div class="facet-item is-grow"> <select name="Filter[condition]" class="form-control form-control-sm custom-select select-no-search"> <?php foreach ((array) $scope->conditions as $condition => $value): ?> <option value="<?= $condition ?>" <?= $scope->condition === $condition ? 'selected="selected"' : '' ?> ><?= $this->getConditionLang($condition) ?></option> <?php endforeach ?> </select> </div> </div> <div class="filter-facet" data-trigger="[name='Filter[condition]']" data-trigger-action="hide" data-trigger-condition="value[between]" data-trigger-closest-parent="form"> <div class="facet-item"> <span>└─</span> </div> <?= $this->makePartial('item_single') ?> </div> <div class="filter-facet" data-trigger="[name='Filter[condition]']" data-trigger-action="show" data-trigger-condition="value[between]" data-trigger-closest-parent="form"> <div class="facet-item"> <span>└─</span> </div> <?= $this->makePartial('item_between') ?> </div> <?php endif ?> <div class="filter-buttons"> <button class="btn btn-sm btn-primary" data-filter-action="apply"> <?= __("Apply") ?> </button> <div class="flex-grow-1"></div> <button class="btn btn-sm btn-secondary" data-filter-action="clear"> <?= __("Clear") ?> </button> </div> </div> ================================================ FILE: modules/backend/filterwidgets/date/partials/_item_between.php ================================================ <div class="facet-item"> <div class="input-with-icon size-sm right-align"> <i class="icon icon-calendar"></i> <input type="text" name="Filter[afterRaw]" value="<?= e($scope->afterRaw) ?>" class="form-control form-control-sm popup-allow-focus w-120" autocomplete="off" data-datepicker data-datepicker-target="<?= $scope->getId('after') ?>" /> <input type="hidden" name="Filter[after]" id="<?= $scope->getId('after') ?>" value="<?= e($scope->after) ?>" /> </div> </div> <div class="facet-item"> <span><?= __('and') ?></span> </div> <div class="facet-item"> <div class="input-with-icon size-sm right-align"> <i class="icon icon-calendar"></i> <input type="text" name="Filter[beforeRaw]" value="<?= e($scope->beforeRaw) ?>" class="form-control form-control-sm popup-allow-focus w-120" autocomplete="off" data-datepicker data-datepicker-target="<?= $scope->getId('before') ?>" /> <input type="hidden" name="Filter[before]" id="<?= $scope->getId('before') ?>" value="<?= e($scope->before) ?>" /> </div> </div> ================================================ FILE: modules/backend/filterwidgets/date/partials/_item_single.php ================================================ <div class="facet-item"> <div class="input-with-icon size-sm right-align w-120"> <i class="icon icon-calendar"></i> <input type="text" name="Filter[valueRaw]" value="<?= e($scope->valueRaw) ?>" class="form-control form-control-sm popup-allow-focus" autocomplete="off" data-datepicker data-datepicker-target="<?= $scope->getId('value') ?>" /> <input type="hidden" name="Filter[value]" id="<?= $scope->getId('value') ?>" value="<?= e($scope->value) ?>" /> </div> </div> ================================================ FILE: modules/backend/filterwidgets/group/assets/js/groupfilter.js ================================================ /* * GroupFilter plugin * * Data attributes: * - data-control="groupfilter" - enables the plugin on an element * - data-data-locker="input#locker" - Input element to store and restore the chosen color * * JavaScript API: * $('div#someElement').groupFilter({ dataLocker: 'input#locker' }) * * Dependencies: * - Some other plugin (filename.js) */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype; var GroupFilter = function(element, options) { this.options = options; this.$el = $(element); this.$dataLocker = $('[data-groupfilter-datalocker]:first', this.$el); this.scopeValues = []; this.scopeAvailable = []; $.oc.foundation.controlUtils.markDisposable(element); Base.call(this); this.init(); } GroupFilter.prototype = Object.create(BaseProto); GroupFilter.prototype.constructor = GroupFilter; GroupFilter.DEFAULTS = { optionsHandler: null, groupTemplate: null } GroupFilter.prototype.init = function() { this.$el.on('click', '.filter-items > ul > li', this.proxy(this.onSelectItem)); this.$el.on('click', '.filter-active-items > ul > li', this.proxy(this.onDeselectItem)); this.$el.on('ajaxDone', 'input.filter-search-input', this.proxy(this.onSearchAjaxDone)); this.renderFilter(); this.focusSearch(); this.scopeValues = this.getDataLockerValue(); } GroupFilter.prototype.dispose = function() { this.$el.off('click', '.filter-items > ul > li', this.proxy(this.onSelectItem)); this.$el.off('click', '.filter-active-items > ul > li', this.proxy(this.onDeselectItem)); this.$el.off('ajaxDone', 'input.filter-search-input', this.proxy(this.onSearchAjaxDone)); this.$el.off('dispose-control', this.proxy(this.dispose)); this.$el.removeData('oc.groupfilter'); this.$el = null; this.options = null; BaseProto.dispose.call(this); } GroupFilter.prototype.onSearchAjaxDone = function(ev, context, data) { this.filterAvailable(data.options.available); } GroupFilter.prototype.onSelectItem = function(ev) { var $item = $(ev.target).closest('li'); this.selectItem($item); } GroupFilter.prototype.onDeselectItem = function(ev) { var $item = $(ev.target).closest('li'); this.selectItem($item, true); } GroupFilter.prototype.selectItem = function($item, isDeselect) { var itemId = $item.data('item-id'), $otherContainer = isDeselect ? $item.closest('.control-filter-popover').find('.filter-items:first > ul') : $item.closest('.control-filter-popover').find('.filter-active-items:first > ul'); if (isDeselect) { $(`[data-item-id="${itemId}"]`, $otherContainer).removeClass('oc-hide'); $item.remove(); } else { $item .clone() .addClass('animate-enter') .prependTo($otherContainer) .one('animationend', function() { $(this).removeClass('animate-enter'); }); $item.addClass('oc-hide'); } var active = this.scopeValues, available = this.scopeAvailable, fromItems = isDeselect ? active : available, testFunc = function(active){ return active.id == itemId }, item = $.grep(fromItems, testFunc).pop(), filtered = $.grep(fromItems, testFunc, true); if (!item) { item = { 'id': itemId, 'name': $item.text() }; } if (isDeselect) { this.scopeValues = filtered; this.scopeAvailable.push(item); } else { this.scopeAvailable = filtered; this.scopeValues.push(item); } this.setDataLockerValue(); this.focusSearch(); } GroupFilter.prototype.getDataLockerValue = function() { var lockerVal = this.$dataLocker.val(); return lockerVal ? JSON.parse(lockerVal) : []; } GroupFilter.prototype.setDataLockerValue = function() { var ids = []; $.each(this.scopeValues, function(key, val) { ids.push(val.id); }); this.$dataLocker.val(JSON.stringify(ids)); } GroupFilter.prototype.focusSearch = function() { if ('ontouchstart' in window || navigator.maxTouchPoints > 0) { return; } var $input = $('input.filter-search-input', this.$el), length = $input.val().length; $input.focus(); $input.get(0).setSelectionRange(length, length); } GroupFilter.prototype.renderFilter = function() { var self = this, data = { loading: true, optionsHandler: this.options.optionsHandler }; $('[data-groupfilter-container]', this.$el) .html(Mustache.render(this.getGroupTemplate(), data)); this.$el.request(this.options.optionsHandler, { success: function(data) { this.success(data); self.fillOptions(data.options); } }); } GroupFilter.prototype.fillOptions = function(data) { if (!data.active) { data.active = []; } if (!data.available) { data.available = []; } this.scopeValues = data.active; this.scopeAvailable = data.available; // Inject available var $container = $('.filter-items > ul:first', this.$el).empty(); this.addItemsToListElement($container, data.available, data.active); // Inject active var $container = $('.filter-active-items > ul:first', this.$el); this.addItemsToListElement($container, data.active); } GroupFilter.prototype.filterAvailable = function(available) { if (!this.scopeValues) { return; } var $container = $('.filter-items > ul', this.$el).empty(); this.addItemsToListElement($container, available, this.scopeValues); } GroupFilter.prototype.addItemsToListElement = function($ul, items, selectedItems) { $.each(items, function(key, obj) { var item = $('<li />') .attr('data-item-id', obj.id) .append( $('<a />') .attr('href', 'javascript:;') .text(obj.name) ); $ul.append(item); }); if (selectedItems) { $.each(selectedItems, function (key, obj) { $(`[data-item-id="${obj.id}"]`, $ul).addClass('oc-hide'); }); } } GroupFilter.prototype.getGroupTemplate = function() { return $(this.options.groupTemplate).html(); } // GROUPFILTER PLUGIN DEFINITION // ============================ var old = $.fn.groupFilter $.fn.groupFilter = function (option) { var args = Array.prototype.slice.call(arguments, 1), result this.each(function () { var $this = $(this) var data = $this.data('oc.groupfilter') var options = $.extend({}, GroupFilter.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.groupfilter', (data = new GroupFilter(this, options))) if (typeof option == 'string') result = data[option].apply(data, args) if (typeof result != 'undefined') return false }) return result ? result : this } $.fn.groupFilter.Constructor = GroupFilter // GROUPFILTER NO CONFLICT // ================= $.fn.groupFilter.noConflict = function () { $.fn.groupFilter = old return this } // GROUPFILTER DATA-API // =============== $(document).render(function() { $('[data-control="groupfilter"]').groupFilter() }) }(window.jQuery); ================================================ FILE: modules/backend/filterwidgets/group/partials/_group.php ================================================ <a href="javascript:;" class="filter-scope <?= $scope->scopeValue ? 'active' : '' ?>" data-scope-name="<?= $scope->scopeName ?>" > <span class="filter-label"><?= e($this->getHeaderValue()) ?></span> <?php if ($scope->scopeValue): ?> <span class="filter-setting"><?= count((array) $scope->value) ?></span> <?php endif ?> </a> ================================================ FILE: modules/backend/filterwidgets/group/partials/_group_form.php ================================================ <div data-control="groupfilter" data-options-handler="<?= $this->getEventHandler('onGetGroupOptions') ?>" data-group-template="#<?= $this->getId('groupTemplate') ?>" > <input type="hidden" name="Filter[value]" value="<?= $scope->value ? e(json_encode($scope->value)) : '' ?>" data-groupfilter-datalocker /> <div data-groupfilter-container></div> </div> <script type="text/template" id="<?= $this->getId('groupTemplate') ?>"> <?php if ($scope->matchMode === 'toggle' || $scope->matchMode === true): ?> <div class="filter-mode"> <div class="control-balloon-selector form-control-sm d-block p-2" data-control="balloon-selector"> <ul class="d-block m-0"> <li class="w-50 text-center <?= !$scope->mode || $scope->mode === 'include' ? 'active' : '' ?>" data-value="include"> <i class="icon-plus me-1"></i> <?= __("Includes") ?> </li> <li class="w-50 text-center <?= $scope->mode === 'exclude' ? 'active' : '' ?>" data-value="exclude"> <i class="icon-minus me-1"></i> <?= __("Excludes") ?> </li> </ul> <input type="hidden" name="Filter[mode]" value="<?= $scope->mode ?: 'include' ?>"> </div> </div> <?php else: ?> <input type="hidden" name="Filter[mode]" value="<?= $scope->matchMode ?: 'include' ?>"> <?php endif ?> <div class="filter-search search-input-container storm-icon-pseudo loading-indicator-container size-input-text"> <input type="text" name="search" autocomplete="off" class="filter-search-input form-control popup-allow-focus" data-request="{{ optionsHandler }}" data-load-indicator-opaque data-load-indicator data-track-input /> <div class="filter-items"> <ul> {{#available}} <li data-item-id="{{ id }}"><a href="javascript:;">{{ name }}</a></li> {{/available}} {{#loading}} <li class="loading"><span></span></li> {{/loading}} </ul> </div> <div class="filter-active-items"> <ul> {{#active}} <li data-item-id="{{ id }}"><a href="javascript:;">{{ name }}</a></li> {{/active}} </ul> </div> <div class="filter-buttons"> <button class="btn btn-sm btn-primary" data-filter-action="apply"> <?= __("Apply") ?> </button> <div class="flex-grow-1"></div> <button class="btn btn-sm btn-secondary" data-filter-action="clear"> <?= __("Clear") ?> </button> </div> </div> </script> ================================================ FILE: modules/backend/filterwidgets/number/partials/_item_between.php ================================================ <div class="facet-item"> <input name="Filter[min]" type="number" value="<?= e($scope->min) ?>" class="form-control form-control-sm popup-allow-focus w-90" autocomplete="off" /> </div> <div class="facet-item"> <span><?= __('and') ?></span> </div> <div class="facet-item"> <input name="Filter[max]" type="number" value="<?= e($scope->max) ?>" class="form-control form-control-sm popup-allow-focus w-90" autocomplete="off" /> </div> ================================================ FILE: modules/backend/filterwidgets/number/partials/_item_single.php ================================================ <div class="facet-item"> <input name="Filter[value]" type="number" value="<?= e($scope->value) ?>" class="form-control form-control-sm popup-allow-focus w-90" autocomplete="off" /> </div> ================================================ FILE: modules/backend/filterwidgets/number/partials/_number.php ================================================ <a href="javascript:;" class="filter-scope <?= $scope->scopeValue ? 'active' : '' ?>" data-scope-name="<?= $scope->scopeName ?>" > <span class="filter-label"><?= e($this->getHeaderValue()) ?></span> <?php if ($scope->scopeValue): ?> <span class="filter-setting">1</span> <?php endif ?> </a> ================================================ FILE: modules/backend/filterwidgets/number/partials/_number_form.php ================================================ <div class="filter-box loading-indicator-container size-input-text"> <?php if (is_array($scope->conditions) && count($scope->conditions) === 1): ?> <?php foreach ($scope->conditions as $condition => $value): ?> <div class="filter-facet"> <div class="facet-item"> <input type="hidden" name="Filter[condition]" value="<?= $condition ?>" /> <span><?= $this->getConditionLang($condition) ?></span> </div> <?php if ($condition === 'between'): ?> <?= $this->makePartial('item_between') ?> <?php else: ?> <?= $this->makePartial('item_single') ?> <?php endif ?> </div> <?php endforeach ?> <?php else: ?> <div class="filter-facet"> <div class="facet-item is-grow"> <select name="Filter[condition]" class="form-control form-control-sm custom-select select-no-search"> <?php foreach ((array) $scope->conditions as $condition => $value): ?> <option value="<?= $condition ?>" <?= $scope->condition === $condition ? 'selected="selected"' : '' ?> ><?= $this->getConditionLang($condition) ?></option> <?php endforeach ?> </select> </div> </div> <div class="filter-facet" data-trigger="[name='Filter[condition]']" data-trigger-action="hide" data-trigger-condition="value[between]" data-trigger-closest-parent="form"> <div class="facet-item"> <span>└─</span> </div> <?= $this->makePartial('item_single') ?> </div> <div class="filter-facet" data-trigger="[name='Filter[condition]']" data-trigger-action="show" data-trigger-condition="value[between]" data-trigger-closest-parent="form"> <div class="facet-item"> <span>└─</span> </div> <?= $this->makePartial('item_between') ?> </div> <?php endif ?> <div class="filter-buttons"> <button class="btn btn-sm btn-primary" data-filter-action="apply"> <?= __("Apply") ?> </button> <div class="flex-grow-1"></div> <button class="btn btn-sm btn-secondary" data-filter-action="clear"> <?= __("Clear") ?> </button> </div> </div> ================================================ FILE: modules/backend/filterwidgets/text/partials/_item_single.php ================================================ <div class="facet-item is-grow"> <input name="Filter[value]" value="<?= e($scope->value) ?>" class="form-control form-control-sm popup-allow-focus" autocomplete="off" placeholder="" /> </div> ================================================ FILE: modules/backend/filterwidgets/text/partials/_text.php ================================================ <a href="javascript:;" class="filter-scope <?= $scope->scopeValue ? 'active' : '' ?>" data-scope-name="<?= $scope->scopeName ?>" > <span class="filter-label"><?= e($this->getHeaderValue()) ?></span> <?php if ($scope->scopeValue): ?> <span class="filter-setting">1</span> <?php endif ?> </a> ================================================ FILE: modules/backend/filterwidgets/text/partials/_text_form.php ================================================ <div class="filter-box loading-indicator-container size-input-text"> <?php if (is_array($scope->conditions) && count($scope->conditions) === 1): ?> <?php foreach ($scope->conditions as $condition => $value): ?> <div class="filter-facet"> <div class="facet-item"> <input type="hidden" name="Filter[condition]" value="<?= $condition ?>" /> <span><?= $this->getConditionLang($condition) ?></span> </div> <?= $this->makePartial('item_single') ?> </div> <?php endforeach ?> <?php else: ?> <div class="filter-facet"> <div class="facet-item is-grow"> <select name="Filter[condition]" class="form-control form-control-sm custom-select select-no-search"> <?php foreach ((array) $scope->conditions as $condition => $value): ?> <option value="<?= $condition ?>" <?= $scope->condition === $condition ? 'selected="selected"' : '' ?> ><?= $this->getConditionLang($condition) ?></option> <?php endforeach ?> </select> </div> </div> <div class="filter-facet"> <div class="facet-item"> <span>└─</span> </div> <?= $this->makePartial('item_single') ?> </div> <?php endif ?> <div class="filter-buttons"> <button class="btn btn-sm btn-primary" data-filter-action="apply"> <?= __("Apply") ?> </button> <div class="flex-grow-1"></div> <button class="btn btn-sm btn-secondary" data-filter-action="clear"> <?= __("Clear") ?> </button> </div> </div> ================================================ FILE: modules/backend/formwidgets/CodeEditor.php ================================================ <?php namespace Backend\FormWidgets; use Backend\Models\Preference as BackendPreference; use Backend\Classes\FormWidgetBase; /** * CodeEditor renders a field for editing code * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class CodeEditor extends FormWidgetBase { // // Configurable Properties // /** * @var string language code to display (php, twig) */ public $language = 'php'; /** * @var bool showGutter determines whether the gutter is visible. */ public $showGutter = true; /** * @var string wordWrap mode: off, fluid, 40, 80. */ public $wordWrap = 'fluid'; /** * @var string codeFolding mode: manual, markbegin, markbeginend. */ public $codeFolding = 'manual'; /** * @var bool autoClosing automatically close tags and special characters, * like quotation marks, parenthesis, or brackets. */ public $autoClosing = true; /** * @var bool useSoftTabs indicates whether the the editor uses spaces for indentation. */ public $useSoftTabs = true; /** * @var bool tabSize sets the size of the indentation. */ public $tabSize = 4; /** * @var int fontSize sets the font size. */ public $fontSize = 12; /** * @var int margin sets the editor margin size. */ public $margin = 0; /** * @var string theme to use. */ public $theme = 'twilight'; /** * @var bool showInvisibles characters. */ public $showInvisibles = false; /** * @var bool highlightActiveLine highlights the active line. */ public $highlightActiveLine = true; /** * @var bool readOnly, if true, the editor is set to read-only mode */ public $readOnly = false; /** * @var string autocompletion mode: manual, basic, live. */ public $autocompletion = 'manual'; /** * @var bool enableSnippets ,if true, the editor activate use Snippets */ public $enableSnippets = true; /** * @var bool displayIndentGuides, if true, the editor show Indent Guides */ public $displayIndentGuides = true; /** * @var bool showPrintMargin, if true, the editor show Print Margin */ public $showPrintMargin = false; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'codeeditor'; /** * @inheritDoc */ public function init() { $this->applyEditorPreferences(); if ($this->formField->disabled) { $this->readOnly = true; } $this->fillFromConfig([ 'language', 'showGutter', 'wordWrap', 'codeFolding', 'autoClosing', 'useSoftTabs', 'tabSize', 'fontSize', 'margin', 'theme', 'showInvisibles', 'highlightActiveLine', 'readOnly', 'autocompletion', 'enableSnippets', 'displayIndentGuides', 'showPrintMargin' ]); // Normalize boolean values for wordWrap if ($this->wordWrap === true || $this->wordWrap === '1') { $this->wordWrap = 'fluid'; } elseif ($this->wordWrap === false || $this->wordWrap === '0') { $this->wordWrap = 'off'; } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('codeeditor'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['fontSize'] = $this->fontSize; $this->vars['wordWrap'] = $this->wordWrap; $this->vars['codeFolding'] = $this->codeFolding; $this->vars['autoClosing'] = $this->autoClosing; $this->vars['tabSize'] = $this->tabSize; $this->vars['theme'] = $this->theme; $this->vars['showInvisibles'] = $this->showInvisibles; $this->vars['highlightActiveLine'] = $this->highlightActiveLine; $this->vars['useSoftTabs'] = $this->useSoftTabs; $this->vars['showGutter'] = $this->showGutter; $this->vars['language'] = $this->language; $this->vars['margin'] = $this->margin; $this->vars['stretch'] = $this->formField->stretch; $this->vars['size'] = $this->formField->size; $this->vars['readOnly'] = $this->readOnly; $this->vars['autocompletion'] = $this->autocompletion; $this->vars['enableSnippets'] = $this->enableSnippets; $this->vars['displayIndentGuides'] = $this->displayIndentGuides; $this->vars['showPrintMargin'] = $this->showPrintMargin; $this->vars['value'] = $this->getLoadValue(); $this->vars['name'] = $this->getFieldName(); } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/codeeditor.css'); $this->addJs('js/build-min.js'); } /** * Looks at the user preferences and overrides any set values. * @return void */ protected function applyEditorPreferences() { // Load the editor system settings $preferences = BackendPreference::instance(); $this->fontSize = $preferences->editor_font_size; $this->wordWrap = $preferences->editor_word_wrap; $this->codeFolding = $preferences->editor_code_folding; $this->autoClosing = $preferences->editor_auto_closing; $this->tabSize = $preferences->editor_tab_size; $this->theme = $preferences->editor_theme; $this->showInvisibles = $preferences->editor_show_invisibles; $this->highlightActiveLine = $preferences->editor_highlight_active_line; $this->useSoftTabs = !$preferences->editor_use_hard_tabs; $this->showGutter = $preferences->editor_show_gutter; $this->autocompletion = $preferences->editor_autocompletion; $this->displayIndentGuides = $preferences->editor_display_indent_guides; $this->showPrintMargin = $preferences->editor_show_print_margin; } } ================================================ FILE: modules/backend/formwidgets/ColorPicker.php ================================================ <?php namespace Backend\FormWidgets; use Lang; use Backend\Classes\FormWidgetBase; use ApplicationException; /** * ColorPicker renders a color picker field. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class ColorPicker extends FormWidgetBase { // // Configurable Properties // /** * @var array availableColors by default */ public $availableColors = [ '#1abc9c', '#16a085', '#2ecc71', '#27ae60', '#3498db', '#2980b9', '#9b59b6', '#8e44ad', '#34495e', '#2b3e50', '#f1c40f', '#f39c12', '#e67e22', '#d35400', '#e74c3c', '#c0392b', '#ecf0f1', '#bdc3c7', '#95a5a6', '#7f8c8d', ]; /** * @var bool allowEmpty value */ public $allowEmpty = false; /** * @var bool allowCustom value */ public $allowCustom = true; /** * @var bool showAlpha opacity slider */ public $showAlpha = false; /** * @var bool|null showInput displays an input and disables the available colors. */ public $showInput; /** * @var bool readOnly if true, the color picker is set to read-only mode */ public $readOnly = false; /** * @var bool disabled if true, the color picker is set to disabled mode */ public $disabled = false; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'colorpicker'; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'availableColors', 'allowCustom', 'allowEmpty', 'showInput', 'showAlpha', 'readOnly', 'disabled', ]); // @deprecated remove default colors with showInput true as default (v4) // when colors provided, even as empty array, showInput becomes false -sg if ($this->availableColors === false && $this->showInput === null) { $this->showInput = true; } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('colorpicker'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['name'] = $this->getFieldName(); $this->vars['value'] = $value = $this->getLoadValue(); $this->vars['availableColors'] = $availableColors = $this->getAvailableColors(); $this->vars['allowCustom'] = $this->allowCustom; $this->vars['allowEmpty'] = $this->allowEmpty; $this->vars['showAlpha'] = $this->showAlpha; $this->vars['showInput'] = $this->showInput; $this->vars['readOnly'] = $this->readOnly; $this->vars['disabled'] = $this->disabled; $this->vars['isCustomColor'] = !in_array($value, $availableColors); } /** * getAvailableColors as a list of available colors. */ protected function getAvailableColors(): array { $availableColors = $this->availableColors; if (is_array($availableColors)) { return $availableColors; } if (is_string($availableColors) && strlen($availableColors)) { if (!$this->model->methodExists($availableColors)) { throw new ApplicationException(Lang::get('backend::lang.field.colors_method_not_exists', [ 'model' => get_class($this->model), 'method' => $availableColors, 'field' => $this->formField->fieldName ])); } // @deprecated just pass form field here -sg return (array) $this->model->{$availableColors}( $this->formField->fieldName, $this->formField->value, $this->formField->config ); } return []; } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('vendor/spectrum/spectrum.css'); $this->addJs('vendor/spectrum/spectrum.js'); $this->addCss('css/colorpicker.css'); $this->addJs('js/colorpicker.js'); } /** * @inheritDoc */ public function getSaveValue($value) { if (!strlen($value)) { return null; } return $this->parseAsHex($value); } /** * parseAsHex ensures saved value is a valid hex color */ protected function parseAsHex($value) { return '#' . preg_replace("/[^a-zA-Z0-9]+/", '', $value); } } ================================================ FILE: modules/backend/formwidgets/DataTable.php ================================================ <?php namespace Backend\FormWidgets; use Lang; use Backend\Classes\FormWidgetBase; /** * Data Table * Renders a table field. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class DataTable extends FormWidgetBase { use \Backend\FormWidgets\DataTable\LegacyDataTable; // // Configurable Properties // /** * @var string Table size */ public $size = 'large'; /** * @var bool Allow rows to be sorted * @todo Not implemented... */ public $rowSorting = false; /** * @var bool useLegacy uses legacy Table widget instead of Handsontable */ public $useLegacy = false; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'datatable'; /** * @var array Processed columns */ protected $processedColumns = []; /** * @var array Columns requiring AJAX options */ protected $ajaxColumns = []; /** * @var array Column dependencies */ protected $columnDependencies = []; /** * @inheritDoc */ protected function loadAssets() { if ($this->useLegacy) { return; } $this->addCss('css/datatable-handsontable.css'); $this->addJs('js/datatable-handsontable.js', ['type' => 'module']); } /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'size', 'rowSorting', 'useLegacy', ]); if ($this->useLegacy) { $this->table = $this->makeLegacyTableWidget(); $this->table->bindToController(); } else { $this->processColumns(); } } /** * @inheritDoc */ public function render() { $this->prepareVars(); if ($this->useLegacy) { return $this->makePartial('datatable'); } return $this->makePartial('datatable_handsontable'); } /** * prepareVars for display */ public function prepareVars() { if ($this->useLegacy) { $this->prepareLegacyVars(); } else { $this->vars['name'] = $this->getFieldName(); $this->vars['value'] = $this->getLoadValue() ?: []; $this->vars['columns'] = $this->processedColumns; $this->vars['colHeaders'] = array_column($this->processedColumns, 'title'); $this->vars['ajaxColumns'] = $this->ajaxColumns; $this->vars['columnDependencies'] = $this->columnDependencies; $this->vars['hotOptions'] = $this->buildOptions(); $this->vars['adding'] = $this->formField->getConfig('adding', true); $this->vars['deleting'] = $this->formField->getConfig('deleting', true); $this->vars['toolbar'] = $this->formField->getConfig('toolbar', true); $this->vars['searching'] = $this->formField->getConfig('searching', false); $this->vars['csvExport'] = $this->formField->getConfig('csvExport', false); $this->vars['csvImport'] = $this->formField->getConfig('csvImport', false); } } // // Column Processing // /** * processColumns processes column definitions into Handsontable format */ protected function processColumns() { $columns = $this->formField->getConfig('columns', []); foreach ($columns as $columnName => $config) { $config = (array) $config; $column = $this->buildColumn($columnName, $config); $this->processedColumns[] = $column; if ($this->columnNeedsAjax($config)) { $this->ajaxColumns[] = $columnName; } if (isset($config['dependsOn'])) { $this->columnDependencies[$columnName] = $config['dependsOn']; } } } /** * buildColumn builds a single column config for Handsontable */ protected function buildColumn(string $name, array $config): array { $column = [ 'data' => $name, 'title' => isset($config['title']) ? Lang::get($config['title']) : $name, 'readOnly' => $config['readOnly'] ?? false, ]; if (isset($config['width'])) { $column['width'] = (int) str_replace('px', '', $config['width']); } $type = $config['type'] ?? 'string'; $column = array_merge($column, $this->getTypeConfig($type, $config)); if (isset($config['validation'])) { $column['_validation'] = $config['validation']; } return $column; } /** * getTypeConfig maps DataTable column types to Handsontable types */ protected function getTypeConfig(string $type, array $config): array { switch ($type) { case 'checkbox': return ['type' => 'checkbox']; case 'dropdown': $strict = ($config['strict'] ?? true) !== false; $typeConfig = [ 'type' => $strict ? 'dropdown' : 'autocomplete', 'strict' => $strict, 'filter' => !$strict, ]; if (isset($config['options']) && is_array($config['options'])) { $typeConfig['source'] = array_values($config['options']); $typeConfig['_optionMap'] = $config['options']; } return $typeConfig; case 'autocomplete': return ['type' => 'autocomplete', 'strict' => false, 'filter' => true]; case 'date': return [ 'type' => 'date', 'dateFormat' => $config['dateFormat'] ?? 'YYYY-MM-DD', 'correctFormat' => true, ]; case 'time': return [ 'type' => 'time', 'timeFormat' => $config['timeFormat'] ?? 'HH:mm', 'correctFormat' => true, ]; case 'numeric': return ['type' => 'numeric']; default: return ['type' => 'text']; } } /** * columnNeedsAjax determines if a column needs AJAX-loaded options */ protected function columnNeedsAjax(array $config): bool { $type = $config['type'] ?? 'string'; if (!in_array($type, ['dropdown', 'autocomplete'])) { return false; } return !isset($config['options']) || is_string($config['options']); } /** * buildOptions builds the global Handsontable configuration */ protected function buildOptions(): array { $sorting = $this->formField->getConfig('sorting', false); $searching = $this->formField->getConfig('searching', false); $height = $this->formField->getConfig('height', false); $options = [ 'licenseKey' => 'non-commercial-and-evaluation', 'rowHeaders' => false, 'manualColumnResize' => true, 'manualRowMove' => $sorting, 'stretchH' => 'all', 'preventOverflow' => 'horizontal', 'autoWrapRow' => true, 'autoWrapCol' => true, 'undo' => true, 'minRows' => 1, 'rowHeights' => 30, 'height' => $height ?: 'auto', 'search' => $searching, ]; return $options; } // // AJAX Handlers // /** * onGetDropdownOptions handles AJAX requests for dropdown/autocomplete options */ public function onGetDropdownOptions() { $column = post('column'); $rowData = post('rowData', []); $methodName = 'get' . studly_case($this->fieldName) . 'DataTableOptions'; if ($this->model->methodExists($methodName)) { return ['options' => $this->model->$methodName($column, $rowData)]; } if ($this->model->methodExists('getDataTableOptions')) { return ['options' => $this->model->getDataTableOptions($this->fieldName, $column, $rowData)]; } return ['options' => []]; } // // Data Handling // /** * @inheritDoc */ public function getLoadValue() { if ($this->useLegacy) { return $this->getLegacyLoadValue(); } return (array) parent::getLoadValue(); } /** * @inheritDoc */ public function getSaveValue($value) { if ($this->useLegacy) { return $this->getLegacySaveValue($value); } return json_decode($value, true) ?: []; } } ================================================ FILE: modules/backend/formwidgets/DatePicker.php ================================================ <?php namespace Backend\FormWidgets; use Carbon\Carbon; use Backend\Classes\FormWidgetBase; use System\Helpers\DateTime as DateTimeHelper; /** * DatePicker renders a date picker field * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class DatePicker extends FormWidgetBase { // // Configurable Properties // /** * @var bool mode for display. Values: datetime, date, time */ public $mode = 'datetime'; /** * @var string format provides an explicit date display format */ public $format; /** * @var string minDate the minimum/earliest date that can be selected. * eg: 2000-01-01 */ public $minDate; /** * @var string maxDate the maximum/latest date that can be selected. * eg: 2020-12-31 */ public $maxDate; /** * @var string yearRange number of years either side or array of upper/lower range * eg: 10 or [1900,1999] */ public $yearRange; /** * @var string|array disableDays are days that cannot be selected. Value can be a number * to represent Sunday (0) to Saturday (6), or an explicit date (2024-10-01). */ public $disableDays; /** * @var int firstDay of the week * eg: 0 (Sunday), 1 (Monday), 2 (Tuesday), etc. */ public $firstDay = 0; /** * @var bool twelveHour clock */ public $twelveHour = false; /** * @var bool hoursOnly removes the need to select minutes */ public $hoursOnly = false; /** * @var bool showWeekNumber at head of row */ public $showWeekNumber = false; /** * @var bool useTimezone will convert the date and time to the user preference */ public $useTimezone = true; /** * @var bool defaultTimeMidnight If the time picker is enabled but the time value is not provided fallback to 00:00. * If this option is disabled, the default time is the current time. */ public $defaultTimeMidnight = false; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'datepicker'; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'format', 'mode', 'minDate', 'maxDate', 'yearRange', 'disableDays', 'firstDay', 'twelveHour', 'hoursOnly', 'showWeekNumber', 'useTimezone', 'defaultTimeMidnight' ]); $this->mode = strtolower($this->mode); // @deprecated API if ($this->getConfig('ignoreTimezone', false)) { $this->useTimezone = false; } if ($this->mode === 'time' || $this->mode === 'date') { $this->useTimezone = false; } if ($this->minDate !== null) { $this->minDate = is_int($this->minDate) ? Carbon::createFromTimestamp($this->minDate) : Carbon::parse($this->minDate); } if ($this->maxDate !== null) { $this->maxDate = is_int($this->maxDate) ? Carbon::createFromTimestamp($this->maxDate) : Carbon::parse($this->maxDate); } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('datepicker'); } /** * prepareVars for display */ public function prepareVars() { if ($value = $this->getLoadValue()) { $value = DateTimeHelper::makeCarbon($value, false); $value = $value instanceof Carbon ? $value->toDateTimeString() : $value; } $this->vars['name'] = $this->getFieldName(); $this->vars['value'] = $value ?: ''; $this->vars['field'] = $this->formField; $this->vars['mode'] = $this->mode; $this->vars['minDate'] = $this->minDate; $this->vars['maxDate'] = $this->maxDate; $this->vars['yearRange'] = $this->yearRange; $this->vars['disableDays'] = $this->getDisableDaysString(); $this->vars['firstDay'] = $this->firstDay; $this->vars['twelveHour'] = $this->twelveHour; $this->vars['hoursOnly'] = $this->hoursOnly; $this->vars['showWeekNumber'] = $this->showWeekNumber; $this->vars['useTimezone'] = $this->useTimezone; $this->vars['format'] = $this->format; $this->vars['formatMoment'] = $this->getDateFormatMoment(); $this->vars['formatAlias'] = $this->getDateFormatAlias(); $this->vars['defaultTimeMidnight'] = $this->defaultTimeMidnight; } /** * @inheritDoc */ public function getSaveValue($value) { if (!strlen($value)) { return null; } return $value; } /** * resetFormValue from the form field */ public function resetFormValue() { // Transfer approved config $this->minDate = $this->formField->minDate; $this->maxDate = $this->formField->maxDate; $this->yearRange = $this->formField->yearRange; $this->firstDay = $this->formField->firstDay; $this->twelveHour = $this->formField->twelveHour; $this->hoursOnly = $this->formField->hoursOnly; $this->showWeekNumber = $this->formField->showWeekNumber; $this->disableDays = $this->formField->disableDays; } /** * getDateFormatMoment converts PHP format to JS format */ protected function getDateFormatMoment() { if ($this->format) { return DateTimeHelper::momentFormat($this->format); } } /** * getDisableDaysString allows setting the disableDays property as a string * that refers to a callable method */ protected function getDisableDaysString() { if ($callableMethod = $this->formField->getCallableMethodFromValue($this->disableDays)) { return $callableMethod($this->model); } return $this->disableDays; } /* * getDateFormatAlias displays alias, used by preview mode */ protected function getDateFormatAlias() { if ($this->format) { return null; } if ($this->mode == 'time') { return 'time'; } elseif ($this->mode == 'date') { return 'dateLong'; } else { return 'dateTimeLong'; } } } ================================================ FILE: modules/backend/formwidgets/FileUpload.php ================================================ <?php namespace Backend\FormWidgets; use Input; use System; use Response; use Validator; use Backend\Classes\FormField; use Backend\Classes\FormWidgetBase; use System\Models\File as FileModel; use October\Rain\Filesystem\Definitions as FileDefinitions; use ApplicationException; use ValidationException; use Exception; /** * FileUpload renders a form file uploader field. * * Supported options: * * file: * label: Some file * type: fileupload * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class FileUpload extends FormWidgetBase { use \Backend\Traits\FormModelSaver; use \Backend\Traits\FormModelWidget; // // Configurable Properties // /** * @var int imageWidth for preview */ public $imageWidth = 190; /** * @var int imageHeight for preview */ public $imageHeight = 190; /** * @var mixed fileTypes accepted */ public $fileTypes = false; /** * @var mixed mimeTypes accepted */ public $mimeTypes = false; /** * @var mixed maxFilesize allowed (MB) */ public $maxFilesize; /** * @var mixed maxFiles allowed */ public $maxFiles; /** * @var string Defines a mount point for the editor toolbar. * Must include a module name that exports the Vue application and a state element name. * Format: stateElementName * Only works in Vue applications and form document layouts. */ public $externalToolbarAppState = null; /** * @var array thumbOptions used for generating thumbnails */ public $thumbOptions = [ 'mode' => 'auto', 'extension' => 'auto' ]; /** * @var boolean useCaption allows the user to set a caption */ public $useCaption = true; /** * @var bool deferredBinding defers the upload action using a session key */ public $deferredBinding = true; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'fileupload'; /** * @var \Backend\Widgets\Form configFormWidget is the embedded form for modifying the * properties of the selected file. */ protected $configFormWidget; /** * @inheritDoc */ public function init() { $this->maxFilesize = $this->getUploadMaxFilesize(); $this->fillFromConfig([ 'imageWidth', 'imageHeight', 'fileTypes', 'maxFilesize', 'maxFiles', 'mimeTypes', 'thumbOptions', 'useCaption', 'deferredBinding', 'externalToolbarAppState' ]); // @deprecated API if ($this->getConfig('attachOnUpload') === true) { $this->deferredBinding = false; } if ($this->formField->disabled) { $this->previewMode = true; } if (post('fileupload_flag')) { $this->getConfigFormWidget(); } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('fileupload'); } /** * prepareVars for the view data */ protected function prepareVars() { if ($this->formField->disabled) { $this->previewMode = true; } if ($this->previewMode) { $this->useCaption = false; } $maxPhpSetting = $this->getUploadMaxFilesize(); if ($maxPhpSetting && $this->maxFilesize > $maxPhpSetting) { throw new ApplicationException('Maximum allowed size for uploaded files: ' . $maxPhpSetting); } $this->vars['name'] = $this->getFieldName(); $this->vars['fileList'] = $fileList = $this->getFileList(); $this->vars['singleFile'] = $fileList->first(); $this->vars['size'] = $this->formField->size; $this->vars['displayMode'] = $this->getDisplayMode(); $this->vars['emptyIcon'] = $this->getConfig('emptyIcon', 'icon-upload'); $this->vars['imageHeight'] = $this->imageHeight; $this->vars['imageWidth'] = $this->imageWidth; $this->vars['acceptedFileTypes'] = $this->getAcceptedFileTypes(true); $this->vars['maxFilesize'] = $this->maxFilesize; $this->vars['maxFiles'] = $this->maxFiles; $this->vars['cssDimensions'] = $this->getCssDimensions(); $this->vars['useCaption'] = $this->useCaption; $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState; } /** * getFileRecord for this request, returns false if none available * @return System\Models\File|bool */ protected function getFileRecord() { $record = false; if ($fileId = post('file_id')) { $record = $this->getRelationModel()->find($fileId) ?: false; } return $record; } /** * getConfigFormWidget for the instantiated Form widget */ public function getConfigFormWidget() { if ($this->configFormWidget) { return $this->configFormWidget; } $config = $this->makeConfig('~/modules/system/models/file/fields.yaml'); $config->model = $this->getFileRecord() ?: $this->getRelationModel(); $config->alias = $this->alias . $this->defaultAlias; $config->arrayName = 'FileUploadWidget'; $widget = $this->makeWidget(\Backend\Widgets\Form::class, $config); $widget->bindToController(); return $this->configFormWidget = $widget; } /** * getFileList returns a list of associated files */ protected function getFileList() { if ($eagerList = $this->getFileListFromRelation()) { $list = $eagerList; } else { $list = $this ->getRelationObject() ->withDeferred($this->getSessionKey()) ->orderBy('sort_order') ->get() ; } // Decorate each file with thumb and custom download path $list->each(function ($file) { $this->decorateFileAttributes($file); }); return $list; } /** * getFileListFromRelation loads the file list from the model relation in memory * only if the request is not in a postback state */ protected function getFileListFromRelation() { // Field name for this widget detected in postback if (post($this->getFieldName()) !== null) { return; } [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom); if (!$model->hasRelation($attribute)) { return; } $value = $model->{$attribute}; if (!$value) { return $model->newCollection(); } if ($model->isRelationTypeSingular($attribute)) { return $model->newCollection([$value]); } return $value; } /** * getDisplayMode for the file upload. Eg: file-multi, image-single, etc * @return string */ protected function getDisplayMode() { $mode = $this->getConfig('mode', 'image'); if (str_contains($mode, '-')) { return $mode; } $mode .= $this->isRelationTypeSingular() ? '-single' : '-multi'; return $mode; } /** * getCssDimensions returns the CSS dimensions for the uploaded image, * uses auto where no dimension is provided. */ protected function getCssDimensions(): string { if (!$this->imageWidth && !$this->imageHeight) { return ''; } $cssDimensions = ''; if ($this->imageWidth && !$this->imageHeight) { $cssDimensions .= 'width: '.$this->imageWidth.'px;'; } if ($this->imageHeight && !$this->imageWidth) { $cssDimensions .= 'height: '.$this->imageHeight.'px;'; } return $cssDimensions; } /** * getAcceptedFileTypes returns the specified accepted file types, or the * default based on the mode. Image mode will return: * - jpg,jpeg,bmp,png,gif,svg * @return string */ public function getAcceptedFileTypes($includeDot = false) { $types = $this->fileTypes; if ($types === false) { $definitionCode = starts_with($this->getDisplayMode(), 'image') ? 'image_extensions' : 'default_extensions'; $types = implode(',', FileDefinitions::get($definitionCode)); } if (!$types || $types === '*') { return null; } if (!is_array($types)) { $types = explode(',', $types); } if (System::checkSafeMode()) { $types = array_filter($types, function ($value) { return !in_array(strtolower(trim($value, ' .')), ['less', 'sass', 'scss']); }); } $types = array_map(function ($value) use ($includeDot) { $value = trim($value); if (substr($value, 0, 1) == '.') { $value = substr($value, 1); } if ($includeDot) { $value = '.'.$value; } return $value; }, $types); return implode(',', $types); } /** * onRemoveAttachment removes a file attachment */ public function onRemoveAttachment() { $fileModel = $this->getRelationModel(); if (($fileId = post('file_id')) && ($file = $fileModel::find($fileId))) { $this->getRelationObject()->remove($file, $this->getSessionKey()); } } /** * onSortAttachments sorts file attachments */ public function onSortAttachments() { if ($sortData = post('sortOrder')) { asort($sortData); $ids = array_keys($sortData); $orders = array_values($sortData); $fileModel = $this->getRelationModel(); $fileModel->setSortableOrder($ids, $orders); } } /** * onLoadAttachmentConfig loads the configuration form for an attachment, * allowing title and description to be set */ public function onLoadAttachmentConfig() { $file = $this->getFileRecord(); if (!$file) { throw new ApplicationException('Unable to find file, it may no longer exist'); } $file = $this->decorateFileAttributes($file); $this->vars['file'] = $file; $this->vars['displayMode'] = $this->getDisplayMode(); $this->vars['cssDimensions'] = $this->getCssDimensions(); $this->vars['configFormWidget'] = $this->getConfigFormWidget(); return $this->makePartial('config_form'); } /** * onSaveAttachmentConfig commits the changes of the attachment configuration form */ public function onSaveAttachmentConfig() { try { $formWidget = $this->getConfigFormWidget(); $file = $formWidget->getModel(); if (!$file) { throw new ApplicationException('Unable to find file, it may no longer exist'); } $this->performSaveOnModel($file, $formWidget->getSaveData(), $formWidget->getSessionKey()); return [ 'displayName' => $file->title ?: $file->file_name, 'description' => trim($file->description) ]; } catch (Exception $ex) { return json_encode(['error' => $ex->getMessage()]); } } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/fileupload.css'); $this->addJs('js/fileupload.js'); } /** * @inheritDoc */ public function getSaveValue($value) { return FormField::NO_SAVE_DATA; } /** * onUpload handler for the server-side processing of uploaded files */ public function onUpload() { try { if (!Input::hasFile('file_data')) { throw new ApplicationException('File missing from request'); } $fileModel = $this->getRelationModel(); $uploadedFile = files('file_data'); $validationRules = ['max:'.($this->maxFilesize * 1024)]; if ($fileTypes = $this->getAcceptedFileTypes()) { $validationRules[] = 'extensions:'.$fileTypes; } if ($this->mimeTypes) { $validationRules[] = 'mimes:'.$this->mimeTypes; } $validation = Validator::make( ['file_data' => $uploadedFile], ['file_data' => $validationRules] ); if ($validation->fails()) { throw new ValidationException($validation); } if (!$uploadedFile->isValid()) { throw new ApplicationException('File is not valid'); } $fileRelation = $this->getRelationObject(); // Check and clean vector files // @deprecated v4 this should be moved to a post processing method on the file model $extension = strtolower($uploadedFile->getClientOriginalExtension()); // @deprecated media.clean_vectors set default to true in v4 if ($extension === 'svg' && \Config::get('media.clean_vectors', false)) { // getRealPath() can be empty for some environments (IIS) $realPath = empty(trim($uploadedFile->getRealPath())) ? $uploadedFile->getPath() . DIRECTORY_SEPARATOR . $uploadedFile->getFileName() : $uploadedFile->getRealPath(); \File::put($realPath, \Html::cleanVector(\File::get($realPath))); } $file = $fileModel; $file->data = $uploadedFile; $file->is_public = $fileRelation->isPublic(); $file->save(); // Determine the session key and if deferred binding should be used $parent = $fileRelation->getParent(); $attachOnUpload = $this->deferredBinding === false && $parent && $parent->exists; $sessionKey = $attachOnUpload ? null : $this->getSessionKey(); // Attach the file $fileRelation->add($file, $sessionKey); $file = $this->decorateFileAttributes($file); $result = [ 'id' => $file->id, 'thumb' => $file->thumbUrl, 'path' => $file->pathUrl ]; $response = Response::make($result, 200); } catch (Exception $ex) { $response = Response::make($ex->getMessage(), 400); } return $response; } /** * decorateFileAttributes adds the bespoke attributes used * internally by this widget. Added attributes are: * - thumbUrl * - pathUrl * @return System\Models\File */ protected function decorateFileAttributes($file) { $path = $thumb = $file->getPath(); if ($this->shouldGenerateThumb()) { $thumb = $file->getThumb($this->imageWidth, $this->imageHeight, $this->thumbOptions); } $file->pathUrl = $path; $file->thumbUrl = $thumb; return $file; } /** * shouldGenerateThumb determines if the resizer should be used */ protected function shouldGenerateThumb() { if ($this->thumbOptions === false) { return false; } return $this->imageWidth || $this->imageHeight; } /** * getUploadMaxFilesize returns max upload filesize in MB */ protected function getUploadMaxFilesize(): float { return FileModel::getMaxFilesize() / 1024; } } ================================================ FILE: modules/backend/formwidgets/MarkdownEditor.php ================================================ <?php namespace Backend\FormWidgets; use Backend\Classes\FormWidgetBase; use BackendAuth; use Markdown; /** * MarkdownEditor renders a markdown editor field. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class MarkdownEditor extends FormWidgetBase { // // Legacy properties // /** * @var string Display mode: split, tab. */ public $mode = 'tab'; /** * @var bool Render preview with safe markdown. */ public $safe = false; /** * @var bool The Legacy mode disables the Vue integration. */ public $legacyMode = false; // // Configurable Properties // /** * @var bool sideBySide window by default. */ public $sideBySide = false; /** * @var string Defines a mount point for the editor toolbar. * Must include a module name that exports the Vue application and a state element name. * Format: stateElementName * Only works in Vue applications and form document layouts. */ public $externalToolbarAppState = null; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'markdown'; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'mode', 'safe', 'legacyMode', 'sideBySide', 'externalToolbarAppState' ]); if (!$this->legacyMode) { $this->controller->registerVueComponent(\Backend\VueComponents\DocumentMarkdownEditor::class); } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('markdowneditor'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['mode'] = $this->mode; $this->vars['legacyMode'] = $this->legacyMode; $this->vars['sideBySide'] = $this->sideBySide; $this->vars['stretch'] = $this->formField->stretch; $this->vars['size'] = $this->formField->size; $this->vars['name'] = $this->getFieldName(); $this->vars['value'] = $this->getLoadValue(); $this->vars['useMediaManager'] = BackendAuth::userHasAccess('media.library'); $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState; } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/markdowneditor.css'); $this->addJs('js/markdowneditor.js', ['type' => 'module']); $this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/build-min.js'); } public function onRefresh() { $value = (string) post($this->getFieldName()); $previewHtml = $this->safe ? Markdown::parseIndent($value) : Markdown::parse($value); return [ 'preview' => $previewHtml ]; } } ================================================ FILE: modules/backend/formwidgets/NestedForm.php ================================================ <?php namespace Backend\FormWidgets; use Backend\Classes\FormField; use Backend\Classes\FormWidgetBase; use October\Rain\Database\Model; use October\Rain\Exception\ValidationException; use October\Rain\Html\Helper as HtmlHelper; /** * NestedForm widget * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class NestedForm extends FormWidgetBase { use \Backend\Traits\FormModelSaver; use \Backend\Traits\FormModelWidget; /** * @inheritDoc */ protected $defaultAlias = 'nestedform'; /** * @var array form configuration */ public $form; /** * @var bool showPanel defines if the nested form is styled like a panel */ public $showPanel = true; /** * @var bool defaultCreate will create a new record when the form loads, useful * for associating relations within the nested form */ public $defaultCreate = false; /** * @var bool useRelation will instruct the widget to look for a relationship */ protected $useRelation = false; /** * @var \Backend\Widgets\Form formWidget reference */ protected $formWidget; /** * @var \Model relatedRecord when using a relation */ protected $relatedRecord; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'form', 'showPanel', 'defaultCreate' ]); if ($this->formField->disabled) { $this->previewMode = true; } $this->processRelationMode(); $this->makeNestedFormWidget(); } /** * @inheritdoc */ public function render() { $this->prepareVars(); return $this->makePartial('nestedform'); } /** * prepareVars for display */ public function prepareVars() { $this->formWidget->previewMode = $this->previewMode; } /** * loadAssets */ protected function loadAssets() { $this->addCss('css/nestedform.css'); } /** * @inheritDoc */ public function getSaveValue($value) { if ($this->useRelation) { return $this->processSaveForRelation($value); } return $this->formWidget->getSaveData(); } /** * resetFormValue from the form field */ public function resetFormValue() { $this->formWidget->setFormValues($this->formField->value); } /** * processSaveForRelation * @param array $value * @return array|null */ protected function processSaveForRelation($value) { // Give form field widgets an opportunity to process the data $widget = $this->formWidget; $saveData = $widget->getSaveData(); // Save data to the model $model = $widget->model; $modelsToSave = $this->prepareModelsToSave($model, $saveData); foreach ($modelsToSave as $attrChain => $modelToSave) { try { $modelToSave->save(['sessionKey' => $widget->getSessionKeyWithSuffix()]); } catch (ValidationException $ve) { $ve->setFieldPrefix(array_merge( HtmlHelper::nameToArray($this->valueFrom), $attrChain ? explode('.', $attrChain) : [] )); throw $ve; } } return FormField::NO_SAVE_DATA; } /** * makeNestedFormWidget creates a form widget */ protected function makeNestedFormWidget() { $config = $this->makeConfig($this->form); if ($this->useRelation) { $config->model = $this->getLoadValueFromRelation(); } else { $config->model = $this->model; $config->data = $this->getLoadValue() ?: []; $config->isNested = true; } $config->alias = $this->alias . $this->defaultAlias; $config->context = $this->formField->context; $config->arrayName = $this->getFieldName(); $config->sessionKey = $this->sessionKey; $config->sessionKeySuffix = $this->sessionKeySuffix; $config->parentFieldName = $this->formField->fieldName; $this->tagTabbedFormFields($config->tabs); $this->tagTabbedFormFields($config->secondaryTabs); $widget = $this->makeWidget(\Backend\Widgets\Form::class, $config); $widget->previewMode = $this->previewMode; $widget->bindToController(); $this->formWidget = $widget; } /** * tagTabbedFormFields adds is-nested CSS class to tabs */ protected function tagTabbedFormFields(&$config) { if (!$config) { return; } if (isset($config['cssClass'])) { $config['cssClass'] = $config['cssClass'] . ' is-nested'; } else { $config['cssClass'] = 'is-nested'; } } /** * getLoadValueFromRelation */ protected function getLoadValueFromRelation() { if ($this->relatedRecord !== null) { return $this->relatedRecord; } $this->relatedRecord = $this->getRelationObject() ->withDeferred($this->getSessionKey()) ->first() ; if (!$this->relatedRecord) { $this->relatedRecord = $this->createRelationByDefault(); } return $this->relatedRecord; } /** * createRelationByDefault */ protected function createRelationByDefault() { $model = $this->getRelationModel(); if ($this->defaultCreate) { $model->save(['force' => true]); $this->getRelationObject()->add($model, $this->getSessionKey()); } return $model; } /** * processRelationMode */ protected function processRelationMode() { [$model, $attribute] = $this->nearestModelAttribute($this->valueFrom); if ($model instanceof Model && $model->hasRelation($attribute)) { $this->useRelation = true; } } } ================================================ FILE: modules/backend/formwidgets/PaletteEditor.php ================================================ <?php namespace Backend\FormWidgets; use Backend\Classes\FormField; use Backend\Classes\FormWidgetBase; /** * PaletteEditor is used by the system internally on the Backend / Customize Backend page. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class PaletteEditor extends FormWidgetBase { use \Backend\Models\BrandSetting\HasPalettes; /** * @var string colorModeFrom is the field name to source the color mode from */ public $colorModeFrom = 'color_mode'; /** * @var \Backend\Widgets\Form colorsFormWidget reference */ protected $colorsFormWidget; const PRESET_DEFAULT = 'default'; const PRESET_CUSTOM = 'custom'; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'colorModeFrom', ]); $this->makeColorsFormWidget(); } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('paletteeditor'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['field'] = $this->formField; $this->vars['presetValue'] = $this->getPresetValue(); $this->vars['colorModeField'] = $this->getColorModeField(); $this->vars['colorModeValue'] = $this->getColorModeValue(); } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/paletteeditor.css'); $this->addJs('js/paletteeditor.js'); } /** * getSaveValue */ public function getSaveValue($value) { if ($this->getColorModeValue() === 'light') { $lightColors = post('PaletteEditor[palette]'); $darkColors = $this->getPaletteValue('dark'); } else { $darkColors = post('PaletteEditor[palette]'); $lightColors = $this->getPaletteValue('light'); } // Ensure saved value are valid hex colors $parseAsHex = function($arr) { array_walk_recursive($arr, function(&$value) { $value = '#' . preg_replace("/[^a-zA-Z0-9]+/", '', $value); }); return $arr; }; return [ 'preset' => (string) $value, 'light' => $parseAsHex((array) $lightColors), 'dark' => $parseAsHex((array) $darkColors) ]; } /** * getPresetDefinitions returns everything we know about the palette state */ protected function getPresetDefinitions(): array { return array_merge( $this->getPaletteDefinitions(), [ 'custom' => [ 'light' => $this->getLoadValue()['light'] ?? [], 'dark' => $this->getLoadValue()['dark'] ?? [] ] ] ); } /** * getPresetValue */ protected function getPresetValue(): string { return $this->getLoadValue()['preset'] ?? self::PRESET_DEFAULT; } /** * getColorModeValue returns the color mode value (externally) */ protected function getColorModeValue(): string { $colorMode = post( 'PaletteEditor[color_mode]', $this->model->{$this->colorModeFrom} ?? 'light' ); if ($colorMode === 'auto') { $colorMode = $_COOKIE['admin_color_mode_setting'] ?? 'light'; } if (!in_array($colorMode, ['light', 'dark'])) { $colorMode = 'light'; } return $colorMode; } /** * getPaletteValue */ protected function getPaletteValue(?string $mode = null): array { if ($mode === null) { $mode = $this->getColorModeValue(); } return $this->getLoadValue()[$mode] ?? $this->getPaletteColors()[$mode]; } /** * getColorModeField */ protected function getColorModeField(): FormField { return $this->getParentForm()->getField($this->colorModeFrom); } /** * makeColorsFormWidget creates a form widget */ protected function makeColorsFormWidget() { $config = $this->makeConfig(base_path('modules/backend/formwidgets/paletteeditor/partials/fields_colors.yaml')); $config->model = $this->model; $config->data = ['palette' => $this->getPaletteValue()]; $config->isNested = true; $config->alias = $this->alias . $this->defaultAlias; $config->context = $this->formField->context; $config->arrayName = 'PaletteEditor'; $config->sessionKey = $this->sessionKey; $widget = $this->makeWidget(\Backend\Widgets\Form::class, $config); $widget->bindToController(); $this->colorsFormWidget = $widget; } } ================================================ FILE: modules/backend/formwidgets/PermissionEditor.php ================================================ <?php namespace Backend\FormWidgets; use Backend\Classes\RoleManager; use Backend\Classes\FormWidgetBase; use BackendAuth; /** * PermissionEditor is used by the system internally on the System / Administrators pages. * * Available Modes: * * - radio: Default mode, used by user-level permissions. * Provides three-state control over each available permission. States are * -1: Explicitly deny the permission * 0: Inherit the permission's value from a parent source (User inherits from Role) * 1: Explicitly grant the permission * * - checkbox: Used to define permissions for roles. Intended to define a base of what permissions are available * Provides two state control over each available permission. States are * 1: Explicitly allow the permission * null: If the checkbox is not ticked, the permission will not be sent to the server and will not be stored. * This is interpreted as the permission not being present and thus not allowed * * - switch: Used to define overriding permissions in a simpler UX than the radio. * Provides two state control over each available permission. States are * 1: Explicitly allow the permission * -1: Explicitly deny the permission * * Although users are still not allowed to modify permissions that they themselves do not have access to, * available permissions can be defined in the form of an array of permission codes to allow: * * availablePermissions: ['some.author.permission', 'some.other.permission', 'etc.some.system.permission'] * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class PermissionEditor extends FormWidgetBase { /** * @var \Backend\Models\User user */ protected $user; /** * @var string Mode to display the permission editor with. Available options: radio, checkbox, switch */ public $mode = 'radio'; /** * @var array Permission codes to allow to be interacted with through this widget */ public $availablePermissions; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'mode', 'availablePermissions', ]); $this->user = BackendAuth::getUser(); } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('permissioneditor'); } /** * prepareVars for display */ public function prepareVars() { if ($this->formField->disabled) { $this->previewMode = true; } $permissionsData = $this->formField->getValueFromData($this->model); if (!is_array($permissionsData)) { $permissionsData = []; } $this->vars['mode'] = $this->mode; $this->vars['permissions'] = $this->getViewPermissions(); $this->vars['baseFieldName'] = $this->getFieldName(); $this->vars['permissionsData'] = $permissionsData; $this->vars['field'] = $this->formField; } /** * @inheritDoc */ public function getSaveValue($value) { if ($this->user->isSuperUser()) { return is_array($value) ? $value : []; } return $this->getSaveValueSecure($value); } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/permissioneditor.css'); $this->addJs('js/permissioneditor.js', ['type' => 'module']); } /** * getSaveValueSecure returns a safely parsed set of permissions, ensuring the user cannot * elevate their own permissions or permissions of another user above their own. * * @param string $value * @return array */ protected function getSaveValueSecure($value) { $newPermissions = is_array($value) ? array_map('intval', $value) : []; if (!$newPermissions) { return []; } $existingPermissions = $this->model->permissions ?: []; $allowedPermissions = array_map(function ($permissionObject) { return $permissionObject->code; }, $this->getFilteredPermissions()); foreach ($newPermissions as $permission => $code) { if (in_array($permission, $allowedPermissions)) { $existingPermissions[$permission] = $code; } } return $existingPermissions; } /** * getFilteredPermissions returns the available permissions, removing those that * the logged-in user does not have access to. In the format of: * * ['permission-tab' => $arrayOfAllowedPermissionObjects] * * @return array */ protected function getFilteredPermissions() { $permissions = RoleManager::instance()->listPermissionsForUser($this->user); if (!is_array($this->availablePermissions)) { return $permissions; } return array_filter($permissions, function ($permission) { return $permission->code && in_array($permission->code, $this->availablePermissions); }); } /** * getViewPermissions */ protected function getViewPermissions() { $permissions = $this->getFilteredPermissions(); $permissions = $this->makeTabbedPermissions($permissions); $permissions = array_map(function($tabbed) { return $this->makeNestedPermissions($tabbed); }, $permissions); return $permissions; } /** * makeTabbedPermissions */ protected function makeTabbedPermissions($permissions) { $tabs = []; foreach ($permissions as $permission) { $tab = $permission->tab ?? 'backend::lang.form.undefined_tab'; if (!array_key_exists($tab, $tabs)) { $tabs[$tab] = []; } $tabs[$tab][$permission->code] = $permission; } return $tabs; } /** * makeNestedPermissions */ protected function makeNestedPermissions($permissions) { $forget = []; foreach ($permissions as $permission) { $code = $permission->code; $parentCode = substr($code, 0, strrpos($code, '.')); if (isset($permissions[$parentCode])) { $permissions[$parentCode]->addChild($permission); $forget[] = $code; } } array_forget($permissions, $forget); return $permissions; } } ================================================ FILE: modules/backend/formwidgets/RecordFinder.php ================================================ <?php namespace Backend\FormWidgets; use Lang; use ApplicationException; use Backend\Classes\FormWidgetBase; use Illuminate\Database\Eloquent\Collection; /** * RecordFinder renders a record finder field * * user: * label: User * type: recordfinder * list: ~/plugins/rainlab/user/models/user/columns.yaml * recordsPerPage: 10 * title: Find Record * keyFrom: id * nameFrom: name * descriptionFrom: email * conditions: email = "bob@example.com" * modelScope: whereActive * searchMode: all * searchScope: searchUsers * useRelation: false * modelClass: RainLab\User\Models\User * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class RecordFinder extends FormWidgetBase { use \Backend\Traits\FormModelWidget; // // Configurable Properties // /** * @var string keyFrom is the field name to use for key */ public $keyFrom; /** * @var string nameFrom is the relation column to display for the name */ public $nameFrom = 'name'; /** * @var string descriptionFrom is the relation column to display for the description */ public $descriptionFrom; /** * @var string title text to display for the title of the popup list form */ public $title = 'backend::lang.recordfinder.find_record'; /** * @var int recordsPerPage is the maximum rows to display for each page */ public $recordsPerPage = 10; /** * @var string modelScope uses a custom scope method for the list query. */ public $modelScope; /** * @var string conditions filters the relation using a raw where query statement. */ public $conditions; /** * @var mixed defaultSort column to look for. */ public $defaultSort; /** * @var bool showSetup in the search list. */ public $showSetup = false; /** * @var bool|array|null structure configuration in the search list. */ public $structure = null; /** * @var string searchMode if searching the records, specifies a policy to use. * - all: result must contain all words * - any: result can contain any word * - exact: result must contain the exact phrase */ public $searchMode; /** * @var bool inlineOptions displays the field with buttons alongside the selected record * with an assumed amount of horizontal space to accommodate it. Disable this mode * if horizontal space is limited. */ public $inlineOptions = true; /** * @var string searchScope uses a custom scope method for performing searches. */ public $searchScope; /** * @var boolean useRelation flag for using the name of the field as a relation * name to interact with directly on the parent model. Default: true. Disable * to return just the selected model's ID */ public $useRelation = true; /** * @var string modelClass of the model to use for listing records when * useRelation = false */ public $modelClass; /** * @var string popupSize as, either giant, huge, large, small, tiny or adaptive */ public $popupSize = 'huge'; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'recordfinder'; /** * @var Model relationModel */ public $relationModel; /** * @var string|int relationKeyValue */ protected $relationKeyValue = -1; /** * @var \Backend\Widgets\Lists listWidget reference to the widget used for viewing (list or form). */ protected $listWidget; /** * @var \Backend\Widgets\Search searchWidget reference to the widget used for searching */ protected $searchWidget; /** * @var \Backend\Widgets\Filter filterWidget reference to the widget used for filtering */ protected $filterWidget; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'title', 'keyFrom', 'nameFrom', 'descriptionFrom', 'modelScope', 'defaultSort', 'showSetup', 'structure', 'conditions', 'inlineOptions', 'searchMode', 'searchScope', 'recordsPerPage', 'useRelation', 'modelClass', 'popupSize', ]); if (isset($this->config->scope)) { $this->modelScope = $this->config->scope; } if (!$this->useRelation && !class_exists($this->modelClass)) { throw new ApplicationException(Lang::get('backend::lang.recordfinder.invalid_model_class', ['modelClass' => $this->modelClass])); } if (!post('recordfinder_flag')) { return; } $this->listWidget = $this->makeListWidget(); $this->listWidget->bindToController(); // Search widget if ($this->searchWidget = $this->makeSearchWidget()) { $this->listWidget->setSearchTerm($this->searchWidget->getActiveTerm()); // Link the Search Widget to the List Widget $this->searchWidget->bindEvent('search.submit', function () { $this->listWidget->setSearchTerm($this->searchWidget->getActiveTerm()); return $this->listWidget->onRefresh(); }); $this->searchWidget->bindToController(); } // Filter widget if ($this->filterWidget = $this->makeFilterWidget()) { $this->listWidget->addFilter([$this->filterWidget, 'applyAllScopesToQuery']); // Filter the list when the scopes are changed $this->filterWidget->bindEvent('filter.update', function() { return $this->listWidget->onFilter(); }); $this->filterWidget->bindToController(); } } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/recordfinder.css'); $this->addJs('js/recordfinder.js', ['type' => 'module']); } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('container'); } /** * prepareVars for display */ public function prepareVars() { $this->relationModel = $this->getLoadValue(); if ($this->formField->disabled) { $this->previewMode = true; } $this->vars['displayMode'] = $this->inlineOptions ? 'single' : 'multi'; $this->vars['popupSize'] = $this->popupSize; $this->vars['value'] = $this->getKeyValue(); $this->vars['field'] = $this->formField; $this->vars['nameValue'] = $this->getNameValue(); $this->vars['descriptionValue'] = $this->getDescriptionValue(); $this->vars['listWidget'] = $this->listWidget; $this->vars['searchWidget'] = $this->searchWidget; $this->vars['filterWidget'] = $this->filterWidget; $this->vars['title'] = $this->title; } /** * onRefresh AJAX handler */ public function onRefresh() { $value = post($this->getFieldName()); $this->setKeyValue($value); $this->prepareVars(); return ['#'.$this->getId('container') => $this->makePartial('recordfinder')]; } /** * onClearRecord AJAX handler */ public function onClearRecord() { $this->setKeyValue(null); $this->prepareVars(); return ['#'.$this->getId('container') => $this->makePartial('recordfinder')]; } /** * onFindRecord AJAX handler */ public function onFindRecord() { $this->prepareVars(); // Purge the search term stored in session if ($this->searchWidget) { $this->listWidget->setSearchTerm(null); $this->searchWidget->setActiveTerm(null); } return $this->makePartial('recordfinder_form'); } /** * @inheritDoc */ public function getSaveValue($value) { return strlen($value) ? $value : null; } /** * @inheritDoc */ public function getLoadValue() { $value = null; if ($this->useRelation) { [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom); if ($model !== null) { $value = $model->{$attribute}; } // Multi support if ($value instanceof Collection) { $value = $value->first(); } } else { $value = parent::getLoadValue(); if ($value) { $value = $this->modelClass::where($this->getKeyFromAttributeName(), $value)->first(); } } return $value; } /** * setKeyValue */ public function setKeyValue($value) { $this->relationKeyValue = $value; if ($this->useRelation) { [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom); $model->{$attribute} = $value; } else { $this->formField->value = $value; } } /** * getKeyValue */ public function getKeyValue() { if ($this->relationKeyValue !== -1) { return $this->relationKeyValue; } if (!$this->relationModel) { return null; } return $this->useRelation ? $this->relationModel->{$this->getKeyFromAttributeName()} : $this->formField->value; } /** * getKeyFromAttributeName */ protected function getKeyFromAttributeName() { if ($this->keyFrom) { return $this->keyFrom; } if (!$this->useRelation) { return 'id'; } $relationType = $this->getRelationType(); $relationObject = $this->getRelationObject(); // Relations can specify a custom local or foreign "other" key, // which can be detected and implemented here automatically. if (in_array($relationType, ['belongsTo'])) { $primaryKeyName = $relationObject->getOwnerKeyName(); } elseif (in_array($relationType, ['hasMany', 'hasOne', 'belongsToMany', 'morphedByMany', 'morphToMany'])) { $primaryKeyName = $relationObject->getRelatedKeyName(); } else { $primaryKeyName = $this->getRelationModel()->getKeyName(); } return $primaryKeyName; } /** * getNameValue */ public function getNameValue() { if (!$this->relationModel || !$this->nameFrom) { return null; } return $this->relationModel->{$this->nameFrom}; } /** * getDescriptionValue */ public function getDescriptionValue() { if (!$this->relationModel || !$this->descriptionFrom) { return null; } return $this->relationModel->{$this->descriptionFrom}; } /** * makeListWidget */ protected function makeListWidget() { $config = $this->makeConfig($this->getConfig('list')); $config->model = $this->useRelation ? $this->getRelationModel() : new $this->modelClass; $config->alias = $this->alias . 'List'; $config->showSetup = $this->showSetup; $config->showCheckboxes = false; $config->defaultSort = $this->defaultSort; $config->recordsPerPage = $this->recordsPerPage; $config->recordOnClick = sprintf("oc.fetchControl(document.getElementById('%s'), 'recordfinder').updateRecord(this, ':" . $this->getKeyFromAttributeName() . "')", $this->getId()); // Structure support $structureConfig = $this->makeListStructureConfig($config); if ($structureConfig) { $widget = $this->makeWidget(\Backend\Widgets\ListStructure::class, $structureConfig); } else { $widget = $this->makeWidget(\Backend\Widgets\Lists::class, $config); } $widget->setSearchOptions([ 'mode' => $this->searchMode, 'scope' => $this->searchScope, ]); if ($sqlConditions = $this->conditions) { $widget->bindEvent('list.extendQueryBefore', function ($query) use ($sqlConditions) { $query->whereRaw($sqlConditions); }); } elseif ($scopeMethod = $this->modelScope) { $widget->bindEvent('list.extendQueryBefore', function ($query) use ($scopeMethod) { if ($callableMethod = $this->formField->getCallableMethodFromValue($scopeMethod)) { $callableMethod($query, $this->model); } elseif (is_string($scopeMethod)) { $query->$scopeMethod($this->model); } }); } else { if ($this->useRelation) { $widget->bindEvent('list.extendQueryBefore', function ($query) { $this->getRelationObject()->addDefinedConstraintsToQuery($query); }); } } return $widget; } /** * makeListStructureConfig */ protected function makeListStructureConfig($config) { if ($this->structure === false) { return null; } $structureConfig = []; if (is_array($this->structure)) { $structureConfig = $this->structure; } elseif ($this->structure === true) { $structureConfig['showTree'] = true; } elseif ( ($model = $config->model) && $model->isClassInstanceOf(\October\Contracts\Database\TreeInterface::class) ) { $structureConfig['showTree'] = true; } // Force read-only mode if ($structureConfig) { $structureConfig = ['showReorder' => false] + $structureConfig; return $this->mergeConfig($config, $structureConfig); } return null; } /** * makeSearchWidget */ protected function makeSearchWidget() { $config = $this->makeConfig(); $config->alias = $this->alias . 'Search'; $config->growable = false; $config->prompt = 'backend::lang.list.search_prompt'; $widget = $this->makeWidget(\Backend\Widgets\Search::class, $config); $widget->cssClasses[] = 'recordfinder-search'; return $widget; } /** * makeFilterWidget */ protected function makeFilterWidget() { $filterConfig = $this->getConfig('filter'); if (!$filterConfig) { return null; } $config = $this->makeConfig($filterConfig); $config->model = $this->useRelation ? $this->getRelationModel() : new $this->modelClass; $config->alias = $this->alias . 'Filter'; $widget = $this->makeWidget(\Backend\Widgets\Filter::class, $config); $widget->cssClasses[] = 'recordfinder-filter'; return $widget; } /** * resetFormValue from the form field */ public function resetFormValue() { $this->setKeyValue($this->formField->value); // Transfer approved config $this->modelScope = $this->formField->modelScope ?: $this->formField->scope; $this->conditions = $this->formField->conditions; $this->defaultSort = $this->formField->defaultSort; } } ================================================ FILE: modules/backend/formwidgets/Relation.php ================================================ <?php namespace Backend\FormWidgets; use DbDongle; use Backend\Classes\FormField; use Backend\Classes\FormWidgetBase; use October\Rain\Html\Helper as HtmlHelper; use SystemException; /** * Relation renders a field pre-populated with a belongsTo and belongsToHasMany relation * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Relation extends FormWidgetBase { use \Backend\Traits\FormModelWidget; use \Backend\Traits\FormModelSaver; use \Backend\FormWidgets\Relation\HasQuickCreate; // // Configurable Properties // /** * @var bool readOnly if the sensitive field cannot be edited, but can be toggled */ public $readOnly = false; /** * @var string nameFrom is the model column to use for the name reference */ public $nameFrom = 'name'; /** * @var string sqlSelect is the custom SQL column selection to use for the name reference */ public $sqlSelect; /** * @var string emptyOption to use if the relation is singular (belongsTo) */ public $emptyOption; /** * @var string modelScope method for the list query. */ public $modelScope; /** * @var string conditions filters the relation using a raw where query statement. */ public $conditions; /** * @var mixed defaultSort column to look for. */ public $defaultSort; /** * @var mixed excludeFrom identifiers from the specified model attribute. */ public $excludeFrom; /** * @var bool useController to completely replace this widget the `RelationController` behavior. */ public $useController; /** * @var array useControllerConfig manually configures the `RelationController` behavior. */ public $useControllerConfig; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'relation'; /** * @var FormField renderFormField object used for rendering a simple field type */ public $renderFormField; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'readOnly', 'nameFrom', 'emptyOption', 'defaultSort', 'excludeFrom', 'modelScope', 'conditions', 'quickCreate', ]); if (isset($this->config->select)) { $this->sqlSelect = $this->config->select; } if (isset($this->config->scope)) { $this->modelScope = $this->config->scope; } $this->useControllerConfig = (array) ($this->config->controller ?? []); $this->useController = $this->evalUseController($this->config->useController ?? true); $this->initQuickCreate(); } /** * bindToController ensures manual relation controller configuration is applied. */ public function bindToController() { $this->defineRelationControllerConfig(); parent::bindToController(); } /** * @inheritDoc */ protected function loadAssets() { $this->loadQuickCreateAssets(); } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('relation'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['field'] = $this->makeRenderFormField(); } /** * makeRenderFormField for rendering a simple field type */ protected function makeRenderFormField() { if ($this->useController) { return null; } $field = clone $this->formField; [$model, $attribute] = $this->resolveModelAttribute($this->valueFrom); $relationObject = $this->getRelationObject(); $relationType = $model->getRelationType($attribute); $relationModel = $model->makeRelation($attribute); $query = $relationModel->newQuery(); if (in_array($relationType, ['belongsToMany', 'morphedByMany', 'morphToMany', 'hasMany'])) { $field->type = 'checkboxlist'; } elseif (in_array($relationType, ['belongsTo', 'hasOne', 'morphOne'])) { $field->type = 'dropdown'; } else { throw new SystemException("Could not translate relation type '{$relationType}' to a valid field type"); } // Sort the query using configuration if ($this->defaultSort) { $this->applyDefaultSortToQuery($query); } // Exclude values from the specified parent model attribute if ($this->excludeFrom) { $query->whereNotIn($relationModel->getKeyName(), (array) $model->{$this->excludeFrom}); } // It is safe to assume that if the model and related model are of // the exact same class, then it cannot be related to itself elseif ($model->exists && ($relationModel->getTable() === $model->getTable())) { $query->where($relationModel->getKeyName(), '<>', $model->getKey()); } if ($sqlConditions = $this->conditions) { $query->whereRaw(DbDongle::parse($sqlConditions, $model->attributes)); } elseif ($scopeMethod = $this->modelScope) { if ($callableMethod = $this->formField->getCallableMethodFromValue($scopeMethod)) { $callableMethod($query, $model); } elseif (is_string($scopeMethod)) { $query->$scopeMethod($model); } } else { $relationObject->addDefinedConstraintsToQuery($query); // Reset any orders that come from the definition since they may // reference the pivot table that isn't included in this query if (in_array($relationType, ['belongsToMany', 'morphedByMany', 'morphToMany'])) { $query->getQuery()->reorder(); // Re-apply defaultSort since it references valid columns if ($this->defaultSort) { $this->applyDefaultSortToQuery($query); } } } // Determine if the model uses a tree trait $usesTree = $relationModel->isClassInstanceOf(\October\Contracts\Database\TreeInterface::class); // The "sqlSelect" config takes precedence over "nameFrom". // A virtual column called "selection" will contain the result. // Tree models must select all columns to return parent columns, etc. if ($this->sqlSelect) { $nameFrom = 'selection'; $selectColumn = $usesTree ? '*' : $relationModel->getKeyName(); $selectSql = $this->sqlSelect; $result = $query->select($selectColumn, DbDongle::raw($selectSql . ' as ' . $nameFrom)); } else { // If the attribute is a getter, load all the models in to memory so it // can be retrieved. This impacts performance so we try to avoid it. // Otherwise, assume the name is taken from a database column. $nameFrom = $this->nameFrom; if ($relationModel->hasGetMutator($nameFrom) || $relationModel->hasAttributeMutator($nameFrom)) { $result = $query->get(); } else { $result = $query; } } // Relations can specify a custom local or foreign "other" key, // which can be detected and implemented here automatically. if (in_array($relationType, ['belongsTo'])) { $primaryKeyName = $relationObject->getOwnerKeyName(); } elseif (in_array($relationType, ['hasMany', 'hasOne', 'belongsToMany', 'morphedByMany', 'morphToMany'])) { $primaryKeyName = $relationObject->getRelatedKeyName(); } else { $primaryKeyName = $relationModel->getKeyName(); } // Set options on form field if ($usesTree) { $field->options = $this->makeFieldOptionsForTree( $result, $nameFrom, $primaryKeyName ); } else { $field->options = $result->pluck($nameFrom, $primaryKeyName)->all(); } // Add quick create option to dropdown if ($this->hasQuickCreate()) { $field->options = $this->addQuickCreateOption($field->options); } return $this->renderFormField = $field; } /** * makeFieldOptionsForTree */ protected function makeFieldOptionsForTree($items, $nameFrom, $primaryKeyName) { // When conditions or scopes filter the query, parent nodes may be excluded // from results. Preserve these orphaned children instead of discarding them. $removeOrphans = !$this->conditions && !$this->modelScope; if ($items instanceof \October\Rain\Database\TreeCollection) { $items = $items->toNested($removeOrphans); } elseif (!$items instanceof \Illuminate\Database\Eloquent\Collection) { $items = $items->get()->toNested($removeOrphans); } $options = []; foreach ($items as $item) { $newItem = [ 'label' => $item->{$nameFrom}, 'value' => $item->{$primaryKeyName}, ]; $childItems = $item->getChildren(); if ($childItems->count() > 0) { $newItem['children'] = $this->makeFieldOptionsForTree( $childItems, $nameFrom, $primaryKeyName ); } $options[$item->{$primaryKeyName}] = $newItem; } return $options; } /** * applyDefaultSortToQuery */ protected function applyDefaultSortToQuery($query) { if (is_string($this->defaultSort)) { $query->orderBy($this->defaultSort, 'desc'); } elseif (is_array($this->defaultSort) && isset($this->defaultSort['column'])) { $query->orderBy($this->defaultSort['column'], $this->defaultSort['direction'] ?? 'desc'); } } /** * evalUseController determines if the relation controller is usable and returns the default * preference if it can be used. */ protected function evalUseController(bool $defaultPref): bool { if ($this->useControllerConfig) { return true; } if (!$this->controller->isClassExtendedWith(\Backend\Behaviors\RelationController::class)) { return false; } if (!is_string($this->valueFrom)) { return false; } if (!$this->controller->relationHasField($this->getRelationControllerFieldName())) { return false; } return $defaultPref; } /** * defineRelationControllerConfig */ protected function defineRelationControllerConfig() { if (!$this->useController || !$this->useControllerConfig) { return; } if (!$this->controller->isClassExtendedWith(\Backend\Behaviors\RelationController::class)) { $this->controller->extendClassWith(\Backend\Behaviors\RelationController::class); $this->controller->asExtension('RelationController')->beforeDisplay(); } $controllerConfig = $this->useControllerConfig; if (!isset($controllerConfig['readOnly']) && $this->readOnly === true) { $controllerConfig['readOnly'] = $this->readOnly; } if (!isset($controllerConfig['sessionKey'])) { $controllerConfig['sessionKey'] = $this->getParentForm()?->getSessionKeyWithSuffix(); } $this->controller->relationRegisterField($this->getRelationControllerFieldName(), $controllerConfig); } /** * getRelationControllerFieldName */ protected function getRelationControllerFieldName() { $relationName = $this->valueFrom; if ($parentFieldName = $this->getParentForm()?->parentFieldName) { $relationName = $parentFieldName . '['.implode('][', HtmlHelper::nameToArray($relationName)).']'; } return $relationName; } /** * @inheritDoc */ public function getSaveValue($value) { if (is_string($value) && !strlen($value)) { return null; } if (is_array($value) && !count($value)) { return null; } return $value; } /** * resetFormValue from the form field */ public function resetFormValue() { // Transfer approved config $this->modelScope = $this->formField->modelScope ?: $this->formField->scope; $this->conditions = $this->formField->conditions; $this->defaultSort = $this->formField->defaultSort; } } ================================================ FILE: modules/backend/formwidgets/Repeater.php ================================================ <?php namespace Backend\FormWidgets; use Backend\Classes\FormField; use Backend\Classes\FormWidgetBase; /** * Repeater Form Widget * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Repeater extends FormWidgetBase { use \Backend\Traits\FormModelSaver; use \Backend\Traits\FormModelWidget; use \Backend\FormWidgets\Repeater\HasJsonStore; use \Backend\FormWidgets\Repeater\HasRelationStore; const MODE_ACCORDION = 'accordion'; const MODE_BUILDER = 'builder'; // // Configurable Properties // /** * @var array form field configuration */ public $form; /** * @var array groups configuration */ public $groups; /** * @var string prompt text for adding new items */ public $prompt = "Add New Item"; /** * @var bool showReorder allows the user to reorder the items */ public $showReorder = true; /** * @var bool showDuplicate allow the user to duplicate an item */ public $showDuplicate = true; /** * @var string titleFrom field name to use for the title of collapsed items */ public $titleFrom = false; /** * @var string groupKeyFrom attribute stored along with the saved data */ public $groupKeyFrom = '_group'; /** * @var int minItems required. Pre-displays those items when not using groups */ public $minItems; /** * @var int maxItems permitted */ public $maxItems; /** * @var string displayMode constant */ public $displayMode; /** * @var bool itemsExpanded will expand the repeater item by default, otherwise * they will be collapsed and only select one at a time when clicking the header. */ public $itemsExpanded = true; /** * @var bool useTabs for the form fields. */ public $useTabs = false; /** * @var string Defines a mount point for the editor toolbar. * Must include a module name that exports the Vue application and a state element name. * Format: stateElementName * Only works in Vue applications and form document layouts. */ public $externalToolbarAppState = null; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'repeater'; /** * @var array indexMeta data associated to each field, organised by index */ protected $indexMeta = []; /** * @var array formWidgets collection */ protected $formWidgets = []; /** * @var bool onAddItemCalled sets the create context for default values */ protected static $onAddItemCalled; /** * @var bool useGroups */ protected $useGroups = false; /** * @var bool useRelation */ protected $useRelation = false; /** * @var array relatedRecords when using a relation */ protected $relatedRecords; /** * @var array groupDefinitions */ protected $groupDefinitions = []; /** * @var boolean isLoaded is true when the request is made via postback */ protected $isLoaded = false; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'form', 'groups', 'prompt', 'displayMode', 'itemsExpanded', 'showReorder', 'showDuplicate', 'titleFrom', 'groupKeyFrom', 'minItems', 'maxItems', 'useTabs', 'externalToolbarAppState' ]); if ($this->formField->disabled) { $this->previewMode = true; } $this->processGroupMode(); $this->processRelationMode(); $this->processLoadedState(); $this->processLegacyConfig(); $this->processItems(); } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('repeater'); } /** * prepareVars for display */ public function prepareVars() { if ($this->previewMode) { foreach ($this->formWidgets as $widget) { $widget->previewMode = true; } } $this->vars['name'] = $this->getFieldName(); $this->vars['displayMode'] = $this->getDisplayMode(); $this->vars['itemsExpanded'] = $this->itemsExpanded; $this->vars['prompt'] = $this->prompt; $this->vars['formWidgets'] = $this->formWidgets; $this->vars['titleFrom'] = $this->titleFrom; $this->vars['groupKeyFrom'] = $this->groupKeyFrom; $this->vars['minItems'] = $this->minItems; $this->vars['maxItems'] = $this->maxItems; $this->vars['useRelation'] = $this->useRelation; $this->vars['useGroups'] = $this->useGroups; $this->vars['groupDefinitions'] = $this->groupDefinitions; $this->vars['showReorder'] = $this->showReorder; $this->vars['showDuplicate'] = $this->showDuplicate; $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState; } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/repeater.css'); $this->addJs('js/repeater.accordion.js', ['type' => 'module']); $this->addJs('js/repeater.builder.js', ['type' => 'module']); } /** * @inheritDoc */ public function getSaveValue($value) { return $this->processSaveValue($value); } /** * resetFormValue from the form field */ public function resetFormValue() { // Transfer approved config $this->minItems = $this->formField->minItems; $this->maxItems = $this->formField->maxItems; // Reprocess widgets $this->formWidgets = []; $this->processItems(); // Reprocess related items $this->relatedRecords = null; } /** * processLoadedState is special logic that occurs during a postback, * the form field value is set directly from the postback data, this occurs * during initialization so that nested form widgets can be bound to the controller. */ protected function processLoadedState() { if (!post($this->alias . '_loaded')) { return; } $this->formField->value = $this->getLoadedValueFromPost(); $this->isLoaded = true; } /** * getLoadedValueFromPost returns the loaded value from postback with indexes intact */ protected function getLoadedValueFromPost() { return post($this->formField->getName()); } /** * processLegacyConfig converts deprecated options to latest */ protected function processLegacyConfig() { if ($style = $this->getConfig('style')) { if ($style === 'accordion' || $style === 'collapsed') { $this->itemsExpanded = false; } } } /** * processSaveValue splices in some meta data (group and index values) to the dataset * @param array $value * @return array|null */ protected function processSaveValue($value) { return $this->useRelation ? $this->processSaveForRelation($value) : $this->processSaveForJson($value); } /** * processItems processes data and applies it to the form widgets */ protected function processItems() { if ($this->useRelation) { $this->processItemsForRelation(); } else { $this->processItemsForJson(); } } /** * makeItemFormWidget creates a form widget based on a field index and optional group code * @param int|string $index * @param string $groupCode * @param int|string $fromIndex * @return \Backend\Widgets\Form */ protected function makeItemFormWidget($index = 0, $groupCode = null, $fromIndex = null) { $configDefinition = $this->useGroups ? $this->getGroupFormFieldConfig($groupCode) : $this->form; $config = $this->makeConfig($configDefinition); // Duplicate $dataIndex = $fromIndex !== null ? $fromIndex : $index; if ($this->useRelation) { $config->model = $this->getModelFromIndex($index); $indexName = ($modelKey = $config->model->getKey()) ? "id:{$modelKey}" : $index; } else { $config->model = $this->model; $config->data = $this->getValueFromIndex($dataIndex); $config->isNested = true; $indexName = $index; } $config->alias = $this->alias . 'Form' . $index; $config->context = self::$onAddItemCalled ? FormField::CONTEXT_CREATE : FormField::CONTEXT_UPDATE; $config->arrayName = $this->getFieldName().'['.$index.']'; $config->sessionKey = $this->sessionKey; $config->sessionKeySuffix = $this->sessionKeySuffix . "-{$index}"; $config->parentFieldName = $this->formField->fieldName . "[{$indexName}]"; $widget = $this->makeWidget(\Backend\Widgets\Form::class, $config); $widget->previewMode = $this->previewMode; $this->indexMeta[$index] = [ 'groupCode' => $groupCode ]; // Convert to tabbed config $useTabs = isset($config->useTabs) ? $config->useTabs : $this->useTabs; if ($useTabs) { $widget->bindEvent('form.extendFields', function() use ($widget) { $this->moveTabbedFormFields($widget, 'outside', 'secondary'); }); } $widget->bindToController(); return $this->formWidgets[$index] = $widget; } /** * moveTabbedFormFields from one tab to another */ protected function moveTabbedFormFields($widget, $fromTab, $toTab) { $from = $widget->getTab($fromTab); $to = $widget->getTab($toTab); foreach ($from->getAllFields() as $name => $field) { $to->addField($name, $field); $from->removeField($name); } } /** * getValueFromIndex returns the data at a given index * @param int|string $index */ protected function getValueFromIndex($index) { $data = $this->getLoadValue(); return $data[$index] ?? []; } /** * getDisplayMode for the repeater */ protected function getDisplayMode(): string { return in_array($this->displayMode, [static::MODE_ACCORDION, static::MODE_BUILDER]) ? $this->displayMode : static::MODE_ACCORDION; } // // AJAX handlers // /** * onAddItem handler */ public function onAddItem() { self::$onAddItemCalled = true; $this->prepareParentModelData(); $groupCode = post('_repeater_group'); if ($this->useRelation) { $index = $this->createRelationAtIndex($groupCode)->getKey(); } else { $index = $this->getNextIndex(); } $this->prepareVars(); $this->vars['widget'] = $this->makeItemFormWidget($index, $groupCode); $this->vars['indexValue'] = $index; $itemContainer = '@#' . $this->getId('items'); return [ $itemContainer => $this->makePartial('repeater_item') ]; } /** * onDuplicateItem */ public function onDuplicateItem() { $fromIndex = post('_repeater_index'); $groupCode = post('_repeater_group'); if ($this->useRelation) { // Relation must be saved to replicate $this->processSaveForRelation([$fromIndex => $this->getValueFromIndex($fromIndex)]); // Duplicate the model with replication $toIndex = $this->duplicateRelationAtIndex($fromIndex, $groupCode)->getKey(); } else { $toIndex = $this->getNextIndex(); } $this->prepareVars(); $this->vars['widget'] = $this->makeItemFormWidget($toIndex, $groupCode, $fromIndex); $this->vars['indexValue'] = $toIndex; $itemContainer = '@#' . $this->getId('items'); return [ 'result' => ['duplicateIndex' => $toIndex], $itemContainer => $this->makePartial('repeater_item') ]; } /** * onRemoveItem */ public function onRemoveItem() { if (!$this->useRelation) { return; } // Delete related records $deletedItems = (array) post('_repeater_items'); foreach ($deletedItems as $item) { $index = $item['repeater_index'] ?? null; if ($index !== null) { $this->deleteRelationAtIndex($index); } } } /** * onRefresh */ public function onRefresh() { $this->prepareParentModelData(); $index = post('_repeater_index'); $group = post('_repeater_group'); $widget = $this->makeItemFormWidget($index, $group); return $widget->onRefresh(); } /** * getNextIndex determines the next available index number for assigning to a * new repeater item */ protected function getNextIndex(): int { $data = $this->getLoadedValueFromPost(); if (is_array($data) && count($data)) { return max(array_keys($data)) + 1; } return 0; } /** * prepareParentModelData will ensure the parent model has its form data set * to provide context for newly created items or refreshed existing items. */ protected function prepareParentModelData() { // This code is used since it is more efficient than calling setFormValues() // on the form widget, switching to this could be useful if form field value // context is needed in the future. if (($form = $this->getParentForm()) && !$form->isNested) { $this->prepareModelsToSave($form->getModel(), $form->getSaveData()); } } // // Group Mode // /** * getGroupFormFieldConfig returns the form field configuration for a group, identified by code * @param string $code * @return array|null */ protected function getGroupFormFieldConfig($code) { if (!$code) { return null; } $config = array_get($this->groupDefinitions, $code); if (!isset($config['fields'])) { return null; } return $config; } /** * processGroupMode processes features related to group mode */ protected function processGroupMode() { $palette = []; $groups = $this->groups; $this->useGroups = (bool) $groups; if ($this->useGroups) { if (is_string($groups)) { $groups = $this->makeConfig($groups); } foreach ($groups as $code => $config) { if (str_starts_with($code, '_')) { continue; } if (is_string($config)) { $config = $this->makeConfig($config); } $palette[$code] = ['code' => $code] + ((array) $config) + [ 'name' => '', 'icon' => 'icon-square', 'description' => '', 'titleFrom' => '', 'fields' => [], ]; } $this->groupDefinitions = $palette; } } /** * getGroupCodeFromIndex returns a field group code from its index * @param int|string $index */ public function getGroupCodeFromIndex($index): string { return (string) array_get($this->indexMeta, $index.'.groupCode'); } /** * getGroupItemConfig returns the group config from its unique code * @param string $groupCode * @param ?string $name */ public function getGroupItemConfig($groupCode, $name = null, $default = null) { return array_get($this->groupDefinitions, $groupCode.'.'.$name, $default); } } ================================================ FILE: modules/backend/formwidgets/RichEditor.php ================================================ <?php namespace Backend\FormWidgets; use App; use Config; use BackendAuth; use Backend\Classes\FormWidgetBase; use Backend\Models\EditorSetting; /** * RichEditor renders a rich content editor field. * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class RichEditor extends FormWidgetBase { // // Configurable Properties // /** * @var bool Determines whether content has HEAD and HTML tags. */ public $fullPage = false; /** * @var bool Determines whether content has HEAD and HTML tags. */ public $toolbarButtons; /** * @var bool If true, the editor is set to read-only mode */ public $readOnly = false; /** * @var bool The Legacy mode disables the Vue integration. */ public $legacyMode = false; /** * @var bool showMargins includes resizable document margins. * Only works in Vue applications and form document layouts. */ public $showMargins = false; /** * @var bool useLineBreaks uses line breaks instead of paragraph wrappers for each new line. */ public $useLineBreaks = false; /** * @var string Defines a mount point for the editor toolbar. * Must include a module name that exports the Vue application and a state element name. * Format: stateElementName * Only works in Vue applications and form document layouts. */ public $externalToolbarAppState = null; /** * @var array|null editorOptions configured in the Froala editor. For example: * * - imageDefaultWidth: Sets the default width of the image when it is inserted in the rich text editor. Setting it to `0` will not set any width. * - imageDefaultAlign: Sets the default image alignment when it is inserted in the rich text editor. Possible values are `left`, `center` and `right`. * - imageDefaultDisplay: Sets the default display for an image when is is inserted in the rich text. Possible options are: `inline` and `block`. */ public $editorOptions = null; // // Object Properties // /** * @inheritDoc */ protected $defaultAlias = 'richeditor'; /** * @inheritDoc */ public function init() { if ($this->formField->disabled) { $this->readOnly = true; } $this->fillFromConfig([ 'fullPage', 'readOnly', 'toolbarButtons', 'legacyMode', 'showMargins', 'useLineBreaks', 'editorOptions', 'externalToolbarAppState', 'externalToolbarEventBus' ]); if (!$this->legacyMode) { $this->controller->registerVueComponent(\Backend\VueComponents\RichEditorDocumentConnector::class); } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('richeditor'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['field'] = $this->formField; $this->vars['editorLang'] = $this->getValidEditorLang(); $this->vars['editorOptions'] = $this->getValidEditorOptions(); $this->vars['fullPage'] = $this->fullPage; $this->vars['useLineBreaks'] = $this->useLineBreaks; $this->vars['stretch'] = $this->formField->stretch; $this->vars['size'] = $this->formField->size; $this->vars['readOnly'] = $this->readOnly; $this->vars['showMargins'] = $this->showMargins; $this->vars['externalToolbarAppState'] = $this->externalToolbarAppState; $this->vars['name'] = $this->getFieldName(); $this->vars['value'] = $this->getLoadValue(); $this->vars['toolbarButtons'] = $this->evalToolbarButtons(); $this->vars['useMediaManager'] = BackendAuth::userHasAccess('media.library'); $this->vars['legacyMode'] = $this->legacyMode; $this->vars['globalToolbarButtons'] = EditorSetting::getConfigured('html_toolbar_buttons'); $this->vars['allowEmptyTags'] = EditorSetting::getConfigured('html_allow_empty_tags'); $this->vars['allowTags'] = EditorSetting::getConfigured('html_allow_tags'); $this->vars['allowAttrs'] = EditorSetting::getConfigured('html_allow_attrs'); $this->vars['noWrapTags'] = EditorSetting::getConfigured('html_no_wrap_tags'); $this->vars['removeTags'] = EditorSetting::getConfigured('html_remove_tags'); $this->vars['lineBreakerTags'] = EditorSetting::getConfigured('html_line_breaker_tags'); $this->vars['imageStyles'] = EditorSetting::getConfiguredStyles('html_style_image'); $this->vars['linkStyles'] = EditorSetting::getConfiguredStyles('html_style_link'); $this->vars['paragraphFormats'] = EditorSetting::getConfiguredFormats('html_paragraph_formats'); $this->vars['paragraphStyles'] = EditorSetting::getConfiguredStyles('html_style_paragraph'); $this->vars['inlineStyles'] = EditorSetting::getConfiguredStyles('html_style_inline'); $this->vars['tableStyles'] = EditorSetting::getConfiguredStyles('html_style_table'); $this->vars['tableCellStyles'] = EditorSetting::getConfiguredStyles('html_style_table_cell'); } /** * evalToolbarButtons to use based on config. * @return string */ protected function evalToolbarButtons() { $buttons = $this->toolbarButtons; if (is_string($buttons)) { $buttons = array_map(function ($button) { return strlen($button) ? $button : '|'; }, explode('|', $buttons)); } return $buttons; } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/richeditor.css'); $this->addJs('js/richeditor.js', ['type' => 'module']); $this->addJs('/modules/backend/formwidgets/codeeditor/assets/js/build-min.js'); } /** * getValidEditorLang returns a proposed language code for Froala. */ protected function getValidEditorLang(): ?string { $locale = App::getLocale(); // English is baked in if ($locale !== 'en') { return str_replace('-', '_', strtolower($locale)); } return null; } /** * getValidEditorOptions returns custom editor options passed directly to the JS control */ protected function getValidEditorOptions(): array { $config = []; if (is_array($this->editorOptions)) { $config += $this->editorOptions; } if ( Config::get('editor.html_defaults.enabled', false) && is_array($fileConfig = Config::get('editor.html_defaults.editor_options')) ) { $config += $fileConfig; } return $config; } } ================================================ FILE: modules/backend/formwidgets/Sensitive.php ================================================ <?php namespace Backend\FormWidgets; use Backend\Classes\FormWidgetBase; /** * Sensitive widget renders a password field that can be optionally made visible * * @package october\backend * @author Alexey Bobkov, Samuel Georges */ class Sensitive extends FormWidgetBase { /** * @var bool readOnly if the sensitive field cannot be edited, but can be toggled */ public $readOnly = false; /** * @var bool disabled if the sensitive field is disabled */ public $disabled = false; /** * @var bool allowCopy if a button will be available to copy the value */ public $allowCopy = false; /** * @var string displayMode determines how the widget is displayed. Modes: text, textarea */ public $displayMode = 'text'; /** * @var string hiddenPlaceholder string used as a placeholder for an unrevealed sensitive value */ public $hiddenPlaceholder = '__hidden__'; /** * @var bool hideOnTabChange if the sensitive input will be hidden if the user changes to another tab */ public $hideOnTabChange = true; /** * @inheritDoc */ protected $defaultAlias = 'sensitive'; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'readOnly', 'disabled', 'allowCopy', 'hiddenPlaceholder', 'hideOnTabChange', ]); $this->displayMode = isset($this->config->mode) && in_array($this->config->mode, ['text', 'textarea']) ? $this->config->mode : 'text'; if ($this->formField->disabled || $this->formField->readOnly) { $this->previewMode = true; } } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('sensitive'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['readOnly'] = $this->readOnly; $this->vars['disabled'] = $this->disabled; $this->vars['hasValue'] = !empty($this->getLoadValue()); $this->vars['allowCopy'] = $this->allowCopy; $this->vars['hiddenPlaceholder'] = $this->hiddenPlaceholder; $this->vars['hideOnTabChange'] = $this->hideOnTabChange; $this->vars['displayMode'] = $this->displayMode; } /** * onShowValue reveals the value of a hidden, unmodified sensitive field */ public function onShowValue() { return [ 'value' => $this->getLoadValue() ]; } /** * @inheritDoc */ public function getSaveValue($value) { if ($value === $this->hiddenPlaceholder) { $value = $this->getLoadValue(); } return $value; } /** * @inheritDoc */ protected function loadAssets() { $this->addCss('css/sensitive.css'); $this->addJs('js/sensitive.js'); } } ================================================ FILE: modules/backend/formwidgets/TagList.php ================================================ <?php namespace Backend\FormWidgets; use October\Rain\Database\Model; use Backend\Classes\FormWidgetBase; /** * Tag List Form Widget */ class TagList extends FormWidgetBase { use \Backend\Traits\FormModelWidget; use \Backend\FormWidgets\TagList\HasStringStore; use \Backend\FormWidgets\TagList\HasRelationStore; const MODE_ARRAY = 'array'; const MODE_STRING = 'string'; const MODE_RELATION = 'relation'; // // Configurable Properties // /** * @var string separator for tags: space, comma. */ public $separator = 'comma'; /** * @var bool customTags allowed to be entered manually by the user. */ public $customTags = false; /** * @var bool useKey instead of value for saving and reading data. */ public $useKey = true; /** * @var mixed options settings. Set to true to get from model. */ public $options; /** * @var string mode for the return value. Values: string, array, relation. */ public $mode; /** * @var string nameFrom if mode is relation, model column to use for the name reference. */ public $nameFrom = 'name'; /** * @var string placeholder for empty TagList widget */ public $placeholder = ''; /** * @var int maxItems permitted */ public $maxItems; // // Object Properties // /** * @var bool useOptions if they are supplied by the model or array */ protected $useOptions = false; /** * @inheritDoc */ protected $defaultAlias = 'taglist'; /** * @inheritDoc */ public function init() { $this->fillFromConfig([ 'separator', 'customTags', 'options', 'mode', 'nameFrom', 'maxItems', 'useKey', 'placeholder' ]); // Keys cannot be used with custom tags if ($this->customTags) { $this->useKey = false; } $this->processMode(); $this->useOptions = $this->formField->hasOptions(); } /** * processMode */ protected function processMode() { // Set by config if ($this->mode !== null) { return; } [$model, $attribute] = $this->nearestModelAttribute($this->valueFrom); if ($model instanceof Model && $model->hasRelation($attribute)) { $this->mode = static::MODE_RELATION; return; } if ($model instanceof Model && $model->isJsonable($attribute)) { $this->mode = static::MODE_ARRAY; return; } $this->mode = static::MODE_STRING; } /** * @inheritDoc */ public function render() { $this->prepareVars(); return $this->makePartial('taglist'); } /** * prepareVars for display */ public function prepareVars() { $this->vars['placeholder'] = $this->placeholder; $this->vars['maxItems'] = $this->maxItems; $this->vars['useKey'] = $this->useKey; $this->vars['field'] = $this->formField; $this->vars['selectedValues'] = $this->getLoadValue(); $this->vars['customSeparators'] = $this->getCustomSeparators(); } /** * @inheritDoc */ public function getSaveValue($value) { if ($this->mode === static::MODE_RELATION) { return $this->processSaveForRelation($value); } if ($this->mode === static::MODE_STRING) { return $this->processSaveForString($value); } return $value; } /** * @inheritDoc */ public function getLoadValue() { $value = parent::getLoadValue(); if ($this->mode === static::MODE_RELATION) { return $this->getLoadValueFromRelation($value); } if (!is_array($value) && $this->mode === static::MODE_STRING) { return $this->getLoadValueFromString($value); } return $value; } /** * getFieldOptions returns defined field options, or from the relation if available. * @return array */ public function getFieldOptions() { $options = []; if ($this->useOptions) { $options = $this->formField->options(); } elseif ($this->mode === static::MODE_RELATION) { $options = $this->getFieldOptionsForRelation(); } return $options; } /** * getKeylessOptions returns a flat set of options when useKey is false */ public function getKeylessOptions(array $selectedValues, array $fieldOptions): array { $result = []; foreach ($fieldOptions as $option) { if ($flatValue = $option->label) { $result[$flatValue] = $flatValue; } } foreach ($selectedValues as $value) { $result[$value] = $value; } return $result; } /** * getPreviewOptions generates options for display in read only modes */ public function getPreviewOptions(array $selectedValues, array $fieldOptions): array { $displayOptions = []; foreach ($fieldOptions as $key => $option) { if ( ($this->useKey && in_array($key, $selectedValues)) || (!$this->useKey && in_array($option->label, $selectedValues)) ) { $displayOptions[] = $option; } } return $displayOptions; } } ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/css/codeeditor.css ================================================ .field-codeeditor{border:2px solid var(--bs-border-color);border-radius:4px;position:relative;width:100%}.field-codeeditor textarea{opacity:0}.field-codeeditor.editor-focus{border:2px solid var(--oc-border-focus)}.field-codeeditor.size-tiny{min-height:50px}.field-codeeditor.size-small{min-height:100px}.field-codeeditor.size-large{min-height:200px}.field-codeeditor.size-huge{min-height:250px}.field-codeeditor.size-giant{min-height:350px}.field-codeeditor .ace_search{color:var(--bs-body-color);font-family:sans-serif;font-size:14px;z-index:13}.field-codeeditor .ace_search .ace_search_form.ace_nomatch{outline:none!important}.field-codeeditor .ace_search .ace_search_form.ace_nomatch .ace_search_field{border:.0625rem solid red;box-shadow:0 0 .1875rem .125rem red;position:relative;z-index:1}.field-codeeditor .editor-code{border-radius:4px}.field-codeeditor .editor-toolbar{background:rgba(0,0,0,.8);border:none;border-radius:5px;bottom:10px;padding:0 5px;position:absolute;right:25px;z-index:10}.field-codeeditor .editor-toolbar:before{display:none}.field-codeeditor .editor-toolbar ul>li,.field-codeeditor .editor-toolbar>ul{list-style-type:none;margin:0;padding:0}.field-codeeditor .editor-toolbar>ul>li{float:left}.field-codeeditor .editor-toolbar>ul>li .tooltip.left{margin-right:25px}.field-codeeditor .editor-toolbar>ul>li>a{color:#666;display:block;font-size:20px;height:25px;text-align:center;text-decoration:none;text-shadow:0 0 5px #000;width:25px}.field-codeeditor .editor-toolbar>ul>li>a>abbr{background-color:transparent;border:0;color:transparent;font:0/0 a;position:absolute;text-shadow:none}.field-codeeditor .editor-toolbar>ul>li>a>i{display:block;opacity:1}.field-codeeditor .editor-toolbar>ul>li>a>i:before{font-size:15px}.field-codeeditor .editor-toolbar>ul>li>a:focus>i,.field-codeeditor .editor-toolbar>ul>li>a:hover>i{color:#fff;opacity:1}.field-codeeditor.editor-fullscreen{border-radius:0;border-width:0;height:100%;left:0;position:fixed!important;top:0;z-index:301}.field-codeeditor.editor-fullscreen .editor-toolbar{z-index:302}.field-codeeditor.editor-fullscreen .editor-code{border-radius:0}.field-codeeditor.editor-fullscreen .ace_search{z-index:303} ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/js/build-min.js ================================================ var _=function(){var e=this,t=e._,r={},n=Array.prototype,i=Object.prototype,o=Function.prototype,s=n.slice,a=n.unshift,l=i.toString,c=i.hasOwnProperty,u=n.forEach,d=n.map,g=n.reduce,h=n.reduceRight,m=n.filter,p=n.every,_=n.some,f=n.indexOf,b=n.lastIndexOf,y=Array.isArray,x=Object.keys,v=o.bind,w=function(e){return new M(e)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):e._=w,w.VERSION="1.3.3";var k=w.each=w.forEach=function(e,t,n){if(null!=e)if(u&&e.forEach===u)e.forEach(t,n);else if(e.length===+e.length){for(var i=0,o=e.length;i<o;i++)if(i in e&&t.call(n,e[i],i,e)===r)return}else for(var s in e)if(w.has(e,s)&&t.call(n,e[s],s,e)===r)return};w.map=w.collect=function(e,t,r){var n=[];return null==e?n:d&&e.map===d?e.map(t,r):(k(e,function(e,i,o){n[n.length]=t.call(r,e,i,o)}),e.length===+e.length&&(n.length=e.length),n)},w.reduce=w.foldl=w.inject=function(e,t,r,n){var i=arguments.length>2;if(null==e&&(e=[]),g&&e.reduce===g)return n&&(t=w.bind(t,n)),i?e.reduce(t,r):e.reduce(t);if(k(e,function(e,o,s){i?r=t.call(n,r,e,o,s):(r=e,i=!0)}),!i)throw new TypeError("Reduce of empty array with no initial value");return r},w.reduceRight=w.foldr=function(e,t,r,n){var i=arguments.length>2;if(null==e&&(e=[]),h&&e.reduceRight===h)return n&&(t=w.bind(t,n)),i?e.reduceRight(t,r):e.reduceRight(t);var o=w.toArray(e).reverse();return n&&!i&&(t=w.bind(t,n)),i?w.reduce(o,t,r,n):w.reduce(o,t)},w.find=w.detect=function(e,t,r){var n;return C(e,function(e,i,o){if(t.call(r,e,i,o))return n=e,!0}),n},w.filter=w.select=function(e,t,r){var n=[];return null==e?n:m&&e.filter===m?e.filter(t,r):(k(e,function(e,i,o){t.call(r,e,i,o)&&(n[n.length]=e)}),n)},w.reject=function(e,t,r){var n=[];return null==e||k(e,function(e,i,o){t.call(r,e,i,o)||(n[n.length]=e)}),n},w.every=w.all=function(e,t,n){var i=!0;return null==e?i:p&&e.every===p?e.every(t,n):(k(e,function(e,o,s){if(!(i=i&&t.call(n,e,o,s)))return r}),!!i)};var C=w.some=w.any=function(e,t,n){t||(t=w.identity);var i=!1;return null==e?i:_&&e.some===_?e.some(t,n):(k(e,function(e,o,s){if(i||(i=t.call(n,e,o,s)))return r}),!!i)};w.include=w.contains=function(e,t){var r=!1;return null==e?r:f&&e.indexOf===f?-1!=e.indexOf(t):r=C(e,function(e){return e===t})},w.invoke=function(e,t){var r=s.call(arguments,2);return w.map(e,function(e){return(w.isFunction(t)?t||e:e[t]).apply(e,r)})},w.pluck=function(e,t){return w.map(e,function(e){return e[t]})},w.max=function(e,t,r){if(!t&&w.isArray(e)&&e[0]===+e[0])return Math.max.apply(Math,e);if(!t&&w.isEmpty(e))return-1/0;var n={computed:-1/0};return k(e,function(e,i,o){var s=t?t.call(r,e,i,o):e;s>=n.computed&&(n={value:e,computed:s})}),n.value},w.min=function(e,t,r){if(!t&&w.isArray(e)&&e[0]===+e[0])return Math.min.apply(Math,e);if(!t&&w.isEmpty(e))return 1/0;var n={computed:1/0};return k(e,function(e,i,o){var s=t?t.call(r,e,i,o):e;s<n.computed&&(n={value:e,computed:s})}),n.value},w.shuffle=function(e){var t,r=[];return k(e,function(e,n,i){t=Math.floor(Math.random()*(n+1)),r[n]=r[t],r[t]=e}),r},w.sortBy=function(e,t,r){var n=w.isFunction(t)?t:function(e){return e[t]};return w.pluck(w.map(e,function(e,t,i){return{value:e,criteria:n.call(r,e,t,i)}}).sort(function(e,t){var r=e.criteria,n=t.criteria;return void 0===r?1:void 0===n||r<n?-1:r>n?1:0}),"value")},w.groupBy=function(e,t){var r={},n=w.isFunction(t)?t:function(e){return e[t]};return k(e,function(e,t){var i=n(e,t);(r[i]||(r[i]=[])).push(e)}),r},w.sortedIndex=function(e,t,r){r||(r=w.identity);for(var n=0,i=e.length;n<i;){var o=n+i>>1;r(e[o])<r(t)?n=o+1:i=o}return n},w.toArray=function(e){return e?w.isArray(e)||w.isArguments(e)?s.call(e):e.toArray&&w.isFunction(e.toArray)?e.toArray():w.values(e):[]},w.size=function(e){return w.isArray(e)?e.length:w.keys(e).length},w.first=w.head=w.take=function(e,t,r){return null==t||r?e[0]:s.call(e,0,t)},w.initial=function(e,t,r){return s.call(e,0,e.length-(null==t||r?1:t))},w.last=function(e,t,r){return null==t||r?e[e.length-1]:s.call(e,Math.max(e.length-t,0))},w.rest=w.tail=function(e,t,r){return s.call(e,null==t||r?1:t)},w.compact=function(e){return w.filter(e,function(e){return!!e})},w.flatten=function(e,t){return w.reduce(e,function(e,r){return w.isArray(r)?e.concat(t?r:w.flatten(r)):(e[e.length]=r,e)},[])},w.without=function(e){return w.difference(e,s.call(arguments,1))},w.uniq=w.unique=function(e,t,r){var n=r?w.map(e,r):e,i=[];return e.length<3&&(t=!0),w.reduce(n,function(r,n,o){return(t?w.last(r)===n&&r.length:w.include(r,n))||(r.push(n),i.push(e[o])),r},[]),i},w.union=function(){return w.uniq(w.flatten(arguments,!0))},w.intersection=w.intersect=function(e){var t=s.call(arguments,1);return w.filter(w.uniq(e),function(e){return w.every(t,function(t){return w.indexOf(t,e)>=0})})},w.difference=function(e){var t=w.flatten(s.call(arguments,1),!0);return w.filter(e,function(e){return!w.include(t,e)})},w.zip=function(){for(var e=s.call(arguments),t=w.max(w.pluck(e,"length")),r=new Array(t),n=0;n<t;n++)r[n]=w.pluck(e,""+n);return r},w.indexOf=function(e,t,r){if(null==e)return-1;var n,i;if(r)return e[n=w.sortedIndex(e,t)]===t?n:-1;if(f&&e.indexOf===f)return e.indexOf(t);for(n=0,i=e.length;n<i;n++)if(n in e&&e[n]===t)return n;return-1},w.lastIndexOf=function(e,t){if(null==e)return-1;if(b&&e.lastIndexOf===b)return e.lastIndexOf(t);for(var r=e.length;r--;)if(r in e&&e[r]===t)return r;return-1},w.range=function(e,t,r){arguments.length<=1&&(t=e||0,e=0),r=arguments[2]||1;for(var n=Math.max(Math.ceil((t-e)/r),0),i=0,o=new Array(n);i<n;)o[i++]=e,e+=r;return o};var A=function(){};function S(e,t,r){if(e===t)return 0!==e||1/e==1/t;if(null==e||null==t)return e===t;if(e._chain&&(e=e._wrapped),t._chain&&(t=t._wrapped),e.isEqual&&w.isFunction(e.isEqual))return e.isEqual(t);if(t.isEqual&&w.isFunction(t.isEqual))return t.isEqual(e);var n=l.call(e);if(n!=l.call(t))return!1;switch(n){case"[object String]":return e==String(t);case"[object Number]":return e!=+e?t!=+t:0==e?1/e==1/t:e==+t;case"[object Date]":case"[object Boolean]":return+e==+t;case"[object RegExp]":return e.source==t.source&&e.global==t.global&&e.multiline==t.multiline&&e.ignoreCase==t.ignoreCase}if("object"!=typeof e||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==e)return!0;r.push(e);var o=0,s=!0;if("[object Array]"==n){if(s=(o=e.length)==t.length)for(;o--&&(s=o in e==o in t&&S(e[o],t[o],r)););}else{if("constructor"in e!="constructor"in t||e.constructor!=t.constructor)return!1;for(var a in e)if(w.has(e,a)&&(o++,!(s=w.has(t,a)&&S(e[a],t[a],r))))break;if(s){for(a in t)if(w.has(t,a)&&!o--)break;s=!o}}return r.pop(),s}w.bind=function(e,t){var r,n;if(e.bind===v&&v)return v.apply(e,s.call(arguments,1));if(!w.isFunction(e))throw new TypeError;return n=s.call(arguments,2),r=function(){if(!(this instanceof r))return e.apply(t,n.concat(s.call(arguments)));A.prototype=e.prototype;var i=new A,o=e.apply(i,n.concat(s.call(arguments)));return Object(o)===o?o:i}},w.bindAll=function(e){var t=s.call(arguments,1);return 0==t.length&&(t=w.functions(e)),k(t,function(t){e[t]=w.bind(e[t],e)}),e},w.memoize=function(e,t){var r={};return t||(t=w.identity),function(){var n=t.apply(this,arguments);return w.has(r,n)?r[n]:r[n]=e.apply(this,arguments)}},w.delay=function(e,t){var r=s.call(arguments,2);return setTimeout(function(){return e.apply(null,r)},t)},w.defer=function(e){return w.delay.apply(w,[e,1].concat(s.call(arguments,1)))},w.throttle=function(e,t){var r,n,i,o,s,a,l=w.debounce(function(){s=o=!1},t);return function(){r=this,n=arguments;return i||(i=setTimeout(function(){i=null,s&&e.apply(r,n),l()},t)),o?s=!0:a=e.apply(r,n),l(),o=!0,a}},w.debounce=function(e,t,r){var n;return function(){var i=this,o=arguments;r&&!n&&e.apply(i,o),clearTimeout(n),n=setTimeout(function(){n=null,r||e.apply(i,o)},t)}},w.once=function(e){var t,r=!1;return function(){return r?t:(r=!0,t=e.apply(this,arguments))}},w.wrap=function(e,t){return function(){var r=[e].concat(s.call(arguments,0));return t.apply(this,r)}},w.compose=function(){var e=arguments;return function(){for(var t=arguments,r=e.length-1;r>=0;r--)t=[e[r].apply(this,t)];return t[0]}},w.after=function(e,t){return e<=0?t():function(){if(--e<1)return t.apply(this,arguments)}},w.keys=x||function(e){if(e!==Object(e))throw new TypeError("Invalid object");var t=[];for(var r in e)w.has(e,r)&&(t[t.length]=r);return t},w.values=function(e){return w.map(e,w.identity)},w.functions=w.methods=function(e){var t=[];for(var r in e)w.isFunction(e[r])&&t.push(r);return t.sort()},w.extend=function(e){return k(s.call(arguments,1),function(t){for(var r in t)e[r]=t[r]}),e},w.pick=function(e){var t={};return k(w.flatten(s.call(arguments,1)),function(r){r in e&&(t[r]=e[r])}),t},w.defaults=function(e){return k(s.call(arguments,1),function(t){for(var r in t)null==e[r]&&(e[r]=t[r])}),e},w.clone=function(e){return w.isObject(e)?w.isArray(e)?e.slice():w.extend({},e):e},w.tap=function(e,t){return t(e),e},w.isEqual=function(e,t){return S(e,t,[])},w.isEmpty=function(e){if(null==e)return!0;if(w.isArray(e)||w.isString(e))return 0===e.length;for(var t in e)if(w.has(e,t))return!1;return!0},w.isElement=function(e){return!(!e||1!=e.nodeType)},w.isArray=y||function(e){return"[object Array]"==l.call(e)},w.isObject=function(e){return e===Object(e)},w.isArguments=function(e){return"[object Arguments]"==l.call(e)},w.isArguments(arguments)||(w.isArguments=function(e){return!(!e||!w.has(e,"callee"))}),w.isFunction=function(e){return"[object Function]"==l.call(e)},w.isString=function(e){return"[object String]"==l.call(e)},w.isNumber=function(e){return"[object Number]"==l.call(e)},w.isFinite=function(e){return w.isNumber(e)&&isFinite(e)},w.isNaN=function(e){return e!=e},w.isBoolean=function(e){return!0===e||!1===e||"[object Boolean]"==l.call(e)},w.isDate=function(e){return"[object Date]"==l.call(e)},w.isRegExp=function(e){return"[object RegExp]"==l.call(e)},w.isNull=function(e){return null===e},w.isUndefined=function(e){return void 0===e},w.has=function(e,t){return c.call(e,t)},w.noConflict=function(){return e._=t,this},w.identity=function(e){return e},w.times=function(e,t,r){for(var n=0;n<e;n++)t.call(r,n)},w.escape=function(e){return(""+e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'").replace(/\//g,"/")},w.result=function(e,t){if(null==e)return null;var r=e[t];return w.isFunction(r)?r.call(e):r},w.mixin=function(e){k(w.functions(e),function(t){q(t,w[t]=e[t])})};var E=0;w.uniqueId=function(e){var t=E++;return e?e+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var F=/.^/,R={"\\":"\\","'":"'",r:"\r",n:"\n",t:"\t",u2028:"\u2028",u2029:"\u2029"};for(var $ in R)R[R[$]]=$;var T=/\\|'|\r|\n|\t|\u2028|\u2029/g,D=/\\(\\|'|r|n|t|u2028|u2029)/g,L=function(e){return e.replace(D,function(e,t){return R[t]})};w.template=function(e,t,r){r=w.defaults(r||{},w.templateSettings);var n="__p+='"+e.replace(T,function(e){return"\\"+R[e]}).replace(r.escape||F,function(e,t){return"'+\n_.escape("+L(t)+")+\n'"}).replace(r.interpolate||F,function(e,t){return"'+\n("+L(t)+")+\n'"}).replace(r.evaluate||F,function(e,t){return"';\n"+L(t)+"\n;__p+='"})+"';\n";r.variable||(n="with(obj||{}){\n"+n+"}\n"),n="var __p='';var print=function(){__p+=Array.prototype.join.call(arguments, '')};\n"+n+"return __p;\n";var i=new Function(r.variable||"obj","_",n);if(t)return i(t,w);var o=function(e){return i.call(this,e,w)};return o.source="function("+(r.variable||"obj")+"){\n"+n+"}",o},w.chain=function(e){return w(e).chain()};var M=function(e){this._wrapped=e};w.prototype=M.prototype;var B=function(e,t){return t?w(e).chain():e},q=function(e,t){M.prototype[e]=function(){var e=s.call(arguments);return a.call(e,this._wrapped),B(t.apply(w,e),this._chain)}};return w.mixin(w),k(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=n[e];M.prototype[e]=function(){var r=this._wrapped;t.apply(r,arguments);var n=r.length;return"shift"!=e&&"splice"!=e||0!==n||delete r[0],B(r,this._chain)}}),k(["concat","join","slice"],function(e){var t=n[e];M.prototype[e]=function(){return B(t.apply(this._wrapped,arguments),this._chain)}}),M.prototype.chain=function(){return this._chain=!0,this},M.prototype.value=function(){return this._wrapped},w}.call({}),emmet=function(e){var t="html";if(void 0===_)try{_=e.require("underscore")}catch(e){}if(void 0===_)throw"Cannot access to Underscore.js lib";var r={_:_},n=function(){};var i=null;function o(e){return!(e in r)&&i&&i(e),r[e]}return{define:function(e,t){e in r||(r[e]=_.isFunction(t)?this.exec(t):t)},require:o,exec:function(t,r){return t.call(r||e,_.bind(o,this),_,this)},extend:function(e,t){var r=function(e,t,r){var i;return i=t&&t.hasOwnProperty("constructor")?t.constructor:function(){e.apply(this,arguments)},_.extend(i,e),n.prototype=e.prototype,i.prototype=new n,t&&_.extend(i.prototype,t),r&&_.extend(i,r),i.prototype.constructor=i,i.__super__=e.prototype,i}(this,e,t);return r.extend=this.extend,e.hasOwnProperty("toString")&&(r.prototype.toString=e.toString),r},expandAbbreviation:function(e,r,n,i){if(!e)return"";r=r||t;var s=o("filters"),a=o("abbreviationParser");n=o("profile").get(n,r),o("tabStops").resetTabstopIndex();var l=s.extractFromAbbreviation(e),c=a.parse(l[0],{syntax:r,contextNode:i}),u=s.composeList(r,n,l[1]);return s.apply(c,u,n),c.toString()},defaultSyntax:function(){return t},defaultProfile:function(){return"plain"},log:function(){e.console&&e.console.log&&e.console.log.apply(e.console,arguments)},setModuleLoader:function(e){i=e}}}(this);"undefined"!=typeof exports&&("undefined"!=typeof module&&module.exports&&(exports=module.exports=emmet),exports.emmet=emmet),"undefined"!=typeof define&&define("emmet",[],emmet),emmet.define("abbreviationParser",function(e,t){var r=/^[\w\-\$\:@\!%]+\+?$/i,n=/[\w\-:\$@]/,i={"[":"]","(":")","{":"}"},o=Array.prototype.splice,s=[],a=[],l=[];function c(e){this.parent=null,this.children=[],this._attributes=[],this.abbreviation="",this.counter=1,this._name=null,this._text="",this.repeatCount=1,this.hasImplicitRepeat=!1,this._data={},this.start="",this.end="",this.content="",this.padding=""}function u(e){return e.substring(1,e.length-1)}function d(e,t){for(var r;r=e.next();)if(r===t)return!0;return!1}function g(r){r=e("utils").trim(r);for(var n,o=new c,s=o.addChild(),a=e("stringStream").create(r),l=1e3;!a.eol()&&--l>0;)switch(a.peek()){case"(":if(a.start=a.pos,!a.skipToPair("(",")"))throw'Invalid abbreviation: mo matching ")" found for character at '+a.pos;var d=g(u(a.current()));(n=a.match(/^\*(\d+)?/,!0))&&s._setRepeat(n[1]),t.each(d.children,function(e){s.addChild(e)});break;case">":s=s.addChild(),a.next();break;case"+":s=s.parent.addChild(),a.next();break;case"^":var h=s.parent||s;s=(h.parent||h).addChild(),a.next();break;default:a.start=a.pos,a.eatWhile(function(e){if("["==e||"{"==e){if(a.skipToPair(e,i[e]))return a.backUp(1),!0;throw'Invalid abbreviation: mo matching "'+i[e]+'" found for character at '+a.pos}if("+"==e){a.next();var t=a.eol()||~"+>^*".indexOf(a.peek());return a.backUp(1),t}return"("!=e&&f(e)}),s.setAbbreviation(a.current()),a.start=a.pos}if(l<1)throw"Endless loop detected";return o}function h(t,r){t=e("utils").trim(t);var i=[],o=e("stringStream").create(t);for(o.eatSpace();!o.eol()&&(o.start=o.pos,o.eatWhile(n));){var s=o.current(),a="";if("="==o.peek()){o.next(),o.start=o.pos;var l=o.peek();if('"'==l||"'"==l){if(o.next(),!d(o,l))throw"Invalid attribute value";a=(a=o.current()).substring(1,a.length-1)}else{if(!o.eatWhile(/[^\s\]]/))throw"Invalid attribute value";a=o.current()}}i.push({name:s,value:a}),o.eatSpace()}return i}function m(e){e=t.map(e,function(e){return t.clone(e)});var r={};return t.filter(e,function(e){if(!(e.name in r))return r[e.name]=e;var t=r[e.name];return"class"==e.name.toLowerCase()?t.value+=(t.value.length?" ":"")+e.value:t.value=e.value,!1})}function p(e){for(var r,n,i,o=e.children.length-1;o>=0;o--)if((n=e.children[o]).isRepeating())for(i=r=n.repeatCount,n.repeatCount=1,n.updateProperty("counter",1),n.updateProperty("maxCount",i);--r>0;)n.parent.addChild(n.clone(),o+1).updateProperty("counter",r+1).updateProperty("maxCount",i);return t.each(e.children,p),e}function _(e){for(var r=e.children.length-1;r>=0;r--){var n=e.children[r];n.isGroup()?n.replace(_(n).children):n.isEmpty()&&n.remove()}return t.each(e.children,_),e}function f(e){var t=e.charCodeAt(0);return t>64&&t<91||t>96&&t<123||t>47&&t<58||-1!="#.*:$-_!@|%".indexOf(e)}return c.prototype={addChild:function(e,r){return(e=e||new c).parent=this,t.isUndefined(r)?this.children.push(e):this.children.splice(r,0,e),e},clone:function(){var e=new c;return t.each(["abbreviation","counter","_name","_text","repeatCount","hasImplicitRepeat","start","end","content","padding"],function(t){e[t]=this[t]},this),e._attributes=t.map(this._attributes,function(e){return t.clone(e)}),e._data=t.clone(this._data),e.children=t.map(this.children,function(t){return(t=t.clone()).parent=e,t}),e},remove:function(){return this.parent&&(this.parent.children=t.without(this.parent.children,this)),this},replace:function(){var e=this.parent,r=t.indexOf(e.children,this),n=t.flatten(arguments);o.apply(e.children,[r,1].concat(n)),t.each(n,function(t){t.parent=e})},updateProperty:function(e,r){return this[e]=r,t.each(this.children,function(t){t.updateProperty(e,r)}),this},find:function(e){return this.findAll(e)[0]},findAll:function(e){if(!t.isFunction(e)){var r=e.toLowerCase();e=function(e){return e.name().toLowerCase()==r}}var n=[];return t.each(this.children,function(t){e(t)&&n.push(t),n=n.concat(t.findAll(e))}),t.compact(n)},data:function(t,r){return 2==arguments.length&&(this._data[t]=r,"resource"==t&&e("elements").is(r,"snippet")&&(this.content=r.data,this._text&&(this.content=e("abbreviationUtils").insertChildContent(r.data,this._text)))),this._data[t]},name:function(){var t=this.matchedResource();return e("elements").is(t,"element")?t.name:this._name},attributeList:function(){var r=[],n=this.matchedResource();return e("elements").is(n,"element")&&t.isArray(n.attributes)&&(r=r.concat(n.attributes)),m(r.concat(this._attributes))},attribute:function(e,r){if(2==arguments.length){var n=t.indexOf(t.pluck(this._attributes,"name"),e.toLowerCase());~n?this._attributes[n].value=r:this._attributes.push({name:e,value:r})}return(t.find(this.attributeList(),function(t){return t.name==e})||{}).value},matchedResource:function(){return this.data("resource")},index:function(){return this.parent?t.indexOf(this.parent.children,this):-1},_setRepeat:function(e){e?this.repeatCount=parseInt(e,10)||1:this.hasImplicitRepeat=!0},setAbbreviation:function(t){var o=this;t=(t=t||"").replace(/\*(\d+)?$/,function(e,t){return o._setRepeat(t),""}),this.abbreviation=t;var s=function(t){if(!~t.indexOf("{"))return null;var r=e("stringStream").create(t);for(;!r.eol();)switch(r.peek()){case"[":case"(":r.skipToPair(r.peek(),i[r.peek()]);break;case"{":return r.start=r.pos,r.skipToPair("{","}"),{element:t.substring(0,r.start),text:u(r.current())};default:r.next()}}(t);s&&(t=s.element,this.content=this._text=s.text);var a=function(t){var r=[],i={"#":"id",".":"class"},o=null,s=e("stringStream").create(t);for(;!s.eol();)switch(s.peek()){case"#":case".":null===o&&(o=s.pos);var a=i[s.peek()];s.next(),s.start=s.pos,s.eatWhile(n),r.push({name:a,value:s.current()});break;case"[":if(null===o&&(o=s.pos),s.start=s.pos,!s.skipToPair("[","]"))throw"Invalid attribute set definition";r=r.concat(h(u(s.current())));break;default:s.next()}return r.length?{element:t.substring(0,o),attributes:m(r)}:null}(t);if(a&&(t=a.element,this._attributes=a.attributes),this._name=t,this._name&&!r.test(this._name))throw"Invalid abbreviation"},toString:function(){var r=e("utils"),n=this.start,i=this.end,o=this.content,s=this;t.each(l,function(e){n=e(n,s,"start"),o=e(o,s,"content"),i=e(i,s,"end")});var a=t.map(this.children,function(e){return e.toString()}).join("");return o=e("abbreviationUtils").insertChildContent(o,a,{keepVariable:!1}),n+r.padString(o,this.padding)+i},hasEmptyChildren:function(){return!!t.find(this.children,function(e){return e.isEmpty()})},hasImplicitName:function(){return!this._name&&!this.isTextNode()},isGroup:function(){return!this.abbreviation},isEmpty:function(){return!this.abbreviation&&!this.children.length},isRepeating:function(){return this.repeatCount>1||this.hasImplicitRepeat},isTextNode:function(){return!this.name()&&!this.attributeList().length},isElement:function(){return!this.isEmpty()&&!this.isTextNode()},deepestChild:function(){if(!this.children.length)return null;for(var e=this;e.children.length;)e=t.last(e.children);return e}},l.push(function(t,r){return e("utils").replaceCounter(t,r.counter,r.maxCount)}),{parse:function(e,r){r=r||{};var n=g(e);if(r.contextNode){n._name=r.contextNode.name;var i={};t.each(n._attributes,function(e){i[e.name]=e}),t.each(r.contextNode.attributes,function(e){e.name in i?i[e.name].value=e.value:(e=t.clone(e),n._attributes.push(e),i[e.name]=e)})}return t.each(s,function(e){e(n,r)}),n=_(p(n)),t.each(a,function(e){e(n,r)}),n},AbbreviationNode:c,addPreprocessor:function(e){t.include(s,e)||s.push(e)},removeFilter:function(e){preprocessor=t.without(s,e)},addPostprocessor:function(e){t.include(a,e)||a.push(e)},removePostprocessor:function(e){a=t.without(a,e)},addOutputProcessor:function(e){t.include(l,e)||l.push(e)},removeOutputProcessor:function(e){l=t.without(l,e)},isAllowedChar:function(e){return f(e=String(e))||~">+^[](){}".indexOf(e)}}}),emmet.exec(function(e,t){function r(n,i){var o=e("resources"),s=e("elements"),a=e("abbreviationParser");t.each(t.clone(n.children),function(e){var n=o.getMatchedResource(e,i);if(t.isString(n))e.data("resource",s.create("snippet",n));else if(s.is(n,"reference")){var l=a.parse(n.data,{syntax:i});if(e.repeatCount>1){var c=l.findAll(function(e){return e.hasImplicitRepeat});t.each(c,function(t){t.repeatCount=e.repeatCount,t.hasImplicitRepeat=!1})}var u=l.deepestChild();u&&t.each(e.children,function(e){u.addChild(e)}),t.each(l.children,function(r){t.each(e.attributeList(),function(e){r.attribute(e.name,e.value)})}),e.replace(l.children)}else e.data("resource",n);r(e,i)})}e("abbreviationParser").addPreprocessor(function(e,t){r(e,t.syntax||emmet.defaultSyntax())})}),emmet.exec(function(e,t){var r=e("abbreviationParser");function n(t){for(var r=e("range"),n=[],i=e("stringStream").create(t);!i.eol();){if("\\"==i.peek())i.next();else if(i.start=i.pos,i.match("$#",!0)){n.push(r.create(i.start,"$#"));continue}i.next()}return n}function i(r,i){var o=e("utils"),s=n(r);return s.reverse(),t.each(s,function(e){r=o.replaceSubstring(r,i,e)}),r}function o(e){return!!n(e.content).length||!!t.find(e.attributeList(),function(e){return!!n(e.value).length})}function s(r,n,s){var a=r.findAll(function(e){return o(e)});if(o(r)&&a.unshift(r),a.length)t.each(a,function(e){e.content=i(e.content,n),t.each(e._attributes,function(e){e.value=i(e.value,n)})});else{var l=r.deepestChild()||r;l.content=s?n:e("abbreviationUtils").insertChildContent(l.content,n)}}r.addPreprocessor(function(r,n){if(n.pastedContent){var i=e("utils"),o=t.map(i.splitByLines(n.pastedContent,!0),i.trim);r.findAll(function(e){if(e.hasImplicitRepeat)return e.data("paste",o),e.repeatCount=o.length})}}),r.addPostprocessor(function(e,r){!e.findAll(function(e){var r=e.data("paste"),n="";return t.isArray(r)?n=r[e.counter-1]:t.isFunction(r)?n=r(e.counter-1,e.content):r&&(n=r),n&&s(e,n,!!e.data("pasteOverwrites")),e.data("paste",null),!!r}).length&&r.pastedContent&&s(e,r.pastedContent)})}),emmet.exec(function(e,t){e("abbreviationParser").addPostprocessor(function r(n){var i=e("tagName");return t.each(n.children,function(e){(e.hasImplicitName()||e.data("forceNameResolving"))&&(e._name=i.resolve(e.parent.name())),r(e)}),n})}),emmet.define("cssParser",function(e,t){var r,n,i,o,s=[];function a(e){return void 0!==e}function l(){return{char:r.chnum,line:r.linenum}}function c(e,t,n){var i=r,o=n||{};s.push({charstart:a(o.char)?o.char:i.chnum,charend:a(o.charend)?o.charend:i.chnum,linestart:a(o.line)?o.line:i.linenum,lineend:a(o.lineend)?o.lineend:i.linenum,value:e,type:t||e})}function u(e,t){var n=r,i=t||{},o=a(i.char)?i.char:n.chnum;return{name:"ParseError",message:e+" at line "+((a(i.line)?i.line:n.linenum)+1)+" char "+(o+1),walker:n,tokens:s}}function d(e){var t=r,n=t.ch,s=l(),a=e?e+n:n;for(n=t.nextChar(),e&&(s.char-=e.length);i(n)||o(n);)a+=n,n=t.nextChar();c(a,"identifier",s)}function g(){var e=r.ch;if(" "===e||"\t"===e)return function(){for(var e=r.ch,t="",n=l();" "===e||"\t"===e;)t+=e,e=r.nextChar();c(t,"white",n)}();if("/"===e)return function(){var e,t=r,n=t.ch,i=n,o=l();if("/"===(e=t.nextChar())){i+=e;for(var s=t.peek();s&&"\n"!==s;)i+=e,e=t.nextChar(),s=t.peek()}else{if("*"!==e)return o.charend=o.char,o.lineend=o.line,c(i,i,o);for(;"*"!==n||"/"!==e;)i+=e,n=e,e=t.nextChar()}i+=e,t.nextChar(),c(i,"comment",o)}();if('"'===e||"'"===e)return function(){var e,t=r,n=t.ch,i=n,o=n,s=l();for(n=t.nextChar();n!==i;){if("\n"===n){if("\\"!==(e=t.nextChar()))throw u("Unterminated string",s);o+=n+e}else o+="\\"===n?n+t.nextChar():n;n=t.nextChar()}o+=n,t.nextChar(),c(o,"string",s)}();if("("===e)return function(){var e=r,t=e.ch,n=0,i=t,o=l();for(t=e.nextChar();")"!==t&&!n;){if("("===t)n++;else if(")"===t)n--;else if(!1===t)throw u("Unterminated brace",o);i+=t,t=e.nextChar()}i+=t,e.nextChar(),c(i,"brace",o)}();if("-"===e||"."===e||o(e))return function(){var e,t=r,n=t.ch,i=l(),s=n,a="."===s;if(n=t.nextChar(),e=!o(n),a&&e)return i.charend=i.char,i.lineend=i.line,c(s,".",i);if("-"===s&&e)return d("-");for(;!1!==n&&(o(n)||!a&&"."===n);)"."===n&&(a=!0),s+=n,n=t.nextChar();c(s,"number",i)}();if(i(e))return d();if(n(e))return function(){var e=r,t=e.ch,i=l(),o=t,s=e.nextChar();if("="===s&&n(o,!0))return c(o+=s,"match",i),void e.nextChar();i.charend=i.char+1,i.lineend=i.line,c(o,o,i)}();if("\n"===e)return c("line"),void r.nextChar();throw u("Unrecognized character")}return r={lines:null,total_lines:0,linenum:-1,line:"",ch:"",chnum:-1,init:function(e){var t=r;t.lines=e.replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n"),t.total_lines=t.lines.length,t.chnum=-1,t.linenum=-1,t.ch="",t.line="",t.nextLine(),t.nextChar()},nextLine:function(){var e=this;return e.linenum+=1,e.total_lines<=e.linenum?e.line=!1:e.line=e.lines[e.linenum],-1!==e.chnum&&(e.chnum=0),e.line},nextChar:function(){var e=this;for(e.chnum+=1;""===e.line.charAt(e.chnum);)return!1===this.nextLine()?(e.ch=!1,!1):(e.chnum=-1,e.ch="\n","\n");return e.ch=e.line.charAt(e.chnum),e.ch},peek:function(){return this.line.charAt(this.chnum+1)}},i=function(e){return"&"==e||"_"===e||"-"===e||e>="a"&&e<="z"||e>="A"&&e<="Z"},o=function(e){return!1!==e&&e>="0"&&e<="9"},n=function(){for(var e="{}[]()+*=.,;:>~|\\%$#@^!".split(""),t="*^|$~".split(""),r={},n={},i=0;i<e.length;i+=1)r[e[i]]=!0;for(i=0;i<t.length;i+=1)n[t[i]]=!0;return function(e,t){return t?!!n[e]:!!r[e]}}(),{lex:function(e){for(r.init(e),s=[];!1!==r.ch;)g();return s},parse:function(e){var r=0;return t.map(this.lex(e),function(t){return"line"==t.type&&(t.value=function(e,t){return"\r"==e.charAt(t)&&"\n"==e.charAt(t+1)?"\r\n":e.charAt(t)}(e,r)),{type:t.type,start:r,end:r+=t.value.length}})},toSource:function(e){for(var t,r=0,n=e.length,i="";r<n;r+=1)"line"===(t=e[r]).type?i+="\n":i+=t.value;return i}}}),emmet.define("xmlParser",function(e,t){var r={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!0,allowMissing:!0},n=null,i=null;function o(e,t){function r(r){return t.tokenize=r,r(e,t)}var o=e.next();if("<"==o){if(e.eat("!"))return e.eat("[")?e.match("CDATA[")?r(a("atom","]]>")):null:e.match("--")?r(a("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),r(l(1))):null;if(e.eat("?"))return e.eatWhile(/[\w\._\-]/),t.tokenize=a("meta","?>"),"meta";var c;for(i=e.eat("/")?"closeTag":"openTag",e.eatSpace(),n="";c=e.eat(/[^\s\u00a0=<>\"\'\/?]/);)n+=c;return t.tokenize=s,"tag"}return"&"==o?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),"text")}function s(e,t){var r,n=e.next();return">"==n||"/"==n&&e.eat(">")?(t.tokenize=o,i=">"==n?"endTag":"selfcloseTag","tag"):"="==n?(i="equals",null):/[\'\"]/.test(n)?(t.tokenize=(r=n,function(e,t){for(;!e.eol();)if(e.next()==r){t.tokenize=s;break}return"string"}),t.tokenize(e,t)):(e.eatWhile(/[^\s\u00a0=<>\"\'\/?]/),"word")}function a(e,t){return function(r,n){for(;!r.eol();){if(r.match(t)){n.tokenize=o;break}r.next()}return e}}function l(e){return function(t,r){for(var n;null!=(n=t.next());){if("<"==n)return r.tokenize=l(e+1),r.tokenize(t,r);if(">"==n){if(1==e){r.tokenize=o;break}return r.tokenize=l(e-1),r.tokenize(t,r)}}return"meta"}}var c,u=null;function d(){for(var e=arguments.length-1;e>=0;e--)u.cc.push(arguments[e])}function g(){return d.apply(null,arguments),!0}function h(){u.context&&(u.context=u.context.prev)}function m(e){if("openTag"==e)return u.tagName=n,g(_,(i=u.startOfLine,function(e){return"selfcloseTag"==e||"endTag"==e&&r.autoSelfClosers.hasOwnProperty(u.tagName.toLowerCase())?(p(u.tagName.toLowerCase()),g()):"endTag"==e?(p(u.tagName.toLowerCase()),function(e,t){var n=r.doNotIndent.hasOwnProperty(e)||u.context&&u.context.noIndent;u.context={prev:u.context,tagName:e,indent:u.indented,startOfLine:t,noIndent:n}}(u.tagName,i),g()):g()}));if("closeTag"==e){var t=!1;return u.context?u.context.tagName!=n&&(r.implicitlyClosed.hasOwnProperty(u.context.tagName.toLowerCase())&&h(),t=!u.context||u.context.tagName!=n):t=!0,t&&(c="error"),g(function(e){return function(t){return e&&(c="error"),"endTag"==t?(h(),g()):(c="error",g(arguments.callee))}}(t))}var i;return g()}function p(e){for(var t;;){if(!u.context)return;if(t=u.context.tagName.toLowerCase(),!r.contextGrabbers.hasOwnProperty(t)||!r.contextGrabbers[t].hasOwnProperty(e))return;h()}}function _(e){return"word"==e?(c="attribute",g(f,_)):"endTag"==e||"selfcloseTag"==e?d():(c="error",g(_))}function f(e){return"equals"==e?g(b,_):(r.allowMissing||(c="error"),"endTag"==e||"selfcloseTag"==e?d():g())}function b(e){return"string"==e?g(y):"word"==e&&r.allowUnquoted?(c="string",g()):(c="error","endTag"==e||"selfCloseTag"==e?d():g())}function y(e){return"string"==e?g(y):d()}function x(e,t){if(e.sol()&&(t.startOfLine=!0,t.indented=0),e.eatSpace())return null;c=i=n=null;var r=t.tokenize(e,t);if(t.type=i,(r||i)&&"comment"!=r)for(u=t;;){if((t.cc.pop()||m)(i||r))break}return t.startOfLine=!1,c||r}return{parse:function(t,r){r=r||0;for(var n={tokenize:o,cc:[],indented:0,startOfLine:!0,tagName:null,context:null},i=e("stringStream").create(t),s=[];!i.eol();)s.push({type:x(i,n),start:i.start+r,end:i.pos+r}),i.start=i.pos;return s}}}),emmet.define("string-score",function(e,t){return{score:function(e,t,r){if(e==t)return 1;if(""==t)return 0;for(var n,i,o,s,a,l,c,u,d,g=0,h=t.length,m=e.length,p=1,_=0;_<h;++_){if(l=t.charAt(_),c=e.indexOf(l.toLowerCase()),u=e.indexOf(l.toUpperCase()),-1===(a=(d=Math.min(c,u))>-1?d:Math.max(c,u))){if(r){p+=1-r;continue}return 0}s=.1,e[a]===l&&(s+=.1),0===a?(s+=.6,0===_&&(n=1)):" "===e.charAt(a-1)&&(s+=.8),e=e.substring(a+1,m),g+=s}return o=((i=g/h)*(h/m)+i)/2,o/=p,n&&o+.15<1&&(o+=.15),o}}}),emmet.define("utils",function(e,t){var r="${0}";function n(e){this._data=[],this.length=0,e&&this.append(e)}return n.prototype={append:function(e){this._data.push(e),this.length+=e.length},toString:function(){return this._data.join("")},valueOf:function(){return this.toString()}},{reTag:/<\/?[\w:\-]+(?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*\s*(\/?)>$/,endsWithTag:function(e){return this.reTag.test(e)},isNumeric:function(e){return"string"==typeof e&&(e=e.charCodeAt(0)),e&&e>47&&e<58},trim:function(e){return(e||"").replace(/^\s+|\s+$/g,"")},getNewline:function(){var r=e("resources");if(!r)return"\n";var n=r.getVariable("newline");return t.isString(n)?n:"\n"},setNewline:function(t){var r=e("resources");r.setVariable("newline",t),r.setVariable("nl",t)},splitByLines:function(e,r){var n=this.getNewline(),i=(e||"").replace(/\r\n/g,"\n").replace(/\n\r/g,"\n").replace(/\r/g,"\n").replace(/\n/g,n).split(n);return r&&(i=t.filter(i,function(e){return e.length&&!!this.trim(e)},this)),i},normalizeNewline:function(e){return this.splitByLines(e).join(this.getNewline())},repeatString:function(e,t){for(var r=[],n=0;n<t;n++)r.push(e);return r.join("")},getStringsPads:function(e){var r=t.map(e,function(e){return t.isString(e)?e.length:+e}),n=t.max(r);return t.map(r,function(e){var t=n-e;return t?this.repeatString(" ",t):""},this)},padString:function(r,n){var i=t.isNumber(n)?this.repeatString(e("resources").getVariable("indentation")||"\t",n):n,o=[],s=this.splitByLines(r),a=this.getNewline();o.push(s[0]);for(var l=1;l<s.length;l++)o.push(a+i+s[l]);return o.join("")},zeroPadString:function(e,t){for(var r="",n=e.length;t>n++;)r+="0";return r+e},unindentString:function(e,t){for(var r=this.splitByLines(e),n=0;n<r.length;n++)0==r[n].search(t)&&(r[n]=r[n].substr(t.length));return r.join(this.getNewline())},replaceUnescapedSymbol:function(e,r,n){for(var i=0,o=e.length,s=r.length,a=0;i<o;)if("\\"==e.charAt(i))i+=s+1;else if(e.substr(i,s)==r){var l=s;a++;var c=n;if(t.isFunction(n)){var u=n(e,r,i,a);u?(l=u[0].length,c=u[1]):c=!1}if(!1===c){i++;continue}o=(e=e.substring(0,i)+c+e.substring(i+l)).length,i+=c.length}else i++;return e},replaceVariables:function(r,n){n=n||{};var i=t.isFunction(n)?n:function(e,t){return t in n?n[t]:null},o=e("resources");return e("tabStops").processText(r,{variable:function(e){var r=i(e.token,e.name,e);return null===r&&(r=o.getVariable(e.name)),(null===r||t.isUndefined(r))&&(r=e.token),r}})},replaceCounter:function(e,r,n){e=String(e),r=String(r),/^\-?\d+$/.test(r)&&(r=+r);var i=this;return this.replaceUnescapedSymbol(e,"$",function(e,o,s,a){if("{"==e.charAt(s+1)||i.isNumeric(e.charAt(s+1)))return!1;for(var l=s+1;"$"==e.charAt(l)&&"{"!=e.charAt(l+1);)l++;var c,u=l-s,d=0,g=!1;return(c=e.substr(l).match(/^@(\-?)(\d*)/))&&(l+=c[0].length,c[1]&&(g=!0),d=parseInt(c[2]||1)-1),g&&n&&t.isNumber(r)&&(r=n-r+1),r+=d,[e.substring(s,l),i.zeroPadString(r+"",u)]})},matchesTag:function(e){return this.reTag.test(e||"")},escapeText:function(e){return e.replace(/([\$\\])/g,"\\$1")},unescapeText:function(e){return e.replace(/\\(.)/g,"$1")},getCaretPlaceholder:function(){return t.isFunction(r)?r.apply(this,arguments):r},setCaretPlaceholder:function(e){r=e},getLinePadding:function(e){return(e.match(/^(\s+)/)||[""])[0]},getLinePaddingFromPosition:function(e,t){var r=this.findNewlineBounds(e,t);return this.getLinePadding(r.substring(e))},escapeForRegexp:function(e){var t=new RegExp("[.*+?|()\\[\\]{}\\\\]","g");return e.replace(t,"\\$&")},prettifyNumber:function(e,t){return e.toFixed(void 0===t?2:t).replace(/\.?0+$/,"")},stringBuilder:function(e){return new n(e)},replaceSubstring:function(e,r,n,i){return t.isObject(n)&&"end"in n&&(i=n.end,n=n.start),t.isString(i)&&(i=n+i.length),t.isUndefined(i)&&(i=n),n<0||n>e.length?e:e.substring(0,n)+r+e.substring(i)},narrowToNonSpace:function(t,r,n){for(var i=e("range").create(r,n),o=/[\s\n\r\u00a0]/;i.start<i.end&&o.test(t.charAt(i.start));)i.start++;for(;i.end>i.start;)if(i.end--,!o.test(t.charAt(i.end))){i.end++;break}return i},findNewlineBounds:function(t,r){for(var n=t.length,i=0,o=n-1,s=r-1;s>0;s--){if("\n"==(l=t.charAt(s))||"\r"==l){i=s+1;break}}for(var a=r;a<n;a++){var l;if("\n"==(l=t.charAt(a))||"\r"==l){o=a;break}}return e("range").create(i,o-i)},deepMerge:function(){var e,r,n,i,o,s,a=arguments[0]||{},l=1,c=arguments.length;for(t.isObject(a)||t.isFunction(a)||(a={});l<c;l++)if(null!=(e=arguments[l]))for(r in e)n=a[r],a!==(i=e[r])&&(i&&(t.isObject(i)||(o=t.isArray(i)))?(o?(o=!1,s=n&&t.isArray(n)?n:[]):s=n&&t.isObject(n)?n:{},a[r]=this.deepMerge(s,i)):void 0!==i&&(a[r]=i));return a}}}),emmet.define("range",function(e,t){function r(e,t,r){switch(r){case"eq":case"==":return e===t;case"lt":case"<":return e<t;case"lte":case"<=":return e<=t;case"gt":case">":return e>t;case"gte":case">=":return e>=t}}function n(e,r){t.isObject(e)&&"start"in e?(this.start=Math.min(e.start,e.end),this.end=Math.max(e.start,e.end)):t.isArray(e)?(this.start=e[0],this.end=e[1]):(r=t.isString(r)?r.length:+r,this.start=e,this.end=e+r)}return n.prototype={length:function(){return Math.abs(this.end-this.start)},equal:function(e){return this.cmp(e,"eq","eq")},shift:function(e){return this.start+=e,this.end+=e,this},overlap:function(e){return e.start<=this.end&&e.end>=this.start},intersection:function(e){if(this.overlap(e)){var t=Math.max(e.start,this.start);return new n(t,Math.min(e.end,this.end)-t)}return null},union:function(e){if(this.overlap(e)){var t=Math.min(e.start,this.start);return new n(t,Math.max(e.end,this.end)-t)}return null},inside:function(e){return this.cmp(e,"lte","gt")},contains:function(e){return this.cmp(e,"lt","gt")},include:function(e){return this.cmp(loc,"lte","gte")},cmp:function(e,t,i){var o,s;return e instanceof n?(o=e.start,s=e.end):o=s=e,r(this.start,o,t||"<=")&&r(this.end,s,i||">")},substring:function(e){return this.length()>0?e.substring(this.start,this.end):""},clone:function(){return new n(this.start,this.length())},toArray:function(){return[this.start,this.end]},toString:function(){return"{"+this.start+", "+this.length()+"}"}},{create:function(e,r){return t.isUndefined(e)||null===e?null:e instanceof n?e:(t.isObject(e)&&"start"in e&&"end"in e&&(r=e.end-e.start,e=e.start),new n(e,r))},create2:function(e,r){return t.isNumber(e)&&t.isNumber(r)&&(r-=e),this.create(e,r)}}}),emmet.define("handlerList",function(e,t){function r(){this._list=[]}return r.prototype={add:function(e,r){this._list.push(t.extend({order:0},r||{},{fn:e}))},remove:function(e){this._list=t.without(this._list,t.find(this._list,function(t){return t.fn===e}))},list:function(){return t.sortBy(this._list,"order").reverse()},listFn:function(){return t.pluck(this.list(),"fn")},exec:function(e,r){r=r||[];var n=null;return t.find(this.list(),function(t){if((n=t.fn.apply(t,r))!==e)return!0}),n}},{create:function(){return new r}}}),emmet.define("tokenIterator",function(e,t){function r(e){this.tokens=e,this._position=0,this.reset()}return r.prototype={next:function(){if(this.hasNext()){var e=this.tokens[++this._i];return this._position=e.start,e}return null},current:function(){return this.tokens[this._i]},position:function(){return this._position},hasNext:function(){return this._i<this._il-1},reset:function(){this._i=-1,this._il=this.tokens.length},item:function(){return this.tokens[this._i]},itemNext:function(){return this.tokens[this._i+1]},itemPrev:function(){return this.tokens[this._i-1]},nextUntil:function(e,r){for(var n,i=t.isString(e)?function(t){return t.type==e}:e;(n=this.next())&&(r&&r.call(this,n),!i.call(this,n)););}},{create:function(e){return new r(e)}}}),emmet.define("stringStream",function(e,t){function r(e){this.pos=this.start=0,this.string=e}return r.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return 0==this.pos},peek:function(){return this.string.charAt(this.pos)},next:function(){if(this.pos<this.string.length)return this.string.charAt(this.pos++)},eat:function(e){var t=this.string.charAt(this.pos);if("string"==typeof e?t==e:t&&(e.test?e.test(t):e(t)))return++this.pos,t},eatWhile:function(e){for(var t=this.pos;this.eat(e););return this.pos>t},eatSpace:function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},skipToEnd:function(){this.pos=this.string.length},skipTo:function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},skipToPair:function(e,t){for(var r,n=0,i=this.pos,o=this.string.length;i<o;)if((r=this.string.charAt(i++))==e)n++;else if(r==t&&--n<1)return this.pos=i,!0;return!1},backUp:function(e){this.pos-=e},match:function(e,t,r){if("string"!=typeof e){var n=this.string.slice(this.pos).match(e);return n&&!1!==t&&(this.pos+=n[0].length),n}var i=r?function(e){return e.toLowerCase()}:function(e){return e};if(i(this.string).indexOf(i(e),this.pos)==this.pos)return!1!==t&&(this.pos+=e.length),!0},current:function(){return this.string.slice(this.start,this.pos)}},{create:function(e){return new r(e)}}}),emmet.define("resources",function(e,t){var r="system",n={},i=/^<(\w+\:?[\w\-]*)((?:\s+[\w\:\-]+\s*=\s*(['"]).*?\3)*)\s*(\/?)>/,o={},s={},a=e("handlerList").create();function l(t,r,n){var o,s;return o=r,r=(s=e("utils")).replaceUnescapedSymbol(o,"|",s.getCaretPlaceholder()),"snippets"==n?e("elements").create("snippet",r):"abbreviations"==n?function(t,r){t=e("utils").trim(t);var n,o=e("elements");return(n=i.exec(r))?o.create("element",n[1],n[2],"/"==n[4]):o.create("reference",r)}(t,r):void 0}function c(e){return e.replace(/:$/,"").replace(/:/g,"-")}return{setVocabulary:function(e,t){n={},t==r?o=e:s=e},getVocabulary:function(e){return e==r?o:s},getMatchedResource:function(e,r){return a.exec(null,t.toArray(arguments))||this.findSnippet(r,e.name())},getVariable:function(e){return(this.getSection("variables")||{})[e]},setVariable:function(e,t){var r=this.getVocabulary("user")||{};"variables"in r||(r.variables={}),r.variables[e]=t,this.setVocabulary(r,"user")},hasSyntax:function(e){return e in this.getVocabulary("user")||e in this.getVocabulary(r)},addResolver:function(e,t){a.add(e,t)},removeResolver:function(e){a.remove(e)},getSection:function(r){if(!r)return null;r in n||(n[r]=e("utils").deepMerge({},o[r],s[r]));for(var i,a=n[r],l=t.rest(arguments);a&&(i=l.shift());){if(!(i in a))return null;a=a[i]}return a},findItem:function(e,t){for(var r=this.getSection(e);r;){if(t in r)return r[t];r=this.getSection(r.extends)}},findSnippet:function(e,r,n){if(!e||!r)return null;n=n||[];var i=[r];~r.indexOf("-")&&i.push(r.replace(/\-/g,":"));var o=this.getSection(e),s=null;return t.find(["snippets","abbreviations"],function(r){var n=this.getSection(e,r);if(n)return t.find(i,function(e){if(n[e])return s=l(e,n[e],r)})},this),n.push(e),s||!o.extends||t.include(n,o.extends)?s:this.findSnippet(o.extends,r,n)},fuzzyFindSnippet:function(r,n,i){i=i||.3;var o=this.getAllSnippets(r),s=e("string-score");n=c(n);var a=t.map(o,function(e,t){return{key:t,score:s.score(e.nk,n,.1)}}),l=t.last(t.sortBy(a,"score"));if(l&&l.score>=i)return o[l.key].parsedValue},getAllSnippets:function(e){var r="all-"+e;if(!n[r]){var i=[],o=e,s=[];do{var a=this.getSection(o);if(!a)break;t.each(["snippets","abbreviations"],function(e){var r={};t.each(a[e]||null,function(t,n){r[n]={nk:c(n),value:t,parsedValue:l(n,t,e),type:e}}),i.push(r)}),s.push(o),o=a.extends}while(o&&!t.include(s,o));n[r]=t.extend.apply(t,i.reverse())}return n[r]}}}),emmet.define("actions",function(e,t,r){var n={};function i(t){return e("utils").trim(t.charAt(0).toUpperCase()+t.substring(1).replace(/_[a-z]/g,function(e){return" "+e.charAt(1).toUpperCase()}))}return{add:function(e,t,r){e=e.toLowerCase(),(r=r||{}).label||(r.label=i(e)),n[e]={name:e,fn:t,options:r}},get:function(e){return n[e.toLowerCase()]},run:function(e,r){t.isArray(r)||(r=t.rest(arguments));var n=this.get(e);return n?n.fn.apply(emmet,r):(emmet.log('Action "%s" is not defined',e),!1)},getAll:function(){return n},getList:function(){return t.values(this.getAll())},getMenu:function(e){var r=[];return e=e||[],t.each(this.getList(),function(n){if(!n.options.hidden&&!t.include(e,n.name)){var o=i(n.name),s=r;if(n.options.label){var a,l,c=n.options.label.split("/");for(o=c.pop();a=c.shift();)(l=t.find(s,function(e){return"submenu"==e.type&&e.name==a}))||(l={name:a,type:"submenu",items:[]},s.push(l)),s=l.items}s.push({type:"action",name:n.name,label:o})}}),r},getActionNameForMenuTitle:function(e,r){var n=null;return t.find(r||this.getMenu(),function(t){return"action"!=t.type?n=this.getActionNameForMenuTitle(e,t.items):t.label==e||t.name==e?n=t.name:void 0},this),n||null}}}),emmet.define("profile",function(e,t){var r={},n={tag_case:"asis",attr_case:"asis",attr_quotes:"double",tag_nl:"decide",tag_nl_leaf:!1,place_cursor:!0,indent:!0,inline_break:3,self_closing_tag:"xhtml",filters:"",extraFilters:""};function i(e){t.extend(this,n,e)}function o(e,t){switch(String(t||"").toLowerCase()){case"lower":return e.toLowerCase();case"upper":return e.toUpperCase()}return e}function s(e,t){return r[e.toLowerCase()]=new i(t)}function a(){s("xhtml"),s("html",{self_closing_tag:!1}),s("xml",{self_closing_tag:!0,tag_nl:!0}),s("plain",{tag_nl:!1,indent:!1,place_cursor:!1}),s("line",{tag_nl:!1,indent:!1,extraFilters:"s"})}return i.prototype={tagName:function(e){return o(e,this.tag_case)},attributeName:function(e){return o(e,this.attr_case)},attributeQuote:function(){return"single"==this.attr_quotes?"'":'"'},selfClosing:function(e){return"xhtml"==this.self_closing_tag?" /":!0===this.self_closing_tag?"/":""},cursor:function(){return this.place_cursor?e("utils").getCaretPlaceholder():""}},a(),{create:function(e,r){return 2==arguments.length?s(e,r):new i(t.defaults(e||{},n))},get:function(n,o){if(!n&&o){var s=e("resources").findItem(o,"profile");s&&(n=s)}return n?n instanceof i?n:t.isString(n)&&n.toLowerCase()in r?r[n.toLowerCase()]:this.create(n):r.plain},remove:function(e){(e=(e||"").toLowerCase())in r&&delete r[e]},reset:function(){r={},a()},stringCase:o}}),emmet.define("editorUtils",function(e,t){return{isInsideTag:function(e,t){for(var r=t;r>-1&&"<"!=e.charAt(r);)r--;if(-1!=r){var n=/^<\/?\w[\w\:\-]*.*?>/.exec(e.substring(r));if(n&&t>r&&t<r+n[0].length)return!0}return!1},outputInfo:function(e,t,r){return r=r||e.getProfileName(),{syntax:String(t||e.getSyntax()),profile:r||null,content:String(e.getContent())}},unindent:function(t,r){return e("utils").unindentString(r,this.getCurrentLinePadding(t))},getCurrentLinePadding:function(t){return e("utils").getLinePadding(t.getCurrentLine())}}}),emmet.define("actionUtils",function(e,t){return{mimeTypes:{gif:"image/gif",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",svg:"image/svg+xml",html:"text/html",htm:"text/html"},extractAbbreviation:function(t){for(var r=t.length,n=-1,i=0,o=0,s=0,a=e("utils"),l=e("abbreviationParser");;){if(--r<0){n=0;break}var c=t.charAt(r);if("]"==c)o++;else if("["==c){if(!o){n=r+1;break}o--}else if("}"==c)s++;else if("{"==c){if(!s){n=r+1;break}s--}else if(")"==c)i++;else if("("==c){if(!i){n=r+1;break}i--}else{if(o||s)continue;if(!l.isAllowedChar(c)||">"==c&&a.endsWithTag(t.substring(0,r+1))){n=r+1;break}}}return-1==n||s||o||i?"":t.substring(n).replace(/^[\*\+\>\^]+/,"")},getImageSize:function(e){var t=function(){return e.charCodeAt(r++)};if("‰PNG\r\n\n"===e.substr(0,8)){var r=e.indexOf("IHDR")+4;return{width:t()<<24|t()<<16|t()<<8|t(),height:t()<<24|t()<<16|t()<<8|t()}}if("GIF8"===e.substr(0,4))return r=6,{width:t()|t()<<8,height:t()|t()<<8};if("ÿØ"===e.substr(0,2)){r=2;for(var n=e.length;r<n;){if(255!=t())return;var i=t();if(218==i)break;var o=t()<<8|t();if(!(!(i>=192&&i<=207)||4&i||8&i))return r+=1,{height:t()<<8|t(),width:t()<<8|t()};r+=o-2}}},captureContext:function(r){if(String(r.getSyntax())in{html:1,xml:1,xsl:1}){var n=String(r.getContent()),i=e("htmlMatcher").find(n,r.getCaretPos());if(i&&"tag"==i.type){var o=i.open,s={name:o.name,attributes:[]},a=e("xmlEditTree").parse(o.range.substring(n));return a&&(s.attributes=t.map(a.getAll(),function(e){return{name:e.name(),value:e.value()}})),s}}return null},findExpressionBounds:function(t,r){for(var n=String(t.getContent()),i=n.length,o=t.getCaretPos()-1,s=o+1;o>=0&&r(n.charAt(o),o,n);)o--;for(;s<i&&r(n.charAt(s),s,n);)s++;if(s>o)return e("range").create([++o,s])},compoundUpdate:function(e,t){if(t){var r=e.getSelectionRange();return e.replaceContent(t.data,t.start,t.end,!0),e.createSelection(t.caret,t.caret+r.end-r.start),!0}return!1},detectSyntax:function(t,r){var n=r||"html";return e("resources").hasSyntax(n)||(n="html"),"html"==n&&(this.isStyle(t)||this.isInlineCSS(t))&&(n="css"),n},detectProfile:function(t){var r=t.getSyntax();if(n=e("resources").findItem(r,"profile"))return n;switch(r){case"xml":case"xsl":return"xml";case"css":if(this.isInlineCSS(t))return"line";break;case"html":var n;return(n=e("resources").getVariable("profile"))||(n=this.isXHTML(t)?"xhtml":"html"),n}return"xhtml"},isXHTML:function(e){return-1!=e.getContent().search(/<!DOCTYPE[^>]+XHTML/i)},isStyle:function(t){var r=String(t.getContent()),n=t.getCaretPos(),i=e("htmlMatcher").tag(r,n);return i&&"style"==i.open.name.toLowerCase()&&i.innerRange.cmp(n,"lte","gte")},isInlineCSS:function(t){var r=String(t.getContent()),n=t.getCaretPos(),i=e("xmlEditTree").parseFromPosition(r,n,!0);if(i){var o=i.itemFromPosition(n,!0);return o&&"style"==o.name().toLowerCase()&&o.valueRange(!0).cmp(n,"lte","gte")}return!1}}}),emmet.define("abbreviationUtils",function(e,t){return{isSnippet:function(t){return e("elements").is(t.matchedResource(),"snippet")},isUnary:function(e){if(e.children.length||e._text||this.isSnippet(e))return!1;var t=e.matchedResource();return t&&t.is_empty},isInline:function(t){return t.isTextNode()||!t.name()||e("tagName").isInlineLevel(t.name())},isBlock:function(e){return this.isSnippet(e)||!this.isInline(e)},isSnippet:function(t){return e("elements").is(t.matchedResource(),"snippet")},hasTagsInContent:function(t){return e("utils").matchesTag(t.content)},hasBlockChildren:function(e){return this.hasTagsInContent(e)&&this.isBlock(e)||t.any(e.children,function(e){return this.isBlock(e)},this)},insertChildContent:function(r,n,i){i=t.extend({keepVariable:!0,appendIfNoChild:!0},i||{});var o=!1,s=e("utils");return r=s.replaceVariables(r,function(e,t,a){var l=e;return"child"==t&&(l=s.padString(n,s.getLinePaddingFromPosition(r,a.start)),o=!0,i.keepVariable&&(l+=e)),l}),!o&&i.appendIfNoChild&&(r+=n),r}}}),emmet.define("base64",function(e,t){var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(e){for(var t,n,i,o,s,a,l,c,u,d=[],g=0,h=e.length,m=r;g<h;)o=(t=255&e.charCodeAt(g++))>>2,s=(3&t)<<4|(n=255&(c=e.charCodeAt(g++)))>>4,a=(15&n)<<2|(i=255&(u=e.charCodeAt(g++)))>>6,l=63&i,isNaN(c)?a=l=64:isNaN(u)&&(l=64),d.push(m.charAt(o)+m.charAt(s)+m.charAt(a)+m.charAt(l));return d.join("")},decode:function(e){var t,n,i,o,s,a,l=0,c=0,u=[],d=r,g=e.length;if(!e)return e;e+="";do{t=(a=d.indexOf(e.charAt(l++))<<18|d.indexOf(e.charAt(l++))<<12|(o=d.indexOf(e.charAt(l++)))<<6|(s=d.indexOf(e.charAt(l++))))>>16&255,n=a>>8&255,i=255&a,u[c++]=64==o?String.fromCharCode(t):64==s?String.fromCharCode(t,n):String.fromCharCode(t,n,i)}while(l<g);return u.join("")}}}),emmet.define("htmlMatcher",function(e,t){var r=/^<([\w\:\-]+)((?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/,n=/^<\/([\w\:\-]+)[^>]*>/;function i(r,n){return{range:e("range").create(r,t.isNumber(n)?n-r:n[0]),type:"comment"}}function o(t){var i,o={};return{open:function(e){var t=this.matches(e);return t&&"open"==t.type?t:null},close:function(e){var t=this.matches(e);return t&&"close"==t.type?t:null},matches:function(s){var a="p"+s;if(!(a in o)&&"<"==t.charAt(s)){var l=t.slice(s);(i=l.match(r))?o[a]=function(t,r){return{name:r[1],selfClose:!!r[3],range:e("range").create(t,r[0]),type:"open"}}(s,i):(i=l.match(n))?o[a]=function(t,r){return{name:r[1],range:e("range").create(t,r[0]),type:"close"}}(s,i):o[a]=!1}return o[a]},text:function(){return t}}}function s(e,t,r){return e.substring(t,t+r.length)==r}function a(e,r){for(var n=[],i=null,o=r.text(),a=e.range.end,l=o.length;a<l;a++){if(s(o,a,"\x3c!--"))for(var c=a;c<l;c++)if(s(o,c,"--\x3e")){a=c+3;break}if(i=r.matches(a))if("open"!=i.type||i.selfClose){if("close"==i.type){if(!n.length)return i.name==e.name?i:null;if(t.last(n)==i.name)n.pop();else{for(var u=!1;n.length&&!u;){n.pop()==i.name&&(u=!0)}if(!n.length&&!u)return i.name==e.name?i:null}}}else n.push(i.name)}}return{find:function(t,r){for(var n=e("range"),l=o(t),c=null,u=null,d=r;d>=0;d--)if(c=l.open(d)){if(c.selfClose){if(c.range.cmp(r,"lt","gt"))break;continue}if(u=a(c,l)){if(n.create2(c.range.start,u.range.end).contains(r))break}else if(c.range.contains(r))break;c=null}else if(s(t,d,"--\x3e")){for(var g=d-1;g>=0&&!s(t,g,"--\x3e");g--)if(s(t,g,"\x3c!--")){d=g;break}}else if(s(t,d,"\x3c!--")){g=d+4;for(var h=t.length;g<h;g++)if(s(t,g,"--\x3e")){g+=3;break}c=i(d,g);break}if(c){var m=null,p=null;if(u?(m=n.create2(c.range.start,u.range.end),p=n.create2(c.range.end,u.range.start)):m=p=n.create2(c.range.start,c.range.end),"comment"==c.type){var _=m.substring(t);p.start+=_.length-_.replace(/^<\!--\s*/,"").length,p.end-=_.length-_.replace(/\s*-->$/,"").length}return{open:c,close:u,type:"comment"==c.type?"comment":"tag",innerRange:p,innerContent:function(){return this.innerRange.substring(t)},outerRange:m,outerContent:function(){return this.outerRange.substring(t)},range:p.length()&&p.cmp(r,"lte","gte")?p:m,content:function(){return this.range.substring(t)},source:t}}},tag:function(e,t){var r=this.find(e,t);if(r&&"tag"==r.type)return r}}}),emmet.define("tabStops",function(e,t){var r=100,n=0,i={replaceCarets:!1,escape:function(e){return"\\"+e},tabstop:function(e){return e.token},variable:function(e){return e.token}};return e("abbreviationParser").addOutputProcessor(function(t,r,i){var o=0,s=e("tabStops"),a=e("utils"),l={tabstop:function(e){var t=parseInt(e.group);return 0==t?"${0}":(t>o&&(o=t),e.placeholder?"${"+(t+n)+":"+s.processText(e.placeholder,l)+"}":"${"+(t+n)+"}")}};return t=s.processText(t,l),t=a.replaceVariables(t,s.variablesResolver(r)),n+=o+1,t}),{extract:function(r,n){var o=e("utils"),s={carets:""},a=[];(n=t.extend({},i,n,{tabstop:function(e){var t=e.token,r="";return"cursor"==e.placeholder?a.push({start:e.start,end:e.start+t.length,group:"carets",value:""}):("placeholder"in e&&(s[e.group]=e.placeholder),e.group in s&&(r=s[e.group]),a.push({start:e.start,end:e.start+t.length,group:e.group,value:r})),t}})).replaceCarets&&(r=r.replace(new RegExp(o.escapeForRegexp(o.getCaretPlaceholder()),"g"),"${0:cursor}")),r=this.processText(r,n);var l=o.stringBuilder(),c=0,u=t.map(a,function(e){l.append(r.substring(c,e.start));var t=l.length,n=s[e.group]||"";return l.append(n),c=e.end,{group:e.group,start:t,end:t+n.length}});return l.append(r.substring(c)),{text:l.toString(),tabstops:t.sortBy(u,"start")}},processText:function(r,n){n=t.extend({},i,n);for(var o,s,a,l=e("utils").stringBuilder(),c=e("stringStream").create(r);o=c.next();)if("\\"!=o||c.eol()){if(a=o,"$"==o)if(c.start=c.pos-1,s=c.match(/^[0-9]+/))a=n.tabstop({start:l.length,group:c.current().substr(1),token:c.current()});else if(s=c.match(/^\{([a-z_\-][\w\-]*)\}/))a=n.variable({start:l.length,name:s[1],token:c.current()});else if(s=c.match(/^\{([0-9]+)(:.+?)?\}/,!1)){c.skipToPair("{","}");var u={start:l.length,group:s[1],token:c.current()},d=u.token.substring(u.group.length+2,u.token.length-1);d&&(u.placeholder=d.substr(1)),a=n.tabstop(u)}l.append(a)}else l.append(n.escape(c.next()));return l.toString()},upgrade:function(e,r){var n=0,i={tabstop:function(e){var t=parseInt(e.group);return t>n&&(n=t),e.placeholder?"${"+(t+r)+":"+e.placeholder+"}":"${"+(t+r)+"}"}};return t.each(["start","end","content"],function(t){e[t]=this.processText(e[t],i)},this),n},variablesResolver:function(n){var i={},o=e("resources");return function(s,a){if("child"==a)return s;if("cursor"==a)return e("utils").getCaretPlaceholder();var l=n.attribute(a);if(!t.isUndefined(l)&&l!==s)return l;var c=o.getVariable(a);return c||(i[a]||(i[a]=r++),"${"+i[a]+":"+a+"}")}},resetTabstopIndex:function(){n=0,r=100}}}),emmet.define("preferences",function(e,t){var r={},n={},i=null,o=null;return{define:function(e,r,i){var o=e;t.isString(e)&&((o={})[e]={value:r,description:i}),t.each(o,function(e,r){var i;n[r]=(i=e,t.isObject(i)&&"value"in i&&t.keys(i).length<3?e:{value:e})})},set:function(e,i){var o=e;t.isString(e)&&((o={})[e]=i),t.each(o,function(e,i){if(!(i in n))throw'Property "'+i+'" is not defined. You should define it first with `define` method of current module';if(e!==n[i].value){switch(typeof n[i].value){case"boolean":o=e,e=t.isString(o)?"yes"==(o=o.toLowerCase())||"true"==o||"1"==o:!!o;break;case"number":e=parseInt(e+"",10)||0;break;default:null!==e&&(e+="")}r[i]=e}else i in r&&delete r[i];var o})},get:function(e){return e in r?r[e]:e in n?n[e].value:void 0},getArray:function(r){var n=this.get(r);return t.isUndefined(n)||null===n||""===n?null:(n=t.map(n.split(","),e("utils").trim)).length?n:null},getDict:function(e){var r={};return t.each(this.getArray(e),function(e){var t=e.split(":");r[t[0]]=t[1]}),r},description:function(e){return e in n?n[e].description:void 0},remove:function(e){t.isArray(e)||(e=[e]),t.each(e,function(e){e in r&&delete r[e],e in n&&delete n[e]})},list:function(){return t.map(t.keys(n).sort(),function(e){return{name:e,value:this.get(e),type:typeof n[e].value,description:n[e].description}},this)},load:function(e){t.each(e,function(e,t){this.set(t,e)},this)},exportModified:function(){return t.clone(r)},reset:function(){r={}},_startTest:function(){i=n,o=r,n={},r={}},_stopTest:function(){n=i,r=o}}}),emmet.define("filters",function(e,t){var r={},n="html";function i(e){return e?t.isString(e)?e.split(/[\|,]/g):e:[]}return{add:function(e,t){r[e]=t},apply:function(n,o,s){var a=e("utils");return s=e("profile").get(s),t.each(i(o),function(e){var t=a.trim(e.toLowerCase());t&&t in r&&(n=r[t](n,s))}),n},composeList:function(t,r,o){var s=i((r=e("profile").get(r)).filters||e("resources").findItem(t,"filters")||n);return r.extraFilters&&(s=s.concat(i(r.extraFilters))),o&&(s=s.concat(i(o))),s&&s.length||(s=i(n)),s},extractFromAbbreviation:function(e){var t="";return[e=e.replace(/\|([\w\|\-]+)$/,function(e,r){return t=r,""}),i(t)]}}}),emmet.define("elements",function(e,t){var r={},n=/([\w\-:]+)\s*=\s*(['"])(.*?)\2/g,i={add:function(e,t){var n=this;r[e]=function(){var r=t.apply(n,arguments);return r&&(r.type=e),r}},get:function(e){return r[e]},create:function(e){var t=[].slice.call(arguments,1),r=this.get(e);return r?r.apply(this,t):null},is:function(e,t){return e&&e.type===t}};function o(e){return{data:e}}return i.add("element",function(e,r,i){var o={name:e,is_empty:!!i};if(r)if(o.attributes=[],t.isArray(r))o.attributes=r;else if(t.isString(r))for(var s;s=n.exec(r);)o.attributes.push({name:s[1],value:s[3]});else t.each(r,function(e,t){o.attributes.push({name:t,value:e})});return o}),i.add("snippet",o),i.add("reference",o),i.add("empty",function(){return{}}),i}),emmet.define("editTree",function(e,t,r){var n=e("range").create;function i(e,r){this.options=t.extend({offset:0},r),this.source=e,this._children=[],this._positions={name:0},this.initialize.apply(this,arguments)}function o(e,t,r){this.parent=e,this._name=t.value,this._value=r?r.value:"",this._positions={name:t.start,value:r?r.start:-1},this.initialize.apply(this,arguments)}return i.extend=r.extend,i.prototype={initialize:function(){},_updateSource:function(r,i,o){var s=n(i,t.isUndefined(o)?0:o-i),a=r.length-s.length(),l=function(e){t.each(e,function(t,r){t>=s.end&&(e[r]+=a)})};l(this._positions),t.each(this.list(),function(e){l(e._positions)}),this.source=e("utils").replaceSubstring(this.source,r,s)},add:function(e,t,r){var n=new o(e,t);return this._children.push(n),n},get:function(e){return t.isNumber(e)?this.list()[e]:t.isString(e)?t.find(this.list(),function(t){return t.name()===e}):e},getAll:function(e){t.isArray(e)||(e=[e]);var r=[],n=[];return t.each(e,function(e){t.isString(e)?r.push(e):t.isNumber(e)&&n.push(e)}),t.filter(this.list(),function(e,i){return t.include(n,i)||t.include(r,e.name())})},value:function(e,r,n){var i=this.get(e);return i?i.value(r):t.isUndefined(r)?void 0:this.add(e,r,n)},values:function(e){return t.map(this.getAll(e),function(e){return e.value()})},remove:function(e){var r=this.get(e);r&&(this._updateSource("",r.fullRange()),this._children=t.without(this._children,r))},list:function(){return this._children},indexOf:function(e){return t.indexOf(this.list(),this.get(e))},name:function(e){return t.isUndefined(e)||this._name===(e=String(e))||(this._updateSource(e,this._positions.name,this._positions.name+this._name.length),this._name=e),this._name},nameRange:function(e){return n(this._positions.name+(e?this.options.offset:0),this.name())},range:function(e){return n(e?this.options.offset:0,this.toString())},itemFromPosition:function(e,r){return t.find(this.list(),function(t){return t.range(r).inside(e)})},toString:function(){return this.source}},o.extend=r.extend,o.prototype={initialize:function(){},_pos:function(e,t){return e+(t?this.parent.options.offset:0)},value:function(e){return t.isUndefined(e)||this._value===(e=String(e))||(this.parent._updateSource(e,this.valueRange()),this._value=e),this._value},name:function(e){return t.isUndefined(e)||this._name===(e=String(e))||(this.parent._updateSource(e,this.nameRange()),this._name=e),this._name},namePosition:function(e){return this._pos(this._positions.name,e)},valuePosition:function(e){return this._pos(this._positions.value,e)},range:function(e){return n(this.namePosition(e),this.toString())},fullRange:function(e){return this.range(e)},nameRange:function(e){return n(this.namePosition(e),this.name())},valueRange:function(e){return n(this.valuePosition(e),this.value())},toString:function(){return this.name()+this.value()},valueOf:function(){return this.toString()}},{EditContainer:i,EditElement:o,createToken:function(e,t,r){var n={start:e||0,value:t||"",type:r};return n.end=n.start+n.value.length,n}}}),emmet.define("cssEditTree",function(e,t){var r={styleBefore:"\n\t",styleSeparator:": ",offset:0};function n(t,r){return e("range").create(t,r)}function i(e,r){var n=["white","line"];if(!(2&~(r=r||3)))for(;e.length&&t.include(n,t.last(e).type);)e.pop();if(!(1&~r))for(;e.length&&t.include(n,e[0].type);)e.shift();return e}function o(e){var r,o,s,a=["white","line",":"],l=[];for(e.nextUntil(function(e){return!t.include(a,this.itemNext().type)}),o=e.current().end;r=e.next();){if("}"==r.type||";"==r.type)return i(l,1|("}"==r.type?2:0)),l.length?(o=l[0].start,s=t.last(l).end):s=o,n(o,s-o);l.push(r)}if(l.length)return n(l[0].start,t.last(l).end-l[0].start)}function s(r){var i,o=e("stringStream").create(r),s=[],a=/[\s\u00a0,]/,l=function(){o.next(),s.push(n(o.start,o.current())),o.start=o.pos};for(o.eatSpace(),o.start=o.pos;i=o.next();)if('"'==i||"'"==i){if(o.next(),!o.skipTo(i))break;l()}else if("("==i){if(o.backUp(1),!o.skipToPair("(",")"))break;o.backUp(1),l()}else a.test(i)&&(s.push(n(o.start,o.current().length-1)),o.eatWhile(a),o.start=o.pos);return l(),t.chain(s).filter(function(e){return!!e.length()}).uniq(!1,function(e){return e.toString()}).value()}function a(e){for(var t=e.tokens,r=e._i+1,n=t.length;r<n;r++){if(":"==t[r].type)return!0;if("identifier"==t[r].type||"line"==t[r].type)return!1}return!1}var l=e("editTree").EditContainer.extend({initialize:function(s,l){t.defaults(this.options,r);var u,d,g,h=e("editTree"),m=e("tokenIterator").create(e("cssParser").parse(s)),p=function(e){for(var r,o,s=[],a=e.position();(r=e.next())&&"{"!=r.type;)s.push(r);return i(s),s.length?(a=s[0].start,o=t.last(s).end):o=a,n(a,o-a)}(m);if(this._positions.name=p.start,this._name=p.substring(s),!m.current()||"{"!=m.current().type)throw"Invalid CSS rule";for(this._positions.contentStart=m.position()+1;g=m.next();)if("identifier"==g.type&&a(m)){u=n(g),d=o(m);var _=m.current()&&";"==m.current().type?n(m.current()):n(d.end,0);this._children.push(new c(this,h.createToken(u.start,u.substring(s)),h.createToken(d.start,d.substring(s)),h.createToken(_.start,_.substring(s))))}this._saveStyle()},_saveStyle:function(){var r=this._positions.contentStart,n=this.source,i=e("utils");t.each(this.list(),function(e){e.styleBefore=n.substring(r,e.namePosition());var o=i.splitByLines(e.styleBefore);o.length>1&&(e.styleBefore="\n"+t.last(o)),e.styleSeparator=n.substring(e.nameRange().end,e.valuePosition()),e.styleBefore=t.last(e.styleBefore.split("*/")),e.styleSeparator=e.styleSeparator.replace(/\/\*.*?\*\//g,""),r=e.range().end})},add:function(r,n,i){var o=this.list(),s=this._positions.contentStart,a=t.pick(this.options,"styleBefore","styleSeparator"),l=e("editTree");t.isUndefined(i)&&(i=o.length);var u=o[i];u?s=u.fullRange().start:(u=o[i-1])&&(u.end(";"),s=u.range().end),u&&(a=t.pick(u,"styleBefore","styleSeparator"));var d=l.createToken(s+a.styleBefore.length,r),g=l.createToken(d.end+a.styleSeparator.length,n),h=new c(this,d,g,l.createToken(g.end,";"));return t.extend(h,a),this._updateSource(h.styleBefore+h.toString(),s),this._children.splice(i,0,h),h}}),c=e("editTree").EditElement.extend({initialize:function(e,t,r,n){this.styleBefore=e.options.styleBefore,this.styleSeparator=e.options.styleSeparator,this._end=n.value,this._positions.end=n.start},valueParts:function(e){var r=s(this.value());if(e){var n=this.valuePosition(!0);t.each(r,function(e){e.shift(n)})}return r},end:function(e){return t.isUndefined(e)||this._end===e||(this.parent._updateSource(e,this._positions.end,this._positions.end+this._end.length),this._end=e),this._end},fullRange:function(e){var t=this.range(e);return t.start-=this.styleBefore.length,t},toString:function(){return this.name()+this.styleSeparator+this.value()+this.end()}});return{parse:function(e,t){return new l(e,t)},parseFromPosition:function(e,t,r){var n=this.extractRule(e,t,r);return n&&n.inside(t)?this.parse(n.substring(e),{offset:n.start}):null},extractRule:function(t,r,n){for(var i,o="",s=t.length,a=r,l=-1;a>=0;){if("{"==(i=t.charAt(a))){l=a;break}if("}"==i&&!n){a++;break}a--}for(;a<s;){if("{"==(i=t.charAt(a)))l=a;else if("}"==i){-1!=l&&(o=t.substring(l,a+1));break}a++}if(o){a=l-1;for(var c;a>=0&&(i=t.charAt(a),-1=="{}/\\<>\n\r".indexOf(i));)a--;return c=t.substring(a+1,l).replace(/^[\s\n\r]+/m,""),e("range").create(l-c.length,o.length+c.length)}return null},baseName:function(e){return e.replace(/^\s*\-\w+\-/,"")},findParts:s}}),emmet.define("xmlEditTree",function(e,t){var r={styleBefore:" ",styleSeparator:"=",styleQuote:'"',offset:0},n=/^<([\w\:\-]+)((?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/m,i=e("editTree").EditContainer.extend({initialize:function(n,i){t.defaults(this.options,r),this._positions.name=1;var s=null,a=e("xmlParser").parse(n),l=e("range");t.each(a,function(e){switch(e.value=l.create(e).substring(n),e.type){case"tag":/^<[^\/]+/.test(e.value)&&(this._name=e.value.substring(1));break;case"attribute":s&&this._children.push(new o(this,s)),s=e;break;case"string":this._children.push(new o(this,s,e)),s=null}},this),s&&this._children.push(new o(this,s)),this._saveStyle()},_saveStyle:function(){var e=this.nameRange().end,r=this.source;t.each(this.list(),function(t){t.styleBefore=r.substring(e,t.namePosition()),-1!==t.valuePosition()&&(t.styleSeparator=r.substring(t.namePosition()+t.name().length,t.valuePosition()-t.styleQuote.length)),e=t.range().end})},add:function(r,n,i){var s=this.list(),a=this.nameRange().end,l=e("editTree"),c=t.pick(this.options,"styleBefore","styleSeparator","styleQuote");t.isUndefined(i)&&(i=s.length);var u=s[i];u?a=u.fullRange().start:(u=s[i-1])&&(a=u.range().end),u&&(c=t.pick(u,"styleBefore","styleSeparator","styleQuote")),n=c.styleQuote+n+c.styleQuote;var d=new o(this,l.createToken(a+c.styleBefore.length,r),l.createToken(a+c.styleBefore.length+r.length+c.styleSeparator.length,n));return t.extend(d,c),this._updateSource(d.styleBefore+d.toString(),a),this._children.splice(i,0,d),d}}),o=e("editTree").EditElement.extend({initialize:function(e,t,r){this.styleBefore=e.options.styleBefore,this.styleSeparator=e.options.styleSeparator;var n="",i=e.options.styleQuote;r&&('"'==(i=(n=r.value).charAt(0))||"'"==i?n=n.substring(1):i="",i&&n.charAt(n.length-1)==i&&(n=n.substring(0,n.length-1))),this.styleQuote=i,this._value=n,this._positions.value=r?r.start+i.length:-1},fullRange:function(e){var t=this.range(e);return t.start-=this.styleBefore.length,t},toString:function(){return this.name()+this.styleSeparator+this.styleQuote+this.value()+this.styleQuote}});return{parse:function(e,t){return new i(e,t)},parseFromPosition:function(e,t,r){var n=this.extractTag(e,t,r);return n&&n.inside(t)?this.parse(n.substring(e),{offset:n.start}):null},extractTag:function(t,r,i){var o,s=t.length,a=e("range"),l=Math.min(2e3,s),c=null,u=function(e){var r;if("<"==t.charAt(e)&&(r=t.substr(e,l).match(n)))return a.create(e,r[0])};for(o=r;o>=0&&!(c=u(o));o--);if(c&&(c.inside(r)||i))return c;if(!c&&i)return null;for(o=r;o<s;o++)if(c=u(o))return c}}}),emmet.define("expandAbbreviation",function(e,t){var r=e("handlerList").create(),n=null,i=e("actions");return i.add("expand_abbreviation",function(n,i,o){var s=t.toArray(arguments),a=e("editorUtils").outputInfo(n,i,o);return s[1]=a.syntax,s[2]=a.profile,r.exec(!1,s)}),i.add("expand_abbreviation_with_tab",function(t,r,n){var o=t.getSelection(),s=e("resources").getVariable("indentation");if(o){var a=e("utils"),l=e("range").create(t.getSelectionRange()),c=a.padString(o,s);t.replaceContent(s+"${0}",t.getCaretPos());var u=e("range").create(t.getCaretPos(),l.length());return t.replaceContent(c,u.start,u.end,!0),t.createSelection(u.start,u.start+c.length),!0}return i.run("expand_abbreviation",t,r,n)||t.replaceContent(s,t.getCaretPos()),!0},{hidden:!0}),r.add(function(t,r,i){var o=t.getSelectionRange().end,s=n.findAbbreviation(t);if(s){var a=emmet.expandAbbreviation(s,r,i,e("actionUtils").captureContext(t));if(a)return t.replaceContent(a,o-s.length,o),!0}return!1},{order:-1}),n={addHandler:function(e,t){r.add(e,t)},removeHandler:function(e){r.remove(e,options)},findAbbreviation:function(t){var r=e("range").create(t.getSelectionRange()),n=String(t.getContent());if(r.length())return r.substring(n);var i=t.getCurrentLineRange();return e("actionUtils").extractAbbreviation(n.substring(i.start,r.start))}}}),emmet.define("wrapWithAbbreviation",function(e,t){var r=null;return e("actions").add("wrap_with_abbreviation",function(t,n,i,o){var s=e("editorUtils").outputInfo(t,i,o),a=e("utils"),l=e("editorUtils");if(!(n=n||t.prompt("Enter abbreviation")))return null;n=String(n);var c=e("range").create(t.getSelectionRange());if(!c.length()){var u=e("htmlMatcher").tag(s.content,c.start);if(!u)return!1;c=a.narrowToNonSpace(s.content,u.range)}var d=a.escapeText(c.substring(s.content)),g=r.wrap(n,l.unindent(t,d),s.syntax,s.profile,e("actionUtils").captureContext(t));return!!g&&(t.replaceContent(g,c.start,c.end),!0)}),r={wrap:function(t,r,n,i,o){var s=e("filters"),a=e("utils");n=n||emmet.defaultSyntax(),i=e("profile").get(i,n),e("tabStops").resetTabstopIndex();var l=s.extractFromAbbreviation(t),c=e("abbreviationParser").parse(l[0],{syntax:n,pastedContent:r,contextNode:o});if(c){var u=s.composeList(n,i,l[1]);return s.apply(c,u,i),a.replaceVariables(c.toString())}return null}}}),emmet.exec(function(e,t){function r(r){var i=e("range").create(r.getSelectionRange()),o=e("editorUtils").outputInfo(r);if(!i.length()){var s=e("cssEditTree").parseFromPosition(o.content,r.getCaretPos());if(s){var a=function(e,r){var n=r-(e.options.offset||0),i=/^[\s\n\r]/;return t.find(e.list(),function(t){return t.range().end===n?i.test(e.source.charAt(n)):t.range().inside(n)})}(s,r.getCaretPos());i=a?a.range(!0):e("range").create(s.nameRange(!0).start,s.source)}}return i.length()||(i=e("range").create(r.getCurrentLineRange()),e("utils").narrowToNonSpace(o.content,i)),n(r,"/*","*/",i)}function n(t,r,n,i){var o=e("editorUtils"),s=o.outputInfo(t).content,a=t.getCaretPos(),l=null,c=e("utils");var u=function(t,r,n,i){for(var o=-1,s=-1,a=function(e,r){return t.substr(r,e.length)==e};r--;)if(a(n,r)){o=r;break}if(-1!=o){r=o;for(var l=t.length;l>=r++;)if(a(i,r)){s=r+i.length;break}}return-1!=o&&-1!=s?e("range").create(o,s-o):null}(s,a,r,n);return u&&u.overlap(i)?l=(i=u).substring(s).replace(new RegExp("^"+c.escapeForRegexp(r)+"\\s*"),function(e){return a-=e.length,""}).replace(new RegExp("\\s*"+c.escapeForRegexp(n)+"$"),""):(l=r+" "+i.substring(s).replace(new RegExp(c.escapeForRegexp(r)+"\\s*|\\s*"+c.escapeForRegexp(n),"g"),"")+" "+n,a+=r.length+1),null!==l&&(l=c.escapeText(l),t.setCaretPos(i.start),t.replaceContent(o.unindent(t,l),i.start,i.end),t.setCaretPos(a),!0)}e("actions").add("toggle_comment",function(t){var i=e("editorUtils").outputInfo(t);if("css"==i.syntax){var o=t.getCaretPos(),s=e("htmlMatcher").tag(i.content,o);s&&s.open.range.inside(o)&&(i.syntax="html")}return"css"==i.syntax?r(t):function(t){var r=e("range").create(t.getSelectionRange()),i=e("editorUtils").outputInfo(t);if(!r.length()){var o=e("htmlMatcher").tag(i.content,t.getCaretPos());o&&(r=o.outerRange)}return n(t,"\x3c!--","--\x3e",r)}(t)})}),emmet.exec(function(e,t){function r(e,t,r){t=t||1,r=r||0;var n=e.getCaretPos()+r,i=String(e.getContent()),o=i.length,s=-1,a=/^\s+$/;function l(e){for(var t=e;t>=0;){var r=i.charAt(t);if("\n"==r||"\r"==r)break;t--}return i.substring(t,e)}for(;n<=o&&n>=0;){n+=t;var c=i.charAt(n),u=i.charAt(n+1),d=i.charAt(n-1);switch(c){case'"':case"'":u==c&&"="==d&&(s=n+1);break;case">":"<"==u&&(s=n+1);break;case"\n":case"\r":a.test(l(n-1))&&(s=n)}if(-1!=s)break}return s}var n=e("actions");n.add("prev_edit_point",function(e){var t=e.getCaretPos(),n=r(e,-1);return n==t&&(n=r(e,-1,-2)),-1!=n&&(e.setCaretPos(n),!0)},{label:"Previous Edit Point"}),n.add("next_edit_point",function(e){var t=r(e,1);return-1!=t&&(e.setCaretPos(t),!0)})}),emmet.exec(function(e,t){var r=/^<([\w\:\-]+)((?:\s+[\w\-:]+(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/;function n(t,r,n,i){for(var o,s,a=e("range"),l=e("editorUtils").outputInfo(t).content,c=l.length,u=a.create(-1,0),d=a.create(t.getSelectionRange()),g=d.start,h=1e5;g>=0&&g<c&&--h>0;){if(o=n(l,g,r)){if(u.equal(o))break;if(u=o.clone(),s=i(o.substring(l),o.start,d.clone()))return t.createSelection(s.start,s.end),!0;g=r?o.start:o.end-1}g+=r?-1:1}return!1}function i(e){var t=!0;return n(e,!1,function(e,r){return t?(t=!1,function(e,t){var r;for(;t>=0;){if(r=a(e,t))return r;t--}return null}(e,r)):a(e,r)},function(e,t,r){return s(e,t,r,!1)})}function o(r,n,i){i=i||0;var o,s,a=e("range"),c=[],u=-1,d="",g="";return t.each(n,function(t){switch(t.type){case"tag":s=r.substring(t.start,t.end),/^<[\w\:\-]/.test(s)&&c.push(a.create({start:t.start+1,end:t.end}));break;case"attribute":u=t.start,d=r.substring(t.start,t.end);break;case"string":c.push(a.create(u,t.end-u)),o=a.create(t),l((g=o.substring(r)).charAt(0))&&o.start++,l(g.charAt(g.length-1))&&o.end--,c.push(o),"class"==d&&(c=c.concat(function(t,r){r=r||0;var n,i=[],o=e("stringStream").create(t),s=e("range");o.eatSpace(),o.start=o.pos;for(;n=o.next();)/[\s\u00a0]/.test(n)&&(i.push(s.create(o.start+r,o.pos-o.start-1)),o.eatSpace(),o.start=o.pos);return i.push(s.create(o.start+r,o.pos-o.start)),i}(o.substring(r),o.start)))}}),t.each(c,function(e){e.shift(i)}),t.chain(c).filter(function(e){return!!e.length()}).uniq(!1,function(e){return e.toString()}).value()}function s(r,n,i,s){var a=o(r,e("xmlParser").parse(r),n);s&&a.reverse();var l=t.find(a,function(e){return e.equal(i)});if(l){var c=t.indexOf(a,l);return c<a.length-1?a[c+1]:null}if(s)return t.find(a,function(e){return e.start<i.start});if(!l){var u=t.filter(a,function(e){return e.inside(i.end)});if(u.length>1)return u[1]}return t.find(a,function(e){return e.end>i.end})}function a(t,n){var i;if("<"==t.charAt(n)&&(i=t.substring(n,t.length).match(r)))return e("range").create(n,i[0])}function l(e){return'"'==e||"'"==e}function c(r){var n=r.valueRange(!0),i=[r.range(!0),n],o=e("stringStream"),s=e("cssEditTree"),a=e("range"),l=r.value();return t.each(r.valueParts(),function(e){var r=e.clone();i.push(r.shift(n.start));var c=o.create(e.substring(l));if(c.match(/^[\w\-]+\(/,!0)){c.start=c.pos,c.skipToPair("(",")");var u=c.current();i.push(a.create(r.start+c.start,u)),t.each(s.findParts(u),function(e){i.push(a.create(r.start+c.start+e.start,e.substring(u)))})}}),t.chain(i).filter(function(e){return!!e.length()}).uniq(!1,function(e){return e.toString()}).value()}function u(e,r,n){var i,o,s,a,l=null,u=null,d=e.list();for(n?(d.reverse(),s=function(e){return e.range(!0).start<=r.start},a=function(e){return e.start<r.start}):(s=function(e){return e.range(!0).end>=r.end},a=function(e){return e.end>r.start});l=t.find(d,s);){if(i=c(l),n&&i.reverse(),u=t.find(i,function(e){return e.equal(r)})){if((o=t.indexOf(i,u))!=i.length-1){u=i[o+1];break}}else{var g=t.filter(i,function(e){return e.inside(r.end)});if(g.length>1){u=g[1];break}if(u=t.find(i,a))break}u=null,r.start=r.end=n?l.range(!0).start-1:l.range(!0).end+1}return u}function d(t,r,n){var i=e("cssEditTree").parse(t,{offset:r}),o=i.nameRange(!0);return n.end<o.end?o:u(i,n,!1)}function g(t,r,n){var i=e("cssEditTree").parse(t,{offset:r}),o=u(i,n,!0);if(!o){var s=i.nameRange(!0);if(n.start>s.start)return s}return o}var h=e("actions");h.add("select_next_item",function(t){return"css"==t.getSyntax()?function(t){return n(t,!1,e("cssEditTree").extractRule,d)}(t):i(t)}),h.add("select_previous_item",function(t){return"css"==t.getSyntax()?function(t){return n(t,!0,e("cssEditTree").extractRule,g)}(t):function(e){return n(e,!0,a,function(e,t,r){return s(e,t,r,!0)})}(t)})}),emmet.exec(function(e,t){var r=e("actions"),n=e("htmlMatcher"),i=null;function o(t,r){r=String((r||"out").toLowerCase());var o=e("editorUtils").outputInfo(t),s=e("range").create(t.getSelectionRange()),a=o.content;if(i&&!i.range.equal(s)&&(i=null),i&&s.length())if("in"==r){if("tag"==i.type&&!i.close)return!1;if(i.range.equal(i.outerRange))i.range=i.innerRange;else{var l=e("utils").narrowToNonSpace(a,i.innerRange);(i=n.find(a,l.start+1))&&i.range.equal(s)&&i.outerRange.equal(s)&&(i.range=i.innerRange)}}else(!i.innerRange.equal(i.outerRange)&&i.range.equal(i.innerRange)&&s.equal(i.range)||(i=n.find(a,s.start))&&i.range.equal(s)&&i.innerRange.equal(s))&&(i.range=i.outerRange);else i=n.find(a,s.start);return i&&!i.range.equal(s)?(t.createSelection(i.range.start,i.range.end),!0):(i=null,!1)}r.add("match_pair",o,{hidden:!0}),r.add("match_pair_inward",function(e){return o(e,"in")},{label:"HTML/Match Pair Tag (inward)"}),r.add("match_pair_outward",function(e){return o(e,"out")},{label:"HTML/Match Pair Tag (outward)"}),r.add("matching_pair",function(e){var t=String(e.getContent()),r=e.getCaretPos();"<"==t.charAt(r)&&r++;var i=n.tag(t,r);return!(!i||!i.close)&&(i.open.range.inside(r)?e.setCaretPos(i.close.range.start):e.setCaretPos(i.open.range.start),!0)},{label:"HTML/Go To Matching Tag Pair"})}),emmet.exec(function(e,t){e("actions").add("remove_tag",function(t){var r=e("utils"),n=e("editorUtils").outputInfo(t),i=e("htmlMatcher").tag(n.content,t.getCaretPos());if(i){if(i.close){var o=r.narrowToNonSpace(n.content,i.innerRange),s=r.findNewlineBounds(n.content,o.start),a=r.getLinePadding(s.substring(n.content)),l=o.substring(n.content);l=r.unindentString(l,a),t.replaceContent(r.getCaretPlaceholder()+r.escapeText(l),i.outerRange.start,i.outerRange.end)}else t.replaceContent(r.getCaretPlaceholder(),i.range.start,i.range.end);return!0}return!1},{label:"HTML/Remove Tag"})}),emmet.exec(function(e,t){e("actions").add("split_join_tag",function(t,r){var n=e("htmlMatcher"),i=e("editorUtils").outputInfo(t,null,r),o=e("profile").get(i.profile),s=n.tag(i.content,t.getCaretPos());return!!s&&(s.close?function(t,r,n){var i=e("utils"),o=r.selfClosing()||" /",s=n.open.range.substring(n.source).replace(/\s*>$/,o+">"),a=t.getCaretPos();return s.length+n.outerRange.start<a&&(a=s.length+n.outerRange.start),s=i.escapeText(s),t.replaceContent(s,n.outerRange.start,n.outerRange.end),t.setCaretPos(a),!0}(t,o,s):function(t,r,n){var i=e("utils"),o=i.getNewline(),s=e("resources").getVariable("indentation"),a=t.getCaretPos(),l=!0===r.tag_nl?o+s+o:"",c=n.outerContent().replace(/\s*\/>$/,">");return a=n.outerRange.start+c.length,c+=l+"</"+n.open.name+">",c=i.escapeText(c),t.replaceContent(c,n.outerRange.start,n.outerRange.end),t.setCaretPos(a),!0}(t,o,s))},{label:"HTML/Split\\Join Tag Declaration"})}),emmet.define("reflectCSSValue",function(e,t){var r=e("handlerList").create();function n(t,r){var n=function(t,r,n,i){var o=e("cssEditTree"),s=e("utils");if(t=o.baseName(t),n=o.baseName(n),"opacity"==t&&"filter"==n)return i.replace(/opacity=[^)]*/i,"opacity="+Math.floor(100*parseFloat(r)));if("filter"==t&&"opacity"==n){var a=r.match(/opacity=([^)]*)/i);return a?s.prettifyNumber(parseInt(a[1])/100):i}return r}(t.name(),t.value(),r.name(),r.value());r.value(n)}return e("actions").add("reflect_css_value",function(t){return"css"==t.getSyntax()&&e("actionUtils").compoundUpdate(t,function(t){var n=e("cssEditTree"),i=e("editorUtils").outputInfo(t),o=t.getCaretPos(),s=n.parseFromPosition(i.content,o);if(!s)return;var a=s.itemFromPosition(o,!0);if(!a)return;var l=s.source,c=s.options.offset,u=o-c-a.range().start;if(r.exec(!1,[a]),l!==s.source)return{data:s.source,start:c,end:c+l.length,caret:c+a.range().start+u}}(t))},{label:"CSS/Reflect Value"}),r.add(function(r){var i,o,s,a=(i=r.name(),s="^(?:\\-\\w+\\-)?","opacity"==(i=e("cssEditTree").baseName(i))||"filter"==i?new RegExp(s+"(?:opacity|filter)$"):(o=i.match(/^border-radius-(top|bottom)(left|right)/))?new RegExp(s+"(?:"+i+"|border-"+o[1]+"-"+o[2]+"-radius)$"):(o=i.match(/^border-(top|bottom)-(left|right)-radius/))?new RegExp(s+"(?:"+i+"|border-radius-"+o[1]+o[2]+")$"):new RegExp(s+i+"$"));t.each(r.parent.list(),function(e){a.test(e.name())&&n(r,e)})},{order:-1}),{addHandler:function(e,t){r.add(e,t)},removeHandler:function(e){r.remove(e,options)}}}),emmet.exec(function(e,t){e("actions").add("evaluate_math_expression",function(t){var r=e("actionUtils"),n=e("utils"),i=String(t.getContent()),o=e("range").create(t.getSelectionRange());if(o.length()||(o=r.findExpressionBounds(t,function(e){return n.isNumeric(e)||-1!=".+-*/\\".indexOf(e)})),o&&o.length()){var s=o.substring(i);s=s.replace(/([\d\.\-]+)\\([\d\.\-]+)/g,"Math.round($1/$2)");try{var a=n.prettifyNumber(new Function("return "+s)());return t.replaceContent(a,o.start,o.end),t.setCaretPos(o.start+a.length),!0}catch(e){}}return!1},{label:"Numbers/Evaluate Math Expression"})}),emmet.exec(function(e,t){var r=e("actions");t.each([1,-1,10,-10,.1,-.1],function(n){var i=n>0?"increment":"decrement";r.add(i+"_number_by_"+String(Math.abs(n)).replace(".","").substring(0,2),function(r){return function(r,n){var i=e("utils"),o=e("actionUtils"),s=!1,a=!1,l=o.findExpressionBounds(r,function(e,t,r){return!!i.isNumeric(e)||("."==e?!!i.isNumeric(r.charAt(t+1))&&!a&&(a=!0):"-"==e&&!s&&(s=!0))});if(l&&l.length()){var c=l.substring(String(r.getContent())),u=parseFloat(c);if(!t.isNaN(u)){if(u=i.prettifyNumber(u+n),/^(\-?)0+[1-9]/.test(c)){var d="";RegExp.$1&&(d="-",u=u.substring(1));var g=u.split(".");g[0]=i.zeroPadString(g[0],function(e){return~(e=e.replace(/^\-/,"")).indexOf(".")?e.split(".")[0].length:e.length}(c)),u=d+g.join(".")}return r.replaceContent(u,l.start,l.end),r.createSelection(l.start,l.start+u.length),!0}}return!1}(r,n)},{label:"Numbers/"+i.charAt(0).toUpperCase()+i.substring(1)+" number by "+Math.abs(n)})})}),emmet.exec(function(e,t){var r=e("actions"),n=e("preferences");n.define("css.closeBraceIndentation","\n","Indentation before closing brace of CSS rule. Some users prefere indented closing brace of CSS rule for better readability. This preference’s value will be automatically inserted before closing brace when user adds newline in newly created CSS rule (e.g. when “Insert formatted linebreak” action will be performed in CSS file). If you’re such user, you may want to write put a value like <code>\\n\\t</code> in this preference."),r.add("insert_formatted_line_break_only",function(r){var i=e("utils"),o=e("resources"),s=e("editorUtils").outputInfo(r),a=r.getCaretPos(),l=i.getNewline();if(t.include(["html","xml","xsl"],s.syntax)){var c=o.getVariable("indentation"),u=e("htmlMatcher").tag(s.content,a);if(u&&!u.innerRange.length())return r.replaceContent(l+c+i.getCaretPlaceholder()+l,a),!0}else if("css"==s.syntax){var d=s.content;if(a&&"{"==d.charAt(a-1)){var g=n.get("css.closeBraceIndentation"),h=(c=o.getVariable("indentation"),"}"==d.charAt(a));if(!h)for(var m,p=a,_=d.length;p<_&&"{"!=(m=d.charAt(p));p++)if("}"==m){g="",h=!0;break}h||(g+="}");var f=l+c+i.getCaretPlaceholder()+g;return r.replaceContent(f,a),!0}}return!1},{hidden:!0}),r.add("insert_formatted_line_break",function(t){if(!r.run("insert_formatted_line_break_only",t)){for(var n,i=e("utils"),o=e("editorUtils").getCurrentLinePadding(t),s=String(t.getContent()),a=t.getCaretPos(),l=s.length,c=i.getNewline(),u="",d=t.getCurrentLineRange().end+1;d<l&&(" "==(n=s.charAt(d))||"\t"==n);d++)u+=n;u.length>o.length?t.replaceContent(c+u,a,a,!0):t.replaceContent(c,a)}return!0},{hidden:!0})}),emmet.exec(function(e,t){e("actions").add("merge_lines",function(t){var r=e("htmlMatcher"),n=e("utils"),i=e("editorUtils").outputInfo(t),o=e("range").create(t.getSelectionRange());if(!o.length()){var s=r.find(i.content,t.getCaretPos());s&&(o=s.outerRange)}if(o.length()){for(var a=o.substring(i.content),l=n.splitByLines(a),c=1;c<l.length;c++)l[c]=l[c].replace(/^\s+/,"");var u=(a=l.join("").replace(/\s{2,}/," ")).length;return a=n.escapeText(a),t.replaceContent(a,o.start,o.end),t.createSelection(o.start,o.start+u),!0}return!1})}),emmet.exec(function(e,t){function r(e,t,r){return r=r||0,t.charAt(r)==e.charAt(0)&&t.substr(r,e.length)==e}e("actions").add("encode_decode_data_url",function(t){var n=String(t.getSelection()),i=t.getCaretPos();if(!n)for(var o,s=String(t.getContent());i-- >=0;){if(r("src=",s,i)){(o=s.substr(i).match(/^(src=(["'])?)([^'"<>\s]+)\1?/))&&(n=o[3],i+=o[1].length);break}if(r("url(",s,i)){(o=s.substr(i).match(/^(url\((['"])?)([^'"\)\s]+)\1?/))&&(n=o[3],i+=o[1].length);break}}return!!n&&(r("data:",n)?function(t,r,n){var i=String(t.prompt("Enter path to file (absolute or relative)"));if(!i)return!1;var o=e("file"),s=o.createPath(t.getFilePath(),i);if(!s)throw"Can't save file";return o.save(s,e("base64").decode(r.replace(/^data\:.+?;.+?,/,""))),t.replaceContent("$0"+i,n,n+r.length),!0}(t,n,i):function(t,r,n){var i=e("file"),o=e("actionUtils"),s=t.getFilePath(),a="application/octet-stream";if(null===s)throw"You should save your file before using this action";var l=i.locateFile(s,r);if(null===l)throw"Can't find "+r+" file";return i.read(l,function(s,c){if(s)throw"Unable to read "+l+": "+s;var u=e("base64").encode(String(c));if(!u)throw"Can't encode file content to base64";u="data:"+(o.mimeTypes[String(i.getExt(l))]||a)+";base64,"+u,t.replaceContent("$0"+u,n,n+r.length)}),!0}(t,n,i))},{label:"Encode\\Decode data:URL image"})}),emmet.exec(function(e,t){function r(t,r,n){var i,o=e("actionUtils");if(r){if(/^data:/.test(r))return i=e("base64").decode(r.replace(/^data\:.+?;.+?,/,"")),n(o.getImageSize(i));var s=e("file"),a=s.locateFile(t.getFilePath(),r);if(null===a)throw"Can't find "+r+" file";s.read(a,function(e,t){if(e)throw"Unable to read "+a+": "+e;t=String(t),n(o.getImageSize(t))})}}e("actions").add("update_image_size",function(n){return t.include(["css","less","scss"],String(n.getSyntax()))?function(n){var i=n.getCaretPos(),o=e("editorUtils").outputInfo(n),s=e("cssEditTree").parseFromPosition(o.content,i,!0);if(s){var a,l=s.itemFromPosition(i,!0);l&&(a=/url\((["']?)(.+?)\1\)/i.exec(l.value()||""))&&r(n,a[2],function(r){if(r){var o=s.range(!0);s.value("width",r.width+"px"),s.value("height",r.height+"px",s.indexOf("width")+1),e("actionUtils").compoundUpdate(n,t.extend(o,{data:s.toString(),caret:i}))}})}}(n):function(n){var i=n.getCaretPos(),o=e("editorUtils").outputInfo(n),s=e("xmlEditTree").parseFromPosition(o.content,i,!0);s&&"img"==(s.name()||"").toLowerCase()&&r(n,s.value("src"),function(r){if(r){var o=s.range(!0);s.value("width",r.width),s.value("height",r.height,s.indexOf("width")+1),e("actionUtils").compoundUpdate(n,t.extend(o,{data:s.toString(),caret:i}))}})}(n),!0})}),emmet.define("cssResolver",function(e,t){var r=null,n={prefix:"emmet",obsolete:!1,transformName:function(e){return"-"+this.prefix+"-"+e},properties:function(){return e="css."+this.prefix+"Properties",r=s.getArray(e),t.each(s.getArray(e+"Addon"),function(e){"-"==e.charAt(0)?r=t.without(r,e.substr(1)):("+"==e.charAt(0)&&(e=e.substr(1)),r.push(e))}),r||[];var e,r},supports:function(e){return t.include(this.properties(),e)}},i={},o="${1};",s=e("preferences");s.define("css.valueSeparator",": ","Defines a symbol that should be placed between CSS property and value when expanding CSS abbreviations."),s.define("css.propertyEnd",";","Defines a symbol that should be placed at the end of CSS property when expanding CSS abbreviations."),s.define("stylus.valueSeparator"," ","Defines a symbol that should be placed between CSS property and value when expanding CSS abbreviations in Stylus dialect."),s.define("stylus.propertyEnd","","Defines a symbol that should be placed at the end of CSS property when expanding CSS abbreviations in Stylus dialect."),s.define("sass.propertyEnd","","Defines a symbol that should be placed at the end of CSS property when expanding CSS abbreviations in SASS dialect."),s.define("css.autoInsertVendorPrefixes",!0,"Automatically generate vendor-prefixed copies of expanded CSS property. By default, Emmet will generate vendor-prefixed properties only when you put dash before abbreviation (e.g. <code>-bxsh</code>). With this option enabled, you don’t need dashes before abbreviations: Emmet will produce vendor-prefixed properties for you.");var a=t.template("A comma-separated list of CSS properties that may have <code><%= vendor %></code> vendor prefix. This list is used to generate a list of prefixed properties when expanding <code>-property</code> abbreviations. Empty list means that all possible CSS values may have <code><%= vendor %></code> prefix."),l=t.template("A comma-separated list of <em>additional</em> CSS properties for <code>css.<%= vendor %>Preperties</code> preference. You should use this list if you want to add or remove a few CSS properties to original set. To add a new property, simply write its name, to remove it, precede property with hyphen.<br>For example, to add <em>foo</em> property and remove <em>border-radius</em> one, the preference value will look like this: <code>foo, -border-radius</code>.");function c(e){var t=e&&e.charCodeAt(0);return e&&"."==e||t>47&&t<58}function u(t){return!~(t=e("utils").trim(t)).indexOf("/*")&&!/[\n\r]/.test(t)&&(!!/^[a-z0-9\-]+\s*\:/i.test(t)&&2==(t=e("tabStops").processText(t,{replaceCarets:!0,tabstop:function(){return"value"}})).split(":").length)}function d(t){return"-"!=t.charAt(0)||/^\-[\.\d]/.test(t)||(t=t.replace(/^\-+/,"")),"#"==t.charAt(0)?function(t){var r=t.replace(/^#+/,"")||"0";if("t"==r.toLowerCase())return"transparent";var n=e("utils").repeatString,i=null;switch(r.length){case 1:i=n(r,6);break;case 2:i=n(r,3);break;case 3:i=r.charAt(0)+r.charAt(0)+r.charAt(1)+r.charAt(1)+r.charAt(2)+r.charAt(2);break;case 4:i=r+r.substr(0,2);break;case 5:i=r+r.charAt(0);break;default:i=r.substr(0,6)}if(s.get("css.color.short")){var o=i.split("");o[0]==o[1]&&o[2]==o[3]&&o[4]==o[5]&&(i=o[0]+o[2]+o[4])}switch(s.get("css.color.case")){case"upper":i=i.toUpperCase();break;case"lower":i=i.toLowerCase()}return"#"+i}(t):g(t)}function g(e){var t=s.getDict("css.keywordAliases");return e in t?t[e]:e}function h(e){return t.include(s.getArray("css.keywords"),g(e))}function m(e,r){var n=i[r];return n||(n=t.find(i,function(e){return e.prefix==r})),n&&n.supports(e)}function p(e,r){t.isString(r)&&(r={prefix:r}),i[e]=t.extend({},n,r)}function _(e,r){if(r){var n=s.get(r+"."+e);if(!t.isUndefined(n))return n}return s.get("css."+e)}function f(r,n,i){return t.isString(r)||(r=r.data),u(r)?(n&&(~r.indexOf(";")?r=r.split(";").join(" !important;"):r+=" !important"),function(t,r){var n=t.indexOf(":");return(t=t.substring(0,n).replace(/\s+$/,"")+_("valueSeparator",r)+e("utils").trim(t.substring(n+1))).replace(/\s*;\s*$/,_("propertyEnd",r))}(r,i)):r}t.each({webkit:"animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-clip, background-composite, background-origin, background-size, border-fit, border-horizontal-spacing, border-image, border-vertical-spacing, box-align, box-direction, box-flex, box-flex-group, box-lines, box-ordinal-group, box-orient, box-pack, box-reflect, box-shadow, color-correction, column-break-after, column-break-before, column-break-inside, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-span, column-width, dashboard-region, font-smoothing, highlight, hyphenate-character, hyphenate-limit-after, hyphenate-limit-before, hyphens, line-box-contain, line-break, line-clamp, locale, margin-before-collapse, margin-after-collapse, marquee-direction, marquee-increment, marquee-repetition, marquee-style, mask-attachment, mask-box-image, mask-box-image-outset, mask-box-image-repeat, mask-box-image-slice, mask-box-image-source, mask-box-image-width, mask-clip, mask-composite, mask-image, mask-origin, mask-position, mask-repeat, mask-size, nbsp-mode, perspective, perspective-origin, rtl-ordering, text-combine, text-decorations-in-effect, text-emphasis-color, text-emphasis-position, text-emphasis-style, text-fill-color, text-orientation, text-security, text-stroke-color, text-stroke-width, transform, transition, transform-origin, transform-style, transition-delay, transition-duration, transition-property, transition-timing-function, user-drag, user-modify, user-select, writing-mode, svg-shadow, box-sizing, border-radius",moz:"animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, appearance, backface-visibility, background-inline-policy, binding, border-bottom-colors, border-image, border-left-colors, border-right-colors, border-top-colors, box-align, box-direction, box-flex, box-ordinal-group, box-orient, box-pack, box-shadow, box-sizing, column-count, column-gap, column-rule-color, column-rule-style, column-rule-width, column-width, float-edge, font-feature-settings, font-language-override, force-broken-image-icon, hyphens, image-region, orient, outline-radius-bottomleft, outline-radius-bottomright, outline-radius-topleft, outline-radius-topright, perspective, perspective-origin, stack-sizing, tab-size, text-blink, text-decoration-color, text-decoration-line, text-decoration-style, text-size-adjust, transform, transform-origin, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-focus, user-input, user-modify, user-select, window-shadow, background-clip, border-radius",ms:"accelerator, backface-visibility, background-position-x, background-position-y, behavior, block-progression, box-align, box-direction, box-flex, box-line-progression, box-lines, box-ordinal-group, box-orient, box-pack, content-zoom-boundary, content-zoom-boundary-max, content-zoom-boundary-min, content-zoom-chaining, content-zoom-snap, content-zoom-snap-points, content-zoom-snap-type, content-zooming, filter, flow-from, flow-into, font-feature-settings, grid-column, grid-column-align, grid-column-span, grid-columns, grid-layer, grid-row, grid-row-align, grid-row-span, grid-rows, high-contrast-adjust, hyphenate-limit-chars, hyphenate-limit-lines, hyphenate-limit-zone, hyphens, ime-mode, interpolation-mode, layout-flow, layout-grid, layout-grid-char, layout-grid-line, layout-grid-mode, layout-grid-type, line-break, overflow-style, perspective, perspective-origin, perspective-origin-x, perspective-origin-y, scroll-boundary, scroll-boundary-bottom, scroll-boundary-left, scroll-boundary-right, scroll-boundary-top, scroll-chaining, scroll-rails, scroll-snap-points-x, scroll-snap-points-y, scroll-snap-type, scroll-snap-x, scroll-snap-y, scrollbar-arrow-color, scrollbar-base-color, scrollbar-darkshadow-color, scrollbar-face-color, scrollbar-highlight-color, scrollbar-shadow-color, scrollbar-track-color, text-align-last, text-autospace, text-justify, text-kashida-space, text-overflow, text-size-adjust, text-underline-position, touch-action, transform, transform-origin, transform-origin-x, transform-origin-y, transform-origin-z, transform-style, transition, transition-delay, transition-duration, transition-property, transition-timing-function, user-select, word-break, word-wrap, wrap-flow, wrap-margin, wrap-through, writing-mode",o:"dashboard-region, animation, animation-delay, animation-direction, animation-duration, animation-fill-mode, animation-iteration-count, animation-name, animation-play-state, animation-timing-function, border-image, link, link-source, object-fit, object-position, tab-size, table-baseline, transform, transform-origin, transition, transition-delay, transition-duration, transition-property, transition-timing-function, accesskey, input-format, input-required, marquee-dir, marquee-loop, marquee-speed, marquee-style"},function(e,t){s.define("css."+t+"Properties",e,a({vendor:t})),s.define("css."+t+"PropertiesAddon","",l({vendor:t}))}),s.define("css.unitlessProperties","z-index, line-height, opacity, font-weight, zoom","The list of properties whose values ​​must not contain units."),s.define("css.intUnit","px","Default unit for integer values"),s.define("css.floatUnit","em","Default unit for float values"),s.define("css.keywords","auto, inherit","A comma-separated list of valid keywords that can be used in CSS abbreviations."),s.define("css.keywordAliases","a:auto, i:inherit, s:solid, da:dashed, do:dotted, t:transparent","A comma-separated list of keyword aliases, used in CSS abbreviation. Each alias should be defined as <code>alias:keyword_name</code>."),s.define("css.unitAliases","e:em, p:%, x:ex, r:rem","A comma-separated list of unit aliases, used in CSS abbreviation. Each alias should be defined as <code>alias:unit_value</code>."),s.define("css.color.short",!0,"Should color values like <code>#ffffff</code> be shortened to <code>#fff</code> after abbreviation with color was expanded."),s.define("css.color.case","keep","Letter case of color values generated by abbreviations with color (like <code>c#0</code>). Possible values are <code>upper</code>, <code>lower</code> and <code>keep</code>."),s.define("css.fuzzySearch",!0,"Enable fuzzy search among CSS snippet names. When enabled, every <em>unknown</em> snippet will be scored against available snippet names (not values or CSS properties!). The match with best score will be used to resolve snippet value. For example, with this preference enabled, the following abbreviations are equal: <code>ov:h</code> == <code>ov-h</code> == <code>o-h</code> == <code>oh</code>"),s.define("css.fuzzySearchMinScore",.3,"The minium score (from 0 to 1) that fuzzy-matched abbreviation should achive. Lower values may produce many false-positive matches, higher values may reduce possible matches."),s.define("css.alignVendor",!1,"If set to <code>true</code>, all generated vendor-prefixed properties will be aligned by real property name."),p("w",{prefix:"webkit"}),p("m",{prefix:"moz"}),p("s",{prefix:"ms"}),p("o",{prefix:"o"});var b=["css","less","sass","scss","stylus"];e("resources").addResolver(function(e,n){return t.include(b,n)&&e.isElement()?r.expandToSnippet(e.abbreviation,n):null});var y=e("expandAbbreviation");return y.addHandler(function(e,r,n){if(!t.include(b,r))return!1;var i=e.getSelectionRange().end,o=y.findAbbreviation(e);if(o){var s=emmet.expandAbbreviation(o,r,n);if(s){var a=i-o.length,l=i;return";"==e.getContent().charAt(i)&&";"==s.charAt(s.length-1)&&l++,e.replaceContent(s,a,l),!0}}return!1}),r={addPrefix:p,supportsPrefix:m,prefixed:function(e,t){return m(e,t)?"-"+t+"-"+e:e},listPrefixes:function(){return t.map(i,function(e){return e.prefix})},getPrefix:function(e){return i[e]},removePrefix:function(e){e in i&&delete i[e]},extractPrefixes:function(e){if("-"!=e.charAt(0))return{property:e,prefixes:null};for(var t,r=1,n=e.length,o=[];r<n;){if("-"==(t=e.charAt(r))){r++;break}if(!(t in i)){o.length=0,r=1;break}o.push(t),r++}return r==n-1&&(r=1,o.length=1),{property:e.substring(r),prefixes:o.length?o:"all"}},findValuesInAbbreviation:function(t,r){r=r||"css";for(var n,i=0,o=t.length,s="";i<o;){if(c(n=t.charAt(i))||"#"==n||"-"==n&&c(t.charAt(i+1))){s=t.substring(i);break}i++}for(var a=t.substring(0,t.length-s.length),l=e("resources"),u=[];~a.indexOf("-")&&!l.findSnippet(r,a);){var d=a.split("-"),g=d.pop();if(!h(g))break;u.unshift(g),a=d.join("-")}return u.join("-")+s},parseValues:function(r){for(var n=e("stringStream").create(r),i=[],o=null;o=n.next();)"#"==o?(n.match(/^t|[0-9a-f]+/i,!0),i.push(n.current())):"-"==o?((h(t.last(i))||n.start&&c(r.charAt(n.start-1)))&&(n.start=n.pos),n.match(/^\-?[0-9]*(\.[0-9]+)?[a-z%\.]*/,!0),i.push(n.current())):(n.match(/^[0-9]*(\.[0-9]*)?[a-z%]*/,!0),i.push(n.current())),n.start=n.pos;return t.map(t.compact(i),d)},extractValues:function(e){var t=this.findValuesInAbbreviation(e);return t?{property:e.substring(0,e.length-t.length).replace(/-$/,""),values:this.parseValues(t)}:{property:e,values:null}},normalizeValue:function(e,r){r=(r||"").toLowerCase();var n=s.getArray("css.unitlessProperties");return e.replace(/^(\-?[0-9\.]+)([a-z]*)$/,function(e,i,o){return o||"0"!=i&&!t.include(n,r)?o?i+(a=o,l=s.getDict("css.unitAliases"),a in l?l[a]:a):i.replace(/\.$/,"")+s.get(~i.indexOf(".")?"css.floatUnit":"css.intUnit"):i;var a,l})},expand:function(r,n,a){a=a||"css";var l,c=e("resources"),d=s.get("css.autoInsertVendorPrefixes");(l=/^(.+)\!$/.test(r))&&(r=RegExp.$1);var g=c.findSnippet(a,r);if(g&&!d)return f(g,l,a);var h=this.extractPrefixes(r),p=this.extractValues(h.property),_=t.extend(h,p);if(g?_.values=null:g=c.findSnippet(a,_.property),!g&&s.get("css.fuzzySearch")&&(g=c.fuzzyFindSnippet(a,_.property,parseFloat(s.get("css.fuzzySearchMinScore")))),g?t.isString(g)||(g=g.data):g=_.property+":"+o,!u(g))return g;var b=this.splitSnippet(g),y=[];!n&&_.values&&(n=t.map(_.values,function(e){return this.normalizeValue(e,b.name)},this).join(" ")+";"),b.value=n||b.value;var x,v="all"==_.prefixes||!_.prefixes&&d?function(e,r){var n=[];return t.each(i,function(t,r){m(e,r)&&n.push(r)}),n.length||r||t.each(i,function(e,t){e.obsolete||n.push(t)}),n}(b.name,d&&"all"!=_.prefixes):_.prefixes,w=[];if(t.each(v,function(e){e in i&&(x=i[e].transformName(b.name),w.push(x),y.push(f(x+":"+b.value,l,a)))}),y.push(f(b.name+":"+b.value,l,a)),w.push(b.name),s.get("css.alignVendor")){var k=e("utils").getStringsPads(w);y=t.map(y,function(e,t){return k[t]+e})}return y},expandToSnippet:function(e,r){var n=this.expand(e,null,r);return t.isArray(n)?n.join("\n"):t.isString(n)?String(n):n.data},splitSnippet:function(t){var r=e("utils");if(-1==(t=r.trim(t)).indexOf(":"))return{name:t,value:o};var n=t.split(":");return{name:r.trim(n.shift()),value:r.trim(n.join(":")).replace(/^(\$\{0\}|\$0)(\s*;?)$/,"${1}$2")}},getSyntaxPreference:_,transformSnippet:f}}),emmet.define("cssGradient",function(e,t){var r=["top","to bottom","0deg"],n=null,i=["css","less","sass","scss","stylus","styl"],o=/\d+deg/i,s=/top|bottom|left|right/i,a=e("preferences");function l(t){return e("utils").trim(t).replace(/\s+/g," ")}function c(e){e=l(e);var t=null;if(e=e.replace(/^(\w+\(.+?\))\s*/,function(e,r){return t=r,""}),!t){var r=e.split(" ");t=r[0],e=r[1]||""}var n={color:t};return e&&e.replace(/^(\-?[\d\.]+)([a-z%]+)?$/,function(e,t,r){n.position=t,~t.indexOf(".")?r="":r||(r="%"),r&&(n.unit=r)}),n}function u(e){if(e=function(e){var r=parseFloat(e);if(!t.isNaN(r))switch(r%360){case 0:return"left";case 90:return"bottom";case 180:return"right";case 240:return"top"}return e}(e),o.test(e))throw"The direction is an angle that can’t be converted.";var r=function(t){return~e.indexOf(t)?"100%":"0"};return r("right")+" "+r("bottom")+", "+r("left")+" "+r("top")}function d(e){var r=a.getArray("css.gradient.prefixes"),n=r?t.map(r,function(t){return"-"+t+"-"+e}):[];return n.push(e),n}function g(r,i){var o=[],s=e("cssResolver");return a.get("css.gradient.fallback")&&~i.toLowerCase().indexOf("background")&&o.push({name:"background-color",value:"${1:"+r.colorStops[0].color+"}"}),t.each(a.getArray("css.gradient.prefixes"),function(e){var t=s.prefixed(i,e);if("webkit"==e&&a.get("css.gradient.oldWebkit"))try{o.push({name:t,value:n.oldWebkitLinearGradient(r)})}catch(e){}o.push({name:t,value:n.toString(r,e)})}),o.sort(function(e,t){return t.name.length-e.name.length})}function h(e){var r=e.value(),i=null,o=t.find(e.valueParts(),function(e){return i=n.parse(e.substring(r))});return o&&i?{gradient:i,valueRange:o}:null}function m(r,n){var i=null,o=e("cssEditTree").parseFromPosition(r,n,!0);return o&&((i=o.itemFromPosition(n,!0))||(i=t.find(o.list(),function(e){return e.range(!0).end==n}))),{rule:o,property:i}}return a.define("css.gradient.prefixes","webkit, moz, o","A comma-separated list of vendor-prefixes for which values should be generated."),a.define("css.gradient.oldWebkit",!0,"Generate gradient definition for old Webkit implementations"),a.define("css.gradient.omitDefaultDirection",!0,"Do not output default direction definition in generated gradients."),a.define("css.gradient.defaultProperty","background-image","When gradient expanded outside CSS value context, it will produce properties with this name."),a.define("css.gradient.fallback",!1,"With this option enabled, CSS gradient generator will produce <code>background-color</code> property with gradient first color as fallback for old browsers."),e("expandAbbreviation").addHandler(function(r,o,s){var l=e("editorUtils").outputInfo(r,o,s);if(!t.include(i,l.syntax))return!1;var c=r.getCaretPos(),u=l.content,p=m(u,c);if(p.property){var _=h(p.property);if(_){var f=p.rule.options.offset||0,b=f+p.rule.toString().length;if(/[\n\r]/.test(p.property.value())){var y=p.property.valueRange(!0).start+_.valueRange.end,x=m(u=e("utils").replaceSubstring(u,";",y),c);x.property&&(_=h(x.property),p=x)}p.property.end(";");var v=function(r,n){var i=e("resources"),o=e("preferences"),s=i.findSnippet(n,r);if(!s&&o.get("css.fuzzySearch")&&(s=i.fuzzyFindSnippet(n,r,parseFloat(o.get("css.fuzzySearchMinScore")))),s)return t.isString(s)||(s=s.data),e("cssResolver").splitSnippet(s).name}(p.property.name(),o);return v&&p.property.name(v),function(r,i,o){var s=r.parent,a=e("utils"),l=e("preferences").get("css.alignVendor"),c=r.styleSeparator,u=r.styleBefore;if(t.each(s.getAll(d(r.name())),function(e){e!=r&&/gradient/i.test(e.value())&&(e.styleSeparator.length<c.length&&(c=e.styleSeparator),e.styleBefore.length<u.length&&(u=e.styleBefore),s.remove(e))}),l){if(u!=r.styleBefore){var h=r.fullRange();s._updateSource(u,h.start,h.start+r.styleBefore.length),r.styleBefore=u}c!=r.styleSeparator&&(s._updateSource(c,r.nameRange().end,r.valueRange().start),r.styleSeparator=c)}var m,p=r.value();o||(o=e("range").create(0,r.value())),r.value((m=n.toString(i),a.replaceSubstring(p,m,o)+"${2}"));var _=g(i,r.name());if(l){var f=t.pluck(_,"value"),b=t.pluck(_,"name");f.push(r.value()),b.push(r.name());var y=a.getStringsPads(t.map(f,function(e){return e.substring(0,e.indexOf("("))})),x=a.getStringsPads(b);r.name(t.last(x)+r.name()),t.each(_,function(e,t){e.name=x[t]+e.name,e.value=y[t]+e.value}),r.value(t.last(y)+r.value())}t.each(_,function(e){s.add(e.name,e.value,s.indexOf(r))})}(p.property,_.gradient,_.valueRange),r.replaceContent(p.rule.toString(),f,b,!0),!0}}return function(r,i){var o=a.get("css.gradient.defaultProperty");if(!o)return!1;var s=String(r.getContent()),l=e("range").create(r.getCurrentLineRange()),c=l.substring(s).replace(/^\s+/,function(e){return l.start+=e.length,""}).replace(/\s+$/,function(e){return l.end-=e.length,""}),u=e("cssResolver"),d=n.parse(c);if(d){var h=g(d,o);h.push({name:o,value:n.toString(d)+"${2}"});var m=u.getSyntaxPreference("valueSeparator",i),p=u.getSyntaxPreference("propertyEnd",i);if(e("preferences").get("css.alignVendor")){var _=e("utils").getStringsPads(t.map(h,function(e){return e.value.substring(0,e.value.indexOf("("))}));t.each(h,function(e,t){e.value=_[t]+e.value})}return h=t.map(h,function(e){return e.name+m+e.value+p}),r.replaceContent(h.join("\n"),l.start,l.end),!0}return!1}(r,o)}),e("reflectCSSValue").addHandler(function(r){var i=e("utils"),o=h(r);if(!o)return!1;var s=r.value(),a=function(e){return i.replaceSubstring(s,e,o.valueRange)};return t.each(r.parent.getAll(d(r.name())),function(e){if(e!==r){var t=e.value().match(/^\s*(\-([a-z]+)\-)?linear\-gradient/);t?e.value(a(n.toString(o.gradient,t[2]||""))):(t=e.value().match(/\s*\-webkit\-gradient/))&&e.value(a(n.oldWebkitLinearGradient(o.gradient)))}}),!0}),n={parse:function(n){var i=null;return e("utils").trim(n).replace(/^([\w\-]+)\((.+?)\)$/,function(n,a,u){return"linear-gradient"==(a=a.toLowerCase().replace(/^\-[a-z]+\-/,""))||"lg"==a?(i=function(n){for(var i,a=r[0],u=e("stringStream").create(e("utils").trim(n)),d=[];i=u.next();)","==u.peek()?(d.push(u.current()),u.next(),u.eatSpace(),u.start=u.pos):"("==i&&u.skipTo(")");return d.push(u.current()),(d=t.compact(t.map(d,l))).length?((o.test(d[0])||s.test(d[0]))&&(a=d.shift()),{type:"linear",direction:a,colorStops:t.map(d,c)}):null}(u),""):n}),i},oldWebkitLinearGradient:function(e){if(t.isString(e)&&(e=this.parse(e)),!e)return null;var r=t.map(e.colorStops,t.clone);return t.each(r,function(e){if("position"in e){if(!~e.position.indexOf(".")&&"%"!=e.unit)throw"Can't convert color stop '"+(e.position+(e.unit||""))+"'";e.position=parseFloat(e.position)/("%"==e.unit?100:1)}}),function(e){var r=0;t.each(e,function(n,i){if(!i)return n.position=n.position||0;if(i!=e.length-1||"position"in n||(n.position=1),"position"in n){var o=e[r].position||0,s=(n.position-o)/(i-r);t.each(e.slice(r,i),function(e,t){e.position=o+s*t}),r=i}})}(r),r=t.map(r,function(e,t){return e.position||t?1==e.position&&t==r.length-1?"to("+e.color+")":"color-stop("+e.position.toFixed(2).replace(/\.?0+$/,"")+", "+e.color+")":"from("+e.color+")"}),"-webkit-gradient(linear, "+u(e.direction)+", "+r.join(", ")+")"},toString:function(e,n){if("linear"==e.type){var i=(n?"-"+n+"-":"")+"linear-gradient",o=t.map(e.colorStops,function(e){return e.color+("position"in e?" "+e.position+(e.unit||""):"")});return!e.direction||a.get("css.gradient.omitDefaultDirection")&&t.include(r,e.direction)||o.unshift(e.direction),i+"("+o.join(", ")+")"}}}}),emmet.exec(function(e,t){var r=e("handlerList").create(),n=e("resources");t.extend(n,{addGenerator:function(e,n,i){t.isString(e)&&(e=new RegExp(e)),r.add(function(t,r){var i;return(i=e.exec(t.name()))?n(i,t,r):null},i)}}),n.addResolver(function(e,n){return r.exec(null,t.toArray(arguments))})}),emmet.define("tagName",function(e,t){var r={empty:[],blockLevel:"address,applet,blockquote,button,center,dd,del,dir,div,dl,dt,fieldset,form,frameset,hr,iframe,ins,isindex,li,link,map,menu,noframes,noscript,object,ol,p,pre,script,table,tbody,td,tfoot,th,thead,tr,ul,h1,h2,h3,h4,h5,h6".split(","),inlineLevel:"a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,select,small,span,strike,strong,sub,sup,textarea,tt,u,var".split(",")},n={p:"span",ul:"li",ol:"li",table:"tr",tr:"td",tbody:"tr",thead:"tr",tfoot:"tr",colgroup:"col",select:"option",optgroup:"option",audio:"source",video:"source",object:"param",map:"area"};return{resolve:function(e){return(e=(e||"").toLowerCase())in n?this.getMapping(e):this.isInlineLevel(e)?"span":"div"},getMapping:function(e){return n[e.toLowerCase()]},isInlineLevel:function(e){return this.isTypeOf(e,"inlineLevel")},isBlockLevel:function(e){return this.isTypeOf(e,"blockLevel")},isEmptyElement:function(e){return this.isTypeOf(e,"empty")},isTypeOf:function(e,n){return t.include(r[n],e)},addMapping:function(e,t){n[e]=t},removeMapping:function(e){e in n&&delete n[e]},addElementToCollection:function(e,n){r[n]||(r[n]=[]);var i=this.getCollection(n);t.include(i,e)||i.push(e)},removeElementFromCollection:function(e,n){n in r&&(r[n]=t.without(this.getCollection(n),e))},getCollection:function(e){return r[e]}}}),emmet.exec(function(e,t){var r=e("preferences");r.define("bem.elementSeparator","__","Class name’s element separator."),r.define("bem.modifierSeparator","_","Class name’s modifier separator."),r.define("bem.shortElementPrefix","-","Symbol for describing short “block-element” notation. Class names prefixed with this symbol will be treated as element name for parent‘s block name. Each symbol instance traverses one level up in parsed tree for block name lookup. Empty value will disable short notation.");var n=!1;function i(){return{element:r.get("bem.elementSeparator"),modifier:r.get("bem.modifierSeparator")}}function o(n){if(e("abbreviationUtils").isSnippet(n))return n;n.__bem={block:"",element:"",modifier:""};var o=function(t){var n=e("utils");t=(" "+(t||"")+" ").replace(/\s+/g," ");var o=r.get("bem.shortElementPrefix");if(o){var s=new RegExp("\\s("+n.escapeForRegexp(o)+"+)","g");t=t.replace(s,function(e,t){return" "+n.repeatString(i().element,t.length)})}return n.trim(t)}(n.attribute("class")).split(" "),a=/^[a-z]\-/i;return n.__bem.block=t.find(o,function(e){return a.test(e)}),n.__bem.block||(a=/^[a-z]/i,n.__bem.block=t.find(o,function(e){return a.test(e)})||""),o=t.chain(o).map(function(e){return function(e,t){e=s(e,t,"element"),e=s(e,t,"modifier");var r="",n="",o="",a=i();if(~e.indexOf(a.element)){var l=e.split(a.element),c=l[1].split(a.modifier);r=l[0],n=c.shift(),o=c.join(a.modifier)}else if(~e.indexOf(a.modifier)){var u=e.split(a.modifier);r=u.shift(),o=u.join(a.modifier)}if(r||n||o){r||(r=t.__bem.block);var d=r,g=[];return n?(d+=a.element+n,g.push(d)):g.push(d),o&&g.push(d+a.modifier+o),t.__bem.block=r,t.__bem.element=n,t.__bem.modifier=o,g}return e}(e,n)}).flatten().uniq().value().join(" "),o&&n.attribute("class",o),n}function s(e,t,r){var n=i(),o=new RegExp("^("+n[r]+")+","g");if(o.test(e)){for(var s=0,a=e.replace(o,function(e,t){return s=e.length/n[r].length,""}),l=t;l.parent&&s--;)l=l.parent;if(l&&l.__bem||(l=t),l&&l.__bem){var c=l.__bem.block;return"modifier"==r&&l.__bem.element&&(c+=n.element+l.__bem.element),c+n[r]+a}}return e}function a(r,i){r.name&&o(r);var s=e("abbreviationUtils");return t.each(r.children,function(e){a(e,i),!s.isSnippet(e)&&e.start&&(n=!0)}),r}e("filters").add("bem",function(t,r){return n=!1,t=a(t,r),n&&(t=e("filters").apply(t,"html",r)),t})}),emmet.exec(function(e,t){var r=e("preferences");function n(i,o,s){var a=e("abbreviationUtils");return t.each(i.children,function(i){a.isBlock(i)&&function(n,i,o){var s=e("utils"),a=r.get("filter.commentTrigger");if("*"!=a&&!t.find(a.split(","),function(e){return!!n.attribute(s.trim(e))}))return;var l={node:n,name:n.name(),padding:n.parent?n.parent.padding:"",attr:function(e,t,r){var i=n.attribute(e);return i?(t||"")+i+(r||""):""}},c=s.normalizeNewline(i?i(l):""),u=s.normalizeNewline(o?o(l):"");n.start=n.start.replace(/</,c+"<"),n.end=n.end.replace(/>/,">"+u)}(i,o,s),n(i,o,s)}),i}r.define("filter.commentAfter",'\n\x3c!-- /<%= attr("id", "#") %><%= attr("class", ".") %> --\x3e',"A definition of comment that should be placed <i>after</i> matched element when <code>comment</code> filter is applied. This definition is an ERB-style template passed to <code>_.template()</code> function (see Underscore.js docs for details). In template context, the following properties and functions are availabe:\n<ul><li><code>attr(name, before, after)</code> – a function that outputsspecified attribute value concatenated with <code>before</code> and <code>after</code> strings. If attribute doesn't exists, the empty string will be returned.</li><li><code>node</code> – current node (instance of <code>AbbreviationNode</code>)</li><li><code>name</code> – name of current tag</li><li><code>padding</code> – current string padding, can be used for formatting</li></ul>"),r.define("filter.commentBefore","","A definition of comment that should be placed <i>before</i> matched element when <code>comment</code> filter is applied. For more info, read description of <code>filter.commentAfter</code> property"),r.define("filter.commentTrigger","id, class","A comma-separated list of attribute names that should exist in abbreviatoin where comment should be added. If you wish to add comment for every element, set this option to <code>*</code>"),e("filters").add("c",function(e){return n(e,t.template(r.get("filter.commentBefore")),t.template(r.get("filter.commentAfter")))})}),emmet.exec(function(e,t){var r={"<":"<",">":">","&":"&"};function n(e){return e.replace(/([<>&])/g,function(e,t){return r[t]})}e("filters").add("e",function e(r){return t.each(r.children,function(t){t.start=n(t.start),t.end=n(t.end),t.content=n(t.content),e(t)}),r})}),emmet.exec(function(e,t){var r=e("preferences");function n(e){return e.parent&&!e.parent.parent&&!e.index()}function i(t,r){var n=e("abbreviationUtils");return!(!0!==r.tag_nl&&!n.isBlock(t))||!(!t.parent||!r.inline_break)&&o(t.parent,r)}function o(r,n){var i=0,o=e("abbreviationUtils");return!!t.find(r.children,function(e){if(e.isTextNode()||!o.isInline(e)?i=0:o.isInline(e)&&i++,i>=n.inline_break)return!0})}function s(s,a,l){s.start=s.end="%s";var c,u=e("utils"),d=e("abbreviationUtils"),g=d.isUnary(s),h=u.getNewline(),m=(c=s,t.include(r.getArray("format.noIndentTags")||[],c.name())?"":e("resources").getVariable("indentation"));if(!1!==a.tag_nl){var p=!0===a.tag_nl&&(a.tag_nl_leaf||s.children.length);p||(p=t.include(r.getArray("format.forceIndentationForTags")||[],s.name())),s.isTextNode()||(i(s,a)?(n(s)||d.isSnippet(s.parent)&&!s.index()||(s.start=h+s.start),(d.hasBlockChildren(s)||function(e,t){return e.children.length&&i(e.children[0],t)}(s,a)||p&&!g)&&(s.end=h+s.end),(d.hasTagsInContent(s)||p&&!s.children.length&&!g)&&(s.start+=h+m)):d.isInline(s)&&function(t){return t.parent&&e("abbreviationUtils").hasBlockChildren(t.parent)}(s)&&!n(s)?s.start=h+s.start:d.isInline(s)&&function(r,n){var i=e("abbreviationUtils");return!!t.any(r.children,function(e){return!i.isSnippet(e)&&!i.isInline(e)})||o(r,n)}(s,a)&&(s.end=h+s.end),s.padding=m)}return s}r.define("format.noIndentTags","html","A comma-separated list of tag names that should not get inner indentation."),r.define("format.forceIndentationForTags","body","A comma-separated list of tag names that should <em>always</em> get inner indentation."),e("filters").add("_format",function r(o,a,l){l=l||0;var c=e("abbreviationUtils");return t.each(o.children,function(t){c.isSnippet(t)?function(t,r){t.start=t.end="",!n(t)&&!1!==r.tag_nl&&i(t,r)&&(!function(e){return!e.parent}(t.parent)&&e("abbreviationUtils").isInline(t.parent)||(t.start=e("utils").getNewline()+t.start))}(t,a):s(t,a),r(t,a,l+1)}),o})}),emmet.exec(function(e,t){function r(r,n){var i="",o=[],s=n.attributeQuote(),a=n.cursor();return t.each(r.attributeList(),function(t){var r,l=n.attributeName(t.name);switch(l.toLowerCase()){case"id":i+="#"+(t.value||a);break;case"class":i+="."+(r=t.value||a,e("utils").trim(r).replace(/\s+/g,"."));break;default:o.push(":"+l+" => "+s+(t.value||a)+s)}}),o.length&&(i+="{"+o.join(", ")+"}"),i}e("filters").add("haml",function n(i,o,s){s=s||0;var a=e("abbreviationUtils");return s||(i=e("filters").apply(i,"_format",o)),t.each(i.children,function(t){a.isSnippet(t)||function(t,n){if(!t.parent)return t;var i,o=e("abbreviationUtils"),s=e("utils"),a=r(t,n),l=n.cursor(),c=o.isUnary(t),u=n.self_closing_tag&&c?"/":"",d="%"+n.tagName(t.name());"%div"==d.toLowerCase()&&a&&-1==a.indexOf("{")&&(d=""),t.end="",i=d+a+u+" ",t.start=s.replaceSubstring(t.start,i,t.start.indexOf("%s"),"%s"),t.children.length||c||(t.start+=l)}(t,o),n(t,o,s+1)}),i})}),emmet.exec(function(e,t){function r(r,n,i){if(!r.parent)return r;var o=e("abbreviationUtils"),s=e("utils"),a=function(e,r){var n=r.attributeQuote(),i=r.cursor();return t.map(e.attributeList(),function(e){return" "+r.attributeName(e.name)+"="+n+(e.value||i)+n}).join("")}(r,n),l=n.cursor(),c=o.isUnary(r),u="",d="";if(!r.isTextNode()){var g=n.tagName(r.name());c?(u="<"+g+a+n.selfClosing()+">",r.end=""):(u="<"+g+a+">",d="</"+g+">")}var h="%s";return r.start=s.replaceSubstring(r.start,u,r.start.indexOf(h),h),r.end=s.replaceSubstring(r.end,d,r.end.indexOf(h),h),r.children.length||c||~r.content.indexOf(l)||e("tabStops").extract(r.content).tabstops.length||(r.start+=l),r}e("filters").add("html",function n(i,o,s){s=s||0;var a=e("abbreviationUtils");return s||(i=e("filters").apply(i,"_format",o)),t.each(i.children,function(e){a.isSnippet(e)||r(e,o),n(e,o,s+1)}),i})}),emmet.exec(function(e,t){var r=/^\s+/,n=/[\n\r]/g;e("filters").add("s",function i(o,s,a){var l=e("abbreviationUtils");return t.each(o.children,function(e){l.isSnippet(e)||(e.start=e.start.replace(r,""),e.end=e.end.replace(r,"")),e.start=e.start.replace(n,""),e.end=e.end.replace(n,""),e.content=e.content.replace(n,""),i(e)}),o})}),emmet.exec(function(e,t){function r(e,n){return t.each(e.children,function(e){e.content&&(e.content=e.content.replace(n,"")),r(e,n)}),e}e("preferences").define("filter.trimRegexp","[\\s|\\u00a0]*[\\d|#|\\-|*|\\u2022]+\\.?\\s*","Regular expression used to remove list markers (numbers, dashes, bullets, etc.) in <code>t</code> (trim) filter. The trim filter is useful for wrapping with abbreviation lists, pased from other documents (for example, Word documents)."),e("filters").add("t",function(t){return r(t,new RegExp(e("preferences").get("filter.trimRegexp")))})}),emmet.exec(function(e,t){var r={"xsl:variable":1,"xsl:with-param":1};e("filters").add("xsl",function n(i){var o=e("abbreviationUtils");return t.each(i.children,function(e){var t;!o.isSnippet(e)&&(e.name()||"").toLowerCase()in r&&e.children.length&&((t=e).start=t.start.replace(/\s+select\s*=\s*(['"]).*?\1/,"")),n(e)}),i})}),emmet.define("lorem",function(e,t){var r={en:{common:["lorem","ipsum","dolor","sit","amet","consectetur","adipisicing","elit"],words:["exercitationem","perferendis","perspiciatis","laborum","eveniet","sunt","iure","nam","nobis","eum","cum","officiis","excepturi","odio","consectetur","quasi","aut","quisquam","vel","eligendi","itaque","non","odit","tempore","quaerat","dignissimos","facilis","neque","nihil","expedita","vitae","vero","ipsum","nisi","animi","cumque","pariatur","velit","modi","natus","iusto","eaque","sequi","illo","sed","ex","et","voluptatibus","tempora","veritatis","ratione","assumenda","incidunt","nostrum","placeat","aliquid","fuga","provident","praesentium","rem","necessitatibus","suscipit","adipisci","quidem","possimus","voluptas","debitis","sint","accusantium","unde","sapiente","voluptate","qui","aspernatur","laudantium","soluta","amet","quo","aliquam","saepe","culpa","libero","ipsa","dicta","reiciendis","nesciunt","doloribus","autem","impedit","minima","maiores","repudiandae","ipsam","obcaecati","ullam","enim","totam","delectus","ducimus","quis","voluptates","dolores","molestiae","harum","dolorem","quia","voluptatem","molestias","magni","distinctio","omnis","illum","dolorum","voluptatum","ea","quas","quam","corporis","quae","blanditiis","atque","deserunt","laboriosam","earum","consequuntur","hic","cupiditate","quibusdam","accusamus","ut","rerum","error","minus","eius","ab","ad","nemo","fugit","officia","at","in","id","quos","reprehenderit","numquam","iste","fugiat","sit","inventore","beatae","repellendus","magnam","recusandae","quod","explicabo","doloremque","aperiam","consequatur","asperiores","commodi","optio","dolor","labore","temporibus","repellat","veniam","architecto","est","esse","mollitia","nulla","a","similique","eos","alias","dolore","tenetur","deleniti","porro","facere","maxime","corrupti"]},ru:{common:["далеко-далеко","за","словесными","горами","в стране","гласных","и согласных","живут","рыбные","тексты"],words:["вдали","от всех","они","буквенных","домах","на берегу","семантика","большого","языкового","океана","маленький","ручеек","даль","журчит","по всей","обеспечивает","ее","всеми","необходимыми","правилами","эта","парадигматическая","страна","которой","жаренные","предложения","залетают","прямо","рот","даже","всемогущая","пунктуация","не","имеет","власти","над","рыбными","текстами","ведущими","безорфографичный","образ","жизни","однажды","одна","маленькая","строчка","рыбного","текста","имени","lorem","ipsum","решила","выйти","большой","мир","грамматики","великий","оксмокс","предупреждал","о","злых","запятых","диких","знаках","вопроса","коварных","точках","запятой","но","текст","дал","сбить","себя","толку","он","собрал","семь","своих","заглавных","букв","подпоясал","инициал","за","пояс","пустился","дорогу","взобравшись","первую","вершину","курсивных","гор","бросил","последний","взгляд","назад","силуэт","своего","родного","города","буквоград","заголовок","деревни","алфавит","подзаголовок","своего","переулка","грустный","реторический","вопрос","скатился","его","щеке","продолжил","свой","путь","дороге","встретил","рукопись","она","предупредила","моей","все","переписывается","несколько","раз","единственное","что","меня","осталось","это","приставка","возвращайся","ты","лучше","свою","безопасную","страну","послушавшись","рукописи","наш","продолжил","свой","путь","вскоре","ему","повстречался","коварный","составитель","рекламных","текстов","напоивший","языком","речью","заманивший","свое","агенство","которое","использовало","снова","снова","своих","проектах","если","переписали","то","живет","там","до","сих","пор"]}},n=e("preferences");function i(e,t){return Math.round(Math.random()*(t-e)+e)}function o(e,r){for(var n=e.length,o=Math.min(n,r),s=[];s.length<o;){var a=i(0,n-1);t.include(s,a)||s.push(a)}return t.map(s,function(t){return e[t]})}function s(e,r){return e.length&&(e[0]=e[0].charAt(0).toUpperCase()+e[0].substring(1)),e.join(" ")+(r||(n="?!...",t.isString(n)?n.charAt(i(0,n.length-1)):n[i(0,n.length-1)]));var n}function a(e){var r=e.length,n=0;n=r>3&&r<=6?i(0,1):r>6&&r<=12?i(0,2):i(1,4),t.each(t.range(n),function(t){t<e.length-1&&(e[t]+=",")})}return n.define("lorem.defaultLang","en"),e("abbreviationParser").addPreprocessor(function(e,t){var l,c=/^(?:lorem|lipsum)([a-z]{2})?(\d*)$/i;e.findAll(function(e){if(e._name&&(l=e._name.match(c))){var t=l[2]||30,u=l[1]||n.get("lorem.defaultLang")||"en";e._name="",e.data("forceNameResolving",e.isRepeating()||e.attributeList().length),e.data("pasteOverwrites",!0),e.data("paste",function(e,n){return function(e,t,n){var l=r[e];if(!l)return"";var c,u=[],d=0;t=parseInt(t,10),n&&l.common&&((c=l.common.slice(0,t)).length>5&&(c[4]+=","),d+=c.length,u.push(s(c,".")));for(;d<t;)d+=(c=o(l.words,Math.min(i(3,12)*i(1,5),t-d))).length,a(c),u.push(s(c));return u.join(" ")}(u,t,!e)})}})}),{addLang:function(e,n){t.isString(n)?n={words:t.compact(n.split(" "))}:t.isArray(n)&&(n={words:n}),r[e]=n}}}),emmet.define("bootstrap",function(e,t){var r=e("resources"),n=r.getVocabulary("user")||{};r.setVocabulary(e("utils").deepMerge(n,{variables:{lang:"en",locale:"en-US",charset:"UTF-8",indentation:"\t",newline:"\n"},css:{filters:"html",snippets:{"@i":"@import url(|);","@import":"@import url(|);","@m":"@media ${1:screen} {\n\t|\n}","@media":"@media ${1:screen} {\n\t|\n}","@f":"@font-face {\n\tfont-family:|;\n\tsrc:url(|);\n}","@f+":"@font-face {\n\tfont-family: '${1:FontName}';\n\tsrc: url('${2:FileName}.eot');\n\tsrc: url('${2:FileName}.eot?#iefix') format('embedded-opentype'),\n\t\t url('${2:FileName}.woff') format('woff'),\n\t\t url('${2:FileName}.ttf') format('truetype'),\n\t\t url('${2:FileName}.svg#${1:FontName}') format('svg');\n\tfont-style: ${3:normal};\n\tfont-weight: ${4:normal};\n}","@kf":"@-webkit-keyframes ${1:identifier} {\n\t${2:from} { ${3} }${6}\n\t${4:to} { ${5} }\n}\n@-o-keyframes ${1:identifier} {\n\t${2:from} { ${3} }${6}\n\t${4:to} { ${5} }\n}\n@-moz-keyframes ${1:identifier} {\n\t${2:from} { ${3} }${6}\n\t${4:to} { ${5} }\n}\n@keyframes ${1:identifier} {\n\t${2:from} { ${3} }${6}\n\t${4:to} { ${5} }\n}",anim:"animation:|;","anim-":"animation:${1:name} ${2:duration} ${3:timing-function} ${4:delay} ${5:iteration-count} ${6:direction} ${7:fill-mode};",animdel:"animation-delay:${1:time};",animdir:"animation-direction:${1:normal};","animdir:n":"animation-direction:normal;","animdir:r":"animation-direction:reverse;","animdir:a":"animation-direction:alternate;","animdir:ar":"animation-direction:alternate-reverse;",animdur:"animation-duration:${1:0}s;",animfm:"animation-fill-mode:${1:both};","animfm:f":"animation-fill-mode:forwards;","animfm:b":"animation-fill-mode:backwards;","animfm:bt":"animation-fill-mode:both;","animfm:bh":"animation-fill-mode:both;",animic:"animation-iteration-count:${1:1};","animic:i":"animation-iteration-count:infinite;",animn:"animation-name:${1:none};",animps:"animation-play-state:${1:running};","animps:p":"animation-play-state:paused;","animps:r":"animation-play-state:running;",animtf:"animation-timing-function:${1:linear};","animtf:e":"animation-timing-function:ease;","animtf:ei":"animation-timing-function:ease-in;","animtf:eo":"animation-timing-function:ease-out;","animtf:eio":"animation-timing-function:ease-in-out;","animtf:l":"animation-timing-function:linear;","animtf:cb":"animation-timing-function:cubic-bezier(${1:0.1}, ${2:0.7}, ${3:1.0}, ${3:0.1});",ap:"appearance:${none};","!":"!important",pos:"position:${1:relative};","pos:s":"position:static;","pos:a":"position:absolute;","pos:r":"position:relative;","pos:f":"position:fixed;",t:"top:|;","t:a":"top:auto;",r:"right:|;","r:a":"right:auto;",b:"bottom:|;","b:a":"bottom:auto;",l:"left:|;","l:a":"left:auto;",z:"z-index:|;","z:a":"z-index:auto;",fl:"float:${1:left};","fl:n":"float:none;","fl:l":"float:left;","fl:r":"float:right;",cl:"clear:${1:both};","cl:n":"clear:none;","cl:l":"clear:left;","cl:r":"clear:right;","cl:b":"clear:both;",colm:"columns:|;",colmc:"column-count:|;",colmf:"column-fill:|;",colmg:"column-gap:|;",colmr:"column-rule:|;",colmrc:"column-rule-color:|;",colmrs:"column-rule-style:|;",colmrw:"column-rule-width:|;",colms:"column-span:|;",colmw:"column-width:|;",d:"display:${1:block};","d:n":"display:none;","d:b":"display:block;","d:i":"display:inline;","d:ib":"display:inline-block;","d:ib+":"display: inline-block;\n*display: inline;\n*zoom: 1;","d:li":"display:list-item;","d:ri":"display:run-in;","d:cp":"display:compact;","d:tb":"display:table;","d:itb":"display:inline-table;","d:tbcp":"display:table-caption;","d:tbcl":"display:table-column;","d:tbclg":"display:table-column-group;","d:tbhg":"display:table-header-group;","d:tbfg":"display:table-footer-group;","d:tbr":"display:table-row;","d:tbrg":"display:table-row-group;","d:tbc":"display:table-cell;","d:rb":"display:ruby;","d:rbb":"display:ruby-base;","d:rbbg":"display:ruby-base-group;","d:rbt":"display:ruby-text;","d:rbtg":"display:ruby-text-group;",v:"visibility:${1:hidden};","v:v":"visibility:visible;","v:h":"visibility:hidden;","v:c":"visibility:collapse;",ov:"overflow:${1:hidden};","ov:v":"overflow:visible;","ov:h":"overflow:hidden;","ov:s":"overflow:scroll;","ov:a":"overflow:auto;",ovx:"overflow-x:${1:hidden};","ovx:v":"overflow-x:visible;","ovx:h":"overflow-x:hidden;","ovx:s":"overflow-x:scroll;","ovx:a":"overflow-x:auto;",ovy:"overflow-y:${1:hidden};","ovy:v":"overflow-y:visible;","ovy:h":"overflow-y:hidden;","ovy:s":"overflow-y:scroll;","ovy:a":"overflow-y:auto;",ovs:"overflow-style:${1:scrollbar};","ovs:a":"overflow-style:auto;","ovs:s":"overflow-style:scrollbar;","ovs:p":"overflow-style:panner;","ovs:m":"overflow-style:move;","ovs:mq":"overflow-style:marquee;",zoo:"zoom:1;",zm:"zoom:1;",cp:"clip:|;","cp:a":"clip:auto;","cp:r":"clip:rect(${1:top} ${2:right} ${3:bottom} ${4:left});",bxz:"box-sizing:${1:border-box};","bxz:cb":"box-sizing:content-box;","bxz:bb":"box-sizing:border-box;",bxsh:"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:color};","bxsh:r":"box-shadow:${1:inset }${2:hoff} ${3:voff} ${4:blur} ${5:spread }rgb(${6:0}, ${7:0}, ${8:0});","bxsh:ra":"box-shadow:${1:inset }${2:h} ${3:v} ${4:blur} ${5:spread }rgba(${6:0}, ${7:0}, ${8:0}, .${9:5});","bxsh:n":"box-shadow:none;",m:"margin:|;","m:a":"margin:auto;",mt:"margin-top:|;","mt:a":"margin-top:auto;",mr:"margin-right:|;","mr:a":"margin-right:auto;",mb:"margin-bottom:|;","mb:a":"margin-bottom:auto;",ml:"margin-left:|;","ml:a":"margin-left:auto;",p:"padding:|;",pt:"padding-top:|;",pr:"padding-right:|;",pb:"padding-bottom:|;",pl:"padding-left:|;",w:"width:|;","w:a":"width:auto;",h:"height:|;","h:a":"height:auto;",maw:"max-width:|;","maw:n":"max-width:none;",mah:"max-height:|;","mah:n":"max-height:none;",miw:"min-width:|;",mih:"min-height:|;",mar:"max-resolution:${1:res};",mir:"min-resolution:${1:res};",ori:"orientation:|;","ori:l":"orientation:landscape;","ori:p":"orientation:portrait;",ol:"outline:|;","ol:n":"outline:none;",olo:"outline-offset:|;",olw:"outline-width:|;","olw:tn":"outline-width:thin;","olw:m":"outline-width:medium;","olw:tc":"outline-width:thick;",ols:"outline-style:|;","ols:n":"outline-style:none;","ols:dt":"outline-style:dotted;","ols:ds":"outline-style:dashed;","ols:s":"outline-style:solid;","ols:db":"outline-style:double;","ols:g":"outline-style:groove;","ols:r":"outline-style:ridge;","ols:i":"outline-style:inset;","ols:o":"outline-style:outset;",olc:"outline-color:#${1:000};","olc:i":"outline-color:invert;",bd:"border:|;","bd+":"border:${1:1px} ${2:solid} ${3:#000};","bd:n":"border:none;",bdbk:"border-break:${1:close};","bdbk:c":"border-break:close;",bdcl:"border-collapse:|;","bdcl:c":"border-collapse:collapse;","bdcl:s":"border-collapse:separate;",bdc:"border-color:#${1:000};","bdc:t":"border-color:transparent;",bdi:"border-image:url(|);","bdi:n":"border-image:none;",bdti:"border-top-image:url(|);","bdti:n":"border-top-image:none;",bdri:"border-right-image:url(|);","bdri:n":"border-right-image:none;",bdbi:"border-bottom-image:url(|);","bdbi:n":"border-bottom-image:none;",bdli:"border-left-image:url(|);","bdli:n":"border-left-image:none;",bdci:"border-corner-image:url(|);","bdci:n":"border-corner-image:none;","bdci:c":"border-corner-image:continue;",bdtli:"border-top-left-image:url(|);","bdtli:n":"border-top-left-image:none;","bdtli:c":"border-top-left-image:continue;",bdtri:"border-top-right-image:url(|);","bdtri:n":"border-top-right-image:none;","bdtri:c":"border-top-right-image:continue;",bdbri:"border-bottom-right-image:url(|);","bdbri:n":"border-bottom-right-image:none;","bdbri:c":"border-bottom-right-image:continue;",bdbli:"border-bottom-left-image:url(|);","bdbli:n":"border-bottom-left-image:none;","bdbli:c":"border-bottom-left-image:continue;",bdf:"border-fit:${1:repeat};","bdf:c":"border-fit:clip;","bdf:r":"border-fit:repeat;","bdf:sc":"border-fit:scale;","bdf:st":"border-fit:stretch;","bdf:ow":"border-fit:overwrite;","bdf:of":"border-fit:overflow;","bdf:sp":"border-fit:space;",bdlen:"border-length:|;","bdlen:a":"border-length:auto;",bdsp:"border-spacing:|;",bds:"border-style:|;","bds:n":"border-style:none;","bds:h":"border-style:hidden;","bds:dt":"border-style:dotted;","bds:ds":"border-style:dashed;","bds:s":"border-style:solid;","bds:db":"border-style:double;","bds:dtds":"border-style:dot-dash;","bds:dtdtds":"border-style:dot-dot-dash;","bds:w":"border-style:wave;","bds:g":"border-style:groove;","bds:r":"border-style:ridge;","bds:i":"border-style:inset;","bds:o":"border-style:outset;",bdw:"border-width:|;",bdtw:"border-top-width:|;",bdrw:"border-right-width:|;",bdbw:"border-bottom-width:|;",bdlw:"border-left-width:|;",bdt:"border-top:|;",bt:"border-top:|;","bdt+":"border-top:${1:1px} ${2:solid} ${3:#000};","bdt:n":"border-top:none;",bdts:"border-top-style:|;","bdts:n":"border-top-style:none;",bdtc:"border-top-color:#${1:000};","bdtc:t":"border-top-color:transparent;",bdr:"border-right:|;",br:"border-right:|;","bdr+":"border-right:${1:1px} ${2:solid} ${3:#000};","bdr:n":"border-right:none;",bdrst:"border-right-style:|;","bdrst:n":"border-right-style:none;",bdrc:"border-right-color:#${1:000};","bdrc:t":"border-right-color:transparent;",bdb:"border-bottom:|;",bb:"border-bottom:|;","bdb+":"border-bottom:${1:1px} ${2:solid} ${3:#000};","bdb:n":"border-bottom:none;",bdbs:"border-bottom-style:|;","bdbs:n":"border-bottom-style:none;",bdbc:"border-bottom-color:#${1:000};","bdbc:t":"border-bottom-color:transparent;",bdl:"border-left:|;",bl:"border-left:|;","bdl+":"border-left:${1:1px} ${2:solid} ${3:#000};","bdl:n":"border-left:none;",bdls:"border-left-style:|;","bdls:n":"border-left-style:none;",bdlc:"border-left-color:#${1:000};","bdlc:t":"border-left-color:transparent;",bdrs:"border-radius:|;",bdtrrs:"border-top-right-radius:|;",bdtlrs:"border-top-left-radius:|;",bdbrrs:"border-bottom-right-radius:|;",bdblrs:"border-bottom-left-radius:|;",bg:"background:#${1:000};","bg+":"background:${1:#fff} url(${2}) ${3:0} ${4:0} ${5:no-repeat};","bg:n":"background:none;","bg:ie":"filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1:x}.png',sizingMethod='${2:crop}');",bgc:"background-color:#${1:fff};","bgc:t":"background-color:transparent;",bgi:"background-image:url(|);","bgi:n":"background-image:none;",bgr:"background-repeat:|;","bgr:n":"background-repeat:no-repeat;","bgr:x":"background-repeat:repeat-x;","bgr:y":"background-repeat:repeat-y;","bgr:sp":"background-repeat:space;","bgr:rd":"background-repeat:round;",bga:"background-attachment:|;","bga:f":"background-attachment:fixed;","bga:s":"background-attachment:scroll;",bgp:"background-position:${1:0} ${2:0};",bgpx:"background-position-x:|;",bgpy:"background-position-y:|;",bgbk:"background-break:|;","bgbk:bb":"background-break:bounding-box;","bgbk:eb":"background-break:each-box;","bgbk:c":"background-break:continuous;",bgcp:"background-clip:${1:padding-box};","bgcp:bb":"background-clip:border-box;","bgcp:pb":"background-clip:padding-box;","bgcp:cb":"background-clip:content-box;","bgcp:nc":"background-clip:no-clip;",bgo:"background-origin:|;","bgo:pb":"background-origin:padding-box;","bgo:bb":"background-origin:border-box;","bgo:cb":"background-origin:content-box;",bgsz:"background-size:|;","bgsz:a":"background-size:auto;","bgsz:ct":"background-size:contain;","bgsz:cv":"background-size:cover;",c:"color:#${1:000};","c:r":"color:rgb(${1:0}, ${2:0}, ${3:0});","c:ra":"color:rgba(${1:0}, ${2:0}, ${3:0}, .${4:5});",cm:"/* |${child} */",cnt:"content:'|';","cnt:n":"content:normal;","cnt:oq":"content:open-quote;","cnt:noq":"content:no-open-quote;","cnt:cq":"content:close-quote;","cnt:ncq":"content:no-close-quote;","cnt:a":"content:attr(|);","cnt:c":"content:counter(|);","cnt:cs":"content:counters(|);",tbl:"table-layout:|;","tbl:a":"table-layout:auto;","tbl:f":"table-layout:fixed;",cps:"caption-side:|;","cps:t":"caption-side:top;","cps:b":"caption-side:bottom;",ec:"empty-cells:|;","ec:s":"empty-cells:show;","ec:h":"empty-cells:hide;",lis:"list-style:|;","lis:n":"list-style:none;",lisp:"list-style-position:|;","lisp:i":"list-style-position:inside;","lisp:o":"list-style-position:outside;",list:"list-style-type:|;","list:n":"list-style-type:none;","list:d":"list-style-type:disc;","list:c":"list-style-type:circle;","list:s":"list-style-type:square;","list:dc":"list-style-type:decimal;","list:dclz":"list-style-type:decimal-leading-zero;","list:lr":"list-style-type:lower-roman;","list:ur":"list-style-type:upper-roman;",lisi:"list-style-image:|;","lisi:n":"list-style-image:none;",q:"quotes:|;","q:n":"quotes:none;","q:ru":"quotes:'\\00AB' '\\00BB' '\\201E' '\\201C';","q:en":"quotes:'\\201C' '\\201D' '\\2018' '\\2019';",ct:"content:|;","ct:n":"content:normal;","ct:oq":"content:open-quote;","ct:noq":"content:no-open-quote;","ct:cq":"content:close-quote;","ct:ncq":"content:no-close-quote;","ct:a":"content:attr(|);","ct:c":"content:counter(|);","ct:cs":"content:counters(|);",coi:"counter-increment:|;",cor:"counter-reset:|;",va:"vertical-align:${1:top};","va:sup":"vertical-align:super;","va:t":"vertical-align:top;","va:tt":"vertical-align:text-top;","va:m":"vertical-align:middle;","va:bl":"vertical-align:baseline;","va:b":"vertical-align:bottom;","va:tb":"vertical-align:text-bottom;","va:sub":"vertical-align:sub;",ta:"text-align:${1:left};","ta:l":"text-align:left;","ta:c":"text-align:center;","ta:r":"text-align:right;","ta:j":"text-align:justify;","ta-lst":"text-align-last:|;","tal:a":"text-align-last:auto;","tal:l":"text-align-last:left;","tal:c":"text-align-last:center;","tal:r":"text-align-last:right;",td:"text-decoration:${1:none};","td:n":"text-decoration:none;","td:u":"text-decoration:underline;","td:o":"text-decoration:overline;","td:l":"text-decoration:line-through;",te:"text-emphasis:|;","te:n":"text-emphasis:none;","te:ac":"text-emphasis:accent;","te:dt":"text-emphasis:dot;","te:c":"text-emphasis:circle;","te:ds":"text-emphasis:disc;","te:b":"text-emphasis:before;","te:a":"text-emphasis:after;",th:"text-height:|;","th:a":"text-height:auto;","th:f":"text-height:font-size;","th:t":"text-height:text-size;","th:m":"text-height:max-size;",ti:"text-indent:|;","ti:-":"text-indent:-9999px;",tj:"text-justify:|;","tj:a":"text-justify:auto;","tj:iw":"text-justify:inter-word;","tj:ii":"text-justify:inter-ideograph;","tj:ic":"text-justify:inter-cluster;","tj:d":"text-justify:distribute;","tj:k":"text-justify:kashida;","tj:t":"text-justify:tibetan;",tov:"text-overflow:${ellipsis};","tov:e":"text-overflow:ellipsis;","tov:c":"text-overflow:clip;",to:"text-outline:|;","to+":"text-outline:${1:0} ${2:0} ${3:#000};","to:n":"text-outline:none;",tr:"text-replace:|;","tr:n":"text-replace:none;",tt:"text-transform:${1:uppercase};","tt:n":"text-transform:none;","tt:c":"text-transform:capitalize;","tt:u":"text-transform:uppercase;","tt:l":"text-transform:lowercase;",tw:"text-wrap:|;","tw:n":"text-wrap:normal;","tw:no":"text-wrap:none;","tw:u":"text-wrap:unrestricted;","tw:s":"text-wrap:suppress;",tsh:"text-shadow:${1:hoff} ${2:voff} ${3:blur} ${4:#000};","tsh:r":"text-shadow:${1:h} ${2:v} ${3:blur} rgb(${4:0}, ${5:0}, ${6:0});","tsh:ra":"text-shadow:${1:h} ${2:v} ${3:blur} rgba(${4:0}, ${5:0}, ${6:0}, .${7:5});","tsh+":"text-shadow:${1:0} ${2:0} ${3:0} ${4:#000};","tsh:n":"text-shadow:none;",trf:"transform:|;","trf:skx":"transform: skewX(${1:angle});","trf:sky":"transform: skewY(${1:angle});","trf:sc":"transform: scale(${1:x}, ${2:y});","trf:scx":"transform: scaleX(${1:x});","trf:scy":"transform: scaleY(${1:y});","trf:r":"transform: rotate(${1:angle});","trf:t":"transform: translate(${1:x}, ${2:y});","trf:tx":"transform: translateX(${1:x});","trf:ty":"transform: translateY(${1:y});",trfo:"transform-origin:|;",trfs:"transform-style:${1:preserve-3d};",trs:"transition:${1:prop} ${2:time};",trsde:"transition-delay:${1:time};",trsdu:"transition-duration:${1:time};",trsp:"transition-property:${1:prop};",trstf:"transition-timing-function:${1:tfunc};",lh:"line-height:|;",whs:"white-space:|;","whs:n":"white-space:normal;","whs:p":"white-space:pre;","whs:nw":"white-space:nowrap;","whs:pw":"white-space:pre-wrap;","whs:pl":"white-space:pre-line;",whsc:"white-space-collapse:|;","whsc:n":"white-space-collapse:normal;","whsc:k":"white-space-collapse:keep-all;","whsc:l":"white-space-collapse:loose;","whsc:bs":"white-space-collapse:break-strict;","whsc:ba":"white-space-collapse:break-all;",wob:"word-break:|;","wob:n":"word-break:normal;","wob:k":"word-break:keep-all;","wob:ba":"word-break:break-all;",wos:"word-spacing:|;",wow:"word-wrap:|;","wow:nm":"word-wrap:normal;","wow:n":"word-wrap:none;","wow:u":"word-wrap:unrestricted;","wow:s":"word-wrap:suppress;","wow:b":"word-wrap:break-word;",wm:"writing-mode:${1:lr-tb};","wm:lrt":"writing-mode:lr-tb;","wm:lrb":"writing-mode:lr-bt;","wm:rlt":"writing-mode:rl-tb;","wm:rlb":"writing-mode:rl-bt;","wm:tbr":"writing-mode:tb-rl;","wm:tbl":"writing-mode:tb-lr;","wm:btl":"writing-mode:bt-lr;","wm:btr":"writing-mode:bt-rl;",lts:"letter-spacing:|;","lts-n":"letter-spacing:normal;",f:"font:|;","f+":"font:${1:1em} ${2:Arial,sans-serif};",fw:"font-weight:|;","fw:n":"font-weight:normal;","fw:b":"font-weight:bold;","fw:br":"font-weight:bolder;","fw:lr":"font-weight:lighter;",fs:"font-style:${italic};","fs:n":"font-style:normal;","fs:i":"font-style:italic;","fs:o":"font-style:oblique;",fv:"font-variant:|;","fv:n":"font-variant:normal;","fv:sc":"font-variant:small-caps;",fz:"font-size:|;",fza:"font-size-adjust:|;","fza:n":"font-size-adjust:none;",ff:"font-family:|;","ff:s":"font-family:serif;","ff:ss":"font-family:sans-serif;","ff:c":"font-family:cursive;","ff:f":"font-family:fantasy;","ff:m":"font-family:monospace;","ff:a":'font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;',"ff:t":'font-family: "Times New Roman", Times, Baskerville, Georgia, serif;',"ff:v":"font-family: Verdana, Geneva, sans-serif;",fef:"font-effect:|;","fef:n":"font-effect:none;","fef:eg":"font-effect:engrave;","fef:eb":"font-effect:emboss;","fef:o":"font-effect:outline;",fem:"font-emphasize:|;",femp:"font-emphasize-position:|;","femp:b":"font-emphasize-position:before;","femp:a":"font-emphasize-position:after;",fems:"font-emphasize-style:|;","fems:n":"font-emphasize-style:none;","fems:ac":"font-emphasize-style:accent;","fems:dt":"font-emphasize-style:dot;","fems:c":"font-emphasize-style:circle;","fems:ds":"font-emphasize-style:disc;",fsm:"font-smooth:|;","fsm:a":"font-smooth:auto;","fsm:n":"font-smooth:never;","fsm:aw":"font-smooth:always;",fst:"font-stretch:|;","fst:n":"font-stretch:normal;","fst:uc":"font-stretch:ultra-condensed;","fst:ec":"font-stretch:extra-condensed;","fst:c":"font-stretch:condensed;","fst:sc":"font-stretch:semi-condensed;","fst:se":"font-stretch:semi-expanded;","fst:e":"font-stretch:expanded;","fst:ee":"font-stretch:extra-expanded;","fst:ue":"font-stretch:ultra-expanded;",op:"opacity:|;","op+":"opacity: $1;\nfilter: alpha(opacity=$2);","op:ie":"filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=100);","op:ms":"-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=100)';",rsz:"resize:|;","rsz:n":"resize:none;","rsz:b":"resize:both;","rsz:h":"resize:horizontal;","rsz:v":"resize:vertical;",cur:"cursor:${pointer};","cur:a":"cursor:auto;","cur:d":"cursor:default;","cur:c":"cursor:crosshair;","cur:ha":"cursor:hand;","cur:he":"cursor:help;","cur:m":"cursor:move;","cur:p":"cursor:pointer;","cur:t":"cursor:text;",pgbb:"page-break-before:|;","pgbb:au":"page-break-before:auto;","pgbb:al":"page-break-before:always;","pgbb:l":"page-break-before:left;","pgbb:r":"page-break-before:right;",pgbi:"page-break-inside:|;","pgbi:au":"page-break-inside:auto;","pgbi:av":"page-break-inside:avoid;",pgba:"page-break-after:|;","pgba:au":"page-break-after:auto;","pgba:al":"page-break-after:always;","pgba:l":"page-break-after:left;","pgba:r":"page-break-after:right;",orp:"orphans:|;",us:"user-select:${none};",wid:"widows:|;",wfsm:"-webkit-font-smoothing:${antialiased};","wfsm:a":"-webkit-font-smoothing:antialiased;","wfsm:s":"-webkit-font-smoothing:subpixel-antialiased;","wfsm:sa":"-webkit-font-smoothing:subpixel-antialiased;","wfsm:n":"-webkit-font-smoothing:none;"}},html:{filters:"html",profile:"html",snippets:{"!!!":"<!doctype html>","!!!4t":'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">',"!!!4s":'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">',"!!!xt":'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">',"!!!xs":'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">',"!!!xxs":'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">',c:"\x3c!-- |${child} --\x3e","cc:ie6":"\x3c!--[if lte IE 6]>\n\t${child}|\n<![endif]--\x3e","cc:ie":"\x3c!--[if IE]>\n\t${child}|\n<![endif]--\x3e","cc:noie":"\x3c!--[if !IE]>\x3c!--\x3e\n\t${child}|\n\x3c!--<![endif]--\x3e"},abbreviations:{"!":"html:5",a:'<a href="">',"a:link":'<a href="http://|">',"a:mail":'<a href="mailto:|">',abbr:'<abbr title="">',acronym:'<acronym title="">',base:'<base href="" />',basefont:"<basefont/>",br:"<br/>",frame:"<frame/>",hr:"<hr/>",bdo:'<bdo dir="">',"bdo:r":'<bdo dir="rtl">',"bdo:l":'<bdo dir="ltr">',col:"<col/>",link:'<link rel="stylesheet" href="" />',"link:css":'<link rel="stylesheet" href="${1:style}.css" />',"link:print":'<link rel="stylesheet" href="${1:print}.css" media="print" />',"link:favicon":'<link rel="shortcut icon" type="image/x-icon" href="${1:favicon.ico}" />',"link:touch":'<link rel="apple-touch-icon" href="${1:favicon.png}" />',"link:rss":'<link rel="alternate" type="application/rss+xml" title="RSS" href="${1:rss.xml}" />',"link:atom":'<link rel="alternate" type="application/atom+xml" title="Atom" href="${1:atom.xml}" />',meta:"<meta/>","meta:utf":'<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />',"meta:win":'<meta http-equiv="Content-Type" content="text/html;charset=windows-1251" />',"meta:vp":'<meta name="viewport" content="width=${1:device-width}, user-scalable=${2:no}, initial-scale=${3:1.0}, maximum-scale=${4:1.0}, minimum-scale=${5:1.0}" />',"meta:compat":'<meta http-equiv="X-UA-Compatible" content="${1:IE=7}" />',style:"<style>",script:"<script>","script:src":'<script src="">',img:'<img src="" alt="" />',iframe:'<iframe src="" frameborder="0">',embed:'<embed src="" type="" />',object:'<object data="" type="">',param:'<param name="" value="" />',map:'<map name="">',area:'<area shape="" coords="" href="" alt="" />',"area:d":'<area shape="default" href="" alt="" />',"area:c":'<area shape="circle" coords="" href="" alt="" />',"area:r":'<area shape="rect" coords="" href="" alt="" />',"area:p":'<area shape="poly" coords="" href="" alt="" />',form:'<form action="">',"form:get":'<form action="" method="get">',"form:post":'<form action="" method="post">',label:'<label for="">',input:'<input type="${1:text}" />',inp:'<input type="${1:text}" name="" id="" />',"input:hidden":"input[type=hidden name]","input:h":"input:hidden","input:text":"inp","input:t":"inp","input:search":"inp[type=search]","input:email":"inp[type=email]","input:url":"inp[type=url]","input:password":"inp[type=password]","input:p":"input:password","input:datetime":"inp[type=datetime]","input:date":"inp[type=date]","input:datetime-local":"inp[type=datetime-local]","input:month":"inp[type=month]","input:week":"inp[type=week]","input:time":"inp[type=time]","input:number":"inp[type=number]","input:color":"inp[type=color]","input:checkbox":"inp[type=checkbox]","input:c":"input:checkbox","input:radio":"inp[type=radio]","input:r":"input:radio","input:range":"inp[type=range]","input:file":"inp[type=file]","input:f":"input:file","input:submit":'<input type="submit" value="" />',"input:s":"input:submit","input:image":'<input type="image" src="" alt="" />',"input:i":"input:image","input:button":'<input type="button" value="" />',"input:b":"input:button",isindex:"<isindex/>","input:reset":"input:button[type=reset]",select:'<select name="" id="">',"select:disabled":"select[disabled]","select:d":"select[disabled]",option:'<option value="">',textarea:'<textarea name="" id="" cols="${1:30}" rows="${2:10}">',marquee:'<marquee behavior="" direction="">',"menu:context":"menu[type=context]>","menu:c":"menu:context","menu:toolbar":"menu[type=toolbar]>","menu:t":"menu:toolbar",video:'<video src="">',audio:'<audio src="">',"html:xml":'<html xmlns="http://www.w3.org/1999/xhtml">',keygen:"<keygen/>",command:"<command/>","button:submit":"button[type=submit]","button:s":"button[type=submit]","button:reset":"button[type=reset]","button:r":"button[type=reset]","button:disabled":"button[disabled]","button:d":"button[disabled]","fieldset:disabled":"fieldset[disabled]","fieldset:d":"fieldset[disabled]",bq:"blockquote",acr:"acronym",fig:"figure",figc:"figcaption",ifr:"iframe",emb:"embed",obj:"object",src:"source",cap:"caption",colg:"colgroup",fst:"fieldset","fst:d":"fieldset[disabled]",btn:"button","btn:b":"button[type=button]","btn:r":"button[type=reset]","btn:s":"button[type=submit]","btn:d":"button[disabled]",optg:"optgroup",opt:"option",tarea:"textarea",leg:"legend",sect:"section",art:"article",hdr:"header",ftr:"footer",adr:"address",dlg:"dialog",str:"strong",prog:"progress",fset:"fieldset","fset:d":"fieldset[disabled]",datag:"datagrid",datal:"datalist",kg:"keygen",out:"output",det:"details",cmd:"command",doc:"html>(head>meta[charset=UTF-8]+title{${1:Document}})+body",doc4:'html>(head>meta[http-equiv="Content-Type" content="text/html;charset=${charset}"]+title{${1:Document}})+body',"html:4t":"!!!4t+doc4[lang=${lang}]","html:4s":"!!!4s+doc4[lang=${lang}]","html:xt":"!!!xt+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]","html:xs":"!!!xs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]","html:xxs":"!!!xxs+doc4[xmlns=http://www.w3.org/1999/xhtml xml:lang=${lang}]","html:5":"!!!+doc[lang=${lang}]","ol+":"ol>li","ul+":"ul>li","dl+":"dl>dt+dd","map+":"map>area","table+":"table>tr>td","colgroup+":"colgroup>col","colg+":"colgroup>col","tr+":"tr>td","select+":"select>option","optgroup+":"optgroup>option","optg+":"optgroup>option"}},xml:{extends:"html",profile:"xml",filters:"html"},xsl:{extends:"html",profile:"xml",filters:"html, xsl",abbreviations:{tm:'<xsl:template match="" mode="">',tmatch:"tm",tn:'<xsl:template name="">',tname:"tn",call:'<xsl:call-template name=""/>',ap:'<xsl:apply-templates select="" mode=""/>',api:"<xsl:apply-imports/>",imp:'<xsl:import href=""/>',inc:'<xsl:include href=""/>',ch:"<xsl:choose>","xsl:when":'<xsl:when test="">',wh:"xsl:when",ot:"<xsl:otherwise>",if:'<xsl:if test="">',par:'<xsl:param name="">',pare:'<xsl:param name="" select=""/>',var:'<xsl:variable name="">',vare:'<xsl:variable name="" select=""/>',wp:'<xsl:with-param name="" select=""/>',key:'<xsl:key name="" match="" use=""/>',elem:'<xsl:element name="">',attr:'<xsl:attribute name="">',attrs:'<xsl:attribute-set name="">',cp:'<xsl:copy select=""/>',co:'<xsl:copy-of select=""/>',val:'<xsl:value-of select=""/>',each:'<xsl:for-each select="">',for:"each",tex:"<xsl:text></xsl:text>",com:"<xsl:comment>",msg:'<xsl:message terminate="no">',fall:"<xsl:fallback>",num:'<xsl:number value=""/>',nam:'<namespace-alias stylesheet-prefix="" result-prefix=""/>',pres:'<xsl:preserve-space elements=""/>',strip:'<xsl:strip-space elements=""/>',proc:'<xsl:processing-instruction name="">',sort:'<xsl:sort select="" order=""/>',"choose+":"xsl:choose>xsl:when+xsl:otherwise",xsl:"!!!+xsl:stylesheet[version=1.0 xmlns:xsl=http://www.w3.org/1999/XSL/Transform]>{\n|}"},snippets:{"!!!":'<?xml version="1.0" encoding="UTF-8"?>'}},haml:{filters:"haml",extends:"html",profile:"xml"},scss:{extends:"css"},sass:{extends:"css"},less:{extends:"css"},stylus:{extends:"css"},styl:{extends:"stylus"}}),"user")}),function(){var e=function(){return this}();e||"undefined"==typeof window||(e=window);var t=function(e,r,n){"string"==typeof e?(2==arguments.length&&(n=r),t.modules[e]||(t.payloads[e]=n,t.modules[e]=null)):t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace())};t.modules={},t.payloads={};var r,n,i=function(e,t,r){if("string"==typeof t){var n=a(e,t);if(null!=n)return r&&r(),n}else if("[object Array]"===Object.prototype.toString.call(t)){for(var i=[],s=0,l=t.length;s<l;++s){var c=a(e,t[s]);if(null==c&&o.original)return;i.push(c)}return r&&r.apply(null,i)||!0}},o=function(e,t){var r=i("",e,t);return null==r&&o.original?o.original.apply(this,arguments):r},s=function(e,t){if(-1!==t.indexOf("!")){var r=t.split("!");return s(e,r[0])+"!"+s(e,r[1])}if("."==t.charAt(0))for(t=e.split("/").slice(0,-1).join("/")+"/"+t;-1!==t.indexOf(".")&&n!=t;){var n=t;t=t.replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}return t},a=function(e,r){r=s(e,r);var n=t.modules[r];if(!n){if("function"==typeof(n=t.payloads[r])){var o={},a={id:r,uri:"",exports:o,packaged:!0};o=n(function(e,t){return i(r,e,t)},o,a)||a.exports,t.modules[r]=o,delete t.payloads[r]}n=t.modules[r]=o||n}return n};n=e,(r="ace")&&(e[r]||(e[r]={}),n=e[r]),n.define&&n.define.packaged||(t.original=n.define,n.define=t,n.define.packaged=!0),n.require&&n.require.packaged||(o.original=n.require,n.require=o,n.require.packaged=!0)}(),ace.define("ace/lib/regexp",["require","exports","module"],function(e,t,r){"use strict";var n,i={exec:RegExp.prototype.exec,test:RegExp.prototype.test,match:String.prototype.match,replace:String.prototype.replace,split:String.prototype.split},o=void 0===i.exec.call(/()??/,"")[1],s=(n=/^/g,i.test.call(n,""),!n.lastIndex);s&&o||(RegExp.prototype.exec=function(e){var t,r,n,a=i.exec.apply(this,arguments);if("string"==typeof e&&a){if(!o&&a.length>1&&function(e,t,r){if(Array.prototype.indexOf)return e.indexOf(t,r);for(var n=r||0;n<e.length;n++)if(e[n]===t)return n;return-1}(a,"")>-1&&(r=RegExp(this.source,i.replace.call(((n=this).global?"g":"")+(n.ignoreCase?"i":"")+(n.multiline?"m":"")+(n.extended?"x":"")+(n.sticky?"y":""),"g","")),i.replace.call(e.slice(a.index),r,function(){for(var e=1;e<arguments.length-2;e++)void 0===arguments[e]&&(a[e]=void 0)})),this._xregexp&&this._xregexp.captureNames)for(var l=1;l<a.length;l++)(t=this._xregexp.captureNames[l-1])&&(a[t]=a[l]);!s&&this.global&&!a[0].length&&this.lastIndex>a.index&&this.lastIndex--}return a},s||(RegExp.prototype.test=function(e){var t=i.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t}))}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,r){function n(){}Function.prototype.bind||(Function.prototype.bind=function(e){var t=this;if("function"!=typeof t)throw new TypeError("Function.prototype.bind called on incompatible "+t);var r=g.call(arguments,1),i=function(){if(this instanceof i){var n=t.apply(this,r.concat(g.call(arguments)));return Object(n)===n?n:this}return t.apply(e,r.concat(g.call(arguments)))};return t.prototype&&(n.prototype=t.prototype,i.prototype=new n,n.prototype=null),i});var i,o,s,a,l,c=Function.prototype.call,u=Array.prototype,d=Object.prototype,g=u.slice,h=c.bind(d.toString),m=c.bind(d.hasOwnProperty);if((l=m(d,"__defineGetter__"))&&(i=c.bind(d.__defineGetter__),o=c.bind(d.__defineSetter__),s=c.bind(d.__lookupGetter__),a=c.bind(d.__lookupSetter__)),2!=[1,2].splice(0).length)if(function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t,r=[];if(r.splice.apply(r,e(20)),r.splice.apply(r,e(26)),t=r.length,r.splice(5,0,"XXX"),r.length,t+1==r.length)return!0}()){var p=Array.prototype.splice;Array.prototype.splice=function(e,t){return arguments.length?p.apply(this,[void 0===e?0:e,void 0===t?this.length-e:t].concat(g.call(arguments,2))):[]}}else Array.prototype.splice=function(e,t){var r=this.length;e>0?e>r&&(e=r):null==e?e=0:e<0&&(e=Math.max(r+e,0)),e+t<r||(t=r-e);var n=this.slice(e,e+t),i=g.call(arguments,2),o=i.length;if(e===r)o&&this.push.apply(this,i);else{var s=Math.min(t,r-e),a=e+s,l=a+o-s,c=r-a,u=r-s;if(l<a)for(var d=0;d<c;++d)this[l+d]=this[a+d];else if(l>a)for(d=c;d--;)this[l+d]=this[a+d];if(o&&e===u)this.length=u,this.push.apply(this,i);else for(this.length=u+o,d=0;d<o;++d)this[e+d]=i[d]}return n};Array.isArray||(Array.isArray=function(e){return"[object Array]"==h(e)});var _,f,b=Object("a"),y="a"!=b[0]||!(0 in b);if(Array.prototype.forEach||(Array.prototype.forEach=function(e){var t=D(this),r=y&&"[object String]"==h(this)?this.split(""):t,n=arguments[1],i=-1,o=r.length>>>0;if("[object Function]"!=h(e))throw new TypeError;for(;++i<o;)i in r&&e.call(n,r[i],i,t)}),Array.prototype.map||(Array.prototype.map=function(e){var t=D(this),r=y&&"[object String]"==h(this)?this.split(""):t,n=r.length>>>0,i=Array(n),o=arguments[1];if("[object Function]"!=h(e))throw new TypeError(e+" is not a function");for(var s=0;s<n;s++)s in r&&(i[s]=e.call(o,r[s],s,t));return i}),Array.prototype.filter||(Array.prototype.filter=function(e){var t,r=D(this),n=y&&"[object String]"==h(this)?this.split(""):r,i=n.length>>>0,o=[],s=arguments[1];if("[object Function]"!=h(e))throw new TypeError(e+" is not a function");for(var a=0;a<i;a++)a in n&&(t=n[a],e.call(s,t,a,r)&&o.push(t));return o}),Array.prototype.every||(Array.prototype.every=function(e){var t=D(this),r=y&&"[object String]"==h(this)?this.split(""):t,n=r.length>>>0,i=arguments[1];if("[object Function]"!=h(e))throw new TypeError(e+" is not a function");for(var o=0;o<n;o++)if(o in r&&!e.call(i,r[o],o,t))return!1;return!0}),Array.prototype.some||(Array.prototype.some=function(e){var t=D(this),r=y&&"[object String]"==h(this)?this.split(""):t,n=r.length>>>0,i=arguments[1];if("[object Function]"!=h(e))throw new TypeError(e+" is not a function");for(var o=0;o<n;o++)if(o in r&&e.call(i,r[o],o,t))return!0;return!1}),Array.prototype.reduce||(Array.prototype.reduce=function(e){var t=D(this),r=y&&"[object String]"==h(this)?this.split(""):t,n=r.length>>>0;if("[object Function]"!=h(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduce of empty array with no initial value");var i,o=0;if(arguments.length>=2)i=arguments[1];else for(;;){if(o in r){i=r[o++];break}if(++o>=n)throw new TypeError("reduce of empty array with no initial value")}for(;o<n;o++)o in r&&(i=e.call(void 0,i,r[o],o,t));return i}),Array.prototype.reduceRight||(Array.prototype.reduceRight=function(e){var t=D(this),r=y&&"[object String]"==h(this)?this.split(""):t,n=r.length>>>0;if("[object Function]"!=h(e))throw new TypeError(e+" is not a function");if(!n&&1==arguments.length)throw new TypeError("reduceRight of empty array with no initial value");var i,o=n-1;if(arguments.length>=2)i=arguments[1];else for(;;){if(o in r){i=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}do{o in this&&(i=e.call(void 0,i,r[o],o,t))}while(o--);return i}),Array.prototype.indexOf&&-1==[0,1].indexOf(1,2)||(Array.prototype.indexOf=function(e){var t=y&&"[object String]"==h(this)?this.split(""):D(this),r=t.length>>>0;if(!r)return-1;var n=0;for(arguments.length>1&&(n=T(arguments[1])),n=n>=0?n:Math.max(0,r+n);n<r;n++)if(n in t&&t[n]===e)return n;return-1}),Array.prototype.lastIndexOf&&-1==[0,1].lastIndexOf(0,-3)||(Array.prototype.lastIndexOf=function(e){var t=y&&"[object String]"==h(this)?this.split(""):D(this),r=t.length>>>0;if(!r)return-1;var n=r-1;for(arguments.length>1&&(n=Math.min(n,T(arguments[1]))),n=n>=0?n:r-Math.abs(n);n>=0;n--)if(n in t&&e===t[n])return n;return-1}),Object.getPrototypeOf||(Object.getPrototypeOf=function(e){return e.__proto__||(e.constructor?e.constructor.prototype:d)}),!Object.getOwnPropertyDescriptor){Object.getOwnPropertyDescriptor=function(e,t){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.getOwnPropertyDescriptor called on a non-object: "+e);if(m(e,t)){var r;if(r={enumerable:!0,configurable:!0},l){var n=e.__proto__;e.__proto__=d;var i=s(e,t),o=a(e,t);if(e.__proto__=n,i||o)return i&&(r.get=i),o&&(r.set=o),r}return r.value=e[t],r}}}(Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(e){return Object.keys(e)}),Object.create)||(_=null===Object.prototype.__proto__?function(){return{__proto__:null}}:function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(e,t){var r;if(null===e)r=_();else{if("object"!=typeof e)throw new TypeError("typeof prototype["+typeof e+"] != 'object'");var n=function(){};n.prototype=e,(r=new n).__proto__=e}return void 0!==t&&Object.defineProperties(r,t),r});function x(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(e){}}if(Object.defineProperty){var v=x({}),w="undefined"==typeof document||x(document.createElement("div"));if(!v||!w)var k=Object.defineProperty}if(!Object.defineProperty||k){Object.defineProperty=function(e,t,r){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.defineProperty called on non-object: "+e);if("object"!=typeof r&&"function"!=typeof r||null===r)throw new TypeError("Property description must be an object: "+r);if(k)try{return k.call(Object,e,t,r)}catch(e){}if(m(r,"value"))if(l&&(s(e,t)||a(e,t))){var n=e.__proto__;e.__proto__=d,delete e[t],e[t]=r.value,e.__proto__=n}else e[t]=r.value;else{if(!l)throw new TypeError("getters & setters can not be defined on this javascript engine");m(r,"get")&&i(e,t,r.get),m(r,"set")&&o(e,t,r.set)}return e}}Object.defineProperties||(Object.defineProperties=function(e,t){for(var r in t)m(t,r)&&Object.defineProperty(e,r,t[r]);return e}),Object.seal||(Object.seal=function(e){return e}),Object.freeze||(Object.freeze=function(e){return e});try{Object.freeze(function(){})}catch(e){Object.freeze=(f=Object.freeze,function(e){return"function"==typeof e?e:f(e)})}if(Object.preventExtensions||(Object.preventExtensions=function(e){return e}),Object.isSealed||(Object.isSealed=function(e){return!1}),Object.isFrozen||(Object.isFrozen=function(e){return!1}),Object.isExtensible||(Object.isExtensible=function(e){if(Object(e)===e)throw new TypeError;for(var t="";m(e,t);)t+="?";e[t]=!0;var r=m(e,t);return delete e[t],r}),!Object.keys){var C=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],S=A.length;for(var E in{toString:null})C=!1;Object.keys=function(e){if("object"!=typeof e&&"function"!=typeof e||null===e)throw new TypeError("Object.keys called on a non-object");var t=[];for(var r in e)m(e,r)&&t.push(r);if(C)for(var n=0,i=S;n<i;n++){var o=A[n];m(e,o)&&t.push(o)}return t}}Date.now||(Date.now=function(){return(new Date).getTime()});var F="\t\n\v\f\r   ᠎              \u2028\u2029\ufeff";if(!String.prototype.trim||F.trim()){F="["+F+"]";var R=new RegExp("^"+F+F+"*"),$=new RegExp(F+F+"*$");String.prototype.trim=function(){return String(this).replace(R,"").replace($,"")}}function T(e){return(e=+e)!=e?e=0:0!==e&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}var D=function(e){if(null==e)throw new TypeError("can't convert "+e+" to object");return Object(e)}}),ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"],function(e,t,r){"use strict";e("./regexp"),e("./es5-shim")}),ace.define("ace/lib/dom",["require","exports","module"],function(e,t,r){"use strict";t.getDocumentHead=function(e){return e||(e=document),e.head||e.getElementsByTagName("head")[0]||e.documentElement},t.createElement=function(e,t){return document.createElementNS?document.createElementNS(t||"http://www.w3.org/1999/xhtml",e):document.createElement(e)},t.hasCssClass=function(e,t){return-1!==(e.className+"").split(/\s+/g).indexOf(t)},t.addCssClass=function(e,r){t.hasCssClass(e,r)||(e.className+=" "+r)},t.removeCssClass=function(e,t){for(var r=e.className.split(/\s+/g);;){var n=r.indexOf(t);if(-1==n)break;r.splice(n,1)}e.className=r.join(" ")},t.toggleCssClass=function(e,t){for(var r=e.className.split(/\s+/g),n=!0;;){var i=r.indexOf(t);if(-1==i)break;n=!1,r.splice(i,1)}return n&&r.push(t),e.className=r.join(" "),n},t.setCssClass=function(e,r,n){n?t.addCssClass(e,r):t.removeCssClass(e,r)},t.hasCssString=function(e,t){var r,n=0;if((t=t||document).createStyleSheet&&(r=t.styleSheets)){for(;n<r.length;)if(r[n++].owningElement.id===e)return!0}else if(r=t.getElementsByTagName("style"))for(;n<r.length;)if(r[n++].id===e)return!0;return!1},t.importCssString=function(e,r,n){if(n=n||document,r&&t.hasCssString(r,n))return null;var i;r&&(e+="\n/*# sourceURL=ace/css/"+r+" */"),n.createStyleSheet?((i=n.createStyleSheet()).cssText=e,r&&(i.owningElement.id=r)):((i=t.createElement("style")).appendChild(n.createTextNode(e)),r&&(i.id=r),t.getDocumentHead(n).appendChild(i))},t.importCssStylsheet=function(e,r){if(r.createStyleSheet)r.createStyleSheet(e);else{var n=t.createElement("link");n.rel="stylesheet",n.href=e,t.getDocumentHead(r).appendChild(n)}},t.getInnerWidth=function(e){return parseInt(t.computedStyle(e,"paddingLeft"),10)+parseInt(t.computedStyle(e,"paddingRight"),10)+e.clientWidth},t.getInnerHeight=function(e){return parseInt(t.computedStyle(e,"paddingTop"),10)+parseInt(t.computedStyle(e,"paddingBottom"),10)+e.clientHeight},t.scrollbarWidth=function(e){var r=t.createElement("ace_inner");r.style.width="100%",r.style.minWidth="0px",r.style.height="200px",r.style.display="block";var n=t.createElement("ace_outer"),i=n.style;i.position="absolute",i.left="-10000px",i.overflow="hidden",i.width="200px",i.minWidth="0px",i.height="150px",i.display="block",n.appendChild(r);var o=e.documentElement;o.appendChild(n);var s=r.offsetWidth;i.overflow="scroll";var a=r.offsetWidth;return s==a&&(a=n.clientWidth),o.removeChild(n),s-a},"undefined"!=typeof document?(void 0!==window.pageYOffset?(t.getPageScrollTop=function(){return window.pageYOffset},t.getPageScrollLeft=function(){return window.pageXOffset}):(t.getPageScrollTop=function(){return document.body.scrollTop},t.getPageScrollLeft=function(){return document.body.scrollLeft}),window.getComputedStyle?t.computedStyle=function(e,t){return t?(window.getComputedStyle(e,"")||{})[t]||"":window.getComputedStyle(e,"")||{}}:t.computedStyle=function(e,t){return t?e.currentStyle[t]:e.currentStyle},t.setInnerHtml=function(e,t){var r=e.cloneNode(!1);return r.innerHTML=t,e.parentNode.replaceChild(r,e),r},"textContent"in document.documentElement?(t.setInnerText=function(e,t){e.textContent=t},t.getInnerText=function(e){return e.textContent}):(t.setInnerText=function(e,t){e.innerText=t},t.getInnerText=function(e){return e.innerText}),t.getParentWindow=function(e){return e.defaultView||e.parentWindow}):t.importCssString=function(){}}),ace.define("ace/lib/oop",["require","exports","module"],function(e,t,r){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var r in t)e[r]=t[r];return e},t.implement=function(e,r){t.mixin(e,r)}}),ace.define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"],function(e,t,r){"use strict";e("./fixoldbrowsers");var n=e("./oop"),i=function(){var e,t,r={MODIFIER_KEYS:{16:"Shift",17:"Ctrl",18:"Alt",224:"Meta"},KEY_MODS:{ctrl:1,alt:2,option:2,shift:4,super:8,meta:8,command:8,cmd:8},FUNCTION_KEYS:{8:"Backspace",9:"Tab",13:"Return",19:"Pause",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"Print",45:"Insert",46:"Delete",96:"Numpad0",97:"Numpad1",98:"Numpad2",99:"Numpad3",100:"Numpad4",101:"Numpad5",102:"Numpad6",103:"Numpad7",104:"Numpad8",105:"Numpad9","-13":"NumpadEnter",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Numlock",145:"Scrolllock"},PRINTABLE_KEYS:{32:" ",48:"0",49:"1",50:"2",51:"3",52:"4",53:"5",54:"6",55:"7",56:"8",57:"9",59:";",61:"=",65:"a",66:"b",67:"c",68:"d",69:"e",70:"f",71:"g",72:"h",73:"i",74:"j",75:"k",76:"l",77:"m",78:"n",79:"o",80:"p",81:"q",82:"r",83:"s",84:"t",85:"u",86:"v",87:"w",88:"x",89:"y",90:"z",107:"+",109:"-",110:".",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",111:"/",106:"*"}};for(t in r.FUNCTION_KEYS)e=r.FUNCTION_KEYS[t].toLowerCase(),r[e]=parseInt(t,10);for(t in r.PRINTABLE_KEYS)e=r.PRINTABLE_KEYS[t].toLowerCase(),r[e]=parseInt(t,10);return n.mixin(r,r.MODIFIER_KEYS),n.mixin(r,r.PRINTABLE_KEYS),n.mixin(r,r.FUNCTION_KEYS),r.enter=r.return,r.escape=r.esc,r.del=r.delete,r[173]="-",function(){for(var e=["cmd","ctrl","alt","shift"],t=Math.pow(2,e.length);t--;)r.KEY_MODS[t]=e.filter(function(e){return t&r.KEY_MODS[e]}).join("-")+"-"}(),r.KEY_MODS[0]="",r.KEY_MODS[-1]="input-",r}();n.mixin(t,i),t.keyCodeToString=function(e){var t=i[e];return"string"!=typeof t&&(t=String.fromCharCode(e)),t.toLowerCase()}}),ace.define("ace/lib/useragent",["require","exports","module"],function(e,t,r){"use strict";if(t.OS={LINUX:"LINUX",MAC:"MAC",WINDOWS:"WINDOWS"},t.getOS=function(){return t.isMac?t.OS.MAC:t.isLinux?t.OS.LINUX:t.OS.WINDOWS},"object"==typeof navigator){var n=(navigator.platform.match(/mac|win|linux/i)||["other"])[0].toLowerCase(),i=navigator.userAgent;t.isWin="win"==n,t.isMac="mac"==n,t.isLinux="linux"==n,t.isIE="Microsoft Internet Explorer"==navigator.appName||navigator.appName.indexOf("MSAppHost")>=0?parseFloat((i.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&"Gecko"===window.navigator.product,t.isOldGecko=t.isGecko&&parseInt((i.match(/rv:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&"[object Opera]"==Object.prototype.toString.call(window.opera),t.isWebKit=parseFloat(i.split("WebKit/")[1])||void 0,t.isChrome=parseFloat(i.split(" Chrome/")[1])||void 0,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isTouchPad=i.indexOf("TouchPad")>=0,t.isChromeOS=i.indexOf(" CrOS ")>=0}}),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,r){"use strict";var n=e("./keys"),i=e("./useragent"),o=null,s=0;t.addListener=function(e,t,r){if(e.addEventListener)return e.addEventListener(t,r,!1);if(e.attachEvent){var n=function(){r.call(e,window.event)};r._wrapper=n,e.attachEvent("on"+t,n)}},t.removeListener=function(e,t,r){if(e.removeEventListener)return e.removeEventListener(t,r,!1);e.detachEvent&&e.detachEvent("on"+t,r._wrapper||r)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return"dblclick"==e.type?0:"contextmenu"==e.type||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,r,n){function i(e){r&&r(e),n&&n(e),t.removeListener(document,"mousemove",r,!0),t.removeListener(document,"mouseup",i,!0),t.removeListener(document,"dragstart",i,!0)}return t.addListener(document,"mousemove",r,!0),t.addListener(document,"mouseup",i,!0),t.addListener(document,"dragstart",i,!0),i},t.addTouchMoveListener=function(e,r){var n,i;"ontouchmove"in e&&(t.addListener(e,"touchstart",function(e){var t=e.changedTouches[0];n=t.clientX,i=t.clientY}),t.addListener(e,"touchmove",function(e){var t=e.changedTouches[0];e.wheelX=-(t.clientX-n)/1,e.wheelY=-(t.clientY-i)/1,n=t.clientX,i=t.clientY,r(e)}))},t.addMouseWheelListener=function(e,r){"onmousewheel"in e?t.addListener(e,"mousewheel",function(e){void 0!==e.wheelDeltaX?(e.wheelX=-e.wheelDeltaX/8,e.wheelY=-e.wheelDeltaY/8):(e.wheelX=0,e.wheelY=-e.wheelDelta/8),r(e)}):"onwheel"in e?t.addListener(e,"wheel",function(e){switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=.35*e.deltaX||0,e.wheelY=.35*e.deltaY||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=5*(e.deltaX||0),e.wheelY=5*(e.deltaY||0)}r(e)}):t.addListener(e,"DOMMouseScroll",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=5*(e.detail||0),e.wheelY=0):(e.wheelX=0,e.wheelY=5*(e.detail||0)),r(e)})},t.addMultiMouseDownListener=function(e,r,n,o){var s,a,l,c=0,u={2:"dblclick",3:"tripleclick",4:"quadclick"};function d(e){if(0!==t.getButton(e)?c=0:e.detail>1?++c>4&&(c=1):c=1,i.isIE){var d=Math.abs(e.clientX-s)>5||Math.abs(e.clientY-a)>5;l&&!d||(c=1),l&&clearTimeout(l),l=setTimeout(function(){l=null},r[c-1]||600),1==c&&(s=e.clientX,a=e.clientY)}if(e._clicks=c,n[o]("mousedown",e),c>4)c=0;else if(c>1)return n[o](u[c],e)}function g(e){c=2,l&&clearTimeout(l),l=setTimeout(function(){l=null},r[c-1]||600),n[o]("mousedown",e),n[o](u[c],e)}Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,"mousedown",d),i.isOldIE&&t.addListener(e,"dblclick",g)})};var a=i.isMac&&i.isOpera&&!("KeyboardEvent"in window)?function(e){return(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)}:function(e){return(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)};function l(e,t,r){var l=a(t);if(!i.isMac&&o){if(t.getModifierState&&(t.getModifierState("OS")||t.getModifierState("Win"))&&(l|=8),o.altGr){if(!(3&~l))return;o.altGr=0}if(18===r||17===r){var c="location"in t?t.location:t.keyLocation;if(17===r&&1===c)1==o[r]&&(s=t.timeStamp);else if(18===r&&3===l&&2===c){t.timeStamp-s<50&&(o.altGr=!0)}}}if((r in n.MODIFIER_KEYS&&(r=-1),8&l&&r>=91&&r<=93&&(r=-1),!l&&13===r)&&(3===(c="location"in t?t.location:t.keyLocation)&&(e(t,l,-r),t.defaultPrevented)))return;if(i.isChromeOS&&8&l){if(e(t,l,r),t.defaultPrevented)return;l&=-9}return!!(l||r in n.FUNCTION_KEYS||r in n.PRINTABLE_KEYS)&&e(t,l,r)}function c(){o=Object.create(null)}if(t.getModifierString=function(e){return n.KEY_MODS[a(e)]},t.addCommandKeyListener=function(e,r){var n=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var s=null;n(e,"keydown",function(e){s=e.keyCode}),n(e,"keypress",function(e){return l(r,e,s)})}else{var a=null;n(e,"keydown",function(e){o[e.keyCode]=(o[e.keyCode]||0)+1;var t=l(r,e,e.keyCode);return a=e.defaultPrevented,t}),n(e,"keypress",function(e){a&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),a=null)}),n(e,"keyup",function(e){o[e.keyCode]=null}),o||(c(),n(window,"focus",c))}},"object"==typeof window&&window.postMessage&&!i.isOldIE){t.nextTick=function(e,r){r=r||window;var n="zero-timeout-message-1";t.addListener(r,"message",function i(o){o.data==n&&(t.stopPropagation(o),t.removeListener(r,"message",i),e())}),r.postMessage(n,"*")}}t.nextFrame="object"==typeof window&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define("ace/lib/lang",["require","exports","module"],function(e,t,r){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){for(var r="";t>0;)1&t&&(r+=e),(t>>=1)&&(e+=e);return r};var n=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(n,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var r in e)t[r]=e[r];return t},t.copyArray=function(e){for(var t=[],r=0,n=e.length;r<n;r++)e[r]&&"object"==typeof e[r]?t[r]=this.copyObject(e[r]):t[r]=e[r];return t},t.deepCopy=function e(t){if("object"!=typeof t||!t)return t;var r;if(Array.isArray(t)){r=[];for(var n=0;n<t.length;n++)r[n]=e(t[n]);return r}if("[object Object]"!==Object.prototype.toString.call(t))return t;for(var n in r={},t)r[n]=e(t[n]);return r},t.arrayToMap=function(e){for(var t={},r=0;r<e.length;r++)t[e[r]]=1;return t},t.createMap=function(e){var t=Object.create(null);for(var r in e)t[r]=e[r];return t},t.arrayRemove=function(e,t){for(var r=0;r<=e.length;r++)t===e[r]&&e.splice(r,1)},t.escapeRegExp=function(e){return e.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},t.escapeHTML=function(e){return e.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<")},t.getMatchOffsets=function(e,t){var r=[];return e.replace(t,function(e){r.push({offset:arguments[arguments.length-2],length:e.length})}),r},t.deferredCall=function(e){var t=null,r=function(){t=null,e()},n=function(e){return n.cancel(),t=setTimeout(r,e||0),n};return n.schedule=n,n.call=function(){return this.cancel(),e(),n},n.cancel=function(){return clearTimeout(t),t=null,n},n.isPending=function(){return t},n},t.delayedCall=function(e,t){var r=null,n=function(){r=null,e()},i=function(e){null==r&&(r=setTimeout(n,e||t))};return i.delay=function(e){r&&clearTimeout(r),r=setTimeout(n,e||t)},i.schedule=i,i.call=function(){this.cancel(),e()},i.cancel=function(){r&&clearTimeout(r),r=null},i.isPending=function(){return r},i}}),ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang"],function(e,t,r){"use strict";var n=e("../lib/event"),i=e("../lib/useragent"),o=e("../lib/dom"),s=e("../lib/lang"),a=i.isChrome<18,l=i.isIE;t.TextInput=function(e,t){var r=o.createElement("textarea");r.className="ace_text-input",i.isTouchPad&&r.setAttribute("x-palm-disable-auto-cap",!0),r.setAttribute("wrap","off"),r.setAttribute("autocorrect","off"),r.setAttribute("autocapitalize","off"),r.setAttribute("spellcheck",!1),r.style.opacity="0",i.isOldIE&&(r.style.top="-1000px"),e.insertBefore(r,e.firstChild);var c="",u=!1,d=!1,g=!1,h="",m=!0;try{var p=document.activeElement===r}catch(e){}n.addListener(r,"blur",function(e){t.onBlur(e),p=!1}),n.addListener(r,"focus",function(e){p=!0,t.onFocus(e),b()}),this.focus=function(){if(h)return r.focus();var e=r.style.top;r.style.position="fixed",r.style.top="0px",r.focus(),setTimeout(function(){r.style.position="","0px"==r.style.top&&(r.style.top=e)},0)},this.blur=function(){r.blur()},this.isFocused=function(){return p};var _=s.delayedCall(function(){p&&b(m)}),f=s.delayedCall(function(){g||(r.value=c,p&&b())});function b(e){if(!g){if(g=!0,A)t=0,n=e?0:r.value.length-1;else var t=e?2:1,n=2;try{r.setSelectionRange(t,n)}catch(e){}g=!1}}function y(){g||(r.value=c,i.isWebKit&&f.schedule())}i.isWebKit||t.addEventListener("changeSelection",function(){t.selection.isEmpty()!=m&&(m=!m,_.schedule())}),y(),p&&t.onFocus();var x=function(e){return 0===e.selectionStart&&e.selectionEnd===e.value.length};if(!r.setSelectionRange&&r.createTextRange&&(r.setSelectionRange=function(e,t){var r=this.createTextRange();r.collapse(!0),r.moveStart("character",e),r.moveEnd("character",t),r.select()},x=function(e){try{var t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&t.text==e.value}),i.isOldIE){var v=!1,w=function(e){if(!v){var t=r.value;if(!g&&t&&t!=c){if(e&&t==c[0])return k.schedule();E(t),v=!0,y(),v=!1}}},k=s.delayedCall(w);n.addListener(r,"propertychange",w);var C={13:1,27:1};n.addListener(r,"keyup",function(e){if(!g||r.value&&!C[e.keyCode]||setTimeout(I,0),(r.value.charCodeAt(0)||0)<129)return k.call();g?q():B()}),n.addListener(r,"keydown",function(e){k.schedule(50)})}var A=null;this.setInputHandler=function(e){A=e},this.getInputHandler=function(){return A};var S=!1,E=function(e){A&&(e=A(e),A=null),d?(b(),e&&t.onPaste(e),d=!1):e==c.charAt(0)?S?t.execCommand("del",{source:"ace"}):t.execCommand("backspace",{source:"ace"}):(e.substring(0,2)==c?e=e.substr(2):e.charAt(0)==c.charAt(0)?e=e.substr(1):e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e.charAt(e.length-1)==c.charAt(0)&&(e=e.slice(0,-1)),e&&t.onTextInput(e)),S&&(S=!1)},F=function(e){if(!g){var t=r.value;E(t),y()}},R=function(e,t,r){var n=e.clipboardData||window.clipboardData;if(n&&!a){var i=l||r?"Text":"text/plain";try{return t?!1!==n.setData(i,t):n.getData(i)}catch(e){if(!r)return R(e,t,!0)}}},$=function(e,i){var o=t.getCopyText();if(!o)return n.preventDefault(e);R(e,o)?(i?t.onCut():t.onCopy(),n.preventDefault(e)):(u=!0,r.value=o,r.select(),setTimeout(function(){u=!1,y(),b(),i?t.onCut():t.onCopy()}))},T=function(e){$(e,!0)},D=function(e){$(e,!1)},L=function(e){var o=R(e);"string"==typeof o?(o&&t.onPaste(o,e),i.isIE&&setTimeout(b),n.preventDefault(e)):(r.value="",d=!0)};n.addCommandKeyListener(r,t.onCommandKey.bind(t)),n.addListener(r,"select",function(e){u?u=!1:x(r)?(t.selectAll(),b()):A&&b(t.selection.isEmpty())}),n.addListener(r,"input",F),n.addListener(r,"cut",T),n.addListener(r,"copy",D),n.addListener(r,"paste",L),"oncut"in r&&"oncopy"in r&&"onpaste"in r||n.addListener(e,"keydown",function(e){if((!i.isMac||e.metaKey)&&e.ctrlKey)switch(e.keyCode){case 67:D(e);break;case 86:L(e);break;case 88:T(e)}});var M,B=function(e){g||!t.onCompositionStart||t.$readOnly||((g={}).canUndo=t.session.$undoManager,t.onCompositionStart(),setTimeout(q,0),t.on("mousedown",I),g.canUndo&&!t.selection.isEmpty()&&(t.insert(""),t.session.markUndoGroup(),t.selection.clearSelection()),t.session.markUndoGroup())},q=function(){if(g&&t.onCompositionUpdate&&!t.$readOnly){var e=r.value.replace(/\x01/g,"");if(g.lastValue!==e&&(t.onCompositionUpdate(e),g.lastValue&&t.undo(),g.canUndo&&(g.lastValue=e),g.lastValue)){var n=t.selection.getRange();t.insert(g.lastValue),t.session.markUndoGroup(),g.range=t.selection.getRange(),t.selection.setRange(n),t.selection.clearSelection()}}},I=function(e){if(t.onCompositionEnd&&!t.$readOnly){var n=g;g=!1;var o=setTimeout(function(){o=null;var e=r.value.replace(/\x01/g,"");g||(e==n.lastValue?y():!n.lastValue&&e&&(y(),E(e)))});A=function(e){return o&&clearTimeout(o),(e=e.replace(/\x01/g,""))==n.lastValue?"":(n.lastValue&&o&&t.undo(),e)},t.onCompositionEnd(),t.removeListener("mousedown",I),"compositionend"==e.type&&n.range&&t.selection.setRange(n.range),i.isChrome&&i.isChrome>=53&&F()}},z=s.delayedCall(q,50);function O(){clearTimeout(M),M=setTimeout(function(){h&&(r.style.cssText=h,h=""),null==t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=!0,t.renderer.$moveTextAreaToCursor())},i.isOldIE?200:0)}n.addListener(r,"compositionstart",B),i.isGecko?n.addListener(r,"text",function(){z.schedule()}):(n.addListener(r,"keyup",function(){z.schedule()}),n.addListener(r,"keydown",function(){z.schedule()})),n.addListener(r,"compositionend",I),this.getElement=function(){return r},this.setReadOnly=function(e){r.readOnly=e},this.onContextMenu=function(e){S=!0,b(t.selection.isEmpty()),t._emit("nativecontextmenu",{target:t,domEvent:e}),this.moveToMouse(e,!0)},this.moveToMouse=function(e,s){if(s||!i.isOldIE){h||(h=r.style.cssText),r.style.cssText=(s?"z-index:100000;":"")+"height:"+r.style.height+";"+(i.isIE?"opacity:0.1;":"");var a=t.container.getBoundingClientRect(),l=o.computedStyle(t.container),c=a.top+(parseInt(l.borderTopWidth)||0),u=a.left+(parseInt(a.borderLeftWidth)||0),d=a.bottom-c-r.clientHeight-2,g=function(e){r.style.left=e.clientX-u-2+"px",r.style.top=Math.min(e.clientY-c-2,d)+"px"};g(e),"mousedown"==e.type&&(t.renderer.$keepTextAreaAtCursor&&(t.renderer.$keepTextAreaAtCursor=null),clearTimeout(M),i.isWin&&!i.isOldIE&&n.capture(t.container,g,O))}},this.onContextMenuClose=O;var P=function(e){t.textInput.onContextMenu(e),O()};n.addListener(r,"mouseup",P),n.addListener(r,"mousedown",function(e){e.preventDefault(),O()}),n.addListener(t.renderer.scroller,"contextmenu",P),n.addListener(r,"contextmenu",P)}}),ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,r){"use strict";e("../lib/dom"),e("../lib/event"),e("../lib/useragent");function n(e){e.$clickSelection=null;var t=e.editor;t.setDefaultHandler("mousedown",this.onMouseDown.bind(e)),t.setDefaultHandler("dblclick",this.onDoubleClick.bind(e)),t.setDefaultHandler("tripleclick",this.onTripleClick.bind(e)),t.setDefaultHandler("quadclick",this.onQuadClick.bind(e)),t.setDefaultHandler("mousewheel",this.onMouseWheel.bind(e)),t.setDefaultHandler("touchmove",this.onTouchMove.bind(e));["select","startSelect","selectEnd","selectAllEnd","selectByWordsEnd","selectByLinesEnd","dragWait","dragWaitEnd","focusWait"].forEach(function(t){e[t]=this[t]},this),e.selectByLines=this.extendSelectionBy.bind(e,"getLineRange"),e.selectByWords=this.extendSelectionBy.bind(e,"getWordRange")}function i(e,t){if(e.start.row==e.end.row)var r=2*t.column-e.start.column-e.end.column;else if(e.start.row!=e.end.row-1||e.start.column||e.end.column)r=2*t.row-e.start.row-e.end.row;else var r=t.column-4;return r<0?{cursor:e.start,anchor:e.end}:{cursor:e.end,anchor:e.start}}(function(){this.onMouseDown=function(e){var t=e.inSelection(),r=e.getDocumentPosition();this.mousedownEvent=e;var n=this.editor,i=e.getButton();if(0!==i){var o=n.getSelectionRange().isEmpty();return n.$blockScrolling++,(o||1==i)&&n.selection.moveToPosition(r),n.$blockScrolling--,void(2==i&&n.textInput.onContextMenu(e.domEvent))}return this.mousedownEvent.time=Date.now(),!t||n.isFocused()||(n.focus(),!this.$focusTimout||this.$clickSelection||n.inMultiSelectMode)?(this.captureMouse(e),this.startSelect(r,e.domEvent._clicks>1),e.preventDefault()):(this.setState("focusWait"),void this.captureMouse(e))},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var r=this.editor;r.$blockScrolling++,this.mousedownEvent.getShiftKey()?r.selection.selectToPosition(e):t||r.selection.moveToPosition(e),t||this.select(),r.renderer.scroller.setCapture&&r.renderer.scroller.setCapture(),r.setStyle("ace_selecting"),this.setState("select"),r.$blockScrolling--},this.select=function(){var e,t=this.editor,r=t.renderer.screenToTextCoordinates(this.x,this.y);if(t.$blockScrolling++,this.$clickSelection){var n=this.$clickSelection.comparePoint(r);if(-1==n)e=this.$clickSelection.end;else if(1==n)e=this.$clickSelection.start;else{var o=i(this.$clickSelection,r);r=o.cursor,e=o.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(r),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,r=this.editor,n=r.renderer.screenToTextCoordinates(this.x,this.y),o=r.selection[e](n.row,n.column);if(r.$blockScrolling++,this.$clickSelection){var s=this.$clickSelection.comparePoint(o.start),a=this.$clickSelection.comparePoint(o.end);if(-1==s&&a<=0)t=this.$clickSelection.end,o.end.row==n.row&&o.end.column==n.column||(n=o.start);else if(1==a&&s>=0)t=this.$clickSelection.start,o.start.row==n.row&&o.start.column==n.column||(n=o.end);else if(-1==s&&1==a)n=o.end,t=o.start;else{var l=i(this.$clickSelection,n);n=l.cursor,t=l.anchor}r.selection.setSelectionAnchor(t.row,t.column)}r.selection.selectToPosition(n),r.$blockScrolling--,r.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e,t,r,n,i=(e=this.mousedownEvent.x,t=this.mousedownEvent.y,r=this.x,n=this.y,Math.sqrt(Math.pow(r-e,2)+Math.pow(n-t,2))),o=Date.now();(i>0||o-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),r=this.editor,n=r.session.getBracketRange(t);n?(n.isEmpty()&&(n.start.column--,n.end.column++),this.setState("select")):(n=r.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=n,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),r=this.editor;this.setState("selectByLines");var n=r.getSelectionRange();n.isMultiLine()&&n.contains(t.row,t.column)?(this.$clickSelection=r.selection.getLineRange(n.start.row),this.$clickSelection.end=r.selection.getLineRange(n.end.row).end):this.$clickSelection=r.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(!e.getAccelKey()){e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,r=t-(this.$lastScrollTime||0),n=this.editor;return n.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed)||r<200?(this.$lastScrollTime=t,n.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()):void 0}},this.onTouchMove=function(e){var t=e.domEvent.timeStamp,r=t-(this.$lastScrollTime||0),n=this.editor;if(n.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed)||r<200)return this.$lastScrollTime=t,n.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(n.prototype),t.DefaultHandlers=n}),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],function(e,t,r){"use strict";e("./lib/oop");var n=e("./lib/dom");function i(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}(function(){this.$init=function(){return this.$element=n.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){n.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){n.addCssClass(this.getElement(),e)},this.show=function(e,t,r){null!=e&&this.setText(e),null!=t&&null!=r&&this.setPosition(t,r),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(i.prototype),t.Tooltip=i}),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],function(e,t,r){"use strict";var n=e("../lib/dom"),i=e("../lib/oop"),o=e("../lib/event"),s=e("../tooltip").Tooltip;function a(e){s.call(this,e)}i.inherits(a,s),function(){this.setPosition=function(e,t){var r=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),o=this.getHeight();(e+=15)+i>r&&(e-=e+i-r),(t+=15)+o>n&&(t-=20+o),s.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=function(e){var t,r,i,s=e.editor,l=s.renderer.$gutterLayer,c=new a(s.container);function u(){t&&(t=clearTimeout(t)),i&&(c.hide(),i=null,s._signal("hideGutterTooltip",c),s.removeEventListener("mousewheel",u))}function d(e){c.setPosition(e.x,e.y)}e.editor.setDefaultHandler("guttermousedown",function(t){if(s.isFocused()&&0==t.getButton()&&"foldWidgets"!=l.getRegion(t)){var r=t.getDocumentPosition().row,n=s.session.selection;if(t.getShiftKey())n.selectTo(r,0);else{if(2==t.domEvent.detail)return s.selectAll(),t.preventDefault();e.$clickSelection=s.selection.getLineRange(r)}return e.setState("selectByLines"),e.captureMouse(t),t.preventDefault()}}),e.editor.setDefaultHandler("guttermousemove",function(o){var a=o.domEvent.target||o.domEvent.srcElement;if(n.hasCssClass(a,"ace_fold-widget"))return u();i&&e.$tooltipFollowsMouse&&d(o),r=o,t||(t=setTimeout(function(){t=null,r&&!e.isMousePressed?function(){var t=r.getDocumentPosition().row,n=l.$annotations[t];if(!n)return u();if(t==s.session.getLength()){var o=s.renderer.pixelToScreenCoordinates(0,r.y).row,a=r.$pos;if(o>s.session.documentToScreenRow(a.row,a.column))return u()}if(i!=n)if(i=n.text.join("<br/>"),c.setHtml(i),c.show(),s._signal("showGutterTooltip",c),s.on("mousewheel",u),e.$tooltipFollowsMouse)d(r);else{var g=r.domEvent.target.getBoundingClientRect(),h=c.getElement().style;h.left=g.right+"px",h.top=g.bottom+"px"}}():u()},50))}),o.addListener(s.renderer.$gutter,"mouseout",function(e){r=null,i&&!t&&(t=setTimeout(function(){t=null,u()},50))}),s.on("changeSession",u)}}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,r){"use strict";var n=e("../lib/event"),i=e("../lib/useragent"),o=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){n.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){n.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos||(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY)),this.$pos},this.inSelection=function(){if(null!==this.$inSelection)return this.$inSelection;var e=this.editor.getSelectionRange();if(e.isEmpty())this.$inSelection=!1;else{var t=this.getDocumentPosition();this.$inSelection=e.contains(t.row,t.column)}return this.$inSelection},this.getButton=function(){return n.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(o.prototype)}),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,r){"use strict";var n=e("../lib/dom"),i=e("../lib/event"),o=e("../lib/useragent");function s(e){var t=e.editor,r=n.createElement("img");r.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",o.isOpera&&(r.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"].forEach(function(t){e[t]=this[t]},this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var s,l,c,u,d,g,h,m,p,_,f,b=t.container,y=0;function x(){var e=g;(function(e,r){var n=Date.now(),i=!r||e.row!=r.row,o=!r||e.column!=r.column;!_||i||o?(t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,_=n,f={x:l,y:c}):a(f.x,f.y,l,c)>5?_=null:n-_>=200&&(t.renderer.scrollCursorIntoView(),_=null)})(g=t.renderer.screenToTextCoordinates(l,c),e),function(e,r){var n=Date.now(),i=t.renderer.layerConfig.lineHeight,o=t.renderer.layerConfig.characterWidth,s=t.renderer.scroller.getBoundingClientRect(),a={x:{left:l-s.left,right:s.right-l},y:{top:c-s.top,bottom:s.bottom-c}},u=Math.min(a.x.left,a.x.right),d=Math.min(a.y.top,a.y.bottom),g={row:e.row,column:e.column};u/o<=2&&(g.column+=a.x.left<a.x.right?-3:2),d/i<=1&&(g.row+=a.y.top<a.y.bottom?-1:1);var h=e.row!=g.row,m=e.column!=g.column,_=!r||e.row!=r.row;h||m&&!_?p?n-p>=200&&t.renderer.scrollCursorIntoView(g):p=n:p=null}(g,e)}function v(){d=t.selection.toOrientedRange(),s=t.session.addMarker(d,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(u),x(),u=setInterval(x,20),y=0,i.addListener(document,"mousemove",C)}function w(){clearInterval(u),t.session.removeMarker(s),s=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(d),t.$blockScrolling-=1,t.isFocused()&&!m&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),d=null,g=null,y=0,p=null,_=null,i.removeListener(document,"mousemove",C)}this.onDragStart=function(e){if(this.cancelDrag||!b.draggable){var n=this;return setTimeout(function(){n.startSelect(),n.captureMouse(e)},0),e.preventDefault()}d=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?"copy":"copyMove",o.isOpera&&(t.container.appendChild(r),r.scrollTop=0),i.setDragImage&&i.setDragImage(r,0,0),o.isOpera&&t.container.removeChild(r),i.clearData(),i.setData("Text",t.session.getTextRange()),m=!0,this.setState("drag")},this.onDragEnd=function(e){if(b.draggable=!1,m=!1,this.setState(null),!t.getReadOnly()){var r=e.dataTransfer.dropEffect;h||"move"!=r||t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(!t.getReadOnly()&&A(e.dataTransfer))return l=e.clientX,c=e.clientY,s||v(),y++,e.dataTransfer.dropEffect=h=S(e),i.preventDefault(e)},this.onDragOver=function(e){if(!t.getReadOnly()&&A(e.dataTransfer))return l=e.clientX,c=e.clientY,s||(v(),y++),null!==k&&(k=null),e.dataTransfer.dropEffect=h=S(e),i.preventDefault(e)},this.onDragLeave=function(e){if(--y<=0&&s)return w(),h=null,i.preventDefault(e)},this.onDrop=function(e){if(g){var r=e.dataTransfer;if(m)switch(h){case"move":d=d.contains(g.row,g.column)?{start:g,end:g}:t.moveText(d,g);break;case"copy":d=t.moveText(d,g,!0)}else{var n=r.getData("Text");d={start:g,end:t.session.insert(g,n)},t.focus(),h=null}return w(),i.preventDefault(e)}},i.addListener(b,"dragstart",this.onDragStart.bind(e)),i.addListener(b,"dragend",this.onDragEnd.bind(e)),i.addListener(b,"dragenter",this.onDragEnter.bind(e)),i.addListener(b,"dragover",this.onDragOver.bind(e)),i.addListener(b,"dragleave",this.onDragLeave.bind(e)),i.addListener(b,"drop",this.onDrop.bind(e));var k=null;function C(){null==k&&(k=setTimeout(function(){null!=k&&s&&w()},20))}function A(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return"text/plain"==e||"Text"==e})}function S(e){var t=["copy","copymove","all","uninitialized"],r=o.isMac?e.altKey:e.ctrlKey,n="uninitialized";try{n=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var i="none";return r&&t.indexOf(n)>=0?i="copy":["move","copymove","linkmove","all","uninitialized"].indexOf(n)>=0?i="move":t.indexOf(n)>=0&&(i="copy"),i}}function a(e,t,r,n){return Math.sqrt(Math.pow(r-e,2)+Math.pow(n-t,2))}(function(){this.dragWait=function(){Date.now()-this.mousedownEvent.time>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){this.editor.container.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor;e.container.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var t=o.isWin?"default":"move";e.renderer.setCursorStyle(t),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;o.isIE&&"dragReady"==this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>3&&t.dragDrop());"dragWait"===this.state&&(a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y)>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition())))},this.onMouseDown=function(e){if(this.$dragEnabled){this.mousedownEvent=e;var t=this.editor,r=e.inSelection(),n=e.getButton();if(1===(e.domEvent.detail||1)&&0===n&&r){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var i=e.domEvent.target||e.domEvent.srcElement;if("unselectable"in i&&(i.unselectable="on"),t.getDragDelay()){if(o.isWebKit)this.cancelDrag=!0,t.container.draggable=!0;this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}}).call(s.prototype),t.DragdropHandler=s}),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,t,r){"use strict";var n=e("./dom");t.get=function(e,t){var r=new XMLHttpRequest;r.open("GET",e,!0),r.onreadystatechange=function(){4===r.readyState&&t(r.responseText)},r.send(null)},t.loadScript=function(e,t){var r=n.getDocumentHead(),i=document.createElement("script");i.src=e,r.appendChild(i),i.onload=i.onreadystatechange=function(e,r){!r&&i.readyState&&"loaded"!=i.readyState&&"complete"!=i.readyState||(i=i.onload=i.onreadystatechange=null,r||t())}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,r){"use strict";var n={},i=function(){this.propagationStopped=!0},o=function(){this.defaultPrevented=!0};n._emit=n._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var r=this._eventRegistry[e]||[],n=this._defaultHandlers[e];if(r.length||n){"object"==typeof t&&t||(t={}),t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=o),r=r.slice();for(var s=0;s<r.length&&(r[s](t,this),!t.propagationStopped);s++);return n&&!t.defaultPrevented?n(t,this):void 0}},n._signal=function(e,t){var r=(this._eventRegistry||{})[e];if(r){r=r.slice();for(var n=0;n<r.length;n++)r[n](t,this)}},n.once=function(e,t){var r=this;t&&this.addEventListener(e,function n(){r.removeEventListener(e,n),t.apply(null,arguments)})},n.setDefaultHandler=function(e,t){var r=this._defaultHandlers;if(r||(r=this._defaultHandlers={_disabled_:{}}),r[e]){var n=r[e],i=r._disabled_[e];i||(r._disabled_[e]=i=[]),i.push(n);var o=i.indexOf(t);-1!=o&&i.splice(o,1)}r[e]=t},n.removeDefaultHandler=function(e,t){var r=this._defaultHandlers;if(r){var n=r._disabled_[e];if(r[e]==t){r[e];n&&this.setDefaultHandler(e,n.pop())}else if(n){var i=n.indexOf(t);-1!=i&&n.splice(i,1)}}},n.on=n.addEventListener=function(e,t,r){this._eventRegistry=this._eventRegistry||{};var n=this._eventRegistry[e];return n||(n=this._eventRegistry[e]=[]),-1==n.indexOf(t)&&n[r?"unshift":"push"](t),t},n.off=n.removeListener=n.removeEventListener=function(e,t){this._eventRegistry=this._eventRegistry||{};var r=this._eventRegistry[e];if(r){var n=r.indexOf(t);-1!==n&&r.splice(n,1)}},n.removeAllListeners=function(e){this._eventRegistry&&(this._eventRegistry[e]=[])},t.EventEmitter=n}),ace.define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,r){var n=e("./oop"),i=e("./event_emitter").EventEmitter,o={setOptions:function(e){Object.keys(e).forEach(function(t){this.setOption(t,e[t])},this)},getOptions:function(e){var t={};return e?Array.isArray(e)||(t=e,e=Object.keys(t)):e=Object.keys(this.$options),e.forEach(function(e){t[e]=this.getOption(e)},this),t},setOption:function(e,t){if(this["$"+e]!==t){var r=this.$options[e];if(!r)return s('misspelled option "'+e+'"');if(r.forwardTo)return this[r.forwardTo]&&this[r.forwardTo].setOption(e,t);r.handlesSet||(this["$"+e]=t),r&&r.set&&r.set.call(this,t)}},getOption:function(e){var t=this.$options[e];return t?t.forwardTo?this[t.forwardTo]&&this[t.forwardTo].getOption(e):t&&t.get?t.get.call(this):this["$"+e]:s('misspelled option "'+e+'"')}};function s(e){"undefined"!=typeof console&&console.warn&&console.warn.apply(console,arguments)}function a(e,t){var r=new Error(e);r.data=t,"object"==typeof console&&console.error&&console.error(r),setTimeout(function(){throw r})}var l=function(){this.$defaultOptions={}};(function(){n.implement(this,i),this.defineOptions=function(e,t,r){return e.$options||(this.$defaultOptions[t]=e.$options={}),Object.keys(r).forEach(function(t){var n=r[t];"string"==typeof n&&(n={forwardTo:n}),n.name||(n.name=t),e.$options[n.name]=n,"initialValue"in n&&(e["$"+n.name]=n.initialValue)}),n.implement(e,o),this},this.resetOptions=function(e){Object.keys(e.$options).forEach(function(t){var r=e.$options[t];"value"in r&&e.setOption(t,r.value)})},this.setDefaultValue=function(e,t,r){var n=this.$defaultOptions[e]||(this.$defaultOptions[e]={});n[t]&&(n.forwardTo?this.setDefaultValue(n.forwardTo,t,r):n[t].value=r)},this.setDefaultValues=function(e,t){Object.keys(t).forEach(function(r){this.setDefaultValue(e,r,t[r])},this)},this.warn=s,this.reportError=a}).call(l.prototype),t.AppConfig=l}),ace.define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/lib/net","ace/lib/app_config"],function(e,t,r){var n=e("./lib/lang"),i=(e("./lib/oop"),e("./lib/net")),o=e("./lib/app_config").AppConfig;r.exports=t=new o;var s=function(){return this||"undefined"!=typeof window&&window}(),a={packaged:!1,workerPath:null,modePath:null,themePath:null,basePath:"",suffix:".js",$moduleUrls:{}};function l(n){if(s&&s.document){a.packaged=n||e.packaged||r.packaged||s.define&&define.packaged;for(var i={},o="",l=document.currentScript||document._currentScript,u=(l&&l.ownerDocument||document).getElementsByTagName("script"),d=0;d<u.length;d++){var g=u[d],h=g.src||g.getAttribute("src");if(h){for(var m=g.attributes,p=0,_=m.length;p<_;p++){var f=m[p];0===f.name.indexOf("data-ace-")&&(i[c(f.name.replace(/^data-ace-/,""))]=f.value)}var b=h.match(/^(.*)\/ace(\-\w+)?\.js(\?|$)/);b&&(o=b[1])}}for(var y in o&&(i.base=i.base||o,i.packaged=!0),i.basePath=i.base,i.workerPath=i.workerPath||i.base,i.modePath=i.modePath||i.base,i.themePath=i.themePath||i.base,delete i.base,i)void 0!==i[y]&&t.set(y,i[y])}}function c(e){return e.replace(/-(.)/g,function(e,t){return t.toUpperCase()})}t.get=function(e){if(!a.hasOwnProperty(e))throw new Error("Unknown config key: "+e);return a[e]},t.set=function(e,t){if(!a.hasOwnProperty(e))throw new Error("Unknown config key: "+e);a[e]=t},t.all=function(){return n.copyObject(a)},t.moduleUrl=function(e,t){if(a.$moduleUrls[e])return a.$moduleUrls[e];var r=e.split("/"),n="snippets"==(t=t||r[r.length-2]||"")?"/":"-",i=r[r.length-1];if("worker"==t&&"-"==n){var o=new RegExp("^"+t+"[\\-_]|[\\-_]"+t+"$","g");i=i.replace(o,"")}(!i||i==t)&&r.length>1&&(i=r[r.length-2]);var s=a[t+"Path"];return null==s?s=a.basePath:"/"==n&&(t=n=""),s&&"/"!=s.slice(-1)&&(s+="/"),s+t+n+i+this.get("suffix")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(r,n){var o,s;Array.isArray(r)&&(s=r[0],r=r[1]);try{o=e(r)}catch(e){}if(o&&!t.$loading[r])return n&&n(o);if(t.$loading[r]||(t.$loading[r]=[]),t.$loading[r].push(n),!(t.$loading[r].length>1)){var a=function(){e([r],function(e){t._emit("load.module",{name:r,module:e});var n=t.$loading[r];t.$loading[r]=null,n.forEach(function(t){t&&t(e)})})};if(!t.get("packaged"))return a();i.loadScript(t.moduleUrl(r,s),a)}},l(!0),t.init=l}),ace.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/config"],function(e,t,r){"use strict";var n=e("../lib/event"),i=e("../lib/useragent"),o=e("./default_handlers").DefaultHandlers,s=e("./default_gutter_handler").GutterHandler,a=e("./mouse_event").MouseEvent,l=e("./dragdrop_handler").DragdropHandler,c=e("../config"),u=function(e){var t=this;this.editor=e,new o(this),new s(this),new l(this);var r=function(t){(!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement()))&&window.focus(),e.focus()},a=e.renderer.getMouseEventTarget();n.addListener(a,"click",this.onMouseEvent.bind(this,"click")),n.addListener(a,"mousemove",this.onMouseMove.bind(this,"mousemove")),n.addMultiMouseDownListener([a,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),n.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),n.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var c=e.renderer.$gutter;n.addListener(c,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),n.addListener(c,"click",this.onMouseEvent.bind(this,"gutterclick")),n.addListener(c,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),n.addListener(c,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),n.addListener(a,"mousedown",r),n.addListener(c,"mousedown",r),i.isIE&&e.renderer.scrollBarV&&(n.addListener(e.renderer.scrollBarV.element,"mousedown",r),n.addListener(e.renderer.scrollBarH.element,"mousedown",r)),e.on("mousemove",function(r){if(!t.state&&!t.$dragDelay&&t.$dragEnabled){var n=e.renderer.screenToTextCoordinates(r.x,r.y),i=e.session.selection.getRange(),o=e.renderer;!i.isEmpty()&&i.insideStart(n.row,n.column)?o.setCursorStyle("default"):o.setCursorStyle("")}})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new a(t,this.editor))},this.onMouseMove=function(e,t){var r=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;r&&r.length&&this.editor._emit(e,new a(t,this.editor))},this.onMouseWheel=function(e,t){var r=new a(t,this.editor);r.speed=2*this.$scrollSpeed,r.wheelX=t.wheelX,r.wheelY=t.wheelY,this.editor._emit(e,r)},this.onTouchMove=function(e,t){var r=new a(t,this.editor);r.speed=1,r.wheelX=t.wheelX,r.wheelY=t.wheelY,this.editor._emit(e,r)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var r=this.editor.renderer;r.$keepTextAreaAtCursor&&(r.$keepTextAreaAtCursor=null);var o=this,s=function(e){if(e){if(i.isWebKit&&!e.which&&o.releaseMouse)return o.releaseMouse();o.x=e.clientX,o.y=e.clientY,t&&t(e),o.mouseEvent=new a(e,o.editor),o.$mouseMoved=!0}},l=function(e){clearInterval(u),c(),o[o.state+"End"]&&o[o.state+"End"](e),o.state="",null==r.$keepTextAreaAtCursor&&(r.$keepTextAreaAtCursor=!0,r.$moveTextAreaToCursor()),o.isMousePressed=!1,o.$onCaptureMouseMove=o.releaseMouse=null,e&&o.onMouseEvent("mouseup",e)},c=function(){o[o.state]&&o[o.state](),o.$mouseMoved=!1};if(i.isOldIE&&"dblclick"==e.domEvent.type)return setTimeout(function(){l(e)});o.$onCaptureMouseMove=s,o.releaseMouse=n.capture(this.editor.container,s,l);var u=setInterval(c,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){t&&t.domEvent&&"contextmenu"!=t.domEvent.type||(this.editor.off("nativecontextmenu",e),t&&t.domEvent&&n.stopEvent(t.domEvent))}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(u.prototype),c.defineOptions(u.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=u}),ace.define("ace/mouse/fold_handler",["require","exports","module"],function(e,t,r){"use strict";t.FoldHandler=function(e){e.on("click",function(t){var r=t.getDocumentPosition(),n=e.session,i=n.getFoldAt(r.row,r.column,1);i&&(t.getAccelKey()?n.removeFold(i):n.expandFold(i),t.stop())}),e.on("gutterclick",function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var r=t.getDocumentPosition().row,n=e.session;n.foldWidgets&&n.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on("gutterdblclick",function(t){if("foldWidgets"==e.renderer.$gutterLayer.getRegion(t)){var r=t.getDocumentPosition().row,n=e.session,i=n.getParentFoldRangeData(r,!0),o=i.range||i.firstRange;if(o){r=o.start.row;var s=n.getFoldAt(r,n.getLine(r).length,1);s?n.removeFold(s):(n.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}}),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,r){"use strict";var n=e("../lib/keys"),i=e("../lib/event"),o=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]!=e){for(;t[t.length-1]&&t[t.length-1]!=this.$defaultHandler;)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)}},this.addKeyboardHandler=function(e,t){if(e){"function"!=typeof e||e.handleKeyboard||(e.handleKeyboard=e);var r=this.$handlers.indexOf(e);-1!=r&&this.$handlers.splice(r,1),null==t?this.$handlers.push(e):this.$handlers.splice(t,0,e),-1==r&&e.attach&&e.attach(this.$editor)}},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return-1!=t&&(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(r){return r.getStatusText&&r.getStatusText(t,e)||""}).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,r,n){for(var o,s=!1,a=this.$editor.commands,l=this.$handlers.length;l--&&!((o=this.$handlers[l].handleKeyboard(this.$data,e,t,r,n))&&o.command&&((s="null"==o.command||a.exec(o.command,this.$editor,o.args,n))&&n&&-1!=e&&1!=o.passEvent&&1!=o.command.passEvent&&i.stopEvent(n),s)););return s||-1!=e||(o={command:"insertstring"},s=a.exec("insertstring",this.$editor,t)),s&&this.$editor._signal&&this.$editor._signal("keyboardActivity",o),s},this.onCommandKey=function(e,t,r){var i=n.keyCodeToString(r);this.$callKeyboardHandlers(t,i,r,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(o.prototype),t.KeyBinding=o}),ace.define("ace/range",["require","exports","module"],function(e,t,r){"use strict";var n=function(e,t,r,n){this.start={row:e,column:t},this.end={row:r,column:n}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return 0==this.compare(e,t)},this.compareRange=function(e){var t,r=e.end,n=e.start;return 1==(t=this.compare(r.row,r.column))?1==(t=this.compare(n.row,n.column))?2:0==t?1:0:-1==t?-2:-1==(t=this.compare(n.row,n.column))?-1:1==t?42:0},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return 0==this.comparePoint(e.start)&&0==this.comparePoint(e.end)},this.intersects=function(e){var t=this.compareRange(e);return-1==t||0==t||1==t},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){"object"==typeof e?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){"object"==typeof e?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return 0==this.compare(e,t)&&(!this.isEnd(e,t)&&!this.isStart(e,t))},this.insideStart=function(e,t){return 0==this.compare(e,t)&&!this.isEnd(e,t)},this.insideEnd=function(e,t){return 0==this.compare(e,t)&&!this.isStart(e,t)},this.compare=function(e,t){return this.isMultiLine()||e!==this.start.row?e<this.start.row?-1:e>this.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0:t<this.start.column?-1:t>this.end.column?1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var r={row:t+1,column:0};else if(this.end.row<e)r={row:e,column:0};if(this.start.row>t)var i={row:t+1,column:0};else if(this.start.row<e)i={row:e,column:0};return n.fromPoints(i||this.start,r||this.end)},this.extend=function(e,t){var r=this.compare(e,t);if(0==r)return this;if(-1==r)var i={row:e,column:t};else var o={row:e,column:t};return n.fromPoints(i||this.start,o||this.end)},this.isEmpty=function(){return this.start.row===this.end.row&&this.start.column===this.end.column},this.isMultiLine=function(){return this.start.row!==this.end.row},this.clone=function(){return n.fromPoints(this.start,this.end)},this.collapseRows=function(){return 0==this.end.column?new n(this.start.row,0,Math.max(this.start.row,this.end.row-1),0):new n(this.start.row,0,this.end.row,0)},this.toScreenRange=function(e){var t=e.documentToScreenPosition(this.start),r=e.documentToScreenPosition(this.end);return new n(t.row,t.column,r.row,r.column)},this.moveBy=function(e,t){this.start.row+=e,this.start.column+=t,this.end.row+=e,this.end.column+=t}}).call(n.prototype),n.fromPoints=function(e,t){return new n(e.row,e.column,t.row,t.column)},n.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},n.comparePoints=function(e,t){return e.row-t.row||e.column-t.column},t.Range=n}),ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/lang"),o=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,a=function(e){this.session=e,this.doc=e.getDocument(),this.clearSelection(),this.lead=this.selectionLead=this.doc.createAnchor(0,0),this.anchor=this.selectionAnchor=this.doc.createAnchor(0,0);var t=this;this.lead.on("change",function(e){t._emit("changeCursor"),t.$isEmpty||t._emit("changeSelection"),t.$keepDesiredColumnOnChange||e.old.column==e.value.column||(t.$desiredColumn=null)}),this.selectionAnchor.on("change",function(){t.$isEmpty||t._emit("changeSelection")})};(function(){n.implement(this,o),this.isEmpty=function(){return this.$isEmpty||this.anchor.row==this.lead.row&&this.anchor.column==this.lead.column},this.isMultiLine=function(){return!this.isEmpty()&&this.getRange().isMultiLine()},this.getCursor=function(){return this.lead.getPosition()},this.setSelectionAnchor=function(e,t){this.anchor.setPosition(e,t),this.$isEmpty&&(this.$isEmpty=!1,this._emit("changeSelection"))},this.getSelectionAnchor=function(){return this.$isEmpty?this.getSelectionLead():this.anchor.getPosition()},this.getSelectionLead=function(){return this.lead.getPosition()},this.shiftSelection=function(e){if(this.$isEmpty)this.moveCursorTo(this.lead.row,this.lead.column+e);else{var t=this.getSelectionAnchor(),r=this.getSelectionLead(),n=this.isBackwards();n&&0===t.column||this.setSelectionAnchor(t.row,t.column+e),(n||0!==r.column)&&this.$moveSelection(function(){this.moveCursorTo(r.row,r.column+e)})}},this.isBackwards=function(){var e=this.anchor,t=this.lead;return e.row>t.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?s.fromPoints(t,t):this.isBackwards()?s.fromPoints(t,e):s.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(void 0===t){var r=e||this.lead;e=r.row,t=r.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var r,n="number"==typeof e?e:this.lead.row,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,!0===t?new s(n,0,r,this.session.getLine(r).length):new s(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,-1))this.moveCursorTo(e.start.row,e.start.column);else if(0===t.column)t.row>0&&this.moveCursorTo(t.row-1,this.doc.getLine(t.row-1).length);else{var r=this.session.getTabSize();this.session.isTabStop(t)&&this.doc.getLine(t.row).slice(t.column-r,t.column).split(" ").length-1==r?this.moveCursorBy(0,-r):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e,t=this.lead.getPosition();if(e=this.session.getFoldAt(t.row,t.column,1))this.moveCursorTo(e.end.row,e.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row<this.doc.getLength()-1&&this.moveCursorTo(this.lead.row+1,0);else{var r=this.session.getTabSize();t=this.lead;this.session.isTabStop(t)&&this.doc.getLine(t.row).slice(t.column,t.column+r).split(" ").length-1==r?this.moveCursorBy(0,r):this.moveCursorBy(0,1)}},this.moveCursorLineStart=function(){var e=this.lead.row,t=this.lead.column,r=this.session.documentToScreenRow(e,t),n=this.session.screenToDocumentPosition(r,0),i=this.session.getDisplayLine(e,null,n.row,n.column).match(/^\s*/);i[0].length==t||this.session.$useEmacsStyleLineStart||(n.column+=i[0].length),this.moveCursorToPosition(n)},this.moveCursorLineEnd=function(){var e=this.lead,t=this.session.getDocumentLastRowColumnPosition(e.row,e.column);if(this.lead.column==t.column){var r=this.session.getLine(t.row);if(t.column==r.length){var n=r.search(/\s+$/);n>0&&(t.column=n)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,r=this.doc.getLine(e),n=r.substring(t);this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var i=this.session.getFoldAt(e,t,1);if(i)this.moveCursorTo(i.end.row,i.end.column);else{if(this.session.nonTokenRe.exec(n)&&(t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,n=r.substring(t)),t>=r.length)return this.moveCursorTo(e,r.length),this.moveCursorRight(),void(e<this.doc.getLength()-1&&this.moveCursorWordRight());this.session.tokenRe.exec(n)&&(t+=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(e,t)}},this.moveCursorLongWordLeft=function(){var e,t=this.lead.row,r=this.lead.column;if(e=this.session.getFoldAt(t,r,-1))this.moveCursorTo(e.start.row,e.start.column);else{var n=this.session.getFoldStringAt(t,r,-1);null==n&&(n=this.doc.getLine(t).substring(0,r));var o=i.stringReverse(n);if(this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0,this.session.nonTokenRe.exec(o)&&(r-=this.session.nonTokenRe.lastIndex,o=o.slice(this.session.nonTokenRe.lastIndex),this.session.nonTokenRe.lastIndex=0),r<=0)return this.moveCursorTo(t,0),this.moveCursorLeft(),void(t>0&&this.moveCursorWordLeft());this.session.tokenRe.exec(o)&&(r-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0),this.moveCursorTo(t,r)}},this.$shortWordEndIndex=function(e){var t,r=0,n=/\s/,i=this.session.tokenRe;if(i.lastIndex=0,this.session.tokenRe.exec(e))r=this.session.tokenRe.lastIndex;else{for(;(t=e[r])&&n.test(t);)r++;if(r<1)for(i.lastIndex=0;(t=e[r])&&!i.test(t);)if(i.lastIndex=0,r++,n.test(t)){if(r>2){r--;break}for(;(t=e[r])&&n.test(t);)r++;if(r>2)break}}return i.lastIndex=0,r},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,r=this.doc.getLine(e),n=r.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==r.length){var o=this.doc.getLength();do{e++,n=this.doc.getLine(e)}while(e<o&&/^\s*$/.test(n));/^\s+/.test(n)||(n=""),t=0}var s=this.$shortWordEndIndex(n);this.moveCursorTo(e,t+s)},this.moveCursorShortWordLeft=function(){var e,t=this.lead.row,r=this.lead.column;if(e=this.session.getFoldAt(t,r,-1))return this.moveCursorTo(e.start.row,e.start.column);var n=this.session.getLine(t).substring(0,r);if(0===r){do{t--,n=this.doc.getLine(t)}while(t>0&&/^\s*$/.test(n));r=n.length,/\s+$/.test(n)||(n="")}var o=i.stringReverse(n),s=this.$shortWordEndIndex(o);return this.moveCursorTo(t,r-s)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var r=this.session.documentToScreenPosition(this.lead.row,this.lead.column);0===t&&(this.$desiredColumn?r.column=this.$desiredColumn:this.$desiredColumn=r.column);var n=this.session.screenToDocumentPosition(r.row+e,r.column);0!==e&&0===t&&n.row===this.lead.row&&n.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[n.row]&&(n.row>0||e>0)&&n.row++,this.moveCursorTo(n.row,n.column+t,0===t)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,r){var n=this.session.getFoldAt(e,t,1);n&&(e=n.start.row,t=n.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,r||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,r){var n=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(n.row,n.column,r)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var r=this.getCursor();return s.fromPoints(t,r)}catch(e){return s.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else(e=this.getRange()).isBackwards=this.isBackwards();return e},this.fromJSON=function(e){if(null==e.start){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var r=s.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(r.cursor=r.start),this.addRange(r,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(a.prototype),t.Selection=a}),ace.define("ace/tokenizer",["require","exports","module","ace/config"],function(e,t,r){"use strict";var n=e("./config"),i=2e3,o=function(e){for(var t in this.states=e,this.regExps={},this.matchMappings={},this.states){for(var r=this.states[t],n=[],i=0,o=this.matchMappings[t]={defaultToken:"text"},s="g",a=[],l=0;l<r.length;l++){var c=r[l];if(c.defaultToken&&(o.defaultToken=c.defaultToken),c.caseInsensitive&&(s="gi"),null!=c.regex){c.regex instanceof RegExp&&(c.regex=c.regex.toString().slice(1,-1));var u=c.regex,d=new RegExp("(?:("+u+")|(.))").exec("a").length-2;Array.isArray(c.token)?1==c.token.length||1==d?c.token=c.token[0]:d-1!=c.token.length?(this.reportError("number of classes and regexp groups doesn't match",{rule:c,groupCount:d-1}),c.token=c.token[0]):(c.tokenArray=c.token,c.token=null,c.onMatch=this.$arrayTokens):"function"!=typeof c.token||c.onMatch||(c.onMatch=d>1?this.$applyToken:c.token),d>1&&(/\\\d/.test(c.regex)?u=c.regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+i+1)}):(d=1,u=this.removeCapturingGroups(c.regex)),c.splitRegex||"string"==typeof c.token||a.push(c)),o[i]=l,i+=d,n.push(u),c.onMatch||(c.onMatch=null)}}n.length||(o[0]=0,n.push("$")),a.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,s)},this),this.regExps[t]=new RegExp("("+n.join(")|(")+")|($)",s)}};(function(){this.$setMaxTokenCount=function(e){i=0|e},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),r=this.token.apply(this,t);if("string"==typeof r)return[{type:r,value:e}];for(var n=[],i=0,o=r.length;i<o;i++)t[i]&&(n[n.length]={type:r[i],value:t[i]});return n},this.$arrayTokens=function(e){if(!e)return[];var t=this.splitRegex.exec(e);if(!t)return"text";for(var r=[],n=this.tokenArray,i=0,o=n.length;i<o;i++)t[i+1]&&(r[r.length]={type:n[i],value:t[i+1]});return r},this.removeCapturingGroups=function(e){return e.replace(/\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g,function(e,t){return t?"(?:":e})},this.createSplitterRegexp=function(e,t){if(-1!=e.indexOf("(?=")){var r=0,n=!1,i={};e.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g,function(e,t,o,s,a,l){return n?n="]"!=a:a?n=!0:s?(r==i.stack&&(i.end=l+1,i.stack=-1),r--):o&&(r++,1!=o.length&&(i.stack=r,i.start=l)),e}),null!=i.end&&/^\)*$/.test(e.substr(i.end))&&(e=e.substring(0,i.start)+e.substr(i.end))}return"^"!=e.charAt(0)&&(e="^"+e),"$"!=e.charAt(e.length-1)&&(e+="$"),new RegExp(e,(t||"").replace("g",""))},this.getLineTokens=function(e,t){if(t&&"string"!=typeof t){var r=t.slice(0);"#tmp"===(t=r[0])&&(r.shift(),t=r.shift())}else r=[];var n=t||"start",o=this.states[n];o||(n="start",o=this.states[n]);var s=this.matchMappings[n],a=this.regExps[n];a.lastIndex=0;for(var l,c=[],u=0,d=0,g={type:null,value:""};l=a.exec(e);){var h=s.defaultToken,m=null,p=l[0],_=a.lastIndex;if(_-p.length>u){var f=e.substring(u,_-p.length);g.type==h?g.value+=f:(g.type&&c.push(g),g={type:h,value:f})}for(var b=0;b<l.length-2;b++)if(void 0!==l[b+1]){h=(m=o[s[b]]).onMatch?m.onMatch(p,n,r):m.token,m.next&&(n="string"==typeof m.next?m.next:m.next(n,r),(o=this.states[n])||(this.reportError("state doesn't exist",n),n="start",o=this.states[n]),s=this.matchMappings[n],u=_,(a=this.regExps[n]).lastIndex=_);break}if(p)if("string"==typeof h)m&&!1===m.merge||g.type!==h?(g.type&&c.push(g),g={type:h,value:p}):g.value+=p;else if(h){g.type&&c.push(g),g={type:null,value:""};for(b=0;b<h.length;b++)c.push(h[b])}if(u==e.length)break;if(u=_,d++>i){for(d>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});u<e.length;)g.type&&c.push(g),g={value:e.substring(u,u+=2e3),type:"overflow"};n="start",r=[];break}}return g.type&&c.push(g),r.length>1&&r[0]!==n&&r.unshift("#tmp",n),{tokens:c,state:r.length?r:n}},this.reportError=n.reportError}).call(o.prototype),t.Tokenizer=o}),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,r){"use strict";var n=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(t)for(var r in e){for(var n=e[r],i=0;i<n.length;i++){var o=n[i];(o.next||o.onMatch)&&("string"==typeof o.next&&0!==o.next.indexOf(t)&&(o.next=t+o.next),o.nextState&&0!==o.nextState.indexOf(t)&&(o.nextState=t+o.nextState))}this.$rules[t+r]=n}else for(var r in e)this.$rules[r]=e[r]},this.getRules=function(){return this.$rules},this.embedRules=function(e,t,r,i,o){var s="function"==typeof e?(new e).getRules():e;if(i)for(var a=0;a<i.length;a++)i[a]=t+i[a];else for(var l in i=[],s)i.push(t+l);if(this.addRules(s,t),r){var c=Array.prototype[o?"push":"unshift"];for(a=0;a<i.length;a++)c.apply(this.$rules[i[a]],n.deepCopy(r))}this.$embeds||(this.$embeds=[]),this.$embeds.push(t)},this.getEmbeds=function(){return this.$embeds};var e=function(e,t){return("start"!=e||t.length)&&t.unshift(this.nextState,e),this.nextState},t=function(e,t){return t.shift(),t.shift()||"start"};this.normalizeRules=function(){var r=0,n=this.$rules;Object.keys(n).forEach(function i(o){var s=n[o];s.processed=!0;for(var a=0;a<s.length;a++){var l=s[a],c=null;Array.isArray(l)&&(c=l,l={}),!l.regex&&l.start&&(l.regex=l.start,l.next||(l.next=[]),l.next.push({defaultToken:l.token},{token:l.token+".end",regex:l.end||l.start,next:"pop"}),l.token=l.token+".start",l.push=!0);var u=l.next||l.push;if(u&&Array.isArray(u)){var d=l.stateName;d||("string"!=typeof(d=l.token)&&(d=d[0]||""),n[d]&&(d+=r++)),n[d]=u,l.next=d,i(d)}else"pop"==u&&(l.next=t);if(l.push&&(l.nextState=l.next||l.push,l.next=e,delete l.push),l.rules)for(var g in l.rules)n[g]?n[g].push&&n[g].push.apply(n[g],l.rules[g]):n[g]=l.rules[g];var h="string"==typeof l?l:"string"==typeof l.include?l.include:"";if(h&&(c=n[h]),c){var m=[a,1].concat(c);l.noEscape&&(m=m.filter(function(e){return!e.next})),s.splice.apply(s,m),a--}l.keywordMap&&(l.token=this.createKeywordMapper(l.keywordMap,l.defaultToken||"text",l.caseInsensitive),delete l.defaultToken)}},this)},this.createKeywordMapper=function(e,t,r,n){var i=Object.create(null);return Object.keys(e).forEach(function(t){var o=e[t];r&&(o=o.toLowerCase());for(var s=o.split(n||"|"),a=s.length;a--;)i[s[a]]=t}),Object.getPrototypeOf(i)&&(i.__proto__=null),this.$keywordList=Object.keys(i),e=null,r?function(e){return i[e.toLowerCase()]||t}:function(e){return i[e]||t}},this.getKeywords=function(){return this.$keywords}}).call(i.prototype),t.TextHighlightRules=i}),ace.define("ace/mode/behaviour",["require","exports","module"],function(e,t,r){"use strict";var n=function(){this.$behaviours={}};(function(){this.add=function(e,t,r){switch(void 0){case this.$behaviours:this.$behaviours={};case this.$behaviours[e]:this.$behaviours[e]={}}this.$behaviours[e][t]=r},this.addBehaviours=function(e){for(var t in e)for(var r in e[t])this.add(t,r,e[t][r])},this.remove=function(e){this.$behaviours&&this.$behaviours[e]&&delete this.$behaviours[e]},this.inherit=function(e,t){if("function"==typeof e)var r=(new e).getBehaviours(t);else r=e.getBehaviours(t);this.addBehaviours(r)},this.getBehaviours=function(e){if(e){for(var t={},r=0;r<e.length;r++)this.$behaviours[e[r]]&&(t[e[r]]=this.$behaviours[e[r]]);return t}return this.$behaviours}}).call(n.prototype),t.Behaviour=n}),ace.define("ace/token_iterator",["require","exports","module"],function(e,t,r){"use strict";var n=function(e,t,r){this.$session=e,this.$row=t,this.$rowTokens=e.getTokens(t);var n=e.getTokenAt(t,r);this.$tokenIndex=n?n.index:-1};(function(){this.stepBackward=function(){for(this.$tokenIndex-=1;this.$tokenIndex<0;){if(this.$row-=1,this.$row<0)return this.$row=0,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=this.$rowTokens.length-1}return this.$rowTokens[this.$tokenIndex]},this.stepForward=function(){var e;for(this.$tokenIndex+=1;this.$tokenIndex>=this.$rowTokens.length;){if(this.$row+=1,e||(e=this.$session.getLength()),this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,r=e[t].start;if(void 0!==r)return r;for(r=0;t>0;)r+=e[t-=1].value.length;return r},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(n.prototype),t.TokenIterator=n}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n,i=e("../../lib/oop"),o=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","punctuation.operator"],c=["text","paren.rparen","punctuation.operator","comment"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add("braces","insertion",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if("{"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(""!==u&&"{"!==u&&r.getWrapBehavioursEnabled())return g(c,u,"{","}");if(h.isSaneInsertion(r,i))return/[\]\}\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(r,i,"{"),{text:"{",selection:[1,1]})}else if("}"==o){if(d(r),"}"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket("}",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==o||"\r\n"==o){d(r);var m="";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat("}",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),"}"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:"\n"+f+"\n"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&"{"==s){if(d(r),"}"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,r,n,i){if("("==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"(",")");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,")"),{text:"()",selection:[1,1]}}else if(")"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("parens","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"("==o&&(d(r),")"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("brackets","insertion",function(e,t,r,n,i){if("["==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"[","]");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,"]"),{text:"[]",selection:[1,1]}}else if("]"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("brackets","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"["==o&&(d(r),"]"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){if(this.lineCommentStart&&-1!=this.lineCommentStart.indexOf(i))return;d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(""!==a&&"'"!==a&&'"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if("\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)(_=f!==b)&&/string\.end/.test(p.type)&&(_=!1);else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;_=!0}return{text:_?o+o:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||"text",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||"text",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define("ace/unicode",["require","exports","module"],function(e,t,r){"use strict";t.packages={},function(e){var r=/\w{4}/g;for(var n in e)t.packages[n]=e[n].replace(r,"\\u$&")}({L:"0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",Ll:"0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A",Lu:"0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A",Lt:"01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC",Lm:"02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F",Lo:"01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC",M:"0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26",Mn:"0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26",Mc:"0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC",Me:"0488048906DE20DD-20E020E2-20E4A670-A672",N:"0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nd:"0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19",Nl:"16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF",No:"00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835",P:"0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65",Pd:"002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D",Ps:"0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62",Pe:"0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63",Pi:"00AB2018201B201C201F20392E022E042E092E0C2E1C2E20",Pf:"00BB2019201D203A2E032E052E0A2E0D2E1D2E21",Pc:"005F203F20402054FE33FE34FE4D-FE4FFF3F",Po:"0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65",S:"0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD",Sm:"002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC",Sc:"002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6",Sk:"005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3",So:"00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD",Z:"002000A01680180E2000-200A20282029202F205F3000",Zs:"002000A01680180E2000-200A202F205F3000",Zl:"2028",Zp:"2029",C:"0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF",Cc:"0000-001F007F-009F",Cf:"00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB",Co:"E000-F8FF",Cs:"D800-DFFF",Cn:"03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF"})}),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour/cstyle","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],function(e,t,r){"use strict";var n=e("../tokenizer").Tokenizer,i=e("./text_highlight_rules").TextHighlightRules,o=e("./behaviour/cstyle").CstyleBehaviour,s=e("../unicode"),a=e("../lib/lang"),l=e("../token_iterator").TokenIterator,c=e("../range").Range,u=function(){this.HighlightRules=i};(function(){this.$defaultBehaviour=new o,this.tokenRe=new RegExp("^["+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+s.packages.L+s.packages.Mn+s.packages.Mc+s.packages.Nd+s.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules(this.$highlightRuleConfig),this.$tokenizer=new n(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,r,n){var i=t.doc,o=!0,s=!0,l=1/0,c=t.getTabSize(),u=!1;if(this.lineCommentStart){if(Array.isArray(this.lineCommentStart))p=this.lineCommentStart.map(a.escapeRegExp).join("|"),h=this.lineCommentStart[0];else p=a.escapeRegExp(this.lineCommentStart),h=this.lineCommentStart;p=new RegExp("^(\\s*)(?:"+p+") ?"),u=t.getUseSoftTabs();b=function(e,t){var r=e.match(p);if(r){var n=r[1].length,o=r[0].length;g(e,n,o)||" "!=r[0][o-1]||o--,i.removeInLine(t,n,o)}};var d=h+" ",g=(f=function(e,t){o&&!/\S/.test(e)||(g(e,l,l)?i.insertInLine({row:t,column:l},d):i.insertInLine({row:t,column:l},h))},y=function(e,t){return p.test(e)},function(e,t,r){for(var n=0;t--&&" "==e.charAt(t);)n++;if(n%c!=0)return!1;for(n=0;" "==e.charAt(r++);)n++;return c>2?n%c!=c-1:n%c==0})}else{if(!this.blockComment)return!1;var h=this.blockComment.start,m=this.blockComment.end,p=new RegExp("^(\\s*)(?:"+a.escapeRegExp(h)+")"),_=new RegExp("(?:"+a.escapeRegExp(m)+")\\s*$"),f=function(e,t){y(e,t)||o&&!/\S/.test(e)||(i.insertInLine({row:t,column:e.length},m),i.insertInLine({row:t,column:l},h))},b=function(e,t){var r;(r=e.match(_))&&i.removeInLine(t,e.length-r[0].length,e.length),(r=e.match(p))&&i.removeInLine(t,r[1].length,r[0].length)},y=function(e,r){if(p.test(e))return!0;for(var n=t.getTokens(r),i=0;i<n.length;i++)if("comment"===n[i].type)return!0}}function x(e){for(var t=r;t<=n;t++)e(i.getLine(t),t)}var v=1/0;x(function(e,t){var r=e.search(/\S/);-1!==r?(r<l&&(l=r),s&&!y(e,t)&&(s=!1)):v>e.length&&(v=e.length)}),l==1/0&&(l=v,o=!1,s=!1),u&&l%c!=0&&(l=Math.floor(l/c)*c),x(s?b:f)},this.toggleBlockComment=function(e,t,r,n){var i=this.blockComment;if(i){!i.start&&i[0]&&(i=i[0]);var o,s,a=(p=new l(t,n.row,n.column)).getCurrentToken(),u=(t.selection,t.selection.toOrientedRange());if(a&&/comment/.test(a.type)){for(var d,g;a&&/comment/.test(a.type);){if(-1!=(_=a.value.indexOf(i.start))){var h=p.getCurrentTokenRow(),m=p.getCurrentTokenColumn()+_;d=new c(h,m,h,m+i.start.length);break}a=p.stepBackward()}var p;for(a=(p=new l(t,n.row,n.column)).getCurrentToken();a&&/comment/.test(a.type);){var _;if(-1!=(_=a.value.indexOf(i.end))){h=p.getCurrentTokenRow(),m=p.getCurrentTokenColumn()+_;g=new c(h,m,h,m+i.end.length);break}a=p.stepForward()}g&&t.remove(g),d&&(t.remove(d),o=d.start.row,s=-i.start.length)}else s=i.start.length,o=r.start.row,t.insert(r.end,i.end),t.insert(r.start,i.start);u.start.row==o&&(u.start.column+=s),u.end.row==o&&(u.end.column+=s),t.selection.fromOrientedRange(u)}},this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.autoOutdent=function(e,t,r){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){for(var t in this.$embeds=[],this.$modes={},e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var r=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(t=0;t<r.length;t++)(function(e){var n=r[t],i=e[n];e[r[t]]=function(){return this.$delegator(n,arguments,i)}})(this)},this.$delegator=function(e,t,r){var n=t[0];"string"!=typeof n&&(n=n[0]);for(var i=0;i<this.$embeds.length;i++)if(this.$modes[this.$embeds[i]]){var o=n.split(this.$embeds[i]);if(!o[0]&&o[1]){t[0]=o[1];var s=this.$modes[this.$embeds[i]];return s[e].apply(s,t)}}var a=r.apply(this,t);return r?a:void 0},this.transformAction=function(e,t,r,n,i){if(this.$behaviour){var o=this.$behaviour.getBehaviours();for(var s in o)if(o[s][t]){var a=o[s][t].apply(this,arguments);if(a)return a}}},this.getKeywords=function(e){if(!this.completionKeywords){var t=this.$tokenizer.rules,r=[];for(var n in t)for(var i=t[n],o=0,s=i.length;o<s;o++)if("string"==typeof i[o].token)/keyword|support|storage/.test(i[o].token)&&r.push(i[o].regex);else if("object"==typeof i[o].token)for(var a=0,l=i[o].token.length;a<l;a++)if(/keyword|support|storage/.test(i[o].token[a])){n=i[o].regex.match(/\(.+?\)/g)[a];r.push(n.substr(1,n.length-2))}this.completionKeywords=r}return e?r.concat(this.$keywordList||[]):this.$keywordList},this.$createKeywordList=function(){return this.$highlightRules||this.getTokenizer(),this.$keywordList=this.$highlightRules.$keywordList||[]},this.getCompletions=function(e,t,r,n){return(this.$keywordList||this.$createKeywordList()).map(function(e){return{name:e,value:e,score:0,meta:"keyword"}})},this.$id="ace/mode/text"}).call(u.prototype),t.Mode=u}),ace.define("ace/apply_delta",["require","exports","module"],function(e,t,r){"use strict";t.applyDelta=function(e,t,r){var n=t.start.row,i=t.start.column,o=e[n]||"";switch(t.action){case"insert":if(1===t.lines.length)e[n]=o.substring(0,i)+t.lines[0]+o.substring(i);else{var s=[n,1].concat(t.lines);e.splice.apply(e,s),e[n]=o.substring(0,i)+e[n],e[n+t.lines.length-1]+=o.substring(i)}break;case"remove":var a=t.end.column,l=t.end.row;n===l?e[n]=o.substring(0,i)+o.substring(a):e.splice(n,l-n+1,o.substring(0,i)+e[l].substring(a))}}}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,o=t.Anchor=function(e,t,r){this.$onChange=this.onChange.bind(this),this.attach(e),void 0===r?this.setPosition(t.row,t.column):this.setPosition(t,r)};(function(){function e(e,t,r){var n=r?e.column<=t.column:e.column<t.column;return e.row<t.row||e.row==t.row&&n}n.implement(this,i),this.getPosition=function(){return this.$clipPositionToDocument(this.row,this.column)},this.getDocument=function(){return this.document},this.$insertRight=!1,this.onChange=function(t){if(!(t.start.row==t.end.row&&t.start.row!=this.row||t.start.row>this.row)){var r=function(t,r,n){var i="insert"==t.action,o=(i?1:-1)*(t.end.row-t.start.row),s=(i?1:-1)*(t.end.column-t.start.column),a=t.start,l=i?a:t.end;if(e(r,a,n))return{row:r.row,column:r.column};if(e(l,r,!n))return{row:r.row+o,column:r.column+(r.row==l.row?s:0)};return{row:a.row,column:a.column}}(t,{row:this.row,column:this.column},this.$insertRight);this.setPosition(r.row,r.column,!0)}},this.setPosition=function(e,t,r){var n;if(n=r?{row:e,column:t}:this.$clipPositionToDocument(e,t),this.row!=n.row||this.column!=n.column){var i={row:this.row,column:this.column};this.row=n.row,this.column=n.column,this._signal("change",{old:i,value:n})}},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var r={};return e>=this.document.getLength()?(r.row=Math.max(0,this.document.getLength()-1),r.column=this.document.getLine(r.row).length):e<0?(r.row=0,r.column=0):(r.row=e,r.column=Math.min(this.document.getLine(r.row).length,Math.max(0,t))),t<0&&(r.column=0),r}}).call(o.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./apply_delta").applyDelta,o=e("./lib/event_emitter").EventEmitter,s=e("./range").Range,a=e("./anchor").Anchor,l=function(e){this.$lines=[""],0===e.length?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){n.implement(this,o),this.setValue=function(e){var t=this.getLength()-1;this.remove(new s(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new a(this,e,t)},0==="aaa".split(/a/).length?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){this.$newLineMode!==e&&(this.$newLineMode=e,this._signal("changeNewLineMode"))},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return"\r\n"==e||"\r"==e||"\n"==e},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{(t=this.getLines(e.start.row,e.end.row))[0]=(t[0]||"").substring(e.start.column);var r=t.length-1;e.end.row-e.start.row==r&&(t[r]=t[r].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var r=this.clippedPos(e.row,e.column),n=this.pos(e.row,e.column+t.length);return this.applyDelta({start:r,end:n,action:"insert",lines:[t]},!0),this.clonePos(n)},this.clippedPos=function(e,t){var r=this.getLength();void 0===e?e=r:e<0?e=0:e>=r&&(e=r-1,t=void 0);var n=this.getLine(e);return null==t&&(t=n.length),{row:e,column:t=Math.min(Math.max(t,0),n.length)}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){var r=0;(e=Math.min(Math.max(e,0),this.getLength()))<this.getLength()?(t=t.concat([""]),r=0):(t=[""].concat(t),e--,r=this.$lines[e].length),this.insertMergedLines({row:e,column:r},t)},this.insertMergedLines=function(e,t){var r=this.clippedPos(e.row,e.column),n={row:r.row+t.length-1,column:(1==t.length?r.column:0)+t[t.length-1].length};return this.applyDelta({start:r,end:n,action:"insert",lines:t}),this.clonePos(n)},this.remove=function(e){var t=this.clippedPos(e.start.row,e.start.column),r=this.clippedPos(e.end.row,e.end.column);return this.applyDelta({start:t,end:r,action:"remove",lines:this.getLinesForRange({start:t,end:r})}),this.clonePos(t)},this.removeInLine=function(e,t,r){var n=this.clippedPos(e,t),i=this.clippedPos(e,r);return this.applyDelta({start:n,end:i,action:"remove",lines:this.getLinesForRange({start:n,end:i})},!0),this.clonePos(n)},this.removeFullLines=function(e,t){e=Math.min(Math.max(0,e),this.getLength()-1);var r=(t=Math.min(Math.max(0,t),this.getLength()-1))==this.getLength()-1&&e>0,n=t<this.getLength()-1,i=r?e-1:e,o=r?this.getLine(i).length:0,a=n?t+1:t,l=n?0:this.getLine(a).length,c=new s(i,o,a,l),u=this.$lines.slice(e,t+1);return this.applyDelta({start:c.start,end:c.end,action:"remove",lines:this.getLinesForRange(c)}),u},this.removeNewLine=function(e){e<this.getLength()-1&&e>=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){return e instanceof s||(e=s.fromPoints(e.start,e.end)),0===t.length&&e.isEmpty()?e.start:t==this.getTextRange(e)?e.end:(this.remove(e),t?this.insert(e.start,t):e.start)},this.applyDeltas=function(e){for(var t=0;t<e.length;t++)this.applyDelta(e[t])},this.revertDeltas=function(e){for(var t=e.length-1;t>=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var r="insert"==e.action;(r?e.lines.length<=1&&!e.lines[0]:!s.comparePoints(e.start,e.end))||(r&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal("change",e))},this.$splitAndapplyLargeDelta=function(e,t){for(var r=e.lines,n=r.length,i=e.start.row,o=e.start.column,s=0,a=0;;){s=a,a+=t-1;var l=r.slice(s,a);if(a>n){e.lines=l,e.start.row=i+s,e.start.column=o;break}l.push(""),this.applyDelta({start:this.pos(i+s,o),end:this.pos(i+a,o=0),action:e.action,lines:l},!0)}},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:"insert"==e.action?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){for(var r=this.$lines||this.getAllLines(),n=this.getNewLineCharacter().length,i=t||0,o=r.length;i<o;i++)if((e-=r[i].length+n)<0)return{row:i,column:e+r[i].length+n};return{row:o-1,column:r[o-1].length}},this.positionToIndex=function(e,t){for(var r=this.$lines||this.getAllLines(),n=this.getNewLineCharacter().length,i=0,o=Math.min(e.row,r.length),s=t||0;s<o;++s)i+=r[s].length+n;return i+e.column}}).call(l.prototype),t.Document=l}),ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,o=function(e,t){this.running=!1,this.lines=[],this.states=[],this.currentLine=0,this.tokenizer=e;var r=this;this.$worker=function(){if(r.running){for(var e=new Date,t=r.currentLine,n=-1,i=r.doc,o=t;r.lines[t];)t++;var s=i.getLength(),a=0;for(r.running=!1;t<s;){r.$tokenizeRow(t),n=t;do{t++}while(r.lines[t]);if(++a%5==0&&new Date-e>20){r.running=setTimeout(r.$worker,20);break}}r.currentLine=t,o<=n&&r.fireUpdateEvent(o,n)}}};(function(){n.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var r={first:e,last:t};this._signal("update",{data:r})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,r=e.end.row-t;if(0===r)this.lines[t]=null;else if("remove"==e.action)this.lines.splice(t,r+1,null),this.states.splice(t,r+1,null);else{var n=Array(r+1);n.unshift(t,1),this.lines.splice.apply(this.lines,n),this.states.splice.apply(this.states,n)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),r=this.states[e-1],n=this.tokenizer.getLineTokens(t,r,e);return this.states[e]+""!=n.state+""?(this.states[e]=n.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=n.tokens}}).call(o.prototype),t.BackgroundTokenizer=o}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,r){"use strict";var n=e("./lib/lang"),i=(e("./lib/oop"),e("./range").Range),o=function(e,t,r){this.setRegexp(e),this.clazz=t,this.type=r||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){this.regExp+""!=e+""&&(this.regExp=e,this.cache=[])},this.update=function(e,t,r,o){if(this.regExp)for(var s=o.firstRow,a=o.lastRow,l=s;l<=a;l++){var c=this.cache[l];null==c&&((c=n.getMatchOffsets(r.getLine(l),this.regExp)).length>this.MAX_RANGES&&(c=c.slice(0,this.MAX_RANGES)),c=c.map(function(e){return new i(l,e.offset,l,e.offset+e.length)}),this.cache[l]=c.length?c:"");for(var u=c.length;u--;)t.drawSingleLineMarker(e,c[u].toScreenRange(r),this.clazz,o)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range;function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var r=t[t.length-1];this.range=new n(t[0].start.row,t[0].start.column,r.end.row,r.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.row<this.startRow||e.endRow>this.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,r){var n,i,o=0,s=this.folds,a=!0;null==t&&(t=this.end.row,r=this.end.column);for(var l=0;l<s.length;l++){if(-1==(i=(n=s[l]).range.compareStart(t,r)))return void e(null,t,r,o,a);if(!e(null,n.start.row,n.start.column,o,a)&&e(n.placeholder,n.start.row,n.start.column,o)||0===i)return;a=!n.sameRow,o=n.end.column}e(null,t,r,o,a)},this.getNextFoldTo=function(e,t){for(var r,n,i=0;i<this.folds.length;i++){if(-1==(n=(r=this.folds[i]).range.compareEnd(e,t)))return{fold:r,kind:"after"};if(0===n)return{fold:r,kind:"inside"}}return null},this.addRemoveChars=function(e,t,r){var n,i,o=this.getNextFoldTo(e,t);if(o)if(n=o.fold,"inside"==o.kind&&n.start.column!=t&&n.start.row!=e)window.console&&window.console.log(e,t,n);else if(n.start.row==e){var s=(i=this.folds).indexOf(n);for(0===s&&(this.start.column+=r);s<i.length;s++){if((n=i[s]).start.column+=r,!n.sameRow)return;n.end.column+=r}this.end.column+=r}},this.split=function(e,t){var r=this.getNextFoldTo(e,t);if(!r||"inside"==r.kind)return null;var n=r.fold,o=this.folds,s=this.foldData,a=o.indexOf(n),l=o[a-1];this.end.row=l.end.row,this.end.column=l.end.column;var c=new i(s,o=o.splice(a,o.length-a));return s.splice(s.indexOf(this)+1,0,c),c},this.merge=function(e){for(var t=e.folds,r=0;r<t.length;r++)this.addFold(t[r]);var n=this.foldData;n.splice(n.indexOf(e),1)},this.toString=function(){var e=[this.range.toString()+": ["];return this.folds.forEach(function(t){e.push(" "+t.toString())}),e.push("]"),e.join("\n")},this.idxToPosition=function(e){for(var t=0,r=0;r<this.folds.length;r++){var n=this.folds[r];if((e-=n.start.column-t)<0)return{row:n.start.row,column:n.start.column+e};if((e-=n.placeholder.length)<0)return n.start;t=n.end.column}return{row:this.end.row,column:this.end.column+e}}}).call(i.prototype),t.FoldLine=i}),ace.define("ace/range_list",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("./range").Range.comparePoints,i=function(){this.ranges=[]};(function(){this.comparePoints=n,this.pointIndex=function(e,t,r){for(var i=this.ranges,o=r||0;o<i.length;o++){var s=i[o],a=n(e,s.end);if(!(a>0)){var l=n(e,s.start);return 0===a?t&&0!==l?-o-2:o:l>0||0===l&&!t?o:-o-1}}return-o-1},this.add=function(e){var t=!e.isEmpty(),r=this.pointIndex(e.start,t);r<0&&(r=-r-1);var n=this.pointIndex(e.end,t,r);return n<0?n=-n-1:n++,this.ranges.splice(r,n-r,e)},this.addList=function(e){for(var t=[],r=e.length;r--;)t.push.apply(t,this.add(e[r]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){for(var e,t=[],r=this.ranges,i=(r=r.sort(function(e,t){return n(e.start,t.start)}))[0],o=1;o<r.length;o++){e=i,i=r[o];var s=n(e.end,i.start);s<0||(0!=s||e.isEmpty()||i.isEmpty())&&(n(e.end,i.end)<0&&(e.end.row=i.end.row,e.end.column=i.end.column),r.splice(o,1),t.push(i),i=e,o--)}return this.ranges=r,t},this.contains=function(e,t){return this.pointIndex({row:e,column:t})>=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var r=this.ranges;if(r[0].start.row>t||r[r.length-1].start.row<e)return[];var n=this.pointIndex({row:e,column:0});n<0&&(n=-n-1);var i=this.pointIndex({row:t,column:0},n);i<0&&(i=-i-1);for(var o=[],s=n;s<i;s++)o.push(r[s]);return o},this.removeAll=function(){return this.ranges.splice(0,this.ranges.length)},this.attach=function(e){this.session&&this.detach(),this.session=e,this.onChange=this.$onChange.bind(this),this.session.on("change",this.onChange)},this.detach=function(){this.session&&(this.session.removeListener("change",this.onChange),this.session=null)},this.$onChange=function(e){if("insert"==e.action)var t=e.start,r=e.end;else r=e.start,t=e.end;for(var n=t.row,i=r.row-n,o=-t.column+r.column,s=this.ranges,a=0,l=s.length;a<l;a++){if(!((c=s[a]).end.row<n)){if(c.start.row>n)break;if(c.start.row==n&&c.start.column>=t.column&&(c.start.column==t.column&&this.$insertRight||(c.start.column+=o,c.start.row+=i)),c.end.row==n&&c.end.column>=t.column){if(c.end.column==t.column&&this.$insertRight)continue;c.end.column==t.column&&o>0&&a<l-1&&c.end.column>c.start.column&&c.end.column==s[a+1].start.column&&(c.end.column-=o),c.end.column+=o,c.end.row+=i}}}if(0!=i&&a<l)for(;a<l;a++){var c;(c=s[a]).start.row+=i,c.end.row+=i}}}).call(i.prototype),t.RangeList=i}),ace.define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"],function(e,t,r){"use strict";e("../range").Range;var n=e("../range_list").RangeList,i=e("../lib/oop"),o=t.Fold=function(e,t){this.foldLine=null,this.placeholder=t,this.range=e,this.start=e.start,this.end=e.end,this.sameRow=e.start.row==e.end.row,this.subFolds=this.ranges=[]};function s(e,t){e.row-=t.row,0==e.row&&(e.column-=t.column)}function a(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row}i.inherits(o,n),function(){this.toString=function(){return'"'+this.placeholder+'" '+this.range.toString()},this.setFoldLine=function(e){this.foldLine=e,this.subFolds.forEach(function(t){t.setFoldLine(e)})},this.clone=function(){var e=this.range.clone(),t=new o(e,this.placeholder);return this.subFolds.forEach(function(e){t.subFolds.push(e.clone())}),t.collapseChildren=this.collapseChildren,t},this.addSubFold=function(e){if(!this.range.isEqual(e)){if(!this.range.containsRange(e))throw new Error("A fold can't intersect already existing fold"+e.range+this.range);var t,r;t=e,r=this.start,s(t.start,r),s(t.end,r);for(var n=e.start.row,i=e.start.column,o=0,a=-1;o<this.subFolds.length&&1==(a=this.subFolds[o].range.compare(n,i));o++);var l=this.subFolds[o];if(0==a)return l.addSubFold(e);n=e.range.end.row,i=e.range.end.column;var c=o;for(a=-1;c<this.subFolds.length&&1==(a=this.subFolds[c].range.compare(n,i));c++);this.subFolds[c];if(0==a)throw new Error("A fold can't intersect already existing fold"+e.range+this.range);this.subFolds.splice(o,c-o,e);return e.setFoldLine(this.foldLine),e}},this.restoreRange=function(e){return function(e,t){a(e.start,t),a(e.end,t)}(e,this.start)}}.call(o.prototype)}),ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../range").Range,i=e("./fold_line").FoldLine,o=e("./fold").Fold,s=e("../token_iterator").TokenIterator;t.Folding=function(){this.getFoldAt=function(e,t,r){var n=this.getFoldLine(e);if(!n)return null;for(var i=n.folds,o=0;o<i.length;o++){var s=i[o];if(s.range.contains(e,t)){if(1==r&&s.range.isEnd(e,t))continue;if(-1==r&&s.range.isStart(e,t))continue;return s}}},this.getFoldsInRange=function(e){var t=e.start,r=e.end,n=this.$foldData,i=[];t.column+=1,r.column-=1;for(var o=0;o<n.length;o++){var s=n[o].range.compareRange(e);if(2!=s){if(-2==s)break;for(var a=n[o].folds,l=0;l<a.length;l++){var c=a[l];if(-2==(s=c.range.compareRange(e)))break;if(2!=s){if(42==s)break;i.push(c)}}}}return t.column-=1,r.column+=1,i},this.getFoldsInRangeList=function(e){if(Array.isArray(e)){var t=[];e.forEach(function(e){t=t.concat(this.getFoldsInRange(e))},this)}else t=this.getFoldsInRange(e);return t},this.getAllFolds=function(){for(var e=[],t=this.$foldData,r=0;r<t.length;r++)for(var n=0;n<t[r].folds.length;n++)e.push(t[r].folds[n]);return e},this.getFoldStringAt=function(e,t,r,n){if(!(n=n||this.getFoldLine(e)))return null;for(var i,o,s={end:{column:0}},a=0;a<n.folds.length;a++){var l=(o=n.folds[a]).range.compareEnd(e,t);if(-1==l){i=this.getLine(o.start.row).substring(s.end.column,o.start.column);break}if(0===l)return null;s=o}return i||(i=this.getLine(o.start.row).substring(s.end.column)),-1==r?i.substring(0,t-s.end.column):1==r?i.substring(t-s.end.column):i},this.getFoldLine=function(e,t){var r=this.$foldData,n=0;for(t&&(n=r.indexOf(t)),-1==n&&(n=0);n<r.length;n++){var i=r[n];if(i.start.row<=e&&i.end.row>=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var r=this.$foldData,n=0;for(t&&(n=r.indexOf(t)),-1==n&&(n=0);n<r.length;n++){var i=r[n];if(i.end.row>=e)return i}return null},this.getFoldedRowCount=function(e,t){for(var r=this.$foldData,n=t-e+1,i=0;i<r.length;i++){var o=r[i],s=o.end.row,a=o.start.row;if(s>=t){a<t&&(a>=e?n-=t-a:n=0);break}s>=e&&(n-=a>=e?s-a:s-e+1)}return n},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var r,n=this.$foldData,s=!1;e instanceof o?r=e:(r=new o(t,e)).collapseChildren=t.collapseChildren,this.$clipRangeToDocument(r.range);var a=r.start.row,l=r.start.column,c=r.end.row,u=r.end.column;if(!(a<c||a==c&&l<=u-2))throw new Error("The range has to be at least 2 characters width");var d=this.getFoldAt(a,l,1),g=this.getFoldAt(c,u,-1);if(d&&g==d)return d.addSubFold(r);d&&!d.range.isStart(a,l)&&this.removeFold(d),g&&!g.range.isEnd(c,u)&&this.removeFold(g);var h=this.getFoldsInRange(r.range);h.length>0&&(this.removeFolds(h),h.forEach(function(e){r.addSubFold(e)}));for(var m=0;m<n.length;m++){var p=n[m];if(c==p.start.row){p.addFold(r),s=!0;break}if(a==p.end.row){if(p.addFold(r),s=!0,!r.sameRow){var _=n[m+1];if(_&&_.start.row==c){p.merge(_);break}}break}if(c<=p.start.row)break}return s||(p=this.$addFoldLine(new i(this.$foldData,r))),this.$useWrapMode?this.$updateWrapData(p.start.row,p.start.row):this.$updateRowLengthCache(p.start.row,p.start.row),this.$modified=!0,this._signal("changeFold",{data:r,action:"add"}),r},this.addFolds=function(e){e.forEach(function(e){this.addFold(e)},this)},this.removeFold=function(e){var t=e.foldLine,r=t.start.row,n=t.end.row,i=this.$foldData,o=t.folds;if(1==o.length)i.splice(i.indexOf(t),1);else if(t.range.isEnd(e.end.row,e.end.column))o.pop(),t.end.row=o[o.length-1].end.row,t.end.column=o[o.length-1].end.column;else if(t.range.isStart(e.start.row,e.start.column))o.shift(),t.start.row=o[0].start.row,t.start.column=o[0].start.column;else if(e.sameRow)o.splice(o.indexOf(e),1);else{var s=t.split(e.start.row,e.start.column);(o=s.folds).shift(),s.start.row=o[0].start.row,s.start.column=o[0].start.column}this.$updating||(this.$useWrapMode?this.$updateWrapData(r,n):this.$updateRowLengthCache(r,n)),this.$modified=!0,this._signal("changeFold",{data:e,action:"remove"})},this.removeFolds=function(e){for(var t=[],r=0;r<e.length;r++)t.push(e[r]);t.forEach(function(e){this.removeFold(e)},this),this.$modified=!0},this.expandFold=function(e){this.removeFold(e),e.subFolds.forEach(function(t){e.restoreRange(t),this.addFold(t)},this),e.collapseChildren>0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var r,i;if(null==e?(r=new n(0,0,this.getLength(),0),t=!0):r="number"==typeof e?new n(e,0,e,this.getLine(e).length):"row"in e?n.fromPoints(e,e):e,i=this.getFoldsInRangeList(r),t)this.removeFolds(i);else for(var o=i;o.length;)this.expandFolds(o),o=this.getFoldsInRangeList(r);if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var r=this.getFoldLine(e,t);return r?r.end.row:e},this.getRowFoldStart=function(e,t){var r=this.getFoldLine(e,t);return r?r.start.row:e},this.getFoldDisplayLine=function(e,t,r,n,i){null==n&&(n=e.start.row),null==i&&(i=0),null==t&&(t=e.end.row),null==r&&(r=this.getLine(t).length);var o=this.doc,s="";return e.walk(function(e,t,r,a){if(!(t<n)){if(t==n){if(r<i)return;a=Math.max(i,a)}s+=null!=e?e:o.getLine(t).substring(a,r)}},t,r),s},this.getDisplayLine=function(e,t,r,n){var i,o=this.getFoldLine(e);return o?this.getFoldDisplayLine(o,e,t,r,n):(i=this.doc.getLine(e)).substring(n||0,t||i.length)},this.$cloneFoldData=function(){var e=[];return e=this.$foldData.map(function(t){var r=t.folds.map(function(e){return e.clone()});return new i(e,r)})},this.toggleFold=function(e){var t,r,n=this.selection.getRange();if(n.isEmpty()){var i=n.start;if(t=this.getFoldAt(i.row,i.column))return void this.expandFold(t);(r=this.findMatchingBracket(i))?1==n.comparePoint(r)?n.end=r:(n.start=r,n.start.column++,n.end.column--):(r=this.findMatchingBracket({row:i.row,column:i.column+1}))?(1==n.comparePoint(r)?n.end=r:n.start=r,n.start.column++):n=this.getCommentFoldRange(i.row,i.column)||n}else{var o=this.getFoldsInRange(n);if(e&&o.length)return void this.expandFolds(o);1==o.length&&(t=o[0])}if(t||(t=this.getFoldAt(n.start.row,n.start.column)),t&&t.range.toString()==n.toString())this.expandFold(t);else{var s="...";if(!n.isMultiLine()){if((s=this.getTextRange(n)).length<4)return;s=s.trim().substring(0,2)+".."}this.addFold(s,n)}},this.getCommentFoldRange=function(e,t,r){var i=new s(this,e,t),o=i.getCurrentToken();if(o&&/^comment|string/.test(o.type)){var a=new n,l=new RegExp(o.type.replace(/\..*/,"\\."));if(1!=r){do{o=i.stepBackward()}while(o&&l.test(o.type));i.stepForward()}if(a.start.row=i.getCurrentTokenRow(),a.start.column=i.getCurrentTokenColumn()+2,i=new s(this,e,t),-1!=r){do{o=i.stepForward()}while(o&&l.test(o.type));o=i.stepBackward()}else o=i.getCurrentToken();return a.end.row=i.getCurrentTokenRow(),a.end.column=i.getCurrentTokenColumn()+o.value.length-2,a}},this.foldAll=function(e,t,r){null==r&&(r=1e5);var n=this.foldWidgets;if(n){t=t||this.getLength();for(var i=e=e||0;i<t;i++)if(null==n[i]&&(n[i]=this.getFoldWidget(i)),"start"==n[i]){var o=this.getFoldWidgetRange(i);if(o&&o.isMultiLine()&&o.end.row<=t&&o.start.row>=e){i=o.end.row;try{var s=this.addFold("...",o);s&&(s.collapseChildren=r)}catch(e){}}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle!=e){this.$foldStyle=e,"manual"==e&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)}},this.$setFolding=function(e){this.$foldMode!=e&&(this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation"),e&&"manual"!=this.$foldStyle?(this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)):this.foldWidgets=null)},this.getParentFoldRangeData=function(e,t){var r=this.foldWidgets;if(!r||t&&r[e])return{};for(var n,i=e-1;i>=0;){var o=r[i];if(null==o&&(o=r[i]=this.getFoldWidget(i)),"start"==o){var s=this.getFoldWidgetRange(i);if(n||(n=s),s&&s.end.row>=e)break}i--}return{range:-1!==i&&s,firstRange:n}},this.onFoldWidgetClick=function(e,t){var r={children:(t=t.domEvent).shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey};if(!this.$toggleFoldWidget(e,r)){var n=t.target||t.srcElement;n&&/ace_fold-widget/.test(n.className)&&(n.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(this.getFoldWidget){var r=this.getFoldWidget(e),n=this.getLine(e),i="end"===r?-1:1,o=this.getFoldAt(e,-1===i?0:n.length,i);if(o)return t.children||t.all?this.removeFold(o):this.expandFold(o),o;var s=this.getFoldWidgetRange(e,!0);if(s&&!s.isMultiLine()&&(o=this.getFoldAt(s.start.row,s.start.column,1))&&s.isEqual(o.range))return this.removeFold(o),o;if(t.siblings){var a=this.getParentFoldRangeData(e);if(a.range)var l=a.range.start.row+1,c=a.range.end.row;this.foldAll(l,c,t.all?1e4:0)}else t.children?(c=s?s.end.row:this.getLength(),this.foldAll(e+1,c,t.all?1e4:0)):s&&(t.all&&(s.collapseChildren=1e4),this.addFold("...",s));return s}},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var r=this.$toggleFoldWidget(t,{});if(!r){var n=this.getParentFoldRangeData(t,!0);if(r=n.range||n.firstRange){t=r.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold("...",r)}}},this.updateFoldWidgets=function(e){var t=e.start.row,r=e.end.row-t;if(0===r)this.foldWidgets[t]=null;else if("remove"==e.action)this.foldWidgets.splice(t,r+1,null);else{var n=Array(r+1);n.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,n)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,r){"use strict";var n=e("../token_iterator").TokenIterator,i=e("../range").Range;t.BracketMatch=function(){this.findMatchingBracket=function(e,t){if(0==e.column)return null;var r=t||this.getLine(e.row).charAt(e.column-1);if(""==r)return null;var n=r.match(/([\(\[\{])|([\)\]\}])/);return n?n[1]?this.$findClosingBracket(n[1],e):this.$findOpeningBracket(n[2],e):null},this.getBracketRange=function(e){var t,r=this.getLine(e.row),n=!0,o=r.charAt(e.column-1),s=o&&o.match(/([\(\[\{])|([\)\]\}])/);if(s||(o=r.charAt(e.column),e={row:e.row,column:e.column+1},s=o&&o.match(/([\(\[\{])|([\)\]\}])/),n=!1),!s)return null;if(s[1]){if(!(a=this.$findClosingBracket(s[1],e)))return null;t=i.fromPoints(e,a),n||(t.end.column++,t.start.column--),t.cursor=t.end}else{var a;if(!(a=this.$findOpeningBracket(s[2],e)))return null;t=i.fromPoints(a,e),n||(t.start.column++,t.end.column--),t.cursor=t.start}return t},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,r){var i=this.$brackets[e],o=1,s=new n(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){r||(r=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-s.getCurrentTokenColumn()-2,c=a.value;;){for(;l>=0;){var u=c.charAt(l);if(u==i){if(0==(o-=1))return{row:s.getCurrentTokenRow(),column:l+s.getCurrentTokenColumn()}}else u==e&&(o+=1);l-=1}do{a=s.stepBackward()}while(a&&!r.test(a.type));if(null==a)break;l=(c=a.value).length-1}return null}},this.$findClosingBracket=function(e,t,r){var i=this.$brackets[e],o=1,s=new n(this,t.row,t.column),a=s.getCurrentToken();if(a||(a=s.stepForward()),a){r||(r=new RegExp("(\\.?"+a.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));for(var l=t.column-s.getCurrentTokenColumn();;){for(var c=a.value,u=c.length;l<u;){var d=c.charAt(l);if(d==i){if(0==(o-=1))return{row:s.getCurrentTokenRow(),column:l+s.getCurrentTokenColumn()}}else d==e&&(o+=1);l+=1}do{a=s.stepForward()}while(a&&!r.test(a.type));if(null==a)break;l=0}return null}}}}),ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","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(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/lang"),o=e("./config"),s=e("./lib/event_emitter").EventEmitter,a=e("./selection").Selection,l=e("./mode/text").Mode,c=e("./range").Range,u=e("./document").Document,d=e("./background_tokenizer").BackgroundTokenizer,g=e("./search_highlight").SearchHighlight,h=function(e,t){this.$breakpoints=[],this.$decorations=[],this.$frontMarkers={},this.$backMarkers={},this.$markerId=1,this.$undoSelect=!0,this.$foldData=[],this.id="session"+ ++h.$uid,this.$foldData.toString=function(){return this.join("\n")},this.on("changeFold",this.onChangeFold.bind(this)),this.$onChange=this.onChange.bind(this),"object"==typeof e&&e.getLine||(e=new u(e)),this.setDocument(e),this.selection=new a(this),o.resetOptions(this),this.setMode(t),o._signal("session",this)};(function(){n.implement(this,s),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e)return this.$docRowCache=[],void(this.$screenRowCache=[]);var t=this.$docRowCache.length,r=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>r&&(this.$docRowCache.splice(r,t),this.$screenRowCache.splice(r,t))},this.$getRowCacheIndex=function(e,t){for(var r=0,n=e.length-1;r<=n;){var i=r+n>>1,o=e[i];if(t>o)r=i+1;else{if(!(t<o))return i;n=i-1}}return r-1},this.resetCaches=function(){this.$modified=!0,this.$wrapData=[],this.$rowLengthCache=[],this.$resetRowCache(0),this.bgTokenizer&&this.bgTokenizer.start(0)},this.onChangeFold=function(e){var t=e.data;this.$resetRowCache(t.start.row)},this.onChange=function(e){this.$modified=!0,this.$resetRowCache(e.start.row);var t=this.$updateInternalDataOnChange(e);this.$fromUndo||!this.$undoManager||e.ignore||(this.$deltasDoc.push(e),t&&0!=t.length&&this.$deltasFold.push({action:"removeFolds",folds:t}),this.$informUndoManager.schedule()),this.bgTokenizer&&this.bgTokenizer.$updateOnChange(e),this._signal("change",e)},this.setValue=function(e){this.doc.setValue(e),this.selection.moveTo(0,0),this.$resetRowCache(0),this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.setUndoManager(this.$undoManager),this.getUndoManager().reset()},this.getValue=this.toString=function(){return this.doc.getValue()},this.getSelection=function(){return this.selection},this.getState=function(e){return this.bgTokenizer.getState(e)},this.getTokens=function(e){return this.bgTokenizer.getTokens(e)},this.getTokenAt=function(e,t){var r,n=this.bgTokenizer.getTokens(e),i=0;if(null==t)o=n.length-1,i=this.getLine(e).length;else for(var o=0;o<n.length&&!((i+=n[o].value.length)>=t);o++);return(r=n[o])?(r.index=o,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){if(this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel(),e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):"\t"},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t<e.length;t++)this.$breakpoints[e[t]]="ace_breakpoint";this._signal("changeBreakpoint",{})},this.clearBreakpoints=function(){this.$breakpoints=[],this._signal("changeBreakpoint",{})},this.setBreakpoint=function(e,t){void 0===t&&(t="ace_breakpoint"),t?this.$breakpoints[e]=t:delete this.$breakpoints[e],this._signal("changeBreakpoint",{})},this.clearBreakpoint=function(e){delete this.$breakpoints[e],this._signal("changeBreakpoint",{})},this.addMarker=function(e,t,r,n){var i=this.$markerId++,o={range:e,type:r||"line",renderer:"function"==typeof r?r:null,clazz:t,inFront:!!n,id:i};return n?(this.$frontMarkers[i]=o,this._signal("changeFrontMarker")):(this.$backMarkers[i]=o,this._signal("changeBackMarker")),i},this.addDynamicMarker=function(e,t){if(e.update){var r=this.$markerId++;return e.id=r,e.inFront=!!t,t?(this.$frontMarkers[r]=e,this._signal("changeFrontMarker")):(this.$backMarkers[r]=e,this._signal("changeBackMarker")),e}},this.removeMarker=function(e){var t=this.$frontMarkers[e]||this.$backMarkers[e];if(t){var r=t.inFront?this.$frontMarkers:this.$backMarkers;t&&(delete r[e],this._signal(t.inFront?"changeFrontMarker":"changeBackMarker"))}},this.getMarkers=function(e){return e?this.$frontMarkers:this.$backMarkers},this.highlight=function(e){if(!this.$searchHighlight){var t=new g(null,"ace_selected-word","text");this.$searchHighlight=this.addDynamicMarker(t)}this.$searchHighlight.setRegexp(e)},this.highlightLines=function(e,t,r,n){"number"!=typeof t&&(r=t,t=e),r||(r="ace_step");var i=new c(e,0,t,1/0);return i.id=this.addMarker(i,r,"fullLine",n),i},this.setAnnotations=function(e){this.$annotations=e,this._signal("changeAnnotation",{})},this.getAnnotations=function(){return this.$annotations||[]},this.clearAnnotations=function(){this.setAnnotations([])},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r?\n)/m);this.$autoNewLine=t?t[1]:"\n"},this.getWordRange=function(e,t){var r=this.getLine(e),n=!1;if(t>0&&(n=!!r.charAt(t-1).match(this.tokenRe)),n||(n=!!r.charAt(t).match(this.tokenRe)),n)var i=this.tokenRe;else if(/^\s+$/.test(r.slice(t-1,t+1)))i=/\s/;else i=this.nonTokenRe;var o=t;if(o>0){do{o--}while(o>=0&&r.charAt(o).match(i));o++}for(var s=t;s<r.length&&r.charAt(s).match(i);)s++;return new c(e,o,e,s)},this.getAWordRange=function(e,t){for(var r=this.getWordRange(e,t),n=this.getLine(r.end.row);n.charAt(r.end.column).match(/[ \t]/);)r.end.column+=1;return r},this.setNewLineMode=function(e){this.doc.setNewLineMode(e)},this.getNewLineMode=function(){return this.doc.getNewLineMode()},this.setUseWorker=function(e){this.setOption("useWorker",e)},this.getUseWorker=function(){return this.$useWorker},this.onReloadTokenizer=function(e){var t=e.data;this.bgTokenizer.start(t.first),this._signal("tokenizerUpdate",e)},this.$modes={},this.$mode=null,this.$modeId=null,this.setMode=function(e,t){if(e&&"object"==typeof e){if(e.getTokenizer)return this.$onChangeMode(e);var r=e,n=r.path}else n=e||"ace/mode/text";if(this.$modes["ace/mode/text"]||(this.$modes["ace/mode/text"]=new l),this.$modes[n]&&!r)return this.$onChangeMode(this.$modes[n]),void(t&&t());this.$modeId=n,o.loadModule(["mode",n],function(e){if(this.$modeId!==n)return t&&t();this.$modes[n]&&!r?this.$onChangeMode(this.$modes[n]):e&&e.Mode&&(e=new e.Mode(r),r||(this.$modes[n]=e,e.$id=n),this.$onChangeMode(e)),t&&t()}.bind(this)),this.$mode||this.$onChangeMode(this.$modes["ace/mode/text"],!0)},this.$onChangeMode=function(e,t){if(t||(this.$modeId=e.$id),this.$mode!==e){this.$mode=e,this.$stopWorker(),this.$useWorker&&this.$startWorker();var r=e.getTokenizer();if(void 0!==r.addEventListener){var n=this.onReloadTokenizer.bind(this);r.addEventListener("update",n)}if(this.bgTokenizer)this.bgTokenizer.setTokenizer(r);else{this.bgTokenizer=new d(r);var i=this;this.bgTokenizer.addEventListener("update",function(e){i._signal("tokenizerUpdate",e)})}this.bgTokenizer.setDocument(this.getDocument()),this.tokenRe=e.tokenRe,this.nonTokenRe=e.nonTokenRe,t||(e.attachToSession&&e.attachToSession(this),this.$options.wrapMethod.set.call(this,this.$wrapMethod),this.$setFolding(e.foldingRules),this.bgTokenizer.start(0),this._emit("changeMode"))}},this.$stopWorker=function(){this.$worker&&(this.$worker.terminate(),this.$worker=null)},this.$startWorker=function(){try{this.$worker=this.$mode.createWorker(this)}catch(e){o.warn("Could not load worker",e),this.$worker=null}},this.getMode=function(){return this.$mode},this.$scrollTop=0,this.setScrollTop=function(e){this.$scrollTop===e||isNaN(e)||(this.$scrollTop=e,this._signal("changeScrollTop",e))},this.getScrollTop=function(){return this.$scrollTop},this.$scrollLeft=0,this.setScrollLeft=function(e){this.$scrollLeft===e||isNaN(e)||(this.$scrollLeft=e,this._signal("changeScrollLeft",e))},this.getScrollLeft=function(){return this.$scrollLeft},this.getScreenWidth=function(){return this.$computeWidth(),this.lineWidgets?Math.max(this.getLineWidgetMaxWidth(),this.screenWidth):this.screenWidth},this.getLineWidgetMaxWidth=function(){if(null!=this.lineWidgetsWidth)return this.lineWidgetsWidth;var e=0;return this.lineWidgets.forEach(function(t){t&&t.screenWidth>e&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){if(this.$modified=!1,this.$useWrapMode)return this.screenWidth=this.$wrapLimit;for(var t=this.doc.getAllLines(),r=this.$rowLengthCache,n=0,i=0,o=this.$foldData[i],s=o?o.start.row:1/0,a=t.length,l=0;l<a;l++){if(l>s){if((l=o.end.row+1)>=a)break;s=(o=this.$foldData[i++])?o.start.row:1/0}null==r[l]&&(r[l]=this.$getStringScreenWidth(t[l])[0]),r[l]>n&&(n=r[l])}this.screenWidth=n}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var r=null,n=e.length-1;-1!=n;n--){var i=e[n];"doc"==i.group?(this.doc.revertDeltas(i.deltas),r=this.$getUndoSelection(i.deltas,!0,r)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,r&&this.$undoSelect&&!t&&this.selection.setSelectionRange(r),r}},this.redoChanges=function(e,t){if(e.length){this.$fromUndo=!0;for(var r=null,n=0;n<e.length;n++){var i=e[n];"doc"==i.group&&(this.doc.applyDeltas(i.deltas),r=this.$getUndoSelection(i.deltas,!1,r))}return this.$fromUndo=!1,r&&this.$undoSelect&&!t&&this.selection.setSelectionRange(r),r}},this.setUndoSelect=function(e){this.$undoSelect=e},this.$getUndoSelection=function(e,t,r){function n(e){return t?"insert"!==e.action:"insert"===e.action}var i,o,s=e[0];n(s)?i=c.fromPoints(s.start,s.end):i=c.fromPoints(s.start,s.start);for(var a=1;a<e.length;a++)n(s=e[a])?(o=s.start,-1==i.compare(o.row,o.column)&&i.setStart(o),o=s.end,1==i.compare(o.row,o.column)&&i.setEnd(o),!0):(o=s.start,-1==i.compare(o.row,o.column)&&(i=c.fromPoints(s.start,s.start)),!1);if(null!=r){0===c.comparePoints(r.start,i.start)&&(r.start.column+=i.end.column-i.start.column,r.end.column+=i.end.column-i.start.column);var l=r.compareRange(i);1==l?i.setStart(r.start):-1==l&&i.setEnd(r.end)}return i},this.replace=function(e,t){return this.doc.replace(e,t)},this.moveText=function(e,t,r){var n=this.getTextRange(e),i=this.getFoldsInRange(e),o=c.fromPoints(t,t);if(!r){this.remove(e);var s=e.start.row-e.end.row;(u=s?-e.end.column:e.start.column-e.end.column)&&(o.start.row==e.end.row&&o.start.column>e.end.column&&(o.start.column+=u),o.end.row==e.end.row&&o.end.column>e.end.column&&(o.end.column+=u)),s&&o.start.row>=e.end.row&&(o.start.row+=s,o.end.row+=s)}if(o.end=this.insert(o.start,n),i.length){var a=e.start,l=o.start,u=(s=l.row-a.row,l.column-a.column);this.addFolds(i.map(function(e){return(e=e.clone()).start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=s,e.end.row+=s,e}))}return o},this.indentRows=function(e,t,r){r=r.replace(/\t/g,this.getTabString());for(var n=e;n<=t;n++)this.doc.insertInLine({row:n,column:0},r)},this.outdentRows=function(e){for(var t=e.collapseRows(),r=new c(0,0,0,0),n=this.getTabSize(),i=t.start.row;i<=t.end.row;++i){var o=this.getLine(i);r.start.row=i,r.end.row=i;for(var s=0;s<n&&" "==o.charAt(s);++s);s<n&&"\t"==o.charAt(s)?(r.start.column=s,r.end.column=s+1):(r.start.column=0,r.end.column=s),this.remove(r)}},this.$moveLines=function(e,t,r){if(e=this.getRowFoldStart(e),t=this.getRowFoldEnd(t),r<0){if((i=this.getRowFoldStart(e+r))<0)return 0;var n=i-e}else if(r>0){var i;if((i=this.getRowFoldEnd(t+r))>this.doc.getLength()-1)return 0;n=i-t}else{e=this.$clipRowToDocument(e);n=(t=this.$clipRowToDocument(t))-e+1}var o=new c(e,0,t,Number.MAX_VALUE),s=this.getFoldsInRange(o).map(function(e){return(e=e.clone()).start.row+=n,e.end.row+=n,e}),a=0==r?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+n,a),s.length&&this.addFolds(s),n},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){if(t=Math.max(0,t),e<0)e=0,t=0;else{var r=this.doc.getLength();e>=r?(e=r-1,t=this.doc.getLine(r-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){if(this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0),e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){this.$wrapLimitRange.min===e&&this.$wrapLimitRange.max===t||(this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$useWrapMode&&this._signal("changeWrapMode"))},this.adjustWrapLimit=function(e,t){var r=this.$wrapLimitRange;r.max<0&&(r={min:t,max:t});var n=this.$constrainWrapLimit(e,r.min,r.max);return n!=this.$wrapLimit&&n>1&&(this.$wrapLimit=n,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0)},this.$constrainWrapLimit=function(e,t,r){return t&&(e=Math.max(t,e)),r&&(e=Math.min(r,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,r=e.action,n=e.start,i=e.end,o=n.row,s=i.row,a=s-o,l=null;if(this.$updating=!0,0!=a)if("remove"===r){this[t?"$wrapData":"$rowLengthCache"].splice(o,a);var c=this.$foldData;l=this.getFoldsInRange(e),this.removeFolds(l);var u=0;if(p=this.getFoldLine(i.row)){p.addRemoveChars(i.row,i.column,n.column-i.column),p.shiftRow(-a);var d=this.getFoldLine(o);d&&d!==p&&(d.merge(p),p=d),u=c.indexOf(p)+1}for(;u<c.length;u++){(p=c[u]).start.row>=i.row&&p.shiftRow(-a)}s=o}else{var g=Array(a);g.unshift(o,0);var h=t?this.$wrapData:this.$rowLengthCache;h.splice.apply(h,g);c=this.$foldData,u=0;if(p=this.getFoldLine(o)){var m=p.range.compareInside(n.row,n.column);0==m?(p=p.split(n.row,n.column))&&(p.shiftRow(a),p.addRemoveChars(s,0,i.column-n.column)):-1==m&&(p.addRemoveChars(o,0,i.column-n.column),p.shiftRow(a)),u=c.indexOf(p)+1}for(;u<c.length;u++){var p;(p=c[u]).start.row>=o&&p.shiftRow(a)}}else a=Math.abs(e.start.column-e.end.column),"remove"===r&&(l=this.getFoldsInRange(e),this.removeFolds(l),a=-a),(p=this.getFoldLine(o))&&p.addRemoveChars(o,n.column,a);return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(o,s):this.$updateRowLengthCache(o,s),l},this.$updateRowLengthCache=function(e,t,r){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(r,n){var i,o,s=this.doc.getAllLines(),a=this.getTabSize(),l=this.$wrapData,c=this.$wrapLimit,u=r;for(n=Math.min(n,s.length-1);u<=n;)(o=this.getFoldLine(u,o))?(i=[],o.walk(function(r,n,o,a){var l;if(null!=r){(l=this.$getDisplayTokens(r,i.length))[0]=e;for(var c=1;c<l.length;c++)l[c]=t}else l=this.$getDisplayTokens(s[n].substring(a,o),i.length);i=i.concat(l)}.bind(this),o.end.row,s[o.end.row].length+1),l[o.start.row]=this.$computeWrapSplits(i,c,a),u=o.end.row+1):(i=this.$getDisplayTokens(s[u]),l[u]=this.$computeWrapSplits(i,c,a),u++)};var e=3,t=4;function r(e){return!(e<4352)&&(e>=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510)}this.$computeWrapSplits=function(r,n,i){if(0==r.length)return[];var o=[],s=r.length,a=0,l=0,c=this.$wrapAsCode,u=this.$indentedSoftWrap,d=n<=Math.max(2*i,8)||!1===u?0:Math.floor(n/2);function g(e){var t=r.slice(a,e),n=t.length;t.join("").replace(/12/g,function(){n-=1}).replace(/2/g,function(){n-=1}),o.length||(h=function(){var e=0;if(0===d)return e;if(u)for(var t=0;t<r.length;t++){var n=r[t];if(10==n)e+=1;else{if(11!=n){if(12==n)continue;break}e+=i}}return c&&!1!==u&&(e+=i),Math.min(e,d)}(),o.indent=h),l+=n,o.push(l),a=e}for(var h=0;s-a>n-h;){var m=a+n-h;if(r[m-1]>=10&&r[m]>=10)g(m);else if(r[m]!=e&&r[m]!=t){for(var p=Math.max(m-(n-(n>>2)),a-1);m>p&&r[m]<e;)m--;if(c){for(;m>p&&r[m]<e;)m--;for(;m>p&&9==r[m];)m--}else for(;m>p&&r[m]<10;)m--;m>p?g(++m):(2==r[m=a+n]&&m--,g(m-h))}else{for(;m!=a-1&&r[m]!=e;m--);if(m>a){g(m);continue}for(m=a+n;m<r.length&&r[m]==t;m++);if(m==r.length)break;g(m)}}return o},this.$getDisplayTokens=function(e,t){var n,i=[];t=t||0;for(var o=0;o<e.length;o++){var s=e.charCodeAt(o);if(9==s){n=this.getScreenTabSize(i.length+t),i.push(11);for(var a=1;a<n;a++)i.push(12)}else 32==s?i.push(10):s>39&&s<48||s>57&&s<64?i.push(9):s>=4352&&r(s)?i.push(1,2):i.push(1)}return i},this.$getStringScreenWidth=function(e,t,n){if(0==t)return[0,0];var i,o;for(null==t&&(t=1/0),n=n||0,o=0;o<e.length&&(9==(i=e.charCodeAt(o))?n+=this.getScreenTabSize(n):i>=4352&&r(i)?n+=2:n+=1,!(n>t));o++);return[n,o]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.getRowLineCount=function(e){return this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1:1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),r=this.$wrapData[t.row];return r.length&&r[0]<t.column?r.indent:0}return 0},this.getScreenLastRowColumn=function(e){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE);return this.documentToScreenColumn(t.row,t.column)},this.getDocumentLastRowColumn=function(e,t){var r=this.documentToScreenRow(e,t);return this.getScreenLastRowColumn(r)},this.getDocumentLastRowColumnPosition=function(e,t){var r=this.documentToScreenRow(e,t);return this.screenToDocumentPosition(r,Number.MAX_VALUE/10)},this.getRowSplitData=function(e){return this.$useWrapMode?this.$wrapData[e]:void 0},this.getScreenTabSize=function(e){return this.$tabSize-e%this.$tabSize},this.screenToDocumentRow=function(e,t){return this.screenToDocumentPosition(e,t).row},this.screenToDocumentColumn=function(e,t){return this.screenToDocumentPosition(e,t).column},this.screenToDocumentPosition=function(e,t){if(e<0)return{row:0,column:0};var r,n,i=0,o=0,s=0,a=0,l=this.$screenRowCache,c=this.$getRowCacheIndex(l,e),u=l.length;if(u&&c>=0){s=l[c],i=this.$docRowCache[c];var d=e>l[u-1]}else d=!u;for(var g=this.getLength()-1,h=this.getNextFoldLine(i),m=h?h.start.row:1/0;s<=e&&!(s+(a=this.getRowLength(i))>e||i>=g);)s+=a,++i>m&&(i=h.end.row+1,m=(h=this.getNextFoldLine(i,h))?h.start.row:1/0),d&&(this.$docRowCache.push(i),this.$screenRowCache.push(s));if(h&&h.start.row<=i)r=this.getFoldDisplayLine(h),i=h.start.row;else{if(s+a<=e||i>g)return{row:g,column:this.getLine(g).length};r=this.getLine(i),h=null}var p=0;if(this.$useWrapMode){var _=this.$wrapData[i];if(_){var f=Math.floor(e-s);n=_[f],f>0&&_.length&&(p=_.indent,o=_[f-1]||_[_.length-1],r=r.substring(o))}}return o+=this.$getStringScreenWidth(r,t-p)[1],this.$useWrapMode&&o>=n&&(o=n-1),h?h.idxToPosition(o):{row:i,column:o}},this.documentToScreenPosition=function(e,t){if(void 0===t)var r=this.$clipPositionToDocument(e.row,e.column);else r=this.$clipPositionToDocument(e,t);e=r.row,t=r.column;var n,i=0,o=null;(n=this.getFoldAt(e,t,1))&&(e=n.start.row,t=n.start.column);var s,a=0,l=this.$docRowCache,c=this.$getRowCacheIndex(l,e),u=l.length;if(u&&c>=0){a=l[c],i=this.$screenRowCache[c];var d=e>l[u-1]}else d=!u;for(var g=this.getNextFoldLine(a),h=g?g.start.row:1/0;a<e;){if(a>=h){if((s=g.end.row+1)>e)break;h=(g=this.getNextFoldLine(s,g))?g.start.row:1/0}else s=a+1;i+=this.getRowLength(a),a=s,d&&(this.$docRowCache.push(a),this.$screenRowCache.push(i))}var m="";g&&a>=h?(m=this.getFoldDisplayLine(g,e,t),o=g.start.row):(m=this.getLine(e).substring(0,t),o=e);var p=0;if(this.$useWrapMode){var _=this.$wrapData[o];if(_){for(var f=0;m.length>=_[f];)i++,f++;m=m.substring(_[f-1]||0,m.length),p=f>0?_.indent:0}}return{row:i,column:p+this.$getStringScreenWidth(m)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(this.$useWrapMode)for(var r=this.$wrapData.length,n=0,i=(a=0,(t=this.$foldData[a++])?t.start.row:1/0);n<r;){var o=this.$wrapData[n];e+=o?o.length+1:1,++n>i&&(n=t.end.row+1,i=(t=this.$foldData[a++])?t.start.row:1/0)}else{e=this.getLength();for(var s=this.$foldData,a=0;a<s.length;a++)e-=(t=s[a]).end.row-t.start.row}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){this.$enableVarChar&&(this.$getStringScreenWidth=function(t,r,n){if(0===r)return[0,0];var i,o;for(r||(r=1/0),n=n||0,o=0;o<t.length&&!((n+="\t"===(i=t.charAt(o))?this.getScreenTabSize(n):e.getCharacterWidth(i))>r);o++);return[n,o]})},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(h.prototype),e("./edit_session/folding").Folding.call(h.prototype),e("./edit_session/bracket_match").BracketMatch.call(h.prototype),o.defineOptions(h.prototype,"session",{wrap:{set:function(e){if(e&&"off"!=e?"free"==e?e=!0:"printMargin"==e?e=-1:"string"==typeof e&&(e=parseInt(e,10)||!1):e=!1,this.$wrap!=e)if(this.$wrap=e,e){var t="number"==typeof e?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}else this.setUseWrapMode(!1)},get:function(){return this.getUseWrapMode()?-1==this.$wrap?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){(e="auto"==e?"text"!=this.$mode.type:"text"!=e)!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){isNaN(e)||this.$tabSize===e||(this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize"))},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=h}),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,r){"use strict";var n=e("./lib/lang"),i=e("./lib/oop"),o=e("./range").Range,s=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return n.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,r=this.$matchIterator(e,t);if(!r)return!1;var n=null;return r.forEach(function(e,r,i){if(e.start)n=e;else{var s=e.offset+(i||0);if(n=new o(r,s,r,s+e.length),!e.length&&t.start&&t.start.start&&0!=t.skipCurrent&&n.isEqual(t.start))return n=null,!1}return!0}),n},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var r=t.range,i=r?e.getLines(r.start.row,r.end.row):e.doc.getAllLines(),s=[],a=t.re;if(t.$isMultiLine){var l,c=a.length,u=i.length-c;e:for(var d=a.offset||0;d<=u;d++){for(var g=0;g<c;g++)if(-1==i[d+g].search(a[g]))continue e;var h=i[d],m=i[d+c-1],p=h.length-h.match(a[0])[0].length,_=m.match(a[c-1])[0].length;l&&l.end.row===d&&l.end.column>p||(s.push(l=new o(d,p,d+c-1,_)),c>2&&(d=d+c-2))}}else for(var f=0;f<i.length;f++){var b=n.getMatchOffsets(i[f],a);for(g=0;g<b.length;g++){var y=b[g];s.push(new o(f,y.offset,f,y.offset+y.length))}}if(r){var x=r.start.column,v=r.start.column;for(f=0,g=s.length-1;f<g&&s[f].start.column<x&&s[f].start.row==r.start.row;)f++;for(;f<g&&s[g].end.column>v&&s[g].end.row==r.end.row;)g--;for(s=s.slice(f,g+1),f=0,g=s.length;f<g;f++)s[f].start.row+=r.start.row,s[f].end.row+=r.start.row}return s},this.replace=function(e,t){var r=this.$options,n=this.$assembleRegExp(r);if(r.$isMultiLine)return t;if(n){var i=n.exec(e);if(!i||i[0].length!=e.length)return null;if(t=e.replace(n,t),r.preserveCase){t=t.split("");for(var o=Math.min(e.length,e.length);o--;){var s=e[o];s&&s.toLowerCase()!=s?t[o]=t[o].toUpperCase():t[o]=t[o].toLowerCase()}t=t.join("")}return t}},this.$matchIterator=function(e,t){var r,i=this.$assembleRegExp(t);if(!i)return!1;if(t.$isMultiLine)var s=i.length,a=function(t,n,a){var l=t.search(i[0]);if(-1!=l){for(var c=1;c<s;c++)if(-1==(t=e.getLine(n+c)).search(i[c]))return;var u=t.match(i[s-1])[0].length,d=new o(n,l,n+s-1,u);return 1==i.offset?(d.start.row--,d.start.column=Number.MAX_VALUE):a&&(d.start.column+=a),!!r(d)||void 0}};else if(t.backwards)a=function(e,t,o){for(var s=n.getMatchOffsets(e,i),a=s.length-1;a>=0;a--)if(r(s[a],t,o))return!0};else a=function(e,t,o){for(var s=n.getMatchOffsets(e,i),a=0;a<s.length;a++)if(r(s[a],t,o))return!0};var l=this.$lineIterator(e,t);return{forEach:function(e){r=e,l.forEach(a)}}},this.$assembleRegExp=function(e,t){if(e.needle instanceof RegExp)return e.re=e.needle;var r=e.needle;if(!e.needle)return e.re=!1;e.regExp||(r=n.escapeRegExp(r)),e.wholeWord&&(r=function(e,t){function r(e){return/\w/.test(e)||t.regExp?"\\b":""}return r(e[0])+e+r(e[e.length-1])}(r,e));var i=e.caseSensitive?"gm":"gmi";if(e.$isMultiLine=!t&&/[\n\r]/.test(r),e.$isMultiLine)return e.re=this.$assembleMultilineRegExp(r,i);try{var o=new RegExp(r,i)}catch(e){o=!1}return e.re=o},this.$assembleMultilineRegExp=function(e,t){for(var r=e.replace(/\r\n|\r|\n/g,"$\n^").split("\n"),n=[],i=0;i<r.length;i++)try{n.push(new RegExp(r[i],t))}catch(e){return!1}return""==r[0]?(n.shift(),n.offset=1):n.offset=0,n},this.$lineIterator=function(e,t){var r=1==t.backwards,n=0!=t.skipCurrent,i=t.range,o=t.start;o||(o=i?i[r?"end":"start"]:e.selection.getRange()),o.start&&(o=o[n!=r?"end":"start"]);var s=i?i.start.row:0,a=i?i.end.row:e.getLength()-1;return{forEach:r?function(r){var n=o.row;if(!r(e.getLine(n).substring(0,o.column),n)){for(n--;n>=s;n--)if(r(e.getLine(n),n))return;if(0!=t.wrap)for(n=a,s=o.row;n>=s;n--)if(r(e.getLine(n),n))return}}:function(r){var n=o.row;if(!r(e.getLine(n).substr(o.column),n,o.column)){for(n+=1;n<=a;n++)if(r(e.getLine(n),n))return;if(0!=t.wrap)for(n=s,a=o.row;n<=a;n++)if(r(e.getLine(n),n))return}}}}}).call(s.prototype),t.Search=s}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,r){"use strict";var n=e("../lib/keys"),i=e("../lib/useragent"),o=n.KEY_MODS;function s(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function a(e,t){s.call(this,e,t),this.$singleCommand=!1}a.prototype=s.prototype,function(){function e(e){return"object"==typeof e&&e.bindKey&&e.bindKey.position||0}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var r=e&&("string"==typeof e?e:e.name);e=this.commands[r],t||delete this.commands[r];var n=this.commandKeyBinding;for(var i in n){var o=n[i];if(o==e)delete n[i];else if(Array.isArray(o)){var s=o.indexOf(e);-1!=s&&(o.splice(s,1),1==o.length&&(n[i]=o[0]))}}},this.bindKey=function(e,t,r){if("object"==typeof e&&e&&(null==r&&(r=e.position),e=e[this.platform]),e)return"function"==typeof t?this.addCommand({exec:t,bindKey:e,name:t.name||e}):void e.split("|").forEach(function(e){var n="";if(-1!=e.indexOf(" ")){var i=e.split(/\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),r=o[t.hashId]+t.key;n+=(n?" ":"")+r,this._addCommandToBinding(n,"chainKeys")},this),n+=" "}var s=this.parseKeys(e),a=o[s.hashId]+s.key;this._addCommandToBinding(n+a,t,r)},this)},this._addCommandToBinding=function(t,r,n){var i,o=this.commandKeyBinding;if(r)if(!o[t]||this.$singleCommand)o[t]=r;else{Array.isArray(o[t])?-1!=(i=o[t].indexOf(r))&&o[t].splice(i,1):o[t]=[o[t]],"number"!=typeof n&&(n=n||r.isDefault?-100:e(r));var s=o[t];for(i=0;i<s.length;i++){if(e(s[i])>n)break}s.splice(i,0,r)}else delete o[t]},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var r=e[t];if(r){if("string"==typeof r)return this.bindKey(r,t);"function"==typeof r&&(r={exec:r}),"object"==typeof r&&(r.name||(r.name=t),this.addCommand(r))}},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),r=t.pop(),i=n[r];if(n.FUNCTION_KEYS[i])r=n.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:r,hashId:-1};if(1==t.length&&"shift"==t[0])return{key:r.toUpperCase(),hashId:-1}}for(var o=0,s=t.length;s--;){var a=n.KEY_MODS[t[s]];if(null==a)return"undefined"!=typeof console&&console.error("invalid modifier "+t[s]+" in "+e),!1;o|=a}return{key:r,hashId:o}},this.findKeyCommand=function(e,t){var r=o[e]+t;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,r,n){if(!(n<0)){var i=o[t]+r,s=this.commandKeyBinding[i];return e.$keyChain&&(e.$keyChain+=" "+i,s=this.commandKeyBinding[e.$keyChain]||s),!s||"chainKeys"!=s&&"chainKeys"!=s[s.length-1]?(e.$keyChain&&(t&&4!=t||1!=r.length?(-1==t||n>0)&&(e.$keyChain=""):e.$keyChain=e.$keyChain.slice(0,-i.length-1)),{command:s}):(e.$keyChain=e.$keyChain||i,{command:"null"})}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(s.prototype),t.HashHandler=s,t.MultiHashHandler=a}),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../keyboard/hash_handler").MultiHashHandler,o=e("../lib/event_emitter").EventEmitter,s=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};n.inherits(s,i),function(){n.implement(this,o),this.exec=function(e,t,r){if(Array.isArray(e)){for(var n=e.length;n--;)if(this.exec(e[n],t,r))return!0;return!1}if("string"==typeof e&&(e=this.commands[e]),!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var i={editor:t,command:e,args:r};return i.returnValue=this._emit("exec",i),this._signal("afterExec",i),!1!==i.returnValue},this.toggleRecording=function(e){if(!this.$inReplay)return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(!this.$inReplay&&this.macro){if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){"string"==typeof t?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}}},this.trimMacro=function(e){return e.map(function(e){return"string"!=typeof e[0]&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(s.prototype),t.CommandManager=s}),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,t,r){"use strict";var n=e("../lib/lang"),i=e("../config"),o=e("../range").Range;function s(e,t){return{win:e,mac:t}}t.commands=[{name:"showSettingsMenu",bindKey:s("Ctrl-,","Command-,"),exec:function(e){i.loadModule("ace/ext/settings_menu",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",bindKey:s("Alt-E","F4"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:s("Alt-Shift-E","Shift-F4"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:s("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:s(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:s("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:s("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:s("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:s("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:s("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:s(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:s("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:s("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:s("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:s("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:s("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:s("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:s("Ctrl-F","Command-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e)})},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:s("Ctrl-Shift-Home","Command-Shift-Home|Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:s("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:s("Shift-Up","Shift-Up|Ctrl-Shift-P"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:s("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:s("Ctrl-Shift-End","Command-Shift-End|Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:s("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:s("Shift-Down","Shift-Down|Ctrl-Shift-N"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:s("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:s("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:s("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:s("Alt-Shift-Left","Command-Shift-Left|Ctrl-Shift-A"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:s("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:s("Shift-Left","Shift-Left|Ctrl-Shift-B"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:s("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:s("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:s("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:s("Alt-Shift-Right","Command-Shift-Right|Shift-End|Ctrl-Shift-E"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:s("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:s("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:s("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:s(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:s("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:s(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:s("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:s("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:s("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:s("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:s("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:s("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:s("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:s(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:s("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:s("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:s("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:s("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:s("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:s("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:s("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:s("Ctrl-H","Command-Option-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e,!0)})}},{name:"undo",bindKey:s("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:s("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:s("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:s("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:s("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:s("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:s("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:s("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:s("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:s("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:s("Alt-Delete","Ctrl-K"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:s("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:s("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:s("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:s("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:s("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:s("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(n.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:s(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:s("Ctrl-T","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:s("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:s("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:s("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:s(null,null),exec:function(e){for(var t=e.selection.isBackwards(),r=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),s=e.session.doc.getLine(r.row).length,a=e.session.doc.getTextRange(e.selection.getRange()).replace(/\n\s*/," ").length,l=e.session.doc.getLine(r.row),c=r.row+1;c<=i.row+1;c++){var u=n.stringTrimLeft(n.stringTrimRight(e.session.doc.getLine(c)));0!==u.length&&(u=" "+u),l+=u}i.row+1<e.session.doc.getLength()-1&&(l+=e.session.doc.getNewLineCharacter()),e.clearSelection(),e.session.doc.replace(new o(r.row,0,i.row+2,0),l),a>0?(e.selection.moveCursorTo(r.row,r.column),e.selection.selectTo(r.row,r.column+a)):(s=e.session.doc.getLine(r.row).length>s?s+1:s,e.selection.moveCursorTo(r.row,s))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:s(null,null),exec:function(e){var t=e.session.doc.getLength()-1,r=e.session.doc.getLine(t).length,n=e.selection.rangeList.ranges,i=[];n.length<1&&(n=[e.selection.getRange()]);for(var s=0;s<n.length;s++)s==n.length-1&&(n[s].end.row===t&&n[s].end.column===r||i.push(new o(n[s].end.row,n[s].end.column,t,r))),0===s?0===n[s].start.row&&0===n[s].start.column||i.push(new o(0,0,n[s].start.row,n[s].start.column)):i.push(new o(n[s-1].end.row,n[s-1].end.column,n[s].start.row,n[s].start.column));e.exitMultiSelectMode(),e.clearSelection();for(s=0;s<i.length;s++)e.selection.addRange(i[s],!1)},readOnly:!0,scrollIntoView:"none"}]}),ace.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"],function(e,t,r){"use strict";e("./lib/fixoldbrowsers");var n=e("./lib/oop"),i=e("./lib/dom"),o=e("./lib/lang"),s=e("./lib/useragent"),a=e("./keyboard/textinput").TextInput,l=e("./mouse/mouse_handler").MouseHandler,c=e("./mouse/fold_handler").FoldHandler,u=e("./keyboard/keybinding").KeyBinding,d=e("./edit_session").EditSession,g=e("./search").Search,h=e("./range").Range,m=e("./lib/event_emitter").EventEmitter,p=e("./commands/command_manager").CommandManager,_=e("./commands/default_commands").commands,f=e("./config"),b=e("./token_iterator").TokenIterator,y=function(e,t){var r=e.getContainerElement();this.container=r,this.renderer=e,this.commands=new p(s.isMac?"mac":"win",_),this.textInput=new a(e.getTextAreaContainer(),this),this.renderer.textarea=this.textInput.getElement(),this.keyBinding=new u(this),this.$mouseHandler=new l(this),new c(this),this.$blockScrolling=0,this.$search=(new g).set({wrap:!0}),this.$historyTracker=this.$historyTracker.bind(this),this.commands.on("exec",this.$historyTracker),this.$initOperationListeners(),this._$emitInputEvent=o.delayedCall(function(){this._signal("input",{}),this.session&&this.session.bgTokenizer&&this.session.bgTokenizer.scheduleStart()}.bind(this)),this.on("change",function(e,t){t._$emitInputEvent.schedule(31)}),this.setSession(t||new d("")),f.resetOptions(this),f._signal("editor",this)};(function(){n.implement(this,m),this.$initOperationListeners=function(){this.selections=[],this.commands.on("exec",this.startOperation.bind(this),!0),this.commands.on("afterExec",this.endOperation.bind(this),!0),this.$opResetTimer=o.delayedCall(this.endOperation.bind(this)),this.on("change",function(){this.curOp||this.startOperation(),this.curOp.docChanged=!0}.bind(this),!0),this.on("changeSelection",function(){this.curOp||this.startOperation(),this.curOp.selectionChanged=!0}.bind(this),!0)},this.curOp=null,this.prevOp={},this.startOperation=function(e){if(this.curOp){if(!e||this.curOp.command)return;this.prevOp=this.curOp}e||(this.previousCommand=null,e={}),this.$opResetTimer.schedule(),this.curOp={command:e.command||{},args:e.args,scrollTop:this.renderer.scrollTop},this.curOp.command.name&&void 0!==this.curOp.command.scrollIntoView&&this.$blockScrolling++},this.endOperation=function(e){if(this.curOp){if(e&&!1===e.returnValue)return this.curOp=null;this._signal("beforeEndOperation");var t=this.curOp.command;t.name&&this.$blockScrolling>0&&this.$blockScrolling--;var r=t&&t.scrollIntoView;if(r){switch(r){case"center-animate":r="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var n=this.selection.getRange(),i=this.renderer.layerConfig;(n.start.row>=i.lastRow||n.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead)}"animate"==r&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(this.$mergeUndoDeltas){var t=this.prevOp,r=this.$mergeableCommands,n=t.command&&e.command.name==t.command.name;if("insertstring"==e.command.name){var i=e.args;void 0===this.mergeNextCommand&&(this.mergeNextCommand=!0),n=n&&this.mergeNextCommand&&(!/\s/.test(i)||/\s/.test(t.args)),this.mergeNextCommand=!0}else n=n&&-1!==r.indexOf(e.command.name);"always"!=this.$mergeUndoDeltas&&Date.now()-this.sequenceStartTime>2e3&&(n=!1),n?this.session.mergeUndoDeltas=!0:-1!==r.indexOf(e.command.name)&&(this.sequenceStartTime=Date.now())}},this.setKeyboardHandler=function(e,t){if(e&&"string"==typeof e){this.$keybindingId=e;var r=this;f.loadModule(["keybinding",e],function(n){r.$keybindingId==e&&r.keyBinding.setKeyboardHandler(n&&n.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session!=e){this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var r=this.session.getSelection();r.off("changeCursor",this.$onCursorChange),r.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this})}},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?1==t?this.navigateFileEnd():-1==t&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||i.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){if(this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null),!this.$highlightPending){var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(t&&t.bgTokenizer){var r=t.findMatchingBracket(e.getCursorPosition());if(r)var n=new h(r.row,r.column,r.row,r.column+1);else if(t.$mode.getMatching)n=t.$mode.getMatching(e.session);n&&(t.$bracketHighlight=t.addMarker(n,"ace_bracket","text"))}},50)}},this.$highlightTags=function(){if(!this.$highlightTagPending){var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(t&&t.bgTokenizer){var r=e.getCursorPosition(),n=new b(e.session,r.row,r.column),i=n.getCurrentToken();if(!i||!/\b(?:tag-open|tag-name)/.test(i.type))return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);if(-1==i.type.indexOf("tag-open")||(i=n.stepForward())){var o=i.value,s=0,a=n.stepBackward();if("<"==a.value)do{a=i,(i=n.stepForward())&&i.value===o&&-1!==i.type.indexOf("tag-name")&&("<"===a.value?s++:"</"===a.value&&s--)}while(i&&s>=0);else{do{i=a,a=n.stepBackward(),i&&i.value===o&&-1!==i.type.indexOf("tag-name")&&("<"===a.value?s++:"</"===a.value&&s--)}while(a&&s<=0);n.stepForward()}if(!i)return t.removeMarker(t.$tagHighlight),void(t.$tagHighlight=null);var l=n.getCurrentTokenRow(),c=n.getCurrentTokenColumn(),u=new h(l,c,l,c+i.value.length),d=t.$backMarkers[t.$tagHighlight];t.$tagHighlight&&null!=d&&0!==u.compareRange(d.range)&&(t.removeMarker(t.$tagHighlight),t.$tagHighlight=null),u&&!t.$tagHighlight&&(t.$tagHighlight=t.addMarker(u,"ace_bracket","text"))}}},50)}},this.focus=function(){var e=this;setTimeout(function(){e.textInput.focus()}),this.textInput.focus()},this.isFocused=function(){return this.textInput.isFocused()},this.blur=function(){this.textInput.blur()},this.onFocus=function(e){this.$isFocused||(this.$isFocused=!0,this.renderer.showCursor(),this.renderer.visualizeFocus(),this._emit("focus",e))},this.onBlur=function(e){this.$isFocused&&(this.$isFocused=!1,this.renderer.hideCursor(),this.renderer.visualizeBlur(),this._emit("blur",e))},this.$cursorChange=function(){this.renderer.updateCursor()},this.onDocumentChange=function(e){var t=this.session.$useWrapMode,r=e.start.row==e.end.row?e.end.row:1/0;this.renderer.updateLines(e.start.row,r,t),this._signal("change",e),this.$cursorChange(),this.$updateHighlightActiveLine()},this.onTokenizerUpdate=function(e){var t=e.data;this.renderer.updateLines(t.first,t.last)},this.onScrollTopChange=function(){this.renderer.scrollToY(this.session.getScrollTop())},this.onScrollLeftChange=function(){this.renderer.scrollToX(this.session.getScrollLeft())},this.onCursorChange=function(){this.$cursorChange(),this.$blockScrolling||(f.warn("Automatically scrolling cursor into view after selection change","this will be disabled in the next version","set editor.$blockScrolling = Infinity to disable this message"),this.renderer.scrollCursorIntoView()),this.$highlightBrackets(),this.$highlightTags(),this.$updateHighlightActiveLine(),this._signal("changeSelection")},this.$updateHighlightActiveLine=function(){var e,t=this.getSession();if(this.$highlightActiveLine&&("line"==this.$selectionStyle&&this.selection.isMultiLine()||(e=this.getCursorPosition()),!this.renderer.$maxLines||1!==this.session.getLength()||this.renderer.$minLines>1||(e=!1)),t.$highlightLineMarker&&!e)t.removeMarker(t.$highlightLineMarker.id),t.$highlightLineMarker=null;else if(!t.$highlightLineMarker&&e){var r=new h(e.row,e.column,e.row,1/0);r.id=t.addMarker(r,"ace_active-line","screenLine"),t.$highlightLineMarker=r}else e&&(t.$highlightLineMarker.start.row=e.row,t.$highlightLineMarker.end.row=e.row,t.$highlightLineMarker.start.column=e.column,t._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;if(t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null,this.selection.isEmpty())this.$updateHighlightActiveLine();else{var r=this.selection.getRange(),n=this.getSelectionStyle();t.$selectionMarker=t.addMarker(r,"ace_selection",n)}var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(!t.isEmpty()&&!t.isMultiLine()){var r=t.start.column-1,n=t.end.column+1,i=e.getLine(t.start.row),o=i.length,s=i.substring(Math.max(r,0),Math.min(n,o));if(!(r>=0&&/^[\w\d]/.test(s)||n<=o&&/[\w\d]$/.test(s)))if(s=i.substring(t.start.column,t.end.column),/^[\w\d]+$/.test(s))return this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:s})}},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var r={text:e,event:t};this.commands.exec("paste",this,r)},this.$handlePaste=function(e){"string"==typeof e&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var r=t.split(/\r\n|\r|\n/),n=this.selection.rangeList.ranges;if(r.length>n.length||r.length<2||!r[1])return this.commands.exec("insertstring",this,t);for(var i=n.length;i--;){var o=n[i];o.isEmpty()||this.session.remove(o),this.session.insert(o.start,r[i])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var r=this.session,n=r.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var o=n.transformAction(r.getState(i.row),"insertion",this,r,e);o&&(e!==o.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=o.text)}if("\t"==e&&(e=this.session.getTabString()),this.selection.isEmpty()){if(this.session.getOverwrite()){(s=new h.fromPoints(i,i)).end.column+=e.length,this.session.remove(s)}}else{var s=this.getSelectionRange();i=this.session.remove(s),this.clearSelection()}if("\n"==e||"\r\n"==e){var a=r.getLine(i.row);if(i.column>a.search(/\S|$/)){var l=a.substr(i.column).search(/\S|$/);r.doc.removeInLine(i.row,i.column,i.column+l)}}this.clearSelection();var c=i.column,u=r.getState(i.row),d=(a=r.getLine(i.row),n.checkOutdent(u,a,e));r.insert(i,e);if(o&&o.selection&&(2==o.selection.length?this.selection.setSelectionRange(new h(i.row,c+o.selection[0],i.row,c+o.selection[1])):this.selection.setSelectionRange(new h(i.row+o.selection[0],o.selection[1],i.row+o.selection[2],o.selection[3]))),r.getDocument().isNewLine(e)){var g=n.getNextLineIndent(u,a.slice(0,i.column),r.getTabString());r.insert({row:i.row+1,column:0},g)}d&&n.autoOutdent(u,r,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,r){this.keyBinding.onCommandKey(e,t,r)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&("left"==e?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var r=this.session,n=r.getState(t.start.row),i=r.getMode().transformAction(n,"deletion",this,r,t);if(0===t.end.column){var o=r.getTextRange(t);if("\n"==o[o.length-1]){var s=r.getLine(t.end.row);/^\s+$/.test(s)&&(t.end.column=s.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(this.selection.isEmpty()){var e=this.getCursorPosition(),t=e.column;if(0!==t){var r,n,i=this.session.getLine(e.row);t<i.length?(r=i.charAt(t)+i.charAt(t-1),n=new h(e.row,t-1,e.row,t+1)):(r=i.charAt(t-1)+i.charAt(t-2),n=new h(e.row,t-2,e.row,t)),this.session.replace(n,r)}}},this.toLowerCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),r=this.session.getTextRange(t);this.session.replace(t,r.toLowerCase()),this.selection.setSelectionRange(e)},this.toUpperCase=function(){var e=this.getSelectionRange();this.selection.isEmpty()&&this.selection.selectWord();var t=this.getSelectionRange(),r=this.session.getTextRange(t);this.session.replace(t,r.toUpperCase()),this.selection.setSelectionRange(e)},this.indent=function(){var e=this.session,t=this.getSelectionRange();if(!(t.start.row<t.end.row)){if(t.start.column<t.end.column){var r=e.getTextRange(t);if(!/^\s+$/.test(r)){u=this.$getSelectedRows();return void e.indentRows(u.first,u.last,"\t")}}var n=e.getLine(t.start.row),i=t.start,s=e.getTabSize(),a=e.documentToScreenColumn(i.row,i.column);if(this.session.getUseSoftTabs())var l=s-a%s,c=o.stringRepeat(" ",l);else{for(l=a%s;" "==n[t.start.column-1]&&l;)t.start.column--,l--;this.selection.setSelectionRange(t),c="\t"}return this.insert(c)}var u=this.$getSelectedRows();e.indentRows(u.first,u.last,"\t")},this.blockIndent=function(){var e=this.$getSelectedRows();this.session.indentRows(e.first,e.last,"\t")},this.blockOutdent=function(){var e=this.session.getSelection();this.session.outdentRows(e.getRange())},this.sortLines=function(){var e=this.$getSelectedRows(),t=this.session,r=[];for(i=e.first;i<=e.last;i++)r.push(t.getLine(i));r.sort(function(e,t){return e.toLowerCase()<t.toLowerCase()?-1:e.toLowerCase()>t.toLowerCase()?1:0});for(var n=new h(0,0,0,0),i=e.first;i<=e.last;i++){var o=t.getLine(i);n.start.row=i,n.end.row=i,n.end.column=o.length,t.replace(n,r[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),r=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,r,e)},this.getNumberAt=function(e,t){var r=/[\-]?[0-9]+(?:\.[0-9]+)?/g;r.lastIndex=0;for(var n=this.session.getLine(e);r.lastIndex<t;){var i=r.exec(n);if(i.index<=t&&i.index+i[0].length>=t)return{value:i[0],start:i.index,end:i.index+i[0].length}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,r=this.selection.getCursor().column,n=new h(t,r-1,t,r),i=this.session.getTextRange(n);if(!isNaN(parseFloat(i))&&isFinite(i)){var o=this.getNumberAt(t,r);if(o){var s=o.value.indexOf(".")>=0?o.start+o.value.indexOf(".")+1:o.end,a=o.start+o.value.length-s,l=parseFloat(o.value);l*=Math.pow(10,a),s!==o.end&&r<s?e*=Math.pow(10,o.end-r-1):e*=Math.pow(10,o.end-r),l+=e;var c=(l/=Math.pow(10,a)).toFixed(a),u=new h(t,o.start,t,o.end);this.session.replace(u,c),this.moveCursorTo(t,Math.max(o.start+1,r+c.length-o.value.length))}}},this.removeLines=function(){var e=this.$getSelectedRows();this.session.removeFullLines(e.first,e.last),this.clearSelection()},this.duplicateSelection=function(){var e=this.selection,t=this.session,r=e.getRange(),n=e.isBackwards();if(r.isEmpty()){var i=r.start.row;t.duplicateLines(i,i)}else{var o=n?r.start:r.end,s=t.insert(o,t.getTextRange(r),!1);r.start=o,r.end=s,e.setSelectionRange(r,n)}},this.moveLinesDown=function(){this.$moveLines(1,!1)},this.moveLinesUp=function(){this.$moveLines(-1,!1)},this.moveText=function(e,t,r){return this.session.moveText(e,t,r)},this.copyLinesUp=function(){this.$moveLines(-1,!0)},this.copyLinesDown=function(){this.$moveLines(1,!0)},this.$moveLines=function(e,t){var r,n,i=this.selection;if(!i.inMultiSelectMode||this.inVirtualSelectionMode){var o=i.toOrientedRange();r=this.$getSelectedRows(o),n=this.session.$moveLines(r.first,r.last,t?0:e),t&&-1==e&&(n=0),o.moveBy(n,0),i.fromOrientedRange(o)}else{var s=i.rangeList.ranges;i.rangeList.detach(this.session),this.inVirtualSelectionMode=!0;for(var a=0,l=0,c=s.length,u=0;u<c;u++){var d=u;s[u].moveBy(a,0);for(var g=(r=this.$getSelectedRows(s[u])).first,h=r.last;++u<c;){l&&s[u].moveBy(l,0);var m=this.$getSelectedRows(s[u]);if(t&&m.first!=h)break;if(!t&&m.first>h+1)break;h=m.last}for(u--,a=this.session.$moveLines(g,h,t?0:e),t&&-1==e&&(d=u+1);d<=u;)s[d].moveBy(a,0),d++;t||(a=0),l+=a}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var r=this.renderer,n=this.renderer.layerConfig,i=e*Math.floor(n.height/n.lineHeight);this.$blockScrolling++,!0===t?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):!1===t&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var o=r.scrollTop;r.scrollBy(0,i*n.lineHeight),null!=t&&r.scrollCursorIntoView(null,.5),r.animateScrolling(o)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,r,n){this.renderer.scrollToLine(e,t,r,n)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var r=this.getCursorPosition(),n=new b(this.session,r.row,r.column),i=n.getCurrentToken(),o=i||n.stepForward();if(o){var s,a,l=!1,c={},u=r.column-o.start,d={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(o.value.match(/[{}()\[\]]/g)){for(;u<o.value.length&&!l;u++)if(d[o.value[u]])switch(a=d[o.value[u]]+"."+o.type.replace("rparen","lparen"),isNaN(c[a])&&(c[a]=0),o.value[u]){case"(":case"[":case"{":c[a]++;break;case")":case"]":case"}":c[a]--,-1===c[a]&&(s="bracket",l=!0)}}else o&&-1!==o.type.indexOf("tag-name")&&(isNaN(c[o.value])&&(c[o.value]=0),"<"===i.value?c[o.value]++:"</"===i.value&&c[o.value]--,-1===c[o.value]&&(s="tag",l=!0));l||(i=o,o=n.stepForward(),u=0)}while(o&&!l);if(s){var g,m;if("bracket"===s)(g=this.session.getBracketRange(r))||(m=(g=new h(n.getCurrentTokenRow(),n.getCurrentTokenColumn()+u-1,n.getCurrentTokenRow(),n.getCurrentTokenColumn()+u-1)).start,(t||m.row===r.row&&Math.abs(m.column-r.column)<2)&&(g=this.session.getBracketRange(m)));else if("tag"===s){if(!o||-1===o.type.indexOf("tag-name"))return;var p=o.value;if(0===(g=new h(n.getCurrentTokenRow(),n.getCurrentTokenColumn()-2,n.getCurrentTokenRow(),n.getCurrentTokenColumn()-2)).compare(r.row,r.column)){l=!1;do{o=i,(i=n.stepBackward())&&(-1!==i.type.indexOf("tag-close")&&g.setEnd(n.getCurrentTokenRow(),n.getCurrentTokenColumn()+1),o.value===p&&-1!==o.type.indexOf("tag-name")&&("<"===i.value?c[p]++:"</"===i.value&&c[p]--,0===c[p]&&(l=!0)))}while(i&&!l)}o&&o.type.indexOf("tag-name")&&(m=g.start).row==r.row&&Math.abs(m.column-r.column)<2&&(m=g.end)}(m=g&&g.cursor||m)&&(e?g&&t?this.selection.setRange(g):g&&g.isEqual(this.getSelectionRange())?this.clearSelection():this.selection.selectTo(m.row,m.column):this.selection.moveTo(m.row,m.column))}}},this.gotoLine=function(e,t,r){this.selection.clearSelection(),this.session.unfold({row:e-1,column:t||0}),this.$blockScrolling+=1,this.exitMultiSelectMode&&this.exitMultiSelectMode(),this.moveCursorTo(e-1,t||0),this.$blockScrolling-=1,this.isRowFullyVisible(e-1)||this.scrollToLine(e-1,!0,r)},this.navigateTo=function(e,t){this.selection.moveTo(e,t)},this.navigateUp=function(e){if(this.selection.isMultiLine()&&!this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(-e||-1,0)},this.navigateDown=function(e){if(this.selection.isMultiLine()&&this.selection.isBackwards()){var t=this.selection.anchor.getPosition();return this.moveCursorToPosition(t)}this.selection.clearSelection(),this.selection.moveCursorBy(e||1,0)},this.navigateLeft=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorLeft();else{var t=this.getSelectionRange().start;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateRight=function(e){if(this.selection.isEmpty())for(e=e||1;e--;)this.selection.moveCursorRight();else{var t=this.getSelectionRange().end;this.moveCursorToPosition(t)}this.clearSelection()},this.navigateLineStart=function(){this.selection.moveCursorLineStart(),this.clearSelection()},this.navigateLineEnd=function(){this.selection.moveCursorLineEnd(),this.clearSelection()},this.navigateFileEnd=function(){this.selection.moveCursorFileEnd(),this.clearSelection()},this.navigateFileStart=function(){this.selection.moveCursorFileStart(),this.clearSelection()},this.navigateWordRight=function(){this.selection.moveCursorWordRight(),this.clearSelection()},this.navigateWordLeft=function(){this.selection.moveCursorWordLeft(),this.clearSelection()},this.replace=function(e,t){t&&this.$search.set(t);var r=this.$search.find(this.session),n=0;return r?(this.$tryReplace(r,e)&&(n=1),null!==r&&(this.selection.setSelectionRange(r),this.renderer.scrollSelectionIntoView(r.start,r.end)),n):n},this.replaceAll=function(e,t){t&&this.$search.set(t);var r=this.$search.findAll(this.session),n=0;if(!r.length)return n;this.$blockScrolling+=1;var i=this.getSelectionRange();this.selection.moveTo(0,0);for(var o=r.length-1;o>=0;--o)this.$tryReplace(r[o],e)&&n++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,n},this.$tryReplace=function(e,t){var r=this.session.getTextRange(e);return null!==(t=this.$search.replace(r,t))?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,r){t||(t={}),"string"==typeof e||e instanceof RegExp?t.needle=e:"object"==typeof e&&n.mixin(t,e);var i=this.selection.getRange();null==t.needle&&((e=this.session.getTextRange(i)||this.$search.$options.needle)||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var o=this.$search.find(this.session);return t.preventScroll?o:o?(this.revealRange(o,r),o):(t.backwards?i.start=i.end:i.end=i.start,void this.selection.setRange(i))},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var r=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),!1!==t&&this.renderer.animateScrolling(r)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(e){var t,r=this,n=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var i=this.$scrollAnchor;i.style.cssText="position:absolute",this.container.insertBefore(i,this.container.firstChild);var o=this.on("changeSelection",function(){n=!0}),s=this.renderer.on("beforeRender",function(){n&&(t=r.renderer.container.getBoundingClientRect())}),a=this.renderer.on("afterRender",function(){if(n&&t&&(r.isFocused()||r.searchBox&&r.searchBox.isFocused())){var e=r.renderer,o=e.$cursorLayer.$pixelPos,s=e.layerConfig,a=o.top-s.offset;null!=(n=o.top>=0&&a+t.top<0||!(o.top<s.height&&o.top+t.top+s.lineHeight>window.innerHeight)&&null)&&(i.style.top=a+"px",i.style.left=o.left+"px",i.style.height=s.lineHeight+"px",i.scrollIntoView(n)),n=t=null}});this.setAutoScrollEditorIntoView=function(e){e||(delete this.setAutoScrollEditorIntoView,this.off("changeSelection",o),this.renderer.off("afterRender",a),this.renderer.off("beforeRender",s))}}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;t&&(t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&"wide"!=e,i.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e)))}}).call(y.prototype),f.defineOptions(y.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=y}),ace.define("ace/undomanager",["require","exports","module"],function(e,t,r){"use strict";var n=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:1==e.lines.length?null:e.lines,text:1==e.lines.length?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function r(e,t){for(var r=new Array(e.length),n=0;n<e.length;n++){for(var i=e[n],o={group:i.group,deltas:new Array(i.length)},s=0;s<i.deltas.length;s++){var a=i.deltas[s];o.deltas[s]=t(a)}r[n]=o}return r}this.execute=function(e){var t=e.args[0];this.$doc=e.args[1],e.merge&&this.hasUndo()&&(this.dirtyCounter--,t=this.$undoStack.pop().concat(t)),this.$undoStack.push(t),this.$redoStack=[],this.dirtyCounter<0&&(this.dirtyCounter=NaN),this.dirtyCounter++},this.undo=function(e){var t=this.$undoStack.pop(),r=null;return t&&(r=this.$doc.undoChanges(t,e),this.$redoStack.push(t),this.dirtyCounter--),r},this.redo=function(e){var t=this.$redoStack.pop(),r=null;return t&&(r=this.$doc.redoChanges(this.$deserializeDeltas(t),e),this.$undoStack.push(t),this.dirtyCounter++),r},this.reset=function(){this.$undoStack=[],this.$redoStack=[],this.dirtyCounter=0},this.hasUndo=function(){return this.$undoStack.length>0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return 0===this.dirtyCounter},this.$serializeDeltas=function(t){return r(t,e)},this.$deserializeDeltas=function(e){return r(e,t)}}).call(n.prototype),t.UndoManager=n}),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],function(e,t,r){"use strict";var n=e("../lib/dom"),i=e("../lib/oop"),o=e("../lib/lang"),s=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=n.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,s),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;t<e.length;t++){var r=e[t],n=r.row,i=this.$annotations[n];i||(i=this.$annotations[n]={text:[]});var s=r.text;s=s?o.escapeHTML(s):r.html||"",-1===i.text.indexOf(s)&&i.text.push(s);var a=r.type;"error"==a?i.className=" ace_error":"warning"==a&&" ace_error"!=i.className?i.className=" ace_warning":"info"!=a||i.className||(i.className=" ace_info")}},this.$updateAnnotations=function(e){if(this.$annotations.length){var t=e.start.row,r=e.end.row-t;if(0===r);else if("remove"==e.action)this.$annotations.splice(t,r+1,null);else{var n=new Array(r+1);n.unshift(t,1),this.$annotations.splice.apply(this.$annotations,n)}}},this.update=function(e){for(var t=this.session,r=e.firstRow,i=Math.min(e.lastRow+e.gutterOffset,t.getLength()-1),o=t.getNextFoldLine(r),s=o?o.start.row:1/0,a=this.$showFoldWidgets&&t.foldWidgets,l=t.$breakpoints,c=t.$decorations,u=t.$firstLineNumber,d=0,g=t.gutterRenderer||this.$renderer,h=null,m=-1,p=r;;){if(p>s&&(p=o.end.row+1,s=(o=t.getNextFoldLine(p,o))?o.start.row:1/0),p>i){for(;this.$cells.length>m+1;)h=this.$cells.pop(),this.element.removeChild(h.element);break}(h=this.$cells[++m])||((h={element:null,textNode:null,foldWidget:null}).element=n.createElement("div"),h.textNode=document.createTextNode(""),h.element.appendChild(h.textNode),this.element.appendChild(h.element),this.$cells[m]=h);var _="ace_gutter-cell ";if(l[p]&&(_+=l[p]),c[p]&&(_+=c[p]),this.$annotations[p]&&(_+=this.$annotations[p].className),h.element.className!=_&&(h.element.className=_),(b=t.getRowLength(p)*e.lineHeight+"px")!=h.element.style.height&&(h.element.style.height=b),a){var f=a[p];null==f&&(f=a[p]=t.getFoldWidget(p))}if(f){h.foldWidget||(h.foldWidget=n.createElement("span"),h.element.appendChild(h.foldWidget));_="ace_fold-widget ace_"+f;"start"==f&&p==s&&p<o.end.row?_+=" ace_closed":_+=" ace_open",h.foldWidget.className!=_&&(h.foldWidget.className=_);var b=e.lineHeight+"px";h.foldWidget.style.height!=b&&(h.foldWidget.style.height=b)}else h.foldWidget&&(h.element.removeChild(h.foldWidget),h.foldWidget=null);var y=d=g?g.getText(t,p):p+u;y!=h.textNode.data&&(h.textNode.data=y),p++}this.element.style.height=e.minHeight+"px",(this.$fixedWidth||t.$useWrapMode)&&(d=t.getLength()+u);var x=g?g.getWidth(t,d,e):d.toString().length*e.characterWidth,v=this.$padding||this.$computePadding();(x+=v.left+v.right)===this.gutterWidth||isNaN(x)||(this.gutterWidth=x,this.element.style.width=Math.ceil(this.gutterWidth)+"px",this._emit("changeGutterWidth",x))},this.$fixedWidth=!1,this.$showLineNumbers=!0,this.$renderer="",this.setShowLineNumbers=function(e){this.$renderer=!e&&{getWidth:function(){return""},getText:function(){return""}}},this.getShowLineNumbers=function(){return this.$showLineNumbers},this.$showFoldWidgets=!0,this.setShowFoldWidgets=function(e){e?n.addCssClass(this.element,"ace_folding-enabled"):n.removeCssClass(this.element,"ace_folding-enabled"),this.$showFoldWidgets=e,this.$padding=null},this.getShowFoldWidgets=function(){return this.$showFoldWidgets},this.$computePadding=function(){if(!this.element.firstChild)return{left:0,right:0};var e=n.computedStyle(this.element.firstChild);return this.$padding={},this.$padding.left=parseInt(e.paddingLeft)+1||0,this.$padding.right=parseInt(e.paddingRight)||0,this.$padding},this.getRegion=function(e){var t=this.$padding||this.$computePadding(),r=this.element.getBoundingClientRect();return e.x<t.left+r.left?"markers":this.$showFoldWidgets&&e.x>r.right-t.right?"foldWidgets":void 0}}).call(a.prototype),t.Gutter=a}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,r){"use strict";var n=e("../range").Range,i=e("../lib/dom"),o=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,r,n){return(e?1:0)|(t?2:0)|(r?4:0)|(n?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){if(e=e||this.config){this.config=e;var t=[];for(var r in this.markers){var n=this.markers[r];if(n.range){var i=n.range.clipRows(e.firstRow,e.lastRow);if(!i.isEmpty())if(i=i.toScreenRange(this.session),n.renderer){var o=this.$getTop(i.start.row,e),s=this.$padding+i.start.column*e.characterWidth;n.renderer(t,i,s,o,e)}else"fullLine"==n.type?this.drawFullLineMarker(t,i,n.clazz,e):"screenLine"==n.type?this.drawScreenLineMarker(t,i,n.clazz,e):i.isMultiLine()?"text"==n.type?this.drawTextMarker(t,i,n.clazz,e):this.drawMultiLineMarker(t,i,n.clazz,e):this.drawSingleLineMarker(t,i,n.clazz+" ace_start ace_br15",e)}else n.update(t,this,this.session,e)}this.element.innerHTML=t.join("")}},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,r,i,o,s){for(var a=this.session,l=r.start.row,c=r.end.row,u=l,d=0,g=0,h=a.getScreenLastRowColumn(u),m=new n(u,r.start.column,u,g);u<=c;u++)m.start.row=m.end.row=u,m.start.column=u==l?r.start.column:a.getRowWrapIndent(u),m.end.column=h,d=g,g=h,h=u+1<c?a.getScreenLastRowColumn(u+1):u==c?0:r.end.column,this.drawSingleLineMarker(t,m,i+(u==l?" ace_start":"")+" ace_br"+e(u==l||u==l+1&&r.start.column,d<g,g>h,u==c),o,u==c?0:1,s)},this.drawMultiLineMarker=function(e,t,r,n,i){var o=this.$padding,s=n.lineHeight,a=this.$getTop(t.start.row,n),l=o+t.start.column*n.characterWidth;i=i||"",e.push("<div class='",r," ace_br1 ace_start' style='","height:",s,"px;","right:0;","top:",a,"px;","left:",l,"px;",i,"'></div>"),a=this.$getTop(t.end.row,n);var c=t.end.column*n.characterWidth;if(e.push("<div class='",r," ace_br12' style='","height:",s,"px;","width:",c,"px;","top:",a,"px;","left:",o,"px;",i,"'></div>"),!((s=(t.end.row-t.start.row-1)*n.lineHeight)<=0)){a=this.$getTop(t.start.row+1,n);var u=(t.start.column?1:0)|(t.end.column?0:8);e.push("<div class='",r,u?" ace_br"+u:"","' style='","height:",s,"px;","right:0;","top:",a,"px;","left:",o,"px;",i,"'></div>")}},this.drawSingleLineMarker=function(e,t,r,n,i,o){var s=n.lineHeight,a=(t.end.column+(i||0)-t.start.column)*n.characterWidth,l=this.$getTop(t.start.row,n),c=this.$padding+t.start.column*n.characterWidth;e.push("<div class='",r,"' style='","height:",s,"px;","width:",a,"px;","top:",l,"px;","left:",c,"px;",o||"","'></div>")},this.drawFullLineMarker=function(e,t,r,n,i){var o=this.$getTop(t.start.row,n),s=n.lineHeight;t.start.row!=t.end.row&&(s+=this.$getTop(t.end.row,n)-o),e.push("<div class='",r,"' style='","height:",s,"px;","top:",o,"px;","left:0;right:0;",i||"","'></div>")},this.drawScreenLineMarker=function(e,t,r,n,i){var o=this.$getTop(t.start.row,n),s=n.lineHeight;e.push("<div class='",r,"' style='","height:",s,"px;","top:",o,"px;","left:0;right:0;",i||"","'></div>")}}).call(o.prototype),t.Marker=o}),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/dom"),o=e("../lib/lang"),s=(e("../lib/useragent"),e("../lib/event_emitter").EventEmitter),a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){n.implement(this,s),this.EOF_CHAR="¶",this.EOL_CHAR_LF="¬",this.EOL_CHAR_CRLF="¤",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="—",this.SPACE_CHAR="·",this.$padding=0,this.$updateEolChar=function(){var e="\n"==this.session.doc.getNewLineCharacter()?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles!=e&&(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides!=e&&(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;for(var t=this.$tabStrings=[0],r=1;r<e+1;r++)this.showInvisibles?t.push("<span class='ace_invisible ace_invisible_tab'>"+o.stringRepeat(this.TAB_CHAR,r)+"</span>"):t.push(o.stringRepeat(" ",r));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var n="ace_indent-guide",i="",s="";if(this.showInvisibles){n+=" ace_invisible",i=" ace_invisible_space",s=" ace_invisible_tab";var a=o.stringRepeat(this.SPACE_CHAR,this.tabSize),l=o.stringRepeat(this.TAB_CHAR,this.tabSize)}else l=a=o.stringRepeat(" ",this.tabSize);this.$tabStrings[" "]="<span class='"+n+i+"'>"+a+"</span>",this.$tabStrings["\t"]="<span class='"+n+s+"'>"+l+"</span>"}},this.updateLines=function(e,t,r){this.config.lastRow==e.lastRow&&this.config.firstRow==e.firstRow||this.scrollLines(e),this.config=e;for(var n=Math.max(t,e.firstRow),i=Math.min(r,e.lastRow),o=this.element.childNodes,s=0,a=e.firstRow;a<n;a++){if(l=this.session.getFoldLine(a)){if(l.containsRow(n)){n=l.start.row;break}a=l.end.row}s++}a=n;for(var l,c=(l=this.session.getNextFoldLine(a))?l.start.row:1/0;a>c&&(a=l.end.row+1,c=(l=this.session.getNextFoldLine(a,l))?l.start.row:1/0),!(a>i);){var u=o[s++];if(u){var d=[];this.$renderLine(d,a,!this.$useLineGroups(),a==c&&l),u.style.height=e.lineHeight*this.session.getRowLength(a)+"px",u.innerHTML=d.join("")}a++}},this.scrollLines=function(e){var t=this.config;if(this.config=e,!t||t.lastRow<e.firstRow)return this.update(e);if(e.lastRow<t.firstRow)return this.update(e);var r=this.element;if(t.firstRow<e.firstRow)for(var n=this.session.getFoldedRowCount(t.firstRow,e.firstRow-1);n>0;n--)r.removeChild(r.firstChild);if(t.lastRow>e.lastRow)for(n=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);n>0;n--)r.removeChild(r.lastChild);if(e.firstRow<t.firstRow){var i=this.$renderLinesFragment(e,e.firstRow,t.firstRow-1);r.firstChild?r.insertBefore(i,r.firstChild):r.appendChild(i)}if(e.lastRow>t.lastRow){i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);r.appendChild(i)}},this.$renderLinesFragment=function(e,t,r){for(var n=this.element.ownerDocument.createDocumentFragment(),o=t,s=this.session.getNextFoldLine(o),a=s?s.start.row:1/0;o>a&&(o=s.end.row+1,a=(s=this.session.getNextFoldLine(o,s))?s.start.row:1/0),!(o>r);){var l=i.createElement("div"),c=[];if(this.$renderLine(c,o,!1,o==a&&s),l.innerHTML=c.join(""),this.$useLineGroups())l.className="ace_line_group",n.appendChild(l),l.style.height=e.lineHeight*this.session.getRowLength(o)+"px";else for(;l.firstChild;)n.appendChild(l.firstChild);o++}return n},this.update=function(e){this.config=e;for(var t=[],r=e.firstRow,n=e.lastRow,i=r,o=this.session.getNextFoldLine(i),s=o?o.start.row:1/0;i>s&&(i=o.end.row+1,s=(o=this.session.getNextFoldLine(i,o))?o.start.row:1/0),!(i>n);)this.$useLineGroups()&&t.push("<div class='ace_line_group' style='height:",e.lineHeight*this.session.getRowLength(i),"px'>"),this.$renderLine(t,i,!1,i==s&&o),this.$useLineGroups()&&t.push("</div>"),i++;this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,r,n){var i=this,s=n.replace(/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\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]/g,function(e,r,n,s,a){if(r)return i.showInvisibles?"<span class='ace_invisible ace_invisible_space'>"+o.stringRepeat(i.SPACE_CHAR,e.length)+"</span>":e;if("&"==e)return"&";if("<"==e)return"<";if(">"==e)return">";if("\t"==e){var l=i.session.getScreenTabSize(t+s);return t+=l-1,i.$tabStrings[l]}if(" "==e){var c=i.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",u=i.showInvisibles?i.SPACE_CHAR:"";return t+=1,"<span class='"+c+"' style='width:"+2*i.config.characterWidth+"px'>"+u+"</span>"}return n?"<span class='ace_invisible ace_invisible_space ace_invalid'>"+i.SPACE_CHAR+"</span>":(t+=1,"<span class='ace_cjk' style='width:"+2*i.config.characterWidth+"px'>"+e+"</span>")});if(this.$textToken[r.type])e.push(s);else{var a="ace_"+r.type.replace(/\./g," ace_"),l="";"fold"==r.type&&(l=" style='width:"+r.value.length*this.config.characterWidth+"px;' "),e.push("<span class='",a,"'",l,">",s,"</span>")}return t+n.length},this.renderIndentGuide=function(e,t,r){var n=t.search(this.$indentGuideRe);return n<=0||n>=r?t:" "==t[0]?(n-=n%this.tabSize,e.push(o.stringRepeat(this.$tabStrings[" "],n/this.tabSize)),t.substr(n)):"\t"==t[0]?(e.push(o.stringRepeat(this.$tabStrings["\t"],n)),t.substr(n)):t},this.$renderWrappedLine=function(e,t,r,n){for(var i=0,s=0,a=r[0],l=0,c=0;c<t.length;c++){var u=t[c],d=u.value;if(0==c&&this.displayIndentGuides){if(i=d.length,!(d=this.renderIndentGuide(e,d,a)))continue;i-=d.length}if(i+d.length<a)l=this.$renderToken(e,l,u,d),i+=d.length;else{for(;i+d.length>=a;)l=this.$renderToken(e,l,u,d.substring(0,a-i)),d=d.substring(a-i),i=a,n||e.push("</div>","<div class='ace_line' style='height:",this.config.lineHeight,"px'>"),e.push(o.stringRepeat(" ",r.indent)),l=0,a=r[++s]||Number.MAX_VALUE;0!=d.length&&(i+=d.length,l=this.$renderToken(e,l,u,d))}}},this.$renderSimpleLine=function(e,t){var r=0,n=t[0],i=n.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(r=this.$renderToken(e,r,n,i));for(var o=1;o<t.length;o++)i=(n=t[o]).value,r=this.$renderToken(e,r,n,i)},this.$renderLine=function(e,t,r,n){if(n||0==n||(n=this.session.getFoldLine(t)),n)var i=this.$getFoldLineTokens(t,n);else i=this.session.getTokens(t);if(r||e.push("<div class='ace_line' style='height:",this.config.lineHeight*(this.$useLineGroups()?1:this.session.getRowLength(t)),"px'>"),i.length){var o=this.session.getRowSplitData(t);o&&o.length?this.$renderWrappedLine(e,i,o,r):this.$renderSimpleLine(e,i)}this.showInvisibles&&(n&&(t=n.end.row),e.push("<span class='ace_invisible ace_invisible_eol'>",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"</span>")),r||e.push("</div>")},this.$getFoldLineTokens=function(e,t){var r=this.session,n=[];var i=r.getTokens(e);return t.walk(function(e,t,o,s,a){null!=e?n.push({type:"fold",value:e}):(a&&(i=r.getTokens(t)),i.length&&function(e,t,r){for(var i=0,o=0;o+e[i].value.length<t;)if(o+=e[i].value.length,++i==e.length)return;for(o!=t&&((s=e[i].value.substring(t-o)).length>r-t&&(s=s.substring(0,r-t)),n.push({type:e[i].type,value:s}),o=t+s.length,i+=1);o<r&&i<e.length;){var s;(s=e[i].value).length+o>r?n.push({type:e[i].type,value:s.substring(0,r-o)}):n.push(e[i]),o+=s.length,i+=1}}(i,s,o))},t.end.row,this.session.getLine(t.end.row).length),n},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,r){"use strict";var n,i=e("../lib/dom"),o=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),void 0===n&&(n=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),i.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(n?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){for(var t=this.cursors,r=t.length;r--;)t[r].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){for(var t=this.cursors,r=t.length;r--;)t[r].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e==this.smoothBlinking||n||(this.smoothBlinking=e,i.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=i.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,i.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,i.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;if(clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&i.removeCssClass(this.element,"ace_smooth-blinking"),e(!0),this.isBlinking&&this.blinkInterval&&this.isVisible){this.smoothBlinking&&setTimeout(function(){i.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()}},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var r=this.session.documentToScreenPosition(e);return{left:this.$padding+r.column*this.config.characterWidth,top:(r.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,r=0,n=0;void 0!==t&&0!==t.length||(t=[{cursor:null}]);r=0;for(var i=t.length;r<i;r++){var o=this.getPixelPosition(t[r].cursor,!0);if(!((o.top>e.height+e.offset||o.top<0)&&r>1)){var s=(this.cursors[n++]||this.addCursor()).style;this.drawCursor?this.drawCursor(s,o,e,t[r],this.session):(s.left=o.left+"px",s.top=o.top+"px",s.width=e.characterWidth+"px",s.height=e.lineHeight+"px")}}for(;this.cursors.length>n;)this.removeCursor();var a=this.session.getOverwrite();this.$setOverwrite(a),this.$pixelPos=o,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?i.addCssClass(this.element,"ace_overwrite-cursors"):i.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(o.prototype),t.Cursor=o}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/dom"),o=e("./lib/event"),s=e("./lib/event_emitter").EventEmitter,a=32768,l=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,o.addListener(this.element,"scroll",this.onScroll.bind(this)),o.addListener(this.element,"mousedown",o.preventDefault)};(function(){n.implement(this,s),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e,this.coeff=1}}).call(l.prototype);var c=function(e,t){l.call(this,e),this.scrollTop=0,this.scrollHeight=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};n.inherits(c,l),function(){this.classSuffix="-v",this.onScroll=function(){if(!this.skipEvent){if(this.scrollTop=this.element.scrollTop,1!=this.coeff){var e=this.element.clientHeight/this.scrollHeight;this.scrollTop=this.scrollTop*(1-e)/(this.coeff-e)}this._emit("scroll",{data:this.scrollTop})}this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=this.setScrollHeight=function(e){this.scrollHeight=e,e>a?(this.coeff=a/e,e=a):1!=this.coeff&&(this.coeff=1),this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=e,this.element.scrollTop=e*this.coeff)}}.call(c.prototype);var u=function(e,t){l.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};n.inherits(u,l),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(u.prototype),t.ScrollBar=c,t.ScrollBarV=c,t.ScrollBarH=u,t.VScrollBar=c,t.HScrollBar=u}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,r){"use strict";var n=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){if(this.changes=this.changes|e,!this.pending&&this.changes){this.pending=!0;var t=this;n.nextFrame(function(){var e;for(t.pending=!1;e=t.changes;)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,r){var n=e("../lib/oop"),i=e("../lib/dom"),o=e("../lib/lang"),s=e("../lib/useragent"),a=e("../lib/event_emitter").EventEmitter,l=0,c=t.FontMetrics=function(e){this.el=i.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),l||this.$testFractionalRect(),this.$measureNode.innerHTML=o.stringRepeat("X",l),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){n.implement(this,a),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;l=t>0&&t<1?50:100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",s.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(50===l){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var t={height:e.height,width:e.width/l}}else t={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/l};return 0===t.width||0===t.height?null:t},this.$measureCharWidth=function(e){return this.$main.innerHTML=o.stringRepeat(e,l),this.$main.getBoundingClientRect().width/l},this.getCharacterWidth=function(e){var t=this.charSizes[e];return void 0===t&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(c.prototype)}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","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"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/dom"),o=e("./config"),s=e("./lib/useragent"),a=e("./layer/gutter").Gutter,l=e("./layer/marker").Marker,c=e("./layer/text").Text,u=e("./layer/cursor").Cursor,d=e("./scrollbar").HScrollBar,g=e("./scrollbar").VScrollBar,h=e("./renderloop").RenderLoop,m=e("./layer/font_metrics").FontMetrics,p=e("./lib/event_emitter").EventEmitter;i.importCssString('.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;text-align: left;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-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==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-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==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}',"ace_editor.css");var _=function(e,t){var r=this;this.container=e||i.createElement("div"),this.$keepTextAreaAtCursor=!s.isOldIE,i.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new a(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new l(this.content);var n=this.$textLayer=new c(this.content);this.canvas=n.element,this.$markerFront=new l(this.content),this.$cursorLayer=new u(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new g(this.container,this),this.scrollBarH=new d(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){r.$scrollAnimation||r.session.setScrollTop(e.data-r.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){r.$scrollAnimation||r.session.setScrollLeft(e.data-r.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new m(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){r.updateCharacterSize(),r.onResize(!0,r.gutterWidth,r.$size.width,r.$size.height),r._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new h(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),o.resetOptions(this),o._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,n.implement(this,p),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e),e&&(this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null,this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode))},this.updateLines=function(e,t,r){if(void 0===t&&(t=1/0),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRow<t&&(this.$changedLines.lastRow=t)):this.$changedLines={firstRow:e,lastRow:t},this.$changedLines.lastRow<this.layerConfig.firstRow){if(!r)return;this.$changedLines.lastRow=this.layerConfig.lastRow}this.$changedLines.firstRow>this.layerConfig.lastRow||this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,r,n){if(!(this.resizing>2)){this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;n||(n=i.clientHeight||i.scrollHeight),r||(r=i.clientWidth||i.scrollWidth);var o=this.$updateCachedSize(e,t,r,n);if(!this.$size.scrollerHeight||!r&&!n)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(o|this.$changes,!0):this.$loop.schedule(o|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null}},this.$updateCachedSize=function(e,t,r,n){n-=this.$extraHeight||0;var i=0,o=this.$size,s={width:o.width,height:o.height,scrollerHeight:o.scrollerHeight,scrollerWidth:o.scrollerWidth};return n&&(e||o.height!=n)&&(o.height=n,i|=this.CHANGE_SIZE,o.scrollerHeight=o.height,this.$horizScroll&&(o.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",i|=this.CHANGE_SCROLL),r&&(e||o.width!=r)&&(i|=this.CHANGE_SIZE,o.width=r,null==t&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",o.scrollerWidth=Math.max(0,r-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px",(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)&&(i|=this.CHANGE_FULL)),o.$dirty=!r||!n,i&&this._signal("resize",s),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()||this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-2*this.$padding,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var r=this.session.selection.getCursor();r.column=0,e=this.$cursorLayer.getPixelPosition(r,!0),t*=this.session.getRowLength(r.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(this.$showPrintMargin||this.$printMarginEl){if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&-1==this.session.$wrap&&this.adjustWrapLimit()}},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(this.$keepTextAreaAtCursor){var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,r=this.$cursorLayer.$pixelPos.left;t-=e.offset;var n=this.textarea.style,i=this.lineHeight;if(t<0||t>e.height-i)n.top=n.left="0";else{var o=this.characterWidth;if(this.$composition){var s=this.textarea.value.replace(/^\x01+/,"");o*=this.session.$getStringScreenWidth(s)[0]+2,i+=2}(r-=this.scrollLeft)>this.$size.scrollerWidth-o&&(r=this.$size.scrollerWidth-o),r+=this.gutterWidth,n.height=i+"px",n.width=o+"px",n.left=Math.min(r,this.$size.scrollerWidth-o)+"px",n.top=Math.min(t,this.$size.height-i)+"px"}}},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(0===this.layerConfig.offset?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow;return this.session.documentToScreenRow(t,0)*e.lineHeight-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,r,n){var i=this.scrollMargin;i.top=0|e,i.bottom=0|t,i.right=0|n,i.left=0|r,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){if(this.$changes&&(e|=this.$changes,this.$changes=0),this.session&&this.container.offsetWidth&&!this.$frozen&&(e||t)){if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var r=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){if(e|=this.$computeLayerConfig(),r.firstRow!=this.layerConfig.firstRow&&r.firstRowScreen==this.layerConfig.firstRowScreen){var n=this.scrollTop+(r.firstRow-this.layerConfig.firstRow)*this.lineHeight;n>0&&(this.scrollTop=n,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}r=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-r.offset+"px",this.content.style.marginTop=-r.offset+"px",this.content.style.width=r.width+2*this.$padding+"px",this.content.style.height=r.minHeight+"px"}if(e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left"),e&this.CHANGE_FULL)return this.$textLayer.update(r),this.$showGutter&&this.$gutterLayer.update(r),this.$markerBack.update(r),this.$markerFront.update(r),this.$cursorLayer.update(r),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),void this._signal("afterRender");if(e&this.CHANGE_SCROLL)return e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(r):this.$textLayer.scrollLines(r),this.$showGutter&&this.$gutterLayer.update(r),this.$markerBack.update(r),this.$markerFront.update(r),this.$cursorLayer.update(r),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),void this._signal("afterRender");e&this.CHANGE_TEXT?(this.$textLayer.update(r),this.$showGutter&&this.$gutterLayer.update(r)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(r):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(r),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(r),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(r),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(r),this._signal("afterRender")}else this.$changes|=e},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,r=Math.min(t,Math.max((this.$minLines||1)*this.lineHeight,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(r+=this.scrollBarH.getHeight()),this.$maxPixelHeight&&r>this.$maxPixelHeight&&(r=this.$maxPixelHeight);var n=e>t;if(r!=this.desiredHeight||this.$size.height!=this.desiredHeight||n!=this.$vScroll){n!=this.$vScroll&&(this.$vScroll=n,this.scrollBarV.setVisible(n));var i=this.container.clientWidth;this.container.style.height=r+"px",this.$updateCachedSize(!0,this.$gutterWidth,i,r),this.desiredHeight=r,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,r=t.height<=2*this.lineHeight,n=this.session.getScreenLength()*this.lineHeight,i=this.$getLongestLine(),o=!r&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-i-2*this.$padding<0),s=this.$horizScroll!==o;s&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var l=this.scrollTop%this.lineHeight,c=t.scrollerHeight+this.lineHeight,u=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;n+=u;var d=this.scrollMargin;this.session.setScrollTop(Math.max(-d.top,Math.min(this.scrollTop,n-t.scrollerHeight+d.bottom))),this.session.setScrollLeft(Math.max(-d.left,Math.min(this.scrollLeft,i+2*this.$padding-t.scrollerWidth+d.right)));var g=!r&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-n+u<0||this.scrollTop>d.top),h=a!==g;h&&(this.$vScroll=g,this.scrollBarV.setVisible(g));var m,p,_=Math.ceil(c/this.lineHeight)-1,f=Math.max(0,Math.round((this.scrollTop-l)/this.lineHeight)),b=f+_,y=this.lineHeight;f=e.screenToDocumentRow(f,0);var x=e.getFoldLine(f);x&&(f=x.start.row),m=e.documentToScreenRow(f,0),p=e.getRowLength(f)*y,b=Math.min(e.screenToDocumentRow(b,0),e.getLength()-1),c=t.scrollerHeight+e.getRowLength(b)*y+p,l=this.scrollTop-m*y;var v=0;return this.layerConfig.width!=i&&(v=this.CHANGE_H_SCROLL),(s||h)&&(v=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),h&&(i=this.$getLongestLine())),this.layerConfig={width:i,padding:this.$padding,firstRow:f,firstRowScreen:m,lastRow:b,lineHeight:y,characterWidth:this.characterWidth,minHeight:c,maxHeight:n,offset:l,gutterOffset:y?Math.max(0,Math.ceil((l+t.height-t.scrollerHeight)/y)):0,height:this.$size.scrollerHeight},v},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var r=this.layerConfig;if(!(e>r.lastRow+1||t<r.firstRow))return t===1/0?(this.$showGutter&&this.$gutterLayer.update(r),void this.$textLayer.update(r)):(this.$textLayer.updateLines(r,e,t),!0)},this.$getLongestLine=function(){var e=this.session.getScreenWidth();return this.showInvisibles&&!this.session.$useWrapMode&&(e+=1),Math.max(this.$size.scrollerWidth-2*this.$padding,Math.round(e*this.characterWidth))},this.updateFrontMarkers=function(){this.$markerFront.setMarkers(this.session.getMarkers(!0)),this.$loop.schedule(this.CHANGE_MARKER_FRONT)},this.updateBackMarkers=function(){this.$markerBack.setMarkers(this.session.getMarkers()),this.$loop.schedule(this.CHANGE_MARKER_BACK)},this.addGutterDecoration=function(e,t){this.$gutterLayer.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){this.$gutterLayer.removeGutterDecoration(e,t)},this.updateBreakpoints=function(e){this.$loop.schedule(this.CHANGE_GUTTER)},this.setAnnotations=function(e){this.$gutterLayer.setAnnotations(e),this.$loop.schedule(this.CHANGE_GUTTER)},this.updateCursor=function(){this.$loop.schedule(this.CHANGE_CURSOR)},this.hideCursor=function(){this.$cursorLayer.hideCursor()},this.showCursor=function(){this.$cursorLayer.showCursor()},this.scrollSelectionIntoView=function(e,t,r){this.scrollCursorIntoView(e,r),this.scrollCursorIntoView(t,r)},this.scrollCursorIntoView=function(e,t,r){if(0!==this.$size.scrollerHeight){var n=this.$cursorLayer.getPixelPosition(e),i=n.left,o=n.top,s=r&&r.top||0,a=r&&r.bottom||0,l=this.$scrollAnimation?this.session.getScrollTop():this.scrollTop;l+s>o?(t&&l+s>o+this.lineHeight&&(o-=t*this.$size.scrollerHeight),0===o&&(o=-this.scrollMargin.top),this.session.setScrollTop(o)):l+this.$size.scrollerHeight-a<o+this.lineHeight&&(t&&l+this.$size.scrollerHeight-a<o-this.lineHeight&&(o+=t*this.$size.scrollerHeight),this.session.setScrollTop(o+this.lineHeight-this.$size.scrollerHeight));var c=this.scrollLeft;c>i?(i<this.$padding+2*this.layerConfig.characterWidth&&(i=-this.scrollMargin.left),this.session.setScrollLeft(i)):c+this.$size.scrollerWidth<i+this.characterWidth?this.session.setScrollLeft(Math.round(i+this.characterWidth-this.$size.scrollerWidth)):c<=this.$padding&&i-c<this.characterWidth&&this.session.setScrollLeft(0)}},this.getScrollTop=function(){return this.session.getScrollTop()},this.getScrollLeft=function(){return this.session.getScrollLeft()},this.getScrollTopRow=function(){return this.scrollTop/this.lineHeight},this.getScrollBottomRow=function(){return Math.max(0,Math.floor((this.scrollTop+this.$size.scrollerHeight)/this.lineHeight)-1)},this.scrollToRow=function(e){this.session.setScrollTop(e*this.lineHeight)},this.alignCursor=function(e,t){"number"==typeof e&&(e={row:e,column:0});var r=this.$cursorLayer.getPixelPosition(e),n=this.$size.scrollerHeight-this.lineHeight,i=r.top-n*(t||0);return this.session.setScrollTop(i),i},this.STEPS=8,this.$calcSteps=function(e,t){var r=0,n=this.STEPS,i=[],o=function(e,t,r){return r*(Math.pow(e-1,3)+1)+t};for(r=0;r<n;++r)i.push(o(r/this.STEPS,e,t-e));return i},this.scrollToLine=function(e,t,r,n){var i=this.$cursorLayer.getPixelPosition({row:e,column:0}).top;t&&(i-=this.$size.scrollerHeight/2);var o=this.scrollTop;this.session.setScrollTop(i),!1!==r&&this.animateScrolling(o,n)},this.animateScrolling=function(e,t){var r=this.scrollTop;if(this.$animatedScroll){var n=this;if(e!=r){if(this.$scrollAnimation){var i=this.$scrollAnimation.steps;if(i.length&&(e=i[0])==r)return}var o=n.$calcSteps(e,r);this.$scrollAnimation={from:e,to:r,steps:o},clearInterval(this.$timer),n.session.setScrollTop(o.shift()),n.session.$scrollTop=r,this.$timer=setInterval(function(){o.length?(n.session.setScrollTop(o.shift()),n.session.$scrollTop=r):null!=r?(n.session.$scrollTop=-1,n.session.setScrollTop(r),r=null):(n.$timer=clearInterval(n.$timer),n.$scrollAnimation=null,t&&t())},10)}}},this.scrollToY=function(e){this.scrollTop!==e&&(this.$loop.schedule(this.CHANGE_SCROLL),this.scrollTop=e)},this.scrollToX=function(e){this.scrollLeft!==e&&(this.scrollLeft=e),this.$loop.schedule(this.CHANGE_H_SCROLL)},this.scrollTo=function(e,t){this.session.setScrollTop(t),this.session.setScrollLeft(t)},this.scrollBy=function(e,t){t&&this.session.setScrollTop(this.session.getScrollTop()+t),e&&this.session.setScrollLeft(this.session.getScrollLeft()+e)},this.isScrollableBy=function(e,t){return t<0&&this.session.getScrollTop()>=1-this.scrollMargin.top||(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom||(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left||(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right||void 0)))},this.pixelToScreenCoordinates=function(e,t){var r=this.scroller.getBoundingClientRect(),n=(e+this.scrollLeft-r.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-r.top)/this.lineHeight),o=Math.round(n);return{row:i,column:o,side:n-o>0?1:-1}},this.screenToTextCoordinates=function(e,t){var r=this.scroller.getBoundingClientRect(),n=Math.round((e+this.scrollLeft-r.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-r.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(n,0))},this.textToScreenCoordinates=function(e,t){var r=this.scroller.getBoundingClientRect(),n=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(n.column*this.characterWidth),o=n.row*this.lineHeight;return{pageX:r.left+i-this.scrollLeft,pageY:r.top+o-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){this.$composition&&(i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null)},this.setTheme=function(e,t){var r=this;if(this.$themeId=e,r._dispatchEvent("themeChange",{theme:e}),e&&"string"!=typeof e)s(e);else{var n=e||this.$options.theme.initialValue;o.loadModule(["theme",n],s)}function s(n){if(r.$themeId!=e)return t&&t();if(!n||!n.cssClass)throw new Error("couldn't load module "+e+" or it didn't call define");i.importCssString(n.cssText,n.cssClass,r.container.ownerDocument),r.theme&&i.removeCssClass(r.container,r.theme.cssClass);var o="padding"in n?n.padding:"padding"in(r.theme||{})?4:r.$padding;r.$padding&&o!=r.$padding&&r.setPadding(o),r.$theme=n.cssClass,r.theme=n,i.addCssClass(r.container,n.cssClass),i.setCssClass(r.container,"ace_dark",n.isDark),r.$size&&(r.$size.width=0,r.$updateSizeAsync()),r._dispatchEvent("themeLoaded",{theme:n}),t&&t()}},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,!1!==t)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(_.prototype),o.defineOptions(_.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){"number"==typeof e&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight)return this.$gutterLineHighlight=i.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",void this.$gutter.appendChild(this.$gutterLineHighlight);this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){this.$hScrollBarAlwaysVisible&&this.$horizScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){this.$vScrollBarAlwaysVisible&&this.$vScroll||this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){"number"==typeof e&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},maxPixelHeight:{set:function(e){this.updateFull()},initialValue:0},scrollPastEnd:{set:function(e){e=+e||0,this.$scrollPastEnd!=e&&(this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL))},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=_}),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/net"),o=e("../lib/event_emitter").EventEmitter,s=e("../config"),a=function(t,r,n,i){if(this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl),s.get("packaged")||!e.toUrl)i=i||s.moduleUrl(r,"worker");else{var o=this.$normalizePath;i=i||o(e.toUrl("ace/worker/worker.js",null,"_"));var a={};t.forEach(function(t){a[t]=o(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))})}try{this.$worker=new Worker(i)}catch(e){if(!(e instanceof window.DOMException))throw e;var l=this.$workerBlob(i),c=window.URL||window.webkitURL,u=c.createObjectURL(l);this.$worker=new Worker(u),c.revokeObjectURL(u)}this.$worker.postMessage({init:!0,tlns:a,module:r,classname:n}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){n.implement(this,o),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var r=this.callbacks[t.id];r&&(r(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,r){if(r){var n=this.callbackId++;this.callbacks[n]=r,t.push(n)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(e){console.error(e.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),"insert"==e.action?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;e&&(this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e}))},this.$workerBlob=function(e){var t="importScripts('"+i.qualifyURL(e)+"');";try{return new Blob([t],{type:"application/javascript"})}catch(e){var r=new(window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder);return r.append(t),r.getBlob("application/javascript")}}}).call(a.prototype);var l=function(e,t,r){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var n=null,i=!1,a=Object.create(o),l=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){l.messageBuffer.push(e),n&&(i?setTimeout(c):c())},this.setEmitSync=function(e){i=e};var c=function(){var e=l.messageBuffer.shift();e.command?n[e.command].apply(n,e.args):e.event&&a._signal(e.event,e.data)};a.postMessage=function(e){l.onMessage({data:e})},a.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},a.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},s.loadModule(["worker",t],function(e){for(n=new e[r](a);l.messageBuffer.length;)c()})};l.prototype=a.prototype,t.UIWorkerClient=l,t.WorkerClient=a}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,r){"use strict";var n=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,o=e("./lib/oop"),s=function(e,t,r,n,i,o){var s=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=o,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=n,this.$onCursorChange=function(){setTimeout(function(){s.onCursorChange()})},this.$pos=r;var a=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=a.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){o.implement(this,i),this.setup=function(){var e=this,t=this.doc,r=this.session;this.selectionBefore=r.selection.toJSON(),r.selection.inMultiSelectMode&&r.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=r.addMarker(new n(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(r){var n=t.createAnchor(r.row,r.column);n.$insertRight=!0,n.detach(),e.others.push(n)}),r.setUndoSelect(!1)},this.showOtherMarkers=function(){if(!this.othersActive){var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(r){r.markerId=e.addMarker(new n(r.row,r.column,r.row,r.column+t.length),t.othersClass,null,!1)})}},this.hideOtherMarkers=function(){if(this.othersActive){this.othersActive=!1;for(var e=0;e<this.others.length;e++)this.session.removeMarker(this.others[e].markerId)}},this.onUpdate=function(e){if(this.$updating)return this.updateAnchors(e);var t=e;if(t.start.row===t.end.row&&t.start.row===this.pos.row){this.$updating=!0;var r="insert"===e.action?t.end.column-t.start.column:t.start.column-t.end.column,i=t.start.column>=this.pos.column&&t.start.column<=this.pos.column+this.length+1,o=t.start.column-this.pos.column;if(this.updateAnchors(e),i&&(this.length+=r),i&&!this.session.$fromUndo)if("insert"===e.action)for(var s=this.others.length-1;s>=0;s--){var a={row:(l=this.others[s]).row,column:l.column+o};this.doc.insertMergedLines(a,e.lines)}else if("remove"===e.action)for(s=this.others.length-1;s>=0;s--){var l;a={row:(l=this.others[s]).row,column:l.column+o};this.doc.remove(new n(a.row,a.column,a.row,a.column-r))}this.$updating=!1,this.updateMarkers()}},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(!this.$updating){var e=this,t=this.session,r=function(r,i){t.removeMarker(r.markerId),r.markerId=t.addMarker(new n(r.row,r.column,r.row,r.column+e.length),i,null,!1)};r(this.pos,this.mainClass);for(var i=this.others.length;i--;)r(this.others[i],this.othersClass)}},this.onCursorChange=function(e){if(!this.$updating&&this.session){var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))}},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(-1!==this.$undoStackDepth){for(var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth,r=0;r<t;r++)e.undo(!0);this.selectionBefore&&this.session.selection.fromJSON(this.selectionBefore)}}}).call(s.prototype),t.PlaceHolder=s}),ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,r){var n=e("../lib/event"),i=e("../lib/useragent");function o(e,t){return e.row==t.row&&e.column==t.column}t.onMouseDown=function(e){var t=e.domEvent,r=t.altKey,s=t.shiftKey,a=t.ctrlKey,l=e.getAccelKey(),c=e.getButton();if(a&&i.isMac&&(c=t.button),e.editor.inMultiSelectMode&&2==c)e.editor.textInput.onContextMenu(e.domEvent);else if(a||r||l){if(0===c){var u,d=e.editor,g=d.selection,h=d.inMultiSelectMode,m=e.getDocumentPosition(),p=g.getCursor(),_=e.inSelection()||g.isEmpty()&&o(m,p),f=e.x,b=e.y,y=d.session,x=d.renderer.pixelToScreenCoordinates(f,b),v=x;if(d.$mouseHandler.$enableJumpToDef)a&&r||l&&r?u=s?"block":"add":r&&d.$blockSelectEnabled&&(u="block");else if(l&&!r){if(u="add",!h&&s)return}else r&&d.$blockSelectEnabled&&(u="block");if(u&&i.isMac&&t.ctrlKey&&d.$mouseHandler.cancelContextMenu(),"add"==u){if(!h&&_)return;if(!h){var w=g.toOrientedRange();d.addSelectionMarker(w)}var k=g.rangeList.rangeAtPoint(m);d.$blockScrolling++,d.inVirtualSelectionMode=!0,s&&(k=null,w=g.ranges[0]||w,d.removeSelectionMarker(w)),d.once("mouseup",function(){var e=g.toOrientedRange();k&&e.isEmpty()&&o(k.cursor,e.cursor)?g.substractPoint(e.cursor):(s?g.substractPoint(w.cursor):w&&(d.removeSelectionMarker(w),g.addRange(w)),g.addRange(e)),d.$blockScrolling--,d.inVirtualSelectionMode=!1})}else if("block"==u){var C;e.stop(),d.inVirtualSelectionMode=!0;var A=[];d.$blockScrolling++,h&&!l?g.toSingleRange():!h&&l&&(C=g.toOrientedRange(),d.addSelectionMarker(C)),s?x=y.documentToScreenPosition(g.lead):g.moveToPosition(m),d.$blockScrolling--,v={row:-1,column:-1};var S=function(){var e=d.renderer.pixelToScreenCoordinates(f,b),t=y.screenToDocumentPosition(e.row,e.column);o(v,e)&&o(t,g.lead)||(v=e,d.$blockScrolling++,d.selection.moveToPosition(t),d.renderer.scrollCursorIntoView(),d.removeSelectionMarkers(A),A=g.rectangularRangeBlock(v,x),d.$mouseHandler.$clickSelection&&1==A.length&&A[0].isEmpty()&&(A[0]=d.$mouseHandler.$clickSelection.clone()),A.forEach(d.addSelectionMarker,d),d.updateSelectionMarkers(),d.$blockScrolling--)};n.capture(d.container,function(e){f=e.clientX,b=e.clientY},function(e){clearInterval(E),d.removeSelectionMarkers(A),A.length||(A=[g.toOrientedRange()]),d.$blockScrolling++,C&&(d.removeSelectionMarker(C),g.toSingleRange(C));for(var t=0;t<A.length;t++)g.addRange(A[t]);d.inVirtualSelectionMode=!1,d.$mouseHandler.$clickSelection=null,d.$blockScrolling--});var E=setInterval(function(){S()},20);return e.preventDefault()}}}else 0===c&&e.editor.inMultiSelectMode&&e.editor.exitMultiSelectMode()}}),ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"],function(e,t,r){t.defaultCommands=[{name:"addCursorAbove",exec:function(e){e.selectMoreLines(-1)},bindKey:{win:"Ctrl-Alt-Up",mac:"Ctrl-Alt-Up"},scrollIntoView:"cursor",readOnly:!0},{name:"addCursorBelow",exec:function(e){e.selectMoreLines(1)},bindKey:{win:"Ctrl-Alt-Down",mac:"Ctrl-Alt-Down"},scrollIntoView:"cursor",readOnly:!0},{name:"addCursorAboveSkipCurrent",exec:function(e){e.selectMoreLines(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Up",mac:"Ctrl-Alt-Shift-Up"},scrollIntoView:"cursor",readOnly:!0},{name:"addCursorBelowSkipCurrent",exec:function(e){e.selectMoreLines(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Down",mac:"Ctrl-Alt-Shift-Down"},scrollIntoView:"cursor",readOnly:!0},{name:"selectMoreBefore",exec:function(e){e.selectMore(-1)},bindKey:{win:"Ctrl-Alt-Left",mac:"Ctrl-Alt-Left"},scrollIntoView:"cursor",readOnly:!0},{name:"selectMoreAfter",exec:function(e){e.selectMore(1)},bindKey:{win:"Ctrl-Alt-Right",mac:"Ctrl-Alt-Right"},scrollIntoView:"cursor",readOnly:!0},{name:"selectNextBefore",exec:function(e){e.selectMore(-1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Left",mac:"Ctrl-Alt-Shift-Left"},scrollIntoView:"cursor",readOnly:!0},{name:"selectNextAfter",exec:function(e){e.selectMore(1,!0)},bindKey:{win:"Ctrl-Alt-Shift-Right",mac:"Ctrl-Alt-Shift-Right"},scrollIntoView:"cursor",readOnly:!0},{name:"splitIntoLines",exec:function(e){e.multiSelect.splitIntoLines()},bindKey:{win:"Ctrl-Alt-L",mac:"Ctrl-Alt-L"},readOnly:!0},{name:"alignCursors",exec:function(e){e.alignCursors()},bindKey:{win:"Ctrl-Alt-A",mac:"Ctrl-Alt-A"},scrollIntoView:"cursor"},{name:"findAll",exec:function(e){e.findAll()},bindKey:{win:"Ctrl-Alt-K",mac:"Ctrl-Alt-G"},scrollIntoView:"cursor",readOnly:!0}],t.multiSelectCommands=[{name:"singleSelection",bindKey:"esc",exec:function(e){e.exitMultiSelectMode()},scrollIntoView:"cursor",readOnly:!0,isAvailable:function(e){return e&&e.inMultiSelectMode}}];var n=e("../keyboard/hash_handler").HashHandler;t.keyboardHandler=new n(t.multiSelectCommands)}),ace.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(e,t,r){var n=e("./range_list").RangeList,i=e("./range").Range,o=e("./selection").Selection,s=e("./mouse/multi_select_handler").onMouseDown,a=e("./lib/event"),l=e("./lib/lang"),c=e("./commands/multi_select_commands");t.commands=c.defaultCommands.concat(c.multiSelectCommands);var u=new(0,e("./search").Search);var d=e("./edit_session").EditSession;(function(){this.getSelectionMarkers=function(){return this.$selectionMarkers}}).call(d.prototype),function(){this.ranges=null,this.rangeList=null,this.addRange=function(e,t){if(e){if(!this.inMultiSelectMode&&0===this.rangeCount){var r=this.toOrientedRange();if(this.rangeList.add(r),this.rangeList.add(e),2!=this.rangeList.ranges.length)return this.rangeList.removeAll(),t||this.fromOrientedRange(e);this.rangeList.removeAll(),this.rangeList.add(r),this.$onAddRange(r)}e.cursor||(e.cursor=e.end);var n=this.rangeList.add(e);return this.$onAddRange(e),n.length&&this.$onRemoveRange(n),this.rangeCount>1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)}},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){if(this.rangeCount=this.rangeList.ranges.length,1==this.rangeCount&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var r=e.length;r--;){var n=this.ranges.indexOf(e[r]);this.ranges.splice(n,1)}this._signal("removeRange",{ranges:e}),0===this.rangeCount&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),(t=t||this.ranges[0])&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){this.rangeList||(this.rangeList=new n,this.ranges=[],this.rangeCount=0)},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],r=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(r,t.cursor==t.start)}else{r=this.getRange();var n=this.isBackwards(),o=r.start.row,s=r.end.row;if(o==s){if(n)var a=r.end,l=r.start;else a=r.start,l=r.end;return this.addRange(i.fromPoints(l,l)),void this.addRange(i.fromPoints(a,a))}var c=[],u=this.getLineRange(o,!0);u.start.column=r.start.column,c.push(u);for(var d=o+1;d<s;d++)c.push(this.getLineRange(d,!0));(u=this.getLineRange(s,!0)).end.column=r.end.column,c.push(u),c.forEach(this.addRange,this)}},this.toggleBlockSelection=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],r=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(r,t.cursor==t.start)}else{var n=this.session.documentToScreenPosition(this.selectionLead),o=this.session.documentToScreenPosition(this.selectionAnchor);this.rectangularRangeBlock(n,o).forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,r){var n=[],o=e.column<t.column;if(o)var s=e.column,a=t.column;else s=t.column,a=e.column;var l=e.row<t.row;if(l)var c=e.row,u=t.row;else c=t.row,u=e.row;s<0&&(s=0),c<0&&(c=0),c==u&&(r=!0);for(var d=c;d<=u;d++){var g=i.fromPoints(this.session.screenToDocumentPosition(d,s),this.session.screenToDocumentPosition(d,a));if(g.isEmpty()){if(m&&h(g.end,m))break;var m=g.end}g.cursor=o?g.start:g.end,n.push(g)}if(l&&n.reverse(),!r){for(var p=n.length-1;n[p].isEmpty()&&p>0;)p--;if(p>0)for(var _=0;n[_].isEmpty();)_++;for(var f=p;f>=_;f--)n[f].isEmpty()&&n.splice(f,1)}return n}}.call(o.prototype);var g=e("./editor").Editor;function h(e,t){return e.row==t.row&&e.column==t.column}function m(e){e.$multiselectOnSessionChange||(e.$onAddRange=e.$onAddRange.bind(e),e.$onRemoveRange=e.$onRemoveRange.bind(e),e.$onMultiSelect=e.$onMultiSelect.bind(e),e.$onSingleSelect=e.$onSingleSelect.bind(e),e.$multiselectOnSessionChange=t.onSessionChange.bind(e),e.$checkMultiselectChange=e.$checkMultiselectChange.bind(e),e.$multiselectOnSessionChange(e),e.on("changeSession",e.$multiselectOnSessionChange),e.on("mousedown",s),e.commands.addCommands(c.defaultCommands),function(e){var t=e.textInput.getElement(),r=!1;function n(t){r&&(e.renderer.setMouseCursor(""),r=!1)}a.addListener(t,"keydown",function(t){var i=18==t.keyCode&&!(t.ctrlKey||t.shiftKey||t.metaKey);e.$blockSelectEnabled&&i?r||(e.renderer.setMouseCursor("crosshair"),r=!0):r&&n()}),a.addListener(t,"keyup",n),a.addListener(t,"blur",n)}(e))}(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(e.marker){this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);-1!=t&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length}},this.removeSelectionMarkers=function(e){for(var t=this.session.$selectionMarkers,r=e.length;r--;){var n=e[r];if(n.marker){this.session.removeMarker(n.marker);var i=t.indexOf(n);-1!=i&&t.splice(i,1)}}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){this.inMultiSelectMode||(this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(c.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers())},this.$onSingleSelect=function(e){this.session.multiSelect.inVirtualMode||(this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(c.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection"))},this.$onMultiSelectExec=function(e){var t=e.command,r=e.editor;if(r.multiSelect){if(t.multiSelectAction)"forEach"==t.multiSelectAction?n=r.forEachSelection(t,e.args):"forEachLine"==t.multiSelectAction?n=r.forEachSelection(t,e.args,!0):"single"==t.multiSelectAction?(r.exitMultiSelectMode(),n=t.exec(r,e.args||{})):n=t.multiSelectAction(r,e.args||{});else{var n=t.exec(r,e.args||{});r.multiSelect.addRange(r.multiSelect.toOrientedRange()),r.multiSelect.mergeOverlappingRanges()}return n}},this.forEachSelection=function(e,t,r){if(!this.inVirtualSelectionMode){var n,i=r&&r.keepOrder,s=1==r||r&&r.$byLines,a=this.session,l=this.selection,c=l.rangeList,u=(i?l:c).ranges;if(!u.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var d=l._eventRegistry;l._eventRegistry={};var g=new o(a);this.inVirtualSelectionMode=!0;for(var h=u.length;h--;){if(s)for(;h>0&&u[h].start.row==u[h-1].end.row;)h--;g.fromOrientedRange(u[h]),g.index=h,this.selection=a.selection=g;var m=e.exec?e.exec(this,t||{}):e(this,t||{});n||void 0===m||(n=m),g.toOrientedRange(u[h])}g.detach(),this.selection=a.selection=l,this.inVirtualSelectionMode=!1,l._eventRegistry=d,l.mergeOverlappingRanges();var p=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),p&&p.from==p.to&&this.renderer.animateScrolling(p.from),n}},this.exitMultiSelectMode=function(){this.inMultiSelectMode&&!this.inVirtualSelectionMode&&this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){for(var t=this.multiSelect.rangeList.ranges,r=[],n=0;n<t.length;n++)r.push(this.session.getTextRange(t[n]));var i=this.session.getDocument().getNewLineCharacter();(e=r.join(i)).length==(r.length-1)*i.length&&(e="")}else this.selection.isEmpty()||(e=this.session.getTextRange(this.getSelectionRange()));return e},this.$checkMultiselectChange=function(e,t){if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var r=this.multiSelect.ranges[0];if(this.multiSelect.isEmpty()&&t==this.multiSelect.anchor)return;var n=t==this.multiSelect.anchor?r.cursor==r.start?r.end:r.start:r.cursor;n.row==t.row&&this.session.$clipPositionToDocument(n.row,n.column).column==t.column||this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange())}},this.findAll=function(e,t,r){if((t=t||{}).needle=e||t.needle,null==t.needle){var n=this.selection.isEmpty()?this.selection.getWordRange():this.selection.getRange();t.needle=this.session.getTextRange(n)}this.$search.set(t);var i=this.$search.findAll(this.session);if(!i.length)return 0;this.$blockScrolling+=1;var o=this.multiSelect;r||o.toSingleRange(i[0]);for(var s=i.length;s--;)o.addRange(i[s],!0);return n&&o.rangeList.rangeAtPoint(n.start)&&o.addRange(n,!0),this.$blockScrolling-=1,i.length},this.selectMoreLines=function(e,t){var r=this.selection.toOrientedRange(),n=r.cursor==r.end,o=this.session.documentToScreenPosition(r.cursor);this.selection.$desiredColumn&&(o.column=this.selection.$desiredColumn);var s,a=this.session.screenToDocumentPosition(o.row+e,o.column);if(r.isEmpty())c=a;else var l=this.session.documentToScreenPosition(n?r.end:r.start),c=this.session.screenToDocumentPosition(l.row+e,l.column);n?(s=i.fromPoints(a,c)).cursor=s.start:(s=i.fromPoints(c,a)).cursor=s.end;if(s.desiredColumn=o.column,this.selection.inMultiSelectMode){if(t)var u=r.cursor}else this.selection.addRange(r);this.selection.addRange(s),u&&this.selection.substractPoint(u)},this.transposeSelections=function(e){for(var t=this.session,r=t.multiSelect,n=r.ranges,i=n.length;i--;){if((a=n[i]).isEmpty()){var o=t.getWordRange(a.start.row,a.start.column);a.start.row=o.start.row,a.start.column=o.start.column,a.end.row=o.end.row,a.end.column=o.end.column}}r.mergeOverlappingRanges();var s=[];for(i=n.length;i--;){var a=n[i];s.unshift(t.getTextRange(a))}e<0?s.unshift(s.pop()):s.push(s.shift());for(i=n.length;i--;){o=(a=n[i]).clone();t.replace(a,s[i]),a.start.row=o.start.row,a.start.column=o.start.column}},this.selectMore=function(e,t,r){var n=this.session,i=n.multiSelect.toOrientedRange();if(!i.isEmpty()||((i=n.getWordRange(i.start.row,i.start.column)).cursor=-1==e?i.start:i.end,this.multiSelect.addRange(i),!r)){var o=n.getTextRange(i),s=function(e,t,r){return u.$options.wrap=!0,u.$options.needle=t,u.$options.backwards=-1==r,u.find(e)}(n,o,e);s&&(s.cursor=-1==e?s.start:s.end,this.$blockScrolling+=1,this.session.unfold(s),this.multiSelect.addRange(s),this.$blockScrolling-=1,this.renderer.scrollCursorIntoView(null,.5)),t&&this.multiSelect.substractPoint(i.cursor)}},this.alignCursors=function(){var e=this.session,t=e.multiSelect,r=t.ranges,n=-1,o=r.filter(function(e){if(e.cursor.row==n)return!0;n=e.cursor.row});if(r.length&&o.length!=r.length-1){o.forEach(function(e){t.substractPoint(e.cursor)});var s=0,a=1/0,c=r.map(function(t){var r=t.cursor,n=e.getLine(r.row).substr(r.column).search(/\S/g);return-1==n&&(n=0),r.column>s&&(s=r.column),n<a&&(a=n),n});r.forEach(function(t,r){var n=t.cursor,o=s-n.column,u=c[r]-a;o>u?e.insert(n,l.stringRepeat(" ",o-u)):e.remove(new i(n.row,n.column,n.row,n.column-o+u)),t.start.column=t.end.column=s,t.start.row=t.end.row=n.row,t.cursor=t.end}),t.fromOrientedRange(r[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}else{var u=this.selection.getRange(),d=u.start.row,g=u.end.row,h=d==g;if(h){var m,p=this.session.getLength();do{m=this.session.getLine(g)}while(/[=:]/.test(m)&&++g<p);do{m=this.session.getLine(d)}while(/[=:]/.test(m)&&--d>0);d<0&&(d=0),g>=p&&(g=p-1)}var _=this.session.removeFullLines(d,g);_=this.$reAlignText(_,h),this.session.insert({row:d,column:0},_.join("\n")+"\n"),h||(u.start.column=0,u.end.column=_[_.length-1].length),this.selection.setRange(u)}},this.$reAlignText=function(e,t){var r,n,i,o=!0,s=!0;return e.map(function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?null==r?(r=t[1].length,n=t[2].length,i=t[3].length,t):(r+n+i!=t[1].length+t[2].length+t[3].length&&(s=!1),r!=t[1].length&&(o=!1),r>t[1].length&&(r=t[1].length),n<t[2].length&&(n=t[2].length),i>t[3].length&&(i=t[3].length),t):[e]}).map(t?c:o?s?function(e){return e[2]?a(r+n-e[2].length)+e[2]+a(i)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}:c:function(e){return e[2]?a(r)+e[2]+a(i)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]});function a(e){return l.stringRepeat(" ",e)}function c(e){return e[2]?a(r)+e[2]+a(n-e[2].length+i)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}}}).call(g.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var r=e.oldSession;r&&(r.multiSelect.off("addRange",this.$onAddRange),r.multiSelect.off("removeRange",this.$onRemoveRange),r.multiSelect.off("multiSelect",this.$onMultiSelect),r.multiSelect.off("singleSelect",this.$onSingleSelect),r.multiSelect.lead.off("change",this.$checkMultiselectChange),r.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(g.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",s)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",s))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);return this.foldingStartMarker.test(n)?"start":"markbeginend"==t&&this.foldingStopMarker&&this.foldingStopMarker.test(n)?"end":""},this.getFoldWidgetRange=function(e,t,r){return null},this.indentationBlock=function(e,t,r){var i=/\S/,o=e.getLine(t),s=o.search(i);if(-1!=s){for(var a=r||o.length,l=e.getLength(),c=t,u=t;++t<l;){var d=e.getLine(t).search(i);if(-1!=d){if(d<=s)break;u=t}}if(u>c){var g=e.getLine(u).length;return new n(c,a,u,g)}}},this.openingBracketBlock=function(e,t,r,i,o){var s={row:r,column:i+1},a=e.$findClosingBracket(t,s,o);if(a){var l=e.foldWidgets[a.row];return null==l&&(l=e.getFoldWidget(a.row)),"start"==l&&a.row>s.row&&(a.row--,a.column=e.getLine(a.row).length),n.fromPoints(s,a)}},this.closingBracketBlock=function(e,t,r,i,o){var s={row:r,column:i},a=e.$findOpeningBracket(t,s);if(a)return a.column++,s.column--,n.fromPoints(a,s)}}).call(i.prototype)}),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,r){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}',e("../lib/dom").importCssString(t.cssText,t.cssClass)}),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,r){"use strict";e("./lib/oop");var n=e("./lib/dom");e("./range").Range;function i(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}(function(){this.getRowLength=function(e){var t;return t=this.lineWidgets&&this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0,this.$useWrapMode&&this.$wrapData[e]?this.$wrapData[e].length+1+t:1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach(),this.editor!=e&&(this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets)))},this.detach=function(e){var t=this.editor;if(t){this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var r=this.session.lineWidgets;r&&r.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})}},this.updateOnFold=function(e,t){var r=t.lineWidgets;if(r&&e.action){for(var n=e.data,i=n.start.row,o=n.end.row,s="add"==e.action,a=i+1;a<o;a++)r[a]&&(r[a].hidden=s);r[o]&&(s?r[i]?r[o].hidden=s:r[i]=r[o]:(r[i]==r[o]&&(r[i]=void 0),r[o].hidden=s))}},this.updateOnChange=function(e){var t=this.session.lineWidgets;if(t){var r=e.start.row,n=e.end.row-r;if(0===n);else if("remove"==e.action){t.splice(r+1,n).forEach(function(e){e&&this.removeLineWidget(e)},this),this.$updateRows()}else{var i=new Array(n);i.unshift(r,0),t.splice.apply(t,i),this.$updateRows()}}},this.$updateRows=function(){var e=this.session.lineWidgets;if(e){var t=!0;e.forEach(function(e,r){if(e)for(t=!1,e.row=r;e.$oldWidget;)e.$oldWidget.row=r,e=e.$oldWidget}),t&&(this.session.lineWidgets=null)}},this.addLineWidget=function(e){this.session.lineWidgets||(this.session.lineWidgets=new Array(this.session.getLength()));var t=this.session.lineWidgets[e.row];t&&(e.$oldWidget=t,t.el&&t.el.parentNode&&(t.el.parentNode.removeChild(t.el),t._inDocument=!1)),this.session.lineWidgets[e.row]=e,e.session=this.session;var r=this.editor.renderer;e.html&&!e.el&&(e.el=n.createElement("div"),e.el.innerHTML=e.html),e.el&&(n.addCssClass(e.el,"ace_lineWidgetContainer"),e.el.style.position="absolute",e.el.style.zIndex=5,r.container.appendChild(e.el),e._inDocument=!0),e.coverGutter||(e.el.style.zIndex=3),null==e.pixelHeight&&(e.pixelHeight=e.el.offsetHeight),null==e.rowCount&&(e.rowCount=e.pixelHeight/r.layerConfig.lineHeight);var i=this.session.getFoldAt(e.row,0);if(e.$fold=i,i){var o=this.session.lineWidgets;e.row!=i.end.row||o[i.start.row]?e.hidden=!0:o[i.start.row]=e}return this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows(),this.renderWidgets(null,r),this.onWidgetChanged(e),e},this.removeLineWidget=function(e){if(e._inDocument=!1,e.session=null,e.el&&e.el.parentNode&&e.el.parentNode.removeChild(e.el),e.editor&&e.editor.destroy)try{e.editor.destroy()}catch(e){}if(this.session.lineWidgets){var t=this.session.lineWidgets[e.row];if(t==e)this.session.lineWidgets[e.row]=e.$oldWidget,e.$oldWidget&&this.onWidgetChanged(e.$oldWidget);else for(;t;){if(t.$oldWidget==e){t.$oldWidget=e.$oldWidget;break}t=t.$oldWidget}}this.session._emit("changeFold",{data:{start:{row:e.row}}}),this.$updateRows()},this.getWidgetsAtRow=function(e){for(var t=this.session.lineWidgets,r=t&&t[e],n=[];r;)n.push(r),r=r.$oldWidget;return n},this.onWidgetChanged=function(e){this.session._changedWidgets.push(e),this.editor&&this.editor.renderer.updateFull()},this.measureWidgets=function(e,t){var r=this.session._changedWidgets,n=t.layerConfig;if(r&&r.length){for(var i=1/0,o=0;o<r.length;o++){var s=r[o];if(s&&s.el&&s.session==this.session){if(!s._inDocument){if(this.session.lineWidgets[s.row]!=s)continue;s._inDocument=!0,t.container.appendChild(s.el)}s.h=s.el.offsetHeight,s.fixedWidth||(s.w=s.el.offsetWidth,s.screenWidth=Math.ceil(s.w/n.characterWidth));var a=s.h/n.lineHeight;s.coverLine&&(a-=this.session.getRowLineCount(s.row))<0&&(a=0),s.rowCount!=a&&(s.rowCount=a,s.row<i&&(i=s.row))}}i!=1/0&&(this.session._emit("changeFold",{data:{start:{row:i}}}),this.session.lineWidgetWidth=null),this.session._changedWidgets=[]}},this.renderWidgets=function(e,t){var r=t.layerConfig,n=this.session.lineWidgets;if(n){for(var i=Math.min(this.firstRow,r.firstRow),o=Math.max(this.lastRow,r.lastRow,n.length);i>0&&!n[i];)i--;this.firstRow=r.firstRow,this.lastRow=r.lastRow,t.$cursorLayer.config=r;for(var s=i;s<=o;s++){var a=n[s];if(a&&a.el)if(a.hidden)a.el.style.top=-100-(a.pixelHeight||0)+"px";else{a._inDocument||(a._inDocument=!0,t.container.appendChild(a.el));var l=t.$cursorLayer.getPixelPosition({row:s,column:0},!0).top;a.coverLine||(l+=r.lineHeight*this.session.getRowLineCount(a.row)),a.el.style.top=l-r.offset+"px";var c=a.coverGutter?0:t.gutterWidth;a.fixedWidth||(c-=t.scrollLeft),a.el.style.left=c+"px",a.fullWidth&&a.screenWidth&&(a.el.style.minWidth=r.width+2*r.padding+"px"),a.fixedWidth?a.el.style.right=t.scrollBar.getWidth()+"px":a.el.style.right=""}}}}}).call(i.prototype),t.LineWidgets=i}),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,r){"use strict";var n=e("../line_widgets").LineWidgets,i=e("../lib/dom"),o=e("../range").Range;t.showErrorMarker=function(e,t){var r=e.session;r.widgetManager||(r.widgetManager=new n(r),r.widgetManager.attach(e));var s=e.getCursorPosition(),a=s.row,l=r.widgetManager.getWidgetsAtRow(a).filter(function(e){return"errorMarker"==e.type})[0];l?l.destroy():a-=t;var c,u=function(e,t,r){var n=e.getAnnotations().sort(o.comparePoints);if(n.length){var i=function(e,t,r){for(var n=0,i=e.length-1;n<=i;){var o=n+i>>1,s=r(t,e[o]);if(s>0)n=o+1;else{if(!(s<0))return o;i=o-1}}return-(n+1)}(n,{row:t,column:-1},o.comparePoints);i<0&&(i=-i-1),i>=n.length?i=r>0?0:n.length-1:0===i&&r<0&&(i=n.length-1);var s=n[i];if(s&&r){if(s.row===t){do{s=n[i+=r]}while(s&&s.row===t);if(!s)return n.slice()}var a=[];t=s.row;do{a[r<0?"unshift":"push"](s),s=n[i+=r]}while(s&&s.row==t);return a.length&&a}}}(r,a,t);if(u){var d=u[0];s.column=(d.pos&&"number"!=typeof d.column?d.pos.sc:d.column)||0,s.row=d.row,c=e.renderer.$gutterLayer.$annotations[s.row]}else{if(l)return;c={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var g={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div"),type:"errorMarker"},h=g.el.appendChild(i.createElement("div")),m=g.el.appendChild(i.createElement("div"));m.className="error_widget_arrow "+c.className;var p=e.renderer.$cursorLayer.getPixelPosition(s).left;m.style.left=p+e.renderer.gutterWidth-5+"px",g.el.className="error_widget_wrapper",h.className="error_widget "+c.className,h.innerHTML=c.text.join("<br>"),h.appendChild(i.createElement("div"));var _=function(e,t,r){if(0===t&&("esc"===r||"return"===r))return g.destroy(),{command:"null"}};g.destroy=function(){e.$mouseHandler.isMousePressed||(e.keyBinding.removeKeyboardHandler(_),r.widgetManager.removeLineWidget(g),e.off("changeSelection",g.destroy),e.off("changeSession",g.destroy),e.off("mouseup",g.destroy),e.off("change",g.destroy))},e.keyBinding.addKeyboardHandler(_),e.on("changeSelection",g.destroy),e.on("changeSession",g.destroy),e.on("mouseup",g.destroy),e.on("change",g.destroy),e.session.widgetManager.addLineWidget(g),g.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:g.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","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(e,t,r){"use strict";e("./lib/fixoldbrowsers");var n=e("./lib/dom"),i=e("./lib/event"),o=e("./editor").Editor,s=e("./edit_session").EditSession,a=e("./undomanager").UndoManager,l=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,"function"==typeof define&&(t.define=define),t.edit=function(e){if("string"==typeof e){var r=e;if(!(e=document.getElementById(r)))throw new Error("ace.edit can't find div #"+r)}if(e&&e.env&&e.env.editor instanceof o)return e.env.editor;var s="";if(e&&/input|textarea/i.test(e.tagName)){var a=e;s=a.value,e=n.createElement("pre"),a.parentNode.replaceChild(e,a)}else e&&(s=n.getInnerText(e),e.innerHTML="");var c=t.createEditSession(s),u=new o(new l(e));u.setSession(c);var d={document:c,editor:u,onResize:u.resize.bind(u,null)};return a&&(d.textarea=a),i.addListener(window,"resize",d.onResize),u.on("destroy",function(){i.removeListener(window,"resize",d.onResize),d.editor.container.env=null}),u.container.env=u.env=d,u},t.createEditSession=function(e,t){var r=new s(e,t);return r.setUndoManager(new a),r},t.EditSession=s,t.UndoManager=a,t.version="1.2.6"}),ace.require(["ace/ace"],function(e){for(var t in e&&(e.config.init(!0),e.define=ace.define),window.ace||(window.ace=e),e)e.hasOwnProperty(t)&&(window.ace[t]=e[t])}),ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,o=e("./lib/lang"),s=e("./range").Range,a=e("./anchor").Anchor,l=e("./keyboard/hash_handler").HashHandler,c=e("./tokenizer").Tokenizer,u=s.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){n.implement(this,i),this.getTokenizer=function(){function e(e,t,r){return e=e.substr(1),/^\d+$/.test(e)&&!r.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return d.$tokenizer=new c({start:[{regex:/:/,onMatch:function(e,t,r){return r.length&&r[0].expectIf?(r[0].expectIf=!1,r[0].elseBranch=r[0],[r[0]]):":"}},{regex:/\\./,onMatch:function(e,t,r){var n=e[1];return"}"==n&&r.length||-1!="`$\\".indexOf(n)?e=n:r.inFormatString&&("n"==n||"t"==n?e="\n":-1!="ulULE".indexOf(n)&&(e={changeCase:n,local:n>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,r){return[r.length?r.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,r,n){var i=e(t.substr(1),0,n);return n.unshift(i[0]),i},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,r){r[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,r){var n=r[0];return n.fmtString=e,e=this.splitRegex.exec(e),n.guard=e[1],n.fmt=e[2],n.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,r){return r[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,r){r[0]&&(r[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,r){r.inFormatString=!0},next:"start"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var r=t.substr(1);return(this.variables[t[0]+"__"]||{})[r]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,""),e){var n=e.session;switch(t){case"CURRENT_WORD":var i=n.getWordRange();case"SELECTION":case"SELECTED_TEXT":return n.getTextRange(i);case"CURRENT_LINE":return n.getLine(e.getCursorPosition().row);case"PREV_LINE":return n.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return n.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return n.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,r){var n=t.flag||"",i=t.guard;i=new RegExp(i,n.replace(/[^gi]/,""));var o=this.tokenizeTmSnippet(t.fmt,"formatString"),s=this,a=e.replace(i,function(){s.variables.__=arguments;for(var e=s.resolveVariables(o,r),t="E",n=0;n<e.length;n++){var i=e[n];if("object"==typeof i)if(e[n]="",i.changeCase&&i.local){var a=e[n+1];a&&"string"==typeof a&&("u"==i.changeCase?e[n]=a[0].toUpperCase():e[n]=a[0].toLowerCase(),e[n+1]=a.substr(1))}else i.changeCase&&(t=i.changeCase);else"U"==t?e[n]=i.toUpperCase():"L"==t&&(e[n]=i.toLowerCase())}return e.join("")});return this.variables.__=null,a},this.resolveVariables=function(e,t){for(var r=[],n=0;n<e.length;n++){var i=e[n];if("string"==typeof i)r.push(i);else{if("object"!=typeof i)continue;if(i.skip)s(i);else{if(i.processed<n)continue;if(i.text){var o=this.getVariableValue(t,i.text);o&&i.fmtString&&(o=this.tmStrFormat(o,i)),i.processed=n,null==i.expectIf?o&&(r.push(o),s(i)):o?i.skip=i.elseBranch:s(i)}else(null!=i.tabstopId||null!=i.changeCase)&&r.push(i)}}}function s(t){var r=e.indexOf(t,n+1);-1!=r&&(n=r)}return r},this.insertSnippetForSelection=function(e,t){var r=e.getCursorPosition(),n=e.session.getLine(r.row),i=e.session.getTabString(),o=n.match(/^\s*/)[0];r.column<o.length&&(o=o.slice(0,r.column)),t=t.replace(/\r/g,"");var s=this.tokenizeTmSnippet(t);s=(s=this.resolveVariables(s,e)).map(function(e){return"\n"==e?e+o:"string"==typeof e?e.replace(/\t/g,i):e});var a=[];s.forEach(function(e,t){if("object"==typeof e){var r=e.tabstopId,n=a[r];if(n||((n=a[r]=[]).index=r,n.value=""),-1===n.indexOf(e)){n.push(e);var i=s.indexOf(e,t+1);if(-1!==i){var o=s.slice(t+1,i);o.some(function(e){return"object"==typeof e})&&!n.value?n.value=o:!o.length||n.value&&"string"==typeof n.value||(n.value=o.join(""))}}}}),a.forEach(function(e){e.length=0});var l={};function c(e){for(var t=[],r=0;r<e.length;r++){var n=e[r];if("object"==typeof n){if(l[n.tabstopId])continue;n=t[e.lastIndexOf(n,r-1)]||{tabstopId:n.tabstopId}}t[r]=n}return t}for(var u=0;u<s.length;u++){var d=s[u];if("object"==typeof d){var h=d.tabstopId,m=s.indexOf(d,u+1);if(l[h])l[h]===d&&(l[h]=null);else{var p=a[h],_="string"==typeof p.value?[p.value]:c(p.value);_.unshift(u+1,Math.max(0,m-u)),_.push(d),l[h]=d,s.splice.apply(s,_),-1===p.indexOf(d)&&p.push(d)}}}var f=0,b=0,y="";s.forEach(function(e){if("string"==typeof e){var t=e.split("\n");t.length>1?(b=t[t.length-1].length,f+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:f,column:b}:e.start={row:f,column:b}});var x=e.getSelectionRange(),v=e.session.replace(x,y),w=new g(e),k=e.inVirtualSelectionMode&&e.selection.index;w.addTabstops(a,x.start,v,k)},this.insertSnippet=function(e,t){var r=this;if(e.inVirtualSelectionMode)return r.insertSnippetForSelection(e,t);e.forEachSelection(function(){r.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";if("html"===(t=t.split("/").pop())||"php"===t){"php"!==t||e.session.$mode.inlinePhp||(t="html");var r=e.getCursorPosition(),n=e.session.getState(r.row);"object"==typeof n&&(n=n[0]),n.substring&&("js-"==n.substring(0,3)?t="javascript":"css-"==n.substring(0,4)?t="css":"php-"==n.substring(0,4)&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),r=[t],n=this.snippetMap;return n[t]&&n[t].includeScopes&&r.push.apply(r,n[t].includeScopes),r.push("_"),r},this.expandWithTab=function(e,t){var r=this,n=e.forEachSelection(function(){return r.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return n&&e.tabstopManager&&e.tabstopManager.tabNext(),n},this.expandSnippetForSelection=function(e,t){var r,n=e.getCursorPosition(),i=e.session.getLine(n.row),o=i.substring(0,n.column),s=i.substr(n.column),a=this.snippetMap;return this.getActiveScopes(e).some(function(e){var t=a[e];return t&&(r=this.findMatchingSnippet(t,o,s)),!!r},this),!!r&&(t&&t.dryRun||(e.session.doc.removeInLine(n.row,n.column-r.replaceBefore.length,n.column+r.replaceAfter.length),this.variables.M__=r.matchBefore,this.variables.T__=r.matchAfter,this.insertSnippetForSelection(e,r.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,r){for(var n=e.length;n--;){var i=e[n];if((!i.startRe||i.startRe.test(t))&&((!i.endRe||i.endRe.test(r))&&(i.startRe||i.endRe)))return i.matchBefore=i.startRe?i.startRe.exec(t):[""],i.matchAfter=i.endRe?i.endRe.exec(r):[""],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:"",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(r)[0]:"",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var r=this.snippetMap,n=this.snippetNameMap,i=this;function s(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function a(e,t,r){return e=s(e),t=s(t),r?(e=t+e)&&"$"!=e[e.length-1]&&(e+="$"):(e+=t)&&"^"!=e[0]&&(e="^"+e),new RegExp(e)}function l(e){e.scope||(e.scope=t||"_"),t=e.scope,r[t]||(r[t]=[],n[t]={});var s=n[t];if(e.name){var l=s[e.name];l&&i.unregister(l),s[e.name]=e}r[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=o.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=a(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,"",!0),e.endRe=a(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,"",!0))}e||(e=[]),e&&e.content?l(e):Array.isArray(e)&&e.forEach(l),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){var r=this.snippetMap,n=this.snippetNameMap;function i(e){var i=n[e.scope||t];if(i&&i[e.name]){delete i[e.name];var o=r[e.scope||t],s=o&&o.indexOf(e);s>=0&&o.splice(s,1)}}e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");for(var t,r=[],n={},i=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;t=i.exec(e);){if(t[1])try{n=JSON.parse(t[1]),r.push(n)}catch(e){}if(t[4])n.content=t[4].replace(/^\t/gm,""),r.push(n),n={};else{var o=t[2],s=t[3];if("regex"==o){var a=/\/((?:[^\/\\]|\\.)*)|$/g;n.guard=a.exec(s)[1],n.trigger=a.exec(s)[1],n.endTrigger=a.exec(s)[1],n.endGuard=a.exec(s)[1]}else"snippet"==o?(n.tabTrigger=s.match(/^\S*/)[0],n.name||(n.name=s)):n[o]=s}}return r},this.getSnippetByName=function(e,t){var r,n=this.snippetNameMap;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(d.prototype);var g=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t="r"==e.action[0],r=e.start,n=e.end,i=r.row,o=n.row-i,s=n.column-r.column;if(t&&(o=-o,s=-s),!this.$inChange&&t){var a=this.selectedTabstop,l=a&&!a.some(function(e){return u(e.start,r)<=0&&u(e.end,n)>=0});if(l)return this.detach()}for(var c=this.ranges,d=0;d<c.length;d++){var g=c[d];g.end.row<r.row||(t&&u(r,g.start)<0&&u(n,g.end)>0?(this.removeRange(g),d--):(g.start.row==i&&g.start.column>r.column&&(g.start.column+=s),g.end.row==i&&g.end.column>=r.column&&(g.end.column+=s),g.start.row>=i&&(g.start.row+=o),g.end.row>=i&&(g.end.row+=o),u(g.start,g.end)>0&&this.removeRange(g)))}c.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var r=this.editor.session,n=r.getTextRange(e.firstNonLinked),i=e.length;i--;){var o=e[i];if(o.linked){var s=t.snippetManager.tmStrFormat(n,o.original);r.replace(o,s)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,r=this.editor.selection.isEmpty(),n=this.ranges.length;n--;)if(!this.ranges[n].linked){var i=this.ranges[n].contains(e.row,e.column),o=r||this.ranges[n].contains(t.row,t.column);if(i&&o)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,r=this.index+(e||1);(r=Math.min(Math.max(r,1),t))==t&&(r=0),this.selectTabstop(r),0===r&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,(t=this.tabstops[this.index])&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var r=this.editor.multiSelect;r.toSingleRange(t.firstNonLinked.clone());for(var n=t.length;n--;)t.hasLinkedRanges&&t[n].linked||r.addRange(t[n].clone(),!0);r.ranges[0]&&r.addRange(r.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,r){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var n=s.fromPoints(r,r);p(n.start,t),p(n.end,t),e[0]=[n],e[0].index=0}var i=[this.index+1,0],o=this.ranges;e.forEach(function(e,r){for(var n=this.$openTabstops[r]||e,a=e.length;a--;){var l=e[a],c=s.fromPoints(l.start,l.end||l.start);m(c.start,t),m(c.end,t),c.original=l,c.tabstop=n,o.push(c),n!=e?n.unshift(c):n[a]=c,l.fmtString?(c.linked=!0,n.hasLinkedRanges=!0):n.firstNonLinked||(n.firstNonLinked=c)}n.firstNonLinked||(n.hasLinkedRanges=!1),n===e&&(i.push(n),this.$openTabstops[r]=n),this.addTabstopMarkers(n)},this),i.length>2&&(this.tabstops.length&&i.push(i.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,i))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(-1!=(t=this.tabstops.indexOf(e.tabstop))&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new l,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(g.prototype);var h={};h.onChange=a.prototype.onChange,h.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},h.update=function(e,t,r){this.$insertRight=r,this.pos=e,this.onChange(t)};var m=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},p=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new d;var _=e("./editor").Editor;(function(){this.insertSnippet=function(e,r){return t.snippetManager.insertSnippet(this,e,r)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(_.prototype)}),ace.define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","tabStops","resources","utils","actions","ace/config","ace/config"],function(e,t,r){"use strict";var n,i,o=e("ace/keyboard/hash_handler").HashHandler,s=e("ace/editor").Editor,a=e("ace/snippets").snippetManager,l=e("ace/range").Range;function c(){}c.prototype={setupContext:function(e){this.ace=e,this.indentation=e.session.getTabString(),n||(n=window.emmet),(n.resources||n.require("resources")).setVariable("indentation",this.indentation),this.$syntax=null,this.$syntax=this.getSyntax()},getSelectionRange:function(){var e=this.ace.getSelectionRange(),t=this.ace.session.doc;return{start:t.positionToIndex(e.start),end:t.positionToIndex(e.end)}},createSelection:function(e,t){var r=this.ace.session.doc;this.ace.selection.setRange({start:r.indexToPosition(e),end:r.indexToPosition(t)})},getCurrentLineRange:function(){var e=this.ace,t=e.getCursorPosition().row,r=e.session.getLine(t).length,n=e.session.doc.positionToIndex({row:t,column:0});return{start:n,end:n+r}},getCaretPos:function(){var e=this.ace.getCursorPosition();return this.ace.session.doc.positionToIndex(e)},setCaretPos:function(e){var t=this.ace.session.doc.indexToPosition(e);this.ace.selection.moveToPosition(t)},getCurrentLine:function(){var e=this.ace.getCursorPosition().row;return this.ace.session.getLine(e)},replaceContent:function(e,t,r,n){null==r&&(r=null==t?this.getContent().length:t),null==t&&(t=0);var i=this.ace,o=i.session.doc,s=l.fromPoints(o.indexToPosition(t),o.indexToPosition(r));i.session.remove(s),s.end=s.start,e=this.$updateTabstops(e),a.insertSnippet(i,e)},getContent:function(){return this.ace.getValue()},getSyntax:function(){if(this.$syntax)return this.$syntax;var e=this.ace.session.$modeId.split("/").pop();if("html"==e||"php"==e){var t=this.ace.getCursorPosition(),r=this.ace.session.getState(t.row);"string"!=typeof r&&(r=r[0]),r&&((r=r.split("-")).length>1?e=r[0]:"php"==e&&(e="html"))}return e},getProfileName:function(){var e=n.resources||n.require("resources");switch(this.getSyntax()){case"css":return"css";case"xml":case"xsl":return"xml";case"html":var t=e.getVariable("profile");return t||(t=-1!=this.ace.session.getLines(0,2).join("").search(/<!DOCTYPE[^>]+XHTML/i)?"xhtml":"html"),t;default:var r=this.ace.session.$mode;return r.emmetConfig&&r.emmetConfig.profile||"xhtml"}},prompt:function(e){return prompt(e)},getSelection:function(){return this.ace.session.getTextRange()},getFilePath:function(){return""},$updateTabstops:function(e){var t=0,r=null,i=n.tabStops||n.require("tabStops"),o=(n.resources||n.require("resources")).getVocabulary("user"),s={tabstop:function(e){var n=parseInt(e.group,10),o=0===n;o?n=++t:n+=1e3;var a=e.placeholder;a&&(a=i.processText(a,s));var l="${"+n+(a?":"+a:"")+"}";return o&&(r=[e.start,l]),l},escape:function(e){return"$"==e?"\\$":"\\"==e?"\\\\":e}};if(e=i.processText(e,s),o.variables.insert_final_tabstop&&!/\$\{0\}$/.test(e))e+="${0}";else if(r){e=(n.utils?n.utils.common:n.require("utils")).replaceSubstring(e,"${0}",r[0],r[1])}return e}};var u={expand_abbreviation:{mac:"ctrl+alt+e",win:"alt+e"},match_pair_outward:{mac:"ctrl+d",win:"ctrl+,"},match_pair_inward:{mac:"ctrl+j",win:"ctrl+shift+0"},matching_pair:{mac:"ctrl+alt+j",win:"alt+j"},next_edit_point:"alt+right",prev_edit_point:"alt+left",toggle_comment:{mac:"command+/",win:"ctrl+/"},split_join_tag:{mac:"shift+command+'",win:"shift+ctrl+`"},remove_tag:{mac:"command+'",win:"shift+ctrl+;"},evaluate_math_expression:{mac:"shift+command+y",win:"shift+ctrl+y"},increment_number_by_1:"ctrl+up",decrement_number_by_1:"ctrl+down",increment_number_by_01:"alt+up",decrement_number_by_01:"alt+down",increment_number_by_10:{mac:"alt+command+up",win:"shift+alt+up"},decrement_number_by_10:{mac:"alt+command+down",win:"shift+alt+down"},select_next_item:{mac:"shift+command+.",win:"shift+ctrl+."},select_previous_item:{mac:"shift+command+,",win:"shift+ctrl+,"},reflect_css_value:{mac:"shift+command+r",win:"shift+ctrl+r"},encode_decode_data_url:{mac:"shift+ctrl+d",win:"ctrl+'"},expand_abbreviation_with_tab:"Tab",wrap_with_abbreviation:{mac:"shift+ctrl+a",win:"shift+ctrl+a"}},d=new c;for(var g in t.commands=new o,t.runEmmetCommand=function e(t){try{d.setupContext(t);var r=n.actions||n.require("actions");if("expand_abbreviation_with_tab"==this.action){if(!t.selection.isEmpty())return!1;var i=t.selection.lead,o=t.session.getTokenAt(i.row,i.column);if(o&&/\btag\b/.test(o.type))return!1}if("wrap_with_abbreviation"==this.action)return setTimeout(function(){r.run("wrap_with_abbreviation",d)},0);var s=r.run(this.action,d)}catch(r){if(!n)return m(e.bind(this,t)),!0;t._signal("changeStatus","string"==typeof r?r:r.message),console.log(r),s=!1}return s},u)t.commands.addCommand({name:"emmet:"+g,action:g,bindKey:u[g],exec:t.runEmmetCommand,multiSelectAction:"forEach"});t.updateCommands=function(e,r){r?e.keyBinding.addKeyboardHandler(t.commands):e.keyBinding.removeKeyboardHandler(t.commands)},t.isSupportedMode=function(e){if(!e)return!1;if(e.emmetConfig)return!0;var t=e.$id||e;return/css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(t)},t.isAvailable=function(e,r){if(/(evaluate_math_expression|expand_abbreviation)$/.test(r))return!0;var n=e.session.$mode,i=t.isSupportedMode(n);if(i&&n.$modes)try{d.setupContext(e),/js|php/.test(d.getSyntax())&&(i=!1)}catch(e){}return i};var h=function(e,r){var n=r;if(n){var i=t.isSupportedMode(n.session.$mode);!1===e.enableEmmet&&(i=!1),i&&m(),t.updateCommands(n,i)}},m=function(t){"string"==typeof i&&e("ace/config").loadModule(i,function(){i=null,t&&t()})};t.AceEmmetEditor=c,e("ace/config").defineOptions(s.prototype,"editor",{enableEmmet:{set:function(e){this[e?"on":"removeListener"]("changeMode",h),h({enableEmmet:!!e},this)},value:!0}}),t.setCore=function(e){"string"==typeof e?i=e:n=e}}),ace.require(["ace/ext/emmet"],function(){}),ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"],function(e,t,r){"use strict";var n=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,o=e("./lib/lang"),s=e("./range").Range,a=e("./anchor").Anchor,l=e("./keyboard/hash_handler").HashHandler,c=e("./tokenizer").Tokenizer,u=s.comparePoints,d=function(){this.snippetMap={},this.snippetNameMap={}};(function(){n.implement(this,i),this.getTokenizer=function(){function e(e,t,r){return e=e.substr(1),/^\d+$/.test(e)&&!r.inFormatString?[{tabstopId:parseInt(e,10)}]:[{text:e}]}function t(e){return"(?:[^\\\\"+e+"]|\\\\.)"}return d.$tokenizer=new c({start:[{regex:/:/,onMatch:function(e,t,r){return r.length&&r[0].expectIf?(r[0].expectIf=!1,r[0].elseBranch=r[0],[r[0]]):":"}},{regex:/\\./,onMatch:function(e,t,r){var n=e[1];return"}"==n&&r.length||-1!="`$\\".indexOf(n)?e=n:r.inFormatString&&("n"==n||"t"==n?e="\n":-1!="ulULE".indexOf(n)&&(e={changeCase:n,local:n>"a"})),[e]}},{regex:/}/,onMatch:function(e,t,r){return[r.length?r.shift():e]}},{regex:/\$(?:\d+|\w+)/,onMatch:e},{regex:/\$\{[\dA-Z_a-z]+/,onMatch:function(t,r,n){var i=e(t.substr(1),0,n);return n.unshift(i[0]),i},next:"snippetVar"},{regex:/\n/,token:"newline",merge:!1}],snippetVar:[{regex:"\\|"+t("\\|")+"*\\|",onMatch:function(e,t,r){r[0].choices=e.slice(1,-1).split(",")},next:"start"},{regex:"/("+t("/")+"+)/(?:("+t("/")+"*)/)(\\w*):?",onMatch:function(e,t,r){var n=r[0];return n.fmtString=e,e=this.splitRegex.exec(e),n.guard=e[1],n.fmt=e[2],n.flag=e[3],""},next:"start"},{regex:"`"+t("`")+"*`",onMatch:function(e,t,r){return r[0].code=e.splice(1,-1),""},next:"start"},{regex:"\\?",onMatch:function(e,t,r){r[0]&&(r[0].expectIf=!0)},next:"start"},{regex:"([^:}\\\\]|\\\\.)*:?",token:"",next:"start"}],formatString:[{regex:"/("+t("/")+"+)/",token:"regex"},{regex:"",onMatch:function(e,t,r){r.inFormatString=!0},next:"start"}]}),d.prototype.getTokenizer=function(){return d.$tokenizer},d.$tokenizer},this.tokenizeTmSnippet=function(e,t){return this.getTokenizer().getLineTokens(e,t).tokens.map(function(e){return e.value||e})},this.$getDefaultValue=function(e,t){if(/^[A-Z]\d+$/.test(t)){var r=t.substr(1);return(this.variables[t[0]+"__"]||{})[r]}if(/^\d+$/.test(t))return(this.variables.__||{})[t];if(t=t.replace(/^TM_/,""),e){var n=e.session;switch(t){case"CURRENT_WORD":var i=n.getWordRange();case"SELECTION":case"SELECTED_TEXT":return n.getTextRange(i);case"CURRENT_LINE":return n.getLine(e.getCursorPosition().row);case"PREV_LINE":return n.getLine(e.getCursorPosition().row-1);case"LINE_INDEX":return e.getCursorPosition().column;case"LINE_NUMBER":return e.getCursorPosition().row+1;case"SOFT_TABS":return n.getUseSoftTabs()?"YES":"NO";case"TAB_SIZE":return n.getTabSize();case"FILENAME":case"FILEPATH":return"";case"FULLNAME":return"Ace"}}},this.variables={},this.getVariableValue=function(e,t){return this.variables.hasOwnProperty(t)?this.variables[t](e,t)||"":this.$getDefaultValue(e,t)||""},this.tmStrFormat=function(e,t,r){var n=t.flag||"",i=t.guard;i=new RegExp(i,n.replace(/[^gi]/,""));var o=this.tokenizeTmSnippet(t.fmt,"formatString"),s=this,a=e.replace(i,function(){s.variables.__=arguments;for(var e=s.resolveVariables(o,r),t="E",n=0;n<e.length;n++){var i=e[n];if("object"==typeof i)if(e[n]="",i.changeCase&&i.local){var a=e[n+1];a&&"string"==typeof a&&("u"==i.changeCase?e[n]=a[0].toUpperCase():e[n]=a[0].toLowerCase(),e[n+1]=a.substr(1))}else i.changeCase&&(t=i.changeCase);else"U"==t?e[n]=i.toUpperCase():"L"==t&&(e[n]=i.toLowerCase())}return e.join("")});return this.variables.__=null,a},this.resolveVariables=function(e,t){for(var r=[],n=0;n<e.length;n++){var i=e[n];if("string"==typeof i)r.push(i);else{if("object"!=typeof i)continue;if(i.skip)s(i);else{if(i.processed<n)continue;if(i.text){var o=this.getVariableValue(t,i.text);o&&i.fmtString&&(o=this.tmStrFormat(o,i)),i.processed=n,null==i.expectIf?o&&(r.push(o),s(i)):o?i.skip=i.elseBranch:s(i)}else(null!=i.tabstopId||null!=i.changeCase)&&r.push(i)}}}function s(t){var r=e.indexOf(t,n+1);-1!=r&&(n=r)}return r},this.insertSnippetForSelection=function(e,t){var r=e.getCursorPosition(),n=e.session.getLine(r.row),i=e.session.getTabString(),o=n.match(/^\s*/)[0];r.column<o.length&&(o=o.slice(0,r.column)),t=t.replace(/\r/g,"");var s=this.tokenizeTmSnippet(t);s=(s=this.resolveVariables(s,e)).map(function(e){return"\n"==e?e+o:"string"==typeof e?e.replace(/\t/g,i):e});var a=[];s.forEach(function(e,t){if("object"==typeof e){var r=e.tabstopId,n=a[r];if(n||((n=a[r]=[]).index=r,n.value=""),-1===n.indexOf(e)){n.push(e);var i=s.indexOf(e,t+1);if(-1!==i){var o=s.slice(t+1,i);o.some(function(e){return"object"==typeof e})&&!n.value?n.value=o:!o.length||n.value&&"string"==typeof n.value||(n.value=o.join(""))}}}}),a.forEach(function(e){e.length=0});var l={};function c(e){for(var t=[],r=0;r<e.length;r++){var n=e[r];if("object"==typeof n){if(l[n.tabstopId])continue;n=t[e.lastIndexOf(n,r-1)]||{tabstopId:n.tabstopId}}t[r]=n}return t}for(var u=0;u<s.length;u++){var d=s[u];if("object"==typeof d){var h=d.tabstopId,m=s.indexOf(d,u+1);if(l[h])l[h]===d&&(l[h]=null);else{var p=a[h],_="string"==typeof p.value?[p.value]:c(p.value);_.unshift(u+1,Math.max(0,m-u)),_.push(d),l[h]=d,s.splice.apply(s,_),-1===p.indexOf(d)&&p.push(d)}}}var f=0,b=0,y="";s.forEach(function(e){if("string"==typeof e){var t=e.split("\n");t.length>1?(b=t[t.length-1].length,f+=t.length-1):b+=e.length,y+=e}else e.start?e.end={row:f,column:b}:e.start={row:f,column:b}});var x=e.getSelectionRange(),v=e.session.replace(x,y),w=new g(e),k=e.inVirtualSelectionMode&&e.selection.index;w.addTabstops(a,x.start,v,k)},this.insertSnippet=function(e,t){var r=this;if(e.inVirtualSelectionMode)return r.insertSnippetForSelection(e,t);e.forEachSelection(function(){r.insertSnippetForSelection(e,t)},null,{keepOrder:!0}),e.tabstopManager&&e.tabstopManager.tabNext()},this.$getScope=function(e){var t=e.session.$mode.$id||"";if("html"===(t=t.split("/").pop())||"php"===t){"php"!==t||e.session.$mode.inlinePhp||(t="html");var r=e.getCursorPosition(),n=e.session.getState(r.row);"object"==typeof n&&(n=n[0]),n.substring&&("js-"==n.substring(0,3)?t="javascript":"css-"==n.substring(0,4)?t="css":"php-"==n.substring(0,4)&&(t="php"))}return t},this.getActiveScopes=function(e){var t=this.$getScope(e),r=[t],n=this.snippetMap;return n[t]&&n[t].includeScopes&&r.push.apply(r,n[t].includeScopes),r.push("_"),r},this.expandWithTab=function(e,t){var r=this,n=e.forEachSelection(function(){return r.expandSnippetForSelection(e,t)},null,{keepOrder:!0});return n&&e.tabstopManager&&e.tabstopManager.tabNext(),n},this.expandSnippetForSelection=function(e,t){var r,n=e.getCursorPosition(),i=e.session.getLine(n.row),o=i.substring(0,n.column),s=i.substr(n.column),a=this.snippetMap;return this.getActiveScopes(e).some(function(e){var t=a[e];return t&&(r=this.findMatchingSnippet(t,o,s)),!!r},this),!!r&&(t&&t.dryRun||(e.session.doc.removeInLine(n.row,n.column-r.replaceBefore.length,n.column+r.replaceAfter.length),this.variables.M__=r.matchBefore,this.variables.T__=r.matchAfter,this.insertSnippetForSelection(e,r.content),this.variables.M__=this.variables.T__=null),!0)},this.findMatchingSnippet=function(e,t,r){for(var n=e.length;n--;){var i=e[n];if((!i.startRe||i.startRe.test(t))&&((!i.endRe||i.endRe.test(r))&&(i.startRe||i.endRe)))return i.matchBefore=i.startRe?i.startRe.exec(t):[""],i.matchAfter=i.endRe?i.endRe.exec(r):[""],i.replaceBefore=i.triggerRe?i.triggerRe.exec(t)[0]:"",i.replaceAfter=i.endTriggerRe?i.endTriggerRe.exec(r)[0]:"",i}},this.snippetMap={},this.snippetNameMap={},this.register=function(e,t){var r=this.snippetMap,n=this.snippetNameMap,i=this;function s(e){return e&&!/^\^?\(.*\)\$?$|^\\b$/.test(e)&&(e="(?:"+e+")"),e||""}function a(e,t,r){return e=s(e),t=s(t),r?(e=t+e)&&"$"!=e[e.length-1]&&(e+="$"):(e+=t)&&"^"!=e[0]&&(e="^"+e),new RegExp(e)}function l(e){e.scope||(e.scope=t||"_"),t=e.scope,r[t]||(r[t]=[],n[t]={});var s=n[t];if(e.name){var l=s[e.name];l&&i.unregister(l),s[e.name]=e}r[t].push(e),e.tabTrigger&&!e.trigger&&(!e.guard&&/^\w/.test(e.tabTrigger)&&(e.guard="\\b"),e.trigger=o.escapeRegExp(e.tabTrigger)),(e.trigger||e.guard||e.endTrigger||e.endGuard)&&(e.startRe=a(e.trigger,e.guard,!0),e.triggerRe=new RegExp(e.trigger,"",!0),e.endRe=a(e.endTrigger,e.endGuard,!0),e.endTriggerRe=new RegExp(e.endTrigger,"",!0))}e||(e=[]),e&&e.content?l(e):Array.isArray(e)&&e.forEach(l),this._signal("registerSnippets",{scope:t})},this.unregister=function(e,t){var r=this.snippetMap,n=this.snippetNameMap;function i(e){var i=n[e.scope||t];if(i&&i[e.name]){delete i[e.name];var o=r[e.scope||t],s=o&&o.indexOf(e);s>=0&&o.splice(s,1)}}e.content?i(e):Array.isArray(e)&&e.forEach(i)},this.parseSnippetFile=function(e){e=e.replace(/\r/g,"");for(var t,r=[],n={},i=/^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;t=i.exec(e);){if(t[1])try{n=JSON.parse(t[1]),r.push(n)}catch(e){}if(t[4])n.content=t[4].replace(/^\t/gm,""),r.push(n),n={};else{var o=t[2],s=t[3];if("regex"==o){var a=/\/((?:[^\/\\]|\\.)*)|$/g;n.guard=a.exec(s)[1],n.trigger=a.exec(s)[1],n.endTrigger=a.exec(s)[1],n.endGuard=a.exec(s)[1]}else"snippet"==o?(n.tabTrigger=s.match(/^\S*/)[0],n.name||(n.name=s)):n[o]=s}}return r},this.getSnippetByName=function(e,t){var r,n=this.snippetNameMap;return this.getActiveScopes(t).some(function(t){var i=n[t];return i&&(r=i[e]),!!r},this),r}}).call(d.prototype);var g=function(e){if(e.tabstopManager)return e.tabstopManager;e.tabstopManager=this,this.$onChange=this.onChange.bind(this),this.$onChangeSelection=o.delayedCall(this.onChangeSelection.bind(this)).schedule,this.$onChangeSession=this.onChangeSession.bind(this),this.$onAfterExec=this.onAfterExec.bind(this),this.attach(e)};(function(){this.attach=function(e){this.index=0,this.ranges=[],this.tabstops=[],this.$openTabstops=null,this.selectedTabstop=null,this.editor=e,this.editor.on("change",this.$onChange),this.editor.on("changeSelection",this.$onChangeSelection),this.editor.on("changeSession",this.$onChangeSession),this.editor.commands.on("afterExec",this.$onAfterExec),this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)},this.detach=function(){this.tabstops.forEach(this.removeTabstopMarkers,this),this.ranges=null,this.tabstops=null,this.selectedTabstop=null,this.editor.removeListener("change",this.$onChange),this.editor.removeListener("changeSelection",this.$onChangeSelection),this.editor.removeListener("changeSession",this.$onChangeSession),this.editor.commands.removeListener("afterExec",this.$onAfterExec),this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.tabstopManager=null,this.editor=null},this.onChange=function(e){var t="r"==e.action[0],r=e.start,n=e.end,i=r.row,o=n.row-i,s=n.column-r.column;if(t&&(o=-o,s=-s),!this.$inChange&&t){var a=this.selectedTabstop,l=a&&!a.some(function(e){return u(e.start,r)<=0&&u(e.end,n)>=0});if(l)return this.detach()}for(var c=this.ranges,d=0;d<c.length;d++){var g=c[d];g.end.row<r.row||(t&&u(r,g.start)<0&&u(n,g.end)>0?(this.removeRange(g),d--):(g.start.row==i&&g.start.column>r.column&&(g.start.column+=s),g.end.row==i&&g.end.column>=r.column&&(g.end.column+=s),g.start.row>=i&&(g.start.row+=o),g.end.row>=i&&(g.end.row+=o),u(g.start,g.end)>0&&this.removeRange(g)))}c.length||this.detach()},this.updateLinkedFields=function(){var e=this.selectedTabstop;if(e&&e.hasLinkedRanges){this.$inChange=!0;for(var r=this.editor.session,n=r.getTextRange(e.firstNonLinked),i=e.length;i--;){var o=e[i];if(o.linked){var s=t.snippetManager.tmStrFormat(n,o.original);r.replace(o,s)}}this.$inChange=!1}},this.onAfterExec=function(e){e.command&&!e.command.readOnly&&this.updateLinkedFields()},this.onChangeSelection=function(){if(this.editor){for(var e=this.editor.selection.lead,t=this.editor.selection.anchor,r=this.editor.selection.isEmpty(),n=this.ranges.length;n--;)if(!this.ranges[n].linked){var i=this.ranges[n].contains(e.row,e.column),o=r||this.ranges[n].contains(t.row,t.column);if(i&&o)return}this.detach()}},this.onChangeSession=function(){this.detach()},this.tabNext=function(e){var t=this.tabstops.length,r=this.index+(e||1);(r=Math.min(Math.max(r,1),t))==t&&(r=0),this.selectTabstop(r),0===r&&this.detach()},this.selectTabstop=function(e){this.$openTabstops=null;var t=this.tabstops[this.index];if(t&&this.addTabstopMarkers(t),this.index=e,(t=this.tabstops[this.index])&&t.length){if(this.selectedTabstop=t,this.editor.inVirtualSelectionMode)this.editor.selection.setRange(t.firstNonLinked);else{var r=this.editor.multiSelect;r.toSingleRange(t.firstNonLinked.clone());for(var n=t.length;n--;)t.hasLinkedRanges&&t[n].linked||r.addRange(t[n].clone(),!0);r.ranges[0]&&r.addRange(r.ranges[0].clone())}this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler)}},this.addTabstops=function(e,t,r){if(this.$openTabstops||(this.$openTabstops=[]),!e[0]){var n=s.fromPoints(r,r);p(n.start,t),p(n.end,t),e[0]=[n],e[0].index=0}var i=[this.index+1,0],o=this.ranges;e.forEach(function(e,r){for(var n=this.$openTabstops[r]||e,a=e.length;a--;){var l=e[a],c=s.fromPoints(l.start,l.end||l.start);m(c.start,t),m(c.end,t),c.original=l,c.tabstop=n,o.push(c),n!=e?n.unshift(c):n[a]=c,l.fmtString?(c.linked=!0,n.hasLinkedRanges=!0):n.firstNonLinked||(n.firstNonLinked=c)}n.firstNonLinked||(n.hasLinkedRanges=!1),n===e&&(i.push(n),this.$openTabstops[r]=n),this.addTabstopMarkers(n)},this),i.length>2&&(this.tabstops.length&&i.push(i.splice(2,1)[0]),this.tabstops.splice.apply(this.tabstops,i))},this.addTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){e.markerId||(e.markerId=t.addMarker(e,"ace_snippet-marker","text"))})},this.removeTabstopMarkers=function(e){var t=this.editor.session;e.forEach(function(e){t.removeMarker(e.markerId),e.markerId=null})},this.removeRange=function(e){var t=e.tabstop.indexOf(e);e.tabstop.splice(t,1),t=this.ranges.indexOf(e),this.ranges.splice(t,1),this.editor.session.removeMarker(e.markerId),e.tabstop.length||(-1!=(t=this.tabstops.indexOf(e.tabstop))&&this.tabstops.splice(t,1),this.tabstops.length||this.detach())},this.keyboardHandler=new l,this.keyboardHandler.bindKeys({Tab:function(e){t.snippetManager&&t.snippetManager.expandWithTab(e)||e.tabstopManager.tabNext(1)},"Shift-Tab":function(e){e.tabstopManager.tabNext(-1)},Esc:function(e){e.tabstopManager.detach()},Return:function(e){return!1}})}).call(g.prototype);var h={};h.onChange=a.prototype.onChange,h.setPosition=function(e,t){this.pos.row=e,this.pos.column=t},h.update=function(e,t,r){this.$insertRight=r,this.pos=e,this.onChange(t)};var m=function(e,t){0==e.row&&(e.column+=t.column),e.row+=t.row},p=function(e,t){e.row==t.row&&(e.column-=t.column),e.row-=t.row};e("./lib/dom").importCssString(".ace_snippet-marker { -moz-box-sizing: border-box; box-sizing: border-box; background: rgba(194, 193, 208, 0.09); border: 1px dotted rgba(211, 208, 235, 0.62); position: absolute;}"),t.snippetManager=new d;var _=e("./editor").Editor;(function(){this.insertSnippet=function(e,r){return t.snippetManager.insertSnippet(this,e,r)},this.expandSnippet=function(e){return t.snippetManager.expandWithTab(this,e)}}).call(_.prototype)}),ace.define("ace/autocomplete/popup",["require","exports","module","ace/virtual_renderer","ace/editor","ace/range","ace/lib/event","ace/lib/lang","ace/lib/dom"],function(e,t,r){"use strict";var n=e("../virtual_renderer").VirtualRenderer,i=e("../editor").Editor,o=e("../range").Range,s=e("../lib/event"),a=e("../lib/lang"),l=e("../lib/dom"),c=function(e){var t=new n(e);t.$maxLines=4;var r=new i(t);return r.setHighlightActiveLine(!1),r.setShowPrintMargin(!1),r.renderer.setShowGutter(!1),r.renderer.setHighlightGutterLine(!1),r.$mouseHandler.$focusWaitTimout=0,r.$highlightTagPending=!0,r};l.importCssString(".ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line { background-color: #CAD6FA; z-index: 1;}.ace_editor.ace_autocomplete .ace_line-hover { border: 1px solid #abbffe; margin-top: -1px; background: rgba(233,233,253,0.4);}.ace_editor.ace_autocomplete .ace_line-hover { position: absolute; z-index: 2;}.ace_editor.ace_autocomplete .ace_scroller { background: none; border: none; box-shadow: none;}.ace_rightAlignedText { color: gray; display: inline-block; position: absolute; right: 4px; text-align: right; z-index: -1;}.ace_editor.ace_autocomplete .ace_completion-highlight{ color: #000; text-shadow: 0 0 0.01em;}.ace_editor.ace_autocomplete { width: 280px; z-index: 200000; background: #fbfbfb; color: #444; border: 1px lightgray solid; position: fixed; box-shadow: 2px 3px 5px rgba(0,0,0,.2); line-height: 1.4;}"),t.AcePopup=function(e){var t=l.createElement("div"),r=new c(t);e&&e.appendChild(t),t.style.display="none",r.renderer.content.style.cursor="default",r.renderer.setStyle("ace_autocomplete"),r.setOption("displayIndentGuides",!1),r.setOption("dragDelay",150);var n,i=function(){};r.focus=i,r.$isFocused=!0,r.renderer.$cursorLayer.restartTimer=i,r.renderer.$cursorLayer.element.style.opacity=0,r.renderer.$maxLines=8,r.renderer.$keepTextAreaAtCursor=!1,r.setHighlightActiveLine(!1),r.session.highlight(""),r.session.$searchHighlight.clazz="ace_highlight-marker",r.on("mousedown",function(e){var t=e.getDocumentPosition();r.selection.moveToPosition(t),d.start.row=d.end.row=t.row,e.stop()});var u=new o(-1,0,-1,1/0),d=new o(-1,0,-1,1/0);d.id=r.session.addMarker(d,"ace_active-line","fullLine"),r.setSelectOnHover=function(e){e?u.id&&(r.session.removeMarker(u.id),u.id=null):u.id=r.session.addMarker(u,"ace_line-hover","fullLine")},r.setSelectOnHover(!1),r.on("mousemove",function(e){if(n){if(n.x!=e.x||n.y!=e.y){(n=e).scrollTop=r.renderer.scrollTop;var t=n.getDocumentPosition().row;u.start.row!=t&&(u.id||r.setRow(t),h(t))}}else n=e}),r.renderer.on("beforeRender",function(){if(n&&-1!=u.start.row){n.$pos=null;var e=n.getDocumentPosition().row;u.id||r.setRow(e),h(e,!0)}}),r.renderer.on("afterRender",function(){var e=r.getRow(),t=r.renderer.$textLayer,n=t.element.childNodes[e-t.config.firstRow];n!=t.selectedNode&&(t.selectedNode&&l.removeCssClass(t.selectedNode,"ace_selected"),t.selectedNode=n,n&&l.addCssClass(n,"ace_selected"))});var g=function(){h(-1)},h=function(e,t){e!==u.start.row&&(u.start.row=u.end.row=e,t||r.session._emit("changeBackMarker"),r._emit("changeHoverMarker"))};r.getHoveredRow=function(){return u.start.row},s.addListener(r.container,"mouseout",g),r.on("hide",g),r.on("changeSelection",g),r.session.doc.getLength=function(){return r.data.length},r.session.doc.getLine=function(e){var t=r.data[e];return"string"==typeof t?t:t&&t.value||""};var m=r.session.bgTokenizer;return m.$tokenizeRow=function(e){var t=r.data[e],n=[];if(!t)return n;"string"==typeof t&&(t={value:t}),t.caption||(t.caption=t.value||t.name);for(var i,o,s=-1,a=0;a<t.caption.length;a++)o=t.caption[a],s!==(i=t.matchMask&1<<a?1:0)?(n.push({type:t.className||(i?"completion-highlight":""),value:o}),s=i):n[n.length-1].value+=o;if(t.meta){var l=r.renderer.$size.scrollerWidth/r.renderer.layerConfig.characterWidth,c=t.meta;c.length+t.caption.length>l-2&&(c=c.substr(0,l-t.caption.length-3)+"…"),n.push({type:"rightAlignedText",value:c})}return n},m.$updateOnChange=i,m.start=i,r.session.$computeWidth=function(){return this.screenWidth=0},r.$blockScrolling=1/0,r.isOpen=!1,r.isTopdown=!1,r.data=[],r.setData=function(e){r.setValue(a.stringRepeat("\n",e.length),-1),r.data=e||[],r.setRow(0)},r.getData=function(e){return r.data[e]},r.getRow=function(){return d.start.row},r.setRow=function(e){e=Math.max(0,Math.min(this.data.length,e)),d.start.row!=e&&(r.selection.clearSelection(),d.start.row=d.end.row=e||0,r.session._emit("changeBackMarker"),r.moveCursorTo(e||0,0),r.isOpen&&r._signal("select"))},r.on("changeSelection",function(){r.isOpen&&r.setRow(r.selection.lead.row),r.renderer.scrollCursorIntoView()}),r.hide=function(){this.container.style.display="none",this._signal("hide"),r.isOpen=!1},r.show=function(e,t,i){var o=this.container,s=window.innerHeight,a=window.innerWidth,l=this.renderer,c=l.$maxLines*t*1.4,u=e.top+this.$borderSize;u>s/2&&!i&&u+t+c>s?(l.$maxPixelHeight=u-2*this.$borderSize,o.style.top="",o.style.bottom=s-u+"px",r.isTopdown=!1):(u+=t,l.$maxPixelHeight=s-u-.2*t,o.style.top=u+"px",o.style.bottom="",r.isTopdown=!0),o.style.display="",this.renderer.$textLayer.checkForSizeChanges();var d=e.left;d+o.offsetWidth>a&&(d=a-o.offsetWidth),o.style.left=d+"px",this._signal("show"),n=null,r.isOpen=!0},r.getTextLeftOffset=function(){return this.$borderSize+this.renderer.$padding+this.$imageSize},r.$imageSize=0,r.$borderSize=1,r}}),ace.define("ace/autocomplete/util",["require","exports","module"],function(e,t,r){"use strict";t.parForEach=function(e,t,r){var n=0,i=e.length;0===i&&r();for(var o=0;o<i;o++)t(e[o],function(e,t){++n===i&&r(e,t)})};var n=/[a-zA-Z_0-9\$\-\u00A2-\uFFFF]/;t.retrievePrecedingIdentifier=function(e,t,r){r=r||n;for(var i=[],o=t-1;o>=0&&r.test(e[o]);o--)i.push(e[o]);return i.reverse().join("")},t.retrieveFollowingIdentifier=function(e,t,r){r=r||n;for(var i=[],o=t;o<e.length&&r.test(e[o]);o++)i.push(e[o]);return i},t.getCompletionPrefix=function(e){var t,r=e.getCursorPosition(),n=e.session.getLine(r.row);return e.completers.forEach(function(e){e.identifierRegexps&&e.identifierRegexps.forEach(function(e){!t&&e&&(t=this.retrievePrecedingIdentifier(n,r.column,e))}.bind(this))}.bind(this)),t||this.retrievePrecedingIdentifier(n,r.column)}}),ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/snippets"],function(e,t,r){"use strict";var n=e("./keyboard/hash_handler").HashHandler,i=e("./autocomplete/popup").AcePopup,o=e("./autocomplete/util"),s=(e("./lib/event"),e("./lib/lang")),a=e("./lib/dom"),l=e("./snippets").snippetManager,c=function(){this.autoInsert=!1,this.autoSelect=!0,this.exactMatch=!1,this.gatherCompletionsId=0,this.keyboardHandler=new n,this.keyboardHandler.bindKeys(this.commands),this.blurListener=this.blurListener.bind(this),this.changeListener=this.changeListener.bind(this),this.mousedownListener=this.mousedownListener.bind(this),this.mousewheelListener=this.mousewheelListener.bind(this),this.changeTimer=s.delayedCall(function(){this.updateCompletions(!0)}.bind(this)),this.tooltipTimer=s.delayedCall(this.updateDocTooltip.bind(this),50)};(function(){this.$init=function(){return this.popup=new i(document.body||document.documentElement),this.popup.on("click",function(e){this.insertMatch(),e.stop()}.bind(this)),this.popup.focus=this.editor.focus.bind(this.editor),this.popup.on("show",this.tooltipTimer.bind(null,null)),this.popup.on("select",this.tooltipTimer.bind(null,null)),this.popup.on("changeHoverMarker",this.tooltipTimer.bind(null,null)),this.popup},this.getPopup=function(){return this.popup||this.$init()},this.openPopup=function(e,t,r){this.popup||this.$init(),this.popup.setData(this.completions.filtered),e.keyBinding.addKeyboardHandler(this.keyboardHandler);var n=e.renderer;if(this.popup.setRow(this.autoSelect?0:-1),r)r&&!t&&this.detach();else{this.popup.setTheme(e.getTheme()),this.popup.setFontSize(e.getFontSize());var i=n.layerConfig.lineHeight,o=n.$cursorLayer.getPixelPosition(this.base,!0);o.left-=this.popup.getTextLeftOffset();var s=e.container.getBoundingClientRect();o.top+=s.top-n.layerConfig.offset,o.left+=s.left-e.renderer.scrollLeft,o.left+=n.gutterWidth,this.popup.show(o,i)}},this.detach=function(){this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler),this.editor.off("changeSelection",this.changeListener),this.editor.off("blur",this.blurListener),this.editor.off("mousedown",this.mousedownListener),this.editor.off("mousewheel",this.mousewheelListener),this.changeTimer.cancel(),this.hideDocTooltip(),this.gatherCompletionsId+=1,this.popup&&this.popup.isOpen&&this.popup.hide(),this.base&&this.base.detach(),this.activated=!1,this.completions=this.base=null},this.changeListener=function(e){var t=this.editor.selection.lead;(t.row!=this.base.row||t.column<this.base.column)&&this.detach(),this.activated?this.changeTimer.schedule():this.detach()},this.blurListener=function(e){e.relatedTarget&&"A"==e.relatedTarget.nodeName&&e.relatedTarget.href&&window.open(e.relatedTarget.href,"_blank");var t=document.activeElement,r=this.editor.textInput.getElement(),n=e.relatedTarget&&e.relatedTarget==this.tooltipNode,i=this.popup&&this.popup.container;t==r||t.parentNode==i||n||t==this.tooltipNode||e.relatedTarget==r||this.detach()},this.mousedownListener=function(e){this.detach()},this.mousewheelListener=function(e){this.detach()},this.goTo=function(e){var t=this.popup.getRow(),r=this.popup.session.getLength()-1;switch(e){case"up":t=t<=0?r:t-1;break;case"down":t=t>=r?-1:t+1;break;case"start":t=0;break;case"end":t=r}this.popup.setRow(t)},this.insertMatch=function(e,t){if(e||(e=this.popup.getData(this.popup.getRow())),!e)return!1;if(e.completer&&e.completer.insertMatch)e.completer.insertMatch(this.editor,e);else{if(this.completions.filterText)for(var r,n=this.editor.selection.getAllRanges(),i=0;r=n[i];i++)r.start.column-=this.completions.filterText.length,this.editor.session.remove(r);e.snippet?l.insertSnippet(this.editor,e.snippet):this.editor.execCommand("insertstring",e.value||e)}this.detach()},this.commands={Up:function(e){e.completer.goTo("up")},Down:function(e){e.completer.goTo("down")},"Ctrl-Up|Ctrl-Home":function(e){e.completer.goTo("start")},"Ctrl-Down|Ctrl-End":function(e){e.completer.goTo("end")},Esc:function(e){e.completer.detach()},Return:function(e){return e.completer.insertMatch()},"Shift-Return":function(e){e.completer.insertMatch(null,{deleteSuffix:!0})},Tab:function(e){var t=e.completer.insertMatch();if(t||e.tabstopManager)return t;e.completer.goTo("down")},PageUp:function(e){e.completer.popup.gotoPageUp()},PageDown:function(e){e.completer.popup.gotoPageDown()}},this.gatherCompletions=function(e,t){var r=e.getSession(),n=e.getCursorPosition(),i=(r.getLine(n.row),o.getCompletionPrefix(e));this.base=r.doc.createAnchor(n.row,n.column-i.length),this.base.$insertRight=!0;var s=[],a=e.completers.length;return e.completers.forEach(function(o,l){o.getCompletions(e,r,n,i,function(n,o){!n&&o&&(s=s.concat(o));var l=e.getCursorPosition();r.getLine(l.row);t(null,{prefix:i,matches:s,finished:0===--a})})}),!0},this.showPopup=function(e){this.editor&&this.detach(),this.activated=!0,this.editor=e,e.completer!=this&&(e.completer&&e.completer.detach(),e.completer=this),e.on("changeSelection",this.changeListener),e.on("blur",this.blurListener),e.on("mousedown",this.mousedownListener),e.on("mousewheel",this.mousewheelListener),this.updateCompletions()},this.updateCompletions=function(e){if(e&&this.base&&this.completions){var t=this.editor.getCursorPosition(),r=this.editor.session.getTextRange({start:this.base,end:t});if(r==this.completions.filterText)return;return this.completions.setFilter(r),this.completions.filtered.length?1!=this.completions.filtered.length||this.completions.filtered[0].value!=r||this.completions.filtered[0].snippet?void this.openPopup(this.editor,r,e):this.detach():this.detach()}var n=this.gatherCompletionsId;this.gatherCompletions(this.editor,function(t,r){var i=function(){if(r.finished)return this.detach()}.bind(this),o=r.prefix,s=r&&r.matches;if(!s||!s.length)return i();if(0===o.indexOf(r.prefix)&&n==this.gatherCompletionsId){this.completions=new u(s),this.exactMatch&&(this.completions.exactMatch=!0),this.completions.setFilter(o);var a=this.completions.filtered;return a.length&&(1!=a.length||a[0].value!=o||a[0].snippet)?this.autoInsert&&1==a.length&&r.finished?this.insertMatch(a[0]):void this.openPopup(this.editor,o,e):i()}}.bind(this))},this.cancelContextMenu=function(){this.editor.$mouseHandler.cancelContextMenu()},this.updateDocTooltip=function(){var e=this.popup,t=e.data,r=t&&(t[e.getHoveredRow()]||t[e.getRow()]),n=null;return r&&this.editor&&this.popup.isOpen?(this.editor.completers.some(function(e){return e.getDocTooltip&&(n=e.getDocTooltip(r)),n}),n||(n=r),"string"==typeof n&&(n={docText:n}),n&&(n.docHTML||n.docText)?void this.showDocTooltip(n):this.hideDocTooltip()):this.hideDocTooltip()},this.showDocTooltip=function(e){this.tooltipNode||(this.tooltipNode=a.createElement("div"),this.tooltipNode.className="ace_tooltip ace_doc-tooltip",this.tooltipNode.style.margin=0,this.tooltipNode.style.pointerEvents="auto",this.tooltipNode.tabIndex=-1,this.tooltipNode.onblur=this.blurListener.bind(this));var t=this.tooltipNode;e.docHTML?t.innerHTML=e.docHTML:e.docText&&(t.textContent=e.docText),t.parentNode||document.body.appendChild(t);var r=this.popup,n=r.container.getBoundingClientRect();t.style.top=r.container.style.top,t.style.bottom=r.container.style.bottom,window.innerWidth-n.right<320?(t.style.right=window.innerWidth-n.left+"px",t.style.left=""):(t.style.left=n.right+1+"px",t.style.right=""),t.style.display="block"},this.hideDocTooltip=function(){if(this.tooltipTimer.cancel(),this.tooltipNode){var e=this.tooltipNode;this.editor.isFocused()||document.activeElement!=e||this.editor.focus(),this.tooltipNode=null,e.parentNode&&e.parentNode.removeChild(e)}}}).call(c.prototype),c.startCommand={name:"startAutocomplete",exec:function(e){e.completer||(e.completer=new c),e.completer.autoInsert=!1,e.completer.autoSelect=!0,e.completer.showPopup(e),e.completer.cancelContextMenu()},bindKey:"Ctrl-Space|Ctrl-Shift-Space|Alt-Space"};var u=function(e,t){this.all=e,this.filtered=e,this.filterText=t||"",this.exactMatch=!1};(function(){this.setFilter=function(e){if(e.length>this.filterText&&0===e.lastIndexOf(this.filterText,0))var t=this.filtered;else t=this.all;this.filterText=e,t=(t=this.filterCompletions(t,this.filterText)).sort(function(e,t){return t.exactMatch-e.exactMatch||t.score-e.score});var r=null;t=t.filter(function(e){var t=e.snippet||e.caption||e.value;return t!==r&&(r=t,!0)}),this.filtered=t},this.filterCompletions=function(e,t){var r=[],n=t.toUpperCase(),i=t.toLowerCase();e:for(var o,s=0;o=e[s];s++){var a=o.value||o.caption||o.snippet;if(a){var l,c,u=-1,d=0,g=0;if(this.exactMatch){if(t!==a.substr(0,t.length))continue e}else for(var h=0;h<t.length;h++){var m=a.indexOf(i[h],u+1),p=a.indexOf(n[h],u+1);if((l=m>=0&&(p<0||m<p)?m:p)<0)continue e;(c=l-u-1)>0&&(-1===u&&(g+=10),g+=c),d|=1<<l,u=l}o.matchMask=d,o.exactMatch=g?0:1,o.score=(o.score||0)-g,r.push(o)}}return r}}).call(u.prototype),t.Autocomplete=c,t.FilteredList=u}),ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"],function(e,t,r){var n=e("../range").Range,i=/[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/;function o(e,t){var r=function(e,t){return e.getTextRange(n.fromPoints({row:0,column:0},t)).split(i).length-1}(e,t),o=e.getValue().split(i),s=Object.create(null),a=o[r];return o.forEach(function(e,t){if(e&&e!==a){var n=Math.abs(r-t),i=o.length-n;s[e]?s[e]=Math.max(i,s[e]):s[e]=i}}),s}t.getCompletions=function(e,t,r,n,i){var s=o(t,r);i(null,Object.keys(s).map(function(e){return{caption:e,value:e,score:s[e],meta:"local"}}))}}),ace.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(e,t,r){"use strict";var n=e("../snippets").snippetManager,i=e("../autocomplete").Autocomplete,o=e("../config"),s=e("../lib/lang"),a=e("../autocomplete/util"),l=e("../autocomplete/text_completer"),c={getCompletions:function(e,t,r,n,i){if(t.$mode.completer)return t.$mode.completer.getCompletions(e,t,r,n,i);var o=e.session.getState(r.row);i(null,t.$mode.getCompletions(o,t,r,n))}},u={getCompletions:function(e,t,r,i,o){var s=n.snippetMap,a=[];n.getActiveScopes(e).forEach(function(e){for(var t=s[e]||[],r=t.length;r--;){var n=t[r],i=n.name||n.tabTrigger;i&&a.push({caption:i,snippet:n.content,meta:n.tabTrigger&&!n.name?n.tabTrigger+"⇥ ":"snippet",type:"snippet"})}},this),o(null,a)},getDocTooltip:function(e){"snippet"!=e.type||e.docHTML||(e.docHTML=["<b>",s.escapeHTML(e.caption),"</b>","<hr></hr>",s.escapeHTML(e.snippet)].join(""))}},d=[u,l,c];t.setCompleters=function(e){d.length=0,e&&d.push.apply(d,e)},t.addCompleter=function(e){d.push(e)},t.textCompleter=l,t.keyWordCompleter=c,t.snippetCompleter=u;var g={name:"expandSnippet",exec:function(e){return n.expandWithTab(e)},bindKey:"Tab"},h=function(e,t){m(t.session.$mode)},m=function(e){var t=e.$id;n.files||(n.files={}),p(t),e.modes&&e.modes.forEach(m)},p=function(e){if(e&&!n.files[e]){var t=e.replace("mode","snippets");n.files[e]={},o.loadModule(t,function(t){t&&(n.files[e]=t,!t.snippets&&t.snippetText&&(t.snippets=n.parseSnippetFile(t.snippetText)),n.register(t.snippets||[],t.scope),t.includeScopes&&(n.snippetMap[t.scope].includeScopes=t.includeScopes,t.includeScopes.forEach(function(e){p("ace/mode/"+e)})))})}},_=function(e){var t=e.editor,r=t.completer&&t.completer.activated;if("backspace"===e.command.name)r&&!a.getCompletionPrefix(t)&&t.completer.detach();else if("insertstring"===e.command.name){a.getCompletionPrefix(t)&&!r&&(t.completer||(t.completer=new i),t.completer.autoInsert=!1,t.completer.showPopup(t))}},f=e("../editor").Editor;e("../config").defineOptions(f.prototype,"editor",{enableBasicAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.addCommand(i.startCommand)):this.commands.removeCommand(i.startCommand)},value:!1},enableLiveAutocompletion:{set:function(e){e?(this.completers||(this.completers=Array.isArray(e)?e:d),this.commands.on("afterExec",_)):this.commands.removeListener("afterExec",_)},value:!1},enableSnippets:{set:function(e){e?(this.commands.addCommand(g),this.on("changeMode",h),h(0,this)):(this.commands.removeCommand(g),this.off("changeMode",h))},value:!1}})}),ace.require(["ace/ext/language_tools"],function(){}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},o.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},o.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},o.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=o}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./text_highlight_rules").TextHighlightRules),o=t.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|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",s=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.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",l=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",c=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",u=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",d=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",g=t.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",h=function(){var e=this.createKeywordMapper({"support.function":s,"support.constant":a,"support.type":o,"support.constant.color":l,"support.constant.fonts":c},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+u+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:u},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:d},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:g},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,s="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",a=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),c("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+s+")(\\.)(prototype)(\\.)("+s+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+s+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:s},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:s},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),c("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:s},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,r){if(this.next="{"==e?this.nextState:"","{"==e&&r.length)r.unshift("start",t);else if("}"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),e&&e.noJSX||l.call(this)),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};function l(){var e=s.replace("\\d","\\d\\-"),t={onMatch:function(e,t,r){var n="/"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:"meta.tag.punctuation."+(1==n?"":"end-")+"tag-open.xml",value:e.slice(0,n)},{type:"meta.tag.tag-name.xml",value:e.substr(n)}]},regex:"</?"+e,next:"jsxAttributes",nextState:"jsx"};this.$rules.start.unshift(t);var r={regex:"{",token:"paren.quasi.start",push:"start"};this.$rules.jsx=[r,t,{include:"reference"},{defaultToken:"string"}],this.$rules.jsxAttributes=[{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},r,c("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function c(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t="[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"</"},{token:"text.tag-open.xml",regex:"<"},{include:"reference"},{defaultToken:"text.xml"}],xml_decl:[{token:"entity.other.attribute-name.decl-attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.decl-attribute-equals.xml",regex:"="},{include:"whitespace"},{include:"string"},{token:"punctuation.xml-decl.xml",regex:"\\?>",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"--\x3e",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(</))((?:"+t+":)?"+t+")",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(<)("+r+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[r+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(</)("+r+"(?=\\s|>|$))",next:r+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./css_highlight_rules").CssHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,a=e("./xml_highlight_rules").XmlHighlightRules,l=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),c=function(){a.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var r=l[t];return["meta.tag.punctuation."+("<"==e?"":"end-")+"tag-open.xml","meta.tag"+(r?"."+r:"")+".tag-name.xml"]},regex:"(</?)([-_a-zA-Z0-9:.]+)",next:"tag_stuff"}],tag_stuff:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}),this.embedTagRules(o,"css-","style"),this.embedTagRules(new s({noJSX:!0}).getRules(),"js-","script"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,a=e("./html_highlight_rules").HtmlHighlightRules,l=function(){var e=o,t=i.arrayToMap("abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|m_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|m_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|m_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|m_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type".split("|")),r=i.arrayToMap("abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|public|static|switch|throw|trait|try|use|var|while|xor".split("|")),n=(i.arrayToMap("die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset".split("|")),i.arrayToMap("true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__".split("|"))),s=i.arrayToMap("$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|$http_response_header|$argc|$argv".split("|")),a=(i.arrayToMap("key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregisterset_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|sql_regcase".split("|")),i.arrayToMap("cfunction|old_function".split("|")),i.arrayToMap([]));this.$rules={start:[{token:"comment",regex:/(?:#|\/\/)(?:[^?]|\?[^>])*/},e.getStartRule("doc-start"),{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string.regexp",regex:"[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)"},{token:"string",regex:'"',next:"qqstring"},{token:"string",regex:"'",next:"qstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language",regex:"\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|VERSION))|__COMPILER_HALT_OFFSET__)\\b"},{token:["keyword","text","support.class"],regex:"\\b(new)(\\s+)(\\w+)"},{token:["support.class","keyword.operator"],regex:"\\b(\\w+)(::)"},{token:"constant.language",regex:"\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b"},{token:function(e){return r.hasOwnProperty(e)?"keyword":n.hasOwnProperty(e)?"constant.language":s.hasOwnProperty(e)?"variable.language":a.hasOwnProperty(e)?"invalid.illegal":t.hasOwnProperty(e)?"support.function":"debugger"==e?"invalid.deprecated":e.match(/^(\$[a-zA-Z_\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*|self|parent)$/)?"variable":"identifier"},regex:/[a-zA-Z_$\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*/},{onMatch:function(e,t,r){return"'"!=(e=e.substr(3))[0]&&'"'!=e[0]||(e=e.slice(1,-1)),r.unshift(this.next,e),"markup.list"},regex:/<<<(?:\w+|'\w+'|"\w+")$/,next:"heredoc"},{token:"keyword.operator",regex:"::|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"}],heredoc:[{onMatch:function(e,t,r){return r[1]!=e?"string":(r.shift(),r.shift(),"markup.list")},regex:"^\\w+(?=;?$)",next:"start"},{token:"string",regex:".*"}],comment:[{token:"comment",regex:"\\*\\/",next:"start"},{defaultToken:"comment"}],qqstring:[{token:"constant.language.escape",regex:'\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})'},{token:"variable",regex:/\$[\w]+(?:\[[\w\]+]|[=\-]>\w+)?/},{token:"variable",regex:/\$\{[^"\}]+\}?/},{token:"string",regex:'"',next:"start"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:/\\['\\]/},{token:"string",regex:"'",next:"start"},{defaultToken:"string"}]},this.embedRules(o,"doc-",[o.getEndRule("start")])};n.inherits(l,s);var c=function(){a.call(this);var e=[{token:"support.php_tag",regex:"<\\?(?:php|=)?",push:"php-start"}];for(var t in this.$rules)this.$rules[t].unshift.apply(this.$rules[t],e);this.embedRules(l,"php-",[{token:"support.php_tag",regex:"\\?>",next:"pop"}],["start"]),this.normalizeRules()};n.inherits(c,a),t.PhpHighlightRules=c,t.PhpLangHighlightRules=l}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/php_completions",["require","exports","module"],function(e,t,r){"use strict";var n={abs:["int abs(int number)","Return the absolute value of the number"],acos:["float acos(float number)","Return the arc cosine of the number in radians"],acosh:["float acosh(float number)","Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number"],addGlob:["bool addGlob(string pattern[,int flags [, array options]])","Add files matching the glob pattern. See php's glob for the pattern syntax."],addPattern:["bool addPattern(string pattern[, string path [, array options]])","Add files matching the pcre pattern. See php's pcre for the pattern syntax."],addcslashes:["string addcslashes(string str, string charlist)","Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\n', '\\r', '\\t' etc...)"],addslashes:["string addslashes(string str)","Escapes single quote, double quotes and backslash characters in a string with backslashes"],apache_child_terminate:["bool apache_child_terminate(void)","Terminate apache process after this request"],apache_get_modules:["array apache_get_modules(void)","Get a list of loaded Apache modules"],apache_get_version:["string apache_get_version(void)","Fetch Apache version"],apache_getenv:["bool apache_getenv(string variable [, bool walk_to_top])","Get an Apache subprocess_env variable"],apache_lookup_uri:["object apache_lookup_uri(string URI)","Perform a partial request of the given URI to obtain information about it"],apache_note:["string apache_note(string note_name [, string note_value])","Get and set Apache request notes"],apache_request_auth_name:["string apache_request_auth_name()",""],apache_request_auth_type:["string apache_request_auth_type()",""],apache_request_discard_request_body:["long apache_request_discard_request_body()",""],apache_request_err_headers_out:["array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])","* fetch all headers that go out in case of an error or a subrequest"],apache_request_headers:["array apache_request_headers(void)","Fetch all HTTP request headers"],apache_request_headers_in:["array apache_request_headers_in()","* fetch all incoming request headers"],apache_request_headers_out:["array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])","* fetch all outgoing request headers"],apache_request_is_initial_req:["bool apache_request_is_initial_req()",""],apache_request_log_error:["boolean apache_request_log_error(string message, [long facility])",""],apache_request_meets_conditions:["long apache_request_meets_conditions()",""],apache_request_remote_host:["int apache_request_remote_host([int type])",""],apache_request_run:["long apache_request_run()","This is a wrapper for ap_sub_run_req and ap_destory_sub_req. It takes sub_request, runs it, destroys it, and returns it's status."],apache_request_satisfies:["long apache_request_satisfies()",""],apache_request_server_port:["int apache_request_server_port()",""],apache_request_set_etag:["void apache_request_set_etag()",""],apache_request_set_last_modified:["void apache_request_set_last_modified()",""],apache_request_some_auth_required:["bool apache_request_some_auth_required()",""],apache_request_sub_req_lookup_file:["object apache_request_sub_req_lookup_file(string file)","Returns sub-request for the specified file. You would need to run it yourself with run()."],apache_request_sub_req_lookup_uri:["object apache_request_sub_req_lookup_uri(string uri)","Returns sub-request for the specified uri. You would need to run it yourself with run()"],apache_request_sub_req_method_uri:["object apache_request_sub_req_method_uri(string method, string uri)","Returns sub-request for the specified file. You would need to run it yourself with run()."],apache_request_update_mtime:["long apache_request_update_mtime([int dependency_mtime])",""],apache_reset_timeout:["bool apache_reset_timeout(void)","Reset the Apache write timer"],apache_response_headers:["array apache_response_headers(void)","Fetch all HTTP response headers"],apache_setenv:["bool apache_setenv(string variable, string value [, bool walk_to_top])","Set an Apache subprocess_env variable"],array_change_key_case:["array array_change_key_case(array input [, int case=CASE_LOWER])","Retuns an array with all string keys lowercased [or uppercased]"],array_chunk:["array array_chunk(array input, int size [, bool preserve_keys])","Split array into chunks"],array_combine:["array array_combine(array keys, array values)","Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values"],array_count_values:["array array_count_values(array input)","Return the value as key and the frequency of that value in input as value"],array_diff:["array array_diff(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are not present in any of the others arguments."],array_diff_assoc:["array array_diff_assoc(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal"],array_diff_key:["array array_diff_key(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved."],array_diff_uassoc:["array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function."],array_diff_ukey:["array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)","Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved."],array_fill:["array array_fill(int start_key, int num, mixed val)","Create an array containing num elements starting with index start_key each initialized to val"],array_fill_keys:["array array_fill_keys(array keys, mixed val)","Create an array using the elements of the first parameter as keys each initialized to val"],array_filter:["array array_filter(array input [, mixed callback])","Filters elements from the array via the callback."],array_flip:["array array_flip(array input)","Return array with key <-> value flipped"],array_intersect:["array array_intersect(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are present in all the other arguments"],array_intersect_assoc:["array array_intersect_assoc(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check"],array_intersect_key:["array array_intersect_key(array arr1, array arr2 [, array ...])","Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data."],array_intersect_uassoc:["array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback."],array_intersect_ukey:["array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)","Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data."],array_key_exists:["bool array_key_exists(mixed key, array search)","Checks if the given key or index exists in the array"],array_keys:["array array_keys(array input [, mixed search_value[, bool strict]])","Return just the keys from the input array, optionally only for the specified search_value"],array_map:["array array_map(mixed callback, array input1 [, array input2 ,...])","Applies the callback to the elements in given arrays."],array_merge:["array array_merge(array arr1, array arr2 [, array ...])","Merges elements from passed arrays into one array"],array_merge_recursive:["array array_merge_recursive(array arr1, array arr2 [, array ...])","Recursively merges elements from passed arrays into one array"],array_multisort:["bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])","Sort multiple arrays at once similar to how ORDER BY clause works in SQL"],array_pad:["array array_pad(array input, int pad_size, mixed pad_value)","Returns a copy of input array padded with pad_value to size pad_size"],array_pop:["mixed array_pop(array stack)","Pops an element off the end of the array"],array_product:["mixed array_product(array input)","Returns the product of the array entries"],array_push:["int array_push(array stack, mixed var [, mixed ...])","Pushes elements onto the end of the array"],array_rand:["mixed array_rand(array input [, int num_req])","Return key/keys for random entry/entries in the array"],array_reduce:["mixed array_reduce(array input, mixed callback [, mixed initial])","Iteratively reduce the array to a single value via the callback."],array_replace:["array array_replace(array arr1, array arr2 [, array ...])","Replaces elements from passed arrays into one array"],array_replace_recursive:["array array_replace_recursive(array arr1, array arr2 [, array ...])","Recursively replaces elements from passed arrays into one array"],array_reverse:["array array_reverse(array input [, bool preserve keys])","Return input as a new array with the order of the entries reversed"],array_search:["mixed array_search(mixed needle, array haystack [, bool strict])","Searches the array for a given value and returns the corresponding key if successful"],array_shift:["mixed array_shift(array stack)","Pops an element off the beginning of the array"],array_slice:["array array_slice(array input, int offset [, int length [, bool preserve_keys]])","Returns elements specified by offset and length"],array_splice:["array array_splice(array input, int offset [, int length [, array replacement]])","Removes the elements designated by offset and length and replace them with supplied array"],array_sum:["mixed array_sum(array input)","Returns the sum of the array entries"],array_udiff:["array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function."],array_udiff_assoc:["array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function."],array_udiff_uassoc:["array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)","Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions."],array_uintersect:["array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback."],array_uintersect_assoc:["array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback."],array_uintersect_uassoc:["array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)","Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks."],array_unique:["array array_unique(array input [, int sort_flags])","Removes duplicate values from array"],array_unshift:["int array_unshift(array stack, mixed var [, mixed ...])","Pushes elements onto the beginning of the array"],array_values:["array array_values(array input)","Return just the values from the input array"],array_walk:["bool array_walk(array input, string funcname [, mixed userdata])","Apply a user function to every member of an array"],array_walk_recursive:["bool array_walk_recursive(array input, string funcname [, mixed userdata])","Apply a user function recursively to every member of an array"],arsort:["bool arsort(array &array_arg [, int sort_flags])","Sort an array in reverse order and maintain index association"],asin:["float asin(float number)","Returns the arc sine of the number in radians"],asinh:["float asinh(float number)","Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number"],asort:["bool asort(array &array_arg [, int sort_flags])","Sort an array and maintain index association"],assert:["int assert(string|bool assertion)","Checks if assertion is false"],assert_options:["mixed assert_options(int what [, mixed value])","Set/get the various assert flags"],atan:["float atan(float number)","Returns the arc tangent of the number in radians"],atan2:["float atan2(float y, float x)","Returns the arc tangent of y/x, with the resulting quadrant determined by the signs of y and x"],atanh:["float atanh(float number)","Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number"],attachIterator:["void attachIterator(Iterator iterator[, mixed info])","Attach a new iterator"],base64_decode:["string base64_decode(string str[, bool strict])","Decodes string using MIME base64 algorithm"],base64_encode:["string base64_encode(string str)","Encodes string using MIME base64 algorithm"],base_convert:["string base_convert(string number, int frombase, int tobase)","Converts a number in a string from any base <= 36 to any base <= 36"],basename:["string basename(string path [, string suffix])","Returns the filename component of the path"],bcadd:["string bcadd(string left_operand, string right_operand [, int scale])","Returns the sum of two arbitrary precision numbers"],bccomp:["int bccomp(string left_operand, string right_operand [, int scale])","Compares two arbitrary precision numbers"],bcdiv:["string bcdiv(string left_operand, string right_operand [, int scale])","Returns the quotient of two arbitrary precision numbers (division)"],bcmod:["string bcmod(string left_operand, string right_operand)","Returns the modulus of the two arbitrary precision operands"],bcmul:["string bcmul(string left_operand, string right_operand [, int scale])","Returns the multiplication of two arbitrary precision numbers"],bcpow:["string bcpow(string x, string y [, int scale])","Returns the value of an arbitrary precision number raised to the power of another"],bcpowmod:["string bcpowmod(string x, string y, string mod [, int scale])","Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous"],bcscale:["bool bcscale(int scale)","Sets default scale parameter for all bc math functions"],bcsqrt:["string bcsqrt(string operand [, int scale])","Returns the square root of an arbitray precision number"],bcsub:["string bcsub(string left_operand, string right_operand [, int scale])","Returns the difference between two arbitrary precision numbers"],bin2hex:["string bin2hex(string data)","Converts the binary representation of data to hex"],bind_textdomain_codeset:["string bind_textdomain_codeset (string domain, string codeset)","Specify the character encoding in which the messages from the DOMAIN message catalog will be returned."],bindec:["int bindec(string binary_number)","Returns the decimal equivalent of the binary number"],bindtextdomain:["string bindtextdomain(string domain_name, string dir)","Bind to the text domain domain_name, looking for translations in dir. Returns the current domain"],birdstep_autocommit:["bool birdstep_autocommit(int index)",""],birdstep_close:["bool birdstep_close(int id)",""],birdstep_commit:["bool birdstep_commit(int index)",""],birdstep_connect:["int birdstep_connect(string server, string user, string pass)",""],birdstep_exec:["int birdstep_exec(int index, string exec_str)",""],birdstep_fetch:["bool birdstep_fetch(int index)",""],birdstep_fieldname:["string birdstep_fieldname(int index, int col)",""],birdstep_fieldnum:["int birdstep_fieldnum(int index)",""],birdstep_freeresult:["bool birdstep_freeresult(int index)",""],birdstep_off_autocommit:["bool birdstep_off_autocommit(int index)",""],birdstep_result:["mixed birdstep_result(int index, mixed col)",""],birdstep_rollback:["bool birdstep_rollback(int index)",""],bzcompress:["string bzcompress(string source [, int blocksize100k [, int workfactor]])","Compresses a string into BZip2 encoded data"],bzdecompress:["string bzdecompress(string source [, int small])","Decompresses BZip2 compressed data"],bzerrno:["int bzerrno(resource bz)","Returns the error number"],bzerror:["array bzerror(resource bz)","Returns the error number and error string in an associative array"],bzerrstr:["string bzerrstr(resource bz)","Returns the error string"],bzopen:["resource bzopen(string|int file|fp, string mode)","Opens a new BZip2 stream"],bzread:["string bzread(resource bz[, int length])","Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified"],cal_days_in_month:["int cal_days_in_month(int calendar, int month, int year)","Returns the number of days in a month for a given year and calendar"],cal_from_jd:["array cal_from_jd(int jd, int calendar)","Converts from Julian Day Count to a supported calendar and return extended information"],cal_info:["array cal_info([int calendar])","Returns information about a particular calendar"],cal_to_jd:["int cal_to_jd(int calendar, int month, int day, int year)","Converts from a supported calendar to Julian Day Count"],call_user_func:["mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])","Call a user function which is the first parameter"],call_user_func_array:["mixed call_user_func_array(string function_name, array parameters)","Call a user function which is the first parameter with the arguments contained in array"],call_user_method:["mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])","Call a user method on a specific object or class"],call_user_method_array:["mixed call_user_method_array(string method_name, mixed object, array params)","Call a user method on a specific object or class using a parameter array"],ceil:["float ceil(float number)","Returns the next highest integer value of the number"],chdir:["bool chdir(string directory)","Change the current directory"],checkdate:["bool checkdate(int month, int day, int year)","Returns true(1) if it is a valid date in gregorian calendar"],chgrp:["bool chgrp(string filename, mixed group)","Change file group"],chmod:["bool chmod(string filename, int mode)","Change file mode"],chown:["bool chown (string filename, mixed user)","Change file owner"],chr:["string chr(int ascii)","Converts ASCII code to a character"],chroot:["bool chroot(string directory)","Change root directory"],chunk_split:["string chunk_split(string str [, int chunklen [, string ending]])","Returns split line"],class_alias:["bool class_alias(string user_class_name , string alias_name [, bool autoload])","Creates an alias for user defined class"],class_exists:["bool class_exists(string classname [, bool autoload])","Checks if the class exists"],class_implements:["array class_implements(mixed what [, bool autoload ])","Return all classes and interfaces implemented by SPL"],class_parents:["array class_parents(object instance [, boolean autoload = true])","Return an array containing the names of all parent classes"],clearstatcache:["void clearstatcache([bool clear_realpath_cache[, string filename]])","Clear file stat cache"],closedir:["void closedir([resource dir_handle])","Close directory connection identified by the dir_handle"],closelog:["bool closelog(void)","Close connection to system logger"],collator_asort:["bool collator_asort( Collator $coll, array(string) $arr )","* Sort array using specified collator, maintaining index association."],collator_compare:["int collator_compare( Collator $coll, string $str1, string $str2 )","* Compare two strings."],collator_create:["Collator collator_create( string $locale )","* Create collator."],collator_get_attribute:["int collator_get_attribute( Collator $coll, int $attr )","* Get collation attribute value."],collator_get_error_code:["int collator_get_error_code( Collator $coll )","* Get collator's last error code."],collator_get_error_message:["string collator_get_error_message( Collator $coll )","* Get text description for collator's last error code."],collator_get_locale:["string collator_get_locale( Collator $coll, int $type )","* Gets the locale name of the collator."],collator_get_sort_key:["bool collator_get_sort_key( Collator $coll, string $str )","* Get a sort key for a string from a Collator. }}}"],collator_get_strength:["int collator_get_strength(Collator coll)","* Returns the current collation strength."],collator_set_attribute:["bool collator_set_attribute( Collator $coll, int $attr, int $val )","* Set collation attribute."],collator_set_strength:["bool collator_set_strength(Collator coll, int strength)","* Set the collation strength."],collator_sort:["bool collator_sort( Collator $coll, array(string) $arr [, int $sort_flags] )","* Sort array using specified collator."],collator_sort_with_sort_keys:["bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )","* Equivalent to standard PHP sort using Collator. * Uses ICU ucol_getSortKey for performance."],com_create_guid:["string com_create_guid()","Generate a globally unique identifier (GUID)"],com_event_sink:["bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])","Connect events from a COM object to a PHP object"],com_get_active_object:["object com_get_active_object(string progid [, int code_page ])","Returns a handle to an already running instance of a COM object"],com_load_typelib:["bool com_load_typelib(string typelib_name [, int case_insensitive])","Loads a Typelibrary and registers its constants"],com_message_pump:["bool com_message_pump([int timeoutms])","Process COM messages, sleeping for up to timeoutms milliseconds"],com_print_typeinfo:["bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)","Print out a PHP class definition for a dispatchable interface"],compact:["array compact(mixed var_names [, mixed ...])","Creates a hash containing variables and their values"],compose_locale:["static string compose_locale($array)","* Creates a locale by combining the parts of locale-ID passed * }}}"],confirm_extname_compiled:["string confirm_extname_compiled(string arg)","Return a string to confirm that the module is compiled in"],connection_aborted:["int connection_aborted(void)","Returns true if client disconnected"],connection_status:["int connection_status(void)","Returns the connection status bitfield"],constant:["mixed constant(string const_name)","Given the name of a constant this function will return the constant's associated value"],convert_cyr_string:["string convert_cyr_string(string str, string from, string to)","Convert from one Cyrillic character set to another"],convert_uudecode:["string convert_uudecode(string data)","decode a uuencoded string"],convert_uuencode:["string convert_uuencode(string data)","uuencode a string"],copy:["bool copy(string source_file, string destination_file [, resource context])","Copy a file"],cos:["float cos(float number)","Returns the cosine of the number in radians"],cosh:["float cosh(float number)","Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))/2"],count:["int count(mixed var [, int mode])","Count the number of elements in a variable (usually an array)"],count_chars:["mixed count_chars(string input [, int mode])","Returns info about what characters are used in input"],crc32:["string crc32(string str)","Calculate the crc32 polynomial of a string"],create_function:["string create_function(string args, string code)","Creates an anonymous function, and returns its name (funny, eh?)"],crypt:["string crypt(string str [, string salt])","Hash a string"],ctype_alnum:["bool ctype_alnum(mixed c)","Checks for alphanumeric character(s)"],ctype_alpha:["bool ctype_alpha(mixed c)","Checks for alphabetic character(s)"],ctype_cntrl:["bool ctype_cntrl(mixed c)","Checks for control character(s)"],ctype_digit:["bool ctype_digit(mixed c)","Checks for numeric character(s)"],ctype_graph:["bool ctype_graph(mixed c)","Checks for any printable character(s) except space"],ctype_lower:["bool ctype_lower(mixed c)","Checks for lowercase character(s)"],ctype_print:["bool ctype_print(mixed c)","Checks for printable character(s)"],ctype_punct:["bool ctype_punct(mixed c)","Checks for any printable character which is not whitespace or an alphanumeric character"],ctype_space:["bool ctype_space(mixed c)","Checks for whitespace character(s)"],ctype_upper:["bool ctype_upper(mixed c)","Checks for uppercase character(s)"],ctype_xdigit:["bool ctype_xdigit(mixed c)","Checks for character(s) representing a hexadecimal digit"],curl_close:["void curl_close(resource ch)","Close a cURL session"],curl_copy_handle:["resource curl_copy_handle(resource ch)","Copy a cURL handle along with all of it's preferences"],curl_errno:["int curl_errno(resource ch)","Return an integer containing the last error number"],curl_error:["string curl_error(resource ch)","Return a string contain the last error for the current session"],curl_exec:["bool curl_exec(resource ch)","Perform a cURL session"],curl_getinfo:["mixed curl_getinfo(resource ch [, int option])","Get information regarding a specific transfer"],curl_init:["resource curl_init([string url])","Initialize a cURL session"],curl_multi_add_handle:["int curl_multi_add_handle(resource mh, resource ch)","Add a normal cURL handle to a cURL multi handle"],curl_multi_close:["void curl_multi_close(resource mh)","Close a set of cURL handles"],curl_multi_exec:["int curl_multi_exec(resource mh, int &still_running)","Run the sub-connections of the current cURL handle"],curl_multi_getcontent:["string curl_multi_getcontent(resource ch)","Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set"],curl_multi_info_read:["array curl_multi_info_read(resource mh [, long msgs_in_queue])","Get information about the current transfers"],curl_multi_init:["resource curl_multi_init(void)","Returns a new cURL multi handle"],curl_multi_remove_handle:["int curl_multi_remove_handle(resource mh, resource ch)","Remove a multi handle from a set of cURL handles"],curl_multi_select:["int curl_multi_select(resource mh[, double timeout])",'Get all the sockets associated with the cURL extension, which can then be "selected"'],curl_setopt:["bool curl_setopt(resource ch, int option, mixed value)","Set an option for a cURL transfer"],curl_setopt_array:["bool curl_setopt_array(resource ch, array options)","Set an array of option for a cURL transfer"],curl_version:["array curl_version([int version])","Return cURL version information."],current:["mixed current(array array_arg)","Return the element currently pointed to by the internal array pointer"],date:["string date(string format [, long timestamp])","Format a local date/time"],date_add:["DateTime date_add(DateTime object, DateInterval interval)","Adds an interval to the current date in object."],date_create:["DateTime date_create([string time[, DateTimeZone object]])","Returns new DateTime object"],date_create_from_format:["DateTime date_create_from_format(string format, string time[, DateTimeZone object])","Returns new DateTime object formatted according to the specified format"],date_date_set:["DateTime date_date_set(DateTime object, long year, long month, long day)","Sets the date."],date_default_timezone_get:["string date_default_timezone_get()","Gets the default timezone used by all date/time functions in a script"],date_default_timezone_set:["bool date_default_timezone_set(string timezone_identifier)","Sets the default timezone used by all date/time functions in a script"],date_diff:["DateInterval date_diff(DateTime object [, bool absolute])","Returns the difference between two DateTime objects."],date_format:["string date_format(DateTime object, string format)","Returns date formatted according to given format"],date_get_last_errors:["array date_get_last_errors()","Returns the warnings and errors found while parsing a date/time string."],date_interval_create_from_date_string:["DateInterval date_interval_create_from_date_string(string time)","Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string"],date_interval_format:["string date_interval_format(DateInterval object, string format)","Formats the interval."],date_isodate_set:["DateTime date_isodate_set(DateTime object, long year, long week[, long day])","Sets the ISO date."],date_modify:["DateTime date_modify(DateTime object, string modify)","Alters the timestamp."],date_offset_get:["long date_offset_get(DateTime object)","Returns the DST offset."],date_parse:["array date_parse(string date)","Returns associative array with detailed info about given date"],date_parse_from_format:["array date_parse_from_format(string format, string date)","Returns associative array with detailed info about given date"],date_sub:["DateTime date_sub(DateTime object, DateInterval interval)","Subtracts an interval to the current date in object."],date_sun_info:["array date_sun_info(long time, float latitude, float longitude)","Returns an array with information about sun set/rise and twilight begin/end"],date_sunrise:["mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])","Returns time of sunrise for a given day and location"],date_sunset:["mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])","Returns time of sunset for a given day and location"],date_time_set:["DateTime date_time_set(DateTime object, long hour, long minute[, long second])","Sets the time."],date_timestamp_get:["long date_timestamp_get(DateTime object)","Gets the Unix timestamp."],date_timestamp_set:["DateTime date_timestamp_set(DateTime object, long unixTimestamp)","Sets the date and time based on an Unix timestamp."],date_timezone_get:["DateTimeZone date_timezone_get(DateTime object)","Return new DateTimeZone object relative to give DateTime"],date_timezone_set:["DateTime date_timezone_set(DateTime object, DateTimeZone object)","Sets the timezone for the DateTime object."],datefmt_create:["IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )","* Create formatter."],datefmt_format:["string datefmt_format( [mixed]int $args or array $args )","* Format the time value as a string. }}}"],datefmt_get_calendar:["string datefmt_get_calendar( IntlDateFormatter $mf )","* Get formatter calendar."],datefmt_get_datetype:["string datefmt_get_datetype( IntlDateFormatter $mf )","* Get formatter datetype."],datefmt_get_error_code:["int datefmt_get_error_code( IntlDateFormatter $nf )","* Get formatter's last error code."],datefmt_get_error_message:["string datefmt_get_error_message( IntlDateFormatter $coll )","* Get text description for formatter's last error code."],datefmt_get_locale:["string datefmt_get_locale(IntlDateFormatter $mf)","* Get formatter locale."],datefmt_get_pattern:["string datefmt_get_pattern( IntlDateFormatter $mf )","* Get formatter pattern."],datefmt_get_timetype:["string datefmt_get_timetype( IntlDateFormatter $mf )","* Get formatter timetype."],datefmt_get_timezone_id:["string datefmt_get_timezone_id( IntlDateFormatter $mf )","* Get formatter timezone_id."],datefmt_isLenient:["string datefmt_isLenient(IntlDateFormatter $mf)","* Get formatter locale."],datefmt_localtime:["integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])","* Parse the string $value to a localtime array }}}"],datefmt_parse:["integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )","* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}"],datefmt_setLenient:["string datefmt_setLenient(IntlDateFormatter $mf)","* Set formatter lenient."],datefmt_set_calendar:["bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )","* Set formatter calendar."],datefmt_set_pattern:["bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )","* Set formatter pattern."],datefmt_set_timezone_id:["boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)","* Set formatter timezone_id."],dba_close:["void dba_close(resource handle)","Closes database"],dba_delete:["bool dba_delete(string key, resource handle)","Deletes the entry associated with key If inifile: remove all other key lines"],dba_exists:["bool dba_exists(string key, resource handle)","Checks, if the specified key exists"],dba_fetch:["string dba_fetch(string key, [int skip ,] resource handle)","Fetches the data associated with key"],dba_firstkey:["string dba_firstkey(resource handle)","Resets the internal key pointer and returns the first key"],dba_handlers:["array dba_handlers([bool full_info])","List configured database handlers"],dba_insert:["bool dba_insert(string key, string value, resource handle)","If not inifile: Insert value as key, return false, if key exists already If inifile: Add vakue as key (next instance of key)"],dba_key_split:["array|false dba_key_split(string key)","Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null"],dba_list:["array dba_list()","List opened databases"],dba_nextkey:["string dba_nextkey(resource handle)","Returns the next key"],dba_open:["resource dba_open(string path, string mode [, string handlername, string ...])","Opens path using the specified handler in mode"],dba_optimize:["bool dba_optimize(resource handle)","Optimizes (e.g. clean up, vacuum) database"],dba_popen:["resource dba_popen(string path, string mode [, string handlername, string ...])","Opens path using the specified handler in mode persistently"],dba_replace:["bool dba_replace(string key, string value, resource handle)","Inserts value as key, replaces key, if key exists already If inifile: remove all other key lines"],dba_sync:["bool dba_sync(resource handle)","Synchronizes database"],dcgettext:["string dcgettext(string domain_name, string msgid, long category)","Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist"],dcngettext:["string dcngettext (string domain, string msgid1, string msgid2, int n, int category)","Plural version of dcgettext()"],debug_backtrace:["array debug_backtrace([bool provide_object])","Return backtrace as array"],debug_print_backtrace:["void debug_print_backtrace(void) */","ZEND_FUNCTION(debug_print_backtrace) { zend_execute_data *ptr, *skip; int lineno; char *function_name; char *filename; char *class_name = NULL; char *call_type; char *include_filename = NULL; zval *arg_array = NULL; int indent = 0; if (zend_parse_parameters_none() == FAILURE) { return; } ptr = EG(current_execute_data); /* skip debug_backtrace()"],debug_zval_dump:["void debug_zval_dump(mixed var)","Dumps a string representation of an internal zend value to output."],decbin:["string decbin(int decimal_number)","Returns a string containing a binary representation of the number"],dechex:["string dechex(int decimal_number)","Returns a string containing a hexadecimal representation of the given number"],decoct:["string decoct(int decimal_number)","Returns a string containing an octal representation of the given number"],define:["bool define(string constant_name, mixed value, boolean case_insensitive=false)","Define a new constant"],define_syslog_variables:["void define_syslog_variables(void)","Initializes all syslog-related variables"],defined:["bool defined(string constant_name)","Check whether a constant exists"],deg2rad:["float deg2rad(float number)","Converts the number in degrees to the radian equivalent"],dgettext:["string dgettext(string domain_name, string msgid)","Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist"],die:["void die([mixed status])","Output a message and terminate the current script"],dir:["object dir(string directory[, resource context])","Directory class with properties, handle and class and methods read, rewind and close"],dirname:["string dirname(string path)","Returns the directory name component of the path"],disk_free_space:["float disk_free_space(string path)","Get free disk space for filesystem that path is on"],disk_total_space:["float disk_total_space(string path)","Get total disk space for filesystem that path is on"],display_disabled_function:["void display_disabled_function(void)","Dummy function which displays an error when a disabled function is called."],dl:["int dl(string extension_filename)","Load a PHP extension at runtime"],dngettext:["string dngettext (string domain, string msgid1, string msgid2, int count)","Plural version of dgettext()"],dns_check_record:["bool dns_check_record(string host [, string type])","Check DNS records corresponding to a given Internet host name or IP address"],dns_get_mx:["bool dns_get_mx(string hostname, array mxhosts [, array weight])","Get MX records corresponding to a given Internet host name"],dns_get_record:["array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])","Get any Resource Record corresponding to a given Internet host name"],dom_attr_is_id:["boolean dom_attr_is_id();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Attr-isId Since: DOM Level 3"],dom_characterdata_append_data:["void dom_characterdata_append_data(string arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-32791A2F Since:"],dom_characterdata_delete_data:["void dom_characterdata_delete_data(int offset, int count);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-7C603781 Since:"],dom_characterdata_insert_data:["void dom_characterdata_insert_data(int offset, string arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3EDB695F Since:"],dom_characterdata_replace_data:["void dom_characterdata_replace_data(int offset, int count, string arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-E5CBA7FB Since:"],dom_characterdata_substring_data:["string dom_characterdata_substring_data(int offset, int count);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6531BCCF Since:"],dom_document_adopt_node:["DOMNode dom_document_adopt_node(DOMNode source);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-adoptNode Since: DOM Level 3"],dom_document_create_attribute:["DOMAttr dom_document_create_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1084891198 Since:"],dom_document_create_attribute_ns:["DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrAttrNS Since: DOM Level 2"],dom_document_create_cdatasection:["DOMCdataSection dom_document_create_cdatasection(string data);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D26C0AF8 Since:"],dom_document_create_comment:["DOMComment dom_document_create_comment(string data);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1334481328 Since:"],dom_document_create_document_fragment:["DOMDocumentFragment dom_document_create_document_fragment();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-35CB04B5 Since:"],dom_document_create_element:["DOMElement dom_document_create_element(string tagName [, string value]);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-2141741547 Since:"],dom_document_create_element_ns:["DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value]);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-DocCrElNS Since: DOM Level 2"],dom_document_create_entity_reference:["DOMEntityReference dom_document_create_entity_reference(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-392B75AE Since:"],dom_document_create_processing_instruction:["DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-135944439 Since:"],dom_document_create_text_node:["DOMText dom_document_create_text_node(string data);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1975348127 Since:"],dom_document_get_element_by_id:["DOMElement dom_document_get_element_by_id(string elementId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBId Since: DOM Level 2"],dom_document_get_elements_by_tag_name:["DOMNodeList dom_document_get_elements_by_tag_name(string tagname);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C9094 Since:"],dom_document_get_elements_by_tag_name_ns:["DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getElBTNNS Since: DOM Level 2"],dom_document_import_node:["DOMNode dom_document_import_node(DOMNode importedNode, boolean deep);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Core-Document-importNode Since: DOM Level 2"],dom_document_load:["DOMNode dom_document_load(string source [, int options]);","URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-load Since: DOM Level 3"],dom_document_load_html:["DOMNode dom_document_load_html(string source);","Since: DOM extended"],dom_document_load_html_file:["DOMNode dom_document_load_html_file(string source);","Since: DOM extended"],dom_document_loadxml:["DOMNode dom_document_loadxml(string source [, int options]);","URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-loadXML Since: DOM Level 3"],dom_document_normalize_document:["void dom_document_normalize_document();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-normalizeDocument Since: DOM Level 3"],dom_document_relaxNG_validate_file:["boolean dom_document_relaxNG_validate_file(string filename); */","PHP_FUNCTION(dom_document_relaxNG_validate_file) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_relaxNG_validate_file"],dom_document_relaxNG_validate_xml:["boolean dom_document_relaxNG_validate_xml(string source); */","PHP_FUNCTION(dom_document_relaxNG_validate_xml) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_relaxNG_validate_xml"],dom_document_rename_node:["DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3"],dom_document_save:["int dom_document_save(string file);","Convenience method to save to file"],dom_document_save_html:["string dom_document_save_html();","Convenience method to output as html"],dom_document_save_html_file:["int dom_document_save_html_file(string file);","Convenience method to save to file as html"],dom_document_savexml:["string dom_document_savexml([node n]);","URL: http://www.w3.org/TR/DOM-Level-3-LS/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3"],dom_document_schema_validate:["boolean dom_document_schema_validate(string source); */","PHP_FUNCTION(dom_document_schema_validate_xml) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } /* }}} end dom_document_schema_validate"],dom_document_schema_validate_file:["boolean dom_document_schema_validate_file(string filename); */","PHP_FUNCTION(dom_document_schema_validate_file) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } /* }}} end dom_document_schema_validate_file"],dom_document_validate:["boolean dom_document_validate();","Since: DOM extended"],dom_document_xinclude:["int dom_document_xinclude([int options])","Substitutues xincludes in a DomDocument"],dom_domconfiguration_can_set_parameter:["boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-canSetParameter Since:"],dom_domconfiguration_get_parameter:["domdomuserdata dom_domconfiguration_get_parameter(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-getParameter Since:"],dom_domconfiguration_set_parameter:["dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMConfiguration-property Since:"],dom_domerrorhandler_handle_error:["dom_boolean dom_domerrorhandler_handle_error(domerror error);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:"],dom_domimplementation_create_document:["DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2"],dom_domimplementation_create_document_type:["DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2"],dom_domimplementation_get_feature:["DOMNode dom_domimplementation_get_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3"],dom_domimplementation_has_feature:["boolean dom_domimplementation_has_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-5CED94D7 Since:"],dom_domimplementationlist_item:["domdomimplementation dom_domimplementationlist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMImplementationList-item Since:"],dom_domimplementationsource_get_domimplementation:["domdomimplementation dom_domimplementationsource_get_domimplementation(string features);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpl Since:"],dom_domimplementationsource_get_domimplementations:["domimplementationlist dom_domimplementationsource_get_domimplementations(string features);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-getDOMImpls Since:"],dom_domstringlist_item:["domstring dom_domstringlist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#DOMStringList-item Since:"],dom_element_get_attribute:["string dom_element_get_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-666EE0F9 Since:"],dom_element_get_attribute_node:["DOMAttr dom_element_get_attribute_node(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-217A91B8 Since:"],dom_element_get_attribute_node_ns:["DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2"],dom_element_get_attribute_ns:["string dom_element_get_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2"],dom_element_get_elements_by_tag_name:["DOMNodeList dom_element_get_elements_by_tag_name(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1938918D Since:"],dom_element_get_elements_by_tag_name_ns:["DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2"],dom_element_has_attribute:["boolean dom_element_has_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2"],dom_element_has_attribute_ns:["boolean dom_element_has_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2"],dom_element_remove_attribute:["void dom_element_remove_attribute(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-6D6AC0F9 Since:"],dom_element_remove_attribute_node:["DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D589198 Since:"],dom_element_remove_attribute_ns:["void dom_element_remove_attribute_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2"],dom_element_set_attribute:["void dom_element_set_attribute(string name, string value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-F68F082 Since:"],dom_element_set_attribute_node:["DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-887236154 Since:"],dom_element_set_attribute_node_ns:["DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2"],dom_element_set_attribute_ns:["void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2"],dom_element_set_id_attribute:["void dom_element_set_id_attribute(string name, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3"],dom_element_set_id_attribute_node:["void dom_element_set_id_attribute_node(attr idAttr, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3"],dom_element_set_id_attribute_ns:["void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3"],dom_import_simplexml:["somNode dom_import_simplexml(sxeobject node)","Get a simplexml_element object from dom to allow for processing"],dom_namednodemap_get_named_item:["DOMNode dom_namednodemap_get_named_item(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1074577549 Since:"],dom_namednodemap_get_named_item_ns:["DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2"],dom_namednodemap_item:["DOMNode dom_namednodemap_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-349467F9 Since:"],dom_namednodemap_remove_named_item:["DOMNode dom_namednodemap_remove_named_item(string name);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-D58B193 Since:"],dom_namednodemap_remove_named_item_ns:["DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2"],dom_namednodemap_set_named_item:["DOMNode dom_namednodemap_set_named_item(DOMNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1025163788 Since:"],dom_namednodemap_set_named_item_ns:["DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2"],dom_namelist_get_name:["string dom_namelist_get_name(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getName Since:"],dom_namelist_get_namespace_uri:["string dom_namelist_get_namespace_uri(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#NameList-getNamespaceURI Since:"],dom_node_append_child:["DomNode dom_node_append_child(DomNode newChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-184E7107 Since:"],dom_node_clone_node:["DomNode dom_node_clone_node(boolean deep);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-3A0ED0A4 Since:"],dom_node_compare_document_position:["short dom_node_compare_document_position(DomNode other);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3"],dom_node_get_feature:["DomNode dom_node_get_feature(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getFeature Since: DOM Level 3"],dom_node_get_user_data:["mixed dom_node_get_user_data(string key);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-getUserData Since: DOM Level 3"],dom_node_has_attributes:["boolean dom_node_has_attributes();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2"],dom_node_has_child_nodes:["boolean dom_node_has_child_nodes();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-810594187 Since:"],dom_node_insert_before:["domnode dom_node_insert_before(DomNode newChild, DomNode refChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-952280727 Since:"],dom_node_is_default_namespace:["boolean dom_node_is_default_namespace(string namespaceURI);","URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isDefaultNamespace Since: DOM Level 3"],dom_node_is_equal_node:["boolean dom_node_is_equal_node(DomNode arg);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3"],dom_node_is_same_node:["boolean dom_node_is_same_node(DomNode other);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3"],dom_node_is_supported:["boolean dom_node_is_supported(string feature, string version);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2"],dom_node_lookup_namespace_uri:["string dom_node_lookup_namespace_uri(string prefix);","URL: http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespaceURI Since: DOM Level 3"],dom_node_lookup_prefix:["string dom_node_lookup_prefix(string namespaceURI);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3"],dom_node_normalize:["void dom_node_normalize();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-normalize Since:"],dom_node_remove_child:["DomNode dom_node_remove_child(DomNode oldChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-1734834066 Since:"],dom_node_replace_child:["DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-785887307 Since:"],dom_node_set_user_data:["mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#Node3-setUserData Since: DOM Level 3"],dom_nodelist_item:["DOMNode dom_nodelist_item(int index);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-844377136 Since:"],dom_string_extend_find_offset16:["int dom_string_extend_find_offset16(int offset32);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:"],dom_string_extend_find_offset32:["int dom_string_extend_find_offset32(int offset16);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:"],dom_text_is_whitespace_in_element_content:["boolean dom_text_is_whitespace_in_element_content();","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3"],dom_text_replace_whole_text:["DOMText dom_text_replace_whole_text(string content);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3"],dom_text_split_text:["DOMText dom_text_split_text(int offset);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#core-ID-38853C1D Since:"],dom_userdatahandler_handle:["dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-handleUserDataEvent Since:"],dom_xpath_evaluate:["mixed dom_xpath_evaluate(string expr [,DOMNode context]); */","PHP_FUNCTION(dom_xpath_evaluate) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } /* }}} end dom_xpath_evaluate"],dom_xpath_query:["DOMNodeList dom_xpath_query(string expr [,DOMNode context]); */","PHP_FUNCTION(dom_xpath_query) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } /* }}} end dom_xpath_query"],dom_xpath_register_ns:["boolean dom_xpath_register_ns(string prefix, string uri); */",'PHP_FUNCTION(dom_xpath_register_ns) { zval *id; xmlXPathContextPtr ctxp; int prefix_len, ns_uri_len; dom_xpath_object *intern; unsigned char *prefix, *ns_uri; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Oss", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) { return; } intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); ctxp = (xmlXPathContextPtr) intern->ptr; if (ctxp == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid XPath Context"); RETURN_FALSE; } if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) { RETURN_FALSE } RETURN_TRUE; } /* }}}'],dom_xpath_register_php_functions:["void dom_xpath_register_php_functions() */",'PHP_FUNCTION(dom_xpath_register_php_functions) { zval *id; dom_xpath_object *intern; zval *array_value, **entry, *new_string; int name_len = 0; char *name; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "a", &array_value) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value)); while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) { SEPARATE_ZVAL(entry); convert_to_string_ex(entry); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL); zend_hash_move_forward(Z_ARRVAL_P(array_value)); } intern->registerPhpFunctions = 2; RETURN_TRUE; } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s", &name, &name_len) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL); intern->registerPhpFunctions = 2; } else { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); intern->registerPhpFunctions = 1; } } /* }}} end dom_xpath_register_php_functions'],each:["array each(array arr)","Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element"],easter_date:["int easter_date([int year])","Return the timestamp of midnight on Easter of a given year (defaults to current year)"],easter_days:["int easter_days([int year, [int method]])","Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)"],echo:["void echo(string arg1 [, string ...])","Output one or more strings"],empty:["bool empty( mixed var )","Determine whether a variable is empty"],enchant_broker_describe:["array enchant_broker_describe(resource broker)","Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()"],enchant_broker_dict_exists:["bool enchant_broker_dict_exists(resource broker, string tag)","Wether a dictionary exists or not. Using non-empty tag"],enchant_broker_free:["boolean enchant_broker_free(resource broker)","Destroys the broker object and its dictionnaries"],enchant_broker_free_dict:["resource enchant_broker_free_dict(resource dict)","Free the dictionary resource"],enchant_broker_get_dict_path:["string enchant_broker_get_dict_path(resource broker, int dict_type)","Get the directory path for a given backend, works with ispell and myspell"],enchant_broker_get_error:["string enchant_broker_get_error(resource broker)","Returns the last error of the broker"],enchant_broker_init:["resource enchant_broker_init()","create a new broker object capable of requesting"],enchant_broker_list_dicts:["string enchant_broker_list_dicts(resource broker)","Lists the dictionaries available for the given broker"],enchant_broker_request_dict:["resource enchant_broker_request_dict(resource broker, string tag)",'create a new dictionary using tag, the non-empty language tag you wish to request a dictionary for ("en_US", "de_DE", ...)'],enchant_broker_request_pwl_dict:["resource enchant_broker_request_pwl_dict(resource broker, string filename)","creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call."],enchant_broker_set_dict_path:["bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)","Set the directory path for a given backend, works with ispell and myspell"],enchant_broker_set_ordering:["bool enchant_broker_set_ordering(resource broker, string tag, string ordering)","Declares a preference of dictionaries to use for the language described/referred to by 'tag'. The ordering is a comma delimited list of provider names. As a special exception, the \"*\" tag can be used as a language tag to declare a default ordering for any language that does not explictly declare an ordering."],enchant_dict_add_to_personal:["void enchant_dict_add_to_personal(resource dict, string word)","add 'word' to personal word list"],enchant_dict_add_to_session:["void enchant_dict_add_to_session(resource dict, string word)","add 'word' to this spell-checking session"],enchant_dict_check:["bool enchant_dict_check(resource dict, string word)","If the word is correctly spelled return true, otherwise return false"],enchant_dict_describe:["array enchant_dict_describe(resource dict)","Describes an individual dictionary 'dict'"],enchant_dict_get_error:["string enchant_dict_get_error(resource dict)","Returns the last error of the current spelling-session"],enchant_dict_is_in_session:["bool enchant_dict_is_in_session(resource dict, string word)","whether or not 'word' exists in this spelling-session"],enchant_dict_quick_check:["bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])","If the word is correctly spelled return true, otherwise return false, if suggestions variable is provided, fill it with spelling alternatives."],enchant_dict_store_replacement:["void enchant_dict_store_replacement(resource dict, string mis, string cor)","add a correction for 'mis' using 'cor'. Notes that you replaced @mis with @cor, so it's possibly more likely that future occurrences of @mis will be replaced with @cor. So it might bump @cor up in the suggestion list."],enchant_dict_suggest:["array enchant_dict_suggest(resource dict, string word)","Will return a list of values if any of those pre-conditions are not met."],end:["mixed end(array array_arg)","Advances array argument's internal pointer to the last element and return it"],ereg:["int ereg(string pattern, string string [, array registers])","Regular expression match"],ereg_replace:["string ereg_replace(string pattern, string replacement, string string)","Replace regular expression"],eregi:["int eregi(string pattern, string string [, array registers])","Case-insensitive regular expression match"],eregi_replace:["string eregi_replace(string pattern, string replacement, string string)","Case insensitive replace regular expression"],error_get_last:["array error_get_last()","Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet."],error_log:["bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])","Send an error message somewhere"],error_reporting:["int error_reporting([int new_error_level])","Return the current error_reporting level, and if an argument was passed - change to the new level"],escapeshellarg:["string escapeshellarg(string arg)","Quote and escape an argument for use in a shell command"],escapeshellcmd:["string escapeshellcmd(string command)","Escape shell metacharacters"],exec:["string exec(string command [, array &output [, int &return_value]])","Execute an external program"],exif_imagetype:["int exif_imagetype(string imagefile)","Get the type of an image"],exif_read_data:["array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])","Reads header data from the JPEG/TIFF image filename and optionally reads the internal thumbnails"],exif_tagname:["string exif_tagname(index)","Get headername for index or false if not defined"],exif_thumbnail:["string exif_thumbnail(string filename [, &width, &height [, &imagetype]])","Reads the embedded thumbnail"],exit:["void exit([mixed status])","Output a message and terminate the current script"],exp:["float exp(float number)","Returns e raised to the power of the number"],explode:["array explode(string separator, string str [, int limit])","Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned."],expm1:["float expm1(float number)","Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero"],extension_loaded:["bool extension_loaded(string extension_name)","Returns true if the named extension is loaded"],extract:["int extract(array var_array [, int extract_type [, string prefix]])","Imports variables into symbol table from an array"],ezmlm_hash:["int ezmlm_hash(string addr)","Calculate EZMLM list hash value."],fclose:["bool fclose(resource fp)","Close an open file pointer"],feof:["bool feof(resource fp)","Test for end-of-file on a file pointer"],fflush:["bool fflush(resource fp)","Flushes output"],fgetc:["string fgetc(resource fp)","Get a character from file pointer"],fgetcsv:["array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])","Get line from file pointer and parse for CSV fields"],fgets:["string fgets(resource fp[, int length])","Get a line from file pointer"],fgetss:["string fgetss(resource fp [, int length [, string allowable_tags]])","Get a line from file pointer and strip HTML tags"],file:["array file(string filename [, int flags[, resource context]])","Read entire file into an array"],file_exists:["bool file_exists(string filename)","Returns true if filename exists"],file_get_contents:["string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])","Read the entire file into a string"],file_put_contents:["int file_put_contents(string file, mixed data [, int flags [, resource context]])","Write/Create a file with contents data and return the number of bytes written"],fileatime:["int fileatime(string filename)","Get last access time of file"],filectime:["int filectime(string filename)","Get inode modification time of file"],filegroup:["int filegroup(string filename)","Get file group"],fileinode:["int fileinode(string filename)","Get file inode"],filemtime:["int filemtime(string filename)","Get last modification time of file"],fileowner:["int fileowner(string filename)","Get file owner"],fileperms:["int fileperms(string filename)","Get file permissions"],filesize:["int filesize(string filename)","Get file size"],filetype:["string filetype(string filename)","Get file type"],filter_has_var:["mixed filter_has_var(constant type, string variable_name)","* Returns true if the variable with the name 'name' exists in source."],filter_input:["mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])","* Returns the filtered variable 'name'* from source `type`."],filter_input_array:["mixed filter_input_array(constant type, [, mixed options]])","* Returns an array with all arguments defined in 'definition'."],filter_var:["mixed filter_var(mixed variable [, long filter [, mixed options]])","* Returns the filtered version of the vriable."],filter_var_array:["mixed filter_var_array(array data, [, mixed options]])","* Returns an array with all arguments defined in 'definition'."],finfo_buffer:["string finfo_buffer(resource finfo, char *string [, int options [, resource context]])","Return infromation about a string buffer."],finfo_close:["resource finfo_close(resource finfo)","Close fileinfo resource."],finfo_file:["string finfo_file(resource finfo, char *file_name [, int options [, resource context]])","Return information about a file."],finfo_open:["resource finfo_open([int options [, string arg]])","Create a new fileinfo resource."],finfo_set_flags:["bool finfo_set_flags(resource finfo, int options)","Set libmagic configuration options."],floatval:["float floatval(mixed var)","Get the float value of a variable"],flock:["bool flock(resource fp, int operation [, int &wouldblock])","Portable file locking"],floor:["float floor(float number)","Returns the next lowest integer value from the number"],flush:["void flush(void)","Flush the output buffer"],fmod:["float fmod(float x, float y)","Returns the remainder of dividing x by y as a float"],fnmatch:["bool fnmatch(string pattern, string filename [, int flags])","Match filename against pattern"],fopen:["resource fopen(string filename, string mode [, bool use_include_path [, resource context]])","Open a file or a URL and return a file pointer"],forward_static_call:["mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])","Call a user function which is the first parameter"],fpassthru:["int fpassthru(resource fp)","Output all remaining data from a file pointer"],fprintf:["int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])","Output a formatted string into a stream"],fputcsv:["int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])","Format line as CSV and write to file pointer"],fread:["string fread(resource fp, int length)","Binary-safe file read"],frenchtojd:["int frenchtojd(int month, int day, int year)","Converts a french republic calendar date to julian day count"],fscanf:["mixed fscanf(resource stream, string format [, string ...])","Implements a mostly ANSI compatible fscanf()"],fseek:["int fseek(resource fp, int offset [, int whence])","Seek on a file pointer"],fsockopen:["resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])","Open Internet or Unix domain socket connection"],fstat:["array fstat(resource fp)","Stat() on a filehandle"],ftell:["int ftell(resource fp)","Get file pointer's read/write position"],ftok:["int ftok(string pathname, string proj)","Convert a pathname and a project identifier to a System V IPC key"],ftp_alloc:["bool ftp_alloc(resource stream, int size[, &response])","Attempt to allocate space on the remote FTP server"],ftp_cdup:["bool ftp_cdup(resource stream)","Changes to the parent directory"],ftp_chdir:["bool ftp_chdir(resource stream, string directory)","Changes directories"],ftp_chmod:["int ftp_chmod(resource stream, int mode, string filename)","Sets permissions on a file"],ftp_close:["bool ftp_close(resource stream)","Closes the FTP stream"],ftp_connect:["resource ftp_connect(string host [, int port [, int timeout]])","Opens a FTP stream"],ftp_delete:["bool ftp_delete(resource stream, string file)","Deletes a file"],ftp_exec:["bool ftp_exec(resource stream, string command)","Requests execution of a program on the FTP server"],ftp_fget:["bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])","Retrieves a file from the FTP server and writes it to an open file"],ftp_fput:["bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])","Stores a file from an open file to the FTP server"],ftp_get:["bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])","Retrieves a file from the FTP server and writes it to a local file"],ftp_get_option:["mixed ftp_get_option(resource stream, int option)","Gets an FTP option"],ftp_login:["bool ftp_login(resource stream, string username, string password)","Logs into the FTP server"],ftp_mdtm:["int ftp_mdtm(resource stream, string filename)","Returns the last modification time of the file, or -1 on error"],ftp_mkdir:["string ftp_mkdir(resource stream, string directory)","Creates a directory and returns the absolute path for the new directory or false on error"],ftp_nb_continue:["int ftp_nb_continue(resource stream)","Continues retrieving/sending a file nbronously"],ftp_nb_fget:["int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])","Retrieves a file from the FTP server asynchronly and writes it to an open file"],ftp_nb_fput:["int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])","Stores a file from an open file to the FTP server nbronly"],ftp_nb_get:["int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])","Retrieves a file from the FTP server nbhronly and writes it to a local file"],ftp_nb_put:["int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])","Stores a file on the FTP server"],ftp_nlist:["array ftp_nlist(resource stream, string directory)","Returns an array of filenames in the given directory"],ftp_pasv:["bool ftp_pasv(resource stream, bool pasv)","Turns passive mode on or off"],ftp_put:["bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])","Stores a file on the FTP server"],ftp_pwd:["string ftp_pwd(resource stream)","Returns the present working directory"],ftp_raw:["array ftp_raw(resource stream, string command)","Sends a literal command to the FTP server"],ftp_rawlist:["array ftp_rawlist(resource stream, string directory [, bool recursive])","Returns a detailed listing of a directory as an array of output lines"],ftp_rename:["bool ftp_rename(resource stream, string src, string dest)","Renames the given file to a new path"],ftp_rmdir:["bool ftp_rmdir(resource stream, string directory)","Removes a directory"],ftp_set_option:["bool ftp_set_option(resource stream, int option, mixed value)","Sets an FTP option"],ftp_site:["bool ftp_site(resource stream, string cmd)","Sends a SITE command to the server"],ftp_size:["int ftp_size(resource stream, string filename)","Returns the size of the file, or -1 on error"],ftp_ssl_connect:["resource ftp_ssl_connect(string host [, int port [, int timeout]])","Opens a FTP-SSL stream"],ftp_systype:["string ftp_systype(resource stream)","Returns the system type identifier"],ftruncate:["bool ftruncate(resource fp, int size)","Truncate file to 'size' length"],func_get_arg:["mixed func_get_arg(int arg_num)","Get the $arg_num'th argument that was passed to the function"],func_get_args:["array func_get_args()","Get an array of the arguments that were passed to the function"],func_num_args:["int func_num_args(void)","Get the number of arguments that were passed to the function"],function_exists:["bool function_exists(string function_name)","Checks if the function exists"],fwrite:["int fwrite(resource fp, string str [, int length])","Binary-safe file write"],gc_collect_cycles:["int gc_collect_cycles(void)","Forces collection of any existing garbage cycles. Returns number of freed zvals"],gc_disable:["void gc_disable(void)","Deactivates the circular reference collector"],gc_enable:["void gc_enable(void)","Activates the circular reference collector"],gc_enabled:["void gc_enabled(void)","Returns status of the circular reference collector"],gd_info:["array gd_info()",""],getKeywords:["static array getKeywords(string $locale) {","* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!) * }}}"],get_browser:["mixed get_browser([string browser_name [, bool return_array]])","Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array."],get_called_class:["string get_called_class()",'Retrieves the "Late Static Binding" class name'],get_cfg_var:["mixed get_cfg_var(string option_name)","Get the value of a PHP configuration option"],get_class:["string get_class([object object])","Retrieves the class name"],get_class_methods:["array get_class_methods(mixed class)","Returns an array of method names for class or class instance."],get_class_vars:["array get_class_vars(string class_name)","Returns an array of default properties of the class."],get_current_user:["string get_current_user(void)","Get the name of the owner of the current PHP script"],get_declared_classes:["array get_declared_classes()","Returns an array of all declared classes."],get_declared_interfaces:["array get_declared_interfaces()","Returns an array of all declared interfaces."],get_defined_constants:["array get_defined_constants([bool categorize])","Return an array containing the names and values of all defined constants"],get_defined_functions:["array get_defined_functions(void)","Returns an array of all defined functions"],get_defined_vars:["array get_defined_vars(void)","Returns an associative array of names and values of all currently defined variable names (variables in the current scope)"],get_display_language:["static string get_display_language($locale[, $in_locale = null])","* gets the language for the $locale in $in_locale or default_locale"],get_display_name:["static string get_display_name($locale[, $in_locale = null])","* gets the name for the $locale in $in_locale or default_locale"],get_display_region:["static string get_display_region($locale, $in_locale = null)","* gets the region for the $locale in $in_locale or default_locale"],get_display_script:["static string get_display_script($locale, $in_locale = null)","* gets the script for the $locale in $in_locale or default_locale"],get_extension_funcs:["array get_extension_funcs(string extension_name)","Returns an array with the names of functions belonging to the named extension"],get_headers:["array get_headers(string url[, int format])","fetches all the headers sent by the server in response to a HTTP request"],get_html_translation_table:["array get_html_translation_table([int table [, int quote_style]])","Returns the internal translation table used by htmlspecialchars and htmlentities"],get_include_path:["string get_include_path()","Get the current include_path configuration option"],get_included_files:["array get_included_files(void)","Returns an array with the file names that were include_once()'d"],get_loaded_extensions:["array get_loaded_extensions([bool zend_extensions])","Return an array containing names of loaded extensions"],get_magic_quotes_gpc:["int get_magic_quotes_gpc(void)","Get the current active configuration setting of magic_quotes_gpc"],get_magic_quotes_runtime:["int get_magic_quotes_runtime(void)","Get the current active configuration setting of magic_quotes_runtime"],get_meta_tags:["array get_meta_tags(string filename [, bool use_include_path])","Extracts all meta tag content attributes from a file and returns an array"],get_object_vars:["array get_object_vars(object obj)","Returns an array of object properties"],get_parent_class:["string get_parent_class([mixed object])","Retrieves the parent class name for object or class or current scope."],get_resource_type:["string get_resource_type(resource res)","Get the resource type name for a given resource"],getallheaders:["array getallheaders(void)",""],getcwd:["mixed getcwd(void)","Gets the current directory"],getdate:["array getdate([int timestamp])","Get date/time information"],getenv:["string getenv(string varname)","Get the value of an environment variable"],gethostbyaddr:["string gethostbyaddr(string ip_address)","Get the Internet host name corresponding to a given IP address"],gethostbyname:["string gethostbyname(string hostname)","Get the IP address corresponding to a given Internet host name"],gethostbynamel:["array gethostbynamel(string hostname)","Return a list of IP addresses that a given hostname resolves to."],gethostname:["string gethostname()","Get the host name of the current machine"],getimagesize:["array getimagesize(string imagefile [, array info])","Get the size of an image as 4-element array"],getlastmod:["int getlastmod(void)","Get time of last page modification"],getmygid:["int getmygid(void)","Get PHP script owner's GID"],getmyinode:["int getmyinode(void)","Get the inode of the current script being parsed"],getmypid:["int getmypid(void)","Get current process ID"],getmyuid:["int getmyuid(void)","Get PHP script owner's UID"],getopt:["array getopt(string options [, array longopts])","Get options from the command line argument list"],getprotobyname:["int getprotobyname(string name)","Returns protocol number associated with name as per /etc/protocols"],getprotobynumber:["string getprotobynumber(int proto)","Returns protocol name associated with protocol number proto"],getrandmax:["int getrandmax(void)","Returns the maximum value a random number can have"],getrusage:["array getrusage([int who])","Returns an array of usage statistics"],getservbyname:["int getservbyname(string service, string protocol)",'Returns port associated with service. Protocol must be "tcp" or "udp"'],getservbyport:["string getservbyport(int port, string protocol)",'Returns service name associated with port. Protocol must be "tcp" or "udp"'],gettext:["string gettext(string msgid)","Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist"],gettimeofday:["array gettimeofday([bool get_as_float])","Returns the current time as array"],gettype:["string gettype(mixed var)","Returns the type of the variable"],glob:["array glob(string pattern [, int flags])","Find pathnames matching a pattern"],gmdate:["string gmdate(string format [, long timestamp])","Format a GMT date/time"],gmmktime:["int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])","Get UNIX timestamp for a GMT date"],gmp_abs:["resource gmp_abs(resource a)","Calculates absolute value"],gmp_add:["resource gmp_add(resource a, resource b)","Add a and b"],gmp_and:["resource gmp_and(resource a, resource b)","Calculates logical AND of a and b"],gmp_clrbit:["void gmp_clrbit(resource &a, int index)","Clears bit in a"],gmp_cmp:["int gmp_cmp(resource a, resource b)","Compares two numbers"],gmp_com:["resource gmp_com(resource a)","Calculates one's complement of a"],gmp_div_q:["resource gmp_div_q(resource a, resource b [, int round])","Divide a by b, returns quotient only"],gmp_div_qr:["array gmp_div_qr(resource a, resource b [, int round])","Divide a by b, returns quotient and reminder"],gmp_div_r:["resource gmp_div_r(resource a, resource b [, int round])","Divide a by b, returns reminder only"],gmp_divexact:["resource gmp_divexact(resource a, resource b)","Divide a by b using exact division algorithm"],gmp_fact:["resource gmp_fact(int a)","Calculates factorial function"],gmp_gcd:["resource gmp_gcd(resource a, resource b)","Computes greatest common denominator (gcd) of a and b"],gmp_gcdext:["array gmp_gcdext(resource a, resource b)","Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)"],gmp_hamdist:["int gmp_hamdist(resource a, resource b)","Calculates hamming distance between a and b"],gmp_init:["resource gmp_init(mixed number [, int base])","Initializes GMP number"],gmp_intval:["int gmp_intval(resource gmpnumber)","Gets signed long value of GMP number"],gmp_invert:["resource gmp_invert(resource a, resource b)","Computes the inverse of a modulo b"],gmp_jacobi:["int gmp_jacobi(resource a, resource b)","Computes Jacobi symbol"],gmp_legendre:["int gmp_legendre(resource a, resource b)","Computes Legendre symbol"],gmp_mod:["resource gmp_mod(resource a, resource b)","Computes a modulo b"],gmp_mul:["resource gmp_mul(resource a, resource b)","Multiply a and b"],gmp_neg:["resource gmp_neg(resource a)","Negates a number"],gmp_nextprime:["resource gmp_nextprime(resource a)","Finds next prime of a"],gmp_or:["resource gmp_or(resource a, resource b)","Calculates logical OR of a and b"],gmp_perfect_square:["bool gmp_perfect_square(resource a)","Checks if a is an exact square"],gmp_popcount:["int gmp_popcount(resource a)","Calculates the population count of a"],gmp_pow:["resource gmp_pow(resource base, int exp)","Raise base to power exp"],gmp_powm:["resource gmp_powm(resource base, resource exp, resource mod)","Raise base to power exp and take result modulo mod"],gmp_prob_prime:["int gmp_prob_prime(resource a[, int reps])",'Checks if a is "probably prime"'],gmp_random:["resource gmp_random([int limiter])","Gets random number"],gmp_scan0:["int gmp_scan0(resource a, int start)","Finds first zero bit"],gmp_scan1:["int gmp_scan1(resource a, int start)","Finds first non-zero bit"],gmp_setbit:["void gmp_setbit(resource &a, int index[, bool set_clear])","Sets or clear bit in a"],gmp_sign:["int gmp_sign(resource a)","Gets the sign of the number"],gmp_sqrt:["resource gmp_sqrt(resource a)","Takes integer part of square root of a"],gmp_sqrtrem:["array gmp_sqrtrem(resource a)","Square root with remainder"],gmp_strval:["string gmp_strval(resource gmpnumber [, int base])","Gets string representation of GMP number"],gmp_sub:["resource gmp_sub(resource a, resource b)","Subtract b from a"],gmp_testbit:["bool gmp_testbit(resource a, int index)","Tests if bit is set in a"],gmp_xor:["resource gmp_xor(resource a, resource b)","Calculates logical exclusive OR of a and b"],gmstrftime:["string gmstrftime(string format [, int timestamp])","Format a GMT/UCT time/date according to locale settings"],grapheme_extract:["string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])","Function to extract a sequence of default grapheme clusters"],grapheme_stripos:["int grapheme_stripos(string haystack, string needle [, int offset ])","Find position of first occurrence of a string within another, ignoring case differences"],grapheme_stristr:["string grapheme_stristr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],grapheme_strlen:["int grapheme_strlen(string str)","Get number of graphemes in a string"],grapheme_strpos:["int grapheme_strpos(string haystack, string needle [, int offset ])","Find position of first occurrence of a string within another"],grapheme_strripos:["int grapheme_strripos(string haystack, string needle [, int offset])","Find position of last occurrence of a string within another, ignoring case"],grapheme_strrpos:["int grapheme_strrpos(string haystack, string needle [, int offset])","Find position of last occurrence of a string within another"],grapheme_strstr:["string grapheme_strstr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],grapheme_substr:["string grapheme_substr(string str, int start [, int length])","Returns part of a string"],gregoriantojd:["int gregoriantojd(int month, int day, int year)","Converts a gregorian calendar date to julian day count"],gzcompress:["string gzcompress(string data [, int level])","Gzip-compress a string"],gzdeflate:["string gzdeflate(string data [, int level])","Gzip-compress a string"],gzencode:["string gzencode(string data [, int level [, int encoding_mode]])","GZ encode a string"],gzfile:["array gzfile(string filename [, int use_include_path])","Read und uncompress entire .gz-file into an array"],gzinflate:["string gzinflate(string data [, int length])","Unzip a gzip-compressed string"],gzopen:["resource gzopen(string filename, string mode [, int use_include_path])","Open a .gz-file and return a .gz-file pointer"],gzuncompress:["string gzuncompress(string data [, int length])","Unzip a gzip-compressed string"],hash:["string hash(string algo, string data[, bool raw_output = false])","Generate a hash of a given input string Returns lowercase hexits by default"],hash_algos:["array hash_algos(void)","Return a list of registered hashing algorithms"],hash_copy:["resource hash_copy(resource context)","Copy hash resource"],hash_file:["string hash_file(string algo, string filename[, bool raw_output = false])","Generate a hash of a given file Returns lowercase hexits by default"],hash_final:["string hash_final(resource context[, bool raw_output=false])","Output resulting digest"],hash_hmac:["string hash_hmac(string algo, string data, string key[, bool raw_output = false])","Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default"],hash_hmac_file:["string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])","Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default"],hash_init:["resource hash_init(string algo[, int options, string key])","Initialize a hashing context"],hash_update:["bool hash_update(resource context, string data)","Pump data into the hashing algorithm"],hash_update_file:["bool hash_update_file(resource context, string filename[, resource context])","Pump data into the hashing algorithm from a file"],hash_update_stream:["int hash_update_stream(resource context, resource handle[, integer length])","Pump data into the hashing algorithm from an open stream"],header:["void header(string header [, bool replace, [int http_response_code]])","Sends a raw HTTP header"],header_remove:["void header_remove([string name])","Removes an HTTP header previously set using header()"],headers_list:["array headers_list(void)","Return list of headers to be sent / already sent"],headers_sent:["bool headers_sent([string &$file [, int &$line]])","Returns true if headers have already been sent, false otherwise"],hebrev:["string hebrev(string str [, int max_chars_per_line])","Converts logical Hebrew text to visual text"],hebrevc:["string hebrevc(string str [, int max_chars_per_line])","Converts logical Hebrew text to visual text with newline conversion"],hexdec:["int hexdec(string hexadecimal_number)","Returns the decimal equivalent of the hexadecimal number"],highlight_file:["bool highlight_file(string file_name [, bool return] )","Syntax highlight a source file"],highlight_string:["bool highlight_string(string string [, bool return] )","Syntax highlight a string or optionally return it"],html_entity_decode:["string html_entity_decode(string string [, int quote_style][, string charset])","Convert all HTML entities to their applicable characters"],htmlentities:["string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])","Convert all applicable characters to HTML entities"],htmlspecialchars:["string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])","Convert special characters to HTML entities"],htmlspecialchars_decode:["string htmlspecialchars_decode(string string [, int quote_style])","Convert special HTML entities back to characters"],http_build_query:["string http_build_query(mixed formdata [, string prefix [, string arg_separator]])","Generates a form-encoded query string from an associative array or object."],hypot:["float hypot(float num1, float num2)","Returns sqrt(num1*num1 + num2*num2)"],ibase_add_user:["bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Add a user to security database"],ibase_affected_rows:["int ibase_affected_rows( [ resource link_identifier ] )","Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement"],ibase_backup:["mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])","Initiates a backup task in the service manager and returns immediately"],ibase_blob_add:["bool ibase_blob_add(resource blob_handle, string data)","Add data into created blob"],ibase_blob_cancel:["bool ibase_blob_cancel(resource blob_handle)","Cancel creating blob"],ibase_blob_close:["string ibase_blob_close(resource blob_handle)","Close blob"],ibase_blob_create:["resource ibase_blob_create([resource link_identifier])","Create blob for adding data"],ibase_blob_echo:["bool ibase_blob_echo([ resource link_identifier, ] string blob_id)","Output blob contents to browser"],ibase_blob_get:["string ibase_blob_get(resource blob_handle, int len)","Get len bytes data from open blob"],ibase_blob_import:["string ibase_blob_import([ resource link_identifier, ] resource file)","Create blob, copy file in it, and close it"],ibase_blob_info:["array ibase_blob_info([ resource link_identifier, ] string blob_id)","Return blob length and other useful info"],ibase_blob_open:["resource ibase_blob_open([ resource link_identifier, ] string blob_id)","Open blob for retrieving data parts"],ibase_close:["bool ibase_close([resource link_identifier])","Close an InterBase connection"],ibase_commit:["bool ibase_commit( resource link_identifier )","Commit transaction"],ibase_commit_ret:["bool ibase_commit_ret( resource link_identifier )","Commit transaction and retain the transaction context"],ibase_connect:["resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])","Open a connection to an InterBase database"],ibase_db_info:["string ibase_db_info(resource service_handle, string db, int action [, int argument])","Request statistics about a database"],ibase_delete_user:["bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Delete a user from security database"],ibase_drop_db:["bool ibase_drop_db([resource link_identifier])","Drop an InterBase database"],ibase_errcode:["int ibase_errcode(void)","Return error code"],ibase_errmsg:["string ibase_errmsg(void)","Return error message"],ibase_execute:["mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])","Execute a previously prepared query"],ibase_fetch_assoc:["array ibase_fetch_assoc(resource result [, int fetch_flags])","Fetch a row from the results of a query"],ibase_fetch_object:["object ibase_fetch_object(resource result [, int fetch_flags])","Fetch a object from the results of a query"],ibase_fetch_row:["array ibase_fetch_row(resource result [, int fetch_flags])","Fetch a row from the results of a query"],ibase_field_info:["array ibase_field_info(resource query_result, int field_number)","Get information about a field"],ibase_free_event_handler:["bool ibase_free_event_handler(resource event)","Frees the event handler set by ibase_set_event_handler()"],ibase_free_query:["bool ibase_free_query(resource query)","Free memory used by a query"],ibase_free_result:["bool ibase_free_result(resource result)","Free the memory used by a result"],ibase_gen_id:["int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])","Increments the named generator and returns its new value"],ibase_maintain_db:["bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])","Execute a maintenance command on the database server"],ibase_modify_user:["bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])","Modify a user in security database"],ibase_name_result:["bool ibase_name_result(resource result, string name)","Assign a name to a result for use with ... WHERE CURRENT OF <name> statements"],ibase_num_fields:["int ibase_num_fields(resource query_result)","Get the number of fields in result"],ibase_num_params:["int ibase_num_params(resource query)","Get the number of params in a prepared query"],ibase_num_rows:["int ibase_num_rows( resource result_identifier )","Return the number of rows that are available in a result"],ibase_param_info:["array ibase_param_info(resource query, int field_number)","Get information about a parameter"],ibase_pconnect:["resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])","Open a persistent connection to an InterBase database"],ibase_prepare:["resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])","Prepare a query for later execution"],ibase_query:["mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])","Execute a query"],ibase_restore:["mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])","Initiates a restore task in the service manager and returns immediately"],ibase_rollback:["bool ibase_rollback( resource link_identifier )","Rollback transaction"],ibase_rollback_ret:["bool ibase_rollback_ret( resource link_identifier )","Rollback transaction and retain the transaction context"],ibase_server_info:["string ibase_server_info(resource service_handle, int action)","Request information about a database server"],ibase_service_attach:["resource ibase_service_attach(string host, string dba_username, string dba_password)","Connect to the service manager"],ibase_service_detach:["bool ibase_service_detach(resource service_handle)","Disconnect from the service manager"],ibase_set_event_handler:["resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])","Register the callback for handling each of the named events"],ibase_trans:["resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])","Start a transaction over one or several databases"],ibase_wait_event:["string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])","Waits for any one of the passed Interbase events to be posted by the database, and returns its name"],iconv:["string iconv(string in_charset, string out_charset, string str)","Returns str converted to the out_charset character set"],iconv_get_encoding:["mixed iconv_get_encoding([string type])","Get internal encoding and output encoding for ob_iconv_handler()"],iconv_mime_decode:["string iconv_mime_decode(string encoded_string [, int mode, string charset])","Decodes a mime header field"],iconv_mime_decode_headers:["array iconv_mime_decode_headers(string headers [, int mode, string charset])","Decodes multiple mime header fields"],iconv_mime_encode:["string iconv_mime_encode(string field_name, string field_value [, array preference])","Composes a mime header field with field_name and field_value in a specified scheme"],iconv_set_encoding:["bool iconv_set_encoding(string type, string charset)","Sets internal encoding and output encoding for ob_iconv_handler()"],iconv_strlen:["int iconv_strlen(string str [, string charset])","Returns the character count of str"],iconv_strpos:["int iconv_strpos(string haystack, string needle [, int offset [, string charset]])","Finds position of first occurrence of needle within part of haystack beginning with offset"],iconv_strrpos:["int iconv_strrpos(string haystack, string needle [, string charset])","Finds position of last occurrence of needle within part of haystack beginning with offset"],iconv_substr:["string iconv_substr(string str, int offset, [int length, string charset])","Returns specified part of a string"],idate:["int idate(string format [, int timestamp])","Format a local time/date as integer"],idn_to_ascii:["int idn_to_ascii(string domain[, int options])","Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC"],idn_to_utf8:["int idn_to_utf8(string domain[, int options])","Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC"],ignore_user_abort:["int ignore_user_abort([string value])","Set whether we want to ignore a user abort event or not"],image2wbmp:["bool image2wbmp(resource im [, string filename [, int threshold]])","Output WBMP image to browser or file"],image_type_to_extension:["string image_type_to_extension(int imagetype [, bool include_dot])","Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype"],image_type_to_mime_type:["string image_type_to_mime_type(int imagetype)","Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype"],imagealphablending:["bool imagealphablending(resource im, bool on)","Turn alpha blending mode on or off for the given image"],imageantialias:["bool imageantialias(resource im, bool on)","Should antialiased functions used or not"],imagearc:["bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)","Draw a partial ellipse"],imagechar:["bool imagechar(resource im, int font, int x, int y, string c, int col)","Draw a character"],imagecharup:["bool imagecharup(resource im, int font, int x, int y, string c, int col)","Draw a character rotated 90 degrees counter-clockwise"],imagecolorallocate:["int imagecolorallocate(resource im, int red, int green, int blue)","Allocate a color for an image"],imagecolorallocatealpha:["int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)","Allocate a color with an alpha level. Works for true color and palette based images"],imagecolorat:["int imagecolorat(resource im, int x, int y)","Get the index of the color of a pixel"],imagecolorclosest:["int imagecolorclosest(resource im, int red, int green, int blue)","Get the index of the closest color to the specified color"],imagecolorclosestalpha:["int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)","Find the closest matching colour with alpha transparency"],imagecolorclosesthwb:["int imagecolorclosesthwb(resource im, int red, int green, int blue)","Get the index of the color which has the hue, white and blackness nearest to the given color"],imagecolordeallocate:["bool imagecolordeallocate(resource im, int index)","De-allocate a color for an image"],imagecolorexact:["int imagecolorexact(resource im, int red, int green, int blue)","Get the index of the specified color"],imagecolorexactalpha:["int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)","Find exact match for colour with transparency"],imagecolormatch:["bool imagecolormatch(resource im1, resource im2)","Makes the colors of the palette version of an image more closely match the true color version"],imagecolorresolve:["int imagecolorresolve(resource im, int red, int green, int blue)","Get the index of the specified color or its closest possible alternative"],imagecolorresolvealpha:["int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)","Resolve/Allocate a colour with an alpha level. Works for true colour and palette based images"],imagecolorset:["void imagecolorset(resource im, int col, int red, int green, int blue)","Set the color for the specified palette index"],imagecolorsforindex:["array imagecolorsforindex(resource im, int col)","Get the colors for an index"],imagecolorstotal:["int imagecolorstotal(resource im)","Find out the number of colors in an image's palette"],imagecolortransparent:["int imagecolortransparent(resource im [, int col])","Define a color as transparent"],imageconvolution:["resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)","Apply a 3x3 convolution matrix, using coefficient div and offset"],imagecopy:["bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)","Copy part of an image"],imagecopymerge:["bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)","Merge one part of an image with another"],imagecopymergegray:["bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)","Merge one part of an image with another"],imagecopyresampled:["bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)","Copy and resize part of an image using resampling to help ensure clarity"],imagecopyresized:["bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)","Copy and resize part of an image"],imagecreate:["resource imagecreate(int x_size, int y_size)","Create a new image"],imagecreatefromgd:["resource imagecreatefromgd(string filename)","Create a new image from GD file or URL"],imagecreatefromgd2:["resource imagecreatefromgd2(string filename)","Create a new image from GD2 file or URL"],imagecreatefromgd2part:["resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)","Create a new image from a given part of GD2 file or URL"],imagecreatefromgif:["resource imagecreatefromgif(string filename)","Create a new image from GIF file or URL"],imagecreatefromjpeg:["resource imagecreatefromjpeg(string filename)","Create a new image from JPEG file or URL"],imagecreatefrompng:["resource imagecreatefrompng(string filename)","Create a new image from PNG file or URL"],imagecreatefromstring:["resource imagecreatefromstring(string image)","Create a new image from the image stream in the string"],imagecreatefromwbmp:["resource imagecreatefromwbmp(string filename)","Create a new image from WBMP file or URL"],imagecreatefromxbm:["resource imagecreatefromxbm(string filename)","Create a new image from XBM file or URL"],imagecreatefromxpm:["resource imagecreatefromxpm(string filename)","Create a new image from XPM file or URL"],imagecreatetruecolor:["resource imagecreatetruecolor(int x_size, int y_size)","Create a new true color image"],imagedashedline:["bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)","Draw a dashed line"],imagedestroy:["bool imagedestroy(resource im)","Destroy an image"],imageellipse:["bool imageellipse(resource im, int cx, int cy, int w, int h, int color)","Draw an ellipse"],imagefill:["bool imagefill(resource im, int x, int y, int col)","Flood fill"],imagefilledarc:["bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)","Draw a filled partial ellipse"],imagefilledellipse:["bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)","Draw an ellipse"],imagefilledpolygon:["bool imagefilledpolygon(resource im, array point, int num_points, int col)","Draw a filled polygon"],imagefilledrectangle:["bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)","Draw a filled rectangle"],imagefilltoborder:["bool imagefilltoborder(resource im, int x, int y, int border, int col)","Flood fill to specific color"],imagefilter:["bool imagefilter(resource src_im, int filtertype, [args] )","Applies Filter an image using a custom angle"],imagefontheight:["int imagefontheight(int font)","Get font height"],imagefontwidth:["int imagefontwidth(int font)","Get font width"],imageftbbox:["array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])","Give the bounding box of a text using fonts via freetype2"],imagefttext:["array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])","Write text to the image using fonts via freetype2"],imagegammacorrect:["bool imagegammacorrect(resource im, float inputgamma, float outputgamma)","Apply a gamma correction to a GD image"],imagegd:["bool imagegd(resource im [, string filename])","Output GD image to browser or file"],imagegd2:["bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])","Output GD2 image to browser or file"],imagegif:["bool imagegif(resource im [, string filename])","Output GIF image to browser or file"],imagegrabscreen:["resource imagegrabscreen()","Grab a screenshot"],imagegrabwindow:["resource imagegrabwindow(int window_handle [, int client_area])","Grab a window or its client area using a windows handle (HWND property in COM instance)"],imageinterlace:["int imageinterlace(resource im [, int interlace])","Enable or disable interlace"],imageistruecolor:["bool imageistruecolor(resource im)","return true if the image uses truecolor"],imagejpeg:["bool imagejpeg(resource im [, string filename [, int quality]])","Output JPEG image to browser or file"],imagelayereffect:["bool imagelayereffect(resource im, int effect)","Set the alpha blending flag to use the bundled libgd layering effects"],imageline:["bool imageline(resource im, int x1, int y1, int x2, int y2, int col)","Draw a line"],imageloadfont:["int imageloadfont(string filename)","Load a new font"],imagepalettecopy:["void imagepalettecopy(resource dst, resource src)","Copy the palette from the src image onto the dst image"],imagepng:["bool imagepng(resource im [, string filename])","Output PNG image to browser or file"],imagepolygon:["bool imagepolygon(resource im, array point, int num_points, int col)","Draw a polygon"],imagepsbbox:["array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])","Return the bounding box needed by a string if rasterized"],imagepscopyfont:["int imagepscopyfont(int font_index)","Make a copy of a font for purposes like extending or reenconding"],imagepsencodefont:["bool imagepsencodefont(resource font_index, string filename)","To change a fonts character encoding vector"],imagepsextendfont:["bool imagepsextendfont(resource font_index, float extend)","Extend or or condense (if extend < 1) a font"],imagepsfreefont:["bool imagepsfreefont(resource font_index)","Free memory used by a font"],imagepsloadfont:["resource imagepsloadfont(string pathname)","Load a new font from specified file"],imagepsslantfont:["bool imagepsslantfont(resource font_index, float slant)","Slant a font"],imagepstext:["array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])","Rasterize a string over an image"],imagerectangle:["bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)","Draw a rectangle"],imagerotate:["resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])","Rotate an image using a custom angle"],imagesavealpha:["bool imagesavealpha(resource im, bool on)","Include alpha channel to a saved image"],imagesetbrush:["bool imagesetbrush(resource image, resource brush)",'Set the brush image to $brush when filling $image with the "IMG_COLOR_BRUSHED" color'],imagesetpixel:["bool imagesetpixel(resource im, int x, int y, int col)","Set a single pixel"],imagesetstyle:["bool imagesetstyle(resource im, array styles)","Set the line drawing styles for use with imageline and IMG_COLOR_STYLED."],imagesetthickness:["bool imagesetthickness(resource im, int thickness)","Set line thickness for drawing lines, ellipses, rectangles, polygons etc."],imagesettile:["bool imagesettile(resource image, resource tile)",'Set the tile image to $tile when filling $image with the "IMG_COLOR_TILED" color'],imagestring:["bool imagestring(resource im, int font, int x, int y, string str, int col)","Draw a string horizontally"],imagestringup:["bool imagestringup(resource im, int font, int x, int y, string str, int col)","Draw a string vertically - rotated 90 degrees counter-clockwise"],imagesx:["int imagesx(resource im)","Get image width"],imagesy:["int imagesy(resource im)","Get image height"],imagetruecolortopalette:["void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)","Convert a true colour image to a palette based image with a number of colours, optionally using dithering."],imagettfbbox:["array imagettfbbox(float size, float angle, string font_file, string text)","Give the bounding box of a text using TrueType fonts"],imagettftext:["array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)","Write text to the image using a TrueType font"],imagetypes:["int imagetypes(void)","Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM"],imagewbmp:["bool imagewbmp(resource im [, string filename, [, int foreground]])","Output WBMP image to browser or file"],imagexbm:["int imagexbm(int im, string filename [, int foreground])","Output XBM image to browser or file"],imap_8bit:["string imap_8bit(string text)","Convert an 8-bit string to a quoted-printable string"],imap_alerts:["array imap_alerts(void)","Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called."],imap_append:["bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])","Append a new message to a specified mailbox"],imap_base64:["string imap_base64(string text)","Decode BASE64 encoded text"],imap_binary:["string imap_binary(string text)","Convert an 8bit string to a base64 string"],imap_body:["string imap_body(resource stream_id, int msg_no [, int options])","Read the message body"],imap_bodystruct:["object imap_bodystruct(resource stream_id, int msg_no, string section)","Read the structure of a specified body section of a specific message"],imap_check:["object imap_check(resource stream_id)","Get mailbox properties"],imap_clearflag_full:["bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])","Clears flags on messages"],imap_close:["bool imap_close(resource stream_id [, int options])","Close an IMAP stream"],imap_createmailbox:["bool imap_createmailbox(resource stream_id, string mailbox)","Create a new mailbox"],imap_delete:["bool imap_delete(resource stream_id, int msg_no [, int options])","Mark a message for deletion"],imap_deletemailbox:["bool imap_deletemailbox(resource stream_id, string mailbox)","Delete a mailbox"],imap_errors:["array imap_errors(void)","Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called."],imap_expunge:["bool imap_expunge(resource stream_id)","Permanently delete all messages marked for deletion"],imap_fetch_overview:["array imap_fetch_overview(resource stream_id, string sequence [, int options])","Read an overview of the information in the headers of the given message sequence"],imap_fetchbody:["string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])","Get a specific body section"],imap_fetchheader:["string imap_fetchheader(resource stream_id, int msg_no [, int options])","Get the full unfiltered header for a message"],imap_fetchstructure:["object imap_fetchstructure(resource stream_id, int msg_no [, int options])","Read the full structure of a message"],imap_gc:["bool imap_gc(resource stream_id, int flags)","This function garbage collects (purges) the cache of entries of a specific type."],imap_get_quota:["array imap_get_quota(resource stream_id, string qroot)","Returns the quota set to the mailbox account qroot"],imap_get_quotaroot:["array imap_get_quotaroot(resource stream_id, string mbox)","Returns the quota set to the mailbox account mbox"],imap_getacl:["array imap_getacl(resource stream_id, string mailbox)","Gets the ACL for a given mailbox"],imap_getmailboxes:["array imap_getmailboxes(resource stream_id, string ref, string pattern)","Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter"],imap_getsubscribed:["array imap_getsubscribed(resource stream_id, string ref, string pattern)","Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()"],imap_headerinfo:["object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])","Read the headers of the message"],imap_headers:["array imap_headers(resource stream_id)","Returns headers for all messages in a mailbox"],imap_last_error:["string imap_last_error(void)","Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call."],imap_list:["array imap_list(resource stream_id, string ref, string pattern)","Read the list of mailboxes"],imap_listscan:["array imap_listscan(resource stream_id, string ref, string pattern, string content)","Read list of mailboxes containing a certain string"],imap_lsub:["array imap_lsub(resource stream_id, string ref, string pattern)","Return a list of subscribed mailboxes"],imap_mail:["bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])","Send an email message"],imap_mail_compose:["string imap_mail_compose(array envelope, array body)","Create a MIME message based on given envelope and body sections"],imap_mail_copy:["bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])","Copy specified message to a mailbox"],imap_mail_move:["bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])","Move specified message to a mailbox"],imap_mailboxmsginfo:["object imap_mailboxmsginfo(resource stream_id)","Returns info about the current mailbox"],imap_mime_header_decode:["array imap_mime_header_decode(string str)","Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'"],imap_msgno:["int imap_msgno(resource stream_id, int unique_msg_id)","Get the sequence number associated with a UID"],imap_mutf7_to_utf8:["string imap_mutf7_to_utf8(string in)","Decode a modified UTF-7 string to UTF-8"],imap_num_msg:["int imap_num_msg(resource stream_id)","Gives the number of messages in the current mailbox"],imap_num_recent:["int imap_num_recent(resource stream_id)","Gives the number of recent messages in current mailbox"],imap_open:["resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])","Open an IMAP stream to a mailbox"],imap_ping:["bool imap_ping(resource stream_id)","Check if the IMAP stream is still active"],imap_qprint:["string imap_qprint(string text)","Convert a quoted-printable string to an 8-bit string"],imap_renamemailbox:["bool imap_renamemailbox(resource stream_id, string old_name, string new_name)","Rename a mailbox"],imap_reopen:["bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])","Reopen an IMAP stream to a new mailbox"],imap_rfc822_parse_adrlist:["array imap_rfc822_parse_adrlist(string address_string, string default_host)","Parses an address string"],imap_rfc822_parse_headers:["object imap_rfc822_parse_headers(string headers [, string default_host])","Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()"],imap_rfc822_write_address:["string imap_rfc822_write_address(string mailbox, string host, string personal)","Returns a properly formatted email address given the mailbox, host, and personal info"],imap_savebody:['bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = ""[, int options = 0]])',"Save a specific body section to a file"],imap_search:["array imap_search(resource stream_id, string criteria [, int options [, string charset]])","Return a list of messages matching the given criteria"],imap_set_quota:["bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)","Will set the quota for qroot mailbox"],imap_setacl:["bool imap_setacl(resource stream_id, string mailbox, string id, string rights)","Sets the ACL for a given mailbox"],imap_setflag_full:["bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])","Sets flags on messages"],imap_sort:["array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])","Sort an array of message headers, optionally including only messages that meet specified criteria."],imap_status:["object imap_status(resource stream_id, string mailbox, int options)","Get status info from a mailbox"],imap_subscribe:["bool imap_subscribe(resource stream_id, string mailbox)","Subscribe to a mailbox"],imap_thread:["array imap_thread(resource stream_id [, int options])","Return threaded by REFERENCES tree"],imap_timeout:["mixed imap_timeout(int timeout_type [, int timeout])","Set or fetch imap timeout"],imap_uid:["int imap_uid(resource stream_id, int msg_no)","Get the unique message id associated with a standard sequential message number"],imap_undelete:["bool imap_undelete(resource stream_id, int msg_no [, int flags])","Remove the delete flag from a message"],imap_unsubscribe:["bool imap_unsubscribe(resource stream_id, string mailbox)","Unsubscribe from a mailbox"],imap_utf7_decode:["string imap_utf7_decode(string buf)","Decode a modified UTF-7 string"],imap_utf7_encode:["string imap_utf7_encode(string buf)","Encode a string in modified UTF-7"],imap_utf8:["string imap_utf8(string mime_encoded_text)","Convert a mime-encoded text to UTF-8"],imap_utf8_to_mutf7:["string imap_utf8_to_mutf7(string in)","Encode a UTF-8 string to modified UTF-7"],implode:["string implode([string glue,] array pieces)","Joins array elements placing glue string between items and return one string"],import_request_variables:["bool import_request_variables(string types [, string prefix])","Import GET/POST/Cookie variables into the global scope"],in_array:["bool in_array(mixed needle, array haystack [, bool strict])","Checks if the given value exists in the array"],include:["bool include(string path)","Includes and evaluates the specified file"],include_once:["bool include_once(string path)","Includes and evaluates the specified file"],inet_ntop:["string inet_ntop(string in_addr)","Converts a packed inet address to a human readable IP address string"],inet_pton:["string inet_pton(string ip_address)","Converts a human readable IP address to a packed binary string"],ini_get:["string ini_get(string varname)","Get a configuration option"],ini_get_all:["array ini_get_all([string extension[, bool details = true]])","Get all configuration options"],ini_restore:["void ini_restore(string varname)","Restore the value of a configuration option specified by varname"],ini_set:["string ini_set(string varname, string newvalue)","Set a configuration option, returns false on error and the old value of the configuration option on success"],interface_exists:["bool interface_exists(string classname [, bool autoload])","Checks if the class exists"],intl_error_name:["string intl_error_name()","* Return a string for a given error code. * The string will be the same as the name of the error code constant."],intl_get_error_code:["int intl_get_error_code()","* Get code of the last occured error."],intl_get_error_message:["string intl_get_error_message()","* Get text description of the last occured error."],intl_is_failure:["bool intl_is_failure()","* Check whether the given error code indicates a failure. * Returns true if it does, and false if the code * indicates success or a warning."],intval:["int intval(mixed var [, int base])","Get the integer value of a variable using the optional base for the conversion"],ip2long:["int ip2long(string ip_address)","Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address"],iptcembed:["array iptcembed(string iptcdata, string jpeg_file_name [, int spool])","Embed binary IPTC data into a JPEG image."],iptcparse:["array iptcparse(string iptcdata)","Parse binary IPTC-data into associative array"],is_a:["bool is_a(object object, string class_name)","Returns true if the object is of this class or has this class as one of its parents"],is_array:["bool is_array(mixed var)","Returns true if variable is an array"],is_bool:["bool is_bool(mixed var)","Returns true if variable is a boolean"],is_callable:["bool is_callable(mixed var [, bool syntax_only [, string callable_name]])","Returns true if var is callable."],is_dir:["bool is_dir(string filename)","Returns true if file is directory"],is_executable:["bool is_executable(string filename)","Returns true if file is executable"],is_file:["bool is_file(string filename)","Returns true if file is a regular file"],is_finite:["bool is_finite(float val)","Returns whether argument is finite"],is_float:["bool is_float(mixed var)","Returns true if variable is float point"],is_infinite:["bool is_infinite(float val)","Returns whether argument is infinite"],is_link:["bool is_link(string filename)","Returns true if file is symbolic link"],is_long:["bool is_long(mixed var)","Returns true if variable is a long (integer)"],is_nan:["bool is_nan(float val)","Returns whether argument is not a number"],is_null:["bool is_null(mixed var)","Returns true if variable is null"],is_numeric:["bool is_numeric(mixed value)","Returns true if value is a number or a numeric string"],is_object:["bool is_object(mixed var)","Returns true if variable is an object"],is_readable:["bool is_readable(string filename)","Returns true if file can be read"],is_resource:["bool is_resource(mixed var)","Returns true if variable is a resource"],is_scalar:["bool is_scalar(mixed value)","Returns true if value is a scalar"],is_string:["bool is_string(mixed var)","Returns true if variable is a string"],is_subclass_of:["bool is_subclass_of(object object, string class_name)","Returns true if the object has this class as one of its parents"],is_uploaded_file:["bool is_uploaded_file(string path)","Check if file was created by rfc1867 upload"],is_writable:["bool is_writable(string filename)","Returns true if file can be written"],isset:["bool isset(mixed var [, mixed var])","Determine whether a variable is set"],iterator_apply:["int iterator_apply(Traversable it, mixed function [, mixed params])","Calls a function for every element in an iterator"],iterator_count:["int iterator_count(Traversable it)","Count the elements in an iterator"],iterator_to_array:["array iterator_to_array(Traversable it [, bool use_keys = true])","Copy the iterator into an array"],jddayofweek:["mixed jddayofweek(int juliandaycount [, int mode])","Returns name or number of day of week from julian day count"],jdmonthname:["string jdmonthname(int juliandaycount, int mode)","Returns name of month for julian day count"],jdtofrench:["string jdtofrench(int juliandaycount)","Converts a julian day count to a french republic calendar date"],jdtogregorian:["string jdtogregorian(int juliandaycount)","Converts a julian day count to a gregorian calendar date"],jdtojewish:["string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])","Converts a julian day count to a jewish calendar date"],jdtojulian:["string jdtojulian(int juliandaycount)","Convert a julian day count to a julian calendar date"],jdtounix:["int jdtounix(int jday)","Convert Julian Day to UNIX timestamp"],jewishtojd:["int jewishtojd(int month, int day, int year)","Converts a jewish calendar date to a julian day count"],join:["string join(array src, string glue)","An alias for implode"],jpeg2wbmp:["bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)","Convert JPEG image to WBMP image"],json_decode:["mixed json_decode(string json [, bool assoc [, long depth]])","Decodes the JSON representation into a PHP value"],json_encode:["string json_encode(mixed data [, int options])","Returns the JSON representation of a value"],json_last_error:["int json_last_error()","Returns the error code of the last json_decode()."],juliantojd:["int juliantojd(int month, int day, int year)","Converts a julian calendar date to julian day count"],key:["mixed key(array array_arg)","Return the key of the element currently pointed to by the internal array pointer"],krsort:["bool krsort(array &array_arg [, int sort_flags])","Sort an array by key value in reverse order"],ksort:["bool ksort(array &array_arg [, int sort_flags])","Sort an array by key"],lcfirst:["string lcfirst(string str)","Make a string's first character lowercase"],lcg_value:["float lcg_value()","Returns a value from the combined linear congruential generator"],lchgrp:["bool lchgrp(string filename, mixed group)","Change symlink group"],ldap_8859_to_t61:["string ldap_8859_to_t61(string value)","Translate 8859 characters to t61 characters"],ldap_add:["bool ldap_add(resource link, string dn, array entry)","Add entries to LDAP directory"],ldap_bind:["bool ldap_bind(resource link [, string dn [, string password]])","Bind to LDAP directory"],ldap_compare:["bool ldap_compare(resource link, string dn, string attr, string value)","Determine if an entry has a specific value for one of its attributes"],ldap_connect:["resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])","Connect to an LDAP server"],ldap_count_entries:["int ldap_count_entries(resource link, resource result)","Count the number of entries in a search result"],ldap_delete:["bool ldap_delete(resource link, string dn)","Delete an entry from a directory"],ldap_dn2ufn:["string ldap_dn2ufn(string dn)","Convert DN to User Friendly Naming format"],ldap_err2str:["string ldap_err2str(int errno)","Convert error number to error string"],ldap_errno:["int ldap_errno(resource link)","Get the current ldap error number"],ldap_error:["string ldap_error(resource link)","Get the current ldap error string"],ldap_explode_dn:["array ldap_explode_dn(string dn, int with_attrib)","Splits DN into its component parts"],ldap_first_attribute:["string ldap_first_attribute(resource link, resource result_entry)","Return first attribute"],ldap_first_entry:["resource ldap_first_entry(resource link, resource result)","Return first result id"],ldap_first_reference:["resource ldap_first_reference(resource link, resource result)","Return first reference"],ldap_free_result:["bool ldap_free_result(resource result)","Free result memory"],ldap_get_attributes:["array ldap_get_attributes(resource link, resource result_entry)","Get attributes from a search result entry"],ldap_get_dn:["string ldap_get_dn(resource link, resource result_entry)","Get the DN of a result entry"],ldap_get_entries:["array ldap_get_entries(resource link, resource result)","Get all result entries"],ldap_get_option:["bool ldap_get_option(resource link, int option, mixed retval)","Get the current value of various session-wide parameters"],ldap_get_values_len:["array ldap_get_values_len(resource link, resource result_entry, string attribute)","Get all values with lengths from a result entry"],ldap_list:["resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Single-level search"],ldap_mod_add:["bool ldap_mod_add(resource link, string dn, array entry)","Add attribute values to current"],ldap_mod_del:["bool ldap_mod_del(resource link, string dn, array entry)","Delete attribute values"],ldap_mod_replace:["bool ldap_mod_replace(resource link, string dn, array entry)","Replace attribute values with new ones"],ldap_next_attribute:["string ldap_next_attribute(resource link, resource result_entry)","Get the next attribute in result"],ldap_next_entry:["resource ldap_next_entry(resource link, resource result_entry)","Get next result entry"],ldap_next_reference:["resource ldap_next_reference(resource link, resource reference_entry)","Get next reference"],ldap_parse_reference:["bool ldap_parse_reference(resource link, resource reference_entry, array referrals)","Extract information from reference entry"],ldap_parse_result:["bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)","Extract information from result"],ldap_read:["resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Read an entry"],ldap_rename:["bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);","Modify the name of an entry"],ldap_sasl_bind:["bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])","Bind to LDAP directory using SASL"],ldap_search:["resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])","Search LDAP tree under base_dn"],ldap_set_option:["bool ldap_set_option(resource link, int option, mixed newval)","Set the value of various session-wide parameters"],ldap_set_rebind_proc:["bool ldap_set_rebind_proc(resource link, string callback)","Set a callback function to do re-binds on referral chasing."],ldap_sort:["bool ldap_sort(resource link, resource result, string sortfilter)","Sort LDAP result entries"],ldap_start_tls:["bool ldap_start_tls(resource link)","Start TLS"],ldap_t61_to_8859:["string ldap_t61_to_8859(string value)","Translate t61 characters to 8859 characters"],ldap_unbind:["bool ldap_unbind(resource link)","Unbind from LDAP directory"],leak:["void leak(int num_bytes=3)","Cause an intentional memory leak, for testing/debugging purposes"],levenshtein:["int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])","Calculate Levenshtein distance between two strings"],libxml_clear_errors:["void libxml_clear_errors()","Clear last error from libxml"],libxml_disable_entity_loader:["bool libxml_disable_entity_loader([boolean disable])","Disable/Enable ability to load external entities"],libxml_get_errors:["object libxml_get_errors()","Retrieve array of errors"],libxml_get_last_error:["object libxml_get_last_error()","Retrieve last error from libxml"],libxml_set_streams_context:["void libxml_set_streams_context(resource streams_context)","Set the streams context for the next libxml document load or write"],libxml_use_internal_errors:["bool libxml_use_internal_errors([boolean use_errors])","Disable libxml errors and allow user to fetch error information as needed"],link:["int link(string target, string link)","Create a hard link"],linkinfo:["int linkinfo(string filename)","Returns the st_dev field of the UNIX C stat structure describing the link"],litespeed_request_headers:["array litespeed_request_headers(void)","Fetch all HTTP request headers"],litespeed_response_headers:["array litespeed_response_headers(void)","Fetch all HTTP response headers"],locale_accept_from_http:["string locale_accept_from_http(string $http_accept)",null],locale_canonicalize:["static string locale_canonicalize(Locale $loc, string $locale)","* @param string $locale The locale string to canonicalize"],locale_filter_matches:["boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])","* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm"],locale_get_all_variants:["static array locale_get_all_variants($locale)","* gets an array containing the list of variants, or null"],locale_get_default:["static string locale_get_default( )","Get default locale"],locale_get_keywords:["static array locale_get_keywords(string $locale) {","* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!)"],locale_get_primary_language:["static string locale_get_primary_language($locale)","* gets the primary language for the $locale"],locale_get_region:["static string locale_get_region($locale)","* gets the region for the $locale"],locale_get_script:["static string locale_get_script($locale)","* gets the script for the $locale"],locale_lookup:["string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])","* Searchs the items in $langtag for the best match to the language * range"],locale_set_default:["static string locale_set_default( string $locale )","Set default locale"],localeconv:["array localeconv(void)","Returns numeric formatting information based on the current locale"],localtime:["array localtime([int timestamp [, bool associative_array]])","Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array"],log:["float log(float number, [float base])","Returns the natural logarithm of the number, or the base log if base is specified"],log10:["float log10(float number)","Returns the base-10 logarithm of the number"],log1p:["float log1p(float number)","Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero"],long2ip:["string long2ip(int proper_address)","Converts an (IPv4) Internet network address into a string in Internet standard dotted format"],lstat:["array lstat(string filename)","Give information about a file or symbolic link"],ltrim:["string ltrim(string str [, string character_mask])","Strips whitespace from the beginning of a string"],mail:["int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])","Send an email message"],max:["mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])","Return the highest value in an array or a series of arguments"],mb_check_encoding:["bool mb_check_encoding([string var[, string encoding]])","Check if the string is valid for the specified encoding"],mb_convert_case:["string mb_convert_case(string sourcestring, int mode [, string encoding])","Returns a case-folded version of sourcestring"],mb_convert_encoding:["string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])","Returns converted string in desired encoding"],mb_convert_kana:["string mb_convert_kana(string str [, string option] [, string encoding])","Conversion between full-width character and half-width character (Japanese)"],mb_convert_variables:["string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])","Converts the string resource in variables to desired encoding"],mb_decode_mimeheader:["string mb_decode_mimeheader(string string)",'Decodes the MIME "encoded-word" in the string'],mb_decode_numericentity:["string mb_decode_numericentity(string string, array convmap [, string encoding])","Converts HTML numeric entities to character code"],mb_detect_encoding:["string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])","Encodings of the given string is returned (as a string)"],mb_detect_order:["bool|array mb_detect_order([mixed encoding-list])","Sets the current detect_order or Return the current detect_order as a array"],mb_encode_mimeheader:["string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])",'Converts the string to MIME "encoded-word" in the format of =?charset?(B|Q)?encoded_string?='],mb_encode_numericentity:["string mb_encode_numericentity(string string, array convmap [, string encoding])","Converts specified characters to HTML numeric entities"],mb_encoding_aliases:["array mb_encoding_aliases(string encoding)","Returns an array of the aliases of a given encoding name"],mb_ereg:["int mb_ereg(string pattern, string string [, array registers])","Regular expression match for multibyte string"],mb_ereg_match:["bool mb_ereg_match(string pattern, string string [,string option])","Regular expression match for multibyte string"],mb_ereg_replace:["string mb_ereg_replace(string pattern, string replacement, string string [, string option])","Replace regular expression for multibyte string"],mb_ereg_search:["bool mb_ereg_search([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_getpos:["int mb_ereg_search_getpos(void)","Get search start position"],mb_ereg_search_getregs:["array mb_ereg_search_getregs(void)","Get matched substring of the last time"],mb_ereg_search_init:["bool mb_ereg_search_init(string string [, string pattern[, string option]])","Initialize string and regular expression for search."],mb_ereg_search_pos:["array mb_ereg_search_pos([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_regs:["array mb_ereg_search_regs([string pattern[, string option]])","Regular expression search for multibyte string"],mb_ereg_search_setpos:["bool mb_ereg_search_setpos(int position)","Set search start position"],mb_eregi:["int mb_eregi(string pattern, string string [, array registers])","Case-insensitive regular expression match for multibyte string"],mb_eregi_replace:["string mb_eregi_replace(string pattern, string replacement, string string)","Case insensitive replace regular expression for multibyte string"],mb_get_info:["mixed mb_get_info([string type])","Returns the current settings of mbstring"],mb_http_input:["mixed mb_http_input([string type])","Returns the input encoding"],mb_http_output:["string mb_http_output([string encoding])","Sets the current output_encoding or returns the current output_encoding as a string"],mb_internal_encoding:["string mb_internal_encoding([string encoding])","Sets the current internal encoding or Returns the current internal encoding as a string"],mb_language:["string mb_language([string language])","Sets the current language or Returns the current language as a string"],mb_list_encodings:["mixed mb_list_encodings()","Returns an array of all supported entity encodings"],mb_output_handler:["string mb_output_handler(string contents, int status)","Returns string in output buffer converted to the http_output encoding"],mb_parse_str:["bool mb_parse_str(string encoded_string [, array result])","Parses GET/POST/COOKIE data and sets global variables"],mb_preferred_mime_name:["string mb_preferred_mime_name(string encoding)","Return the preferred MIME name (charset) as a string"],mb_regex_encoding:["string mb_regex_encoding([string encoding])","Returns the current encoding for regex as a string."],mb_regex_set_options:["string mb_regex_set_options([string options])","Set or get the default options for mbregex functions"],mb_send_mail:["int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])","* Sends an email message with MIME scheme"],mb_split:["array mb_split(string pattern, string string [, int limit])","split multibyte string into array by regular expression"],mb_strcut:["string mb_strcut(string str, int start [, int length [, string encoding]])","Returns part of a string"],mb_strimwidth:["string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])","Trim the string in terminal width"],mb_stripos:["int mb_stripos(string haystack, string needle [, int offset [, string encoding]])","Finds position of first occurrence of a string within another, case insensitive"],mb_stristr:["string mb_stristr(string haystack, string needle[, bool part[, string encoding]])","Finds first occurrence of a string within another, case insensitive"],mb_strlen:["int mb_strlen(string str [, string encoding])","Get character numbers of a string"],mb_strpos:["int mb_strpos(string haystack, string needle [, int offset [, string encoding]])","Find position of first occurrence of a string within another"],mb_strrchr:["string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])","Finds the last occurrence of a character in a string within another"],mb_strrichr:["string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])","Finds the last occurrence of a character in a string within another, case insensitive"],mb_strripos:["int mb_strripos(string haystack, string needle [, int offset [, string encoding]])","Finds position of last occurrence of a string within another, case insensitive"],mb_strrpos:["int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])","Find position of last occurrence of a string within another"],mb_strstr:["string mb_strstr(string haystack, string needle[, bool part[, string encoding]])","Finds first occurrence of a string within another"],mb_strtolower:["string mb_strtolower(string sourcestring [, string encoding])","* Returns a lowercased version of sourcestring"],mb_strtoupper:["string mb_strtoupper(string sourcestring [, string encoding])","* Returns a uppercased version of sourcestring"],mb_strwidth:["int mb_strwidth(string str [, string encoding])","Gets terminal width of a string"],mb_substitute_character:["mixed mb_substitute_character([mixed substchar])","Sets the current substitute_character or returns the current substitute_character"],mb_substr:["string mb_substr(string str, int start [, int length [, string encoding]])","Returns part of a string"],mb_substr_count:["int mb_substr_count(string haystack, string needle [, string encoding])","Count the number of substring occurrences"],mcrypt_cbc:["string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)","CBC crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_cfb:["string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)","CFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_create_iv:["string mcrypt_create_iv(int size, int source)","Create an initialization vector (IV)"],mcrypt_decrypt:["string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_ecb:["string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)","ECB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_enc_get_algorithms_name:["string mcrypt_enc_get_algorithms_name(resource td)","Returns the name of the algorithm specified by the descriptor td"],mcrypt_enc_get_block_size:["int mcrypt_enc_get_block_size(resource td)","Returns the block size of the cipher specified by the descriptor td"],mcrypt_enc_get_iv_size:["int mcrypt_enc_get_iv_size(resource td)","Returns the size of the IV in bytes of the algorithm specified by the descriptor td"],mcrypt_enc_get_key_size:["int mcrypt_enc_get_key_size(resource td)","Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td"],mcrypt_enc_get_modes_name:["string mcrypt_enc_get_modes_name(resource td)","Returns the name of the mode specified by the descriptor td"],mcrypt_enc_get_supported_key_sizes:["array mcrypt_enc_get_supported_key_sizes(resource td)","This function decrypts the crypttext"],mcrypt_enc_is_block_algorithm:["bool mcrypt_enc_is_block_algorithm(resource td)","Returns TRUE if the alrogithm is a block algorithms"],mcrypt_enc_is_block_algorithm_mode:["bool mcrypt_enc_is_block_algorithm_mode(resource td)","Returns TRUE if the mode is for use with block algorithms"],mcrypt_enc_is_block_mode:["bool mcrypt_enc_is_block_mode(resource td)","Returns TRUE if the mode outputs blocks"],mcrypt_enc_self_test:["int mcrypt_enc_self_test(resource td)","This function runs the self test on the algorithm specified by the descriptor td"],mcrypt_encrypt:["string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],mcrypt_generic:["string mcrypt_generic(resource td, string data)","This function encrypts the plaintext"],mcrypt_generic_deinit:["bool mcrypt_generic_deinit(resource td)","This function terminates encrypt specified by the descriptor td"],mcrypt_generic_init:["int mcrypt_generic_init(resource td, string key, string iv)","This function initializes all buffers for the specific module"],mcrypt_get_block_size:["int mcrypt_get_block_size(string cipher, string module)","Get the key size of cipher"],mcrypt_get_cipher_name:["string mcrypt_get_cipher_name(string cipher)","Get the key size of cipher"],mcrypt_get_iv_size:["int mcrypt_get_iv_size(string cipher, string module)","Get the IV size of cipher (Usually the same as the blocksize)"],mcrypt_get_key_size:["int mcrypt_get_key_size(string cipher, string module)","Get the key size of cipher"],mcrypt_list_algorithms:["array mcrypt_list_algorithms([string lib_dir])",'List all algorithms in "module_dir"'],mcrypt_list_modes:["array mcrypt_list_modes([string lib_dir])",'List all modes "module_dir"'],mcrypt_module_close:["bool mcrypt_module_close(resource td)","Free the descriptor td"],mcrypt_module_get_algo_block_size:["int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])","Returns the block size of the algorithm"],mcrypt_module_get_algo_key_size:["int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])","Returns the maximum supported key size of the algorithm"],mcrypt_module_get_supported_key_sizes:["array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])","This function decrypts the crypttext"],mcrypt_module_is_block_algorithm:["bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])","Returns TRUE if the algorithm is a block algorithm"],mcrypt_module_is_block_algorithm_mode:["bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])","Returns TRUE if the mode is for use with block algorithms"],mcrypt_module_is_block_mode:["bool mcrypt_module_is_block_mode(string mode [, string lib_dir])","Returns TRUE if the mode outputs blocks of bytes"],mcrypt_module_open:["resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)","Opens the module of the algorithm and the mode to be used"],mcrypt_module_self_test:["bool mcrypt_module_self_test(string algorithm [, string lib_dir])",'Does a self test of the module "module"'],mcrypt_ofb:["string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)","OFB crypt/decrypt data using key key with cipher cipher starting with iv"],md5:["string md5(string str, [ bool raw_output])","Calculate the md5 hash of a string"],md5_file:["string md5_file(string filename [, bool raw_output])","Calculate the md5 hash of given filename"],mdecrypt_generic:["string mdecrypt_generic(resource td, string data)","This function decrypts the plaintext"],memory_get_peak_usage:["int memory_get_peak_usage([real_usage])","Returns the peak allocated by PHP memory"],memory_get_usage:["int memory_get_usage([real_usage])","Returns the allocated by PHP memory"],metaphone:["string metaphone(string text[, int phones])","Break english phrases down into their phonemes"],method_exists:["bool method_exists(object object, string method)","Checks if the class method exists"],mhash:["string mhash(int hash, string data [, string key])","Hash data with hash"],mhash_count:["int mhash_count(void)","Gets the number of available hashes"],mhash_get_block_size:["int mhash_get_block_size(int hash)","Gets the block size of hash"],mhash_get_hash_name:["string mhash_get_hash_name(int hash)","Gets the name of hash"],mhash_keygen_s2k:["string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)","Generates a key using hash functions"],microtime:["mixed microtime([bool get_as_float])","Returns either a string or a float containing the current time in seconds and microseconds"],mime_content_type:["string mime_content_type(string filename|resource stream)","Return content-type for file"],min:["mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])","Return the lowest value in an array or a series of arguments"],mkdir:["bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])","Create a directory"],mktime:["int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])","Get UNIX timestamp for a date"],money_format:["string money_format(string format , float value)","Convert monetary value(s) to string"],move_uploaded_file:["bool move_uploaded_file(string path, string new_path)","Move a file if and only if it was created by an upload"],msg_get_queue:["resource msg_get_queue(int key [, int perms])","Attach to a message queue"],msg_queue_exists:["bool msg_queue_exists(int key)","Check wether a message queue exists"],msg_receive:["mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])","Send a message of type msgtype (must be > 0) to a message queue"],msg_remove_queue:["bool msg_remove_queue(resource queue)","Destroy the queue"],msg_send:["bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])","Send a message of type msgtype (must be > 0) to a message queue"],msg_set_queue:["bool msg_set_queue(resource queue, array data)","Set information for a message queue"],msg_stat_queue:["array msg_stat_queue(resource queue)","Returns information about a message queue"],msgfmt_create:["MessageFormatter msgfmt_create( string $locale, string $pattern )","* Create formatter."],msgfmt_format:["mixed msgfmt_format( MessageFormatter $nf, array $args )","* Format a message."],msgfmt_format_message:["mixed msgfmt_format_message( string $locale, string $pattern, array $args )","* Format a message."],msgfmt_get_error_code:["int msgfmt_get_error_code( MessageFormatter $nf )","* Get formatter's last error code."],msgfmt_get_error_message:["string msgfmt_get_error_message( MessageFormatter $coll )","* Get text description for formatter's last error code."],msgfmt_get_locale:["string msgfmt_get_locale(MessageFormatter $mf)","* Get formatter locale."],msgfmt_get_pattern:["string msgfmt_get_pattern( MessageFormatter $mf )","* Get formatter pattern."],msgfmt_parse:["array msgfmt_parse( MessageFormatter $nf, string $source )","* Parse a message."],msgfmt_set_pattern:["bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )","* Set formatter pattern."],mssql_bind:["bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])","Adds a parameter to a stored procedure or a remote stored procedure"],mssql_close:["bool mssql_close([resource conn_id])","Closes a connection to a MS-SQL server"],mssql_connect:["int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])","Establishes a connection to a MS-SQL server"],mssql_data_seek:["bool mssql_data_seek(resource result_id, int offset)","Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number"],mssql_execute:["mixed mssql_execute(resource stmt [, bool skip_results = false])","Executes a stored procedure on a MS-SQL server database"],mssql_fetch_array:["array mssql_fetch_array(resource result_id [, int result_type])","Returns an associative array of the current row in the result set specified by result_id"],mssql_fetch_assoc:["array mssql_fetch_assoc(resource result_id)","Returns an associative array of the current row in the result set specified by result_id"],mssql_fetch_batch:["int mssql_fetch_batch(resource result_index)","Returns the next batch of records"],mssql_fetch_field:["object mssql_fetch_field(resource result_id [, int offset])","Gets information about certain fields in a query result"],mssql_fetch_object:["object mssql_fetch_object(resource result_id)","Returns a pseudo-object of the current row in the result set specified by result_id"],mssql_fetch_row:["array mssql_fetch_row(resource result_id)","Returns an array of the current row in the result set specified by result_id"],mssql_field_length:["int mssql_field_length(resource result_id [, int offset])","Get the length of a MS-SQL field"],mssql_field_name:["string mssql_field_name(resource result_id [, int offset])","Returns the name of the field given by offset in the result set given by result_id"],mssql_field_seek:["bool mssql_field_seek(resource result_id, int offset)","Seeks to the specified field offset"],mssql_field_type:["string mssql_field_type(resource result_id [, int offset])","Returns the type of a field"],mssql_free_result:["bool mssql_free_result(resource result_index)","Free a MS-SQL result index"],mssql_free_statement:["bool mssql_free_statement(resource result_index)","Free a MS-SQL statement index"],mssql_get_last_message:["string mssql_get_last_message(void)","Gets the last message from the MS-SQL server"],mssql_guid_string:["string mssql_guid_string(string binary [,bool short_format])","Converts a 16 byte binary GUID to a string"],mssql_init:["int mssql_init(string sp_name [, resource conn_id])","Initializes a stored procedure or a remote stored procedure"],mssql_min_error_severity:["void mssql_min_error_severity(int severity)","Sets the lower error severity"],mssql_min_message_severity:["void mssql_min_message_severity(int severity)","Sets the lower message severity"],mssql_next_result:["bool mssql_next_result(resource result_id)","Move the internal result pointer to the next result"],mssql_num_fields:["int mssql_num_fields(resource mssql_result_index)","Returns the number of fields fetched in from the result id specified"],mssql_num_rows:["int mssql_num_rows(resource mssql_result_index)","Returns the number of rows fetched in from the result id specified"],mssql_pconnect:["int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])","Establishes a persistent connection to a MS-SQL server"],mssql_query:["resource mssql_query(string query [, resource conn_id [, int batch_size]])","Perform an SQL query on a MS-SQL server database"],mssql_result:["string mssql_result(resource result_id, int row, mixed field)","Returns the contents of one cell from a MS-SQL result set"],mssql_rows_affected:["int mssql_rows_affected(resource conn_id)","Returns the number of records affected by the query"],mssql_select_db:["bool mssql_select_db(string database_name [, resource conn_id])","Select a MS-SQL database"],mt_getrandmax:["int mt_getrandmax(void)","Returns the maximum value a random number from Mersenne Twister can have"],mt_rand:["int mt_rand([int min, int max])","Returns a random number from Mersenne Twister"],mt_srand:["void mt_srand([int seed])","Seeds Mersenne Twister random number generator"],mysql_affected_rows:["int mysql_affected_rows([int link_identifier])","Gets number of affected rows in previous MySQL operation"],mysql_client_encoding:["string mysql_client_encoding([int link_identifier])","Returns the default character set for the current connection"],mysql_close:["bool mysql_close([int link_identifier])","Close a MySQL connection"],mysql_connect:["resource mysql_connect([string hostname[:port][:/path/to/socket] [, string username [, string password [, bool new [, int flags]]]]])","Opens a connection to a MySQL Server"],mysql_create_db:["bool mysql_create_db(string database_name [, int link_identifier])","Create a MySQL database"],mysql_data_seek:["bool mysql_data_seek(resource result, int row_number)","Move internal result pointer"],mysql_db_query:["resource mysql_db_query(string database_name, string query [, int link_identifier])","Sends an SQL query to MySQL"],mysql_drop_db:["bool mysql_drop_db(string database_name [, int link_identifier])","Drops (delete) a MySQL database"],mysql_errno:["int mysql_errno([int link_identifier])","Returns the number of the error message from previous MySQL operation"],mysql_error:["string mysql_error([int link_identifier])","Returns the text of the error message from previous MySQL operation"],mysql_escape_string:["string mysql_escape_string(string to_be_escaped)","Escape string for mysql query"],mysql_fetch_array:["array mysql_fetch_array(resource result [, int result_type])","Fetch a result row as an array (associative, numeric or both)"],mysql_fetch_assoc:["array mysql_fetch_assoc(resource result)","Fetch a result row as an associative array"],mysql_fetch_field:["object mysql_fetch_field(resource result [, int field_offset])","Gets column information from a result and return as an object"],mysql_fetch_lengths:["array mysql_fetch_lengths(resource result)","Gets max data size of each column in a result"],mysql_fetch_object:["object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])","Fetch a result row as an object"],mysql_fetch_row:["array mysql_fetch_row(resource result)","Gets a result row as an enumerated array"],mysql_field_flags:["string mysql_field_flags(resource result, int field_offset)","Gets the flags associated with the specified field in a result"],mysql_field_len:["int mysql_field_len(resource result, int field_offset)","Returns the length of the specified field"],mysql_field_name:["string mysql_field_name(resource result, int field_index)","Gets the name of the specified field in a result"],mysql_field_seek:["bool mysql_field_seek(resource result, int field_offset)","Sets result pointer to a specific field offset"],mysql_field_table:["string mysql_field_table(resource result, int field_offset)","Gets name of the table the specified field is in"],mysql_field_type:["string mysql_field_type(resource result, int field_offset)","Gets the type of the specified field in a result"],mysql_free_result:["bool mysql_free_result(resource result)","Free result memory"],mysql_get_client_info:["string mysql_get_client_info(void)","Returns a string that represents the client library version"],mysql_get_host_info:["string mysql_get_host_info([int link_identifier])","Returns a string describing the type of connection in use, including the server host name"],mysql_get_proto_info:["int mysql_get_proto_info([int link_identifier])","Returns the protocol version used by current connection"],mysql_get_server_info:["string mysql_get_server_info([int link_identifier])","Returns a string that represents the server version number"],mysql_info:["string mysql_info([int link_identifier])","Returns a string containing information about the most recent query"],mysql_insert_id:["int mysql_insert_id([int link_identifier])","Gets the ID generated from the previous INSERT operation"],mysql_list_dbs:["resource mysql_list_dbs([int link_identifier])","List databases available on a MySQL server"],mysql_list_fields:["resource mysql_list_fields(string database_name, string table_name [, int link_identifier])","List MySQL result fields"],mysql_list_processes:["resource mysql_list_processes([int link_identifier])","Returns a result set describing the current server threads"],mysql_list_tables:["resource mysql_list_tables(string database_name [, int link_identifier])","List tables in a MySQL database"],mysql_num_fields:["int mysql_num_fields(resource result)","Gets number of fields in a result"],mysql_num_rows:["int mysql_num_rows(resource result)","Gets number of rows in a result"],mysql_pconnect:["resource mysql_pconnect([string hostname[:port][:/path/to/socket] [, string username [, string password [, int flags]]]])","Opens a persistent connection to a MySQL Server"],mysql_ping:["bool mysql_ping([int link_identifier])","Ping a server connection. If no connection then reconnect."],mysql_query:["resource mysql_query(string query [, int link_identifier])","Sends an SQL query to MySQL"],mysql_real_escape_string:["string mysql_real_escape_string(string to_be_escaped [, int link_identifier])","Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection"],mysql_result:["mixed mysql_result(resource result, int row [, mixed field])","Gets result data"],mysql_select_db:["bool mysql_select_db(string database_name [, int link_identifier])","Selects a MySQL database"],mysql_set_charset:["bool mysql_set_charset(string csname [, int link_identifier])","sets client character set"],mysql_stat:["string mysql_stat([int link_identifier])","Returns a string containing status information"],mysql_thread_id:["int mysql_thread_id([int link_identifier])","Returns the thread id of current connection"],mysql_unbuffered_query:["resource mysql_unbuffered_query(string query [, int link_identifier])","Sends an SQL query to MySQL, without fetching and buffering the result rows"],mysqli_affected_rows:["mixed mysqli_affected_rows(object link)","Get number of affected rows in previous MySQL operation"],mysqli_autocommit:["bool mysqli_autocommit(object link, bool mode)","Turn auto commit on or of"],mysqli_cache_stats:["array mysqli_cache_stats(void)","Returns statistics about the zval cache"],mysqli_change_user:["bool mysqli_change_user(object link, string user, string password, string database)","Change logged-in user of the active connection"],mysqli_character_set_name:["string mysqli_character_set_name(object link)","Returns the name of the character set used for this connection"],mysqli_close:["bool mysqli_close(object link)","Close connection"],mysqli_commit:["bool mysqli_commit(object link)","Commit outstanding actions and close transaction"],mysqli_connect:["object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])","Open a connection to a mysql server"],mysqli_connect_errno:["int mysqli_connect_errno(void)","Returns the numerical value of the error message from last connect command"],mysqli_connect_error:["string mysqli_connect_error(void)","Returns the text of the error message from previous MySQL operation"],mysqli_data_seek:["bool mysqli_data_seek(object result, int offset)","Move internal result pointer"],mysqli_debug:["void mysqli_debug(string debug)",""],mysqli_dump_debug_info:["bool mysqli_dump_debug_info(object link)",""],mysqli_embedded_server_end:["void mysqli_embedded_server_end(void)",""],mysqli_embedded_server_start:["bool mysqli_embedded_server_start(bool start, array arguments, array groups)","initialize and start embedded server"],mysqli_errno:["int mysqli_errno(object link)","Returns the numerical value of the error message from previous MySQL operation"],mysqli_error:["string mysqli_error(object link)","Returns the text of the error message from previous MySQL operation"],mysqli_fetch_all:["mixed mysqli_fetch_all (object result [,int resulttype])","Fetches all result rows as an associative array, a numeric array, or both"],mysqli_fetch_array:["mixed mysqli_fetch_array (object result [,int resulttype])","Fetch a result row as an associative array, a numeric array, or both"],mysqli_fetch_assoc:["mixed mysqli_fetch_assoc (object result)","Fetch a result row as an associative array"],mysqli_fetch_field:["mixed mysqli_fetch_field (object result)","Get column information from a result and return as an object"],mysqli_fetch_field_direct:["mixed mysqli_fetch_field_direct (object result, int offset)","Fetch meta-data for a single field"],mysqli_fetch_fields:["mixed mysqli_fetch_fields (object result)","Return array of objects containing field meta-data"],mysqli_fetch_lengths:["mixed mysqli_fetch_lengths (object result)","Get the length of each output in a result"],mysqli_fetch_object:["mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])","Fetch a result row as an object"],mysqli_fetch_row:["array mysqli_fetch_row (object result)","Get a result row as an enumerated array"],mysqli_field_count:["int mysqli_field_count(object link)","Fetch the number of fields returned by the last query for the given link"],mysqli_field_seek:["int mysqli_field_seek(object result, int fieldnr)","Set result pointer to a specified field offset"],mysqli_field_tell:["int mysqli_field_tell(object result)","Get current field offset of result pointer"],mysqli_free_result:["void mysqli_free_result(object result)","Free query result memory for the given result handle"],mysqli_get_charset:["object mysqli_get_charset(object link)","returns a character set object"],mysqli_get_client_info:["string mysqli_get_client_info(void)","Get MySQL client info"],mysqli_get_client_stats:["array mysqli_get_client_stats(void)","Returns statistics about the zval cache"],mysqli_get_client_version:["int mysqli_get_client_version(void)","Get MySQL client info"],mysqli_get_connection_stats:["array mysqli_get_connection_stats(void)","Returns statistics about the zval cache"],mysqli_get_host_info:["string mysqli_get_host_info (object link)","Get MySQL host info"],mysqli_get_proto_info:["int mysqli_get_proto_info(object link)","Get MySQL protocol information"],mysqli_get_server_info:["string mysqli_get_server_info(object link)","Get MySQL server info"],mysqli_get_server_version:["int mysqli_get_server_version(object link)","Return the MySQL version for the server referenced by the given link"],mysqli_get_warnings:["object mysqli_get_warnings(object link) */",'PHP_FUNCTION(mysqli_get_warnings) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); if (mysql_warning_count(mysql->mysql)) { w = php_get_warnings(mysql->mysql TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_info:["string mysqli_info(object link)","Get information about the most recent query"],mysqli_init:["resource mysqli_init(void)","Initialize mysqli and return a resource for use with mysql_real_connect"],mysqli_insert_id:["mixed mysqli_insert_id(object link)","Get the ID generated from the previous INSERT operation"],mysqli_kill:["bool mysqli_kill(object link, int processid)","Kill a mysql process on the server"],mysqli_link_construct:["object mysqli_link_construct()",""],mysqli_more_results:["bool mysqli_more_results(object link)","check if there any more query results from a multi query"],mysqli_multi_query:["bool mysqli_multi_query(object link, string query)","allows to execute multiple queries"],mysqli_next_result:["bool mysqli_next_result(object link)","read next result from multi_query"],mysqli_num_fields:["int mysqli_num_fields(object result)","Get number of fields in result"],mysqli_num_rows:["mixed mysqli_num_rows(object result)","Get number of rows in result"],mysqli_options:["bool mysqli_options(object link, int flags, mixed values)","Set options"],mysqli_ping:["bool mysqli_ping(object link)","Ping a server connection or reconnect if there is no connection"],mysqli_poll:["int mysqli_poll(array read, array write, array error, long sec [, long usec])","Poll connections"],mysqli_prepare:["mixed mysqli_prepare(object link, string query)","Prepare a SQL statement for execution"],mysqli_query:["mixed mysqli_query(object link, string query [,int resultmode]) */",'PHP_FUNCTION(mysqli_query) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result; char *query = NULL; unsigned int query_len; unsigned long resultmode = MYSQLI_STORE_RESULT; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|l", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) { return; } if (!query_len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty query"); RETURN_FALSE; } if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid value for resultmode"); RETURN_FALSE; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, "mysqli_link", MYSQLI_STATUS_VALID); MYSQLI_DISABLE_MQ; #ifdef MYSQLI_USE_MYSQLND if (resultmode & MYSQLI_ASYNC) { if (mysqli_async_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC; RETURN_TRUE; } #endif if (mysql_real_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } if (!mysql_field_count(mysql->mysql)) { /* no result set - not a SELECT'],mysqli_real_connect:["bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])","Open a connection to a mysql server"],mysqli_real_escape_string:["string mysqli_real_escape_string(object link, string escapestr)","Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection"],mysqli_real_query:["bool mysqli_real_query(object link, string query)","Binary-safe version of mysql_query()"],mysqli_reap_async_query:["int mysqli_reap_async_query(object link)","Poll connections"],mysqli_refresh:["bool mysqli_refresh(object link, long options)","Flush tables or caches, or reset replication server information"],mysqli_report:["bool mysqli_report(int flags)","sets report level"],mysqli_rollback:["bool mysqli_rollback(object link)","Undo actions from current transaction"],mysqli_select_db:["bool mysqli_select_db(object link, string dbname)","Select a MySQL database"],mysqli_set_charset:["bool mysqli_set_charset(object link, string csname)","sets client character set"],mysqli_set_local_infile_default:["void mysqli_set_local_infile_default(object link)","unsets user defined handler for load local infile command"],mysqli_set_local_infile_handler:["bool mysqli_set_local_infile_handler(object link, callback read_func)","Set callback functions for LOAD DATA LOCAL INFILE"],mysqli_sqlstate:["string mysqli_sqlstate(object link)","Returns the SQLSTATE error from previous MySQL operation"],mysqli_ssl_set:["bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])",""],mysqli_stat:["mixed mysqli_stat(object link)","Get current system status"],mysqli_stmt_affected_rows:["mixed mysqli_stmt_affected_rows(object stmt)","Return the number of rows affected in the last query for the given link"],mysqli_stmt_attr_get:["int mysqli_stmt_attr_get(object stmt, long attr)",""],mysqli_stmt_attr_set:["int mysqli_stmt_attr_set(object stmt, long attr, long mode)",""],mysqli_stmt_bind_param:["bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])","Bind variables to a prepared statement as parameters"],mysqli_stmt_bind_result:["bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])","Bind variables to a prepared statement for result storage"],mysqli_stmt_close:["bool mysqli_stmt_close(object stmt)","Close statement"],mysqli_stmt_data_seek:["void mysqli_stmt_data_seek(object stmt, int offset)","Move internal result pointer"],mysqli_stmt_errno:["int mysqli_stmt_errno(object stmt)",""],mysqli_stmt_error:["string mysqli_stmt_error(object stmt)",""],mysqli_stmt_execute:["bool mysqli_stmt_execute(object stmt)","Execute a prepared statement"],mysqli_stmt_fetch:["mixed mysqli_stmt_fetch(object stmt)","Fetch results from a prepared statement into the bound variables"],mysqli_stmt_field_count:["int mysqli_stmt_field_count(object stmt) {","Return the number of result columns for the given statement"],mysqli_stmt_free_result:["void mysqli_stmt_free_result(object stmt)","Free stored result memory for the given statement handle"],mysqli_stmt_get_result:["object mysqli_stmt_get_result(object link)","Buffer result set on client"],mysqli_stmt_get_warnings:["object mysqli_stmt_get_warnings(object link) */",'PHP_FUNCTION(mysqli_stmt_get_warnings) { MY_STMT *stmt; zval *stmt_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &stmt_link, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, "mysqli_stmt", MYSQLI_STATUS_VALID); if (mysqli_stmt_warning_count(stmt->stmt)) { w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } /* }}}'],mysqli_stmt_init:["mixed mysqli_stmt_init(object link)","Initialize statement object"],mysqli_stmt_insert_id:["mixed mysqli_stmt_insert_id(object stmt)","Get the ID generated from the previous INSERT operation"],mysqli_stmt_next_result:["bool mysqli_stmt_next_result(object link)","read next result from multi_query"],mysqli_stmt_num_rows:["mixed mysqli_stmt_num_rows(object stmt)","Return the number of rows in statements result set"],mysqli_stmt_param_count:["int mysqli_stmt_param_count(object stmt)","Return the number of parameter for the given statement"],mysqli_stmt_prepare:["bool mysqli_stmt_prepare(object stmt, string query)","prepare server side statement with query"],mysqli_stmt_reset:["bool mysqli_stmt_reset(object stmt)","reset a prepared statement"],mysqli_stmt_result_metadata:["mixed mysqli_stmt_result_metadata(object stmt)","return result set from statement"],mysqli_stmt_send_long_data:["bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)",""],mysqli_stmt_sqlstate:["string mysqli_stmt_sqlstate(object stmt)",""],mysqli_stmt_store_result:["bool mysqli_stmt_store_result(stmt)",""],mysqli_store_result:["object mysqli_store_result(object link)","Buffer result set on client"],mysqli_thread_id:["int mysqli_thread_id(object link)","Return the current thread ID"],mysqli_thread_safe:["bool mysqli_thread_safe(void)","Return whether thread safety is given or not"],mysqli_use_result:["mixed mysqli_use_result(object link)","Directly retrieve query results - do not buffer results on client side"],mysqli_warning_count:["int mysqli_warning_count (object link)","Return number of warnings from the last query for the given link"],natcasesort:["void natcasesort(array &array_arg)","Sort an array using case-insensitive natural sort"],natsort:["void natsort(array &array_arg)","Sort an array using natural sort"],next:["mixed next(array array_arg)","Move array argument's internal pointer to the next element and return it"],ngettext:["string ngettext(string MSGID1, string MSGID2, int N)","Plural version of gettext()"],nl2br:["string nl2br(string str [, bool is_xhtml])","Converts newlines to HTML line breaks"],nl_langinfo:["string nl_langinfo(int item)","Query language and locale information"],normalizer_is_normalize:["bool normalizer_is_normalize( string $input [, string $form = FORM_C] )","* Test if a string is in a given normalization form."],normalizer_normalize:["string normalizer_normalize( string $input [, string $form = FORM_C] )","* Normalize a string."],nsapi_request_headers:["array nsapi_request_headers(void)","Get all headers from the request"],nsapi_response_headers:["array nsapi_response_headers(void)","Get all headers from the response"],nsapi_virtual:["bool nsapi_virtual(string uri)","Perform an NSAPI sub-request"],number_format:["string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])","Formats a number with grouped thousands"],numfmt_create:["NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )","* Create number formatter."],numfmt_format:["mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )","* Format a number."],numfmt_format_currency:["mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )","* Format a number as currency."],numfmt_get_attribute:["mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )","* Get formatter attribute value."],numfmt_get_error_code:["int numfmt_get_error_code( NumberFormatter $nf )","* Get formatter's last error code."],numfmt_get_error_message:["string numfmt_get_error_message( NumberFormatter $nf )","* Get text description for formatter's last error code."],numfmt_get_locale:["string numfmt_get_locale( NumberFormatter $nf[, int type] )","* Get formatter locale."],numfmt_get_pattern:["string numfmt_get_pattern( NumberFormatter $nf )","* Get formatter pattern."],numfmt_get_symbol:["string numfmt_get_symbol( NumberFormatter $nf, int $attr )","* Get formatter symbol value."],numfmt_get_text_attribute:["string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )","* Get formatter attribute value."],numfmt_parse:["mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])","* Parse a number."],numfmt_parse_currency:["double numfmt_parse_currency( NumberFormatter $nf, string $str, string $¤cy[, int $&position] )","* Parse a number as currency."],numfmt_parse_message:["array numfmt_parse_message( string $locale, string $pattern, string $source )","* Parse a message."],numfmt_set_attribute:["bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )","* Get formatter attribute value."],numfmt_set_pattern:["bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )","* Set formatter pattern."],numfmt_set_symbol:["bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )","* Set formatter symbol value."],numfmt_set_text_attribute:["bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )","* Get formatter attribute value."],ob_clean:["bool ob_clean(void)","Clean (delete) the current output buffer"],ob_end_clean:["bool ob_end_clean(void)","Clean the output buffer, and delete current output buffer"],ob_end_flush:["bool ob_end_flush(void)","Flush (send) the output buffer, and delete current output buffer"],ob_flush:["bool ob_flush(void)","Flush (send) contents of the output buffer. The last buffer content is sent to next buffer"],ob_get_clean:["bool ob_get_clean(void)","Get current buffer contents and delete current output buffer"],ob_get_contents:["string ob_get_contents(void)","Return the contents of the output buffer"],ob_get_flush:["bool ob_get_flush(void)","Get current buffer contents, flush (send) the output buffer, and delete current output buffer"],ob_get_length:["int ob_get_length(void)","Return the length of the output buffer"],ob_get_level:["int ob_get_level(void)","Return the nesting level of the output buffer"],ob_get_status:["false|array ob_get_status([bool full_status])","Return the status of the active or all output buffers"],ob_gzhandler:["string ob_gzhandler(string str, int mode)","Encode str based on accept-encoding setting - designed to be called from ob_start()"],ob_iconv_handler:["string ob_iconv_handler(string contents, int status)","Returns str in output buffer converted to the iconv.output_encoding character set"],ob_implicit_flush:["void ob_implicit_flush([int flag])","Turn implicit flush on/off and is equivalent to calling flush() after every output call"],ob_list_handlers:["false|array ob_list_handlers()","* List all output_buffers in an array"],ob_start:["bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])","Turn on Output Buffering (specifying an optional output handler)."],oci_bind_array_by_name:["bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])","Bind a PHP array to an Oracle PL/SQL type by name"],oci_bind_by_name:["bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])","Bind a PHP variable to an Oracle placeholder by name"],oci_cancel:["bool oci_cancel(resource stmt)","Cancel reading from a cursor"],oci_close:["bool oci_close(resource connection)","Disconnect from database"],oci_collection_append:["bool oci_collection_append(string value)","Append an object to the collection"],oci_collection_assign:["bool oci_collection_assign(object from)","Assign a collection from another existing collection"],oci_collection_element_assign:["bool oci_collection_element_assign(int index, string val)","Assign element val to collection at index ndx"],oci_collection_element_get:["string oci_collection_element_get(int ndx)","Retrieve the value at collection index ndx"],oci_collection_max:["int oci_collection_max()","Return the max value of a collection. For a varray this is the maximum length of the array"],oci_collection_size:["int oci_collection_size()","Return the size of a collection"],oci_collection_trim:["bool oci_collection_trim(int num)","Trim num elements from the end of a collection"],oci_commit:["bool oci_commit(resource connection)","Commit the current context"],oci_connect:["resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])","Connect to an Oracle database and log on. Returns a new session."],oci_define_by_name:["bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])","Define a PHP variable to an Oracle column by name"],oci_error:["array oci_error([resource stmt|connection|global])","Return the last error of stmt|connection|global. If no error happened returns false."],oci_execute:["bool oci_execute(resource stmt [, int mode])","Execute a parsed statement"],oci_fetch:["bool oci_fetch(resource stmt)","Prepare a new row of data for reading"],oci_fetch_all:["int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])","Fetch all rows of result data into an array"],oci_fetch_array:["array oci_fetch_array( resource stmt [, int mode ])","Fetch a result row as an array"],oci_fetch_assoc:["array oci_fetch_assoc( resource stmt )","Fetch a result row as an associative array"],oci_fetch_object:["object oci_fetch_object( resource stmt )","Fetch a result row as an object"],oci_fetch_row:["array oci_fetch_row( resource stmt )","Fetch a result row as an enumerated array"],oci_field_is_null:["bool oci_field_is_null(resource stmt, int col)","Tell whether a column is NULL"],oci_field_name:["string oci_field_name(resource stmt, int col)","Tell the name of a column"],oci_field_precision:["int oci_field_precision(resource stmt, int col)","Tell the precision of a column"],oci_field_scale:["int oci_field_scale(resource stmt, int col)","Tell the scale of a column"],oci_field_size:["int oci_field_size(resource stmt, int col)","Tell the maximum data size of a column"],oci_field_type:["mixed oci_field_type(resource stmt, int col)","Tell the data type of a column"],oci_field_type_raw:["int oci_field_type_raw(resource stmt, int col)","Tell the raw oracle data type of a column"],oci_free_collection:["bool oci_free_collection()","Deletes collection object"],oci_free_descriptor:["bool oci_free_descriptor()","Deletes large object description"],oci_free_statement:["bool oci_free_statement(resource stmt)","Free all resources associated with a statement"],oci_internal_debug:["void oci_internal_debug(int onoff)","Toggle internal debugging output for the OCI extension"],oci_lob_append:["bool oci_lob_append( object lob )","Appends data from a LOB to another LOB"],oci_lob_close:["bool oci_lob_close()","Closes lob descriptor"],oci_lob_copy:["bool oci_lob_copy( object lob_to, object lob_from [, int length ] )","Copies data from a LOB to another LOB"],oci_lob_eof:["bool oci_lob_eof()","Checks if EOF is reached"],oci_lob_erase:["int oci_lob_erase( [ int offset [, int length ] ] )","Erases a specified portion of the internal LOB, starting at a specified offset"],oci_lob_export:["bool oci_lob_export([string filename [, int start [, int length]]])","Writes a large object into a file"],oci_lob_flush:["bool oci_lob_flush( [ int flag ] )","Flushes the LOB buffer"],oci_lob_import:["bool oci_lob_import( string filename )","Loads file into a LOB"],oci_lob_is_equal:["bool oci_lob_is_equal( object lob1, object lob2 )","Tests to see if two LOB/FILE locators are equal"],oci_lob_load:["string oci_lob_load()","Loads a large object"],oci_lob_read:["string oci_lob_read( int length )","Reads particular part of a large object"],oci_lob_rewind:["bool oci_lob_rewind()","Rewind pointer of a LOB"],oci_lob_save:["bool oci_lob_save( string data [, int offset ])","Saves a large object"],oci_lob_seek:["bool oci_lob_seek( int offset [, int whence ])","Moves the pointer of a LOB"],oci_lob_size:["int oci_lob_size()","Returns size of a large object"],oci_lob_tell:["int oci_lob_tell()","Tells LOB pointer position"],oci_lob_truncate:["bool oci_lob_truncate( [ int length ])","Truncates a LOB"],oci_lob_write:["int oci_lob_write( string string [, int length ])","Writes data to current position of a LOB"],oci_lob_write_temporary:["bool oci_lob_write_temporary(string var [, int lob_type])","Writes temporary blob"],oci_new_collection:["object oci_new_collection(resource connection, string tdo [, string schema])","Initialize a new collection"],oci_new_connect:["resource oci_new_connect(string user, string pass [, string db])","Connect to an Oracle database and log on. Returns a new session."],oci_new_cursor:["resource oci_new_cursor(resource connection)","Return a new cursor (Statement-Handle) - use this to bind ref-cursors!"],oci_new_descriptor:["object oci_new_descriptor(resource connection [, int type])","Initialize a new empty descriptor LOB/FILE (LOB is default)"],oci_num_fields:["int oci_num_fields(resource stmt)","Return the number of result columns in a statement"],oci_num_rows:["int oci_num_rows(resource stmt)","Return the row count of an OCI statement"],oci_parse:["resource oci_parse(resource connection, string query)","Parse a query and return a statement"],oci_password_change:["bool oci_password_change(resource connection, string username, string old_password, string new_password)","Changes the password of an account"],oci_pconnect:["resource oci_pconnect(string user, string pass [, string db [, string charset ]])","Connect to an Oracle database using a persistent connection and log on. Returns a new session."],oci_result:["string oci_result(resource stmt, mixed column)","Return a single column of result data"],oci_rollback:["bool oci_rollback(resource connection)","Rollback the current context"],oci_server_version:["string oci_server_version(resource connection)","Return a string containing server version information"],oci_set_action:["bool oci_set_action(resource connection, string value)","Sets the action attribute on the connection"],oci_set_client_identifier:["bool oci_set_client_identifier(resource connection, string value)","Sets the client identifier attribute on the connection"],oci_set_client_info:["bool oci_set_client_info(resource connection, string value)","Sets the client info attribute on the connection"],oci_set_edition:["bool oci_set_edition(string value)","Sets the edition attribute for all subsequent connections created"],oci_set_module_name:["bool oci_set_module_name(resource connection, string value)","Sets the module attribute on the connection"],oci_set_prefetch:["bool oci_set_prefetch(resource stmt, int prefetch_rows)","Sets the number of rows to be prefetched on execute to prefetch_rows for stmt"],oci_statement_type:["string oci_statement_type(resource stmt)","Return the query type of an OCI statement"],ocifetchinto:["int ocifetchinto(resource stmt, array &output [, int mode])","Fetch a row of result data into an array"],ocigetbufferinglob:["bool ocigetbufferinglob()","Returns current state of buffering for a LOB"],ocisetbufferinglob:["bool ocisetbufferinglob( boolean flag )","Enables/disables buffering for a LOB"],octdec:["int octdec(string octal_number)","Returns the decimal equivalent of an octal string"],odbc_autocommit:["mixed odbc_autocommit(resource connection_id [, int OnOff])","Toggle autocommit mode or get status"],odbc_binmode:["bool odbc_binmode(int result_id, int mode)","Handle binary column data"],odbc_close:["void odbc_close(resource connection_id)","Close an ODBC connection"],odbc_close_all:["void odbc_close_all(void)","Close all ODBC connections"],odbc_columnprivileges:["resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)","Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table"],odbc_columns:["resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])","Returns a result identifier that can be used to fetch a list of column names in specified tables"],odbc_commit:["bool odbc_commit(resource connection_id)","Commit an ODBC transaction"],odbc_connect:["resource odbc_connect(string DSN, string user, string password [, int cursor_option])","Connect to a datasource"],odbc_cursor:["string odbc_cursor(resource result_id)","Get cursor name"],odbc_data_source:["array odbc_data_source(resource connection_id, int fetch_type)","Return information about the currently connected data source"],odbc_error:["string odbc_error([resource connection_id])","Get the last error code"],odbc_errormsg:["string odbc_errormsg([resource connection_id])","Get the last error message"],odbc_exec:["resource odbc_exec(resource connection_id, string query [, int flags])","Prepare and execute an SQL statement"],odbc_execute:["bool odbc_execute(resource result_id [, array parameters_array])","Execute a prepared statement"],odbc_fetch_array:["array odbc_fetch_array(int result [, int rownumber])","Fetch a result row as an associative array"],odbc_fetch_into:["int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])","Fetch one result row into an array"],odbc_fetch_object:["object odbc_fetch_object(int result [, int rownumber])","Fetch a result row as an object"],odbc_fetch_row:["bool odbc_fetch_row(resource result_id [, int row_number])","Fetch a row"],odbc_field_len:["int odbc_field_len(resource result_id, int field_number)","Get the length (precision) of a column"],odbc_field_name:["string odbc_field_name(resource result_id, int field_number)","Get a column name"],odbc_field_num:["int odbc_field_num(resource result_id, string field_name)","Return column number"],odbc_field_scale:["int odbc_field_scale(resource result_id, int field_number)","Get the scale of a column"],odbc_field_type:["string odbc_field_type(resource result_id, int field_number)","Get the datatype of a column"],odbc_foreignkeys:["resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)","Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table"],odbc_free_result:["bool odbc_free_result(resource result_id)","Free resources associated with a result"],odbc_gettypeinfo:["resource odbc_gettypeinfo(resource connection_id [, int data_type])","Returns a result identifier containing information about data types supported by the data source"],odbc_longreadlen:["bool odbc_longreadlen(int result_id, int length)","Handle LONG columns"],odbc_next_result:["bool odbc_next_result(resource result_id)","Checks if multiple results are avaiable"],odbc_num_fields:["int odbc_num_fields(resource result_id)","Get number of columns in a result"],odbc_num_rows:["int odbc_num_rows(resource result_id)","Get number of rows in a result"],odbc_pconnect:["resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])","Establish a persistent connection to a datasource"],odbc_prepare:["resource odbc_prepare(resource connection_id, string query)","Prepares a statement for execution"],odbc_primarykeys:["resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)","Returns a result identifier listing the column names that comprise the primary key for a table"],odbc_procedurecolumns:["resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])","Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures"],odbc_procedures:["resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])","Returns a result identifier containg the list of procedure names in a datasource"],odbc_result:["mixed odbc_result(resource result_id, mixed field)","Get result data"],odbc_result_all:["int odbc_result_all(resource result_id [, string format])","Print result as HTML table"],odbc_rollback:["bool odbc_rollback(resource connection_id)","Rollback a transaction"],odbc_setoption:["bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)","Sets connection or statement options"],odbc_specialcolumns:["resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)","Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction"],odbc_statistics:["resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)","Returns a result identifier that contains statistics about a single table and the indexes associated with the table"],odbc_tableprivileges:["resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)","Returns a result identifier containing a list of tables and the privileges associated with each table"],odbc_tables:["resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])","Call the SQLTables function"],opendir:["mixed opendir(string path[, resource context])","Open a directory and return a dir_handle"],openlog:["bool openlog(string ident, int option, int facility)","Open connection to system logger"],openssl_csr_export:["bool openssl_csr_export(resource csr, string &out [, bool notext=true])","Exports a CSR to file or a var"],openssl_csr_export_to_file:["bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])","Exports a CSR to file"],openssl_csr_get_public_key:["mixed openssl_csr_get_public_key(mixed csr)","Returns the subject of a CERT or FALSE on error"],openssl_csr_get_subject:["mixed openssl_csr_get_subject(mixed csr)","Returns the subject of a CERT or FALSE on error"],openssl_csr_new:["bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])","Generates a privkey and CSR"],openssl_csr_sign:["resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])","Signs a cert with another CERT"],openssl_decrypt:["string openssl_decrypt(string data, string method, string password [, bool raw_input=false])","Takes raw or base64 encoded string and dectupt it using given method and key"],openssl_dh_compute_key:["string openssl_dh_compute_key(string pub_key, resource dh_key)","Computes shared sicret for public value of remote DH key and local DH key"],openssl_digest:["string openssl_digest(string data, string method [, bool raw_output=false])","Computes digest hash value for given data using given method, returns raw or binhex encoded string"],openssl_encrypt:["string openssl_encrypt(string data, string method, string password [, bool raw_output=false])","Encrypts given data with given method and key, returns raw or base64 encoded string"],openssl_error_string:["mixed openssl_error_string(void)","Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages"],openssl_get_cipher_methods:["array openssl_get_cipher_methods([bool aliases = false])","Return array of available cipher methods"],openssl_get_md_methods:["array openssl_get_md_methods([bool aliases = false])","Return array of available digest methods"],openssl_open:["bool openssl_open(string data, &string opendata, string ekey, mixed privkey)","Opens data"],openssl_pkcs12_export:["bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])","Creates and exports a PKCS12 to a var"],openssl_pkcs12_export_to_file:["bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])","Creates and exports a PKCS to file"],openssl_pkcs12_read:["bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)","Parses a PKCS12 to an array"],openssl_pkcs7_decrypt:["bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])","Decrypts the S/MIME message in the file name infilename and output the results to the file name outfilename. recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key"],openssl_pkcs7_encrypt:["bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])","Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile"],openssl_pkcs7_sign:["bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])","Signs the MIME message in the file named infile with signcert/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum"],openssl_pkcs7_verify:["bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])","Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers"],openssl_pkey_export:["bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])","Gets an exportable representation of a key into a string or file"],openssl_pkey_export_to_file:["bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)","Gets an exportable representation of a key into a file"],openssl_pkey_free:["void openssl_pkey_free(int key)","Frees a key"],openssl_pkey_get_details:["resource openssl_pkey_get_details(resource key)","returns an array with the key details (bits, pkey, type)"],openssl_pkey_get_private:["int openssl_pkey_get_private(string key [, string passphrase])","Gets private keys"],openssl_pkey_get_public:["int openssl_pkey_get_public(mixed cert)","Gets public key from X.509 certificate"],openssl_pkey_new:["resource openssl_pkey_new([array configargs])","Generates a new private key"],openssl_private_decrypt:["bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])","Decrypts data with private key"],openssl_private_encrypt:["bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])","Encrypts data with private key"],openssl_public_decrypt:["bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])","Decrypts data with public key"],openssl_public_encrypt:["bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])","Encrypts data with public key"],openssl_random_pseudo_bytes:["string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])","Returns a string of the length specified filled with random pseudo bytes"],openssl_seal:["int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)","Seals data"],openssl_sign:["bool openssl_sign(string data, &string signature, mixed key[, mixed method])","Signs data"],openssl_verify:["int openssl_verify(string data, string signature, mixed key[, mixed method])","Verifys data"],openssl_x509_check_private_key:["bool openssl_x509_check_private_key(mixed cert, mixed key)","Checks if a private key corresponds to a CERT"],openssl_x509_checkpurpose:["int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])","Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs"],openssl_x509_export:["bool openssl_x509_export(mixed x509, string &out [, bool notext = true])","Exports a CERT to file or a var"],openssl_x509_export_to_file:["bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])","Exports a CERT to file or a var"],openssl_x509_free:["void openssl_x509_free(resource x509)","Frees X.509 certificates"],openssl_x509_parse:["array openssl_x509_parse(mixed x509 [, bool shortnames=true])","Returns an array of the fields/values of the CERT"],openssl_x509_read:["resource openssl_x509_read(mixed cert)","Reads X.509 certificates"],ord:["int ord(string character)","Returns ASCII value of character"],output_add_rewrite_var:["bool output_add_rewrite_var(string name, string value)","Add URL rewriter values"],output_reset_rewrite_vars:["bool output_reset_rewrite_vars(void)","Reset(clear) URL rewriter values"],pack:["string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])","Takes one or more arguments and packs them into a binary string according to the format argument"],parse_ini_file:["array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])","Parse configuration file"],parse_ini_string:["array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])","Parse configuration string"],parse_locale:["static array parse_locale($locale)","* parses a locale-id into an array the different parts of it"],parse_str:["void parse_str(string encoded_string [, array result])","Parses GET/POST/COOKIE data and sets global variables"],parse_url:["mixed parse_url(string url, [int url_component])","Parse a URL and return its components"],passthru:["void passthru(string command [, int &return_value])","Execute an external program and display raw output"],pathinfo:["array pathinfo(string path[, int options])","Returns information about a certain string"],pclose:["int pclose(resource fp)","Close a file pointer opened by popen()"],pcnlt_sigwaitinfo:["int pcnlt_sigwaitinfo(array set[, array &siginfo])","Synchronously wait for queued signals"],pcntl_alarm:["int pcntl_alarm(int seconds)","Set an alarm clock for delivery of a signal"],pcntl_exec:["bool pcntl_exec(string path [, array args [, array envs]])","Executes specified program in current process space as defined by exec(2)"],pcntl_fork:["int pcntl_fork(void)","Forks the currently running process following the same behavior as the UNIX fork() system call"],pcntl_getpriority:["int pcntl_getpriority([int pid [, int process_identifier]])","Get the priority of any process"],pcntl_setpriority:["bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])","Change the priority of any process"],pcntl_signal:["bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])","Assigns a system signal handler to a PHP function"],pcntl_signal_dispatch:["bool pcntl_signal_dispatch()","Dispatch signals to signal handlers"],pcntl_sigprocmask:["bool pcntl_sigprocmask(int how, array set[, array &oldset])","Examine and change blocked signals"],pcntl_sigtimedwait:["int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])","Wait for queued signals"],pcntl_wait:["int pcntl_wait(int &status)","Waits on or returns the status of a forked child as defined by the waitpid() system call"],pcntl_waitpid:["int pcntl_waitpid(int pid, int &status, int options)","Waits on or returns the status of a forked child as defined by the waitpid() system call"],pcntl_wexitstatus:["int pcntl_wexitstatus(int status)","Returns the status code of a child's exit"],pcntl_wifexited:["bool pcntl_wifexited(int status)","Returns true if the child status code represents a successful exit"],pcntl_wifsignaled:["bool pcntl_wifsignaled(int status)","Returns true if the child status code represents a process that was terminated due to a signal"],pcntl_wifstopped:["bool pcntl_wifstopped(int status)","Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)"],pcntl_wstopsig:["int pcntl_wstopsig(int status)","Returns the number of the signal that caused the process to stop who's status code is passed"],pcntl_wtermsig:["int pcntl_wtermsig(int status)","Returns the number of the signal that terminated the process who's status code is passed"],pdo_drivers:["array pdo_drivers()","Return array of available PDO drivers"],pfsockopen:["resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])","Open persistent Internet or Unix domain socket connection"],pg_affected_rows:["int pg_affected_rows(resource result)","Returns the number of affected tuples"],pg_cancel_query:["bool pg_cancel_query(resource connection)","Cancel request"],pg_client_encoding:["string pg_client_encoding([resource connection])","Get the current client encoding"],pg_close:["bool pg_close([resource connection])","Close a PostgreSQL connection"],pg_connect:["resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)","Open a PostgreSQL connection"],pg_connection_busy:["bool pg_connection_busy(resource connection)","Get connection is busy or not"],pg_connection_reset:["bool pg_connection_reset(resource connection)","Reset connection (reconnect)"],pg_connection_status:["int pg_connection_status(resource connnection)","Get connection status"],pg_convert:["array pg_convert(resource db, string table, array values[, int options])","Check and convert values for PostgreSQL SQL statement"],pg_copy_from:["bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])","Copy table from array"],pg_copy_to:["array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])","Copy table to array"],pg_dbname:["string pg_dbname([resource connection])","Get the database name"],pg_delete:["mixed pg_delete(resource db, string table, array ids[, int options])","Delete records has ids (id=>value)"],pg_end_copy:["bool pg_end_copy([resource connection])","Sync with backend. Completes the Copy command"],pg_escape_bytea:["string pg_escape_bytea([resource connection,] string data)","Escape binary for bytea type"],pg_escape_string:["string pg_escape_string([resource connection,] string data)","Escape string for text/char type"],pg_execute:["resource pg_execute([resource connection,] string stmtname, array params)","Execute a prepared query"],pg_fetch_all:["array pg_fetch_all(resource result)","Fetch all rows into array"],pg_fetch_all_columns:["array pg_fetch_all_columns(resource result [, int column_number])","Fetch all rows into array"],pg_fetch_array:["array pg_fetch_array(resource result [, int row [, int result_type]])","Fetch a row as an array"],pg_fetch_assoc:["array pg_fetch_assoc(resource result [, int row])","Fetch a row as an assoc array"],pg_fetch_object:["object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])","Fetch a row as an object"],pg_fetch_result:["mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)","Returns values from a result identifier"],pg_fetch_row:["array pg_fetch_row(resource result [, int row [, int result_type]])","Get a row as an enumerated array"],pg_field_is_null:["int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)","Test if a field is NULL"],pg_field_name:["string pg_field_name(resource result, int field_number)","Returns the name of the field"],pg_field_num:["int pg_field_num(resource result, string field_name)","Returns the field number of the named field"],pg_field_prtlen:["int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)","Returns the printed length"],pg_field_size:["int pg_field_size(resource result, int field_number)","Returns the internal size of the field"],pg_field_table:["mixed pg_field_table(resource result, int field_number[, bool oid_only])","Returns the name of the table field belongs to, or table's oid if oid_only is true"],pg_field_type:["string pg_field_type(resource result, int field_number)","Returns the type name for the given field"],pg_field_type_oid:["string pg_field_type_oid(resource result, int field_number)","Returns the type oid for the given field"],pg_free_result:["bool pg_free_result(resource result)","Free result memory"],pg_get_notify:["array pg_get_notify([resource connection[, result_type]])","Get asynchronous notification"],pg_get_pid:["int pg_get_pid([resource connection)","Get backend(server) pid"],pg_get_result:["resource pg_get_result(resource connection)","Get asynchronous query result"],pg_host:["string pg_host([resource connection])","Returns the host name associated with the connection"],pg_insert:["mixed pg_insert(resource db, string table, array values[, int options])","Insert values (filed=>value) to table"],pg_last_error:["string pg_last_error([resource connection])","Get the error message string"],pg_last_notice:["string pg_last_notice(resource connection)","Returns the last notice set by the backend"],pg_last_oid:["string pg_last_oid(resource result)","Returns the last object identifier"],pg_lo_close:["bool pg_lo_close(resource large_object)","Close a large object"],pg_lo_create:["mixed pg_lo_create([resource connection],[mixed large_object_oid])","Create a large object"],pg_lo_export:["bool pg_lo_export([resource connection, ] int objoid, string filename)","Export large object direct to filesystem"],pg_lo_import:["int pg_lo_import([resource connection, ] string filename [, mixed oid])","Import large object direct from filesystem"],pg_lo_open:["resource pg_lo_open([resource connection,] int large_object_oid, string mode)","Open a large object and return fd"],pg_lo_read:["string pg_lo_read(resource large_object [, int len])","Read a large object"],pg_lo_read_all:["int pg_lo_read_all(resource large_object)","Read a large object and send straight to browser"],pg_lo_seek:["bool pg_lo_seek(resource large_object, int offset [, int whence])","Seeks position of large object"],pg_lo_tell:["int pg_lo_tell(resource large_object)","Returns current position of large object"],pg_lo_unlink:["bool pg_lo_unlink([resource connection,] string large_object_oid)","Delete a large object"],pg_lo_write:["int pg_lo_write(resource large_object, string buf [, int len])","Write a large object"],pg_meta_data:["array pg_meta_data(resource db, string table)","Get meta_data"],pg_num_fields:["int pg_num_fields(resource result)","Return the number of fields in the result"],pg_num_rows:["int pg_num_rows(resource result)","Return the number of rows in the result"],pg_options:["string pg_options([resource connection])","Get the options associated with the connection"],pg_parameter_status:["string|false pg_parameter_status([resource connection,] string param_name)","Returns the value of a server parameter"],pg_pconnect:["resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)","Open a persistent PostgreSQL connection"],pg_ping:["bool pg_ping([resource connection])","Ping database. If connection is bad, try to reconnect."],pg_port:["int pg_port([resource connection])","Return the port number associated with the connection"],pg_prepare:["resource pg_prepare([resource connection,] string stmtname, string query)","Prepare a query for future execution"],pg_put_line:["bool pg_put_line([resource connection,] string query)","Send null-terminated string to backend server"],pg_query:["resource pg_query([resource connection,] string query)","Execute a query"],pg_query_params:["resource pg_query_params([resource connection,] string query, array params)","Execute a query"],pg_result_error:["string pg_result_error(resource result)","Get error message associated with result"],pg_result_error_field:["string pg_result_error_field(resource result, int fieldcode)","Get error message field associated with result"],pg_result_seek:["bool pg_result_seek(resource result, int offset)","Set internal row offset"],pg_result_status:["mixed pg_result_status(resource result[, long result_type])","Get status of query result"],pg_select:["mixed pg_select(resource db, string table, array ids[, int options])","Select records that has ids (id=>value)"],pg_send_execute:["bool pg_send_execute(resource connection, string stmtname, array params)","Executes prevriously prepared stmtname asynchronously"],pg_send_prepare:["bool pg_send_prepare(resource connection, string stmtname, string query)","Asynchronously prepare a query for future execution"],pg_send_query:["bool pg_send_query(resource connection, string query)","Send asynchronous query"],pg_send_query_params:["bool pg_send_query_params(resource connection, string query, array params)","Send asynchronous parameterized query"],pg_set_client_encoding:["int pg_set_client_encoding([resource connection,] string encoding)","Set client encoding"],pg_set_error_verbosity:["int pg_set_error_verbosity([resource connection,] int verbosity)","Set error verbosity"],pg_trace:["bool pg_trace(string filename [, string mode [, resource connection]])","Enable tracing a PostgreSQL connection"],pg_transaction_status:["int pg_transaction_status(resource connnection)","Get transaction status"],pg_tty:["string pg_tty([resource connection])","Return the tty name associated with the connection"],pg_unescape_bytea:["string pg_unescape_bytea(string data)","Unescape binary for bytea type"],pg_untrace:["bool pg_untrace([resource connection])","Disable tracing of a PostgreSQL connection"],pg_update:["mixed pg_update(resource db, string table, array fields, array ids[, int options])","Update table using values (field=>value) and ids (id=>value)"],pg_version:["array pg_version([resource connection])","Returns an array with client, protocol and server version (when available)"],php_egg_logo_guid:["string php_egg_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_ini_loaded_file:["string php_ini_loaded_file(void)","Return the actual loaded ini filename"],php_ini_scanned_files:["string php_ini_scanned_files(void)","Return comma-separated string of .ini files parsed from the additional ini dir"],php_logo_guid:["string php_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_real_logo_guid:["string php_real_logo_guid(void)","Return the special ID used to request the PHP logo in phpinfo screens"],php_sapi_name:["string php_sapi_name(void)","Return the current SAPI module name"],php_snmpv3:["void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)","* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK snmp3_walk() - walk the mib and return a single dimensional array * containing the values. * st=SNMP_CMD_REALWALK snmp3_real_walk() - walk the mib and return an * array of oid,value pairs. * st=SNMP_CMD_SET snmp3_set() - query an agent and set a single value *"],php_strip_whitespace:["string php_strip_whitespace(string file_name)","Return source with stripped comments and whitespace"],php_uname:["string php_uname(void)","Return information about the system PHP was built on"],phpcredits:["void phpcredits([int flag])","Prints the list of people who've contributed to the PHP project"],phpinfo:["void phpinfo([int what])","Output a page of useful information about PHP and the current request"],phpversion:["string phpversion([string extension])","Return the current PHP version"],pi:["float pi(void)","Returns an approximation of pi"],png2wbmp:["bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)","Convert PNG image to WBMP image"],popen:["resource popen(string command, string mode)","Execute a command and open either a read or a write pipe to it"],posix_access:["bool posix_access(string file [, int mode])","Determine accessibility of a file (POSIX.1 5.6.3)"],posix_ctermid:["string posix_ctermid(void)","Generate terminal path name (POSIX.1, 4.7.1)"],posix_get_last_error:["int posix_get_last_error(void)","Retrieve the error number set by the last posix function which failed."],posix_getcwd:["string posix_getcwd(void)","Get working directory pathname (POSIX.1, 5.2.2)"],posix_getegid:["int posix_getegid(void)","Get the current effective group id (POSIX.1, 4.2.1)"],posix_geteuid:["int posix_geteuid(void)","Get the current effective user id (POSIX.1, 4.2.1)"],posix_getgid:["int posix_getgid(void)","Get the current group id (POSIX.1, 4.2.1)"],posix_getgrgid:["array posix_getgrgid(long gid)","Group database access (POSIX.1, 9.2.1)"],posix_getgrnam:["array posix_getgrnam(string groupname)","Group database access (POSIX.1, 9.2.1)"],posix_getgroups:["array posix_getgroups(void)","Get supplementary group id's (POSIX.1, 4.2.3)"],posix_getlogin:["string posix_getlogin(void)","Get user name (POSIX.1, 4.2.4)"],posix_getpgid:["int posix_getpgid(void)","Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)"],posix_getpgrp:["int posix_getpgrp(void)","Get current process group id (POSIX.1, 4.3.1)"],posix_getpid:["int posix_getpid(void)","Get the current process id (POSIX.1, 4.1.1)"],posix_getppid:["int posix_getppid(void)","Get the parent process id (POSIX.1, 4.1.1)"],posix_getpwnam:["array posix_getpwnam(string groupname)","User database access (POSIX.1, 9.2.2)"],posix_getpwuid:["array posix_getpwuid(long uid)","User database access (POSIX.1, 9.2.2)"],posix_getrlimit:["array posix_getrlimit(void)","Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)"],posix_getsid:["int posix_getsid(void)","Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)"],posix_getuid:["int posix_getuid(void)","Get the current user id (POSIX.1, 4.2.1)"],posix_initgroups:["bool posix_initgroups(string name, int base_group_id)","Calculate the group access list for the user specified in name."],posix_isatty:["bool posix_isatty(int fd)","Determine if filedesc is a tty (POSIX.1, 4.7.1)"],posix_kill:["bool posix_kill(int pid, int sig)","Send a signal to a process (POSIX.1, 3.3.2)"],posix_mkfifo:["bool posix_mkfifo(string pathname, int mode)","Make a FIFO special file (POSIX.1, 5.4.2)"],posix_mknod:["bool posix_mknod(string pathname, int mode [, int major [, int minor]])","Make a special or ordinary file (POSIX.1)"],posix_setegid:["bool posix_setegid(long uid)","Set effective group id"],posix_seteuid:["bool posix_seteuid(long uid)","Set effective user id"],posix_setgid:["bool posix_setgid(int uid)","Set group id (POSIX.1, 4.2.2)"],posix_setpgid:["bool posix_setpgid(int pid, int pgid)","Set process group id for job control (POSIX.1, 4.3.3)"],posix_setsid:["int posix_setsid(void)","Create session and set process group id (POSIX.1, 4.3.2)"],posix_setuid:["bool posix_setuid(long uid)","Set user id (POSIX.1, 4.2.2)"],posix_strerror:["string posix_strerror(int errno)","Retrieve the system error message associated with the given errno."],posix_times:["array posix_times(void)","Get process times (POSIX.1, 4.5.2)"],posix_ttyname:["string posix_ttyname(int fd)","Determine terminal device name (POSIX.1, 4.7.2)"],posix_uname:["array posix_uname(void)","Get system name (POSIX.1, 4.4.1)"],pow:["number pow(number base, number exponent)","Returns base raised to the power of exponent. Returns integer result when possible"],preg_filter:["mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement and only return matches."],preg_grep:["array preg_grep(string regex, array input [, int flags])","Searches array and returns entries which match regex"],preg_last_error:["int preg_last_error()","Returns the error code of the last regexp execution."],preg_match:["int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])","Perform a Perl-style regular expression match"],preg_match_all:["int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])","Perform a Perl-style global regular expression match"],preg_quote:["string preg_quote(string str [, string delim_char])","Quote regular expression characters plus an optional character"],preg_replace:["mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement."],preg_replace_callback:["mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])","Perform Perl-style regular expression replacement using replacement callback."],preg_split:["array preg_split(string pattern, string subject [, int limit [, int flags]])","Split string into an array using a perl-style regular expression as a delimiter"],prev:["mixed prev(array array_arg)","Move array argument's internal pointer to the previous element and return it"],print:["int print(string arg)","Output a string"],print_r:["mixed print_r(mixed var [, bool return])","Prints out or returns information about the specified variable"],printf:["int printf(string format [, mixed arg1 [, mixed ...]])","Output a formatted string"],proc_close:["int proc_close(resource process)","close a process opened by proc_open"],proc_get_status:["array proc_get_status(resource process)","get information about a process opened by proc_open"],proc_nice:["bool proc_nice(int priority)","Change the priority of the current process"],proc_open:["resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])","Run a process with more control over it's file descriptors"],proc_terminate:["bool proc_terminate(resource process [, long signal])","kill a process opened by proc_open"],property_exists:["bool property_exists(mixed object_or_class, string property_name)","Checks if the object or class has a property"],pspell_add_to_personal:["bool pspell_add_to_personal(int pspell, string word)","Adds a word to a personal list"],pspell_add_to_session:["bool pspell_add_to_session(int pspell, string word)","Adds a word to the current session"],pspell_check:["bool pspell_check(int pspell, string word)","Returns true if word is valid"],pspell_clear_session:["bool pspell_clear_session(int pspell)","Clears the current session"],pspell_config_create:["int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])","Create a new config to be used later to create a manager"],pspell_config_data_dir:["bool pspell_config_data_dir(int conf, string directory)","location of language data files"],pspell_config_dict_dir:["bool pspell_config_dict_dir(int conf, string directory)","location of the main word list"],pspell_config_ignore:["bool pspell_config_ignore(int conf, int ignore)","Ignore words <= n chars"],pspell_config_mode:["bool pspell_config_mode(int conf, long mode)","Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)"],pspell_config_personal:["bool pspell_config_personal(int conf, string personal)","Use a personal dictionary for this config"],pspell_config_repl:["bool pspell_config_repl(int conf, string repl)","Use a personal dictionary with replacement pairs for this config"],pspell_config_runtogether:["bool pspell_config_runtogether(int conf, bool runtogether)","Consider run-together words as valid components"],pspell_config_save_repl:["bool pspell_config_save_repl(int conf, bool save)","Save replacement pairs when personal list is saved for this config"],pspell_new:["int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])","Load a dictionary"],pspell_new_config:["int pspell_new_config(int config)","Load a dictionary based on the given config"],pspell_new_personal:["int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])","Load a dictionary with a personal wordlist"],pspell_save_wordlist:["bool pspell_save_wordlist(int pspell)","Saves the current (personal) wordlist"],pspell_store_replacement:["bool pspell_store_replacement(int pspell, string misspell, string correct)","Notify the dictionary of a user-selected replacement"],pspell_suggest:["array pspell_suggest(int pspell, string word)","Returns array of suggestions"],putenv:["bool putenv(string setting)","Set the value of an environment variable"],quoted_printable_decode:["string quoted_printable_decode(string str)","Convert a quoted-printable string to an 8 bit string"],quoted_printable_encode:["string quoted_printable_encode(string str) */",'PHP_FUNCTION(quoted_printable_encode) { char *str, *new_str; int str_len; size_t new_str_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &str, &str_len) != SUCCESS) { return; } if (!str_len) { RETURN_EMPTY_STRING(); } new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len); RETURN_STRINGL(new_str, new_str_len, 0); } /* }}}'],quotemeta:["string quotemeta(string str)","Quotes meta characters"],rad2deg:["float rad2deg(float number)","Converts the radian number to the equivalent number in degrees"],rand:["int rand([int min, int max])","Returns a random number"],range:["array range(mixed low, mixed high[, int step])","Create an array containing the range of integers or characters from low to high (inclusive)"],rawurldecode:["string rawurldecode(string str)","Decodes URL-encodes string"],rawurlencode:["string rawurlencode(string str)","URL-encodes string"],readdir:["string readdir([resource dir_handle])","Read directory entry from dir_handle"],readfile:["int readfile(string filename [, bool use_include_path[, resource context]])","Output a file or a URL"],readgzfile:["int readgzfile(string filename [, int use_include_path])","Output a .gz-file"],readline:["string readline([string prompt])","Reads a line"],readline_add_history:["bool readline_add_history(string prompt)","Adds a line to the history"],readline_callback_handler_install:["void readline_callback_handler_install(string prompt, mixed callback)","Initializes the readline callback interface and terminal, prints the prompt and returns immediately"],readline_callback_handler_remove:["bool readline_callback_handler_remove()","Removes a previously installed callback handler and restores terminal settings"],readline_callback_read_char:["void readline_callback_read_char()","Informs the readline callback interface that a character is ready for input"],readline_clear_history:["bool readline_clear_history(void)","Clears the history"],readline_completion_function:["bool readline_completion_function(string funcname)","Readline completion function?"],readline_info:["mixed readline_info([string varname [, string newvalue]])","Gets/sets various internal readline variables."],readline_list_history:["array readline_list_history(void)","Lists the history"],readline_on_new_line:["void readline_on_new_line(void)","Inform readline that the cursor has moved to a new line"],readline_read_history:["bool readline_read_history([string filename])","Reads the history"],readline_redisplay:["void readline_redisplay(void)","Ask readline to redraw the display"],readline_write_history:["bool readline_write_history([string filename])","Writes the history"],readlink:["string readlink(string filename)","Return the target of a symbolic link"],realpath:["string realpath(string path)","Return the resolved path"],realpath_cache_get:["bool realpath_cache_get()","Get current size of realpath cache"],realpath_cache_size:["bool realpath_cache_size()","Get current size of realpath cache"],recode_file:["bool recode_file(string request, resource input, resource output)","Recode file input into file output according to request"],recode_string:["string recode_string(string request, string str)","Recode string str according to request string"],register_shutdown_function:["void register_shutdown_function(string function_name)","Register a user-level function to be called on request termination"],register_tick_function:["bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])","Registers a tick callback function"],rename:["bool rename(string old_name, string new_name[, resource context])","Rename a file"],require:["bool require(string path)","Includes and evaluates the specified file, erroring if the file cannot be included"],require_once:["bool require_once(string path)","Includes and evaluates the specified file, erroring if the file cannot be included"],reset:["mixed reset(array array_arg)","Set array argument's internal pointer to the first element and return it"],restore_error_handler:["void restore_error_handler(void)","Restores the previously defined error handler function"],restore_exception_handler:["void restore_exception_handler(void)","Restores the previously defined exception handler function"],restore_include_path:["void restore_include_path()","Restore the value of the include_path configuration option"],rewind:["bool rewind(resource fp)","Rewind the position of a file pointer"],rewinddir:["void rewinddir([resource dir_handle])","Rewind dir_handle back to the start"],rmdir:["bool rmdir(string dirname[, resource context])","Remove a directory"],round:["float round(float number [, int precision [, int mode]])","Returns the number rounded to specified precision"],rsort:["bool rsort(array &array_arg [, int sort_flags])","Sort an array in reverse order"],rtrim:["string rtrim(string str [, string character_mask])","Removes trailing whitespace"],scandir:["array scandir(string dir [, int sorting_order [, resource context]])","List files & directories inside the specified path"],sem_acquire:["bool sem_acquire(resource id)","Acquires the semaphore with the given id, blocking if necessary"],sem_get:["resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])","Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously"],sem_release:["bool sem_release(resource id)","Releases the semaphore with the given id"],sem_remove:["bool sem_remove(resource id)","Removes semaphore from Unix systems"],serialize:["string serialize(mixed variable)","Returns a string representation of variable (which can later be unserialized)"],session_cache_expire:["int session_cache_expire([int new_cache_expire])","Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire"],session_cache_limiter:["string session_cache_limiter([string new_cache_limiter])","Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter"],session_decode:["bool session_decode(string data)","Deserializes data and reinitializes the variables"],session_destroy:["bool session_destroy(void)","Destroy the current session and all data associated with it"],session_encode:["string session_encode(void)","Serializes the current setup and returns the serialized representation"],session_get_cookie_params:["array session_get_cookie_params(void)","Return the session cookie parameters"],session_id:["string session_id([string newid])","Return the current session id. If newid is given, the session id is replaced with newid"],session_is_registered:["bool session_is_registered(string varname)","Checks if a variable is registered in session"],session_module_name:["string session_module_name([string newname])","Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname"],session_name:["string session_name([string newname])","Return the current session name. If newname is given, the session name is replaced with newname"],session_regenerate_id:["bool session_regenerate_id([bool delete_old_session])","Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session."],session_register:["bool session_register(mixed var_names [, mixed ...])","Adds varname(s) to the list of variables which are freezed at the session end"],session_save_path:["string session_save_path([string newname])","Return the current save path passed to module_name. If newname is given, the save path is replaced with newname"],session_set_cookie_params:["void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])","Set session cookie parameters"],session_set_save_handler:["void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)","Sets user-level functions"],session_start:["bool session_start(void)","Begin session - reinitializes freezed variables, registers browsers etc"],session_unregister:["bool session_unregister(string varname)","Removes varname from the list of variables which are freezed at the session end"],session_unset:["void session_unset(void)","Unset all registered variables"],session_write_close:["void session_write_close(void)","Write session data and end session"],set_error_handler:["string set_error_handler(string error_handler [, int error_types])","Sets a user-defined error handler function. Returns the previously defined error handler, or false on error"],set_exception_handler:["string set_exception_handler(callable exception_handler)","Sets a user-defined exception handler function. Returns the previously defined exception handler, or false on error"],set_include_path:["string set_include_path(string new_include_path)","Sets the include_path configuration option"],set_magic_quotes_runtime:["bool set_magic_quotes_runtime(int new_setting)","Set the current active configuration setting of magic_quotes_runtime and return previous"],set_time_limit:["bool set_time_limit(int seconds)","Sets the maximum time a script can run"],setcookie:["bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])","Send a cookie"],setlocale:["string setlocale(mixed category, string locale [, string ...])","Set locale information"],setrawcookie:["bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])","Send a cookie with no url encoding of the value"],settype:["bool settype(mixed var, string type)","Set the type of the variable"],sha1:["string sha1(string str [, bool raw_output])","Calculate the sha1 hash of a string"],sha1_file:["string sha1_file(string filename [, bool raw_output])","Calculate the sha1 hash of given filename"],shell_exec:["string shell_exec(string cmd)","Execute command via shell and return complete output as string"],shm_attach:["int shm_attach(int key [, int memsize [, int perm]])","Creates or open a shared memory segment"],shm_detach:["bool shm_detach(resource shm_identifier)","Disconnects from shared memory segment"],shm_get_var:["mixed shm_get_var(resource id, int variable_key)","Returns a variable from shared memory"],shm_has_var:["bool shm_has_var(resource id, int variable_key)","Checks whether a specific entry exists"],shm_put_var:["bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)","Inserts or updates a variable in shared memory"],shm_remove:["bool shm_remove(resource shm_identifier)","Removes shared memory from Unix systems"],shm_remove_var:["bool shm_remove_var(resource id, int variable_key)","Removes variable from shared memory"],shmop_close:["void shmop_close (int shmid)","closes a shared memory segment"],shmop_delete:["bool shmop_delete (int shmid)","mark segment for deletion"],shmop_open:["int shmop_open (int key, string flags, int mode, int size)","gets and attaches a shared memory segment"],shmop_read:["string shmop_read (int shmid, int start, int count)","reads from a shm segment"],shmop_size:["int shmop_size (int shmid)","returns the shm size"],shmop_write:["int shmop_write (int shmid, string data, int offset)","writes to a shared memory segment"],shuffle:["bool shuffle(array array_arg)","Randomly shuffle the contents of an array"],similar_text:["int similar_text(string str1, string str2 [, float percent])","Calculates the similarity between two strings"],simplexml_import_dom:["simplemxml_element simplexml_import_dom(domNode node [, string class_name])","Get a simplexml_element object from dom to allow for processing"],simplexml_load_file:["simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])","Load a filename and return a simplexml_element object to allow for processing"],simplexml_load_string:["simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])","Load a string and return a simplexml_element object to allow for processing"],sin:["float sin(float number)","Returns the sine of the number in radians"],sinh:["float sinh(float number)","Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))/2"],sleep:["void sleep(int seconds)","Delay for a given number of seconds"],smfi_addheader:["bool smfi_addheader(string headerf, string headerv)","Adds a header to the current message."],smfi_addrcpt:["bool smfi_addrcpt(string rcpt)","Add a recipient to the message envelope."],smfi_chgheader:["bool smfi_chgheader(string headerf, string headerv)","Changes a header's value for the current message."],smfi_delrcpt:["bool smfi_delrcpt(string rcpt)","Removes the named recipient from the current message's envelope."],smfi_getsymval:["string smfi_getsymval(string macro)","Returns the value of the given macro or NULL if the macro is not defined."],smfi_replacebody:["bool smfi_replacebody(string body)","Replaces the body of the current message. If called more than once, subsequent calls result in data being appended to the new body."],smfi_setflags:["void smfi_setflags(long flags)","Sets the flags describing the actions the filter may take."],smfi_setreply:["bool smfi_setreply(string rcode, string xcode, string message)","Directly set the SMTP error reply code for this connection. This code will be used on subsequent error replies resulting from actions taken by this filter."],smfi_settimeout:["void smfi_settimeout(long timeout)","Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket."],snmp2_get:["string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmp2_getnext:["string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmp2_real_walk:["array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects including their respective object id withing the specified one"],snmp2_set:["int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])","Set the value of a SNMP object"],snmp2_walk:["array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects under the specified object id"],snmp3_get:["int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_getnext:["int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_real_walk:["int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_set:["int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp3_walk:["int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])","Fetch the value of a SNMP object"],snmp_get_quick_print:["bool snmp_get_quick_print(void)","Return the current status of quick_print"],snmp_get_valueretrieval:["int snmp_get_valueretrieval()","Return the method how the SNMP values will be returned"],snmp_read_mib:["int snmp_read_mib(string filename)","Reads and parses a MIB file into the active MIB tree."],snmp_set_enum_print:["void snmp_set_enum_print(int enum_print)","Return all values that are enums with their enum value instead of the raw integer"],snmp_set_oid_output_format:["void snmp_set_oid_output_format(int oid_format)","Set the OID output format."],snmp_set_quick_print:["void snmp_set_quick_print(int quick_print)","Return all objects including their respective object id withing the specified one"],snmp_set_valueretrieval:["void snmp_set_valueretrieval(int method)","Specify the method how the SNMP values will be returned"],snmpget:["string snmpget(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmpgetnext:["string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])","Fetch a SNMP object"],snmprealwalk:["array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects including their respective object id withing the specified one"],snmpset:["int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])","Set the value of a SNMP object"],snmpwalk:["array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])","Return all objects under the specified object id"],socket_accept:["resource socket_accept(resource socket)","Accepts a connection on the listening socket fd"],socket_bind:["bool socket_bind(resource socket, string addr [, int port])","Binds an open socket to a listening port, port is only specified in AF_INET family."],socket_clear_error:["void socket_clear_error([resource socket])","Clears the error on the socket or the last error code."],socket_close:["void socket_close(resource socket)","Closes a file descriptor"],socket_connect:["bool socket_connect(resource socket, string addr [, int port])","Opens a connection to addr:port on the socket specified by socket"],socket_create:["resource socket_create(int domain, int type, int protocol)","Creates an endpoint for communication in the domain specified by domain, of type specified by type"],socket_create_listen:["resource socket_create_listen(int port[, int backlog])","Opens a socket on port to accept connections"],socket_create_pair:["bool socket_create_pair(int domain, int type, int protocol, array &fd)","Creates a pair of indistinguishable sockets and stores them in fds."],socket_get_option:["mixed socket_get_option(resource socket, int level, int optname)","Gets socket options for the socket"],socket_getpeername:["bool socket_getpeername(resource socket, string &addr[, int &port])","Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type."],socket_getsockname:["bool socket_getsockname(resource socket, string &addr[, int &port])","Queries the remote side of the given socket which may either result in host/port or in a UNIX filesystem path, dependent on its type."],socket_last_error:["int socket_last_error([resource socket])","Returns the last socket error (either the last used or the provided socket resource)"],socket_listen:["bool socket_listen(resource socket[, int backlog])","Sets the maximum number of connections allowed to be waited for on the socket specified by fd"],socket_read:["string socket_read(resource socket, int length [, int type])","Reads a maximum of length bytes from socket"],socket_recv:["int socket_recv(resource socket, string &buf, int len, int flags)","Receives data from a connected socket"],socket_recvfrom:["int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])","Receives data from a socket, connected or not"],socket_select:["int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])","Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec"],socket_send:["int socket_send(resource socket, string buf, int len, int flags)","Sends data to a connected socket"],socket_sendto:["int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])","Sends a message to a socket, whether it is connected or not"],socket_set_block:["bool socket_set_block(resource socket)","Sets blocking mode on a socket resource"],socket_set_nonblock:["bool socket_set_nonblock(resource socket)","Sets nonblocking mode on a socket resource"],socket_set_option:["bool socket_set_option(resource socket, int level, int optname, int|array optval)","Sets socket options for the socket"],socket_shutdown:["bool socket_shutdown(resource socket[, int how])","Shuts down a socket for receiving, sending, or both."],socket_strerror:["string socket_strerror(int errno)","Returns a string describing an error"],socket_write:["int socket_write(resource socket, string buf[, int length])","Writes the buffer to the socket resource, length is optional"],solid_fetch_prev:["bool solid_fetch_prev(resource result_id)",""],sort:["bool sort(array &array_arg [, int sort_flags])","Sort an array"],soundex:["string soundex(string str)","Calculate the soundex key of a string"],spl_autoload:["void spl_autoload(string class_name [, string file_extensions])","Default implementation for __autoload()"],spl_autoload_call:["void spl_autoload_call(string class_name)","Try all registerd autoload function to load the requested class"],spl_autoload_extensions:["string spl_autoload_extensions([string file_extensions])","Register and return default file extensions for spl_autoload"],spl_autoload_functions:["false|array spl_autoload_functions()","Return all registered __autoload() functionns"],spl_autoload_register:['bool spl_autoload_register([mixed autoload_function = "spl_autoload" [, throw = true [, prepend]]])',"Register given function as __autoload() implementation"],spl_autoload_unregister:["bool spl_autoload_unregister(mixed autoload_function)","Unregister given function as __autoload() implementation"],spl_classes:["array spl_classes()","Return an array containing the names of all clsses and interfaces defined in SPL"],spl_object_hash:["string spl_object_hash(object obj)","Return hash id for given object"],split:["array split(string pattern, string string [, int limit])","Split string into array by regular expression"],spliti:["array spliti(string pattern, string string [, int limit])","Split string into array by regular expression case-insensitive"],sprintf:["string sprintf(string format [, mixed arg1 [, mixed ...]])","Return a formatted string"],sql_regcase:["string sql_regcase(string string)","Make regular expression for case insensitive match"],sqlite_array_query:["array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])","Executes a query against a given database and returns an array of arrays."],sqlite_busy_timeout:["void sqlite_busy_timeout(resource db, int ms)","Set busy timeout duration. If ms <= 0, all busy handlers are disabled."],sqlite_changes:["int sqlite_changes(resource db)","Returns the number of rows that were changed by the most recent SQL statement."],sqlite_close:["void sqlite_close(resource db)","Closes an open sqlite database."],sqlite_column:["mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])","Fetches a column from the current row of a result set."],sqlite_create_aggregate:["bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])","Registers an aggregate function for queries."],sqlite_create_function:["bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])",'Registers a "regular" function for queries.'],sqlite_current:["array sqlite_current(resource result [, int result_type [, bool decode_binary]])","Fetches the current row from a result set as an array."],sqlite_error_string:["string sqlite_error_string(int error_code)","Returns the textual description of an error code."],sqlite_escape_string:["string sqlite_escape_string(string item)","Escapes a string for use as a query parameter."],sqlite_exec:["boolean sqlite_exec(string query, resource db[, string &error_message])","Executes a result-less query against a given database"],sqlite_factory:["object sqlite_factory(string filename [, int mode [, string &error_message]])","Opens a SQLite database and creates an object for it. Will create the database if it does not exist."],sqlite_fetch_all:["array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])","Fetches all rows from a result set as an array of arrays."],sqlite_fetch_array:["array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])","Fetches the next row from a result set as an array."],sqlite_fetch_column_types:["resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])","Return an array of column types from a particular table."],sqlite_fetch_object:["object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])","Fetches the next row from a result set as an object."],sqlite_fetch_single:["string sqlite_fetch_single(resource result [, bool decode_binary])","Fetches the first column of a result set as a string."],sqlite_field_name:["string sqlite_field_name(resource result, int field_index)","Returns the name of a particular field of a result set."],sqlite_has_prev:["bool sqlite_has_prev(resource result)","* Returns whether a previous row is available."],sqlite_key:["int sqlite_key(resource result)","Return the current row index of a buffered result."],sqlite_last_error:["int sqlite_last_error(resource db)","Returns the error code of the last error for a database."],sqlite_last_insert_rowid:["int sqlite_last_insert_rowid(resource db)","Returns the rowid of the most recently inserted row."],sqlite_libencoding:["string sqlite_libencoding()","Returns the encoding (iso8859 or UTF-8) of the linked SQLite library."],sqlite_libversion:["string sqlite_libversion()","Returns the version of the linked SQLite library."],sqlite_next:["bool sqlite_next(resource result)","Seek to the next row number of a result set."],sqlite_num_fields:["int sqlite_num_fields(resource result)","Returns the number of fields in a result set."],sqlite_num_rows:["int sqlite_num_rows(resource result)","Returns the number of rows in a buffered result set."],sqlite_open:["resource sqlite_open(string filename [, int mode [, string &error_message]])","Opens a SQLite database. Will create the database if it does not exist."],sqlite_popen:["resource sqlite_popen(string filename [, int mode [, string &error_message]])","Opens a persistent handle to a SQLite database. Will create the database if it does not exist."],sqlite_prev:["bool sqlite_prev(resource result)","* Seek to the previous row number of a result set."],sqlite_query:["resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])","Executes a query against a given database and returns a result handle."],sqlite_rewind:["bool sqlite_rewind(resource result)","Seek to the first row number of a buffered result set."],sqlite_seek:["bool sqlite_seek(resource result, int row)","Seek to a particular row number of a buffered result set."],sqlite_single_query:["array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])","Executes a query and returns either an array for one single column or the value of the first row."],sqlite_udf_decode_binary:["string sqlite_udf_decode_binary(string data)","Decode binary encoding on a string parameter passed to an UDF."],sqlite_udf_encode_binary:["string sqlite_udf_encode_binary(string data)","Apply binary encoding (if required) to a string to return from an UDF."],sqlite_unbuffered_query:["resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])","Executes a query that does not prefetch and buffer all data."],sqlite_valid:["bool sqlite_valid(resource result)","Returns whether more rows are available."],sqrt:["float sqrt(float number)","Returns the square root of the number"],srand:["void srand([int seed])","Seeds random number generator"],sscanf:["mixed sscanf(string str, string format [, string ...])","Implements an ANSI C compatible sscanf"],stat:["array stat(string filename)","Give information about a file"],str_getcsv:["array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])","Parse a CSV string into an array"],str_ireplace:["mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])","Replaces all occurrences of search in haystack with replace / case-insensitive"],str_pad:["string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])","Returns input string padded on the left or right to specified length with pad_string"],str_repeat:["string str_repeat(string input, int mult)","Returns the input string repeat mult times"],str_replace:["mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])","Replaces all occurrences of search in haystack with replace"],str_rot13:["string str_rot13(string str)","Perform the rot13 transform on a string"],str_shuffle:["void str_shuffle(string str)","Shuffles string. One permutation of all possible is created"],str_split:["array str_split(string str [, int split_length])","Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long."],str_word_count:["mixed str_word_count(string str, [int format [, string charlist]])",'Counts the number of words inside a string. If format of 1 is specified, then the function will return an array containing all the words found inside the string. If format of 2 is specified, then the function will return an associated array where the position of the word is the key and the word itself is the value. For the purpose of this function, \'word\' is defined as a locale dependent string containing alphabetic characters, which also may contain, but not start with "\'" and "-" characters.'],strcasecmp:["int strcasecmp(string str1, string str2)","Binary safe case-insensitive string comparison"],strchr:["string strchr(string haystack, string needle)","An alias for strstr"],strcmp:["int strcmp(string str1, string str2)","Binary safe string comparison"],strcoll:["int strcoll(string str1, string str2)","Compares two strings using the current locale"],strcspn:["int strcspn(string str, string mask [, start [, len]])","Finds length of initial segment consisting entirely of characters not found in mask. If start or/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)"],stream_bucket_append:["void stream_bucket_append(resource brigade, resource bucket)","Append bucket to brigade"],stream_bucket_make_writeable:["object stream_bucket_make_writeable(resource brigade)","Return a bucket object from the brigade for operating on"],stream_bucket_new:["resource stream_bucket_new(resource stream, string buffer)","Create a new bucket for use on the current stream"],stream_bucket_prepend:["void stream_bucket_prepend(resource brigade, resource bucket)","Prepend bucket to brigade"],stream_context_create:["resource stream_context_create([array options[, array params]])","Create a file context and optionally set parameters"],stream_context_get_default:["resource stream_context_get_default([array options])","Get a handle on the default file/stream context and optionally set parameters"],stream_context_get_options:["array stream_context_get_options(resource context|resource stream)","Retrieve options for a stream/wrapper/context"],stream_context_get_params:["array stream_context_get_params(resource context|resource stream)","Get parameters of a file context"],stream_context_set_default:["resource stream_context_set_default(array options)","Set default file/stream context, returns the context as a resource"],stream_context_set_option:["bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)","Set an option for a wrapper"],stream_context_set_params:["bool stream_context_set_params(resource context|resource stream, array options)","Set parameters for a file context"],stream_copy_to_stream:["long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])","Reads up to maxlen bytes from source stream and writes them to dest stream."],stream_filter_append:["resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])","Append a filter to a stream"],stream_filter_prepend:["resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])","Prepend a filter to a stream"],stream_filter_register:["bool stream_filter_register(string filtername, string classname)","Registers a custom filter handler class"],stream_filter_remove:["bool stream_filter_remove(resource stream_filter)","Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource"],stream_get_contents:["string stream_get_contents(resource source [, long maxlen [, long offset]])","Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string."],stream_get_filters:["array stream_get_filters(void)","Returns a list of registered filters"],stream_get_line:["string stream_get_line(resource stream, int maxlen [, string ending])","Read up to maxlen bytes from a stream or until the ending string is found"],stream_get_meta_data:["array stream_get_meta_data(resource fp)","Retrieves header/meta data from streams/file pointers"],stream_get_transports:["array stream_get_transports()","Retrieves list of registered socket transports"],stream_get_wrappers:["array stream_get_wrappers()","Retrieves list of registered stream wrappers"],stream_is_local:["bool stream_is_local(resource stream|string url)",""],stream_resolve_include_path:["string stream_resolve_include_path(string filename)","Determine what file will be opened by calls to fopen() with a relative path"],stream_select:["int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])","Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec"],stream_set_blocking:["bool stream_set_blocking(resource socket, int mode)","Set blocking/non-blocking mode on a socket or stream"],stream_set_timeout:["bool stream_set_timeout(resource stream, int seconds [, int microseconds])","Set timeout on stream read to seconds + microseonds"],stream_set_write_buffer:["int stream_set_write_buffer(resource fp, int buffer)","Set file write buffer"],stream_socket_accept:["resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])","Accept a client connection from a server socket"],stream_socket_client:["resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])","Open a client connection to a remote address"],stream_socket_enable_crypto:["int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])","Enable or disable a specific kind of crypto on the stream"],stream_socket_get_name:["string stream_socket_get_name(resource stream, bool want_peer)","Returns either the locally bound or remote name for a socket stream"],stream_socket_pair:["array stream_socket_pair(int domain, int type, int protocol)","Creates a pair of connected, indistinguishable socket streams"],stream_socket_recvfrom:["string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])","Receives data from a socket stream"],stream_socket_sendto:["long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])","Send data to a socket stream. If target_addr is specified it must be in dotted quad (or [ipv6]) format"],stream_socket_server:["resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])","Create a server socket bound to localaddress"],stream_socket_shutdown:["int stream_socket_shutdown(resource stream, int how)","causes all or part of a full-duplex connection on the socket associated with stream to be shut down. If how is SHUT_RD, further receptions will be disallowed. If how is SHUT_WR, further transmissions will be disallowed. If how is SHUT_RDWR, further receptions and transmissions will be disallowed."],stream_supports_lock:["bool stream_supports_lock(resource stream)","Tells wether the stream supports locking through flock()."],stream_wrapper_register:["bool stream_wrapper_register(string protocol, string classname[, integer flags])","Registers a custom URL protocol handler class"],stream_wrapper_restore:["bool stream_wrapper_restore(string protocol)","Restore the original protocol handler, overriding if necessary"],stream_wrapper_unregister:["bool stream_wrapper_unregister(string protocol)","Unregister a wrapper for the life of the current request."],strftime:["string strftime(string format [, int timestamp])","Format a local time/date according to locale settings"],strip_tags:["string strip_tags(string str [, string allowable_tags])","Strips HTML and PHP tags from a string"],stripcslashes:["string stripcslashes(string str)","Strips backslashes from a string. Uses C-style conventions"],stripos:["int stripos(string haystack, string needle [, int offset])","Finds position of first occurrence of a string within another, case insensitive"],stripslashes:["string stripslashes(string str)","Strips backslashes from a string"],stristr:["string stristr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another, case insensitive"],strlen:["int strlen(string str)","Get string length"],strnatcasecmp:["int strnatcasecmp(string s1, string s2)","Returns the result of case-insensitive string comparison using 'natural' algorithm"],strnatcmp:["int strnatcmp(string s1, string s2)","Returns the result of string comparison using 'natural' algorithm"],strncasecmp:["int strncasecmp(string str1, string str2, int len)","Binary safe string comparison"],strncmp:["int strncmp(string str1, string str2, int len)","Binary safe string comparison"],strpbrk:["array strpbrk(string haystack, string char_list)","Search a string for any of a set of characters"],strpos:["int strpos(string haystack, string needle [, int offset])","Finds position of first occurrence of a string within another"],strptime:["string strptime(string timestamp, string format)","Parse a time/date generated with strftime()"],strrchr:["string strrchr(string haystack, string needle)","Finds the last occurrence of a character in a string within another"],strrev:["string strrev(string str)","Reverse a string"],strripos:["int strripos(string haystack, string needle [, int offset])","Finds position of last occurrence of a string within another string"],strrpos:["int strrpos(string haystack, string needle [, int offset])","Finds position of last occurrence of a string within another string"],strspn:["int strspn(string str, string mask [, start [, len]])","Finds length of initial segment consisting entirely of characters found in mask. If start or/and length is provided works like strspn(substr($s,$start,$len),$good_chars)"],strstr:["string strstr(string haystack, string needle[, bool part])","Finds first occurrence of a string within another"],strtok:["string strtok([string str,] string token)","Tokenize a string"],strtolower:["string strtolower(string str)","Makes a string lowercase"],strtotime:["int strtotime(string time [, int now ])","Convert string representation of date and time to a timestamp"],strtoupper:["string strtoupper(string str)","Makes a string uppercase"],strtr:["string strtr(string str, string from[, string to])","Translates characters in str using given translation tables"],strval:["string strval(mixed var)","Get the string value of a variable"],substr:["string substr(string str, int start [, int length])","Returns part of a string"],substr_compare:["int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])","Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters"],substr_count:["int substr_count(string haystack, string needle [, int offset [, int length]])","Returns the number of times a substring occurs in the string"],substr_replace:["mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])","Replaces part of a string with another string"],sybase_affected_rows:["int sybase_affected_rows([resource link_id])","Get number of affected rows in last query"],sybase_close:["bool sybase_close([resource link_id])","Close Sybase connection"],sybase_connect:["int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])","Open Sybase server connection"],sybase_data_seek:["bool sybase_data_seek(resource result, int offset)","Move internal row pointer"],sybase_deadlock_retry_count:["void sybase_deadlock_retry_count(int retry_count)","Sets deadlock retry count"],sybase_fetch_array:["array sybase_fetch_array(resource result)","Fetch row as array"],sybase_fetch_assoc:["array sybase_fetch_assoc(resource result)","Fetch row as array without numberic indices"],sybase_fetch_field:["object sybase_fetch_field(resource result [, int offset])","Get field information"],sybase_fetch_object:["object sybase_fetch_object(resource result [, mixed object])","Fetch row as object"],sybase_fetch_row:["array sybase_fetch_row(resource result)","Get row as enumerated array"],sybase_field_seek:["bool sybase_field_seek(resource result, int offset)","Set field offset"],sybase_free_result:["bool sybase_free_result(resource result)","Free result memory"],sybase_get_last_message:["string sybase_get_last_message(void)","Returns the last message from server (over min_message_severity)"],sybase_min_client_severity:["void sybase_min_client_severity(int severity)","Sets minimum client severity"],sybase_min_server_severity:["void sybase_min_server_severity(int severity)","Sets minimum server severity"],sybase_num_fields:["int sybase_num_fields(resource result)","Get number of fields in result"],sybase_num_rows:["int sybase_num_rows(resource result)","Get number of rows in result"],sybase_pconnect:["int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])","Open persistent Sybase connection"],sybase_query:["int sybase_query(string query [, resource link_id])","Send Sybase query"],sybase_result:["string sybase_result(resource result, int row, mixed field)","Get result data"],sybase_select_db:["bool sybase_select_db(string database [, resource link_id])","Select Sybase database"],sybase_set_message_handler:["bool sybase_set_message_handler(mixed error_func [, resource connection])","Set the error handler, to be called when a server message is raised. If error_func is NULL the handler will be deleted"],sybase_unbuffered_query:["int sybase_unbuffered_query(string query [, resource link_id])","Send Sybase query"],symlink:["int symlink(string target, string link)","Create a symbolic link"],sys_get_temp_dir:["string sys_get_temp_dir()","Returns directory path used for temporary files"],sys_getloadavg:["array sys_getloadavg()",""],syslog:["bool syslog(int priority, string message)","Generate a system log message"],system:["int system(string command [, int &return_value])","Execute an external program and display output"],tan:["float tan(float number)","Returns the tangent of the number in radians"],tanh:["float tanh(float number)","Returns the hyperbolic tangent of the number, defined as sinh(number)/cosh(number)"],tempnam:["string tempnam(string dir, string prefix)","Create a unique filename in a directory"],textdomain:["string textdomain(string domain)",'Set the textdomain to "domain". Returns the current domain'],tidy_access_count:["int tidy_access_count()","Returns the Number of Tidy accessibility warnings encountered for specified document."],tidy_clean_repair:["boolean tidy_clean_repair()","Execute configured cleanup and repair operations on parsed markup"],tidy_config_count:["int tidy_config_count()","Returns the Number of Tidy configuration errors encountered for specified document."],tidy_diagnose:["boolean tidy_diagnose()","Run configured diagnostics on parsed and repaired markup."],tidy_error_count:["int tidy_error_count()","Returns the Number of Tidy errors encountered for specified document."],tidy_get_body:["TidyNode tidy_get_body(resource tidy)","Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree"],tidy_get_config:["array tidy_get_config()","Get current Tidy configuarion"],tidy_get_error_buffer:["string tidy_get_error_buffer([boolean detailed])","Return warnings and errors which occured parsing the specified document"],tidy_get_head:["TidyNode tidy_get_head()","Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree"],tidy_get_html:["TidyNode tidy_get_html()","Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree"],tidy_get_html_ver:["int tidy_get_html_ver()","Get the Detected HTML version for the specified document."],tidy_get_opt_doc:["string tidy_get_opt_doc(tidy resource, string optname)","Returns the documentation for the given option name"],tidy_get_output:["string tidy_get_output()","Return a string representing the parsed tidy markup"],tidy_get_release:["string tidy_get_release()","Get release date (version) for Tidy library"],tidy_get_root:["TidyNode tidy_get_root()","Returns a TidyNode Object representing the root of the tidy parse tree"],tidy_get_status:["int tidy_get_status()","Get status of specfied document."],tidy_getopt:["mixed tidy_getopt(string option)","Returns the value of the specified configuration option for the tidy document."],tidy_is_xhtml:["boolean tidy_is_xhtml()","Indicates if the document is a XHTML document."],tidy_is_xml:["boolean tidy_is_xml()","Indicates if the document is a generic (non HTML/XHTML) XML document."],tidy_parse_file:["boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])","Parse markup in file or URI"],tidy_parse_string:["bool tidy_parse_string(string input [, mixed config_options [, string encoding]])","Parse a document stored in a string"],tidy_repair_file:["boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])","Repair a file using an optionally provided configuration file"],tidy_repair_string:["boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])","Repair a string using an optionally provided configuration file"],tidy_warning_count:["int tidy_warning_count()","Returns the Number of Tidy warnings encountered for specified document."],time:["int time(void)","Return current UNIX timestamp"],time_nanosleep:["mixed time_nanosleep(long seconds, long nanoseconds)","Delay for a number of seconds and nano seconds"],time_sleep_until:["mixed time_sleep_until(float timestamp)","Make the script sleep until the specified time"],timezone_abbreviations_list:["array timezone_abbreviations_list()","Returns associative array containing dst, offset and the timezone name"],timezone_identifiers_list:["array timezone_identifiers_list([long what[, string country]])","Returns numerically index array with all timezone identifiers."],timezone_location_get:["array timezone_location_get()","Returns location information for a timezone, including country code, latitude/longitude and comments"],timezone_name_from_abbr:["string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])","Returns the timezone name from abbrevation"],timezone_name_get:["string timezone_name_get(DateTimeZone object)","Returns the name of the timezone."],timezone_offset_get:["long timezone_offset_get(DateTimeZone object, DateTime object)","Returns the timezone offset."],timezone_open:["DateTimeZone timezone_open(string timezone)","Returns new DateTimeZone object"],timezone_transitions_get:["array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])","Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone."],timezone_version_get:["array timezone_version_get()","Returns the Olson database version number."],tmpfile:["resource tmpfile(void)","Create a temporary file that will be deleted automatically after use"],token_get_all:["array token_get_all(string source)",""],token_name:["string token_name(int type)",""],touch:["bool touch(string filename [, int time [, int atime]])","Set modification time of file"],trigger_error:["void trigger_error(string messsage [, int error_type])","Generates a user-level error/warning/notice message"],trim:["string trim(string str [, string character_mask])","Strips whitespace from the beginning and end of a string"],uasort:["bool uasort(array array_arg, string cmp_function)","Sort an array with a user-defined comparison function and maintain index association"],ucfirst:["string ucfirst(string str)","Make a string's first character lowercase"],ucwords:["string ucwords(string str)","Uppercase the first character of every word in a string"],uksort:["bool uksort(array array_arg, string cmp_function)","Sort an array by keys using a user-defined comparison function"],umask:["int umask([int mask])","Return or change the umask"],uniqid:["string uniqid([string prefix [, bool more_entropy]])","Generates a unique ID"],unixtojd:["int unixtojd([int timestamp])","Convert UNIX timestamp to Julian Day"],unlink:["bool unlink(string filename[, context context])","Delete a file"],unpack:["array unpack(string format, string input)","Unpack binary string into named array elements according to format argument"],unregister_tick_function:["void unregister_tick_function(string function_name)","Unregisters a tick callback function"],unserialize:["mixed unserialize(string variable_representation)","Takes a string representation of variable and recreates it"],unset:["void unset (mixed var [, mixed var])","Unset a given variable"],urldecode:["string urldecode(string str)","Decodes URL-encoded string"],urlencode:["string urlencode(string str)","URL-encodes string"],usleep:["void usleep(int micro_seconds)","Delay for a given number of micro seconds"],usort:["bool usort(array array_arg, string cmp_function)","Sort an array by values using a user-defined comparison function"],utf8_decode:["string utf8_decode(string data)","Converts a UTF-8 encoded string to ISO-8859-1"],utf8_encode:["string utf8_encode(string data)","Encodes an ISO-8859-1 string to UTF-8"],var_dump:["void var_dump(mixed var)","Dumps a string representation of variable to output"],var_export:["mixed var_export(mixed var [, bool return])","Outputs or returns a string representation of a variable"],variant_abs:["mixed variant_abs(mixed left)","Returns the absolute value of a variant"],variant_add:["mixed variant_add(mixed left, mixed right)",'"Adds" two variant values together and returns the result'],variant_and:["mixed variant_and(mixed left, mixed right)","performs a bitwise AND operation between two variants and returns the result"],variant_cast:["object variant_cast(object variant, int type)","Convert a variant into a new variant object of another type"],variant_cat:["mixed variant_cat(mixed left, mixed right)","concatenates two variant values together and returns the result"],variant_cmp:["int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])","Compares two variants"],variant_date_from_timestamp:["object variant_date_from_timestamp(int timestamp)","Returns a variant date representation of a unix timestamp"],variant_date_to_timestamp:["int variant_date_to_timestamp(object variant)","Converts a variant date/time value to unix timestamp"],variant_div:["mixed variant_div(mixed left, mixed right)","Returns the result from dividing two variants"],variant_eqv:["mixed variant_eqv(mixed left, mixed right)","Performs a bitwise equivalence on two variants"],variant_fix:["mixed variant_fix(mixed left)","Returns the integer part ? of a variant"],variant_get_type:["int variant_get_type(object variant)","Returns the VT_XXX type code for a variant"],variant_idiv:["mixed variant_idiv(mixed left, mixed right)","Converts variants to integers and then returns the result from dividing them"],variant_imp:["mixed variant_imp(mixed left, mixed right)","Performs a bitwise implication on two variants"],variant_int:["mixed variant_int(mixed left)","Returns the integer portion of a variant"],variant_mod:["mixed variant_mod(mixed left, mixed right)","Divides two variants and returns only the remainder"],variant_mul:["mixed variant_mul(mixed left, mixed right)","multiplies the values of the two variants and returns the result"],variant_neg:["mixed variant_neg(mixed left)","Performs logical negation on a variant"],variant_not:["mixed variant_not(mixed left)","Performs bitwise not negation on a variant"],variant_or:["mixed variant_or(mixed left, mixed right)","Performs a logical disjunction on two variants"],variant_pow:["mixed variant_pow(mixed left, mixed right)","Returns the result of performing the power function with two variants"],variant_round:["mixed variant_round(mixed left, int decimals)","Rounds a variant to the specified number of decimal places"],variant_set:["void variant_set(object variant, mixed value)","Assigns a new value for a variant object"],variant_set_type:["void variant_set_type(object variant, int type)",'Convert a variant into another type. Variant is modified "in-place"'],variant_sub:["mixed variant_sub(mixed left, mixed right)","subtracts the value of the right variant from the left variant value and returns the result"],variant_xor:["mixed variant_xor(mixed left, mixed right)","Performs a logical exclusion on two variants"],version_compare:["int version_compare(string ver1, string ver2 [, string oper])",'Compares two "PHP-standardized" version number strings'],vfprintf:["int vfprintf(resource stream, string format, array args)","Output a formatted string into a stream"],virtual:["bool virtual(string filename)","Perform an Apache sub-request"],vprintf:["int vprintf(string format, array args)","Output a formatted string"],vsprintf:["string vsprintf(string format, array args)","Return a formatted string"],wddx_add_vars:["int wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])","Serializes given variables and adds them to packet given by packet_id"],wddx_deserialize:["mixed wddx_deserialize(mixed packet)","Deserializes given packet and returns a PHP value"],wddx_packet_end:["string wddx_packet_end(resource packet_id)","Ends specified WDDX packet and returns the string containing the packet"],wddx_packet_start:["resource wddx_packet_start([string comment])","Starts a WDDX packet with optional comment and returns the packet id"],wddx_serialize_value:["string wddx_serialize_value(mixed var [, string comment])","Creates a new packet and serializes the given value"],wddx_serialize_vars:["string wddx_serialize_vars(mixed var_name [, mixed ...])","Creates a new packet and serializes given variables into a struct"],wordwrap:["string wordwrap(string str [, int width [, string break [, boolean cut]]])","Wraps buffer to selected number of characters using string break char"],xml_error_string:["string xml_error_string(int code)","Get XML parser error string"],xml_get_current_byte_index:["int xml_get_current_byte_index(resource parser)","Get current byte index for an XML parser"],xml_get_current_column_number:["int xml_get_current_column_number(resource parser)","Get current column number for an XML parser"],xml_get_current_line_number:["int xml_get_current_line_number(resource parser)","Get current line number for an XML parser"],xml_get_error_code:["int xml_get_error_code(resource parser)","Get XML parser error code"],xml_parse:["int xml_parse(resource parser, string data [, int isFinal])","Start parsing an XML document"],xml_parse_into_struct:["int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])","Parsing a XML document"],xml_parser_create:["resource xml_parser_create([string encoding])","Create an XML parser"],xml_parser_create_ns:["resource xml_parser_create_ns([string encoding [, string sep]])","Create an XML parser"],xml_parser_free:["int xml_parser_free(resource parser)","Free an XML parser"],xml_parser_get_option:["int xml_parser_get_option(resource parser, int option)","Get options from an XML parser"],xml_parser_set_option:["int xml_parser_set_option(resource parser, int option, mixed value)","Set options in an XML parser"],xml_set_character_data_handler:["int xml_set_character_data_handler(resource parser, string hdl)","Set up character data handler"],xml_set_default_handler:["int xml_set_default_handler(resource parser, string hdl)","Set up default handler"],xml_set_element_handler:["int xml_set_element_handler(resource parser, string shdl, string ehdl)","Set up start and end element handlers"],xml_set_end_namespace_decl_handler:["int xml_set_end_namespace_decl_handler(resource parser, string hdl)","Set up character data handler"],xml_set_external_entity_ref_handler:["int xml_set_external_entity_ref_handler(resource parser, string hdl)","Set up external entity reference handler"],xml_set_notation_decl_handler:["int xml_set_notation_decl_handler(resource parser, string hdl)","Set up notation declaration handler"],xml_set_object:["int xml_set_object(resource parser, object &obj)","Set up object which should be used for callbacks"],xml_set_processing_instruction_handler:["int xml_set_processing_instruction_handler(resource parser, string hdl)","Set up processing instruction (PI) handler"],xml_set_start_namespace_decl_handler:["int xml_set_start_namespace_decl_handler(resource parser, string hdl)","Set up character data handler"],xml_set_unparsed_entity_decl_handler:["int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)","Set up unparsed entity declaration handler"],xmlrpc_decode:["array xmlrpc_decode(string xml [, string encoding])","Decodes XML into native PHP types"],xmlrpc_decode_request:["array xmlrpc_decode_request(string xml, string& method [, string encoding])","Decodes XML into native PHP types"],xmlrpc_encode:["string xmlrpc_encode(mixed value)","Generates XML for a PHP value"],xmlrpc_encode_request:["string xmlrpc_encode_request(string method, mixed params [, array output_options])","Generates XML for a method request"],xmlrpc_get_type:["string xmlrpc_get_type(mixed value)","Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings"],xmlrpc_is_fault:["bool xmlrpc_is_fault(array)","Determines if an array value represents an XMLRPC fault."],xmlrpc_parse_method_descriptions:["array xmlrpc_parse_method_descriptions(string xml)","Decodes XML into a list of method descriptions"],xmlrpc_server_add_introspection_data:["int xmlrpc_server_add_introspection_data(resource server, array desc)","Adds introspection documentation"],xmlrpc_server_call_method:["mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])","Parses XML requests and call methods"],xmlrpc_server_create:["resource xmlrpc_server_create(void)","Creates an xmlrpc server"],xmlrpc_server_destroy:["int xmlrpc_server_destroy(resource server)","Destroys server resources"],xmlrpc_server_register_introspection_callback:["bool xmlrpc_server_register_introspection_callback(resource server, string function)","Register a PHP function to generate documentation"],xmlrpc_server_register_method:["bool xmlrpc_server_register_method(resource server, string method_name, string function)","Register a PHP function to handle method matching method_name"],xmlrpc_set_type:["bool xmlrpc_set_type(string value, string type)","Sets xmlrpc type, base64 or datetime, for a PHP string value"],xmlwriter_end_attribute:["bool xmlwriter_end_attribute(resource xmlwriter)","End attribute - returns FALSE on error"],xmlwriter_end_cdata:["bool xmlwriter_end_cdata(resource xmlwriter)","End current CDATA - returns FALSE on error"],xmlwriter_end_comment:["bool xmlwriter_end_comment(resource xmlwriter)","Create end comment - returns FALSE on error"],xmlwriter_end_document:["bool xmlwriter_end_document(resource xmlwriter)","End current document - returns FALSE on error"],xmlwriter_end_dtd:["bool xmlwriter_end_dtd(resource xmlwriter)","End current DTD - returns FALSE on error"],xmlwriter_end_dtd_attlist:["bool xmlwriter_end_dtd_attlist(resource xmlwriter)","End current DTD AttList - returns FALSE on error"],xmlwriter_end_dtd_element:["bool xmlwriter_end_dtd_element(resource xmlwriter)","End current DTD element - returns FALSE on error"],xmlwriter_end_dtd_entity:["bool xmlwriter_end_dtd_entity(resource xmlwriter)","End current DTD Entity - returns FALSE on error"],xmlwriter_end_element:["bool xmlwriter_end_element(resource xmlwriter)","End current element - returns FALSE on error"],xmlwriter_end_pi:["bool xmlwriter_end_pi(resource xmlwriter)","End current PI - returns FALSE on error"],xmlwriter_flush:["mixed xmlwriter_flush(resource xmlwriter [,bool empty])","Output current buffer"],xmlwriter_full_end_element:["bool xmlwriter_full_end_element(resource xmlwriter)","End current element - returns FALSE on error"],xmlwriter_open_memory:["resource xmlwriter_open_memory()","Create new xmlwriter using memory for string output"],xmlwriter_open_uri:["resource xmlwriter_open_uri(resource xmlwriter, string source)","Create new xmlwriter using source uri for output"],xmlwriter_output_memory:["string xmlwriter_output_memory(resource xmlwriter [,bool flush])","Output current buffer as string"],xmlwriter_set_indent:["bool xmlwriter_set_indent(resource xmlwriter, bool indent)","Toggle indentation on/off - returns FALSE on error"],xmlwriter_set_indent_string:["bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)","Set string used for indenting - returns FALSE on error"],xmlwriter_start_attribute:["bool xmlwriter_start_attribute(resource xmlwriter, string name)","Create start attribute - returns FALSE on error"],xmlwriter_start_attribute_ns:["bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)","Create start namespaced attribute - returns FALSE on error"],xmlwriter_start_cdata:["bool xmlwriter_start_cdata(resource xmlwriter)","Create start CDATA tag - returns FALSE on error"],xmlwriter_start_comment:["bool xmlwriter_start_comment(resource xmlwriter)","Create start comment - returns FALSE on error"],xmlwriter_start_document:["bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)","Create document tag - returns FALSE on error"],xmlwriter_start_dtd:["bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)","Create start DTD tag - returns FALSE on error"],xmlwriter_start_dtd_attlist:["bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)","Create start DTD AttList - returns FALSE on error"],xmlwriter_start_dtd_element:["bool xmlwriter_start_dtd_element(resource xmlwriter, string name)","Create start DTD element - returns FALSE on error"],xmlwriter_start_dtd_entity:["bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)","Create start DTD Entity - returns FALSE on error"],xmlwriter_start_element:["bool xmlwriter_start_element(resource xmlwriter, string name)","Create start element tag - returns FALSE on error"],xmlwriter_start_element_ns:["bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)","Create start namespaced element tag - returns FALSE on error"],xmlwriter_start_pi:["bool xmlwriter_start_pi(resource xmlwriter, string target)","Create start PI tag - returns FALSE on error"],xmlwriter_text:["bool xmlwriter_text(resource xmlwriter, string content)","Write text - returns FALSE on error"],xmlwriter_write_attribute:["bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)","Write full attribute - returns FALSE on error"],xmlwriter_write_attribute_ns:["bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)","Write full namespaced attribute - returns FALSE on error"],xmlwriter_write_cdata:["bool xmlwriter_write_cdata(resource xmlwriter, string content)","Write full CDATA tag - returns FALSE on error"],xmlwriter_write_comment:["bool xmlwriter_write_comment(resource xmlwriter, string content)","Write full comment tag - returns FALSE on error"],xmlwriter_write_dtd:["bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)","Write full DTD tag - returns FALSE on error"],xmlwriter_write_dtd_attlist:["bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)","Write full DTD AttList tag - returns FALSE on error"],xmlwriter_write_dtd_element:["bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)","Write full DTD element tag - returns FALSE on error"],xmlwriter_write_dtd_entity:["bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])","Write full DTD Entity tag - returns FALSE on error"],xmlwriter_write_element:["bool xmlwriter_write_element(resource xmlwriter, string name[, string content])","Write full element tag - returns FALSE on error"],xmlwriter_write_element_ns:["bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])","Write full namesapced element tag - returns FALSE on error"],xmlwriter_write_pi:["bool xmlwriter_write_pi(resource xmlwriter, string target, string content)","Write full PI tag - returns FALSE on error"],xmlwriter_write_raw:["bool xmlwriter_write_raw(resource xmlwriter, string content)","Write text - returns FALSE on error"],xsl_xsltprocessor_get_parameter:["string xsl_xsltprocessor_get_parameter(string namespace, string name);",""],xsl_xsltprocessor_has_exslt_support:["bool xsl_xsltprocessor_has_exslt_support();",""],xsl_xsltprocessor_import_stylesheet:["void xsl_xsltprocessor_import_stylesheet(domdocument doc);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:"],xsl_xsltprocessor_register_php_functions:["void xsl_xsltprocessor_register_php_functions([mixed $restrict]);",""],xsl_xsltprocessor_remove_parameter:["bool xsl_xsltprocessor_remove_parameter(string namespace, string name);",""],xsl_xsltprocessor_set_parameter:["bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);",""],xsl_xsltprocessor_set_profiling:["bool xsl_xsltprocessor_set_profiling(string filename) */",'PHP_FUNCTION(xsl_xsltprocessor_set_profiling) { zval *id; xsl_object *intern; char *filename = NULL; int filename_len; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, "s!", &filename, &filename_len) == SUCCESS) { intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern->profiling) { efree(intern->profiling); } if (filename != NULL) { intern->profiling = estrndup(filename,filename_len); } else { intern->profiling = NULL; } RETURN_TRUE; } else { WRONG_PARAM_COUNT; } } /* }}} end xsl_xsltprocessor_set_profiling'],xsl_xsltprocessor_transform_to_doc:["domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);","URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html# Since:"],xsl_xsltprocessor_transform_to_uri:["int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);",""],xsl_xsltprocessor_transform_to_xml:["string xsl_xsltprocessor_transform_to_xml(domdocument doc);",""],zend_logo_guid:["string zend_logo_guid(void)","Return the special ID used to request the Zend logo in phpinfo screens"],zend_version:["string zend_version(void)","Get the version of the Zend Engine"],zip_close:["void zip_close(resource zip)","Close a Zip archive"],zip_entry_close:["void zip_entry_close(resource zip_ent)","Close a zip entry"],zip_entry_compressedsize:["int zip_entry_compressedsize(resource zip_entry)","Return the compressed size of a ZZip entry"],zip_entry_compressionmethod:["string zip_entry_compressionmethod(resource zip_entry)","Return a string containing the compression method used on a particular entry"],zip_entry_filesize:["int zip_entry_filesize(resource zip_entry)","Return the actual filesize of a ZZip entry"],zip_entry_name:["string zip_entry_name(resource zip_entry)","Return the name given a ZZip entry"],zip_entry_open:["bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])","Open a Zip File, pointed by the resource entry"],zip_entry_read:["mixed zip_entry_read(resource zip_entry [, int len])","Read from an open directory entry"],zip_open:["resource zip_open(string filename)","Create new zip using source uri for output"],zip_read:["resource zip_read(resource zip)","Returns the next file in the archive"],zlib_get_coding_type:["string zlib_get_coding_type(void)","Returns the coding type used for output compression"]},i={$_COOKIE:{type:"array"},$_ENV:{type:"array"},$_FILES:{type:"array"},$_GET:{type:"array"},$_POST:{type:"array"},$_REQUEST:{type:"array"},$_SERVER:{type:"array",value:{DOCUMENT_ROOT:1,GATEWAY_INTERFACE:1,HTTP_ACCEPT:1,HTTP_ACCEPT_CHARSET:1,HTTP_ACCEPT_ENCODING:1,HTTP_ACCEPT_LANGUAGE:1,HTTP_CONNECTION:1,HTTP_HOST:1,HTTP_REFERER:1,HTTP_USER_AGENT:1,PATH_TRANSLATED:1,PHP_SELF:1,QUERY_STRING:1,REMOTE_ADDR:1,REMOTE_PORT:1,REQUEST_METHOD:1,REQUEST_URI:1,SCRIPT_FILENAME:1,SCRIPT_NAME:1,SERVER_ADMIN:1,SERVER_NAME:1,SERVER_PORT:1,SERVER_PROTOCOL:1,SERVER_SIGNATURE:1,SERVER_SOFTWARE:1}},$_SESSION:{type:"array"},$GLOBALS:{type:"array"}};var o=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if("identifier"===i.type)return this.getFunctionCompletions(e,t,r,n);if(function(e,t){return e.type.lastIndexOf(t)>-1}(i,"variable"))return this.getVariableCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return"string"===i.type&&/(\$[\w]*)\[["']([^'"]*)$/i.test(o)?this.getArrayKeyCompletions(e,t,r,n):[]},this.getFunctionCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+"($0)",meta:"php function",score:Number.MAX_VALUE,docHTML:n[e][1]}})},this.getVariableCompletions=function(e,t,r,n){return Object.keys(i).map(function(e){return{caption:e,value:e,meta:"php variable",score:Number.MAX_VALUE}})},this.getArrayKeyCompletions=function(e,t,r,n){var o=t.getLine(r.row).substr(0,r.column).match(/(\$[\w]*)\[["']([^'"]*)$/i)[1];if(!i[o])return[];var s=[];return"array"===i[o].type&&i[o].value&&(s=Object.keys(i[o].value)),s.map(function(e){return{caption:e,value:e,meta:"php array key",score:Number.MAX_VALUE}})}}).call(o.prototype),t.PhpCompletions=o}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n,i=e("../../lib/oop"),o=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","punctuation.operator"],c=["text","paren.rparen","punctuation.operator","comment"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add("braces","insertion",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if("{"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(""!==u&&"{"!==u&&r.getWrapBehavioursEnabled())return g(c,u,"{","}");if(h.isSaneInsertion(r,i))return/[\]\}\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(r,i,"{"),{text:"{",selection:[1,1]})}else if("}"==o){if(d(r),"}"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket("}",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==o||"\r\n"==o){d(r);var m="";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat("}",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),"}"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:"\n"+f+"\n"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&"{"==s){if(d(r),"}"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,r,n,i){if("("==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"(",")");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,")"),{text:"()",selection:[1,1]}}else if(")"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("parens","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"("==o&&(d(r),")"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("brackets","insertion",function(e,t,r,n,i){if("["==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"[","]");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,"]"),{text:"[]",selection:[1,1]}}else if("]"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("brackets","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"["==o&&(d(r),"]"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(""!==a&&"'"!==a&&'"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if("\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)_=f!==b;else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;_=!0}return{text:_?o+o:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||"text",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||"text",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=(e("../range").Range,e("../worker/worker_client").WorkerClient),l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&"comment"==o[o.length-1].type)return n;if("start"==e||"no_regex"==e)(a=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/))&&(n+=r);else if("doc-start"==e){if("start"==s||"no_regex"==s)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(n+=" "),n+="* ")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/css_completions",["require","exports","module"],function(e,t,r){"use strict";var n={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},float:{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e)if("string"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if("ruleset"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\w\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&"object"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../behaviour").Behaviour,e("./cstyle").CstyleBehaviour),o=e("../../token_iterator").TokenIterator,s=function(){this.inherit(i),this.add("colon","insertion",function(e,t,r,n,i){if(":"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\s+/)&&(l=a.stepBackward()),l&&"support.type"===l.type){var c=n.doc.getLine(s.row);if(":"===c.substring(s.column,s.column+1))return{text:"",selection:[1,1]};if(!c.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&":"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\s+/)&&(c=l.stepBackward()),c&&"support.type"===c.type)if(";"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add("semicolon","insertion",function(e,t,r,n,i){if(";"===i){var o=r.getCursorPosition();if(";"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:"",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./css_highlight_rules").CssHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./css_completions").CssCompletions,c=e("./behaviour/css").CssBehaviour,u=e("./folding/cstyle").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&"comment"==i[i.length-1].type||t.match(/^.*\{\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(d.prototype),t.Mode=d}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../behaviour").Behaviour,o=e("../../token_iterator").TokenIterator;e("../../lib/lang");function s(e,t){return e.type.lastIndexOf(t+".xml")>-1}var a=function(){this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(""!==l&&"'"!==l&&'"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,"attribute-value")||s(g,"string")))return{text:"",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,"tag-whitespace")||s(g,"whitespace");)g=d.stepBackward();var h=!u||u.match(/\s/);if(s(g,"attribute-equals")&&(h||">"==u)||s(g,"decl-attribute-equals")&&(h||"?"==u))return{text:a+a,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add("autoclosing","insertion",function(e,t,r,n,i){if(">"==i){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,"tag-name")||s(c,"tag-whitespace")||s(c,"attribute-name")||s(c,"attribute-equals")||s(c,"attribute-value")))return;if(s(c,"reference.attribute-value"))return;if(s(c,"attribute-value")){var u=c.value.charAt(0);if('"'==u||"'"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,"tag-name");)c=l.stepBackward();var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),"end-tag-open"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:"></"+p+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,r,n,i){if("\n"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf("tag-close")){if("/>"==c.value)return;for(;c&&-1===c.type.indexOf("tag-name");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf("end-tag"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&"</"===g.value?{text:"\n"+m+"\n"+h,selection:[1,m.length,1,m.length]}:{text:"\n"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./fold_mode").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in"string"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):""},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../../lib/lang"),e("../../range").Range),o=e("./fold_mode").FoldMode,s=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+".xml")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?"markbeginend"==t?"end":"":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,"tag-open")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,"end-tag-open"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,"tag-close")){n.selfClosing="/>"==o.value;break}return n}if(c(o,"tag-close"))return n.selfClosing="/>"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,"end-tag-open")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,"tag-name"))r.tagName=t.value;else if(c(t,"tag-close"))return r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))return r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,"tag-name")?r.tagName=t.value:c(t,"tag-close")&&(r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./mixed").FoldMode,o=e("./xml").FoldMode,s=e("./cstyle").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{"js-":new s,"css-":new s})};n.inherits(a,i)}),ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"].concat(["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"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"tag-name");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,"tag-name")||a(i,"tag-open")||a(i,"end-tag-open"))return this.getTagCompletions(e,t,r,n);if(a(i,"tag-whitespace")||a(i,"attribute-name"))return this.getAttributeCompletions(e,t,r,n);if(a(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[A-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"attribute-name");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&"object"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return["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;"].map(function(e){return{caption:e,snippet:e,meta:"html entity",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text").Mode,s=e("./javascript").Mode,a=e("./css").Mode,l=e("./html_highlight_rules").HtmlHighlightRules,c=e("./behaviour/xml").XmlBehaviour,u=e("./folding/html").FoldMode,d=e("./html_completions").HtmlCompletions,g=e("../worker/worker_client").WorkerClient,h=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],m=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({"js-":s,"css-":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:"\x3c!--",end:"--\x3e"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}},this.$id="ace/mode/html"}.call(p.prototype),t.Mode=p}),ace.define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/php_completions","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode","ace/mode/html","ace/mode/javascript","ace/mode/css"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./php_highlight_rules").PhpHighlightRules,s=e("./php_highlight_rules").PhpLangHighlightRules,a=e("./matching_brace_outdent").MatchingBraceOutdent,l=(e("../range").Range,e("../worker/worker_client").WorkerClient),c=e("./php_completions").PhpCompletions,u=e("./behaviour/cstyle").CstyleBehaviour,d=e("./folding/cstyle").FoldMode,g=e("../unicode"),h=e("./html").Mode,m=e("./javascript").Mode,p=e("./css").Mode,_=function(e){this.HighlightRules=s,this.$outdent=new a,this.$behaviour=new u,this.$completer=new c,this.foldingRules=new d};n.inherits(_,i),function(){this.tokenRe=new RegExp("^["+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+g.packages.L+g.packages.Mn+g.packages.Mc+g.packages.Nd+g.packages.Pc+"_]|s])+","g"),this.lineCommentStart=["//","#"],this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&"comment"==o[o.length-1].type)return n;if("start"==e)(a=t.match(/^.*[\{\(\[\:]\s*$/))&&(n+=r);else if("doc-start"==e){if("doc-start"!=s)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(n+=" "),n+="* ")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.$id="ace/mode/php-inline"}.call(_.prototype);var f=function(e){if(e&&e.inline){var t=new _;return t.createWorker=this.createWorker,t.inlinePhp=!0,t}h.call(this),this.HighlightRules=o,this.createModeDelegates({"js-":m,"css-":p,"php-":_}),this.foldingRules.subModes["php-"]=new d};n.inherits(f,h),function(){this.createWorker=function(e){var t=new l(["ace"],"ace/mode/php_worker","PhpWorker");return t.attachToDocument(e.getDocument()),this.inlinePhp&&t.call("setOptions",[{inline:!0}]),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/php"}.call(f.prototype),t.Mode=f}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},o.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},o.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},o.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=o}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,s="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",a=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),c("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+s+")(\\.)(prototype)(\\.)("+s+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+s+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:s},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:s},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),c("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:s},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,r){if(this.next="{"==e?this.nextState:"","{"==e&&r.length)r.unshift("start",t);else if("}"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),e&&e.noJSX||l.call(this)),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};function l(){var e=s.replace("\\d","\\d\\-"),t={onMatch:function(e,t,r){var n="/"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:"meta.tag.punctuation."+(1==n?"":"end-")+"tag-open.xml",value:e.slice(0,n)},{type:"meta.tag.tag-name.xml",value:e.substr(n)}]},regex:"</?"+e,next:"jsxAttributes",nextState:"jsx"};this.$rules.start.unshift(t);var r={regex:"{",token:"paren.quasi.start",push:"start"};this.$rules.jsx=[r,t,{include:"reference"},{defaultToken:"string"}],this.$rules.jsxAttributes=[{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},r,c("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function c(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n,i=e("../../lib/oop"),o=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","punctuation.operator"],c=["text","paren.rparen","punctuation.operator","comment"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add("braces","insertion",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if("{"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(""!==u&&"{"!==u&&r.getWrapBehavioursEnabled())return g(c,u,"{","}");if(h.isSaneInsertion(r,i))return/[\]\}\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(r,i,"{"),{text:"{",selection:[1,1]})}else if("}"==o){if(d(r),"}"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket("}",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==o||"\r\n"==o){d(r);var m="";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat("}",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),"}"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:"\n"+f+"\n"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&"{"==s){if(d(r),"}"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,r,n,i){if("("==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"(",")");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,")"),{text:"()",selection:[1,1]}}else if(")"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("parens","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"("==o&&(d(r),")"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("brackets","insertion",function(e,t,r,n,i){if("["==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"[","]");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,"]"),{text:"[]",selection:[1,1]}}else if("]"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("brackets","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"["==o&&(d(r),"]"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(""!==a&&"'"!==a&&'"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if("\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)_=f!==b;else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;_=!0}return{text:_?o+o:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||"text",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||"text",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=(e("../range").Range,e("../worker/worker_client").WorkerClient),l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&"comment"==o[o.length-1].type)return n;if("start"==e||"no_regex"==e)(a=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/))&&(n+=r);else if("doc-start"==e){if("start"==s||"no_regex"==s)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(n+=" "),n+="* ")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./text_highlight_rules").TextHighlightRules),o=t.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|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",s=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.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",l=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",c=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",u=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",d=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",g=t.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",h=function(){var e=this.createKeywordMapper({"support.function":s,"support.constant":a,"support.type":o,"support.constant.color":l,"support.constant.fonts":c},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+u+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:u},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:d},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:g},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define("ace/mode/css_completions",["require","exports","module"],function(e,t,r){"use strict";var n={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},float:{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e)if("string"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if("ruleset"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\w\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&"object"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../behaviour").Behaviour,e("./cstyle").CstyleBehaviour),o=e("../../token_iterator").TokenIterator,s=function(){this.inherit(i),this.add("colon","insertion",function(e,t,r,n,i){if(":"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\s+/)&&(l=a.stepBackward()),l&&"support.type"===l.type){var c=n.doc.getLine(s.row);if(":"===c.substring(s.column,s.column+1))return{text:"",selection:[1,1]};if(!c.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&":"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\s+/)&&(c=l.stepBackward()),c&&"support.type"===c.type)if(";"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add("semicolon","insertion",function(e,t,r,n,i){if(";"===i){var o=r.getCursorPosition();if(";"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:"",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./css_highlight_rules").CssHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./css_completions").CssCompletions,c=e("./behaviour/css").CssBehaviour,u=e("./folding/cstyle").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&"comment"==i[i.length-1].type||t.match(/^.*\{\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(d.prototype),t.Mode=d}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t="[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"</"},{token:"text.tag-open.xml",regex:"<"},{include:"reference"},{defaultToken:"text.xml"}],xml_decl:[{token:"entity.other.attribute-name.decl-attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.decl-attribute-equals.xml",regex:"="},{include:"whitespace"},{include:"string"},{token:"punctuation.xml-decl.xml",regex:"\\?>",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"--\x3e",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(</))((?:"+t+":)?"+t+")",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(<)("+r+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[r+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(</)("+r+"(?=\\s|>|$))",next:r+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./css_highlight_rules").CssHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,a=e("./xml_highlight_rules").XmlHighlightRules,l=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),c=function(){a.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var r=l[t];return["meta.tag.punctuation."+("<"==e?"":"end-")+"tag-open.xml","meta.tag"+(r?"."+r:"")+".tag-name.xml"]},regex:"(</?)([-_a-zA-Z0-9:.]+)",next:"tag_stuff"}],tag_stuff:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}),this.embedTagRules(o,"css-","style"),this.embedTagRules(new s({noJSX:!0}).getRules(),"js-","script"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../behaviour").Behaviour,o=e("../../token_iterator").TokenIterator;e("../../lib/lang");function s(e,t){return e.type.lastIndexOf(t+".xml")>-1}var a=function(){this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(""!==l&&"'"!==l&&'"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,"attribute-value")||s(g,"string")))return{text:"",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,"tag-whitespace")||s(g,"whitespace");)g=d.stepBackward();var h=!u||u.match(/\s/);if(s(g,"attribute-equals")&&(h||">"==u)||s(g,"decl-attribute-equals")&&(h||"?"==u))return{text:a+a,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add("autoclosing","insertion",function(e,t,r,n,i){if(">"==i){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,"tag-name")||s(c,"tag-whitespace")||s(c,"attribute-name")||s(c,"attribute-equals")||s(c,"attribute-value")))return;if(s(c,"reference.attribute-value"))return;if(s(c,"attribute-value")){var u=c.value.charAt(0);if('"'==u||"'"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,"tag-name");)c=l.stepBackward();var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),"end-tag-open"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:"></"+p+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,r,n,i){if("\n"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf("tag-close")){if("/>"==c.value)return;for(;c&&-1===c.type.indexOf("tag-name");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf("end-tag"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&"</"===g.value?{text:"\n"+m+"\n"+h,selection:[1,m.length,1,m.length]}:{text:"\n"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./fold_mode").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in"string"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):""},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../../lib/lang"),e("../../range").Range),o=e("./fold_mode").FoldMode,s=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+".xml")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?"markbeginend"==t?"end":"":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,"tag-open")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,"end-tag-open"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,"tag-close")){n.selfClosing="/>"==o.value;break}return n}if(c(o,"tag-close"))return n.selfClosing="/>"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,"end-tag-open")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,"tag-name"))r.tagName=t.value;else if(c(t,"tag-close"))return r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))return r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,"tag-name")?r.tagName=t.value:c(t,"tag-close")&&(r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./mixed").FoldMode,o=e("./xml").FoldMode,s=e("./cstyle").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{"js-":new s,"css-":new s})};n.inherits(a,i)}),ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"].concat(["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"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"tag-name");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,"tag-name")||a(i,"tag-open")||a(i,"end-tag-open"))return this.getTagCompletions(e,t,r,n);if(a(i,"tag-whitespace")||a(i,"attribute-name"))return this.getAttributeCompletions(e,t,r,n);if(a(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[A-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"attribute-name");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&"object"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return["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;"].map(function(e){return{caption:e,snippet:e,meta:"html entity",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text").Mode,s=e("./javascript").Mode,a=e("./css").Mode,l=e("./html_highlight_rules").HtmlHighlightRules,c=e("./behaviour/xml").XmlBehaviour,u=e("./folding/html").FoldMode,d=e("./html_completions").HtmlCompletions,g=e("../worker/worker_client").WorkerClient,h=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],m=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({"js-":s,"css-":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:"\x3c!--",end:"--\x3e"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}},this.$id="ace/mode/html"}.call(p.prototype),t.Mode=p}),ace.define("ace/mode/twig_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./html_highlight_rules").HtmlHighlightRules),o=e("./text_highlight_rules").TextHighlightRules,s=function(){i.call(this);var e="autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim";e=e+"|end"+e.replace(/\|/g,"|end");var t=this.createKeywordMapper({"keyword.control.twig":e,"support.function.twig":["abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode","attribute|constant|cycle|date|dump|parent|random|range|template_from_string","constant|divisibleby|sameas|defined|empty|even|iterable|odd"].join("|"),"keyword.operator.twig":"b-and|b-xor|b-or|in|is|and|or|not","constant.language.twig":"null|none|true|false"},"identifier");for(var r in this.$rules)this.$rules[r].unshift({token:"variable.other.readwrite.local.twig",regex:"\\{\\{-?",push:"twig-start"},{token:"meta.tag.twig",regex:"\\{%-?",push:"twig-start"},{token:"comment.block.twig",regex:"\\{#-?",push:"twig-comment"});this.$rules["twig-comment"]=[{token:"comment.block.twig",regex:".*-?#\\}",next:"pop"}],this.$rules["twig-start"]=[{token:"variable.other.readwrite.local.twig",regex:"-?\\}\\}",next:"pop"},{token:"meta.tag.twig",regex:"-?%\\}",next:"pop"},{token:"string",regex:"'",next:"twig-qstring"},{token:"string",regex:'"',next:"twig-qqstring"},{token:"constant.numeric",regex:"0[xX][0-9a-fA-F]+\\b"},{token:"constant.numeric",regex:"[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b"},{token:"constant.language.boolean",regex:"(?:true|false)\\b"},{token:t,regex:"[a-zA-Z_$][a-zA-Z0-9_$]*\\b"},{token:"keyword.operator.assignment",regex:"=|~"},{token:"keyword.operator.comparison",regex:"==|!=|<|>|>=|<=|==="},{token:"keyword.operator.arithmetic",regex:"\\+|-|/|%|//|\\*|\\*\\*"},{token:"keyword.operator.other",regex:"\\.\\.|\\|"},{token:"punctuation.operator",regex:/\?|\:|\,|\;|\./},{token:"paren.lparen",regex:/[\[\({]/},{token:"paren.rparen",regex:/[\])}]/},{token:"text",regex:"\\s+"}],this.$rules["twig-qqstring"]=[{token:"constant.language.escape",regex:/\\[\\"$#ntr]|#{[^"}]*}/},{token:"string",regex:'"',next:"twig-start"},{defaultToken:"string"}],this.$rules["twig-qstring"]=[{token:"constant.language.escape",regex:/\\[\\'ntr]}/},{token:"string",regex:"'",next:"twig-start"},{defaultToken:"string"}],this.normalizeRules()};n.inherits(s,o),t.TwigHighlightRules=s}),ace.define("ace/mode/twig",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/twig_highlight_rules","ace/mode/matching_brace_outdent"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./html").Mode,o=e("./twig_highlight_rules").TwigHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=function(){i.call(this),this.HighlightRules=o,this.$outdent=new s};n.inherits(a,i),function(){this.blockComment={start:"{#",end:"#}"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens;i.state;if(o.length&&"comment"==o[o.length-1].type)return n;"start"==e&&(t.match(/^.*[\{\(\[]\s*$/)&&(n+=r));return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.$id="ace/mode/twig"}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},o.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},o.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},o.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=o}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,s="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",a=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),c("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+s+")(\\.)(prototype)(\\.)("+s+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+s+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:s},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:s},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),c("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:s},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,r){if(this.next="{"==e?this.nextState:"","{"==e&&r.length)r.unshift("start",t);else if("}"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),e&&0==e.jsx||l.call(this)),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};function l(){var e=s.replace("\\d","\\d\\-"),t={onMatch:function(e,t,r){var n="/"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:"meta.tag.punctuation."+(1==n?"":"end-")+"tag-open.xml",value:e.slice(0,n)},{type:"meta.tag.tag-name.xml",value:e.substr(n)}]},regex:"</?"+e,next:"jsxAttributes",nextState:"jsx"};this.$rules.start.unshift(t);var r={regex:"{",token:"paren.quasi.start",push:"start"};this.$rules.jsx=[r,t,{include:"reference"},{defaultToken:"string"}],this.$rules.jsxAttributes=[{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},r,c("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function c(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&"comment"==o[o.length-1].type)return n;if("start"==e||"no_regex"==e)(a=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/))&&(n+=r);else if("doc-start"==e){if("start"==s||"no_regex"==s)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(n+=" "),n+="* ")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t="[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"</"},{token:"text.tag-open.xml",regex:"<"},{include:"reference"},{defaultToken:"text.xml"}],xml_decl:[{token:"entity.other.attribute-name.decl-attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.decl-attribute-equals.xml",regex:"="},{include:"whitespace"},{include:"string"},{token:"punctuation.xml-decl.xml",regex:"\\?>",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"--\x3e",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(</))((?:"+t+":)?"+t+")",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(<)("+r+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[r+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(</)("+r+"(?=\\s|>|$))",next:r+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../behaviour").Behaviour,o=e("../../token_iterator").TokenIterator;e("../../lib/lang");function s(e,t){return e.type.lastIndexOf(t+".xml")>-1}var a=function(){this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(""!==l&&"'"!==l&&'"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,"attribute-value")||s(g,"string")))return{text:"",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,"tag-whitespace")||s(g,"whitespace");)g=d.stepBackward();var h=!u||u.match(/\s/);if(s(g,"attribute-equals")&&(h||">"==u)||s(g,"decl-attribute-equals")&&(h||"?"==u))return{text:a+a,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add("autoclosing","insertion",function(e,t,r,n,i){if(">"==i){var a=r.getSelectionRange().start,l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,"tag-name")||s(c,"tag-whitespace")||s(c,"attribute-name")||s(c,"attribute-equals")||s(c,"attribute-value")))return;if(s(c,"reference.attribute-value"))return;if(s(c,"attribute-value")){var u=c.value.charAt(0);if('"'==u||"'"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,"tag-name");)if("<"==(c=l.stepBackward()).value){c=l.stepForward();break}var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),"end-tag-open"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:"></"+p+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,r,n,i){if("\n"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf("tag-close")){if("/>"==c.value)return;for(;c&&-1===c.type.indexOf("tag-name");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf("end-tag"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&"</"===g.value?{text:"\n"+m+"\n"+h,selection:[1,m.length,1,m.length]}:{text:"\n"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../../lib/lang"),e("../../range").Range),o=e("./fold_mode").FoldMode,s=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+".xml")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?"markbeginend"==t?"end":"":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,"tag-open")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,"end-tag-open"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,"tag-close")){n.selfClosing="/>"==o.value;break}return n}if(c(o,"tag-close"))return n.selfClosing="/>"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,"end-tag-open")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,"tag-name"))r.tagName=t.value;else if(c(t,"tag-close"))return r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))return r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,"tag-name")?r.tagName=t.value:c(t,"tag-close")&&(r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml","ace/worker/worker_client"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text").Mode,s=e("./xml_highlight_rules").XmlHighlightRules,a=e("./behaviour/xml").XmlBehaviour,l=e("./folding/xml").FoldMode,c=e("../worker/worker_client").WorkerClient,u=function(){this.HighlightRules=s,this.$behaviour=new a,this.foldingRules=new l};n.inherits(u,o),function(){this.voidElements=i.arrayToMap([]),this.blockComment={start:"\x3c!--",end:"--\x3e"},this.createWorker=function(e){var t=new c(["ace"],"ace/mode/xml_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/xml"}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./text_highlight_rules").TextHighlightRules),o=t.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|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",s=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.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",l=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",c=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",u=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",d=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",g=t.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",h=function(){var e=this.createKeywordMapper({"support.function":s,"support.constant":a,"support.type":o,"support.constant.color":l,"support.constant.fonts":c},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+u+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:u},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:d},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:g},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define("ace/mode/css_completions",["require","exports","module"],function(e,t,r){"use strict";var n={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},float:{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e)if("string"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if("ruleset"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\w\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&"object"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../behaviour").Behaviour,e("./cstyle").CstyleBehaviour),o=e("../../token_iterator").TokenIterator,s=function(){this.inherit(i),this.add("colon","insertion",function(e,t,r,n,i){if(":"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\s+/)&&(l=a.stepBackward()),l&&"support.type"===l.type){var c=n.doc.getLine(s.row);if(":"===c.substring(s.column,s.column+1))return{text:"",selection:[1,1]};if(!c.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&":"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\s+/)&&(c=l.stepBackward()),c&&"support.type"===c.type)if(";"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add("semicolon","insertion",function(e,t,r,n,i){if(";"===i){var o=r.getCursorPosition();if(";"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:"",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./css_highlight_rules").CssHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./css_completions").CssCompletions,c=e("./behaviour/css").CssBehaviour,u=e("./folding/cstyle").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&"comment"==i[i.length-1].type||t.match(/^.*\{\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(d.prototype),t.Mode=d}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./css_highlight_rules").CssHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,a=e("./xml_highlight_rules").XmlHighlightRules,l=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),c=function(){a.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var r=l[t];return["meta.tag.punctuation."+("<"==e?"":"end-")+"tag-open.xml","meta.tag"+(r?"."+r:"")+".tag-name.xml"]},regex:"(</?)([-_a-zA-Z0-9:.]+)",next:"tag_stuff"}],tag_stuff:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}),this.embedTagRules(o,"css-","style"),this.embedTagRules(new s({jsx:!1}).getRules(),"js-","script"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./fold_mode").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in"string"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):""},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./mixed").FoldMode,o=e("./xml").FoldMode,s=e("./cstyle").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{"js-":new s,"css-":new s})};n.inherits(a,i)}),ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"].concat(["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"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"tag-name");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,"tag-name")||a(i,"tag-open")||a(i,"end-tag-open"))return this.getTagCompletions(e,t,r,n);if(a(i,"tag-whitespace")||a(i,"attribute-name"))return this.getAttributeCompletions(e,t,r,n);if(a(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[a-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"attribute-name");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&"object"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return["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;"].map(function(e){return{caption:e,snippet:e,meta:"html entity",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text").Mode,s=e("./javascript").Mode,a=e("./css").Mode,l=e("./html_highlight_rules").HtmlHighlightRules,c=e("./behaviour/xml").XmlBehaviour,u=e("./folding/html").FoldMode,d=e("./html_completions").HtmlCompletions,g=e("../worker/worker_client").WorkerClient,h=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],m=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({"js-":s,"css-":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:"\x3c!--",end:"--\x3e"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}},this.$id="ace/mode/html"}.call(p.prototype),t.Mode=p}),ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text_highlight_rules").TextHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,a=e("./xml_highlight_rules").XmlHighlightRules,l=e("./html_highlight_rules").HtmlHighlightRules,c=e("./css_highlight_rules").CssHighlightRules,u=function(e){return"(?:[^"+i.escapeRegExp(e)+"\\\\]|\\\\.)*"};function d(e,t){return{token:"support.function",regex:"^\\s*```"+e+"\\s*$",push:t+"start"}}var g=function(){l.call(this),this.$rules.start.unshift({token:"empty_line",regex:"^$",next:"allowBlock"},{token:"markup.heading.1",regex:"^=+(?=\\s*$)"},{token:"markup.heading.2",regex:"^\\-+(?=\\s*$)"},{token:function(e){return"markup.heading."+e.length},regex:/^#{1,6}(?=\s*[^ #]|\s+#.)/,next:"header"},d("(?:javascript|js)","jscode-"),d("xml","xmlcode-"),d("html","htmlcode-"),d("css","csscode-"),{token:"support.function",regex:"^\\s*```\\s*\\S*(?:{.*?\\})?\\s*$",next:"githubblock"},{token:"string.blockquote",regex:"^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",next:"blockquote"},{token:"constant",regex:"^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$",next:"allowBlock"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock-start"},{include:"basic"}),this.addRules({basic:[{token:"constant.language.escape",regex:/\\[\\`*_{}\[\]()#+\-.!]/},{token:"support.function",regex:"(`+)(.*?[^`])(\\1)"},{token:["text","constant","text","url","string","text"],regex:'^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:["][^"]+["])?(\\s*))$'},{token:["text","string","text","constant","text"],regex:"(\\[)("+u("]")+")(\\]\\s*\\[)("+u("]")+")(\\])"},{token:["text","string","text","markup.underline","string","text"],regex:"(\\[)("+u("]")+')(\\]\\()((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)(\\s*"'+u('"')+'"\\s*)?(\\))'},{token:"string.strong",regex:"([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)"},{token:"string.emphasis",regex:"([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)"},{token:["text","url","text"],regex:"(<)((?:https?|ftp|dict):[^'\">\\s]+|(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+)(>)"}],allowBlock:[{token:"support.function",regex:"^ {4}.+",next:"allowBlock"},{token:"empty_line",regex:"^$",next:"allowBlock"},{token:"empty",regex:"",next:"start"}],header:[{regex:"$",next:"start"},{include:"basic"},{defaultToken:"heading"}],"listblock-start":[{token:"support.variable",regex:/(?:\[[ x]\])?/,next:"listblock"}],listblock:[{token:"empty_line",regex:"^$",next:"start"},{token:"markup.list",regex:"^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+",next:"listblock-start"},{include:"basic",noEscape:!0},{token:"support.function",regex:"^\\s*```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$",next:"githubblock"},{defaultToken:"list"}],blockquote:[{token:"empty_line",regex:"^\\s*$",next:"start"},{token:"string.blockquote",regex:"^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+",next:"blockquote"},{include:"basic",noEscape:!0},{defaultToken:"string.blockquote"}],githubblock:[{token:"support.function",regex:"^\\s*```",next:"start"},{token:"support.function",regex:".+"}]}),this.embedRules(s,"jscode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.embedRules(l,"htmlcode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.embedRules(c,"csscode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.embedRules(a,"xmlcode-",[{token:"support.function",regex:"^\\s*```",next:"pop"}]),this.normalizeRules()};n.inherits(g,o),t.MarkdownHighlightRules=g}),ace.define("ace/mode/folding/markdown",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./fold_mode").FoldMode,o=e("../../range").Range,s=t.FoldMode=function(){};n.inherits(s,i),function(){this.foldingStartMarker=/^(?:[=-]+\s*$|#{1,6} |`{3})/,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);return this.foldingStartMarker.test(n)?"`"==n[0]&&"start"==e.bgTokenizer.getState(r)?"end":"start":""},this.getFoldWidgetRange=function(e,t,r){var n=e.getLine(r),i=n.length,s=e.getLength(),a=r,l=r;if(n.match(this.foldingStartMarker)){if("`"==n[0]){if("start"!==e.bgTokenizer.getState(r)){for(;++r<s&&!("`"==(n=e.getLine(r))[0]&"```"==n.substring(0,3)););return new o(a,i,r,0)}for(;r-- >0&&!("`"==(n=e.getLine(r))[0]&"```"==n.substring(0,3)););return new o(r,n.length,a,0)}var c,u="markup.heading";if(h(r)){for(var d=m();++r<s;){if(h(r))if(m()>=d)break}if((l=r-(c&&-1!=["=","-"].indexOf(c.value[0])?2:1))>a)for(;l>a&&/^\s*$/.test(e.getLine(l));)l--;if(l>a){var g=e.getLine(l).length;return new o(a,i,l,g)}}}function h(t){return(c=e.getTokens(t)[0])&&0===c.type.lastIndexOf(u,0)}function m(){var e=c.value[0];return"="==e?6:"-"==e?5:7-c.value.search(/[^#]/)}}}.call(s.prototype)}),ace.define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/mode/markdown_highlight_rules","ace/mode/folding/markdown"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./javascript").Mode,s=e("./xml").Mode,a=e("./html").Mode,l=e("./markdown_highlight_rules").MarkdownHighlightRules,c=e("./folding/markdown").FoldMode,u=function(){this.HighlightRules=l,this.createModeDelegates({"js-":o,"xml-":s,"html-":a}),this.foldingRules=new c,this.$behaviour=this.$defaultBehaviour};n.inherits(u,i),function(){this.type="text",this.blockComment={start:"\x3c!--",end:"--\x3e"},this.getNextLineIndent=function(e,t,r){if("listblock"==e){var n=/^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(t);if(!n)return"";var i=n[2];return i||(i=parseInt(n[3],10)+1+"."),n[1]+i+n[4]}return this.$getIndent(t)},this.$id="ace/mode/markdown"}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/plain_text",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/behaviour"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour").Behaviour,a=function(){this.HighlightRules=o,this.$behaviour=new s};n.inherits(a,i),function(){this.type="text",this.getNextLineIndent=function(e,t,r){return""},this.$id="ace/mode/plain_text"}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},o.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},o.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},o.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=o}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,s="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",a=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),c("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+s+")(\\.)(prototype)(\\.)("+s+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+s+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:s},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:s},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),c("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:s},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,r){if(this.next="{"==e?this.nextState:"","{"==e&&r.length)r.unshift("start",t);else if("}"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),e&&0==e.jsx||l.call(this)),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};function l(){var e=s.replace("\\d","\\d\\-"),t={onMatch:function(e,t,r){var n="/"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:"meta.tag.punctuation."+(1==n?"":"end-")+"tag-open.xml",value:e.slice(0,n)},{type:"meta.tag.tag-name.xml",value:e.substr(n)}]},regex:"</?"+e,next:"jsxAttributes",nextState:"jsx"};this.$rules.start.unshift(t);var r={regex:"{",token:"paren.quasi.start",push:"start"};this.$rules.jsx=[r,t,{include:"reference"},{defaultToken:"string"}],this.$rules.jsxAttributes=[{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},r,c("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function c(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&"comment"==o[o.length-1].type)return n;if("start"==e||"no_regex"==e)(a=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/))&&(n+=r);else if("doc-start"==e){if("start"==s||"no_regex"==s)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(n+=" "),n+="* ")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./text_highlight_rules").TextHighlightRules),o=t.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|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",s=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.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",l=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",c=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",u=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",d=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",g=t.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",h=function(){var e=this.createKeywordMapper({"support.function":s,"support.constant":a,"support.type":o,"support.constant.color":l,"support.constant.fonts":c},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+u+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:u},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:d},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:g},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define("ace/mode/css_completions",["require","exports","module"],function(e,t,r){"use strict";var n={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},float:{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e)if("string"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if("ruleset"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\w\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&"object"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../behaviour").Behaviour,e("./cstyle").CstyleBehaviour),o=e("../../token_iterator").TokenIterator,s=function(){this.inherit(i),this.add("colon","insertion",function(e,t,r,n,i){if(":"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\s+/)&&(l=a.stepBackward()),l&&"support.type"===l.type){var c=n.doc.getLine(s.row);if(":"===c.substring(s.column,s.column+1))return{text:"",selection:[1,1]};if(!c.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&":"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\s+/)&&(c=l.stepBackward()),c&&"support.type"===c.type)if(";"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add("semicolon","insertion",function(e,t,r,n,i){if(";"===i){var o=r.getCursorPosition();if(";"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:"",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./css_highlight_rules").CssHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./css_completions").CssCompletions,c=e("./behaviour/css").CssBehaviour,u=e("./folding/cstyle").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&"comment"==i[i.length-1].type||t.match(/^.*\{\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(d.prototype),t.Mode=d}),ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(e){var t="[_:a-zA-ZÀ-￿][-_:.a-zA-Z0-9À-￿]*";this.$rules={start:[{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\[",next:"cdata"},{token:["punctuation.xml-decl.xml","keyword.xml-decl.xml"],regex:"(<\\?)(xml)(?=[\\s])",next:"xml_decl",caseInsensitive:!0},{token:["punctuation.instruction.xml","keyword.instruction.xml"],regex:"(<\\?)("+t+")",next:"processing_instruction"},{token:"comment.xml",regex:"<\\!--",next:"comment"},{token:["xml-pe.doctype.xml","xml-pe.doctype.xml"],regex:"(<\\!)(DOCTYPE)(?=[\\s])",next:"doctype",caseInsensitive:!0},{include:"tag"},{token:"text.end-tag-open.xml",regex:"</"},{token:"text.tag-open.xml",regex:"<"},{include:"reference"},{defaultToken:"text.xml"}],xml_decl:[{token:"entity.other.attribute-name.decl-attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.decl-attribute-equals.xml",regex:"="},{include:"whitespace"},{include:"string"},{token:"punctuation.xml-decl.xml",regex:"\\?>",next:"start"}],processing_instruction:[{token:"punctuation.instruction.xml",regex:"\\?>",next:"start"},{defaultToken:"instruction.xml"}],doctype:[{include:"whitespace"},{include:"string"},{token:"xml-pe.doctype.xml",regex:">",next:"start"},{token:"xml-pe.xml",regex:"[-_a-zA-Z0-9:]+"},{token:"punctuation.int-subset",regex:"\\[",push:"int_subset"}],int_subset:[{token:"text.xml",regex:"\\s+"},{token:"punctuation.int-subset.xml",regex:"]",next:"pop"},{token:["punctuation.markup-decl.xml","keyword.markup-decl.xml"],regex:"(<\\!)("+t+")",push:[{token:"text",regex:"\\s+"},{token:"punctuation.markup-decl.xml",regex:">",next:"pop"},{include:"string"}]}],cdata:[{token:"string.cdata.xml",regex:"\\]\\]>",next:"start"},{token:"text.xml",regex:"\\s+"},{token:"text.xml",regex:"(?:[^\\]]|\\](?!\\]>))+"}],comment:[{token:"comment.xml",regex:"--\x3e",next:"start"},{defaultToken:"comment.xml"}],reference:[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],attr_reference:[{token:"constant.language.escape.reference.attribute-value.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}],tag:[{token:["meta.tag.punctuation.tag-open.xml","meta.tag.punctuation.end-tag-open.xml","meta.tag.tag-name.xml"],regex:"(?:(<)|(</))((?:"+t+":)?"+t+")",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}],tag_whitespace:[{token:"text.tag-whitespace.xml",regex:"\\s+"}],whitespace:[{token:"text.whitespace.xml",regex:"\\s+"}],string:[{token:"string.xml",regex:"'",push:[{token:"string.xml",regex:"'",next:"pop"},{defaultToken:"string.xml"}]},{token:"string.xml",regex:'"',push:[{token:"string.xml",regex:'"',next:"pop"},{defaultToken:"string.xml"}]}],attributes:[{token:"entity.other.attribute-name.xml",regex:"(?:"+t+":)?"+t},{token:"keyword.operator.attribute-equals.xml",regex:"="},{include:"tag_whitespace"},{include:"attribute_value"}],attribute_value:[{token:"string.attribute-value.xml",regex:"'",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"attr_reference"},{defaultToken:"string.attribute-value.xml"}]}]},this.constructor===o&&this.normalizeRules()};(function(){this.embedTagRules=function(e,t,r){this.$rules.tag.unshift({token:["meta.tag.punctuation.tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(<)("+r+"(?=\\s|>|$))",next:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:t+"start"}]}),this.$rules[r+"-end"]=[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start",onMatch:function(e,t,r){return r.splice(0),this.token}}],this.embedRules(e,t,[{token:["meta.tag.punctuation.end-tag-open.xml","meta.tag."+r+".tag-name.xml"],regex:"(</)("+r+"(?=\\s|>|$))",next:r+"-end"},{token:"string.cdata.xml",regex:"<\\!\\[CDATA\\["},{token:"string.cdata.xml",regex:"\\]\\]>"}])}}).call(i.prototype),n.inherits(o,i),t.XmlHighlightRules=o}),ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./css_highlight_rules").CssHighlightRules,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,a=e("./xml_highlight_rules").XmlHighlightRules,l=i.createMap({a:"anchor",button:"form",form:"form",img:"image",input:"form",label:"form",option:"form",script:"script",select:"form",textarea:"form",style:"style",table:"table",tbody:"table",td:"table",tfoot:"table",th:"table",tr:"table"}),c=function(){a.call(this),this.addRules({attributes:[{include:"tag_whitespace"},{token:"entity.other.attribute-name.xml",regex:"[-_a-zA-Z0-9:.]+"},{token:"keyword.operator.attribute-equals.xml",regex:"=",push:[{include:"tag_whitespace"},{token:"string.unquoted.attribute-value.html",regex:"[^<>='\"`\\s]+",next:"pop"},{token:"empty",regex:"",next:"pop"}]},{include:"attribute_value"}],tag:[{token:function(e,t){var r=l[t];return["meta.tag.punctuation."+("<"==e?"":"end-")+"tag-open.xml","meta.tag"+(r?"."+r:"")+".tag-name.xml"]},regex:"(</?)([-_a-zA-Z0-9:.]+)",next:"tag_stuff"}],tag_stuff:[{include:"attributes"},{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",next:"start"}]}),this.embedTagRules(o,"css-","style"),this.embedTagRules(new s({jsx:!1}).getRules(),"js-","script"),this.constructor===c&&this.normalizeRules()};n.inherits(c,a),t.HtmlHighlightRules=c}),ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../behaviour").Behaviour,o=e("../../token_iterator").TokenIterator;e("../../lib/lang");function s(e,t){return e.type.lastIndexOf(t+".xml")>-1}var a=function(){this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){var a=i,l=n.doc.getTextRange(r.getSelectionRange());if(""!==l&&"'"!==l&&'"'!=l&&r.getWrapBehavioursEnabled())return{text:a+l+a,selection:!1};var c=r.getCursorPosition(),u=n.doc.getLine(c.row).substring(c.column,c.column+1),d=new o(n,c.row,c.column),g=d.getCurrentToken();if(u==a&&(s(g,"attribute-value")||s(g,"string")))return{text:"",selection:[1,1]};if(g||(g=d.stepBackward()),!g)return;for(;s(g,"tag-whitespace")||s(g,"whitespace");)g=d.stepBackward();var h=!u||u.match(/\s/);if(s(g,"attribute-equals")&&(h||">"==u)||s(g,"decl-attribute-equals")&&(h||"?"==u))return{text:a+a,selection:[1,1]}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o)return i.end.column++,i}),this.add("autoclosing","insertion",function(e,t,r,n,i){if(">"==i){var a=r.getSelectionRange().start,l=new o(n,a.row,a.column),c=l.getCurrentToken()||l.stepBackward();if(!c||!(s(c,"tag-name")||s(c,"tag-whitespace")||s(c,"attribute-name")||s(c,"attribute-equals")||s(c,"attribute-value")))return;if(s(c,"reference.attribute-value"))return;if(s(c,"attribute-value")){var u=c.value.charAt(0);if('"'==u||"'"==u){var d=c.value.charAt(c.value.length-1),g=l.getCurrentTokenColumn()+c.value.length;if(g>a.column||g==a.column&&u!=d)return}}for(;!s(c,"tag-name");)if("<"==(c=l.stepBackward()).value){c=l.stepForward();break}var h=l.getCurrentTokenRow(),m=l.getCurrentTokenColumn();if(s(l.stepBackward(),"end-tag-open"))return;var p=c.value;if(h==a.row&&(p=p.substring(0,a.column-m)),this.voidElements.hasOwnProperty(p.toLowerCase()))return;return{text:"></"+p+">",selection:[1,1]}}}),this.add("autoindent","insertion",function(e,t,r,n,i){if("\n"==i){var s=r.getCursorPosition(),a=n.getLine(s.row),l=new o(n,s.row,s.column),c=l.getCurrentToken();if(c&&-1!==c.type.indexOf("tag-close")){if("/>"==c.value)return;for(;c&&-1===c.type.indexOf("tag-name");)c=l.stepBackward();if(!c)return;var u=c.value,d=l.getCurrentTokenRow();if(!(c=l.stepBackward())||-1!==c.type.indexOf("end-tag"))return;if(this.voidElements&&!this.voidElements[u]){var g=n.getTokenAt(s.row,s.column+1),h=(a=n.getLine(d),this.$getIndent(a)),m=h+n.getTabString();return g&&"</"===g.value?{text:"\n"+m+"\n"+h,selection:[1,m.length,1,m.length]}:{text:"\n"+m}}}}})};n.inherits(a,i),t.XmlBehaviour=a}),ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./fold_mode").FoldMode,o=t.FoldMode=function(e,t){this.defaultMode=e,this.subModes=t};n.inherits(o,i),function(){this.$getMode=function(e){for(var t in"string"!=typeof e&&(e=e[0]),this.subModes)if(0===e.indexOf(t))return this.subModes[t];return null},this.$tryMode=function(e,t,r,n){var i=this.$getMode(e);return i?i.getFoldWidget(t,r,n):""},this.getFoldWidget=function(e,t,r){return this.$tryMode(e.getState(r-1),e,t,r)||this.$tryMode(e.getState(r),e,t,r)||this.defaultMode.getFoldWidget(e,t,r)},this.getFoldWidgetRange=function(e,t,r){var n=this.$getMode(e.getState(r-1));return n&&n.getFoldWidget(e,t,r)||(n=this.$getMode(e.getState(r))),n&&n.getFoldWidget(e,t,r)||(n=this.defaultMode),n.getFoldWidgetRange(e,t,r)}}.call(o.prototype)}),ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../../lib/lang"),e("../../range").Range),o=e("./fold_mode").FoldMode,s=e("../../token_iterator").TokenIterator,a=t.FoldMode=function(e,t){o.call(this),this.voidElements=e||{},this.optionalEndTags=n.mixin({},this.voidElements),t&&n.mixin(this.optionalEndTags,t)};n.inherits(a,o);var l=function(){this.tagName="",this.closing=!1,this.selfClosing=!1,this.start={row:0,column:0},this.end={row:0,column:0}};function c(e,t){return e.type.lastIndexOf(t+".xml")>-1}(function(){this.getFoldWidget=function(e,t,r){var n=this._getFirstTagInLine(e,r);return n?n.closing||!n.tagName&&n.selfClosing?"markbeginend"==t?"end":"":!n.tagName||n.selfClosing||this.voidElements.hasOwnProperty(n.tagName.toLowerCase())||this._findEndTagInLine(e,r,n.tagName,n.end.column)?"":"start":""},this._getFirstTagInLine=function(e,t){for(var r=e.getTokens(t),n=new l,i=0;i<r.length;i++){var o=r[i];if(c(o,"tag-open")){if(n.end.column=n.start.column+o.value.length,n.closing=c(o,"end-tag-open"),!(o=r[++i]))return null;for(n.tagName=o.value,n.end.column+=o.value.length,i++;i<r.length;i++)if(o=r[i],n.end.column+=o.value.length,c(o,"tag-close")){n.selfClosing="/>"==o.value;break}return n}if(c(o,"tag-close"))return n.selfClosing="/>"==o.value,n;n.start.column+=o.value.length}return null},this._findEndTagInLine=function(e,t,r,n){for(var i=e.getTokens(t),o=0,s=0;s<i.length;s++){var a=i[s];if(!((o+=a.value.length)<n)&&c(a,"end-tag-open")&&(a=i[s+1])&&a.value==r)return!0}return!1},this._readTagForward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn();else if(c(t,"tag-name"))r.tagName=t.value;else if(c(t,"tag-close"))return r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length,e.stepForward(),r}while(t=e.stepForward());return null},this._readTagBackward=function(e){var t=e.getCurrentToken();if(!t)return null;var r=new l;do{if(c(t,"tag-open"))return r.closing=c(t,"end-tag-open"),r.start.row=e.getCurrentTokenRow(),r.start.column=e.getCurrentTokenColumn(),e.stepBackward(),r;c(t,"tag-name")?r.tagName=t.value:c(t,"tag-close")&&(r.selfClosing="/>"==t.value,r.end.row=e.getCurrentTokenRow(),r.end.column=e.getCurrentTokenColumn()+t.value.length)}while(t=e.stepBackward());return null},this._pop=function(e,t){for(;e.length;){var r=e[e.length-1];if(t&&r.tagName!=t.tagName){if(this.optionalEndTags.hasOwnProperty(r.tagName)){e.pop();continue}return null}return e.pop()}},this.getFoldWidgetRange=function(e,t,r){var n=this._getFirstTagInLine(e,r);if(!n)return null;var o,a=[];if(n.closing||n.selfClosing){c=new s(e,r,n.end.column);for(var l={row:r,column:n.start.column};o=this._readTagBackward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing)a.push(o);else if(this._pop(a,o),0==a.length)return o.start.column+=o.tagName.length+2,o.start.row==o.end.row&&o.start.column<o.end.column&&(o.start.column=o.end.column),i.fromPoints(o.start,l)}}else{var c=new s(e,r,n.start.column),u={row:r,column:n.start.column+n.tagName.length+2};for(n.start.row==n.end.row&&(u.column=n.end.column);o=this._readTagForward(c);){if(o.selfClosing){if(a.length)continue;return o.start.column+=o.tagName.length+2,o.end.column-=2,i.fromPoints(o.start,o.end)}if(o.closing){if(this._pop(a,o),0==a.length)return i.fromPoints(u,o.start)}else a.push(o)}}}}).call(a.prototype)}),ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./mixed").FoldMode,o=e("./xml").FoldMode,s=e("./cstyle").FoldMode,a=t.FoldMode=function(e,t){i.call(this,new o(e,t),{"js-":new s,"css-":new s})};n.inherits(a,i)}),ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../token_iterator").TokenIterator,i=["accesskey","class","contenteditable","contextmenu","dir","draggable","dropzone","hidden","id","inert","itemid","itemprop","itemref","itemscope","itemtype","lang","spellcheck","style","tabindex","title","translate"].concat(["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"]),o={html:{manifest:1},head:{},title:{},base:{href:1,target:1},link:{href:1,hreflang:1,rel:{stylesheet:1,icon:1},media:{all:1,screen:1,print:1},type:{"text/css":1,"image/png":1,"image/jpeg":1,"image/gif":1},sizes:1},meta:{"http-equiv":{"content-type":1},name:{description:1,keywords:1},content:{"text/html; charset=UTF-8":1},charset:1},style:{type:1,media:{all:1,screen:1,print:1},scoped:1},script:{charset:1,type:{"text/javascript":1},src:1,defer:1,async:1},noscript:{href:1},body:{onafterprint:1,onbeforeprint:1,onbeforeunload:1,onhashchange:1,onmessage:1,onoffline:1,onpopstate:1,onredo:1,onresize:1,onstorage:1,onundo:1,onunload:1},section:{},nav:{},article:{pubdate:1},aside:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},header:{},footer:{},address:{},main:{},p:{},hr:{},pre:{},blockquote:{cite:1},ol:{start:1,reversed:1},ul:{},li:{value:1},dl:{},dt:{},dd:{},figure:{},figcaption:{},div:{},a:{href:1,target:{_blank:1,top:1},ping:1,rel:{nofollow:1,alternate:1,author:1,bookmark:1,help:1,license:1,next:1,noreferrer:1,prefetch:1,prev:1,search:1,tag:1},media:1,hreflang:1,type:1},em:{},strong:{},small:{},s:{},cite:{},q:{cite:1},dfn:{},abbr:{},data:{},time:{datetime:1},code:{},var:{},samp:{},kbd:{},sub:{},sup:{},i:{},b:{},u:{},mark:{},ruby:{},rt:{},rp:{},bdi:{},bdo:{},span:{},br:{},wbr:{},ins:{cite:1,datetime:1},del:{cite:1,datetime:1},img:{alt:1,src:1,height:1,width:1,usemap:1,ismap:1},iframe:{name:1,src:1,height:1,width:1,sandbox:{"allow-same-origin":1,"allow-top-navigation":1,"allow-forms":1,"allow-scripts":1},seamless:{seamless:1}},embed:{src:1,height:1,width:1,type:1},object:{param:1,data:1,type:1,height:1,width:1,usemap:1,name:1,form:1,classid:1},param:{name:1,value:1},video:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},width:1,height:1,poster:1,muted:{muted:1},preload:{auto:1,metadata:1,none:1}},audio:{src:1,autobuffer:1,autoplay:{autoplay:1},loop:{loop:1},controls:{controls:1},muted:{muted:1},preload:{auto:1,metadata:1,none:1}},source:{src:1,type:1,media:1},track:{kind:1,src:1,srclang:1,label:1,default:1},canvas:{width:1,height:1},map:{name:1},area:{shape:1,coords:1,href:1,hreflang:1,alt:1,target:1,media:1,rel:1,ping:1,type:1},svg:{},math:{},table:{summary:1},caption:{},colgroup:{span:1},col:{span:1},tbody:{},thead:{},tfoot:{},tr:{},td:{headers:1,rowspan:1,colspan:1},th:{headers:1,rowspan:1,colspan:1,scope:1},form:{"accept-charset":1,action:1,autocomplete:1,enctype:{"multipart/form-data":1,"application/x-www-form-urlencoded":1},method:{get:1,post:1},name:1,novalidate:1,target:{_blank:1,top:1}},fieldset:{disabled:1,form:1,name:1},legend:{},label:{form:1,for:1},input:{type:{text:1,password:1,hidden:1,checkbox:1,submit:1,radio:1,file:1,button:1,reset:1,image:31,color:1,date:1,datetime:1,"datetime-local":1,email:1,month:1,number:1,range:1,search:1,tel:1,time:1,url:1,week:1},accept:1,alt:1,autocomplete:{on:1,off:1},autofocus:{autofocus:1},checked:{checked:1},disabled:{disabled:1},form:1,formaction:1,formenctype:{"application/x-www-form-urlencoded":1,"multipart/form-data":1,"text/plain":1},formmethod:{get:1,post:1},formnovalidate:{formnovalidate:1},formtarget:{_blank:1,_self:1,_parent:1,_top:1},height:1,list:1,max:1,maxlength:1,min:1,multiple:{multiple:1},name:1,pattern:1,placeholder:1,readonly:{readonly:1},required:{required:1},size:1,src:1,step:1,width:1,files:1,value:1},button:{autofocus:1,disabled:{disabled:1},form:1,formaction:1,formenctype:1,formmethod:1,formnovalidate:1,formtarget:1,name:1,value:1,type:{button:1,submit:1}},select:{autofocus:1,disabled:1,form:1,multiple:{multiple:1},name:1,size:1,readonly:{readonly:1}},datalist:{},optgroup:{disabled:1,label:1},option:{disabled:1,selected:1,label:1,value:1},textarea:{autofocus:{autofocus:1},disabled:{disabled:1},form:1,maxlength:1,name:1,placeholder:1,readonly:{readonly:1},required:{required:1},rows:1,cols:1,wrap:{on:1,off:1,hard:1,soft:1}},keygen:{autofocus:1,challenge:{challenge:1},disabled:{disabled:1},form:1,keytype:{rsa:1,dsa:1,ec:1},name:1},output:{for:1,form:1,name:1},progress:{value:1,max:1},meter:{value:1,min:1,max:1,low:1,high:1,optimum:1},details:{open:1},summary:{},command:{type:1,label:1,icon:1,disabled:1,checked:1,radiogroup:1,command:1},menu:{type:1,label:1},dialog:{open:1}},s=Object.keys(o);function a(e,t){return e.type.lastIndexOf(t+".xml")>-1}function l(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"tag-name");)i=r.stepBackward();if(i)return i.value}var c=function(){};(function(){this.getCompletions=function(e,t,r,n){var i=t.getTokenAt(r.row,r.column);if(!i)return[];if(a(i,"tag-name")||a(i,"tag-open")||a(i,"end-tag-open"))return this.getTagCompletions(e,t,r,n);if(a(i,"tag-whitespace")||a(i,"attribute-name"))return this.getAttributeCompletions(e,t,r,n);if(a(i,"attribute-value"))return this.getAttributeValueCompletions(e,t,r,n);var o=t.getLine(r.row).substr(0,r.column);return/&[a-z]*$/i.test(o)?this.getHTMLEntityCompletions(e,t,r,n):[]},this.getTagCompletions=function(e,t,r,n){return s.map(function(e){return{value:e,meta:"tag",score:Number.MAX_VALUE}})},this.getAttributeCompletions=function(e,t,r,n){var s=l(t,r);if(!s)return[];var a=i;return s in o&&(a=a.concat(Object.keys(o[s]))),a.map(function(e){return{caption:e,snippet:e+'="$0"',meta:"attribute",score:Number.MAX_VALUE}})},this.getAttributeValueCompletions=function(e,t,r,i){var s=l(t,r),c=function(e,t){for(var r=new n(e,t.row,t.column),i=r.getCurrentToken();i&&!a(i,"attribute-name");)i=r.stepBackward();if(i)return i.value}(t,r);if(!s)return[];var u=[];return s in o&&c in o[s]&&"object"==typeof o[s][c]&&(u=Object.keys(o[s][c])),u.map(function(e){return{caption:e,snippet:e,meta:"attribute value",score:Number.MAX_VALUE}})},this.getHTMLEntityCompletions=function(e,t,r,n){return["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;"].map(function(e){return{caption:e,snippet:e,meta:"html entity",score:Number.MAX_VALUE}})}}).call(c.prototype),t.HtmlCompletions=c}),ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text").Mode,s=e("./javascript").Mode,a=e("./css").Mode,l=e("./html_highlight_rules").HtmlHighlightRules,c=e("./behaviour/xml").XmlBehaviour,u=e("./folding/html").FoldMode,d=e("./html_completions").HtmlCompletions,g=e("../worker/worker_client").WorkerClient,h=["area","base","br","col","embed","hr","img","input","keygen","link","meta","menuitem","param","source","track","wbr"],m=["li","dt","dd","p","rt","rp","optgroup","option","colgroup","td","th"],p=function(e){this.fragmentContext=e&&e.fragmentContext,this.HighlightRules=l,this.$behaviour=new c,this.$completer=new d,this.createModeDelegates({"js-":s,"css-":a}),this.foldingRules=new u(this.voidElements,i.arrayToMap(m))};n.inherits(p,o),function(){this.blockComment={start:"\x3c!--",end:"--\x3e"},this.voidElements=i.arrayToMap(h),this.getNextLineIndent=function(e,t,r){return this.$getIndent(t)},this.checkOutdent=function(e,t,r){return!1},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){if(this.constructor==p){var t=new g(["ace"],"ace/mode/html_worker","Worker");return t.attachToDocument(e.getDocument()),this.fragmentContext&&t.call("setOptions",[{context:this.fragmentContext}]),t.on("error",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t}},this.$id="ace/mode/html"}.call(p.prototype),t.Mode=p}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./text_highlight_rules").TextHighlightRules),o=t.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|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",s=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.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",l=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",c=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",u=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",d=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",g=t.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",h=function(){var e=this.createKeywordMapper({"support.function":s,"support.constant":a,"support.type":o,"support.constant.color":l,"support.constant.fonts":c},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+u+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:u},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:d},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:g},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/css_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=e("./css_highlight_rules"),s=function(){var e="@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|or|and|when|not",t=e.split("|"),r=o.supportType.split("|"),n=this.createKeywordMapper({"support.constant":o.supportConstant,keyword:e,"support.constant.color":o.supportConstantColor,"support.constant.fonts":o.supportConstantFonts},"identifier",!0),i="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+i+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:i},{token:["support.function","paren.lparen","string","paren.rparen"],regex:"(url)(\\()(.*)(\\))"},{token:["support.function","paren.lparen"],regex:"(:extend|[a-z0-9_\\-]+)(\\()"},{token:function(e){return t.indexOf(e.toLowerCase())>-1?"keyword":"variable"},regex:"[@\\$][a-z0-9_\\-@\\$]*\\b"},{token:"variable",regex:"[@\\$]\\{[a-z0-9_\\-@\\$]*\\}"},{token:function(e,t){return r.indexOf(e.toLowerCase())>-1?["support.type.property","text"]:["support.type.unknownProperty","text"]},regex:"([a-z0-9-_]+)(\\s*:)"},{token:"keyword",regex:"&"},{token:n,regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z_][a-z0-9-_]*"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|=|!=|-|%|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}]},this.normalizeRules()};n.inherits(s,i),t.LessHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../behaviour").Behaviour,e("./cstyle").CstyleBehaviour),o=e("../../token_iterator").TokenIterator,s=function(){this.inherit(i),this.add("colon","insertion",function(e,t,r,n,i){if(":"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\s+/)&&(l=a.stepBackward()),l&&"support.type"===l.type){var c=n.doc.getLine(s.row);if(":"===c.substring(s.column,s.column+1))return{text:"",selection:[1,1]};if(!c.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&":"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\s+/)&&(c=l.stepBackward()),c&&"support.type"===c.type)if(";"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add("semicolon","insertion",function(e,t,r,n,i){if(";"===i){var o=r.getCursorPosition();if(";"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:"",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define("ace/mode/css_completions",["require","exports","module"],function(e,t,r){"use strict";var n={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},float:{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e)if("string"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if("ruleset"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\w\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&"object"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/less_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/css_completions","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./less_highlight_rules").LessHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/css").CssBehaviour,l=e("./css_completions").CssCompletions,c=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new a,this.$completer=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&"comment"==i[i.length-1].type||t.match(/^.*\{\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions("ruleset",t,r,n)},this.$id="ace/mode/less"}.call(u.prototype),t.Mode=u}),ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./text_highlight_rules").TextHighlightRules),o=t.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|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index",s=t.supportFunction="rgb|rgba|url|attr|counter|counters",a=t.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",l=t.supportConstantColor="aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow",c=t.supportConstantFonts="arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace",u=t.numRe="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))",d=t.pseudoElements="(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b",g=t.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",h=function(){var e=this.createKeywordMapper({"support.function":s,"support.constant":a,"support.type":o,"support.constant.color":l,"support.constant.fonts":c},"text",!0);this.$rules={start:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"@.*?{",push:"media"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],media:[{token:"comment",regex:"\\/\\*",push:"comment"},{token:"paren.lparen",regex:"\\{",push:"ruleset"},{token:"string",regex:"\\}",next:"pop"},{token:"keyword",regex:"#[a-z0-9-_]+"},{token:"variable",regex:"\\.[a-z0-9-_]+"},{token:"string",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:"\\*\\/",next:"pop"},{defaultToken:"comment"}],ruleset:[{token:"paren.rparen",regex:"\\}",next:"pop"},{token:"comment",regex:"\\/\\*",push:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:["constant.numeric","keyword"],regex:"("+u+")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)"},{token:"constant.numeric",regex:u},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:["punctuation","entity.other.attribute-name.pseudo-element.css"],regex:d},{token:["punctuation","entity.other.attribute-name.pseudo-class.css"],regex:g},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:e,regex:"\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*"},{caseInsensitive:!0}]},this.normalizeRules()};n.inherits(h,i),t.CssHighlightRules=h}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/css_completions",["require","exports","module"],function(e,t,r){"use strict";var n={background:{"#$0":1},"background-color":{"#$0":1,transparent:1,fixed:1},"background-image":{"url('/$0')":1},"background-repeat":{repeat:1,"repeat-x":1,"repeat-y":1,"no-repeat":1,inherit:1},"background-position":{bottom:2,center:2,left:2,right:2,top:2,inherit:2},"background-attachment":{scroll:1,fixed:1},"background-size":{cover:1,contain:1},"background-clip":{"border-box":1,"padding-box":1,"content-box":1},"background-origin":{"border-box":1,"padding-box":1,"content-box":1},border:{"solid $0":1,"dashed $0":1,"dotted $0":1,"#$0":1},"border-color":{"#$0":1},"border-style":{solid:2,dashed:2,dotted:2,double:2,groove:2,hidden:2,inherit:2,inset:2,none:2,outset:2,ridged:2},"border-collapse":{collapse:1,separate:1},bottom:{px:1,em:1,"%":1},clear:{left:1,right:1,both:1,none:1},color:{"#$0":1,"rgb(#$00,0,0)":1},cursor:{default:1,pointer:1,move:1,text:1,wait:1,help:1,progress:1,"n-resize":1,"ne-resize":1,"e-resize":1,"se-resize":1,"s-resize":1,"sw-resize":1,"w-resize":1,"nw-resize":1},display:{none:1,block:1,inline:1,"inline-block":1,"table-cell":1},"empty-cells":{show:1,hide:1},float:{left:1,right:1,none:1},"font-family":{Arial:2,"Comic Sans MS":2,Consolas:2,"Courier New":2,Courier:2,Georgia:2,Monospace:2,"Sans-Serif":2,"Segoe UI":2,Tahoma:2,"Times New Roman":2,"Trebuchet MS":2,Verdana:1},"font-size":{px:1,em:1,"%":1},"font-weight":{bold:1,normal:1},"font-style":{italic:1,normal:1},"font-variant":{normal:1,"small-caps":1},height:{px:1,em:1,"%":1},left:{px:1,em:1,"%":1},"letter-spacing":{normal:1},"line-height":{normal:1},"list-style-type":{none:1,disc:1,circle:1,square:1,decimal:1,"decimal-leading-zero":1,"lower-roman":1,"upper-roman":1,"lower-greek":1,"lower-latin":1,"upper-latin":1,georgian:1,"lower-alpha":1,"upper-alpha":1},margin:{px:1,em:1,"%":1},"margin-right":{px:1,em:1,"%":1},"margin-left":{px:1,em:1,"%":1},"margin-top":{px:1,em:1,"%":1},"margin-bottom":{px:1,em:1,"%":1},"max-height":{px:1,em:1,"%":1},"max-width":{px:1,em:1,"%":1},"min-height":{px:1,em:1,"%":1},"min-width":{px:1,em:1,"%":1},overflow:{hidden:1,visible:1,auto:1,scroll:1},"overflow-x":{hidden:1,visible:1,auto:1,scroll:1},"overflow-y":{hidden:1,visible:1,auto:1,scroll:1},padding:{px:1,em:1,"%":1},"padding-top":{px:1,em:1,"%":1},"padding-right":{px:1,em:1,"%":1},"padding-bottom":{px:1,em:1,"%":1},"padding-left":{px:1,em:1,"%":1},"page-break-after":{auto:1,always:1,avoid:1,left:1,right:1},"page-break-before":{auto:1,always:1,avoid:1,left:1,right:1},position:{absolute:1,relative:1,fixed:1,static:1},right:{px:1,em:1,"%":1},"table-layout":{fixed:1,auto:1},"text-decoration":{none:1,underline:1,"line-through":1,blink:1},"text-align":{left:1,right:1,center:1,justify:1},"text-transform":{capitalize:1,uppercase:1,lowercase:1,none:1},top:{px:1,em:1,"%":1},"vertical-align":{top:1,bottom:1},visibility:{hidden:1,visible:1},"white-space":{nowrap:1,normal:1,pre:1,"pre-line":1,"pre-wrap":1},width:{px:1,em:1,"%":1},"word-spacing":{normal:1},filter:{"alpha(opacity=$0100)":1},"text-shadow":{"$02px 2px 2px #777":1},"text-overflow":{"ellipsis-word":1,clip:1,ellipsis:1},"-moz-border-radius":1,"-moz-border-radius-topright":1,"-moz-border-radius-bottomright":1,"-moz-border-radius-topleft":1,"-moz-border-radius-bottomleft":1,"-webkit-border-radius":1,"-webkit-border-top-right-radius":1,"-webkit-border-top-left-radius":1,"-webkit-border-bottom-right-radius":1,"-webkit-border-bottom-left-radius":1,"-moz-box-shadow":1,"-webkit-box-shadow":1,transform:{"rotate($00deg)":1,"skew($00deg)":1},"-moz-transform":{"rotate($00deg)":1,"skew($00deg)":1},"-webkit-transform":{"rotate($00deg)":1,"skew($00deg)":1}},i=function(){};(function(){this.completionsDefined=!1,this.defineCompletions=function(){if(document){var e=document.createElement("c").style;for(var t in e)if("string"==typeof e[t]){var r=t.replace(/[A-Z]/g,function(e){return"-"+e.toLowerCase()});n.hasOwnProperty(r)||(n[r]=1)}}this.completionsDefined=!0},this.getCompletions=function(e,t,r,n){if(this.completionsDefined||this.defineCompletions(),!t.getTokenAt(r.row,r.column))return[];if("ruleset"===e){var i=t.getLine(r.row).substr(0,r.column);return/:[^;]+$/.test(i)?(/([\w\-]+):[^:]*$/.test(i),this.getPropertyValueCompletions(e,t,r,n)):this.getPropertyCompletions(e,t,r,n)}return[]},this.getPropertyCompletions=function(e,t,r,i){return Object.keys(n).map(function(e){return{caption:e,snippet:e+": $0",meta:"property",score:Number.MAX_VALUE}})},this.getPropertyValueCompletions=function(e,t,r,i){var o=t.getLine(r.row).substr(0,r.column),s=(/([\w\-]+):[^:]*$/.exec(o)||{})[1];if(!s)return[];var a=[];return s in n&&"object"==typeof n[s]&&(a=Object.keys(n[s])),a.map(function(e){return{caption:e,snippet:e,meta:"property value",score:Number.MAX_VALUE}})}}).call(i.prototype),t.CssCompletions=i}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../behaviour").Behaviour,e("./cstyle").CstyleBehaviour),o=e("../../token_iterator").TokenIterator,s=function(){this.inherit(i),this.add("colon","insertion",function(e,t,r,n,i){if(":"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\s+/)&&(l=a.stepBackward()),l&&"support.type"===l.type){var c=n.doc.getLine(s.row);if(":"===c.substring(s.column,s.column+1))return{text:"",selection:[1,1]};if(!c.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&":"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\s+/)&&(c=l.stepBackward()),c&&"support.type"===c.type)if(";"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add("semicolon","insertion",function(e,t,r,n,i){if(";"===i){var o=r.getCursorPosition();if(";"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:"",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./css_highlight_rules").CssHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./css_completions").CssCompletions,c=e("./behaviour/css").CssBehaviour,u=e("./folding/cstyle").FoldMode,d=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new c,this.$completer=new l,this.foldingRules=new u};n.inherits(d,i),function(){this.foldingRules="cStyle",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&"comment"==i[i.length-1].type||t.match(/^.*\{\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.getCompletions=function(e,t,r,n){return this.$completer.getCompletions(e,t,r,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/css_worker","Worker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/css"}.call(d.prototype),t.Mode=d}),ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text_highlight_rules").TextHighlightRules,s=function(){var e=i.arrayToMap(function(){for(var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),r="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),n=[],i=0,o=e.length;i<o;i++)Array.prototype.push.apply(n,(e[i]+t.join("|"+e[i])).split("|"));return Array.prototype.push.apply(n,t),Array.prototype.push.apply(n,r),n}()),t=i.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute".split("|")),r=i.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),n=i.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),o=i.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare".split("|")),s=i.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),a="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:a+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:a},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?"support.type":o.hasOwnProperty(i)?"keyword":r.hasOwnProperty(i)?"constant.language":t.hasOwnProperty(i)?"support.function":n.hasOwnProperty(i.toLowerCase())?"support.constant.color":s.hasOwnProperty(i.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable",regex:"[a-z_\\-$][a-z0-9_\\-$]*\\b"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]}};n.inherits(s,o),t.ScssHighlightRules=s}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,r){"use strict";var n,i=e("../../lib/oop"),o=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,a=e("../../lib/lang"),l=["text","paren.rparen","punctuation.operator"],c=["text","paren.rparen","punctuation.operator","comment"],u={},d=function(e){var t=-1;if(e.multiSelect&&(t=e.selection.index,u.rangeCount!=e.multiSelect.rangeCount&&(u={rangeCount:e.multiSelect.rangeCount})),u[t])return n=u[t];n=u[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},g=function(e,t,r,n){var i=e.end.row-e.start.row;return{text:r+t+n,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},h=function(){this.add("braces","insertion",function(e,t,r,i,o){var s=r.getCursorPosition(),l=i.doc.getLine(s.row);if("{"==o){d(r);var c=r.getSelectionRange(),u=i.doc.getTextRange(c);if(""!==u&&"{"!==u&&r.getWrapBehavioursEnabled())return g(c,u,"{","}");if(h.isSaneInsertion(r,i))return/[\]\}\)]/.test(l[s.column])||r.inMultiSelectMode?(h.recordAutoInsert(r,i,"}"),{text:"{}",selection:[1,1]}):(h.recordMaybeInsert(r,i,"{"),{text:"{",selection:[1,1]})}else if("}"==o){if(d(r),"}"==l.substring(s.column,s.column+1))if(null!==i.$findOpeningBracket("}",{column:s.column+1,row:s.row})&&h.isAutoInsertedClosing(s,l,o))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}else{if("\n"==o||"\r\n"==o){d(r);var m="";if(h.isMaybeInsertedClosing(s,l)&&(m=a.stringRepeat("}",n.maybeInsertedBrackets),h.clearMaybeInsertedClosing()),"}"===l.substring(s.column,s.column+1)){var p=i.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!p)return null;var _=this.$getIndent(i.getLine(p.row))}else{if(!m)return void h.clearMaybeInsertedClosing();_=this.$getIndent(l)}var f=_+i.getTabString();return{text:"\n"+f+"\n"+_+m,selection:[1,f.length,1,f.length]}}h.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,r,i,o){var s=i.doc.getTextRange(o);if(!o.isMultiLine()&&"{"==s){if(d(r),"}"==i.doc.getLine(o.start.row).substring(o.end.column,o.end.column+1))return o.end.column++,o;n.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,r,n,i){if("("==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"(",")");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,")"),{text:"()",selection:[1,1]}}else if(")"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if(")"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket(")",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("parens","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"("==o&&(d(r),")"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("brackets","insertion",function(e,t,r,n,i){if("["==i){d(r);var o=r.getSelectionRange(),s=n.doc.getTextRange(o);if(""!==s&&r.getWrapBehavioursEnabled())return g(o,s,"[","]");if(h.isSaneInsertion(r,n))return h.recordAutoInsert(r,n,"]"),{text:"[]",selection:[1,1]}}else if("]"==i){d(r);var a=r.getCursorPosition(),l=n.doc.getLine(a.row);if("]"==l.substring(a.column,a.column+1))if(null!==n.$findOpeningBracket("]",{column:a.column+1,row:a.row})&&h.isAutoInsertedClosing(a,l,i))return h.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}),this.add("brackets","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&"["==o&&(d(r),"]"==n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)))return i.end.column++,i}),this.add("string_dquotes","insertion",function(e,t,r,n,i){if('"'==i||"'"==i){d(r);var o=i,s=r.getSelectionRange(),a=n.doc.getTextRange(s);if(""!==a&&"'"!==a&&'"'!=a&&r.getWrapBehavioursEnabled())return g(s,a,o,o);if(!a){var l=r.getCursorPosition(),c=n.doc.getLine(l.row),u=c.substring(l.column-1,l.column),h=c.substring(l.column,l.column+1),m=n.getTokenAt(l.row,l.column),p=n.getTokenAt(l.row,l.column+1);if("\\"==u&&m&&/escape/.test(m.type))return null;var _,f=m&&/string|escape/.test(m.type),b=!p||/string|escape/.test(p.type);if(h==o)_=f!==b;else{if(f&&!b)return null;if(f&&b)return null;var y=n.$mode.tokenRe;y.lastIndex=0;var x=y.test(u);y.lastIndex=0;var v=y.test(u);if(x||v)return null;if(h&&!/[\s;,.})\]\\]/.test(h))return null;_=!0}return{text:_?o+o:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,r,n,i){var o=n.doc.getTextRange(i);if(!i.isMultiLine()&&('"'==o||"'"==o)&&(d(r),n.doc.getLine(i.start.row).substring(i.start.column+1,i.start.column+2)==o))return i.end.column++,i})};h.isSaneInsertion=function(e,t){var r=e.getCursorPosition(),n=new s(t,r.row,r.column);if(!this.$matchTokenType(n.getCurrentToken()||"text",l)){var i=new s(t,r.row,r.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",l))return!1}return n.stepForward(),n.getCurrentTokenRow()!==r.row||this.$matchTokenType(n.getCurrentToken()||"text",c)},h.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},h.recordAutoInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isAutoInsertedClosing(i,o,n.autoInsertedLineEnd[0])||(n.autoInsertedBrackets=0),n.autoInsertedRow=i.row,n.autoInsertedLineEnd=r+o.substr(i.column),n.autoInsertedBrackets++},h.recordMaybeInsert=function(e,t,r){var i=e.getCursorPosition(),o=t.doc.getLine(i.row);this.isMaybeInsertedClosing(i,o)||(n.maybeInsertedBrackets=0),n.maybeInsertedRow=i.row,n.maybeInsertedLineStart=o.substr(0,i.column)+r,n.maybeInsertedLineEnd=o.substr(i.column),n.maybeInsertedBrackets++},h.isAutoInsertedClosing=function(e,t,r){return n.autoInsertedBrackets>0&&e.row===n.autoInsertedRow&&r===n.autoInsertedLineEnd[0]&&t.substr(e.column)===n.autoInsertedLineEnd},h.isMaybeInsertedClosing=function(e,t){return n.maybeInsertedBrackets>0&&e.row===n.maybeInsertedRow&&t.substr(e.column)===n.maybeInsertedLineEnd&&t.substr(0,e.column)==n.maybeInsertedLineStart},h.popAutoInsertedClosing=function(){n.autoInsertedLineEnd=n.autoInsertedLineEnd.substr(1),n.autoInsertedBrackets--},h.clearMaybeInsertedClosing=function(){n&&(n.maybeInsertedBrackets=0,n.maybeInsertedRow=-1)},i.inherits(h,o),t.CstyleBehaviour=h}),ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=(e("../behaviour").Behaviour,e("./cstyle").CstyleBehaviour),o=e("../../token_iterator").TokenIterator,s=function(){this.inherit(i),this.add("colon","insertion",function(e,t,r,n,i){if(":"===i){var s=r.getCursorPosition(),a=new o(n,s.row,s.column),l=a.getCurrentToken();if(l&&l.value.match(/\s+/)&&(l=a.stepBackward()),l&&"support.type"===l.type){var c=n.doc.getLine(s.row);if(":"===c.substring(s.column,s.column+1))return{text:"",selection:[1,1]};if(!c.substring(s.column).match(/^\s*;/))return{text:":;",selection:[1,1]}}}}),this.add("colon","deletion",function(e,t,r,n,i){var s=n.doc.getTextRange(i);if(!i.isMultiLine()&&":"===s){var a=r.getCursorPosition(),l=new o(n,a.row,a.column),c=l.getCurrentToken();if(c&&c.value.match(/\s+/)&&(c=l.stepBackward()),c&&"support.type"===c.type)if(";"===n.doc.getLine(i.start.row).substring(i.end.column,i.end.column+1))return i.end.column++,i}}),this.add("semicolon","insertion",function(e,t,r,n,i){if(";"===i){var o=r.getCursorPosition();if(";"===n.doc.getLine(o.row).substring(o.column,o.column+1))return{text:"",selection:[1,1]}}})};n.inherits(s,i),t.CssBehaviour=s}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/scss",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./scss_highlight_rules").ScssHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./behaviour/css").CssBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new a,this.foldingRules=new l};n.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e).tokens;return i.length&&"comment"==i[i.length-1].type||t.match(/^.*\{\s*$/)&&(n+=r),n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.$id="ace/mode/scss"}.call(c.prototype),t.Mode=c}),ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("../lib/lang"),o=e("./text_highlight_rules").TextHighlightRules,s=function(){var e=i.arrayToMap(function(){for(var e="-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-".split("|"),t="appearance|background-clip|background-inline-policy|background-origin|background-size|binding|border-bottom-colors|border-left-colors|border-right-colors|border-top-colors|border-end|border-end-color|border-end-style|border-end-width|border-image|border-start|border-start-color|border-start-style|border-start-width|box-align|box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|box-pack|box-sizing|column-count|column-gap|column-width|column-rule|column-rule-width|column-rule-style|column-rule-color|float-edge|font-feature-settings|font-language-override|force-broken-image-icon|image-region|margin-end|margin-start|opacity|outline|outline-color|outline-offset|outline-radius|outline-radius-bottomleft|outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|outline-style|outline-width|padding-end|padding-start|stack-sizing|tab-size|text-blink|text-decoration-color|text-decoration-line|text-decoration-style|transform|transform-origin|transition|transition-delay|transition-duration|transition-property|transition-timing-function|user-focus|user-input|user-modify|user-select|window-shadow|border-radius".split("|"),r="azimuth|background-attachment|background-color|background-image|background-position|background-repeat|background|border-bottom-color|border-bottom-style|border-bottom-width|border-bottom|border-collapse|border-color|border-left-color|border-left-style|border-left-width|border-left|border-right-color|border-right-style|border-right-width|border-right|border-spacing|border-style|border-top-color|border-top-style|border-top-width|border-top|border-width|border|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|counter-reset|cue-after|cue-before|cue|cursor|direction|display|elevation|empty-cells|float|font-family|font-size-adjust|font-size|font-stretch|font-style|font-variant|font-weight|font|height|left|letter-spacing|line-height|list-style-image|list-style-position|list-style-type|list-style|margin-bottom|margin-left|margin-right|margin-top|marker-offset|margin|marks|max-height|max-width|min-height|min-width|opacity|orphans|outline-color|outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|padding-left|padding-right|padding-top|padding|page-break-after|page-break-before|page-break-inside|page|pause-after|pause-before|pause|pitch-range|pitch|play-during|position|quotes|richness|right|size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|stress|table-layout|text-align|text-decoration|text-indent|text-shadow|text-transform|top|unicode-bidi|vertical-align|visibility|voice-family|volume|white-space|widows|width|word-spacing|z-index".split("|"),n=[],i=0,o=e.length;i<o;i++)Array.prototype.push.apply(n,(e[i]+t.join("|"+e[i])).split("|"));return Array.prototype.push.apply(n,t),Array.prototype.push.apply(n,r),n}()),t=i.arrayToMap("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|scale_color|transparentize|type_of|unit|unitless|unqoute".split("|")),r=i.arrayToMap("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|decimal-leading-zero|decimal|default|disabled|disc|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|inactive|inherit|inline-block|inline|inset|inside|inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|keep-all|left|lighter|line-edge|line-through|line|list-item|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|solid|square|static|strict|super|sw-resize|table-footer-group|table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|zero".split("|")),n=i.arrayToMap("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow".split("|")),o=i.arrayToMap("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare".split("|")),s=i.arrayToMap("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp".split("|")),a="\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))";this.$rules={start:[{token:"comment",regex:"\\/\\/.*$"},{token:"comment",regex:"\\/\\*",next:"comment"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:'["].*\\\\$',next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"string",regex:"['].*\\\\$",next:"qstring"},{token:"constant.numeric",regex:a+"(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)"},{token:"constant.numeric",regex:"#[a-f0-9]{6}"},{token:"constant.numeric",regex:"#[a-f0-9]{3}"},{token:"constant.numeric",regex:a},{token:["support.function","string","support.function"],regex:"(url\\()(.*)(\\))"},{token:function(i){return e.hasOwnProperty(i.toLowerCase())?"support.type":o.hasOwnProperty(i)?"keyword":r.hasOwnProperty(i)?"constant.language":t.hasOwnProperty(i)?"support.function":n.hasOwnProperty(i.toLowerCase())?"support.constant.color":s.hasOwnProperty(i.toLowerCase())?"variable.language":"text"},regex:"\\-?[@a-z_][@a-z0-9_\\-]*"},{token:"variable",regex:"[a-z_\\-$][a-z0-9_\\-$]*\\b"},{token:"variable.language",regex:"#[a-z0-9-_]+"},{token:"variable.language",regex:"\\.[a-z0-9-_]+"},{token:"variable.language",regex:":[a-z0-9-_]+"},{token:"constant",regex:"[a-z0-9-_]+"},{token:"keyword.operator",regex:"<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"},{token:"text",regex:"\\s+"},{caseInsensitive:!0}],comment:[{token:"comment",regex:".*?\\*\\/",next:"start"},{token:"comment",regex:".+"}],qqstring:[{token:"string",regex:'(?:(?:\\\\.)|(?:[^"\\\\]))*?"',next:"start"},{token:"string",regex:".+"}],qstring:[{token:"string",regex:"(?:(?:\\\\.)|(?:[^'\\\\]))*?'",next:"start"},{token:"string",regex:".+"}]}};n.inherits(s,o),t.ScssHighlightRules=s}),ace.define("ace/mode/sass_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/scss_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=(e("../lib/lang"),e("./scss_highlight_rules").ScssHighlightRules),o=function(){i.call(this);var e=this.$rules.start;"comment"==e[1].token&&(e.splice(1,1,{onMatch:function(e,t,r){return r.unshift(this.next,-1,e.length-2,t),"comment"},regex:/^\s*\/\*/,next:"comment"},{token:"error.invalid",regex:"/\\*|[{;}]"},{token:"support.type",regex:/^\s*:[\w\-]+\s/}),this.$rules.comment=[{regex:/^\s*/,onMatch:function(e,t,r){return-1===r[1]&&(r[1]=Math.max(r[2],e.length-1)),e.length<=r[1]?(r.shift(),r.shift(),r.shift(),this.next=r.shift(),"text"):(this.next="","comment")},next:"start"},{defaultToken:"comment"}])};n.inherits(o,i),t.SassHighlightRules=o}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./fold_mode").FoldMode,o=e("../../range").Range,s=t.FoldMode=function(){};n.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,r){var n=this.indentationBlock(e,r);if(n)return n;var i=/\S/,s=e.getLine(r),a=s.search(i);if(-1!=a&&"#"==s[a]){for(var l=s.length,c=e.getLength(),u=r,d=r;++r<c;){var g=(s=e.getLine(r)).search(i);if(-1!=g){if("#"!=s[g])break;d=r}}if(d>u){var h=e.getLine(d).length;return new o(u,l,d,h)}}},this.getFoldWidget=function(e,t,r){var n=e.getLine(r),i=n.search(/\S/),o=e.getLine(r+1),s=e.getLine(r-1),a=s.search(/\S/),l=o.search(/\S/);if(-1==i)return e.foldWidgets[r-1]=-1!=a&&a<l?"start":"","";if(-1==a){if(i==l&&"#"==n[i]&&"#"==o[i])return e.foldWidgets[r-1]="",e.foldWidgets[r+1]="","start"}else if(a==i&&"#"==n[i]&&"#"==s[i]&&-1==e.getLine(r-2).search(/\S/))return e.foldWidgets[r-1]="start",e.foldWidgets[r+1]="","";return e.foldWidgets[r-1]=-1!=a&&a<i?"start":"",i<l?"start":""}}.call(s.prototype)}),ace.define("ace/mode/sass",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sass_highlight_rules","ace/mode/folding/coffee"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./sass_highlight_rules").SassHighlightRules,s=e("./folding/coffee").FoldMode,a=function(){this.HighlightRules=o,this.foldingRules=new s};n.inherits(a,i),function(){this.lineCommentStart="//",this.$id="ace/mode/sass"}.call(a.prototype),t.Mode=a}),ace.define("ace/mode/yaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment",regex:"#.*$"},{token:"list.markup",regex:/^(?:-{3}|\.{3})\s*(?=#|$)/},{token:"list.markup",regex:/^\s*[\-?](?:$|\s)/},{token:"constant",regex:"!![\\w//]+"},{token:"constant.language",regex:"[&\\*][a-zA-Z0-9-_]+"},{token:["meta.tag","keyword"],regex:/^(\s*\w.*?)(\:(?:\s+|$))/},{token:["meta.tag","keyword"],regex:/(\w+?)(\s*\:(?:\s+|$))/},{token:"keyword.operator",regex:"<<\\w*:\\w*"},{token:"keyword.operator",regex:"-\\s*(?=[{])"},{token:"string",regex:'["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]'},{token:"string",regex:"[|>][-+\\d\\s]*$",next:"qqstring"},{token:"string",regex:"['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']"},{token:"constant.numeric",regex:/(\b|[+\-\.])[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)/},{token:"constant.numeric",regex:/[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/},{token:"constant.language.boolean",regex:"(?:true|false|TRUE|FALSE|True|False|yes|no)\\b"},{token:"paren.lparen",regex:"[[({]"},{token:"paren.rparen",regex:"[\\])}]"}],qqstring:[{token:"string",regex:"(?=(?:(?:\\\\.)|(?:[^:]))*?:)",next:"start"},{token:"string",regex:".+"}]}};n.inherits(o,i),t.YamlHighlightRules=o}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("./fold_mode").FoldMode,o=e("../../range").Range,s=t.FoldMode=function(){};n.inherits(s,i),function(){this.getFoldWidgetRange=function(e,t,r){var n=this.indentationBlock(e,r);if(n)return n;var i=/\S/,s=e.getLine(r),a=s.search(i);if(-1!=a&&"#"==s[a]){for(var l=s.length,c=e.getLength(),u=r,d=r;++r<c;){var g=(s=e.getLine(r)).search(i);if(-1!=g){if("#"!=s[g])break;d=r}}if(d>u){var h=e.getLine(d).length;return new o(u,l,d,h)}}},this.getFoldWidget=function(e,t,r){var n=e.getLine(r),i=n.search(/\S/),o=e.getLine(r+1),s=e.getLine(r-1),a=s.search(/\S/),l=o.search(/\S/);if(-1==i)return e.foldWidgets[r-1]=-1!=a&&a<l?"start":"","";if(-1==a){if(i==l&&"#"==n[i]&&"#"==o[i])return e.foldWidgets[r-1]="",e.foldWidgets[r+1]="","start"}else if(a==i&&"#"==n[i]&&"#"==s[i]&&-1==e.getLine(r-2).search(/\S/))return e.foldWidgets[r-1]="start",e.foldWidgets[r+1]="","";return e.foldWidgets[r-1]=-1!=a&&a<i?"start":"",i<l?"start":""}}.call(s.prototype)}),ace.define("ace/mode/yaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/yaml_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/coffee"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./yaml_highlight_rules").YamlHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("./folding/coffee").FoldMode,l=function(){this.HighlightRules=o,this.$outdent=new s,this.foldingRules=new a};n.inherits(l,i),function(){this.lineCommentStart="#",this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t);"start"==e&&(t.match(/^.*[\{\(\[]\s*$/)&&(n+=r));return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.$id="ace/mode/yaml"}.call(l.prototype),t.Mode=l}),ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,o=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},o.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};n.inherits(o,i),o.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},o.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},o.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=o}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,o=e("./text_highlight_rules").TextHighlightRules,s="[a-zA-Z\\$_¡-￿][a-zA-Z\\d\\$_¡-￿]*",a=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|async|await|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),c("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+s+")(\\.)(prototype)(\\.)("+s+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+s+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+s+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void)\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:s},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+s+")(\\.)("+s+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:s},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),c("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:s},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]},e&&e.noES6||(this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,r){if(this.next="{"==e?this.nextState:"","{"==e&&r.length)r.unshift("start",t);else if("}"==e&&r.length&&(r.shift(),this.next=r.shift(),-1!=this.next.indexOf("string")||-1!=this.next.indexOf("jsx")))return"paren.quasi.end";return"{"==e?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),e&&0==e.jsx||l.call(this)),this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};function l(){var e=s.replace("\\d","\\d\\-"),t={onMatch:function(e,t,r){var n="/"==e.charAt(1)?2:1;return 1==n?(t!=this.nextState?r.unshift(this.next,this.nextState,0):r.unshift(this.next),r[2]++):2==n&&t==this.nextState&&(r[1]--,(!r[1]||r[1]<0)&&(r.shift(),r.shift())),[{type:"meta.tag.punctuation."+(1==n?"":"end-")+"tag-open.xml",value:e.slice(0,n)},{type:"meta.tag.tag-name.xml",value:e.substr(n)}]},regex:"</?"+e,next:"jsxAttributes",nextState:"jsx"};this.$rules.start.unshift(t);var r={regex:"{",token:"paren.quasi.start",push:"start"};this.$rules.jsx=[r,t,{include:"reference"},{defaultToken:"string"}],this.$rules.jsxAttributes=[{token:"meta.tag.punctuation.tag-close.xml",regex:"/?>",onMatch:function(e,t,r){return t==r[0]&&r.shift(),2==e.length&&(r[0]==this.nextState&&r[1]--,(!r[1]||r[1]<0)&&r.splice(0,2)),this.next=r[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},r,c("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function c(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}n.inherits(a,o),t.JavaScriptHighlightRules=a}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,r){"use strict";var n=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return!!/^\s+$/.test(e)&&/^\s*\}/.test(t)},this.autoOutdent=function(e,t){var r=e.getLine(t).match(/^(\s*\})/);if(!r)return 0;var i=r[1].length,o=e.findMatchingBracket({row:t,column:i});if(!o||o.row==t)return 0;var s=this.$getIndent(e.getLine(o.row));e.replace(new n(t,0,t,i-1),s)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,r){"use strict";var n=e("../../lib/oop"),i=e("../../range").Range,o=e("./fold_mode").FoldMode,s=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};n.inherits(s,o),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,r){var n=e.getLine(r);if(this.singleLineBlockCommentRe.test(n)&&!this.startRegionRe.test(n)&&!this.tripleStarBlockCommentRe.test(n))return"";var i=this._getFoldWidgetBase(e,t,r);return!i&&this.startRegionRe.test(n)?"start":i},this.getFoldWidgetRange=function(e,t,r,n){var i,o=e.getLine(r);if(this.startRegionRe.test(o))return this.getCommentRegionBlock(e,o,r);if(i=o.match(this.foldingStartMarker)){var s=i.index;if(i[1])return this.openingBracketBlock(e,i[1],r,s);var a=e.getCommentFoldRange(r,s+i[0].length,1);return a&&!a.isMultiLine()&&(n?a=this.getSectionRange(e,r):"all"!=t&&(a=null)),a}if("markbegin"!==t&&(i=o.match(this.foldingStopMarker))){s=i.index+i[0].length;return i[1]?this.closingBracketBlock(e,i[1],r,s):e.getCommentFoldRange(r,s,-1)}},this.getSectionRange=function(e,t){for(var r=e.getLine(t),n=r.search(/\S/),o=t,s=r.length,a=t+=1,l=e.getLength();++t<l;){var c=(r=e.getLine(t)).search(/\S/);if(-1!==c){if(n>c)break;var u=this.getFoldWidgetRange(e,"all",t);if(u){if(u.start.row<=o)break;if(u.isMultiLine())t=u.end.row;else if(n==c)break}a=t}}return new i(o,s,a,e.getLine(a).length)},this.getCommentRegionBlock=function(e,t,r){for(var n=t.search(/\s*$/),o=e.getLength(),s=r,a=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,l=1;++r<o;){t=e.getLine(r);var c=a.exec(t);if(c&&(c[1]?l--:l++,!l))break}if(r>s)return new i(s,n,r,t.length)}}.call(s.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,r){"use strict";var n=e("../lib/oop"),i=e("./text").Mode,o=e("./javascript_highlight_rules").JavaScriptHighlightRules,s=e("./matching_brace_outdent").MatchingBraceOutdent,a=e("../worker/worker_client").WorkerClient,l=e("./behaviour/cstyle").CstyleBehaviour,c=e("./folding/cstyle").FoldMode,u=function(){this.HighlightRules=o,this.$outdent=new s,this.$behaviour=new l,this.foldingRules=new c};n.inherits(u,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,r){var n=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),o=i.tokens,s=i.state;if(o.length&&"comment"==o[o.length-1].type)return n;if("start"==e||"no_regex"==e)(a=t.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/))&&(n+=r);else if("doc-start"==e){if("start"==s||"no_regex"==s)return"";var a;(a=t.match(/^\s*(\/?)\*/))&&(a[1]&&(n+=" "),n+="* ")}return n},this.checkOutdent=function(e,t,r){return this.$outdent.checkOutdent(t,r)},this.autoOutdent=function(e,t,r){this.$outdent.autoOutdent(t,r)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(u.prototype),t.Mode=u}),function(e){"use strict";var t=e.oc.foundation.base,r=t.prototype,n=function(r,n){t.call(this),this.options=n,this.$el=e(r),this.$textarea=this.$el.find(">textarea:first"),this.$toolbar=this.$el.find(">.editor-toolbar:first"),this.$code=null,this.editor=null,this.$form=null,this.isFullscreen=!1,this.$fullscreenEnable=this.$toolbar.find("li.fullscreen-enable"),this.$fullscreenDisable=this.$toolbar.find("li.fullscreen-disable"),this.$searchboxEnable=this.$toolbar.find("li.searchbox-enable"),this.$replaceboxEnable=this.$toolbar.find("li.replacebox-enable"),e.oc.foundation.controlUtils.markDisposable(r),this.init(),this.$el.trigger("oc.codeEditorReady")};(n.prototype=Object.create(r)).constructor=n,n.DEFAULTS={fontSize:12,wordWrap:"off",codeFolding:"manual",autocompletion:"manual",tabSize:4,theme:"textmate",showInvisibles:!0,highlightActiveLine:!0,useSoftTabs:!0,autoCloseTags:!0,showGutter:!0,enableEmmet:!0,language:"php",margin:0,vendorPath:"/",showPrintMargin:!1,highlightSelectedWord:!1,hScrollBarAlwaysVisible:!1,readOnly:!1},n.prototype.init=function(){this.$el.attr("id")||this.$el.attr("id","element-"+Math.random().toString(36).substring(7)),this.$code=e("<div />").addClass("editor-code").attr("id",this.$el.attr("id")+"-code").css({position:"absolute",top:0,right:0,bottom:0,left:0}).appendTo(this.$el);var t=this.editor=ace.edit(this.$code.attr("id")),r=this.options,n=this.$el.closest("form");t.$blockScrolling=1/0,this.$form=n,this.$textarea.hide(),t.getSession().setValue(this.$textarea.val()),t.on("change",this.proxy(this.onChange)),n.on("oc.beforeRequest",this.proxy(this.onBeforeRequest)),e(window).on("resize",this.proxy(this.onResize)),e(window).on("oc.updateUi",this.proxy(this.onResize)),this.$el.one("dispose-control",this.proxy(this.dispose)),oc.AssetManager.load({js:[r.vendorPath+"/theme-"+r.theme+".js"]},function(){if(t){t.setTheme("ace/theme/"+r.theme);var e="php"===r.language;t.getSession().setMode({path:"ace/mode/"+r.language,inline:e})}}),t.wrapper=this,t.setShowInvisibles(r.showInvisibles),t.setBehavioursEnabled(r.autoCloseTags),t.setHighlightActiveLine(r.highlightActiveLine),t.renderer.setShowGutter(r.showGutter),t.renderer.setShowPrintMargin(r.showPrintMargin),t.setHighlightSelectedWord(r.highlightSelectedWord),t.renderer.setHScrollBarAlwaysVisible(r.hScrollBarAlwaysVisible),t.setDisplayIndentGuides(r.displayIndentGuides),t.getSession().setUseSoftTabs(r.useSoftTabs),t.getSession().setTabSize(r.tabSize),t.setReadOnly(r.readOnly),t.getSession().setFoldStyle(r.codeFolding),t.setFontSize(r.fontSize),t.on("blur",this.proxy(this.onBlur)),t.on("focus",this.proxy(this.onFocus)),this.setWordWrap(r.wordWrap),ace.require("ace/config").set("basePath",this.options.vendorPath),t.setOptions({enableEmmet:r.enableEmmet,enableBasicAutocompletion:"basic"===r.autocompletion,enableLiveAutocompletion:"live"===r.autocompletion}),t.renderer.setScrollMargin(r.margin,r.margin,0,0),t.renderer.setPadding(r.margin),this.$toolbar.find(">ul>li>a").each(function(){var t=e(this).find(">abbr"),r=t.text()+" (<strong>"+t.attr("title")+"</strong>)";e(this).attr("title",r)}).tooltip({delay:500,placement:"top",html:!0}),this.$fullscreenDisable.hide(),this.$fullscreenEnable.on("click.codeeditor",">a",e.proxy(this.toggleFullscreen,this)),this.$fullscreenDisable.on("click.codeeditor",">a",e.proxy(this.toggleFullscreen,this)),this.$searchboxEnable.on("click.codeeditor",">a",e.proxy(this.showSearchbox,this)),this.$replaceboxEnable.on("click.codeeditor",">a",e.proxy(this.showReplacebox,this)),this.$el.hotKey({hotkey:"esc",callback:this.proxy(this.onEscape)}),t.commands.addCommand({name:"toggleFullscreen",bindKey:{win:"Ctrl+Shift+F",mac:"Ctrl+Shift+F"},exec:e.proxy(this.toggleFullscreen,this),readOnly:!0})},n.prototype.dispose=function(){null!==this.$el&&(this.unregisterHandlers(),this.disposeAttachedControls(),this.$el=null,this.$textarea=null,this.$toolbar=null,this.$code=null,this.$fullscreenEnable=null,this.$fullscreenDisable=null,this.$searchboxEnable=null,this.$replaceboxEnable=null,this.$form=null,this.options=null,r.dispose.call(this))},n.prototype.disposeAttachedControls=function(){this.editor.destroy();for(var e=Object.keys(this.editor.renderer),t=0,r=e.length;t<r;t++)this.editor.renderer[e[t]]=null;for(t=0,r=(e=Object.keys(this.editor)).length;t<r;t++)this.editor[e[t]]=null;this.editor=null,this.$toolbar.find(">ul>li>a").tooltip("dispose"),this.$el.removeData("oc.codeEditor"),this.$el.hotKey("dispose")},n.prototype.unregisterHandlers=function(){this.editor.off("change",this.proxy(this.onChange)),this.editor.off("blur",this.proxy(this.onBlur)),this.editor.off("focus",this.proxy(this.onFocus)),this.$fullscreenEnable.off(".codeeditor"),this.$fullscreenDisable.off(".codeeditor"),this.$form.off("oc.beforeRequest",this.proxy(this.onBeforeRequest)),this.$el.off("dispose-control",this.proxy(this.dispose)),e(window).off("resize",this.proxy(this.onResize)),e(window).off("oc.updateUi",this.proxy(this.onResize))},n.prototype.onBeforeRequest=function(){this.$textarea.val(this.editor.getSession().getValue())},n.prototype.onChange=function(){this.$form.trigger("change"),this.$textarea.trigger("oc.codeEditorChange")},n.prototype.onResize=function(){this.editor.resize()},n.prototype.onBlur=function(){this.$el.removeClass("editor-focus")},n.prototype.onFocus=function(){this.$el.addClass("editor-focus")},n.prototype.onEscape=function(){this.isFullscreen&&this.toggleFullscreen()},n.prototype.setWordWrap=function(e){var t=this.editor.getSession(),r=this.editor.renderer;switch(e+""){default:case"off":t.setUseWrapMode(!1),r.setPrintMarginColumn(80);break;case"40":t.setUseWrapMode(!0),t.setWrapLimitRange(40,40),r.setPrintMarginColumn(40);break;case"80":t.setUseWrapMode(!0),t.setWrapLimitRange(80,80),r.setPrintMarginColumn(80);break;case"fluid":t.setUseWrapMode(!0),t.setWrapLimitRange(null,null),r.setPrintMarginColumn(80)}},n.prototype.setTheme=function(e){var t=this;oc.AssetManager.load({js:[this.options.vendorPath+"/theme-"+e+".js"]},function(){t.editor.setTheme("ace/theme/"+e)})},n.prototype.getContent=function(){return this.editor.getSession().getValue()},n.prototype.setContent=function(e){this.editor.getSession().setValue(e)},n.prototype.getEditorObject=function(){return this.editor},n.prototype.getToolbar=function(){return this.$toolbar},n.prototype.toggleFullscreen=function(){this.$el.toggleClass("editor-fullscreen"),this.$fullscreenEnable.toggle(),this.$fullscreenDisable.toggle(),this.isFullscreen=this.$el.hasClass("editor-fullscreen"),this.isFullscreen?e("body").css({overflow:"hidden"}):e("body").css({overflow:"inherit"}),this.editor.resize(),this.editor.focus()},n.prototype.showSearchbox=function(){this.editor.execCommand("find"),this.editor.resize(),this.editor.focus()},n.prototype.showReplacebox=function(){this.editor.execCommand("replace"),this.editor.resize(),this.editor.focus()};var i=e.fn.codeEditor;e.fn.codeEditor=function(t){var r,i=Array.prototype.slice.call(arguments,1);return this.each(function(){var o=e(this),s=o.data("oc.codeEditor"),a=e.extend({},n.DEFAULTS,o.data(),"object"==typeof t&&t);if(s||o.data("oc.codeEditor",s=new n(this,a)),"string"==typeof t&&(r=s[t].apply(s,i)),void 0!==r)return!1}),r||this},e.fn.codeEditor.Constructor=n,void 0===e.oc&&(e.oc={}),e.oc.codeEditorExtensionModes={htm:"html",html:"html",md:"markdown",txt:"plain_text",js:"javascript",less:"less",scss:"scss",sass:"sass",css:"css"},e.fn.codeEditor.noConflict=function(){return e.fn.codeEditor=i,this},e(document).render(function(){e('[data-control="codeeditor"]').codeEditor()}),function(t){if(t.ace&&"function"==typeof t.ace.require){var r=t.ace.require("ace/ext/emmet");if(r&&r.AceEmmetEditor&&r.AceEmmetEditor.prototype.getSyntax){var n=r.AceEmmetEditor.prototype.getSyntax;r.AceEmmetEditor.prototype.getSyntax=function(){var t=e.proxy(n,this)();return"twig"==t?"html":t}}}}(window)}(window.jQuery); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/js/codeeditor.js ================================================ /* * Code editor form field control * * Data attributes: * - data-control="codeeditor" - enables the code editor plugin * - data-vendor-path="/" - sets the path to find Ace editor files * - data-language="php" - set the coding language used * - data-theme="textmate" - the colour scheme and theme * * JavaScript API: * $('textarea').codeEditor({ vendorPath: '/', language: 'php '}) * * Dependancies: * - Ace Editor (ace.js) */ +function ($) { "use strict"; var Base = $.oc.foundation.base, BaseProto = Base.prototype // CODEEDITOR CLASS DEFINITION // ============================ var CodeEditor = function(element, options) { Base.call(this); this.options = options; this.$el = $(element); this.$textarea = this.$el.find('>textarea:first'); this.$toolbar = this.$el.find('>.editor-toolbar:first'); this.$code = null; this.editor = null; this.$form = null; // Toolbar links this.isFullscreen = false; this.$fullscreenEnable = this.$toolbar.find('li.fullscreen-enable'); this.$fullscreenDisable = this.$toolbar.find('li.fullscreen-disable'); this.$searchboxEnable = this.$toolbar.find('li.searchbox-enable'); this.$replaceboxEnable = this.$toolbar.find('li.replacebox-enable'); $.oc.foundation.controlUtils.markDisposable(element); this.init(); this.$el.trigger('oc.codeEditorReady'); } CodeEditor.prototype = Object.create(BaseProto) CodeEditor.prototype.constructor = CodeEditor CodeEditor.DEFAULTS = { fontSize: 12, wordWrap: 'off', codeFolding: 'manual', autocompletion: 'manual', tabSize: 4, theme: 'textmate', showInvisibles: true, highlightActiveLine: true, useSoftTabs: true, autoCloseTags: true, showGutter: true, enableEmmet: true, language: 'php', margin: 0, vendorPath: '/', showPrintMargin: false, highlightSelectedWord: false, hScrollBarAlwaysVisible: false, readOnly: false } CodeEditor.prototype.init = function (){ // Control must have an identifier if (!this.$el.attr('id')) { this.$el.attr('id', 'element-' + Math.random().toString(36).substring(7)) } // Create code container this.$code = $('<div />') .addClass('editor-code') .attr('id', this.$el.attr('id') + '-code') .css({ position: 'absolute', top: 0, right: 0, bottom: 0, left: 0 }) .appendTo(this.$el) // Initialize ACE editor var editor = this.editor = ace.edit(this.$code.attr('id')), options = this.options, $form = this.$el.closest('form'); // Fixes a weird notice about scrolling editor.$blockScrolling = Infinity this.$form = $form this.$textarea.hide(); editor.getSession().setValue(this.$textarea.val()) editor.on('change', this.proxy(this.onChange)) $form.on('oc.beforeRequest', this.proxy(this.onBeforeRequest)) $(window).on('resize', this.proxy(this.onResize)) $(window).on('oc.updateUi', this.proxy(this.onResize)) this.$el.one('dispose-control', this.proxy(this.dispose)) // Set theme, anticipated languages should be preloaded oc.AssetManager.load({ js:[ options.vendorPath + '/theme-' + options.theme + '.js' ] }, function() { if (editor) { editor.setTheme('ace/theme/' + options.theme); var inline = options.language === 'php'; editor.getSession().setMode({ path: 'ace/mode/'+options.language, inline: inline }); } }); // Config editor editor.wrapper = this; editor.setShowInvisibles(options.showInvisibles); editor.setBehavioursEnabled(options.autoCloseTags); editor.setHighlightActiveLine(options.highlightActiveLine); editor.renderer.setShowGutter(options.showGutter); editor.renderer.setShowPrintMargin(options.showPrintMargin); editor.setHighlightSelectedWord(options.highlightSelectedWord); editor.renderer.setHScrollBarAlwaysVisible(options.hScrollBarAlwaysVisible); editor.setDisplayIndentGuides(options.displayIndentGuides); editor.getSession().setUseSoftTabs(options.useSoftTabs); editor.getSession().setTabSize(options.tabSize); editor.setReadOnly(options.readOnly); editor.getSession().setFoldStyle(options.codeFolding); editor.setFontSize(options.fontSize); editor.on('blur', this.proxy(this.onBlur)); editor.on('focus', this.proxy(this.onFocus)); this.setWordWrap(options.wordWrap); // Set the vendor path for Ace's require path ace.require('ace/config').set('basePath', this.options.vendorPath); editor.setOptions({ enableEmmet: options.enableEmmet, enableBasicAutocompletion: options.autocompletion === 'basic', enableLiveAutocompletion: options.autocompletion === 'live' }); editor.renderer.setScrollMargin(options.margin, options.margin, 0, 0); editor.renderer.setPadding(options.margin); // Toolbar this.$toolbar.find('>ul>li>a') .each(function(){ var abbr = $(this).find('>abbr'), label = abbr.text(), help = abbr.attr('title'), title = label + ' (<strong>' + help + '</strong>)'; $(this).attr('title', title) }) .tooltip({ delay: 500, placement: 'top', html: true }) ; this.$fullscreenDisable.hide() this.$fullscreenEnable.on('click.codeeditor', '>a', $.proxy(this.toggleFullscreen, this)) this.$fullscreenDisable.on('click.codeeditor', '>a', $.proxy(this.toggleFullscreen, this)) this.$searchboxEnable.on('click.codeeditor', '>a', $.proxy(this.showSearchbox, this)) this.$replaceboxEnable.on('click.codeeditor', '>a', $.proxy(this.showReplacebox, this)) // Hotkeys this.$el.hotKey({ hotkey: 'esc', callback: this.proxy(this.onEscape) }); editor.commands.addCommand({ name: 'toggleFullscreen', bindKey: { win: 'Ctrl+Shift+F', mac: 'Ctrl+Shift+F' }, exec: $.proxy(this.toggleFullscreen, this), readOnly: true }); } CodeEditor.prototype.dispose = function() { if (this.$el === null) { return; } this.unregisterHandlers(); this.disposeAttachedControls(); this.$el = null; this.$textarea = null; this.$toolbar = null; this.$code = null; this.$fullscreenEnable = null; this.$fullscreenDisable = null; this.$searchboxEnable = null; this.$replaceboxEnable = null; this.$form = null; this.options = null; BaseProto.dispose.call(this); } CodeEditor.prototype.disposeAttachedControls = function() { this.editor.destroy(); var keys = Object.keys(this.editor.renderer); for (var i=0, len=keys.length; i<len; i++) { this.editor.renderer[keys[i]] = null; } keys = Object.keys(this.editor); for (var i=0, len=keys.length; i<len; i++) { this.editor[keys[i]] = null; } this.editor = null; this.$toolbar.find('>ul>li>a').tooltip('dispose'); this.$el.removeData('oc.codeEditor'); this.$el.hotKey('dispose'); } CodeEditor.prototype.unregisterHandlers = function() { this.editor.off('change', this.proxy(this.onChange)); this.editor.off('blur', this.proxy(this.onBlur)); this.editor.off('focus', this.proxy(this.onFocus)); this.$fullscreenEnable.off('.codeeditor'); this.$fullscreenDisable.off('.codeeditor'); this.$form.off('oc.beforeRequest', this.proxy(this.onBeforeRequest)); this.$el.off('dispose-control', this.proxy(this.dispose)); $(window).off('resize', this.proxy(this.onResize)); $(window).off('oc.updateUi', this.proxy(this.onResize)); } CodeEditor.prototype.onBeforeRequest = function() { this.$textarea.val(this.editor.getSession().getValue()) } CodeEditor.prototype.onChange = function() { this.$form.trigger('change') this.$textarea.trigger('oc.codeEditorChange') } CodeEditor.prototype.onResize = function() { this.editor.resize() } CodeEditor.prototype.onBlur = function() { this.$el.removeClass('editor-focus') } CodeEditor.prototype.onFocus = function() { this.$el.addClass('editor-focus') } CodeEditor.prototype.onEscape = function() { this.isFullscreen && this.toggleFullscreen() } CodeEditor.prototype.setWordWrap = function(mode) { var session = this.editor.getSession(), renderer = this.editor.renderer switch (mode + '') { default: case 'off': session.setUseWrapMode(false); renderer.setPrintMarginColumn(80); break case '40': session.setUseWrapMode(true); session.setWrapLimitRange(40, 40); renderer.setPrintMarginColumn(40); break case '80': session.setUseWrapMode(true); session.setWrapLimitRange(80, 80); renderer.setPrintMarginColumn(80); break case 'fluid': session.setUseWrapMode(true); session.setWrapLimitRange(null, null); renderer.setPrintMarginColumn(80); break } } CodeEditor.prototype.setTheme = function(theme) { var self = this; oc.AssetManager.load({ js:[ this.options.vendorPath + '/theme-' + theme + '.js' ] }, function(){ self.editor.setTheme('ace/theme/' + theme) }); } CodeEditor.prototype.getContent = function() { return this.editor.getSession().getValue(); } CodeEditor.prototype.setContent = function(html) { this.editor.getSession().setValue(html); } CodeEditor.prototype.getEditorObject = function() { return this.editor; } CodeEditor.prototype.getToolbar = function() { return this.$toolbar; } CodeEditor.prototype.toggleFullscreen = function() { this.$el.toggleClass('editor-fullscreen'); this.$fullscreenEnable.toggle(); this.$fullscreenDisable.toggle(); this.isFullscreen = this.$el.hasClass('editor-fullscreen'); if (this.isFullscreen) { $('body').css({ overflow: 'hidden' }); } else { $('body').css({ overflow: 'inherit' }); } this.editor.resize(); this.editor.focus(); } CodeEditor.prototype.showSearchbox = function() { this.editor.execCommand('find'); this.editor.resize(); this.editor.focus(); } CodeEditor.prototype.showReplacebox = function() { this.editor.execCommand('replace'); this.editor.resize(); this.editor.focus(); } // CODEEDITOR PLUGIN DEFINITION // ============================ var old = $.fn.codeEditor $.fn.codeEditor = function (option) { var args = Array.prototype.slice.call(arguments, 1), result this.each(function () { var $this = $(this) var data = $this.data('oc.codeEditor') var options = $.extend({}, CodeEditor.DEFAULTS, $this.data(), typeof option == 'object' && option) if (!data) $this.data('oc.codeEditor', (data = new CodeEditor(this, options))) if (typeof option == 'string') result = data[option].apply(data, args) if (typeof result != 'undefined') return false }) return result ? result : this } $.fn.codeEditor.Constructor = CodeEditor if ($.oc === undefined) $.oc = {} $.oc.codeEditorExtensionModes = { 'htm': 'html', 'html': 'html', 'md': 'markdown', 'txt': 'plain_text', 'js': 'javascript', 'less': 'less', 'scss': 'scss', 'sass': 'sass', 'css': 'css' } // CODEEDITOR NO CONFLICT // ================= $.fn.codeEditor.noConflict = function () { $.fn.codeEditor = old return this } // CODEEDITOR DATA-API // =============== $(document).render(function () { $('[data-control="codeeditor"]').codeEditor() }); // FIX EMMET HTML WHEN SYNTAX IS TWIG // ================================== +function (exports) { if (exports.ace && typeof exports.ace.require == 'function') { var emmetExt = exports.ace.require('ace/ext/emmet') if (emmetExt && emmetExt.AceEmmetEditor && emmetExt.AceEmmetEditor.prototype.getSyntax) { var coreGetSyntax = emmetExt.AceEmmetEditor.prototype.getSyntax emmetExt.AceEmmetEditor.prototype.getSyntax = function () { var $syntax = $.proxy(coreGetSyntax, this)() return $syntax == 'twig' ? 'html' : $syntax }; } } }(window) }(window.jQuery); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/less/codeeditor.less ================================================ @import "../../../../assets/less/core/boot.less"; .field-codeeditor { width: 100%; position: relative; border: 2px solid @input-border; .border-radius(@border-radius-base); textarea { opacity: 0; } &.editor-focus { border: 2px solid @input-border-focus; } &.size-tiny { min-height: @size-tiny; } &.size-small { min-height: @size-small; } &.size-large { min-height: @size-large; } &.size-huge { min-height: @size-huge; } &.size-giant { min-height: @size-giant; } .ace_search { font-family: @font-family-base; font-size: 14px; color: @text-color; z-index: @zindex-form + 3; // Fixes double focus on search box .ace_search_form.ace_nomatch { outline: none !important; .ace_search_field { border: .0625rem solid red; -webkit-box-shadow: 0 0 .1875rem .125rem red; box-shadow: 0 0 .1875rem .125rem red; z-index: 1; position: relative; } } } .editor-code { .border-radius(@border-radius-base); } .editor-toolbar { position: absolute; padding: 0 5px; bottom: 10px; right: 25px; z-index: @zindex-form; background: rgba(0,0,0,.8); border-radius: 5px; // Conflict with easymde border: none; &:before { display: none; } > ul, ul > li { list-style-type: none; padding: 0; margin: 0; } > ul > li { float: left; .tooltip.left { margin-right: 25px; } } > ul > li > a { display: block; height: 25px; width: 25px; color: #666; font-size: 20px; text-align: center; text-decoration: none; text-shadow: 0 0 5px #000; > abbr { position: absolute; .text-hide(); } > i { opacity: 1; display: block; &:before { font-size: 15px; } } &:hover, &:focus { > i { opacity: 1; color: #fff; } } } } &.editor-fullscreen { z-index: @zindex-fullscreen + 1; position: fixed !important; top: 0; left: 0; height: 100%; border-width: 0; .border-radius(0); .editor-toolbar { z-index: @zindex-fullscreen + 2; } .editor-code { .border-radius(0); } .ace_search { z-index: @zindex-fullscreen + 3; } } } ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/ace.js ================================================ /* ***** BEGIN LICENSE BLOCK ***** * Distributed under the BSD license: * * Copyright (c) 2010, Ajax.org B.V. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of Ajax.org B.V. nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * * ***** END LICENSE BLOCK ***** */ /** * Define a module along with a payload * @param module a name for the payload * @param payload a function to call with (require, exports, module) params */ (function() { var ACE_NAMESPACE = "ace"; var global = (function() { return this; })(); if (!global && typeof window != "undefined") global = window; // strict mode if (!ACE_NAMESPACE && typeof requirejs !== "undefined") return; var define = function(module, deps, payload) { if (typeof module !== "string") { if (define.original) define.original.apply(this, arguments); else { console.error("dropping module because define wasn\'t a string."); console.trace(); } return; } if (arguments.length == 2) payload = deps; if (!define.modules[module]) { define.payloads[module] = payload; define.modules[module] = null; } }; define.modules = {}; define.payloads = {}; /** * Get at functionality define()ed using the function above */ var _require = function(parentId, module, callback) { if (typeof module === "string") { var payload = lookup(parentId, module); if (payload != undefined) { callback && callback(); return payload; } } else if (Object.prototype.toString.call(module) === "[object Array]") { var params = []; for (var i = 0, l = module.length; i < l; ++i) { var dep = lookup(parentId, module[i]); if (dep == undefined && require.original) return; params.push(dep); } return callback && callback.apply(null, params) || true; } }; var require = function(module, callback) { var packagedModule = _require("", module, callback); if (packagedModule == undefined && require.original) return require.original.apply(this, arguments); return packagedModule; }; var normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = base + "/" + moduleName; while(moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; /** * Internal function to lookup moduleNames and resolve them by calling the * definition function if needed. */ var lookup = function(parentId, moduleName) { moduleName = normalizeModule(parentId, moduleName); var module = define.modules[moduleName]; if (!module) { module = define.payloads[moduleName]; if (typeof module === 'function') { var exports = {}; var mod = { id: moduleName, uri: '', exports: exports, packaged: true }; var req = function(module, callback) { return _require(moduleName, module, callback); }; var returnValue = module(req, exports, mod); exports = returnValue || mod.exports; define.modules[moduleName] = exports; delete define.payloads[moduleName]; } module = define.modules[moduleName] = exports || module; } return module; }; function exportAce(ns) { var root = global; if (ns) { if (!global[ns]) global[ns] = {}; root = global[ns]; } if (!root.define || !root.define.packaged) { define.original = root.define; root.define = define; root.define.packaged = true; } if (!root.require || !root.require.packaged) { require.original = root.require; root.require = require; root.require.packaged = true; } } exportAce(ACE_NAMESPACE); })(); ace.define("ace/lib/regexp",["require","exports","module"], function(require, exports, module) { "use strict"; var real = { exec: RegExp.prototype.exec, test: RegExp.prototype.test, match: String.prototype.match, replace: String.prototype.replace, split: String.prototype.split }, compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups compliantLastIndexIncrement = function () { var x = /^/g; real.test.call(x, ""); return !x.lastIndex; }(); if (compliantLastIndexIncrement && compliantExecNpcg) return; RegExp.prototype.exec = function (str) { var match = real.exec.apply(this, arguments), name, r2; if ( typeof(str) == 'string' && match) { if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", "")); real.replace.call(str.slice(match.index), r2, function () { for (var i = 1; i < arguments.length - 2; i++) { if (arguments[i] === undefined) match[i] = undefined; } }); } if (this._xregexp && this._xregexp.captureNames) { for (var i = 1; i < match.length; i++) { name = this._xregexp.captureNames[i - 1]; if (name) match[name] = match[i]; } } if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; } return match; }; if (!compliantLastIndexIncrement) { RegExp.prototype.test = function (str) { var match = real.exec.call(this, str); if (match && this.global && !match[0].length && (this.lastIndex > match.index)) this.lastIndex--; return !!match; }; } function getNativeFlags (regex) { return (regex.global ? "g" : "") + (regex.ignoreCase ? "i" : "") + (regex.multiline ? "m" : "") + (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 (regex.sticky ? "y" : ""); } function indexOf (array, item, from) { if (Array.prototype.indexOf) // Use the native array method if available return array.indexOf(item, from); for (var i = from || 0; i < array.length; i++) { if (array[i] === item) return i; } return -1; } }); ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { function Empty() {} if (!Function.prototype.bind) { Function.prototype.bind = function bind(that) { // .length is 1 var target = this; if (typeof target != "function") { throw new TypeError("Function.prototype.bind called on incompatible " + target); } var args = slice.call(arguments, 1); // for normal call var bound = function () { if (this instanceof bound) { var result = target.apply( this, args.concat(slice.call(arguments)) ); if (Object(result) === result) { return result; } return this; } else { return target.apply( that, args.concat(slice.call(arguments)) ); } }; if(target.prototype) { Empty.prototype = target.prototype; bound.prototype = new Empty(); Empty.prototype = null; } return bound; }; } var call = Function.prototype.call; var prototypeOfArray = Array.prototype; var prototypeOfObject = Object.prototype; var slice = prototypeOfArray.slice; var _toString = call.bind(prototypeOfObject.toString); var owns = call.bind(prototypeOfObject.hasOwnProperty); var defineGetter; var defineSetter; var lookupGetter; var lookupSetter; var supportsAccessors; if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { defineGetter = call.bind(prototypeOfObject.__defineGetter__); defineSetter = call.bind(prototypeOfObject.__defineSetter__); lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); } if ([1,2].splice(0).length != 2) { if(function() { // test IE < 9 to splice bug - see issue #138 function makeArray(l) { var a = new Array(l+2); a[0] = a[1] = 0; return a; } var array = [], lengthBefore; array.splice.apply(array, makeArray(20)); array.splice.apply(array, makeArray(26)); lengthBefore = array.length; //46 array.splice(5, 0, "XXX"); // add one element lengthBefore + 1 == array.length if (lengthBefore + 1 == array.length) { return true;// has right splice implementation without bugs } }()) {//IE 6/7 var array_splice = Array.prototype.splice; Array.prototype.splice = function(start, deleteCount) { if (!arguments.length) { return []; } else { return array_splice.apply(this, [ start === void 0 ? 0 : start, deleteCount === void 0 ? (this.length - start) : deleteCount ].concat(slice.call(arguments, 2))) } }; } else {//IE8 Array.prototype.splice = function(pos, removeCount){ var length = this.length; if (pos > 0) { if (pos > length) pos = length; } else if (pos == void 0) { pos = 0; } else if (pos < 0) { pos = Math.max(length + pos, 0); } if (!(pos+removeCount < length)) removeCount = length - pos; var removed = this.slice(pos, pos+removeCount); var insert = slice.call(arguments, 2); var add = insert.length; if (pos === length) { if (add) { this.push.apply(this, insert); } } else { var remove = Math.min(removeCount, length - pos); var tailOldPos = pos + remove; var tailNewPos = tailOldPos + add - remove; var tailCount = length - tailOldPos; var lengthAfterRemove = length - remove; if (tailNewPos < tailOldPos) { // case A for (var i = 0; i < tailCount; ++i) { this[tailNewPos+i] = this[tailOldPos+i]; } } else if (tailNewPos > tailOldPos) { // case B for (i = tailCount; i--; ) { this[tailNewPos+i] = this[tailOldPos+i]; } } // else, add == remove (nothing to do) if (add && pos === lengthAfterRemove) { this.length = lengthAfterRemove; // truncate array this.push.apply(this, insert); } else { this.length = lengthAfterRemove + add; // reserves space for (i = 0; i < add; ++i) { this[pos+i] = insert[i]; } } } return removed; }; } } if (!Array.isArray) { Array.isArray = function isArray(obj) { return _toString(obj) == "[object Array]"; }; } var boxedString = Object("a"), splitString = boxedString[0] != "a" || !(0 in boxedString); if (!Array.prototype.forEach) { Array.prototype.forEach = function forEach(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, thisp = arguments[1], i = -1, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(); // TODO message } while (++i < length) { if (i in self) { fun.call(thisp, self[i], i, object); } } }; } if (!Array.prototype.map) { Array.prototype.map = function map(fun /*, thisp*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = Array(length), thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) result[i] = fun.call(thisp, self[i], i, object); } return result; }; } if (!Array.prototype.filter) { Array.prototype.filter = function filter(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, result = [], value, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self) { value = self[i]; if (fun.call(thisp, value, i, object)) { result.push(value); } } } return result; }; } if (!Array.prototype.every) { Array.prototype.every = function every(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && !fun.call(thisp, self[i], i, object)) { return false; } } return true; }; } if (!Array.prototype.some) { Array.prototype.some = function some(fun /*, thisp */) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0, thisp = arguments[1]; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } for (var i = 0; i < length; i++) { if (i in self && fun.call(thisp, self[i], i, object)) { return true; } } return false; }; } if (!Array.prototype.reduce) { Array.prototype.reduce = function reduce(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduce of empty array with no initial value"); } var i = 0; var result; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i++]; break; } if (++i >= length) { throw new TypeError("reduce of empty array with no initial value"); } } while (true); } for (; i < length; i++) { if (i in self) { result = fun.call(void 0, result, self[i], i, object); } } return result; }; } if (!Array.prototype.reduceRight) { Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { var object = toObject(this), self = splitString && _toString(this) == "[object String]" ? this.split("") : object, length = self.length >>> 0; if (_toString(fun) != "[object Function]") { throw new TypeError(fun + " is not a function"); } if (!length && arguments.length == 1) { throw new TypeError("reduceRight of empty array with no initial value"); } var result, i = length - 1; if (arguments.length >= 2) { result = arguments[1]; } else { do { if (i in self) { result = self[i--]; break; } if (--i < 0) { throw new TypeError("reduceRight of empty array with no initial value"); } } while (true); } do { if (i in this) { result = fun.call(void 0, result, self[i], i, object); } } while (i--); return result; }; } if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = 0; if (arguments.length > 1) { i = toInteger(arguments[1]); } i = i >= 0 ? i : Math.max(0, length + i); for (; i < length; i++) { if (i in self && self[i] === sought) { return i; } } return -1; }; } if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { var self = splitString && _toString(this) == "[object String]" ? this.split("") : toObject(this), length = self.length >>> 0; if (!length) { return -1; } var i = length - 1; if (arguments.length > 1) { i = Math.min(i, toInteger(arguments[1])); } i = i >= 0 ? i : length - Math.abs(i); for (; i >= 0; i--) { if (i in self && sought === self[i]) { return i; } } return -1; }; } if (!Object.getPrototypeOf) { Object.getPrototypeOf = function getPrototypeOf(object) { return object.__proto__ || ( object.constructor ? object.constructor.prototype : prototypeOfObject ); }; } if (!Object.getOwnPropertyDescriptor) { var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + "non-object: "; Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT + object); if (!owns(object, property)) return; var descriptor, getter, setter; descriptor = { enumerable: true, configurable: true }; if (supportsAccessors) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; var getter = lookupGetter(object, property); var setter = lookupSetter(object, property); object.__proto__ = prototype; if (getter || setter) { if (getter) descriptor.get = getter; if (setter) descriptor.set = setter; return descriptor; } } descriptor.value = object[property]; return descriptor; }; } if (!Object.getOwnPropertyNames) { Object.getOwnPropertyNames = function getOwnPropertyNames(object) { return Object.keys(object); }; } if (!Object.create) { var createEmpty; if (Object.prototype.__proto__ === null) { createEmpty = function () { return { "__proto__": null }; }; } else { createEmpty = function () { var empty = {}; for (var i in empty) empty[i] = null; empty.constructor = empty.hasOwnProperty = empty.propertyIsEnumerable = empty.isPrototypeOf = empty.toLocaleString = empty.toString = empty.valueOf = empty.__proto__ = null; return empty; } } Object.create = function create(prototype, properties) { var object; if (prototype === null) { object = createEmpty(); } else { if (typeof prototype != "object") throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); var Type = function () {}; Type.prototype = prototype; object = new Type(); object.__proto__ = prototype; } if (properties !== void 0) Object.defineProperties(object, properties); return object; }; } function doesDefinePropertyWork(object) { try { Object.defineProperty(object, "sentinel", {}); return "sentinel" in object; } catch (exception) { } } if (Object.defineProperty) { var definePropertyWorksOnObject = doesDefinePropertyWork({}); var definePropertyWorksOnDom = typeof document == "undefined" || doesDefinePropertyWork(document.createElement("div")); if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { var definePropertyFallback = Object.defineProperty; } } if (!Object.defineProperty || definePropertyFallback) { var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + "on this javascript engine"; Object.defineProperty = function defineProperty(object, property, descriptor) { if ((typeof object != "object" && typeof object != "function") || object === null) throw new TypeError(ERR_NON_OBJECT_TARGET + object); if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); if (definePropertyFallback) { try { return definePropertyFallback.call(Object, object, property, descriptor); } catch (exception) { } } if (owns(descriptor, "value")) { if (supportsAccessors && (lookupGetter(object, property) || lookupSetter(object, property))) { var prototype = object.__proto__; object.__proto__ = prototypeOfObject; delete object[property]; object[property] = descriptor.value; object.__proto__ = prototype; } else { object[property] = descriptor.value; } } else { if (!supportsAccessors) throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); if (owns(descriptor, "get")) defineGetter(object, property, descriptor.get); if (owns(descriptor, "set")) defineSetter(object, property, descriptor.set); } return object; }; } if (!Object.defineProperties) { Object.defineProperties = function defineProperties(object, properties) { for (var property in properties) { if (owns(properties, property)) Object.defineProperty(object, property, properties[property]); } return object; }; } if (!Object.seal) { Object.seal = function seal(object) { return object; }; } if (!Object.freeze) { Object.freeze = function freeze(object) { return object; }; } try { Object.freeze(function () {}); } catch (exception) { Object.freeze = (function freeze(freezeObject) { return function freeze(object) { if (typeof object == "function") { return object; } else { return freezeObject(object); } }; })(Object.freeze); } if (!Object.preventExtensions) { Object.preventExtensions = function preventExtensions(object) { return object; }; } if (!Object.isSealed) { Object.isSealed = function isSealed(object) { return false; }; } if (!Object.isFrozen) { Object.isFrozen = function isFrozen(object) { return false; }; } if (!Object.isExtensible) { Object.isExtensible = function isExtensible(object) { if (Object(object) === object) { throw new TypeError(); // TODO message } var name = ''; while (owns(object, name)) { name += '?'; } object[name] = true; var returnValue = owns(object, name); delete object[name]; return returnValue; }; } if (!Object.keys) { var hasDontEnumBug = true, dontEnums = [ "toString", "toLocaleString", "valueOf", "hasOwnProperty", "isPrototypeOf", "propertyIsEnumerable", "constructor" ], dontEnumsLength = dontEnums.length; for (var key in {"toString": null}) { hasDontEnumBug = false; } Object.keys = function keys(object) { if ( (typeof object != "object" && typeof object != "function") || object === null ) { throw new TypeError("Object.keys called on a non-object"); } var keys = []; for (var name in object) { if (owns(object, name)) { keys.push(name); } } if (hasDontEnumBug) { for (var i = 0, ii = dontEnumsLength; i < ii; i++) { var dontEnum = dontEnums[i]; if (owns(object, dontEnum)) { keys.push(dontEnum); } } } return keys; }; } if (!Date.now) { Date.now = function now() { return new Date().getTime(); }; } var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; if (!String.prototype.trim || ws.trim()) { ws = "[" + ws + "]"; var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), trimEndRegexp = new RegExp(ws + ws + "*$"); String.prototype.trim = function trim() { return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); }; } function toInteger(n) { n = +n; if (n !== n) { // isNaN n = 0; } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { n = (n > 0 || -1) * Math.floor(Math.abs(n)); } return n; } function isPrimitive(input) { var type = typeof input; return ( input === null || type === "undefined" || type === "boolean" || type === "number" || type === "string" ); } function toPrimitive(input) { var val, valueOf, toString; if (isPrimitive(input)) { return input; } valueOf = input.valueOf; if (typeof valueOf === "function") { val = valueOf.call(input); if (isPrimitive(val)) { return val; } } toString = input.toString; if (typeof toString === "function") { val = toString.call(input); if (isPrimitive(val)) { return val; } } throw new TypeError(); } var toObject = function (o) { if (o == null) { // this matches both null and undefined throw new TypeError("can't convert "+o+" to object"); } return Object(o); }; }); ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"], function(require, exports, module) { "use strict"; require("./regexp"); require("./es5-shim"); }); ace.define("ace/lib/dom",["require","exports","module"], function(require, exports, module) { "use strict"; var XHTML_NS = "http://www.w3.org/1999/xhtml"; exports.getDocumentHead = function(doc) { if (!doc) doc = document; return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; } exports.createElement = function(tag, ns) { return document.createElementNS ? document.createElementNS(ns || XHTML_NS, tag) : document.createElement(tag); }; exports.hasCssClass = function(el, name) { var classes = (el.className + "").split(/\s+/g); return classes.indexOf(name) !== -1; }; exports.addCssClass = function(el, name) { if (!exports.hasCssClass(el, name)) { el.className += " " + name; } }; exports.removeCssClass = function(el, name) { var classes = el.className.split(/\s+/g); while (true) { var index = classes.indexOf(name); if (index == -1) { break; } classes.splice(index, 1); } el.className = classes.join(" "); }; exports.toggleCssClass = function(el, name) { var classes = el.className.split(/\s+/g), add = true; while (true) { var index = classes.indexOf(name); if (index == -1) { break; } add = false; classes.splice(index, 1); } if (add) classes.push(name); el.className = classes.join(" "); return add; }; exports.setCssClass = function(node, className, include) { if (include) { exports.addCssClass(node, className); } else { exports.removeCssClass(node, className); } }; exports.hasCssString = function(id, doc) { var index = 0, sheets; doc = doc || document; if (doc.createStyleSheet && (sheets = doc.styleSheets)) { while (index < sheets.length) if (sheets[index++].owningElement.id === id) return true; } else if ((sheets = doc.getElementsByTagName("style"))) { while (index < sheets.length) if (sheets[index++].id === id) return true; } return false; }; exports.importCssString = function importCssString(cssText, id, doc) { doc = doc || document; if (id && exports.hasCssString(id, doc)) return null; var style; if (id) cssText += "\n/*# sourceURL=ace/css/" + id + " */"; if (doc.createStyleSheet) { style = doc.createStyleSheet(); style.cssText = cssText; if (id) style.owningElement.id = id; } else { style = exports.createElement("style"); style.appendChild(doc.createTextNode(cssText)); if (id) style.id = id; exports.getDocumentHead(doc).appendChild(style); } }; exports.importCssStylsheet = function(uri, doc) { if (doc.createStyleSheet) { doc.createStyleSheet(uri); } else { var link = exports.createElement('link'); link.rel = 'stylesheet'; link.href = uri; exports.getDocumentHead(doc).appendChild(link); } }; exports.getInnerWidth = function(element) { return ( parseInt(exports.computedStyle(element, "paddingLeft"), 10) + parseInt(exports.computedStyle(element, "paddingRight"), 10) + element.clientWidth ); }; exports.getInnerHeight = function(element) { return ( parseInt(exports.computedStyle(element, "paddingTop"), 10) + parseInt(exports.computedStyle(element, "paddingBottom"), 10) + element.clientHeight ); }; exports.scrollbarWidth = function(document) { var inner = exports.createElement("ace_inner"); inner.style.width = "100%"; inner.style.minWidth = "0px"; inner.style.height = "200px"; inner.style.display = "block"; var outer = exports.createElement("ace_outer"); var style = outer.style; style.position = "absolute"; style.left = "-10000px"; style.overflow = "hidden"; style.width = "200px"; style.minWidth = "0px"; style.height = "150px"; style.display = "block"; outer.appendChild(inner); var body = document.documentElement; body.appendChild(outer); var noScrollbar = inner.offsetWidth; style.overflow = "scroll"; var withScrollbar = inner.offsetWidth; if (noScrollbar == withScrollbar) { withScrollbar = outer.clientWidth; } body.removeChild(outer); return noScrollbar-withScrollbar; }; if (typeof document == "undefined") { exports.importCssString = function() {}; return; } if (window.pageYOffset !== undefined) { exports.getPageScrollTop = function() { return window.pageYOffset; }; exports.getPageScrollLeft = function() { return window.pageXOffset; }; } else { exports.getPageScrollTop = function() { return document.body.scrollTop; }; exports.getPageScrollLeft = function() { return document.body.scrollLeft; }; } if (window.getComputedStyle) exports.computedStyle = function(element, style) { if (style) return (window.getComputedStyle(element, "") || {})[style] || ""; return window.getComputedStyle(element, "") || {}; }; else exports.computedStyle = function(element, style) { if (style) return element.currentStyle[style]; return element.currentStyle; }; exports.setInnerHtml = function(el, innerHtml) { var element = el.cloneNode(false);//document.createElement("div"); element.innerHTML = innerHtml; el.parentNode.replaceChild(element, el); return element; }; if ("textContent" in document.documentElement) { exports.setInnerText = function(el, innerText) { el.textContent = innerText; }; exports.getInnerText = function(el) { return el.textContent; }; } else { exports.setInnerText = function(el, innerText) { el.innerText = innerText; }; exports.getInnerText = function(el) { return el.innerText; }; } exports.getParentWindow = function(document) { return document.defaultView || document.parentWindow; }; }); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"], function(require, exports, module) { "use strict"; require("./fixoldbrowsers"); var oop = require("./oop"); var Keys = (function() { var ret = { MODIFIER_KEYS: { 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta' }, KEY_MODS: { "ctrl": 1, "alt": 2, "option" : 2, "shift": 4, "super": 8, "meta": 8, "command": 8, "cmd": 8 }, FUNCTION_KEYS : { 8 : "Backspace", 9 : "Tab", 13 : "Return", 19 : "Pause", 27 : "Esc", 32 : "Space", 33 : "PageUp", 34 : "PageDown", 35 : "End", 36 : "Home", 37 : "Left", 38 : "Up", 39 : "Right", 40 : "Down", 44 : "Print", 45 : "Insert", 46 : "Delete", 96 : "Numpad0", 97 : "Numpad1", 98 : "Numpad2", 99 : "Numpad3", 100: "Numpad4", 101: "Numpad5", 102: "Numpad6", 103: "Numpad7", 104: "Numpad8", 105: "Numpad9", '-13': "NumpadEnter", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "Numlock", 145: "Scrolllock" }, PRINTABLE_KEYS: { 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a', 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.', 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', 219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*' } }; var name, i; for (i in ret.FUNCTION_KEYS) { name = ret.FUNCTION_KEYS[i].toLowerCase(); ret[name] = parseInt(i, 10); } for (i in ret.PRINTABLE_KEYS) { name = ret.PRINTABLE_KEYS[i].toLowerCase(); ret[name] = parseInt(i, 10); } oop.mixin(ret, ret.MODIFIER_KEYS); oop.mixin(ret, ret.PRINTABLE_KEYS); oop.mixin(ret, ret.FUNCTION_KEYS); ret.enter = ret["return"]; ret.escape = ret.esc; ret.del = ret["delete"]; ret[173] = '-'; (function() { var mods = ["cmd", "ctrl", "alt", "shift"]; for (var i = Math.pow(2, mods.length); i--;) { ret.KEY_MODS[i] = mods.filter(function(x) { return i & ret.KEY_MODS[x]; }).join("-") + "-"; } })(); ret.KEY_MODS[0] = ""; ret.KEY_MODS[-1] = "input-"; return ret; })(); oop.mixin(exports, Keys); exports.keyCodeToString = function(keyCode) { var keyString = Keys[keyCode]; if (typeof keyString != "string") keyString = String.fromCharCode(keyCode); return keyString.toLowerCase(); }; }); ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module) { "use strict"; exports.OS = { LINUX: "LINUX", MAC: "MAC", WINDOWS: "WINDOWS" }; exports.getOS = function() { if (exports.isMac) { return exports.OS.MAC; } else if (exports.isLinux) { return exports.OS.LINUX; } else { return exports.OS.WINDOWS; } }; if (typeof navigator != "object") return; var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(); var ua = navigator.userAgent; exports.isWin = (os == "win"); exports.isMac = (os == "mac"); exports.isLinux = (os == "linux"); exports.isIE = (navigator.appName == "Microsoft Internet Explorer" || navigator.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 exports.isOldIE = exports.isIE && exports.isIE < 9; exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === "Gecko"; exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv:(\d+)/)||[])[1], 10) < 4; exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]"; exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; exports.isAIR = ua.indexOf("AdobeAIR") >= 0; exports.isIPad = ua.indexOf("iPad") >= 0; exports.isTouchPad = ua.indexOf("TouchPad") >= 0; exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; }); ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { "use strict"; var keys = require("./keys"); var useragent = require("./useragent"); var pressedKeys = null; var ts = 0; exports.addListener = function(elem, type, callback) { if (elem.addEventListener) { return elem.addEventListener(type, callback, false); } if (elem.attachEvent) { var wrapper = function() { callback.call(elem, window.event); }; callback._wrapper = wrapper; elem.attachEvent("on" + type, wrapper); } }; exports.removeListener = function(elem, type, callback) { if (elem.removeEventListener) { return elem.removeEventListener(type, callback, false); } if (elem.detachEvent) { elem.detachEvent("on" + type, callback._wrapper || callback); } }; exports.stopEvent = function(e) { exports.stopPropagation(e); exports.preventDefault(e); return false; }; exports.stopPropagation = function(e) { if (e.stopPropagation) e.stopPropagation(); else e.cancelBubble = true; }; exports.preventDefault = function(e) { if (e.preventDefault) e.preventDefault(); else e.returnValue = false; }; exports.getButton = function(e) { if (e.type == "dblclick") return 0; if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) return 2; if (e.preventDefault) { return e.button; } else { return {1:0, 2:2, 4:1}[e.button]; } }; exports.capture = function(el, eventHandler, releaseCaptureHandler) { function onMouseUp(e) { eventHandler && eventHandler(e); releaseCaptureHandler && releaseCaptureHandler(e); exports.removeListener(document, "mousemove", eventHandler, true); exports.removeListener(document, "mouseup", onMouseUp, true); exports.removeListener(document, "dragstart", onMouseUp, true); } exports.addListener(document, "mousemove", eventHandler, true); exports.addListener(document, "mouseup", onMouseUp, true); exports.addListener(document, "dragstart", onMouseUp, true); return onMouseUp; }; exports.addTouchMoveListener = function (el, callback) { if ("ontouchmove" in el) { var startx, starty; exports.addListener(el, "touchstart", function (e) { var touchObj = e.changedTouches[0]; startx = touchObj.clientX; starty = touchObj.clientY; }); exports.addListener(el, "touchmove", function (e) { var factor = 1, touchObj = e.changedTouches[0]; e.wheelX = -(touchObj.clientX - startx) / factor; e.wheelY = -(touchObj.clientY - starty) / factor; startx = touchObj.clientX; starty = touchObj.clientY; callback(e); }); } }; exports.addMouseWheelListener = function(el, callback) { if ("onmousewheel" in el) { exports.addListener(el, "mousewheel", function(e) { var factor = 8; if (e.wheelDeltaX !== undefined) { e.wheelX = -e.wheelDeltaX / factor; e.wheelY = -e.wheelDeltaY / factor; } else { e.wheelX = 0; e.wheelY = -e.wheelDelta / factor; } callback(e); }); } else if ("onwheel" in el) { exports.addListener(el, "wheel", function(e) { var factor = 0.35; switch (e.deltaMode) { case e.DOM_DELTA_PIXEL: e.wheelX = e.deltaX * factor || 0; e.wheelY = e.deltaY * factor || 0; break; case e.DOM_DELTA_LINE: case e.DOM_DELTA_PAGE: e.wheelX = (e.deltaX || 0) * 5; e.wheelY = (e.deltaY || 0) * 5; break; } callback(e); }); } else { exports.addListener(el, "DOMMouseScroll", function(e) { if (e.axis && e.axis == e.HORIZONTAL_AXIS) { e.wheelX = (e.detail || 0) * 5; e.wheelY = 0; } else { e.wheelX = 0; e.wheelY = (e.detail || 0) * 5; } callback(e); }); } }; exports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) { var clicks = 0; var startX, startY, timer; var eventNames = { 2: "dblclick", 3: "tripleclick", 4: "quadclick" }; function onMousedown(e) { if (exports.getButton(e) !== 0) { clicks = 0; } else if (e.detail > 1) { clicks++; if (clicks > 4) clicks = 1; } else { clicks = 1; } if (useragent.isIE) { var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; if (!timer || isNewClick) clicks = 1; if (timer) clearTimeout(timer); timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); if (clicks == 1) { startX = e.clientX; startY = e.clientY; } } e._clicks = clicks; eventHandler[callbackName]("mousedown", e); if (clicks > 4) clicks = 0; else if (clicks > 1) return eventHandler[callbackName](eventNames[clicks], e); } function onDblclick(e) { clicks = 2; if (timer) clearTimeout(timer); timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); eventHandler[callbackName]("mousedown", e); eventHandler[callbackName](eventNames[clicks], e); } if (!Array.isArray(elements)) elements = [elements]; elements.forEach(function(el) { exports.addListener(el, "mousedown", onMousedown); if (useragent.isOldIE) exports.addListener(el, "dblclick", onDblclick); }); }; var getModifierHash = useragent.isMac && useragent.isOpera && !("KeyboardEvent" in window) ? function(e) { return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); } : function(e) { return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); }; exports.getModifierString = function(e) { return keys.KEY_MODS[getModifierHash(e)]; }; function normalizeCommandKeys(callback, e, keyCode) { var hashId = getModifierHash(e); if (!useragent.isMac && pressedKeys) { if (e.getModifierState && (e.getModifierState("OS") || e.getModifierState("Win"))) hashId |= 8; if (pressedKeys.altGr) { if ((3 & hashId) != 3) pressedKeys.altGr = 0; else return; } if (keyCode === 18 || keyCode === 17) { var location = "location" in e ? e.location : e.keyLocation; if (keyCode === 17 && location === 1) { if (pressedKeys[keyCode] == 1) ts = e.timeStamp; } else if (keyCode === 18 && hashId === 3 && location === 2) { var dt = e.timeStamp - ts; if (dt < 50) pressedKeys.altGr = true; } } } if (keyCode in keys.MODIFIER_KEYS) { keyCode = -1; } if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) { keyCode = -1; } if (!hashId && keyCode === 13) { var location = "location" in e ? e.location : e.keyLocation; if (location === 3) { callback(e, hashId, -keyCode); if (e.defaultPrevented) return; } } if (useragent.isChromeOS && hashId & 8) { callback(e, hashId, keyCode); if (e.defaultPrevented) return; else hashId &= ~8; } if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { return false; } return callback(e, hashId, keyCode); } exports.addCommandKeyListener = function(el, callback) { var addListener = exports.addListener; if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) { var lastKeyDownKeyCode = null; addListener(el, "keydown", function(e) { lastKeyDownKeyCode = e.keyCode; }); addListener(el, "keypress", function(e) { return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); }); } else { var lastDefaultPrevented = null; addListener(el, "keydown", function(e) { pressedKeys[e.keyCode] = (pressedKeys[e.keyCode] || 0) + 1; var result = normalizeCommandKeys(callback, e, e.keyCode); lastDefaultPrevented = e.defaultPrevented; return result; }); addListener(el, "keypress", function(e) { if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { exports.stopEvent(e); lastDefaultPrevented = null; } }); addListener(el, "keyup", function(e) { pressedKeys[e.keyCode] = null; }); if (!pressedKeys) { resetPressedKeys(); addListener(window, "focus", resetPressedKeys); } } }; function resetPressedKeys() { pressedKeys = Object.create(null); } if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { var postMessageId = 1; exports.nextTick = function(callback, win) { win = win || window; var messageName = "zero-timeout-message-" + postMessageId; exports.addListener(win, "message", function listener(e) { if (e.data == messageName) { exports.stopPropagation(e); exports.removeListener(win, "message", listener); callback(); } }); win.postMessage(messageName, "*"); }; } exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame || window.oRequestAnimationFrame); if (exports.nextFrame) exports.nextFrame = exports.nextFrame.bind(window); else exports.nextFrame = function(callback) { setTimeout(callback, 17); }; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i<l; i++) { if (array[i] && typeof array[i] == "object") copy[i] = this.copyObject(array[i]); else copy[i] = array[i]; } return copy; }; exports.deepCopy = function deepCopy(obj) { if (typeof obj !== "object" || !obj) return obj; var copy; if (Array.isArray(obj)) { copy = []; for (var key = 0; key < obj.length; key++) { copy[key] = deepCopy(obj[key]); } return copy; } if (Object.prototype.toString.call(obj) !== "[object Object]") return obj; copy = {}; for (var key in obj) copy[key] = deepCopy(obj[key]); return copy; }; exports.arrayToMap = function(arr) { var map = {}; for (var i=0; i<arr.length; i++) { map[arr[i]] = 1; } return map; }; exports.createMap = function(props) { var map = Object.create(null); for (var i in props) { map[i] = props[i]; } return map; }; exports.arrayRemove = function(array, value) { for (var i = 0; i <= array.length; i++) { if (value === array[i]) { array.splice(i, 1); } } }; exports.escapeRegExp = function(str) { return str.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1'); }; exports.escapeHTML = function(str) { return str.replace(/&/g, "&").replace(/"/g, """).replace(/'/g, "'").replace(/</g, "<"); }; exports.getMatchOffsets = function(string, regExp) { var matches = []; string.replace(regExp, function(str) { matches.push({ offset: arguments[arguments.length-2], length: str.length }); }); return matches; }; exports.deferredCall = function(fcn) { var timer = null; var callback = function() { timer = null; fcn(); }; var deferred = function(timeout) { deferred.cancel(); timer = setTimeout(callback, timeout || 0); return deferred; }; deferred.schedule = deferred; deferred.call = function() { this.cancel(); fcn(); return deferred; }; deferred.cancel = function() { clearTimeout(timer); timer = null; return deferred; }; deferred.isPending = function() { return timer; }; return deferred; }; exports.delayedCall = function(fcn, defaultTimeout) { var timer = null; var callback = function() { timer = null; fcn(); }; var _self = function(timeout) { if (timer == null) timer = setTimeout(callback, timeout || defaultTimeout); }; _self.delay = function(timeout) { timer && clearTimeout(timer); timer = setTimeout(callback, timeout || defaultTimeout); }; _self.schedule = _self; _self.call = function() { this.cancel(); fcn(); }; _self.cancel = function() { timer && clearTimeout(timer); timer = null; }; _self.isPending = function() { return timer; }; return _self; }; }); ace.define("ace/keyboard/textinput",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/lib/dom","ace/lib/lang"], function(require, exports, module) { "use strict"; var event = require("../lib/event"); var useragent = require("../lib/useragent"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var BROKEN_SETDATA = useragent.isChrome < 18; var USE_IE_MIME_TYPE = useragent.isIE; var TextInput = function(parentNode, host) { var text = dom.createElement("textarea"); text.className = "ace_text-input"; if (useragent.isTouchPad) text.setAttribute("x-palm-disable-auto-cap", true); text.setAttribute("wrap", "off"); text.setAttribute("autocorrect", "off"); text.setAttribute("autocapitalize", "off"); text.setAttribute("spellcheck", false); text.style.opacity = "0"; if (useragent.isOldIE) text.style.top = "-1000px"; parentNode.insertBefore(text, parentNode.firstChild); var PLACEHOLDER = "\x01\x01"; var copied = false; var pasted = false; var inComposition = false; var tempStyle = ''; var isSelectionEmpty = true; try { var isFocused = document.activeElement === text; } catch(e) {} event.addListener(text, "blur", function(e) { host.onBlur(e); isFocused = false; }); event.addListener(text, "focus", function(e) { isFocused = true; host.onFocus(e); resetSelection(); }); this.focus = function() { if (tempStyle) return text.focus(); var top = text.style.top; text.style.position = "fixed"; text.style.top = "0px"; text.focus(); setTimeout(function() { text.style.position = ""; if (text.style.top == "0px") text.style.top = top; }, 0); }; this.blur = function() { text.blur(); }; this.isFocused = function() { return isFocused; }; var syncSelection = lang.delayedCall(function() { isFocused && resetSelection(isSelectionEmpty); }); var syncValue = lang.delayedCall(function() { if (!inComposition) { text.value = PLACEHOLDER; isFocused && resetSelection(); } }); function resetSelection(isEmpty) { if (inComposition) return; inComposition = true; if (inputHandler) { selectionStart = 0; selectionEnd = isEmpty ? 0 : text.value.length - 1; } else { var selectionStart = isEmpty ? 2 : 1; var selectionEnd = 2; } try { text.setSelectionRange(selectionStart, selectionEnd); } catch(e){} inComposition = false; } function resetValue() { if (inComposition) return; text.value = PLACEHOLDER; if (useragent.isWebKit) syncValue.schedule(); } useragent.isWebKit || host.addEventListener('changeSelection', function() { if (host.selection.isEmpty() != isSelectionEmpty) { isSelectionEmpty = !isSelectionEmpty; syncSelection.schedule(); } }); resetValue(); if (isFocused) host.onFocus(); var isAllSelected = function(text) { return text.selectionStart === 0 && text.selectionEnd === text.value.length; }; if (!text.setSelectionRange && text.createTextRange) { text.setSelectionRange = function(selectionStart, selectionEnd) { var range = this.createTextRange(); range.collapse(true); range.moveStart('character', selectionStart); range.moveEnd('character', selectionEnd); range.select(); }; isAllSelected = function(text) { try { var range = text.ownerDocument.selection.createRange(); }catch(e) {} if (!range || range.parentElement() != text) return false; return range.text == text.value; } } if (useragent.isOldIE) { var inPropertyChange = false; var onPropertyChange = function(e){ if (inPropertyChange) return; var data = text.value; if (inComposition || !data || data == PLACEHOLDER) return; if (e && data == PLACEHOLDER[0]) return syncProperty.schedule(); sendText(data); inPropertyChange = true; resetValue(); inPropertyChange = false; }; var syncProperty = lang.delayedCall(onPropertyChange); event.addListener(text, "propertychange", onPropertyChange); var keytable = { 13:1, 27:1 }; event.addListener(text, "keyup", function (e) { if (inComposition && (!text.value || keytable[e.keyCode])) setTimeout(onCompositionEnd, 0); if ((text.value.charCodeAt(0)||0) < 129) { return syncProperty.call(); } inComposition ? onCompositionUpdate() : onCompositionStart(); }); event.addListener(text, "keydown", function (e) { syncProperty.schedule(50); }); } var onSelect = function(e) { if (copied) { copied = false; } else if (isAllSelected(text)) { host.selectAll(); resetSelection(); } else if (inputHandler) { resetSelection(host.selection.isEmpty()); } }; var inputHandler = null; this.setInputHandler = function(cb) {inputHandler = cb}; this.getInputHandler = function() {return inputHandler}; var afterContextMenu = false; var sendText = function(data) { if (inputHandler) { data = inputHandler(data); inputHandler = null; } if (pasted) { resetSelection(); if (data) host.onPaste(data); pasted = false; } else if (data == PLACEHOLDER.charAt(0)) { if (afterContextMenu) host.execCommand("del", {source: "ace"}); else // some versions of android do not fire keydown when pressing backspace host.execCommand("backspace", {source: "ace"}); } else { if (data.substring(0, 2) == PLACEHOLDER) data = data.substr(2); else if (data.charAt(0) == PLACEHOLDER.charAt(0)) data = data.substr(1); else if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1); if (data.charAt(data.length - 1) == PLACEHOLDER.charAt(0)) data = data.slice(0, -1); if (data) host.onTextInput(data); } if (afterContextMenu) afterContextMenu = false; }; var onInput = function(e) { if (inComposition) return; var data = text.value; sendText(data); resetValue(); }; var handleClipboardData = function(e, data, forceIEMime) { var clipboardData = e.clipboardData || window.clipboardData; if (!clipboardData || BROKEN_SETDATA) return; var mime = USE_IE_MIME_TYPE || forceIEMime ? "Text" : "text/plain"; try { if (data) { return clipboardData.setData(mime, data) !== false; } else { return clipboardData.getData(mime); } } catch(e) { if (!forceIEMime) return handleClipboardData(e, data, true); } }; var doCopy = function(e, isCut) { var data = host.getCopyText(); if (!data) return event.preventDefault(e); if (handleClipboardData(e, data)) { isCut ? host.onCut() : host.onCopy(); event.preventDefault(e); } else { copied = true; text.value = data; text.select(); setTimeout(function(){ copied = false; resetValue(); resetSelection(); isCut ? host.onCut() : host.onCopy(); }); } }; var onCut = function(e) { doCopy(e, true); }; var onCopy = function(e) { doCopy(e, false); }; var onPaste = function(e) { var data = handleClipboardData(e); if (typeof data == "string") { if (data) host.onPaste(data, e); if (useragent.isIE) setTimeout(resetSelection); event.preventDefault(e); } else { text.value = ""; pasted = true; } }; event.addCommandKeyListener(text, host.onCommandKey.bind(host)); event.addListener(text, "select", onSelect); event.addListener(text, "input", onInput); event.addListener(text, "cut", onCut); event.addListener(text, "copy", onCopy); event.addListener(text, "paste", onPaste); if (!('oncut' in text) || !('oncopy' in text) || !('onpaste' in text)){ event.addListener(parentNode, "keydown", function(e) { if ((useragent.isMac && !e.metaKey) || !e.ctrlKey) return; switch (e.keyCode) { case 67: onCopy(e); break; case 86: onPaste(e); break; case 88: onCut(e); break; } }); } var onCompositionStart = function(e) { if (inComposition || !host.onCompositionStart || host.$readOnly) return; inComposition = {}; inComposition.canUndo = host.session.$undoManager; host.onCompositionStart(); setTimeout(onCompositionUpdate, 0); host.on("mousedown", onCompositionEnd); if (inComposition.canUndo && !host.selection.isEmpty()) { host.insert(""); host.session.markUndoGroup(); host.selection.clearSelection(); } host.session.markUndoGroup(); }; var onCompositionUpdate = function() { if (!inComposition || !host.onCompositionUpdate || host.$readOnly) return; var val = text.value.replace(/\x01/g, ""); if (inComposition.lastValue === val) return; host.onCompositionUpdate(val); if (inComposition.lastValue) host.undo(); if (inComposition.canUndo) inComposition.lastValue = val; if (inComposition.lastValue) { var r = host.selection.getRange(); host.insert(inComposition.lastValue); host.session.markUndoGroup(); inComposition.range = host.selection.getRange(); host.selection.setRange(r); host.selection.clearSelection(); } }; var onCompositionEnd = function(e) { if (!host.onCompositionEnd || host.$readOnly) return; var c = inComposition; inComposition = false; var timer = setTimeout(function() { timer = null; var str = text.value.replace(/\x01/g, ""); if (inComposition) return; else if (str == c.lastValue) resetValue(); else if (!c.lastValue && str) { resetValue(); sendText(str); } }); inputHandler = function compositionInputHandler(str) { if (timer) clearTimeout(timer); str = str.replace(/\x01/g, ""); if (str == c.lastValue) return ""; if (c.lastValue && timer) host.undo(); return str; }; host.onCompositionEnd(); host.removeListener("mousedown", onCompositionEnd); if (e.type == "compositionend" && c.range) { host.selection.setRange(c.range); } if (useragent.isChrome && useragent.isChrome >= 53) { onInput(); } }; var syncComposition = lang.delayedCall(onCompositionUpdate, 50); event.addListener(text, "compositionstart", onCompositionStart); if (useragent.isGecko) { event.addListener(text, "text", function(){syncComposition.schedule()}); } else { event.addListener(text, "keyup", function(){syncComposition.schedule()}); event.addListener(text, "keydown", function(){syncComposition.schedule()}); } event.addListener(text, "compositionend", onCompositionEnd); this.getElement = function() { return text; }; this.setReadOnly = function(readOnly) { text.readOnly = readOnly; }; this.onContextMenu = function(e) { afterContextMenu = true; resetSelection(host.selection.isEmpty()); host._emit("nativecontextmenu", {target: host, domEvent: e}); this.moveToMouse(e, true); }; this.moveToMouse = function(e, bringToFront) { if (!bringToFront && useragent.isOldIE) return; if (!tempStyle) tempStyle = text.style.cssText; text.style.cssText = (bringToFront ? "z-index:100000;" : "") + "height:" + text.style.height + ";" + (useragent.isIE ? "opacity:0.1;" : ""); var rect = host.container.getBoundingClientRect(); var style = dom.computedStyle(host.container); var top = rect.top + (parseInt(style.borderTopWidth) || 0); var left = rect.left + (parseInt(rect.borderLeftWidth) || 0); var maxTop = rect.bottom - top - text.clientHeight -2; var move = function(e) { text.style.left = e.clientX - left - 2 + "px"; text.style.top = Math.min(e.clientY - top - 2, maxTop) + "px"; }; move(e); if (e.type != "mousedown") return; if (host.renderer.$keepTextAreaAtCursor) host.renderer.$keepTextAreaAtCursor = null; clearTimeout(closeTimeout); if (useragent.isWin && !useragent.isOldIE) event.capture(host.container, move, onContextMenuClose); }; this.onContextMenuClose = onContextMenuClose; var closeTimeout; function onContextMenuClose() { clearTimeout(closeTimeout); closeTimeout = setTimeout(function () { if (tempStyle) { text.style.cssText = tempStyle; tempStyle = ''; } if (host.renderer.$keepTextAreaAtCursor == null) { host.renderer.$keepTextAreaAtCursor = true; host.renderer.$moveTextAreaToCursor(); } }, useragent.isOldIE ? 200 : 0); } var onContextMenu = function(e) { host.textInput.onContextMenu(e); onContextMenuClose(); }; event.addListener(text, "mouseup", onContextMenu); event.addListener(text, "mousedown", function(e) { e.preventDefault(); onContextMenuClose(); }); event.addListener(host.renderer.scroller, "contextmenu", onContextMenu); event.addListener(text, "contextmenu", onContextMenu); }; exports.TextInput = TextInput; }); ace.define("ace/mouse/default_handlers",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var event = require("../lib/event"); var useragent = require("../lib/useragent"); var DRAG_OFFSET = 0; // pixels function DefaultHandlers(mouseHandler) { mouseHandler.$clickSelection = null; var editor = mouseHandler.editor; editor.setDefaultHandler("mousedown", this.onMouseDown.bind(mouseHandler)); editor.setDefaultHandler("dblclick", this.onDoubleClick.bind(mouseHandler)); editor.setDefaultHandler("tripleclick", this.onTripleClick.bind(mouseHandler)); editor.setDefaultHandler("quadclick", this.onQuadClick.bind(mouseHandler)); editor.setDefaultHandler("mousewheel", this.onMouseWheel.bind(mouseHandler)); editor.setDefaultHandler("touchmove", this.onTouchMove.bind(mouseHandler)); var exports = ["select", "startSelect", "selectEnd", "selectAllEnd", "selectByWordsEnd", "selectByLinesEnd", "dragWait", "dragWaitEnd", "focusWait"]; exports.forEach(function(x) { mouseHandler[x] = this[x]; }, this); mouseHandler.selectByLines = this.extendSelectionBy.bind(mouseHandler, "getLineRange"); mouseHandler.selectByWords = this.extendSelectionBy.bind(mouseHandler, "getWordRange"); } (function() { this.onMouseDown = function(ev) { var inSelection = ev.inSelection(); var pos = ev.getDocumentPosition(); this.mousedownEvent = ev; var editor = this.editor; var button = ev.getButton(); if (button !== 0) { var selectionRange = editor.getSelectionRange(); var selectionEmpty = selectionRange.isEmpty(); editor.$blockScrolling++; if (selectionEmpty || button == 1) editor.selection.moveToPosition(pos); editor.$blockScrolling--; if (button == 2) editor.textInput.onContextMenu(ev.domEvent); return; // stopping event here breaks contextmenu on ff mac } this.mousedownEvent.time = Date.now(); if (inSelection && !editor.isFocused()) { editor.focus(); if (this.$focusTimout && !this.$clickSelection && !editor.inMultiSelectMode) { this.setState("focusWait"); this.captureMouse(ev); return; } } this.captureMouse(ev); this.startSelect(pos, ev.domEvent._clicks > 1); return ev.preventDefault(); }; this.startSelect = function(pos, waitForClickSelection) { pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); var editor = this.editor; editor.$blockScrolling++; if (this.mousedownEvent.getShiftKey()) editor.selection.selectToPosition(pos); else if (!waitForClickSelection) editor.selection.moveToPosition(pos); if (!waitForClickSelection) this.select(); if (editor.renderer.scroller.setCapture) { editor.renderer.scroller.setCapture(); } editor.setStyle("ace_selecting"); this.setState("select"); editor.$blockScrolling--; }; this.select = function() { var anchor, editor = this.editor; var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); editor.$blockScrolling++; if (this.$clickSelection) { var cmp = this.$clickSelection.comparePoint(cursor); if (cmp == -1) { anchor = this.$clickSelection.end; } else if (cmp == 1) { anchor = this.$clickSelection.start; } else { var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); cursor = orientedRange.cursor; anchor = orientedRange.anchor; } editor.selection.setSelectionAnchor(anchor.row, anchor.column); } editor.selection.selectToPosition(cursor); editor.$blockScrolling--; editor.renderer.scrollCursorIntoView(); }; this.extendSelectionBy = function(unitName) { var anchor, editor = this.editor; var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); var range = editor.selection[unitName](cursor.row, cursor.column); editor.$blockScrolling++; if (this.$clickSelection) { var cmpStart = this.$clickSelection.comparePoint(range.start); var cmpEnd = this.$clickSelection.comparePoint(range.end); if (cmpStart == -1 && cmpEnd <= 0) { anchor = this.$clickSelection.end; if (range.end.row != cursor.row || range.end.column != cursor.column) cursor = range.start; } else if (cmpEnd == 1 && cmpStart >= 0) { anchor = this.$clickSelection.start; if (range.start.row != cursor.row || range.start.column != cursor.column) cursor = range.end; } else if (cmpStart == -1 && cmpEnd == 1) { cursor = range.end; anchor = range.start; } else { var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); cursor = orientedRange.cursor; anchor = orientedRange.anchor; } editor.selection.setSelectionAnchor(anchor.row, anchor.column); } editor.selection.selectToPosition(cursor); editor.$blockScrolling--; editor.renderer.scrollCursorIntoView(); }; this.selectEnd = this.selectAllEnd = this.selectByWordsEnd = this.selectByLinesEnd = function() { this.$clickSelection = null; this.editor.unsetStyle("ace_selecting"); if (this.editor.renderer.scroller.releaseCapture) { this.editor.renderer.scroller.releaseCapture(); } }; this.focusWait = function() { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); var time = Date.now(); if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) this.startSelect(this.mousedownEvent.getDocumentPosition()); }; this.onDoubleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; var session = editor.session; var range = session.getBracketRange(pos); if (range) { if (range.isEmpty()) { range.start.column--; range.end.column++; } this.setState("select"); } else { range = editor.selection.getWordRange(pos.row, pos.column); this.setState("selectByWords"); } this.$clickSelection = range; this.select(); }; this.onTripleClick = function(ev) { var pos = ev.getDocumentPosition(); var editor = this.editor; this.setState("selectByLines"); var range = editor.getSelectionRange(); if (range.isMultiLine() && range.contains(pos.row, pos.column)) { this.$clickSelection = editor.selection.getLineRange(range.start.row); this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; } else { this.$clickSelection = editor.selection.getLineRange(pos.row); } this.select(); }; this.onQuadClick = function(ev) { var editor = this.editor; editor.selectAll(); this.$clickSelection = editor.getSelectionRange(); this.setState("selectAll"); }; this.onMouseWheel = function(ev) { if (ev.getAccelKey()) return; if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { ev.wheelX = ev.wheelY; ev.wheelY = 0; } var t = ev.domEvent.timeStamp; var dt = t - (this.$lastScrollTime||0); var editor = this.editor; var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); if (isScrolable || dt < 200) { this.$lastScrollTime = t; editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); return ev.stop(); } }; this.onTouchMove = function (ev) { var t = ev.domEvent.timeStamp; var dt = t - (this.$lastScrollTime || 0); var editor = this.editor; var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); if (isScrolable || dt < 200) { this.$lastScrollTime = t; editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); return ev.stop(); } }; }).call(DefaultHandlers.prototype); exports.DefaultHandlers = DefaultHandlers; function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } function calcRangeOrientation(range, cursor) { 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; if (cmp < 0) return {cursor: range.start, anchor: range.end}; else return {cursor: range.end, anchor: range.start}; } }); ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); function Tooltip (parentNode) { this.isOpen = false; this.$element = null; this.$parentNode = parentNode; } (function() { this.$init = function() { this.$element = dom.createElement("div"); this.$element.className = "ace_tooltip"; this.$element.style.display = "none"; this.$parentNode.appendChild(this.$element); return this.$element; }; this.getElement = function() { return this.$element || this.$init(); }; this.setText = function(text) { dom.setInnerText(this.getElement(), text); }; this.setHtml = function(html) { this.getElement().innerHTML = html; }; this.setPosition = function(x, y) { this.getElement().style.left = x + "px"; this.getElement().style.top = y + "px"; }; this.setClassName = function(className) { dom.addCssClass(this.getElement(), className); }; this.show = function(text, x, y) { if (text != null) this.setText(text); if (x != null && y != null) this.setPosition(x, y); if (!this.isOpen) { this.getElement().style.display = "block"; this.isOpen = true; } }; this.hide = function() { if (this.isOpen) { this.getElement().style.display = "none"; this.isOpen = false; } }; this.getHeight = function() { return this.getElement().offsetHeight; }; this.getWidth = function() { return this.getElement().offsetWidth; }; }).call(Tooltip.prototype); exports.Tooltip = Tooltip; }); ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var oop = require("../lib/oop"); var event = require("../lib/event"); var Tooltip = require("../tooltip").Tooltip; function GutterHandler(mouseHandler) { var editor = mouseHandler.editor; var gutter = editor.renderer.$gutterLayer; var tooltip = new GutterTooltip(editor.container); mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { if (!editor.isFocused() || e.getButton() != 0) return; var gutterRegion = gutter.getRegion(e); if (gutterRegion == "foldWidgets") return; var row = e.getDocumentPosition().row; var selection = editor.session.selection; if (e.getShiftKey()) selection.selectTo(row, 0); else { if (e.domEvent.detail == 2) { editor.selectAll(); return e.preventDefault(); } mouseHandler.$clickSelection = editor.selection.getLineRange(row); } mouseHandler.setState("selectByLines"); mouseHandler.captureMouse(e); return e.preventDefault(); }); var tooltipTimeout, mouseEvent, tooltipAnnotation; function showTooltip() { var row = mouseEvent.getDocumentPosition().row; var annotation = gutter.$annotations[row]; if (!annotation) return hideTooltip(); var maxRow = editor.session.getLength(); if (row == maxRow) { var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; var pos = mouseEvent.$pos; if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) return hideTooltip(); } if (tooltipAnnotation == annotation) return; tooltipAnnotation = annotation.text.join("<br/>"); tooltip.setHtml(tooltipAnnotation); tooltip.show(); editor._signal("showGutterTooltip", tooltip); editor.on("mousewheel", hideTooltip); if (mouseHandler.$tooltipFollowsMouse) { moveTooltip(mouseEvent); } else { var gutterElement = mouseEvent.domEvent.target; var rect = gutterElement.getBoundingClientRect(); var style = tooltip.getElement().style; style.left = rect.right + "px"; style.top = rect.bottom + "px"; } } function hideTooltip() { if (tooltipTimeout) tooltipTimeout = clearTimeout(tooltipTimeout); if (tooltipAnnotation) { tooltip.hide(); tooltipAnnotation = null; editor._signal("hideGutterTooltip", tooltip); editor.removeEventListener("mousewheel", hideTooltip); } } function moveTooltip(e) { tooltip.setPosition(e.x, e.y); } mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) { var target = e.domEvent.target || e.domEvent.srcElement; if (dom.hasCssClass(target, "ace_fold-widget")) return hideTooltip(); if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) moveTooltip(e); mouseEvent = e; if (tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; if (mouseEvent && !mouseHandler.isMousePressed) showTooltip(); else hideTooltip(); }, 50); }); event.addListener(editor.renderer.$gutter, "mouseout", function(e) { mouseEvent = null; if (!tooltipAnnotation || tooltipTimeout) return; tooltipTimeout = setTimeout(function() { tooltipTimeout = null; hideTooltip(); }, 50); }); editor.on("changeSession", hideTooltip); } function GutterTooltip(parentNode) { Tooltip.call(this, parentNode); } oop.inherits(GutterTooltip, Tooltip); (function(){ this.setPosition = function(x, y) { var windowWidth = window.innerWidth || document.documentElement.clientWidth; var windowHeight = window.innerHeight || document.documentElement.clientHeight; var width = this.getWidth(); var height = this.getHeight(); x += 15; y += 15; if (x + width > windowWidth) { x -= (x + width) - windowWidth; } if (y + height > windowHeight) { y -= 20 + height; } Tooltip.prototype.setPosition.call(this, x, y); }; }).call(GutterTooltip.prototype); exports.GutterHandler = GutterHandler; }); ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { "use strict"; var event = require("../lib/event"); var useragent = require("../lib/useragent"); var MouseEvent = exports.MouseEvent = function(domEvent, editor) { this.domEvent = domEvent; this.editor = editor; this.x = this.clientX = domEvent.clientX; this.y = this.clientY = domEvent.clientY; this.$pos = null; this.$inSelection = null; this.propagationStopped = false; this.defaultPrevented = false; }; (function() { this.stopPropagation = function() { event.stopPropagation(this.domEvent); this.propagationStopped = true; }; this.preventDefault = function() { event.preventDefault(this.domEvent); this.defaultPrevented = true; }; this.stop = function() { this.stopPropagation(); this.preventDefault(); }; this.getDocumentPosition = function() { if (this.$pos) return this.$pos; this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); return this.$pos; }; this.inSelection = function() { if (this.$inSelection !== null) return this.$inSelection; var editor = this.editor; var selectionRange = editor.getSelectionRange(); if (selectionRange.isEmpty()) this.$inSelection = false; else { var pos = this.getDocumentPosition(); this.$inSelection = selectionRange.contains(pos.row, pos.column); } return this.$inSelection; }; this.getButton = function() { return event.getButton(this.domEvent); }; this.getShiftKey = function() { return this.domEvent.shiftKey; }; this.getAccelKey = useragent.isMac ? function() { return this.domEvent.metaKey; } : function() { return this.domEvent.ctrlKey; }; }).call(MouseEvent.prototype); }); ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var event = require("../lib/event"); var useragent = require("../lib/useragent"); var AUTOSCROLL_DELAY = 200; var SCROLL_CURSOR_DELAY = 200; var SCROLL_CURSOR_HYSTERESIS = 5; function DragdropHandler(mouseHandler) { var editor = mouseHandler.editor; var blankImage = dom.createElement("img"); blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; if (useragent.isOpera) blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"; var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; exports.forEach(function(x) { mouseHandler[x] = this[x]; }, this); editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler)); var mouseTarget = editor.container; var dragSelectionMarker, x, y; var timerId, range; var dragCursor, counter = 0; var dragOperation; var isInternal; var autoScrollStartTime; var cursorMovedTime; var cursorPointOnCaretMoved; this.onDragStart = function(e) { if (this.cancelDrag || !mouseTarget.draggable) { var self = this; setTimeout(function(){ self.startSelect(); self.captureMouse(e); }, 0); return e.preventDefault(); } range = editor.getSelectionRange(); var dataTransfer = e.dataTransfer; dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; if (useragent.isOpera) { editor.container.appendChild(blankImage); blankImage.scrollTop = 0; } dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0); if (useragent.isOpera) { editor.container.removeChild(blankImage); } dataTransfer.clearData(); dataTransfer.setData("Text", editor.session.getTextRange()); isInternal = true; this.setState("drag"); }; this.onDragEnd = function(e) { mouseTarget.draggable = false; isInternal = false; this.setState(null); if (!editor.getReadOnly()) { var dropEffect = e.dataTransfer.dropEffect; if (!dragOperation && dropEffect == "move") editor.session.remove(editor.getSelectionRange()); editor.renderer.$cursorLayer.setBlinking(true); } this.editor.unsetStyle("ace_dragging"); this.editor.renderer.setCursorStyle(""); }; this.onDragEnter = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; x = e.clientX; y = e.clientY; if (!dragSelectionMarker) addDragMarker(); counter++; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragOver = function(e) { if (editor.getReadOnly() || !canAccept(e.dataTransfer)) return; x = e.clientX; y = e.clientY; if (!dragSelectionMarker) { addDragMarker(); counter++; } if (onMouseMoveTimer !== null) onMouseMoveTimer = null; e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); return event.preventDefault(e); }; this.onDragLeave = function(e) { counter--; if (counter <= 0 && dragSelectionMarker) { clearDragMarker(); dragOperation = null; return event.preventDefault(e); } }; this.onDrop = function(e) { if (!dragCursor) return; var dataTransfer = e.dataTransfer; if (isInternal) { switch (dragOperation) { case "move": if (range.contains(dragCursor.row, dragCursor.column)) { range = { start: dragCursor, end: dragCursor }; } else { range = editor.moveText(range, dragCursor); } break; case "copy": range = editor.moveText(range, dragCursor, true); break; } } else { var dropData = dataTransfer.getData('Text'); range = { start: dragCursor, end: editor.session.insert(dragCursor, dropData) }; editor.focus(); dragOperation = null; } clearDragMarker(); return event.preventDefault(e); }; event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler)); event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler)); event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler)); event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler)); event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler)); event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler)); function scrollCursorIntoView(cursor, prevCursor) { var now = Date.now(); var vMovement = !prevCursor || cursor.row != prevCursor.row; var hMovement = !prevCursor || cursor.column != prevCursor.column; if (!cursorMovedTime || vMovement || hMovement) { editor.$blockScrolling += 1; editor.moveCursorToPosition(cursor); editor.$blockScrolling -= 1; cursorMovedTime = now; cursorPointOnCaretMoved = {x: x, y: y}; } else { var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); if (distance > SCROLL_CURSOR_HYSTERESIS) { cursorMovedTime = null; } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { editor.renderer.scrollCursorIntoView(); cursorMovedTime = null; } } } function autoScroll(cursor, prevCursor) { var now = Date.now(); var lineHeight = editor.renderer.layerConfig.lineHeight; var characterWidth = editor.renderer.layerConfig.characterWidth; var editorRect = editor.renderer.scroller.getBoundingClientRect(); var offsets = { x: { left: x - editorRect.left, right: editorRect.right - x }, y: { top: y - editorRect.top, bottom: editorRect.bottom - y } }; var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); var scrollCursor = {row: cursor.row, column: cursor.column}; if (nearestXOffset / characterWidth <= 2) { scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); } if (nearestYOffset / lineHeight <= 1) { scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); } var vScroll = cursor.row != scrollCursor.row; var hScroll = cursor.column != scrollCursor.column; var vMovement = !prevCursor || cursor.row != prevCursor.row; if (vScroll || (hScroll && !vMovement)) { if (!autoScrollStartTime) autoScrollStartTime = now; else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) editor.renderer.scrollCursorIntoView(scrollCursor); } else { autoScrollStartTime = null; } } function onDragInterval() { var prevCursor = dragCursor; dragCursor = editor.renderer.screenToTextCoordinates(x, y); scrollCursorIntoView(dragCursor, prevCursor); autoScroll(dragCursor, prevCursor); } function addDragMarker() { range = editor.selection.toOrientedRange(); dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); editor.clearSelection(); if (editor.isFocused()) editor.renderer.$cursorLayer.setBlinking(false); clearInterval(timerId); onDragInterval(); timerId = setInterval(onDragInterval, 20); counter = 0; event.addListener(document, "mousemove", onMouseMove); } function clearDragMarker() { clearInterval(timerId); editor.session.removeMarker(dragSelectionMarker); dragSelectionMarker = null; editor.$blockScrolling += 1; editor.selection.fromOrientedRange(range); editor.$blockScrolling -= 1; if (editor.isFocused() && !isInternal) editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly()); range = null; dragCursor = null; counter = 0; autoScrollStartTime = null; cursorMovedTime = null; event.removeListener(document, "mousemove", onMouseMove); } var onMouseMoveTimer = null; function onMouseMove() { if (onMouseMoveTimer == null) { onMouseMoveTimer = setTimeout(function() { if (onMouseMoveTimer != null && dragSelectionMarker) clearDragMarker(); }, 20); } } function canAccept(dataTransfer) { var types = dataTransfer.types; return !types || Array.prototype.some.call(types, function(type) { return type == 'text/plain' || type == 'Text'; }); } function getDropEffect(e) { var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; var effectAllowed = "uninitialized"; try { effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); } catch (e) {} var dropEffect = "none"; if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; else if (moveAllowed.indexOf(effectAllowed) >= 0) dropEffect = "move"; else if (copyAllowed.indexOf(effectAllowed) >= 0) dropEffect = "copy"; return dropEffect; } } (function() { this.dragWait = function() { var interval = Date.now() - this.mousedownEvent.time; if (interval > this.editor.getDragDelay()) this.startDrag(); }; this.dragWaitEnd = function() { var target = this.editor.container; target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); this.selectEnd(); }; this.dragReadyEnd = function(e) { this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()); this.editor.unsetStyle("ace_dragging"); this.editor.renderer.setCursorStyle(""); this.dragWaitEnd(); }; this.startDrag = function(){ this.cancelDrag = false; var editor = this.editor; var target = editor.container; target.draggable = true; editor.renderer.$cursorLayer.setBlinking(false); editor.setStyle("ace_dragging"); var cursorStyle = useragent.isWin ? "default" : "move"; editor.renderer.setCursorStyle(cursorStyle); this.setState("dragReady"); }; this.onMouseDrag = function(e) { var target = this.editor.container; if (useragent.isIE && this.state == "dragReady") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 3) target.dragDrop(); } if (this.state === "dragWait") { var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); if (distance > 0) { target.draggable = false; this.startSelect(this.mousedownEvent.getDocumentPosition()); } } }; this.onMouseDown = function(e) { if (!this.$dragEnabled) return; this.mousedownEvent = e; var editor = this.editor; var inSelection = e.inSelection(); var button = e.getButton(); var clickCount = e.domEvent.detail || 1; if (clickCount === 1 && button === 0 && inSelection) { if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) return; this.mousedownEvent.time = Date.now(); var eventTarget = e.domEvent.target || e.domEvent.srcElement; if ("unselectable" in eventTarget) eventTarget.unselectable = "on"; if (editor.getDragDelay()) { if (useragent.isWebKit) { this.cancelDrag = true; var mouseTarget = editor.container; mouseTarget.draggable = true; } this.setState("dragWait"); } else { this.startDrag(); } this.captureMouse(e, this.onMouseDrag.bind(this)); e.defaultPrevented = true; } }; }).call(DragdropHandler.prototype); function calcDistance(ax, ay, bx, by) { return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); } exports.DragdropHandler = DragdropHandler; }); ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; var dom = require("./dom"); exports.get = function (url, callback) { var xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { callback(xhr.responseText); } }; xhr.send(null); }; exports.loadScript = function(path, callback) { var head = dom.getDocumentHead(); var s = document.createElement('script'); s.src = path; head.appendChild(s); s.onload = s.onreadystatechange = function(_, isAbort) { if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { s = s.onload = s.onreadystatechange = null; if (!isAbort) callback(); } }; }; exports.qualifyURL = function(url) { var a = document.createElement('a'); a.href = url; return a.href; } }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i<listeners.length; i++) { listeners[i](e, this); if (e.propagationStopped) break; } if (defaultHandler && !e.defaultPrevented) return defaultHandler(e, this); }; EventEmitter._signal = function(eventName, e) { var listeners = (this._eventRegistry || {})[eventName]; if (!listeners) return; listeners = listeners.slice(); for (var i=0; i<listeners.length; i++) listeners[i](e, this); }; EventEmitter.once = function(eventName, callback) { var _self = this; callback && this.addEventListener(eventName, function newCallback() { _self.removeEventListener(eventName, newCallback); callback.apply(null, arguments); }); }; EventEmitter.setDefaultHandler = function(eventName, callback) { var handlers = this._defaultHandlers if (!handlers) handlers = this._defaultHandlers = {_disabled_: {}}; if (handlers[eventName]) { var old = handlers[eventName]; var disabled = handlers._disabled_[eventName]; if (!disabled) handlers._disabled_[eventName] = disabled = []; disabled.push(old); var i = disabled.indexOf(callback); if (i != -1) disabled.splice(i, 1); } handlers[eventName] = callback; }; EventEmitter.removeDefaultHandler = function(eventName, callback) { var handlers = this._defaultHandlers if (!handlers) return; var disabled = handlers._disabled_[eventName]; if (handlers[eventName] == callback) { var old = handlers[eventName]; if (disabled) this.setDefaultHandler(eventName, disabled.pop()); } else if (disabled) { var i = disabled.indexOf(callback); if (i != -1) disabled.splice(i, 1); } }; EventEmitter.on = EventEmitter.addEventListener = function(eventName, callback, capturing) { this._eventRegistry = this._eventRegistry || {}; var listeners = this._eventRegistry[eventName]; if (!listeners) listeners = this._eventRegistry[eventName] = []; if (listeners.indexOf(callback) == -1) listeners[capturing ? "unshift" : "push"](callback); return callback; }; EventEmitter.off = EventEmitter.removeListener = EventEmitter.removeEventListener = function(eventName, callback) { this._eventRegistry = this._eventRegistry || {}; var listeners = this._eventRegistry[eventName]; if (!listeners) return; var index = listeners.indexOf(callback); if (index !== -1) listeners.splice(index, 1); }; EventEmitter.removeAllListeners = function(eventName) { if (this._eventRegistry) this._eventRegistry[eventName] = []; }; exports.EventEmitter = EventEmitter; }); ace.define("ace/lib/app_config",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "no use strict"; var oop = require("./oop"); var EventEmitter = require("./event_emitter").EventEmitter; var optionsProvider = { setOptions: function(optList) { Object.keys(optList).forEach(function(key) { this.setOption(key, optList[key]); }, this); }, getOptions: function(optionNames) { var result = {}; if (!optionNames) { optionNames = Object.keys(this.$options); } else if (!Array.isArray(optionNames)) { result = optionNames; optionNames = Object.keys(result); } optionNames.forEach(function(key) { result[key] = this.getOption(key); }, this); return result; }, setOption: function(name, value) { if (this["$" + name] === value) return; var opt = this.$options[name]; if (!opt) { return warn('misspelled option "' + name + '"'); } if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].setOption(name, value); if (!opt.handlesSet) this["$" + name] = value; if (opt && opt.set) opt.set.call(this, value); }, getOption: function(name) { var opt = this.$options[name]; if (!opt) { return warn('misspelled option "' + name + '"'); } if (opt.forwardTo) return this[opt.forwardTo] && this[opt.forwardTo].getOption(name); return opt && opt.get ? opt.get.call(this) : this["$" + name]; } }; function warn(message) { if (typeof console != "undefined" && console.warn) console.warn.apply(console, arguments); } function reportError(msg, data) { var e = new Error(msg); e.data = data; if (typeof console == "object" && console.error) console.error(e); setTimeout(function() { throw e; }); } var AppConfig = function() { this.$defaultOptions = {}; }; (function() { oop.implement(this, EventEmitter); this.defineOptions = function(obj, path, options) { if (!obj.$options) this.$defaultOptions[path] = obj.$options = {}; Object.keys(options).forEach(function(key) { var opt = options[key]; if (typeof opt == "string") opt = {forwardTo: opt}; opt.name || (opt.name = key); obj.$options[opt.name] = opt; if ("initialValue" in opt) obj["$" + opt.name] = opt.initialValue; }); oop.implement(obj, optionsProvider); return this; }; this.resetOptions = function(obj) { Object.keys(obj.$options).forEach(function(key) { var opt = obj.$options[key]; if ("value" in opt) obj.setOption(key, opt.value); }); }; this.setDefaultValue = function(path, name, value) { var opts = this.$defaultOptions[path] || (this.$defaultOptions[path] = {}); if (opts[name]) { if (opts.forwardTo) this.setDefaultValue(opts.forwardTo, name, value); else opts[name].value = value; } }; this.setDefaultValues = function(path, optionHash) { Object.keys(optionHash).forEach(function(key) { this.setDefaultValue(path, key, optionHash[key]); }, this); }; this.warn = warn; this.reportError = reportError; }).call(AppConfig.prototype); exports.AppConfig = AppConfig; }); ace.define("ace/config",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/lib/net","ace/lib/app_config"], function(require, exports, module) { "no use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var net = require("./lib/net"); var AppConfig = require("./lib/app_config").AppConfig; module.exports = exports = new AppConfig(); var global = (function() { return this || typeof window != "undefined" && window; })(); var options = { packaged: false, workerPath: null, modePath: null, themePath: null, basePath: "", suffix: ".js", $moduleUrls: {} }; exports.get = function(key) { if (!options.hasOwnProperty(key)) throw new Error("Unknown config key: " + key); return options[key]; }; exports.set = function(key, value) { if (!options.hasOwnProperty(key)) throw new Error("Unknown config key: " + key); options[key] = value; }; exports.all = function() { return lang.copyObject(options); }; exports.moduleUrl = function(name, component) { if (options.$moduleUrls[name]) return options.$moduleUrls[name]; var parts = name.split("/"); component = component || parts[parts.length - 2] || ""; var sep = component == "snippets" ? "/" : "-"; var base = parts[parts.length - 1]; if (component == "worker" && sep == "-") { var re = new RegExp("^" + component + "[\\-_]|[\\-_]" + component + "$", "g"); base = base.replace(re, ""); } if ((!base || base == component) && parts.length > 1) base = parts[parts.length - 2]; var path = options[component + "Path"]; if (path == null) { path = options.basePath; } else if (sep == "/") { component = sep = ""; } if (path && path.slice(-1) != "/") path += "/"; return path + component + sep + base + this.get("suffix"); }; exports.setModuleUrl = function(name, subst) { return options.$moduleUrls[name] = subst; }; exports.$loading = {}; exports.loadModule = function(moduleName, onLoad) { var module, moduleType; if (Array.isArray(moduleName)) { moduleType = moduleName[0]; moduleName = moduleName[1]; } try { module = require(moduleName); } catch (e) {} if (module && !exports.$loading[moduleName]) return onLoad && onLoad(module); if (!exports.$loading[moduleName]) exports.$loading[moduleName] = []; exports.$loading[moduleName].push(onLoad); if (exports.$loading[moduleName].length > 1) return; var afterLoad = function() { require([moduleName], function(module) { exports._emit("load.module", {name: moduleName, module: module}); var listeners = exports.$loading[moduleName]; exports.$loading[moduleName] = null; listeners.forEach(function(onLoad) { onLoad && onLoad(module); }); }); }; if (!exports.get("packaged")) return afterLoad(); net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); }; init(true);function init(packaged) { if (!global || !global.document) return; options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged); var scriptOptions = {}; var scriptUrl = ""; var currentScript = (document.currentScript || document._currentScript ); // native or polyfill var currentDocument = currentScript && currentScript.ownerDocument || document; var scripts = currentDocument.getElementsByTagName("script"); for (var i=0; i<scripts.length; i++) { var script = scripts[i]; var src = script.src || script.getAttribute("src"); if (!src) continue; var attributes = script.attributes; for (var j=0, l=attributes.length; j < l; j++) { var attr = attributes[j]; if (attr.name.indexOf("data-ace-") === 0) { scriptOptions[deHyphenate(attr.name.replace(/^data-ace-/, ""))] = attr.value; } } var m = src.match(/^(.*)\/ace(\-\w+)?\.js(\?|$)/); if (m) scriptUrl = m[1]; } if (scriptUrl) { scriptOptions.base = scriptOptions.base || scriptUrl; scriptOptions.packaged = true; } scriptOptions.basePath = scriptOptions.base; scriptOptions.workerPath = scriptOptions.workerPath || scriptOptions.base; scriptOptions.modePath = scriptOptions.modePath || scriptOptions.base; scriptOptions.themePath = scriptOptions.themePath || scriptOptions.base; delete scriptOptions.base; for (var key in scriptOptions) if (typeof scriptOptions[key] !== "undefined") exports.set(key, scriptOptions[key]); } exports.init = init; function deHyphenate(str) { return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); }); } }); ace.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/config"], function(require, exports, module) { "use strict"; var event = require("../lib/event"); var useragent = require("../lib/useragent"); var DefaultHandlers = require("./default_handlers").DefaultHandlers; var DefaultGutterHandler = require("./default_gutter_handler").GutterHandler; var MouseEvent = require("./mouse_event").MouseEvent; var DragdropHandler = require("./dragdrop_handler").DragdropHandler; var config = require("../config"); var MouseHandler = function(editor) { var _self = this; this.editor = editor; new DefaultHandlers(this); new DefaultGutterHandler(this); new DragdropHandler(this); var focusEditor = function(e) { var windowBlurred = !document.hasFocus || !document.hasFocus() || !editor.isFocused() && document.activeElement == (editor.textInput && editor.textInput.getElement()) if (windowBlurred) window.focus(); editor.focus(); }; var mouseTarget = editor.renderer.getMouseEventTarget(); event.addListener(mouseTarget, "click", this.onMouseEvent.bind(this, "click")); event.addListener(mouseTarget, "mousemove", this.onMouseMove.bind(this, "mousemove")); 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"); event.addMouseWheelListener(editor.container, this.onMouseWheel.bind(this, "mousewheel")); event.addTouchMoveListener(editor.container, this.onTouchMove.bind(this, "touchmove")); var gutterEl = editor.renderer.$gutter; event.addListener(gutterEl, "mousedown", this.onMouseEvent.bind(this, "guttermousedown")); event.addListener(gutterEl, "click", this.onMouseEvent.bind(this, "gutterclick")); event.addListener(gutterEl, "dblclick", this.onMouseEvent.bind(this, "gutterdblclick")); event.addListener(gutterEl, "mousemove", this.onMouseEvent.bind(this, "guttermousemove")); event.addListener(mouseTarget, "mousedown", focusEditor); event.addListener(gutterEl, "mousedown", focusEditor); if (useragent.isIE && editor.renderer.scrollBarV) { event.addListener(editor.renderer.scrollBarV.element, "mousedown", focusEditor); event.addListener(editor.renderer.scrollBarH.element, "mousedown", focusEditor); } editor.on("mousemove", function(e){ if (_self.state || _self.$dragDelay || !_self.$dragEnabled) return; var character = editor.renderer.screenToTextCoordinates(e.x, e.y); var range = editor.session.selection.getRange(); var renderer = editor.renderer; if (!range.isEmpty() && range.insideStart(character.row, character.column)) { renderer.setCursorStyle("default"); } else { renderer.setCursorStyle(""); } }); }; (function() { this.onMouseEvent = function(name, e) { this.editor._emit(name, new MouseEvent(e, this.editor)); }; this.onMouseMove = function(name, e) { var listeners = this.editor._eventRegistry && this.editor._eventRegistry.mousemove; if (!listeners || !listeners.length) return; this.editor._emit(name, new MouseEvent(e, this.editor)); }; this.onMouseWheel = function(name, e) { var mouseEvent = new MouseEvent(e, this.editor); mouseEvent.speed = this.$scrollSpeed * 2; mouseEvent.wheelX = e.wheelX; mouseEvent.wheelY = e.wheelY; this.editor._emit(name, mouseEvent); }; this.onTouchMove = function (name, e) { var mouseEvent = new MouseEvent(e, this.editor); mouseEvent.speed = 1;//this.$scrollSpeed * 2; mouseEvent.wheelX = e.wheelX; mouseEvent.wheelY = e.wheelY; this.editor._emit(name, mouseEvent); }; this.setState = function(state) { this.state = state; }; this.captureMouse = function(ev, mouseMoveHandler) { this.x = ev.x; this.y = ev.y; this.isMousePressed = true; var renderer = this.editor.renderer; if (renderer.$keepTextAreaAtCursor) renderer.$keepTextAreaAtCursor = null; var self = this; var onMouseMove = function(e) { if (!e) return; if (useragent.isWebKit && !e.which && self.releaseMouse) return self.releaseMouse(); self.x = e.clientX; self.y = e.clientY; mouseMoveHandler && mouseMoveHandler(e); self.mouseEvent = new MouseEvent(e, self.editor); self.$mouseMoved = true; }; var onCaptureEnd = function(e) { clearInterval(timerId); onCaptureInterval(); self[self.state + "End"] && self[self.state + "End"](e); self.state = ""; if (renderer.$keepTextAreaAtCursor == null) { renderer.$keepTextAreaAtCursor = true; renderer.$moveTextAreaToCursor(); } self.isMousePressed = false; self.$onCaptureMouseMove = self.releaseMouse = null; e && self.onMouseEvent("mouseup", e); }; var onCaptureInterval = function() { self[self.state] && self[self.state](); self.$mouseMoved = false; }; if (useragent.isOldIE && ev.domEvent.type == "dblclick") { return setTimeout(function() {onCaptureEnd(ev);}); } self.$onCaptureMouseMove = onMouseMove; self.releaseMouse = event.capture(this.editor.container, onMouseMove, onCaptureEnd); var timerId = setInterval(onCaptureInterval, 20); }; this.releaseMouse = null; this.cancelContextMenu = function() { var stop = function(e) { if (e && e.domEvent && e.domEvent.type != "contextmenu") return; this.editor.off("nativecontextmenu", stop); if (e && e.domEvent) event.stopEvent(e.domEvent); }.bind(this); setTimeout(stop, 10); this.editor.on("nativecontextmenu", stop); }; }).call(MouseHandler.prototype); config.defineOptions(MouseHandler.prototype, "mouseHandler", { scrollSpeed: {initialValue: 2}, dragDelay: {initialValue: (useragent.isMac ? 150 : 0)}, dragEnabled: {initialValue: true}, focusTimout: {initialValue: 0}, tooltipFollowsMouse: {initialValue: true} }); exports.MouseHandler = MouseHandler; }); ace.define("ace/mouse/fold_handler",["require","exports","module"], function(require, exports, module) { "use strict"; function FoldHandler(editor) { editor.on("click", function(e) { var position = e.getDocumentPosition(); var session = editor.session; var fold = session.getFoldAt(position.row, position.column, 1); if (fold) { if (e.getAccelKey()) session.removeFold(fold); else session.expandFold(fold); e.stop(); } }); editor.on("gutterclick", function(e) { var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); if (gutterRegion == "foldWidgets") { var row = e.getDocumentPosition().row; var session = editor.session; if (session.foldWidgets && session.foldWidgets[row]) editor.session.onFoldWidgetClick(row, e); if (!editor.isFocused()) editor.focus(); e.stop(); } }); editor.on("gutterdblclick", function(e) { var gutterRegion = editor.renderer.$gutterLayer.getRegion(e); if (gutterRegion == "foldWidgets") { var row = e.getDocumentPosition().row; var session = editor.session; var data = session.getParentFoldRangeData(row, true); var range = data.range || data.firstRange; if (range) { row = range.start.row; var fold = session.getFoldAt(row, session.getLine(row).length, 1); if (fold) { session.removeFold(fold); } else { session.addFold("...", range); editor.renderer.scrollCursorIntoView({row: range.start.row, column: 0}); } } e.stop(); } }); } exports.FoldHandler = FoldHandler; }); ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"], function(require, exports, module) { "use strict"; var keyUtil = require("../lib/keys"); var event = require("../lib/event"); var KeyBinding = function(editor) { this.$editor = editor; this.$data = {editor: editor}; this.$handlers = []; this.setDefaultHandler(editor.commands); }; (function() { this.setDefaultHandler = function(kb) { this.removeKeyboardHandler(this.$defaultHandler); this.$defaultHandler = kb; this.addKeyboardHandler(kb, 0); }; this.setKeyboardHandler = function(kb) { var h = this.$handlers; if (h[h.length - 1] == kb) return; while (h[h.length - 1] && h[h.length - 1] != this.$defaultHandler) this.removeKeyboardHandler(h[h.length - 1]); this.addKeyboardHandler(kb, 1); }; this.addKeyboardHandler = function(kb, pos) { if (!kb) return; if (typeof kb == "function" && !kb.handleKeyboard) kb.handleKeyboard = kb; var i = this.$handlers.indexOf(kb); if (i != -1) this.$handlers.splice(i, 1); if (pos == undefined) this.$handlers.push(kb); else this.$handlers.splice(pos, 0, kb); if (i == -1 && kb.attach) kb.attach(this.$editor); }; this.removeKeyboardHandler = function(kb) { var i = this.$handlers.indexOf(kb); if (i == -1) return false; this.$handlers.splice(i, 1); kb.detach && kb.detach(this.$editor); return true; }; this.getKeyboardHandler = function() { return this.$handlers[this.$handlers.length - 1]; }; this.getStatusText = function() { var data = this.$data; var editor = data.editor; return this.$handlers.map(function(h) { return h.getStatusText && h.getStatusText(editor, data) || ""; }).filter(Boolean).join(" "); }; this.$callKeyboardHandlers = function(hashId, keyString, keyCode, e) { var toExecute; var success = false; var commands = this.$editor.commands; for (var i = this.$handlers.length; i--;) { toExecute = this.$handlers[i].handleKeyboard( this.$data, hashId, keyString, keyCode, e ); if (!toExecute || !toExecute.command) continue; if (toExecute.command == "null") { success = true; } else { success = commands.exec(toExecute.command, this.$editor, toExecute.args, e); } if (success && e && hashId != -1 && toExecute.passEvent != true && toExecute.command.passEvent != true ) { event.stopEvent(e); } if (success) break; } if (!success && hashId == -1) { toExecute = {command: "insertstring"}; success = commands.exec("insertstring", this.$editor, keyString); } if (success && this.$editor._signal) this.$editor._signal("keyboardActivity", toExecute); return success; }; this.onCommandKey = function(e, hashId, keyCode) { var keyString = keyUtil.keyCodeToString(keyCode); this.$callKeyboardHandlers(hashId, keyString, keyCode, e); }; this.onTextInput = function(text) { this.$callKeyboardHandlers(-1, text); }; }).call(KeyBinding.prototype); exports.KeyBinding = KeyBinding; }); ace.define("ace/range",["require","exports","module"], function(require, exports, module) { "use strict"; var comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; var Range = function(startRow, startColumn, endRow, endColumn) { this.start = { row: startRow, column: startColumn }; this.end = { row: endRow, column: endColumn }; }; (function() { this.isEqual = function(range) { 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; }; this.toString = function() { return ("Range: [" + this.start.row + "/" + this.start.column + "] -> [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); } } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { 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) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var lang = require("./lib/lang"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Selection = function(session) { this.session = session; this.doc = session.getDocument(); this.clearSelection(); this.lead = this.selectionLead = this.doc.createAnchor(0, 0); this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); var self = this; this.lead.on("change", function(e) { self._emit("changeCursor"); if (!self.$isEmpty) self._emit("changeSelection"); if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) self.$desiredColumn = null; }); this.selectionAnchor.on("change", function() { if (!self.$isEmpty) self._emit("changeSelection"); }); }; (function() { oop.implement(this, EventEmitter); this.isEmpty = function() { return (this.$isEmpty || ( this.anchor.row == this.lead.row && this.anchor.column == this.lead.column )); }; this.isMultiLine = function() { if (this.isEmpty()) { return false; } return this.getRange().isMultiLine(); }; this.getCursor = function() { return this.lead.getPosition(); }; this.setSelectionAnchor = function(row, column) { this.anchor.setPosition(row, column); if (this.$isEmpty) { this.$isEmpty = false; this._emit("changeSelection"); } }; this.getSelectionAnchor = function() { if (this.$isEmpty) return this.getSelectionLead(); else return this.anchor.getPosition(); }; this.getSelectionLead = function() { return this.lead.getPosition(); }; this.shiftSelection = function(columns) { if (this.$isEmpty) { this.moveCursorTo(this.lead.row, this.lead.column + columns); return; } var anchor = this.getSelectionAnchor(); var lead = this.getSelectionLead(); var isBackwards = this.isBackwards(); if (!isBackwards || anchor.column !== 0) this.setSelectionAnchor(anchor.row, anchor.column + columns); if (isBackwards || lead.column !== 0) { this.$moveSelection(function() { this.moveCursorTo(lead.row, lead.column + columns); }); } }; this.isBackwards = function() { var anchor = this.anchor; var lead = this.lead; return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); }; this.getRange = function() { var anchor = this.anchor; var lead = this.lead; if (this.isEmpty()) return Range.fromPoints(lead, lead); if (this.isBackwards()) { return Range.fromPoints(lead, anchor); } else { return Range.fromPoints(anchor, lead); } }; this.clearSelection = function() { if (!this.$isEmpty) { this.$isEmpty = true; this._emit("changeSelection"); } }; this.selectAll = function() { var lastRow = this.doc.getLength() - 1; this.setSelectionAnchor(0, 0); this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length); }; this.setRange = this.setSelectionRange = function(range, reverse) { if (reverse) { this.setSelectionAnchor(range.end.row, range.end.column); this.selectTo(range.start.row, range.start.column); } else { this.setSelectionAnchor(range.start.row, range.start.column); this.selectTo(range.end.row, range.end.column); } if (this.getRange().isEmpty()) this.$isEmpty = true; this.$desiredColumn = null; }; this.$moveSelection = function(mover) { var lead = this.lead; if (this.$isEmpty) this.setSelectionAnchor(lead.row, lead.column); mover.call(this); }; this.selectTo = function(row, column) { this.$moveSelection(function() { this.moveCursorTo(row, column); }); }; this.selectToPosition = function(pos) { this.$moveSelection(function() { this.moveCursorToPosition(pos); }); }; this.moveTo = function(row, column) { this.clearSelection(); this.moveCursorTo(row, column); }; this.moveToPosition = function(pos) { this.clearSelection(); this.moveCursorToPosition(pos); }; this.selectUp = function() { this.$moveSelection(this.moveCursorUp); }; this.selectDown = function() { this.$moveSelection(this.moveCursorDown); }; this.selectRight = function() { this.$moveSelection(this.moveCursorRight); }; this.selectLeft = function() { this.$moveSelection(this.moveCursorLeft); }; this.selectLineStart = function() { this.$moveSelection(this.moveCursorLineStart); }; this.selectLineEnd = function() { this.$moveSelection(this.moveCursorLineEnd); }; this.selectFileEnd = function() { this.$moveSelection(this.moveCursorFileEnd); }; this.selectFileStart = function() { this.$moveSelection(this.moveCursorFileStart); }; this.selectWordRight = function() { this.$moveSelection(this.moveCursorWordRight); }; this.selectWordLeft = function() { this.$moveSelection(this.moveCursorWordLeft); }; this.getWordRange = function(row, column) { if (typeof column == "undefined") { var cursor = row || this.lead; row = cursor.row; column = cursor.column; } return this.session.getWordRange(row, column); }; this.selectWord = function() { this.setSelectionRange(this.getWordRange()); }; this.selectAWord = function() { var cursor = this.getCursor(); var range = this.session.getAWordRange(cursor.row, cursor.column); this.setSelectionRange(range); }; this.getLineRange = function(row, excludeLastChar) { var rowStart = typeof row == "number" ? row : this.lead.row; var rowEnd; var foldLine = this.session.getFoldLine(rowStart); if (foldLine) { rowStart = foldLine.start.row; rowEnd = foldLine.end.row; } else { rowEnd = rowStart; } if (excludeLastChar === true) return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); else return new Range(rowStart, 0, rowEnd + 1, 0); }; this.selectLine = function() { this.setSelectionRange(this.getLineRange()); }; this.moveCursorUp = function() { this.moveCursorBy(-1, 0); }; this.moveCursorDown = function() { this.moveCursorBy(1, 0); }; this.moveCursorLeft = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); } else if (cursor.column === 0) { if (cursor.row > 0) { this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); } } else { var tabSize = this.session.getTabSize(); if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) this.moveCursorBy(0, -tabSize); else this.moveCursorBy(0, -1); } }; this.moveCursorRight = function() { var cursor = this.lead.getPosition(), fold; if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { this.moveCursorTo(fold.end.row, fold.end.column); } else if (this.lead.column == this.doc.getLine(this.lead.row).length) { if (this.lead.row < this.doc.getLength() - 1) { this.moveCursorTo(this.lead.row + 1, 0); } } else { var tabSize = this.session.getTabSize(); var cursor = this.lead; if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) this.moveCursorBy(0, tabSize); else this.moveCursorBy(0, 1); } }; this.moveCursorLineStart = function() { var row = this.lead.row; var column = this.lead.column; var screenRow = this.session.documentToScreenRow(row, column); var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); var beforeCursor = this.session.getDisplayLine( row, null, firstColumnPosition.row, firstColumnPosition.column ); var leadingSpace = beforeCursor.match(/^\s*/); if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) firstColumnPosition.column += leadingSpace[0].length; this.moveCursorToPosition(firstColumnPosition); }; this.moveCursorLineEnd = function() { var lead = this.lead; var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); if (this.lead.column == lineEnd.column) { var line = this.session.getLine(lineEnd.row); if (lineEnd.column == line.length) { var textEnd = line.search(/\s+$/); if (textEnd > 0) lineEnd.column = textEnd; } } this.moveCursorTo(lineEnd.row, lineEnd.column); }; this.moveCursorFileEnd = function() { var row = this.doc.getLength() - 1; var column = this.doc.getLine(row).length; this.moveCursorTo(row, column); }; this.moveCursorFileStart = function() { this.moveCursorTo(0, 0); }; this.moveCursorLongWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; var fold = this.session.getFoldAt(row, column, 1); if (fold) { this.moveCursorTo(fold.end.row, fold.end.column); return; } if (match = this.session.nonTokenRe.exec(rightOfCursor)) { column += this.session.nonTokenRe.lastIndex; this.session.nonTokenRe.lastIndex = 0; rightOfCursor = line.substring(column); } if (column >= line.length) { this.moveCursorTo(row, line.length); this.moveCursorRight(); if (row < this.doc.getLength() - 1) this.moveCursorWordRight(); return; } if (match = this.session.tokenRe.exec(rightOfCursor)) { column += this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.moveCursorLongWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) { this.moveCursorTo(fold.start.row, fold.start.column); return; } var str = this.session.getFoldStringAt(row, column, -1); if (str == null) { str = this.doc.getLine(row).substring(0, column); } var leftOfCursor = lang.stringReverse(str); var match; this.session.nonTokenRe.lastIndex = 0; this.session.tokenRe.lastIndex = 0; if (match = this.session.nonTokenRe.exec(leftOfCursor)) { column -= this.session.nonTokenRe.lastIndex; leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); this.session.nonTokenRe.lastIndex = 0; } if (column <= 0) { this.moveCursorTo(row, 0); this.moveCursorLeft(); if (row > 0) this.moveCursorWordLeft(); return; } if (match = this.session.tokenRe.exec(leftOfCursor)) { column -= this.session.tokenRe.lastIndex; this.session.tokenRe.lastIndex = 0; } this.moveCursorTo(row, column); }; this.$shortWordEndIndex = function(rightOfCursor) { var match, index = 0, ch; var whitespaceRe = /\s/; var tokenRe = this.session.tokenRe; tokenRe.lastIndex = 0; if (match = this.session.tokenRe.exec(rightOfCursor)) { index = this.session.tokenRe.lastIndex; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index < 1) { tokenRe.lastIndex = 0; while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { tokenRe.lastIndex = 0; index ++; if (whitespaceRe.test(ch)) { if (index > 2) { index--; break; } else { while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) index ++; if (index > 2) break; } } } } } tokenRe.lastIndex = 0; return index; }; this.moveCursorShortWordRight = function() { var row = this.lead.row; var column = this.lead.column; var line = this.doc.getLine(row); var rightOfCursor = line.substring(column); var fold = this.session.getFoldAt(row, column, 1); if (fold) return this.moveCursorTo(fold.end.row, fold.end.column); if (column == line.length) { var l = this.doc.getLength(); do { row++; rightOfCursor = this.doc.getLine(row); } while (row < l && /^\s*$/.test(rightOfCursor)); if (!/^\s+/.test(rightOfCursor)) rightOfCursor = ""; column = 0; } var index = this.$shortWordEndIndex(rightOfCursor); this.moveCursorTo(row, column + index); }; this.moveCursorShortWordLeft = function() { var row = this.lead.row; var column = this.lead.column; var fold; if (fold = this.session.getFoldAt(row, column, -1)) return this.moveCursorTo(fold.start.row, fold.start.column); var line = this.session.getLine(row).substring(0, column); if (column === 0) { do { row--; line = this.doc.getLine(row); } while (row > 0 && /^\s*$/.test(line)); column = line.length; if (!/\s+$/.test(line)) line = ""; } var leftOfCursor = lang.stringReverse(line); var index = this.$shortWordEndIndex(leftOfCursor); return this.moveCursorTo(row, column - index); }; this.moveCursorWordRight = function() { if (this.session.$selectLongWords) this.moveCursorLongWordRight(); else this.moveCursorShortWordRight(); }; this.moveCursorWordLeft = function() { if (this.session.$selectLongWords) this.moveCursorLongWordLeft(); else this.moveCursorShortWordLeft(); }; this.moveCursorBy = function(rows, chars) { var screenPos = this.session.documentToScreenPosition( this.lead.row, this.lead.column ); if (chars === 0) { if (this.$desiredColumn) screenPos.column = this.$desiredColumn; else this.$desiredColumn = screenPos.column; } var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) { if (docPos.row > 0 || rows > 0) docPos.row++; } } this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); }; this.moveCursorToPosition = function(position) { this.moveCursorTo(position.row, position.column); }; this.moveCursorTo = function(row, column, keepDesiredColumn) { var fold = this.session.getFoldAt(row, column, 1); if (fold) { row = fold.start.row; column = fold.start.column; } this.$keepDesiredColumnOnChange = true; this.lead.setPosition(row, column); this.$keepDesiredColumnOnChange = false; if (!keepDesiredColumn) this.$desiredColumn = null; }; this.moveCursorToScreen = function(row, column, keepDesiredColumn) { var pos = this.session.screenToDocumentPosition(row, column); this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); }; this.detach = function() { this.lead.detach(); this.anchor.detach(); this.session = this.doc = null; }; this.fromOrientedRange = function(range) { this.setSelectionRange(range, range.cursor == range.start); this.$desiredColumn = range.desiredColumn || this.$desiredColumn; }; this.toOrientedRange = function(range) { var r = this.getRange(); if (range) { range.start.column = r.start.column; range.start.row = r.start.row; range.end.column = r.end.column; range.end.row = r.end.row; } else { range = r; } range.cursor = this.isBackwards() ? range.start : range.end; range.desiredColumn = this.$desiredColumn; return range; }; this.getRangeOfMovements = function(func) { var start = this.getCursor(); try { func(this); var end = this.getCursor(); return Range.fromPoints(start,end); } catch(e) { return Range.fromPoints(start,start); } finally { this.moveCursorToPosition(start); } }; this.toJSON = function() { if (this.rangeCount) { var data = this.ranges.map(function(r) { var r1 = r.clone(); r1.isBackwards = r.cursor == r.start; return r1; }); } else { var data = this.getRange(); data.isBackwards = this.isBackwards(); } return data; }; this.fromJSON = function(data) { if (data.start == undefined) { if (this.rangeList) { this.toSingleRange(data[0]); for (var i = data.length; i--; ) { var r = Range.fromPoints(data[i].start, data[i].end); if (data[i].isBackwards) r.cursor = r.start; this.addRange(r, true); } return; } else data = data[0]; } if (this.rangeList) this.toSingleRange(data); this.setSelectionRange(data, data.isBackwards); }; this.isEqual = function(data) { if ((data.length || this.rangeCount) && data.length != this.rangeCount) return false; if (!data.length || !this.ranges) return this.getRange().isEqual(data); for (var i = this.ranges.length; i--; ) { if (!this.ranges[i].isEqual(data[i])) return false; } return true; }; }).call(Selection.prototype); exports.Selection = Selection; }); ace.define("ace/tokenizer",["require","exports","module","ace/config"], function(require, exports, module) { "use strict"; var config = require("./config"); var MAX_TOKEN_COUNT = 2000; var Tokenizer = function(rules) { this.states = rules; this.regExps = {}; this.matchMappings = {}; for (var key in this.states) { var state = this.states[key]; var ruleRegExps = []; var matchTotal = 0; var mapping = this.matchMappings[key] = {defaultToken: "text"}; var flag = "g"; var splitterRurles = []; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.defaultToken) mapping.defaultToken = rule.defaultToken; if (rule.caseInsensitive) flag = "gi"; if (rule.regex == null) continue; if (rule.regex instanceof RegExp) rule.regex = rule.regex.toString().slice(1, -1); var adjustedregex = rule.regex; var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; if (Array.isArray(rule.token)) { if (rule.token.length == 1 || matchcount == 1) { rule.token = rule.token[0]; } else if (matchcount - 1 != rule.token.length) { this.reportError("number of classes and regexp groups doesn't match", { rule: rule, groupCount: matchcount - 1 }); rule.token = rule.token[0]; } else { rule.tokenArray = rule.token; rule.token = null; rule.onMatch = this.$arrayTokens; } } else if (typeof rule.token == "function" && !rule.onMatch) { if (matchcount > 1) rule.onMatch = this.$applyToken; else rule.onMatch = rule.token; } if (matchcount > 1) { if (/\\\d/.test(rule.regex)) { adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function(match, digit) { return "\\" + (parseInt(digit, 10) + matchTotal + 1); }); } else { matchcount = 1; adjustedregex = this.removeCapturingGroups(rule.regex); } if (!rule.splitRegex && typeof rule.token != "string") splitterRurles.push(rule); // flag will be known only at the very end } mapping[matchTotal] = i; matchTotal += matchcount; ruleRegExps.push(adjustedregex); if (!rule.onMatch) rule.onMatch = null; } if (!ruleRegExps.length) { mapping[0] = 0; ruleRegExps.push("$"); } splitterRurles.forEach(function(rule) { rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); }, this); this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); } }; (function() { this.$setMaxTokenCount = function(m) { MAX_TOKEN_COUNT = m | 0; }; this.$applyToken = function(str) { var values = this.splitRegex.exec(str).slice(1); var types = this.token.apply(this, values); if (typeof types === "string") return [{type: types, value: str}]; var tokens = []; for (var i = 0, l = types.length; i < l; i++) { if (values[i]) tokens[tokens.length] = { type: types[i], value: values[i] }; } return tokens; }; this.$arrayTokens = function(str) { if (!str) return []; var values = this.splitRegex.exec(str); if (!values) return "text"; var tokens = []; var types = this.tokenArray; for (var i = 0, l = types.length; i < l; i++) { if (values[i + 1]) tokens[tokens.length] = { type: types[i], value: values[i + 1] }; } return tokens; }; this.removeCapturingGroups = function(src) { var r = src.replace( /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g, function(x, y) {return y ? "(?:" : x;} ); return r; }; this.createSplitterRegexp = function(src, flag) { if (src.indexOf("(?=") != -1) { var stack = 0; var inChClass = false; var lastCapture = {}; src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function( m, esc, parenOpen, parenClose, square, index ) { if (inChClass) { inChClass = square != "]"; } else if (square) { inChClass = true; } else if (parenClose) { if (stack == lastCapture.stack) { lastCapture.end = index+1; lastCapture.stack = -1; } stack--; } else if (parenOpen) { stack++; if (parenOpen.length != 1) { lastCapture.stack = stack lastCapture.start = index; } } return m; }); if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); } if (src.charAt(0) != "^") src = "^" + src; if (src.charAt(src.length - 1) != "$") src += "$"; return new RegExp(src, (flag||"").replace("g", "")); }; this.getLineTokens = function(line, startState) { if (startState && typeof startState != "string") { var stack = startState.slice(0); startState = stack[0]; if (startState === "#tmp") { stack.shift() startState = stack.shift() } } else var stack = []; var currentState = startState || "start"; var state = this.states[currentState]; if (!state) { currentState = "start"; state = this.states[currentState]; } var mapping = this.matchMappings[currentState]; var re = this.regExps[currentState]; re.lastIndex = 0; var match, tokens = []; var lastIndex = 0; var matchAttempts = 0; var token = {type: null, value: ""}; while (match = re.exec(line)) { var type = mapping.defaultToken; var rule = null; var value = match[0]; var index = re.lastIndex; if (index - value.length > lastIndex) { var skipped = line.substring(lastIndex, index - value.length); if (token.type == type) { token.value += skipped; } else { if (token.type) tokens.push(token); token = {type: type, value: skipped}; } } for (var i = 0; i < match.length-2; i++) { if (match[i + 1] === undefined) continue; rule = state[mapping[i]]; if (rule.onMatch) type = rule.onMatch(value, currentState, stack); else type = rule.token; if (rule.next) { if (typeof rule.next == "string") { currentState = rule.next; } else { currentState = rule.next(currentState, stack); } state = this.states[currentState]; if (!state) { this.reportError("state doesn't exist", currentState); currentState = "start"; state = this.states[currentState]; } mapping = this.matchMappings[currentState]; lastIndex = index; re = this.regExps[currentState]; re.lastIndex = index; } break; } if (value) { if (typeof type === "string") { if ((!rule || rule.merge !== false) && token.type === type) { token.value += value; } else { if (token.type) tokens.push(token); token = {type: type, value: value}; } } else if (type) { if (token.type) tokens.push(token); token = {type: null, value: ""}; for (var i = 0; i < type.length; i++) tokens.push(type[i]); } } if (lastIndex == line.length) break; lastIndex = index; if (matchAttempts++ > MAX_TOKEN_COUNT) { if (matchAttempts > 2 * line.length) { this.reportError("infinite loop with in ace tokenizer", { startState: startState, line: line }); } while (lastIndex < line.length) { if (token.type) tokens.push(token); token = { value: line.substring(lastIndex, lastIndex += 2000), type: "overflow" }; } currentState = "start"; stack = []; break; } } if (token.type) tokens.push(token); if (stack.length > 1) { if (stack[0] !== currentState) stack.unshift("#tmp", currentState); } return { tokens : tokens, state : stack.length ? stack : currentState }; }; this.reportError = config.reportError; }).call(Tokenizer.prototype); exports.Tokenizer = Tokenizer; }); ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"], function(require, exports, module) { "use strict"; var lang = require("../lib/lang"); var TextHighlightRules = function() { this.$rules = { "start" : [{ token : "empty_line", regex : '^$' }, { defaultToken : "text" }] }; }; (function() { this.addRules = function(rules, prefix) { if (!prefix) { for (var key in rules) this.$rules[key] = rules[key]; return; } for (var key in rules) { var state = rules[key]; for (var i = 0; i < state.length; i++) { var rule = state[i]; if (rule.next || rule.onMatch) { if (typeof rule.next == "string") { if (rule.next.indexOf(prefix) !== 0) rule.next = prefix + rule.next; } if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) rule.nextState = prefix + rule.nextState; } } this.$rules[prefix + key] = state; } }; this.getRules = function() { return this.$rules; }; this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { var embedRules = typeof HighlightRules == "function" ? new HighlightRules().getRules() : HighlightRules; if (states) { for (var i = 0; i < states.length; i++) states[i] = prefix + states[i]; } else { states = []; for (var key in embedRules) states.push(prefix + key); } this.addRules(embedRules, prefix); if (escapeRules) { var addRules = Array.prototype[append ? "push" : "unshift"]; for (var i = 0; i < states.length; i++) addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules)); } if (!this.$embeds) this.$embeds = []; this.$embeds.push(prefix); }; this.getEmbeds = function() { return this.$embeds; }; var pushState = function(currentState, stack) { if (currentState != "start" || stack.length) stack.unshift(this.nextState, currentState); return this.nextState; }; var popState = function(currentState, stack) { stack.shift(); return stack.shift() || "start"; }; this.normalizeRules = function() { var id = 0; var rules = this.$rules; function processState(key) { var state = rules[key]; state.processed = true; for (var i = 0; i < state.length; i++) { var rule = state[i]; var toInsert = null; if (Array.isArray(rule)) { toInsert = rule; rule = {}; } if (!rule.regex && rule.start) { rule.regex = rule.start; if (!rule.next) rule.next = []; rule.next.push({ defaultToken: rule.token }, { token: rule.token + ".end", regex: rule.end || rule.start, next: "pop" }); rule.token = rule.token + ".start"; rule.push = true; } var next = rule.next || rule.push; if (next && Array.isArray(next)) { var stateName = rule.stateName; if (!stateName) { stateName = rule.token; if (typeof stateName != "string") stateName = stateName[0] || ""; if (rules[stateName]) stateName += id++; } rules[stateName] = next; rule.next = stateName; processState(stateName); } else if (next == "pop") { rule.next = popState; } if (rule.push) { rule.nextState = rule.next || rule.push; rule.next = pushState; delete rule.push; } if (rule.rules) { for (var r in rule.rules) { if (rules[r]) { if (rules[r].push) rules[r].push.apply(rules[r], rule.rules[r]); } else { rules[r] = rule.rules[r]; } } } var includeName = typeof rule == "string" ? rule : typeof rule.include == "string" ? rule.include : ""; if (includeName) { toInsert = rules[includeName]; } if (toInsert) { var args = [i, 1].concat(toInsert); if (rule.noEscape) args = args.filter(function(x) {return !x.next;}); state.splice.apply(state, args); i--; } if (rule.keywordMap) { rule.token = this.createKeywordMapper( rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive ); delete rule.defaultToken; } } } Object.keys(rules).forEach(processState, this); }; this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) { var keywords = Object.create(null); Object.keys(map).forEach(function(className) { var a = map[className]; if (ignoreCase) a = a.toLowerCase(); var list = a.split(splitChar || "|"); for (var i = list.length; i--; ) keywords[list[i]] = className; }); if (Object.getPrototypeOf(keywords)) { keywords.__proto__ = null; } this.$keywordList = Object.keys(keywords); map = null; return ignoreCase ? function(value) {return keywords[value.toLowerCase()] || defaultToken } : function(value) {return keywords[value] || defaultToken }; }; this.getKeywords = function() { return this.$keywords; }; }).call(TextHighlightRules.prototype); exports.TextHighlightRules = TextHighlightRules; }); ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module) { "use strict"; var Behaviour = function() { this.$behaviours = {}; }; (function () { this.add = function (name, action, callback) { switch (undefined) { case this.$behaviours: this.$behaviours = {}; case this.$behaviours[name]: this.$behaviours[name] = {}; } this.$behaviours[name][action] = callback; } this.addBehaviours = function (behaviours) { for (var key in behaviours) { for (var action in behaviours[key]) { this.add(key, action, behaviours[key][action]); } } } this.remove = function (name) { if (this.$behaviours && this.$behaviours[name]) { delete this.$behaviours[name]; } } this.inherit = function (mode, filter) { if (typeof mode === "function") { var behaviours = new mode().getBehaviours(filter); } else { var behaviours = mode.getBehaviours(filter); } this.addBehaviours(behaviours); } this.getBehaviours = function (filter) { if (!filter) { return this.$behaviours; } else { var ret = {} for (var i = 0; i < filter.length; i++) { if (this.$behaviours[filter[i]]) { ret[filter[i]] = this.$behaviours[filter[i]]; } } return ret; } } }).call(Behaviour.prototype); exports.Behaviour = Behaviour; }); ace.define("ace/token_iterator",["require","exports","module"], function(require, exports, module) { "use strict"; var TokenIterator = function(session, initialRow, initialColumn) { this.$session = session; this.$row = initialRow; this.$rowTokens = session.getTokens(initialRow); var token = session.getTokenAt(initialRow, initialColumn); this.$tokenIndex = token ? token.index : -1; }; (function() { this.stepBackward = function() { this.$tokenIndex -= 1; while (this.$tokenIndex < 0) { this.$row -= 1; if (this.$row < 0) { this.$row = 0; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = this.$rowTokens.length - 1; } return this.$rowTokens[this.$tokenIndex]; }; this.stepForward = function() { this.$tokenIndex += 1; var rowCount; while (this.$tokenIndex >= this.$rowTokens.length) { this.$row += 1; if (!rowCount) rowCount = this.$session.getLength(); if (this.$row >= rowCount) { this.$row = rowCount - 1; return null; } this.$rowTokens = this.$session.getTokens(this.$row); this.$tokenIndex = 0; } return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentToken = function () { return this.$rowTokens[this.$tokenIndex]; }; this.getCurrentTokenRow = function () { return this.$row; }; this.getCurrentTokenColumn = function() { var rowTokens = this.$rowTokens; var tokenIndex = this.$tokenIndex; var column = rowTokens[tokenIndex].start; if (column !== undefined) return column; column = 0; while (tokenIndex > 0) { tokenIndex -= 1; column += rowTokens[tokenIndex].value.length; } return column; }; this.getCurrentTokenPosition = function() { return {row: this.$row, column: this.getCurrentTokenColumn()}; }; }).call(TokenIterator.prototype); exports.TokenIterator = TokenIterator; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var getWrapped = function(selection, selected, opening, closing) { var rowDiff = selection.end.row - selection.start.row; return { text: opening + selected + closing, selection: [ 0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1) ] }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '{', '}'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '(', ')'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '[', ']'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { if (this.lineCommentStart && this.lineCommentStart.indexOf(text) != -1) return; initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, quote, quote); } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string|escape/.test(token.type); var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; if (pair && /string\.end/.test(rightToken.type)) pair = false; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/unicode",["require","exports","module"], function(require, exports, module) { "use strict"; exports.packages = {}; addUnicodePackage({ L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A", Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A", Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC", Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F", Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26", Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26", Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC", Me: "0488048906DE20DD-20E020E2-20E4A670-A672", N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF", No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835", P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65", Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D", Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62", Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63", Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20", Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21", Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F", Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65", S: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD", Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC", Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6", Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3", So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD", Z: "002000A01680180E2000-200A20282029202F205F3000", Zs: "002000A01680180E2000-200A202F205F3000", Zl: "2028", Zp: "2029", C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF", Cc: "0000-001F007F-009F", Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB", Co: "E000-F8FF", Cs: "D800-DFFF", Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF" }); function addUnicodePackage (pack) { var codePoint = /\w{4}/g; for (var name in pack) exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); } }); ace.define("ace/mode/text",["require","exports","module","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) { "use strict"; var Tokenizer = require("../tokenizer").Tokenizer; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var unicode = require("../unicode"); var lang = require("../lib/lang"); var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; var Mode = function() { this.HighlightRules = TextHighlightRules; }; (function() { this.$defaultBehaviour = new CstyleBehaviour(); this.tokenRe = new RegExp("^[" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]+", "g" ); this.nonTokenRe = new RegExp("^(?:[^" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\\$_]|\\s])+", "g" ); this.getTokenizer = function() { if (!this.$tokenizer) { this.$highlightRules = this.$highlightRules || new this.HighlightRules(this.$highlightRuleConfig); this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); } return this.$tokenizer; }; this.lineCommentStart = ""; this.blockComment = ""; this.toggleCommentLines = function(state, session, startRow, endRow) { var doc = session.doc; var ignoreBlankLines = true; var shouldRemove = true; var minIndent = Infinity; var tabSize = session.getTabSize(); var insertAtTabStop = false; if (!this.lineCommentStart) { if (!this.blockComment) return false; var lineCommentStart = this.blockComment.start; var lineCommentEnd = this.blockComment.end; var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); var comment = function(line, i) { if (testRemove(line, i)) return; if (!ignoreBlankLines || /\S/.test(line)) { doc.insertInLine({row: i, column: line.length}, lineCommentEnd); doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var uncomment = function(line, i) { var m; if (m = line.match(regexpEnd)) doc.removeInLine(i, line.length - m[0].length, line.length); if (m = line.match(regexpStart)) doc.removeInLine(i, m[1].length, m[0].length); }; var testRemove = function(line, row) { if (regexpStart.test(line)) return true; var tokens = session.getTokens(row); for (var i = 0; i < tokens.length; i++) { if (tokens[i].type === "comment") return true; } }; } else { if (Array.isArray(this.lineCommentStart)) { var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); var lineCommentStart = this.lineCommentStart[0]; } else { var regexpStart = lang.escapeRegExp(this.lineCommentStart); var lineCommentStart = this.lineCommentStart; } regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); insertAtTabStop = session.getUseSoftTabs(); var uncomment = function(line, i) { var m = line.match(regexpStart); if (!m) return; var start = m[1].length, end = m[0].length; if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") end--; doc.removeInLine(i, start, end); }; var commentWithSpace = lineCommentStart + " "; var comment = function(line, i) { if (!ignoreBlankLines || /\S/.test(line)) { if (shouldInsertSpace(line, minIndent, minIndent)) doc.insertInLine({row: i, column: minIndent}, commentWithSpace); else doc.insertInLine({row: i, column: minIndent}, lineCommentStart); } }; var testRemove = function(line, i) { return regexpStart.test(line); }; var shouldInsertSpace = function(line, before, after) { var spaces = 0; while (before-- && line.charAt(before) == " ") spaces++; if (spaces % tabSize != 0) return false; var spaces = 0; while (line.charAt(after++) == " ") spaces++; if (tabSize > 2) return spaces % tabSize != tabSize - 1; else return spaces % tabSize == 0; return true; }; } function iter(fun) { for (var i = startRow; i <= endRow; i++) fun(doc.getLine(i), i); } var minEmptyLength = Infinity; iter(function(line, i) { var indent = line.search(/\S/); if (indent !== -1) { if (indent < minIndent) minIndent = indent; if (shouldRemove && !testRemove(line, i)) shouldRemove = false; } else if (minEmptyLength > line.length) { minEmptyLength = line.length; } }); if (minIndent == Infinity) { minIndent = minEmptyLength; ignoreBlankLines = false; shouldRemove = false; } if (insertAtTabStop && minIndent % tabSize != 0) minIndent = Math.floor(minIndent / tabSize) * tabSize; iter(shouldRemove ? uncomment : comment); }; this.toggleBlockComment = function(state, session, range, cursor) { var comment = this.blockComment; if (!comment) return; if (!comment.start && comment[0]) comment = comment[0]; var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); var sel = session.selection; var initialRange = session.selection.toOrientedRange(); var startRow, colDiff; if (token && /comment/.test(token.type)) { var startRange, endRange; while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.start); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; startRange = new Range(row, column, row, column + comment.start.length); break; } token = iterator.stepBackward(); } var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); while (token && /comment/.test(token.type)) { var i = token.value.indexOf(comment.end); if (i != -1) { var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn() + i; endRange = new Range(row, column, row, column + comment.end.length); break; } token = iterator.stepForward(); } if (endRange) session.remove(endRange); if (startRange) { session.remove(startRange); startRow = startRange.start.row; colDiff = -comment.start.length; } } else { colDiff = comment.start.length; startRow = range.start.row; session.insert(range.end, comment.end); session.insert(range.start, comment.start); } if (initialRange.start.row == startRow) initialRange.start.column += colDiff; if (initialRange.end.row == startRow) initialRange.end.column += colDiff; session.selection.fromOrientedRange(initialRange); }; this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.autoOutdent = function(state, doc, row) { }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; this.createWorker = function(session) { return null; }; this.createModeDelegates = function (mapping) { this.$embeds = []; this.$modes = {}; for (var i in mapping) { if (mapping[i]) { this.$embeds.push(i); this.$modes[i] = new mapping[i](); } } var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; for (var i = 0; i < delegations.length; i++) { (function(scope) { var functionName = delegations[i]; var defaultHandler = scope[functionName]; scope[delegations[i]] = function() { return this.$delegator(functionName, arguments, defaultHandler); }; }(this)); } }; this.$delegator = function(method, args, defaultHandler) { var state = args[0]; if (typeof state != "string") state = state[0]; for (var i = 0; i < this.$embeds.length; i++) { if (!this.$modes[this.$embeds[i]]) continue; var split = state.split(this.$embeds[i]); if (!split[0] && split[1]) { args[0] = split[1]; var mode = this.$modes[this.$embeds[i]]; return mode[method].apply(mode, args); } } var ret = defaultHandler.apply(this, args); return defaultHandler ? ret : undefined; }; this.transformAction = function(state, action, editor, session, param) { if (this.$behaviour) { var behaviours = this.$behaviour.getBehaviours(); for (var key in behaviours) { if (behaviours[key][action]) { var ret = behaviours[key][action].apply(this, arguments); if (ret) { return ret; } } } } }; this.getKeywords = function(append) { if (!this.completionKeywords) { var rules = this.$tokenizer.rules; var completionKeywords = []; for (var rule in rules) { var ruleItr = rules[rule]; for (var r = 0, l = ruleItr.length; r < l; r++) { if (typeof ruleItr[r].token === "string") { if (/keyword|support|storage/.test(ruleItr[r].token)) completionKeywords.push(ruleItr[r].regex); } else if (typeof ruleItr[r].token === "object") { for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { if (/keyword|support|storage/.test(ruleItr[r].token[a])) { var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; completionKeywords.push(rule.substr(1, rule.length - 2)); } } } } } this.completionKeywords = completionKeywords; } if (!append) return this.$keywordList; return completionKeywords.concat(this.$keywordList || []); }; this.$createKeywordList = function() { if (!this.$highlightRules) this.getTokenizer(); return this.$keywordList = this.$highlightRules.$keywordList || []; }; this.getCompletions = function(state, session, pos, prefix) { var keywords = this.$keywordList || this.$createKeywordList(); return keywords.map(function(word) { return { name: word, value: word, score: 0, meta: "keyword" }; }); }; this.$id = "ace/mode/text"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { "use strict"; function throwDeltaError(delta, errorText){ console.log("Invalid Delta:", delta); throw "Invalid Delta: " + errorText; } function positionInDocument(docLines, position) { return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length; } function validateDelta(docLines, delta) { if (delta.action != "insert" && delta.action != "remove") throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); if (!(delta.lines instanceof Array)) throwDeltaError(delta, "delta.lines must be an Array"); if (!delta.start || !delta.end) throwDeltaError(delta, "delta.start/end must be an present"); var start = delta.start; if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, "delta.start must be contained in document"); var end = delta.end; if (delta.action == "remove" && !positionInDocument(docLines, end)) throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); var numRangeRows = end.row - start.row; var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, "delta.range must match delta lines"); } exports.applyDelta = function(docLines, delta, doNotValidate) { var row = delta.start.row; var startColumn = delta.start.column; var line = docLines[row] || ""; switch (delta.action) { case "insert": var lines = delta.lines; if (lines.length === 1) { docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); } else { var args = [row, 1].concat(delta.lines); docLines.splice.apply(docLines, args); docLines[row] = line.substring(0, startColumn) + docLines[row]; docLines[row + delta.lines.length - 1] += line.substring(startColumn); } break; case "remove": var endColumn = delta.end.column; var endRow = delta.end.row; if (row === endRow) { docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); } else { docLines.splice( row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn) ); } break; } } }); ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Anchor = exports.Anchor = function(doc, row, column) { this.$onChange = this.onChange.bind(this); this.attach(doc); if (typeof column == "undefined") this.setPosition(row.row, row.column); else this.setPosition(row, column); }; (function() { oop.implement(this, EventEmitter); this.getPosition = function() { return this.$clipPositionToDocument(this.row, this.column); }; this.getDocument = function() { return this.document; }; this.$insertRight = false; this.onChange = function(delta) { if (delta.start.row == delta.end.row && delta.start.row != this.row) return; if (delta.start.row > this.row) return; var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); this.setPosition(point.row, point.column, true); }; function $pointsInOrder(point1, point2, equalPointsInOrder) { var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } function $getTransformedPoint(delta, point, moveIfEqual) { var deltaIsInsert = delta.action == "insert"; var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); var deltaStart = delta.start; var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. if ($pointsInOrder(point, deltaStart, moveIfEqual)) { return { row: point.row, column: point.column }; } if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { return { row: point.row + deltaRowShift, column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) }; } return { row: deltaStart.row, column: deltaStart.column }; } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(textOrLines) { this.$lines = [""]; if (textOrLines.length === 0) { this.$lines = [""]; } else if (Array.isArray(textOrLines)) { this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { this.insert({row: 0, column:0}, textOrLines); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength() - 1; this.remove(new Range(0, 0, len, this.getLine(len).length)); this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; } this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; this.getLinesForRange = function(range) { var lines; if (range.start.row === range.end.row) { lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; } else { lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); } return lines; }; this.insertLines = function(row, lines) { console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); return this.insertFullLines(row, lines); }; this.removeLines = function(firstRow, lastRow) { console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); return this.removeFullLines(firstRow, lastRow); }; this.insertNewLine = function(position) { console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."); return this.insertMergedLines(position, ["", ""]); }; this.insert = function(position, text) { if (this.getLength() <= 1) this.$detectNewLine(text); return this.insertMergedLines(position, this.$split(text)); }; this.insertInLine = function(position, text) { var start = this.clippedPos(position.row, position.column); var end = this.pos(position.row, position.column + text.length); this.applyDelta({ start: start, end: end, action: "insert", lines: [text] }, true); return this.clonePos(end); }; this.clippedPos = function(row, column) { var length = this.getLength(); if (row === undefined) { row = length; } else if (row < 0) { row = 0; } else if (row >= length) { row = length - 1; column = undefined; } var line = this.getLine(row); if (column == undefined) column = line.length; column = Math.min(Math.max(column, 0), line.length); return {row: row, column: column}; }; this.clonePos = function(pos) { return {row: pos.row, column: pos.column}; }; this.pos = function(row, column) { return {row: row, column: column}; }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length - 1).length; } else { position.row = Math.max(0, position.row); position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; this.insertFullLines = function(row, lines) { row = Math.min(Math.max(row, 0), this.getLength()); var column = 0; if (row < this.getLength()) { lines = lines.concat([""]); column = 0; } else { lines = [""].concat(lines); row--; column = this.$lines[row].length; } this.insertMergedLines({row: row, column: column}, lines); }; this.insertMergedLines = function(position, lines) { var start = this.clippedPos(position.row, position.column); var end = { row: start.row + lines.length - 1, column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length }; this.applyDelta({ start: start, end: end, action: "insert", lines: lines }); return this.clonePos(end); }; this.remove = function(range) { var start = this.clippedPos(range.start.row, range.start.column); var end = this.clippedPos(range.end.row, range.end.column); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }); return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { var start = this.clippedPos(row, startColumn); var end = this.clippedPos(row, endColumn); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }, true); return this.clonePos(start); }; this.removeFullLines = function(firstRow, lastRow) { firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; var deleteLastNewLine = lastRow < this.getLength() - 1; var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); var range = new Range(startRow, startCol, endRow, endCol); var deletedLines = this.$lines.slice(firstRow, lastRow + 1); this.applyDelta({ start: range.start, end: range.end, action: "remove", lines: this.getLinesForRange(range) }); return deletedLines; }; this.removeNewLine = function(row) { if (row < this.getLength() - 1 && row >= 0) { this.applyDelta({ start: this.pos(row, this.getLine(row).length), end: this.pos(row + 1, 0), action: "remove", lines: ["", ""] }); } }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); var end; if (text) { end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i<deltas.length; i++) { this.applyDelta(deltas[i]); } }; this.revertDeltas = function(deltas) { for (var i=deltas.length-1; i>=0; i--) { this.revertDelta(deltas[i]); } }; this.applyDelta = function(delta, doNotValidate) { var isInsert = delta.action == "insert"; if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) { return; } if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000); applyDelta(this.$lines, delta, doNotValidate); this._signal("change", delta); }; this.$splitAndapplyLargeDelta = function(delta, MAX) { var lines = delta.lines; var l = lines.length; var row = delta.start.row; var column = delta.start.column; var from = 0, to = 0; do { from = to; to += MAX - 1; var chunk = lines.slice(from, to); if (to > l) { delta.lines = chunk; delta.start.row = row + from; delta.start.column = column; break; } chunk.push(""); this.applyDelta({ start: this.pos(row + from, column), end: this.pos(row + to, column = 0), action: delta.action, lines: chunk }, true); } while(true); }; this.revertDelta = function(delta) { this.applyDelta({ start: this.clonePos(delta.start), end: this.clonePos(delta.end), action: (delta.action == "insert" ? "remove" : "insert"), lines: delta.lines.slice() }); }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var BackgroundTokenizer = function(tokenizer, editor) { this.running = false; this.lines = []; this.states = []; this.currentLine = 0; this.tokenizer = tokenizer; var self = this; this.$worker = function() { if (!self.running) { return; } var workerStart = new Date(); var currentLine = self.currentLine; var endLine = -1; var doc = self.doc; var startLine = currentLine; while (self.lines[currentLine]) currentLine++; var len = doc.getLength(); var processedLines = 0; self.running = false; while (currentLine < len) { self.$tokenizeRow(currentLine); endLine = currentLine; do { currentLine++; } while (self.lines[currentLine]); processedLines ++; if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { self.running = setTimeout(self.$worker, 20); break; } } self.currentLine = currentLine; if (startLine <= endLine) self.fireUpdateEvent(startLine, endLine); }; }; (function(){ oop.implement(this, EventEmitter); this.setTokenizer = function(tokenizer) { this.tokenizer = tokenizer; this.lines = []; this.states = []; this.start(0); }; this.setDocument = function(doc) { this.doc = doc; this.lines = []; this.states = []; this.stop(); }; this.fireUpdateEvent = function(firstRow, lastRow) { var data = { first: firstRow, last: lastRow }; this._signal("update", {data: data}); }; this.start = function(startRow) { this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); this.lines.splice(this.currentLine, this.lines.length); this.states.splice(this.currentLine, this.states.length); this.stop(); this.running = setTimeout(this.$worker, 700); }; this.scheduleStart = function() { if (!this.running) this.running = setTimeout(this.$worker, 700); } this.$updateOnChange = function(delta) { var startRow = delta.start.row; var len = delta.end.row - startRow; if (len === 0) { this.lines[startRow] = null; } else if (delta.action == "remove") { this.lines.splice(startRow, len + 1, null); this.states.splice(startRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(startRow, 1); this.lines.splice.apply(this.lines, args); this.states.splice.apply(this.states, args); } this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); this.stop(); }; this.stop = function() { if (this.running) clearTimeout(this.running); this.running = false; }; this.getTokens = function(row) { return this.lines[row] || this.$tokenizeRow(row); }; this.getState = function(row) { if (this.currentLine == row) this.$tokenizeRow(row); return this.states[row] || "start"; }; this.$tokenizeRow = function(row) { var line = this.doc.getLine(row); var state = this.states[row - 1]; var data = this.tokenizer.getLineTokens(line, state, row); if (this.states[row] + "" !== data.state + "") { this.states[row] = data.state; this.lines[row + 1] = null; if (this.currentLine > row + 1) this.currentLine = row + 1; } else if (this.currentLine == row) { this.currentLine = row + 1; } return this.lines[row] = data.tokens; }; }).call(BackgroundTokenizer.prototype); exports.BackgroundTokenizer = BackgroundTokenizer; }); ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { "use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var SearchHighlight = function(regExp, clazz, type) { this.setRegexp(regExp); this.clazz = clazz; this.type = type || "text"; }; (function() { this.MAX_RANGES = 500; this.setRegexp = function(regExp) { if (this.regExp+"" == regExp+"") return; this.regExp = regExp; this.cache = []; }; this.update = function(html, markerLayer, session, config) { if (!this.regExp) return; var start = config.firstRow, end = config.lastRow; for (var i = start; i <= end; i++) { var ranges = this.cache[i]; if (ranges == null) { ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); if (ranges.length > this.MAX_RANGES) ranges = ranges.slice(0, this.MAX_RANGES); ranges = ranges.map(function(match) { return new Range(i, match.offset, i, match.offset + match.length); }); this.cache[i] = ranges.length ? ranges : ""; } for (var j = ranges.length; j --; ) { markerLayer.drawSingleLineMarker( html, ranges[j].toScreenRange(session), this.clazz, config); } } }; }).call(SearchHighlight.prototype); exports.SearchHighlight = SearchHighlight; }); ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; function FoldLine(foldData, folds) { this.foldData = foldData; if (Array.isArray(folds)) { this.folds = folds; } else { folds = this.folds = [ folds ]; } var last = folds[folds.length - 1]; this.range = new Range(folds[0].start.row, folds[0].start.column, last.end.row, last.end.column); this.start = this.range.start; this.end = this.range.end; this.folds.forEach(function(fold) { fold.setFoldLine(this); }, this); } (function() { this.shiftRow = function(shift) { this.start.row += shift; this.end.row += shift; this.folds.forEach(function(fold) { fold.start.row += shift; fold.end.row += shift; }); }; this.addFold = function(fold) { if (fold.sameRow) { if (fold.start.row < this.startRow || fold.endRow > this.endRow) { throw new Error("Can't add a fold to this FoldLine as it has no connection"); } this.folds.push(fold); this.folds.sort(function(a, b) { return -a.range.compareEnd(b.start.row, b.start.column); }); if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { this.start.row = fold.start.row; this.start.column = fold.start.column; } } else if (fold.start.row == this.end.row) { this.folds.push(fold); this.end.row = fold.end.row; this.end.column = fold.end.column; } else if (fold.end.row == this.start.row) { this.folds.unshift(fold); this.start.row = fold.start.row; this.start.column = fold.start.column; } else { throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); } fold.foldLine = this; }; this.containsRow = function(row) { return row >= this.start.row && row <= this.end.row; }; this.walk = function(callback, endRow, endColumn) { var lastEnd = 0, folds = this.folds, fold, cmp, stop, isNewRow = true; if (endRow == null) { endRow = this.end.row; endColumn = this.end.column; } for (var i = 0; i < folds.length; i++) { fold = folds[i]; cmp = fold.range.compareStart(endRow, endColumn); if (cmp == -1) { callback(null, endRow, endColumn, lastEnd, isNewRow); return; } stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); if (stop || cmp === 0) { return; } isNewRow = !fold.sameRow; lastEnd = fold.end.column; } callback(null, endRow, endColumn, lastEnd, isNewRow); }; this.getNextFoldTo = function(row, column) { var fold, cmp; for (var i = 0; i < this.folds.length; i++) { fold = this.folds[i]; cmp = fold.range.compareEnd(row, column); if (cmp == -1) { return { fold: fold, kind: "after" }; } else if (cmp === 0) { return { fold: fold, kind: "inside" }; } } return null; }; this.addRemoveChars = function(row, column, len) { var ret = this.getNextFoldTo(row, column), fold, folds; if (ret) { fold = ret.fold; if (ret.kind == "inside" && fold.start.column != column && fold.start.row != row) { window.console && window.console.log(row, column, fold); } else if (fold.start.row == row) { folds = this.folds; var i = folds.indexOf(fold); if (i === 0) { this.start.column += len; } for (i; i < folds.length; i++) { fold = folds[i]; fold.start.column += len; if (!fold.sameRow) { return; } fold.end.column += len; } this.end.column += len; } } }; this.split = function(row, column) { var pos = this.getNextFoldTo(row, column); if (!pos || pos.kind == "inside") return null; var fold = pos.fold; var folds = this.folds; var foldData = this.foldData; var i = folds.indexOf(fold); var foldBefore = folds[i - 1]; this.end.row = foldBefore.end.row; this.end.column = foldBefore.end.column; folds = folds.splice(i, folds.length - i); var newFoldLine = new FoldLine(foldData, folds); foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); return newFoldLine; }; this.merge = function(foldLineNext) { var folds = foldLineNext.folds; for (var i = 0; i < folds.length; i++) { this.addFold(folds[i]); } var foldData = this.foldData; foldData.splice(foldData.indexOf(foldLineNext), 1); }; this.toString = function() { var ret = [this.range.toString() + ": [" ]; this.folds.forEach(function(fold) { ret.push(" " + fold.toString()); }); ret.push("]"); return ret.join("\n"); }; this.idxToPosition = function(idx) { var lastFoldEndColumn = 0; for (var i = 0; i < this.folds.length; i++) { var fold = this.folds[i]; idx -= fold.start.column - lastFoldEndColumn; if (idx < 0) { return { row: fold.start.row, column: fold.start.column + idx }; } idx -= fold.placeholder.length; if (idx < 0) { return fold.start; } lastFoldEndColumn = fold.end.column; } return { row: this.end.row, column: this.end.column + idx }; }; }).call(FoldLine.prototype); exports.FoldLine = FoldLine; }); ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("./range").Range; var comparePoints = Range.comparePoints; var RangeList = function() { this.ranges = []; }; (function() { this.comparePoints = comparePoints; this.pointIndex = function(pos, excludeEdges, startIndex) { var list = this.ranges; for (var i = startIndex || 0; i < list.length; i++) { var range = list[i]; var cmpEnd = comparePoints(pos, range.end); if (cmpEnd > 0) continue; var cmpStart = comparePoints(pos, range.start); if (cmpEnd === 0) return excludeEdges && cmpStart !== 0 ? -i-2 : i; if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) return i; return -i-1; } return -i - 1; }; this.add = function(range) { var excludeEdges = !range.isEmpty(); var startIndex = this.pointIndex(range.start, excludeEdges); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; else endIndex++; return this.ranges.splice(startIndex, endIndex - startIndex, range); }; this.addList = function(list) { var removed = []; for (var i = list.length; i--; ) { removed.push.apply(removed, this.add(list[i])); } return removed; }; this.substractPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges.splice(i, 1); }; this.merge = function() { var removed = []; var list = this.ranges; list = list.sort(function(a, b) { return comparePoints(a.start, b.start); }); var next = list[0], range; for (var i = 1; i < list.length; i++) { range = next; next = list[i]; var cmp = comparePoints(range.end, next.start); if (cmp < 0) continue; if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) continue; if (comparePoints(range.end, next.end) < 0) { range.end.row = next.end.row; range.end.column = next.end.column; } list.splice(i, 1); removed.push(next); next = range; i--; } this.ranges = list; return removed; }; this.contains = function(row, column) { return this.pointIndex({row: row, column: column}) >= 0; }; this.containsPoint = function(pos) { return this.pointIndex(pos) >= 0; }; this.rangeAtPoint = function(pos) { var i = this.pointIndex(pos); if (i >= 0) return this.ranges[i]; }; this.clipRows = function(startRow, endRow) { var list = this.ranges; if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) return []; var startIndex = this.pointIndex({row: startRow, column: 0}); if (startIndex < 0) startIndex = -startIndex - 1; var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); if (endIndex < 0) endIndex = -endIndex - 1; var clipped = []; for (var i = startIndex; i < endIndex; i++) { clipped.push(list[i]); } return clipped; }; this.removeAll = function() { return this.ranges.splice(0, this.ranges.length); }; this.attach = function(session) { if (this.session) this.detach(); this.session = session; this.onChange = this.$onChange.bind(this); this.session.on('change', this.onChange); }; this.detach = function() { if (!this.session) return; this.session.removeListener('change', this.onChange); this.session = null; }; this.$onChange = function(delta) { if (delta.action == "insert"){ var start = delta.start; var end = delta.end; } else { var end = delta.start; var start = delta.end; } var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = -start.column + end.column; var ranges = this.ranges; for (var i = 0, n = ranges.length; i < n; i++) { var r = ranges[i]; if (r.end.row < startRow) continue; if (r.start.row > startRow) break; if (r.start.row == startRow && r.start.column >= start.column ) { if (r.start.column == start.column && this.$insertRight) { } else { r.start.column += colDiff; r.start.row += lineDif; } } if (r.end.row == startRow && r.end.column >= start.column) { if (r.end.column == start.column && this.$insertRight) { continue; } if (r.end.column == start.column && colDiff > 0 && i < n - 1) { if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column) r.end.column -= colDiff; } r.end.column += colDiff; r.end.row += lineDif; } } if (lineDif != 0 && i < n) { for (; i < n; i++) { var r = ranges[i]; r.start.row += lineDif; r.end.row += lineDif; } } }; }).call(RangeList.prototype); exports.RangeList = RangeList; }); ace.define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var RangeList = require("../range_list").RangeList; var oop = require("../lib/oop") var Fold = exports.Fold = function(range, placeholder) { this.foldLine = null; this.placeholder = placeholder; this.range = range; this.start = range.start; this.end = range.end; this.sameRow = range.start.row == range.end.row; this.subFolds = this.ranges = []; }; oop.inherits(Fold, RangeList); (function() { this.toString = function() { return '"' + this.placeholder + '" ' + this.range.toString(); }; this.setFoldLine = function(foldLine) { this.foldLine = foldLine; this.subFolds.forEach(function(fold) { fold.setFoldLine(foldLine); }); }; this.clone = function() { var range = this.range.clone(); var fold = new Fold(range, this.placeholder); this.subFolds.forEach(function(subFold) { fold.subFolds.push(subFold.clone()); }); fold.collapseChildren = this.collapseChildren; return fold; }; this.addSubFold = function(fold) { if (this.range.isEqual(fold)) return; if (!this.range.containsRange(fold)) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); consumeRange(fold, this.start); var row = fold.start.row, column = fold.start.column; for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { cmp = this.subFolds[i].range.compare(row, column); if (cmp != 1) break; } var afterStart = this.subFolds[i]; if (cmp == 0) return afterStart.addSubFold(fold); var row = fold.range.end.row, column = fold.range.end.column; for (var j = i, cmp = -1; j < this.subFolds.length; j++) { cmp = this.subFolds[j].range.compare(row, column); if (cmp != 1) break; } var afterEnd = this.subFolds[j]; if (cmp == 0) throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); var consumedFolds = this.subFolds.splice(i, j - i, fold); fold.setFoldLine(this.foldLine); return fold; }; this.restoreRange = function(range) { return restoreRange(range, this.start); }; }).call(Fold.prototype); function consumePoint(point, anchor) { point.row -= anchor.row; if (point.row == 0) point.column -= anchor.column; } function consumeRange(range, anchor) { consumePoint(range.start, anchor); consumePoint(range.end, anchor); } function restorePoint(point, anchor) { if (point.row == 0) point.column += anchor.column; point.row += anchor.row; } function restoreRange(range, anchor) { restorePoint(range.start, anchor); restorePoint(range.end, anchor); } }); ace.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) { "use strict"; var Range = require("../range").Range; var FoldLine = require("./fold_line").FoldLine; var Fold = require("./fold").Fold; var TokenIterator = require("../token_iterator").TokenIterator; function Folding() { this.getFoldAt = function(row, column, side) { var foldLine = this.getFoldLine(row); if (!foldLine) return null; var folds = foldLine.folds; for (var i = 0; i < folds.length; i++) { var fold = folds[i]; if (fold.range.contains(row, column)) { if (side == 1 && fold.range.isEnd(row, column)) { continue; } else if (side == -1 && fold.range.isStart(row, column)) { continue; } return fold; } } }; this.getFoldsInRange = function(range) { var start = range.start; var end = range.end; var foldLines = this.$foldData; var foundFolds = []; start.column += 1; end.column -= 1; for (var i = 0; i < foldLines.length; i++) { var cmp = foldLines[i].range.compareRange(range); if (cmp == 2) { continue; } else if (cmp == -2) { break; } var folds = foldLines[i].folds; for (var j = 0; j < folds.length; j++) { var fold = folds[j]; cmp = fold.range.compareRange(range); if (cmp == -2) { break; } else if (cmp == 2) { continue; } else if (cmp == 42) { break; } foundFolds.push(fold); } } start.column -= 1; end.column += 1; return foundFolds; }; this.getFoldsInRangeList = function(ranges) { if (Array.isArray(ranges)) { var folds = []; ranges.forEach(function(range) { folds = folds.concat(this.getFoldsInRange(range)); }, this); } else { var folds = this.getFoldsInRange(ranges); } return folds; }; this.getAllFolds = function() { var folds = []; var foldLines = this.$foldData; for (var i = 0; i < foldLines.length; i++) for (var j = 0; j < foldLines[i].folds.length; j++) folds.push(foldLines[i].folds[j]); return folds; }; this.getFoldStringAt = function(row, column, trim, foldLine) { foldLine = foldLine || this.getFoldLine(row); if (!foldLine) return null; var lastFold = { end: { column: 0 } }; var str, fold; for (var i = 0; i < foldLine.folds.length; i++) { fold = foldLine.folds[i]; var cmp = fold.range.compareEnd(row, column); if (cmp == -1) { str = this .getLine(fold.start.row) .substring(lastFold.end.column, fold.start.column); break; } else if (cmp === 0) { return null; } lastFold = fold; } if (!str) str = this.getLine(fold.start.row).substring(lastFold.end.column); 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; }; this.getFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { return foldLine; } else if (foldLine.end.row > docRow) { return null; } } return null; }; this.getNextFoldLine = function(docRow, startFoldLine) { var foldData = this.$foldData; var i = 0; if (startFoldLine) i = foldData.indexOf(startFoldLine); if (i == -1) i = 0; for (i; i < foldData.length; i++) { var foldLine = foldData[i]; if (foldLine.end.row >= docRow) { return foldLine; } } return null; }; this.getFoldedRowCount = function(first, last) { var foldData = this.$foldData, rowCount = last-first+1; for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i], end = foldLine.end.row, start = foldLine.start.row; if (end >= last) { if (start < last) { if (start >= first) rowCount -= last-start; else rowCount = 0; // in one fold } break; } else if (end >= first){ if (start >= first) // fold inside range rowCount -= end-start; else rowCount -= end-first+1; } } return rowCount; }; this.$addFoldLine = function(foldLine) { this.$foldData.push(foldLine); this.$foldData.sort(function(a, b) { return a.start.row - b.start.row; }); return foldLine; }; this.addFold = function(placeholder, range) { var foldData = this.$foldData; var added = false; var fold; if (placeholder instanceof Fold) fold = placeholder; else { fold = new Fold(range, placeholder); fold.collapseChildren = range.collapseChildren; } this.$clipRangeToDocument(fold.range); var startRow = fold.start.row; var startColumn = fold.start.column; var endRow = fold.end.row; var endColumn = fold.end.column; if (!(startRow < endRow || startRow == endRow && startColumn <= endColumn - 2)) throw new Error("The range has to be at least 2 characters width"); var startFold = this.getFoldAt(startRow, startColumn, 1); var endFold = this.getFoldAt(endRow, endColumn, -1); if (startFold && endFold == startFold) return startFold.addSubFold(fold); if (startFold && !startFold.range.isStart(startRow, startColumn)) this.removeFold(startFold); if (endFold && !endFold.range.isEnd(endRow, endColumn)) this.removeFold(endFold); var folds = this.getFoldsInRange(fold.range); if (folds.length > 0) { this.removeFolds(folds); folds.forEach(function(subFold) { fold.addSubFold(subFold); }); } for (var i = 0; i < foldData.length; i++) { var foldLine = foldData[i]; if (endRow == foldLine.start.row) { foldLine.addFold(fold); added = true; break; } else if (startRow == foldLine.end.row) { foldLine.addFold(fold); added = true; if (!fold.sameRow) { var foldLineNext = foldData[i + 1]; if (foldLineNext && foldLineNext.start.row == endRow) { foldLine.merge(foldLineNext); break; } } break; } else if (endRow <= foldLine.start.row) { break; } } if (!added) foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); if (this.$useWrapMode) this.$updateWrapData(foldLine.start.row, foldLine.start.row); else this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); this.$modified = true; this._signal("changeFold", { data: fold, action: "add" }); return fold; }; this.addFolds = function(folds) { folds.forEach(function(fold) { this.addFold(fold); }, this); }; this.removeFold = function(fold) { var foldLine = fold.foldLine; var startRow = foldLine.start.row; var endRow = foldLine.end.row; var foldLines = this.$foldData; var folds = foldLine.folds; if (folds.length == 1) { foldLines.splice(foldLines.indexOf(foldLine), 1); } else if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { folds.pop(); foldLine.end.row = folds[folds.length - 1].end.row; foldLine.end.column = folds[folds.length - 1].end.column; } else if (foldLine.range.isStart(fold.start.row, fold.start.column)) { folds.shift(); foldLine.start.row = folds[0].start.row; foldLine.start.column = folds[0].start.column; } else if (fold.sameRow) { folds.splice(folds.indexOf(fold), 1); } else { var newFoldLine = foldLine.split(fold.start.row, fold.start.column); folds = newFoldLine.folds; folds.shift(); newFoldLine.start.row = folds[0].start.row; newFoldLine.start.column = folds[0].start.column; } if (!this.$updating) { if (this.$useWrapMode) this.$updateWrapData(startRow, endRow); else this.$updateRowLengthCache(startRow, endRow); } this.$modified = true; this._signal("changeFold", { data: fold, action: "remove" }); }; this.removeFolds = function(folds) { var cloneFolds = []; for (var i = 0; i < folds.length; i++) { cloneFolds.push(folds[i]); } cloneFolds.forEach(function(fold) { this.removeFold(fold); }, this); this.$modified = true; }; this.expandFold = function(fold) { this.removeFold(fold); fold.subFolds.forEach(function(subFold) { fold.restoreRange(subFold); this.addFold(subFold); }, this); if (fold.collapseChildren > 0) { this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1); } fold.subFolds = []; }; this.expandFolds = function(folds) { folds.forEach(function(fold) { this.expandFold(fold); }, this); }; this.unfold = function(location, expandInner) { var range, folds; if (location == null) { range = new Range(0, 0, this.getLength(), 0); expandInner = true; } else if (typeof location == "number") range = new Range(location, 0, location, this.getLine(location).length); else if ("row" in location) range = Range.fromPoints(location, location); else range = location; folds = this.getFoldsInRangeList(range); if (expandInner) { this.removeFolds(folds); } else { var subFolds = folds; while (subFolds.length) { this.expandFolds(subFolds); subFolds = this.getFoldsInRangeList(range); } } if (folds.length) return folds; }; this.isRowFolded = function(docRow, startFoldRow) { return !!this.getFoldLine(docRow, startFoldRow); }; this.getRowFoldEnd = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.end.row : docRow; }; this.getRowFoldStart = function(docRow, startFoldRow) { var foldLine = this.getFoldLine(docRow, startFoldRow); return foldLine ? foldLine.start.row : docRow; }; this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { if (startRow == null) startRow = foldLine.start.row; if (startColumn == null) startColumn = 0; if (endRow == null) endRow = foldLine.end.row; if (endColumn == null) endColumn = this.getLine(endRow).length; var doc = this.doc; var textLine = ""; foldLine.walk(function(placeholder, row, column, lastColumn) { if (row < startRow) return; if (row == startRow) { if (column < startColumn) return; lastColumn = Math.max(startColumn, lastColumn); } if (placeholder != null) { textLine += placeholder; } else { textLine += doc.getLine(row).substring(lastColumn, column); } }, endRow, endColumn); return textLine; }; this.getDisplayLine = function(row, endColumn, startRow, startColumn) { var foldLine = this.getFoldLine(row); if (!foldLine) { var line; line = this.doc.getLine(row); return line.substring(startColumn || 0, endColumn || line.length); } else { return this.getFoldDisplayLine( foldLine, row, endColumn, startRow, startColumn); } }; this.$cloneFoldData = function() { var fd = []; fd = this.$foldData.map(function(foldLine) { var folds = foldLine.folds.map(function(fold) { return fold.clone(); }); return new FoldLine(fd, folds); }); return fd; }; this.toggleFold = function(tryToUnfold) { var selection = this.selection; var range = selection.getRange(); var fold; var bracketPos; if (range.isEmpty()) { var cursor = range.start; fold = this.getFoldAt(cursor.row, cursor.column); if (fold) { this.expandFold(fold); return; } else if (bracketPos = this.findMatchingBracket(cursor)) { if (range.comparePoint(bracketPos) == 1) { range.end = bracketPos; } else { range.start = bracketPos; range.start.column++; range.end.column--; } } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) { if (range.comparePoint(bracketPos) == 1) range.end = bracketPos; else range.start = bracketPos; range.start.column++; } else { range = this.getCommentFoldRange(cursor.row, cursor.column) || range; } } else { var folds = this.getFoldsInRange(range); if (tryToUnfold && folds.length) { this.expandFolds(folds); return; } else if (folds.length == 1 ) { fold = folds[0]; } } if (!fold) fold = this.getFoldAt(range.start.row, range.start.column); if (fold && fold.range.toString() == range.toString()) { this.expandFold(fold); return; } var placeholder = "..."; if (!range.isMultiLine()) { placeholder = this.getTextRange(range); if (placeholder.length < 4) return; placeholder = placeholder.trim().substring(0, 2) + ".."; } this.addFold(placeholder, range); }; this.getCommentFoldRange = function(row, column, dir) { var iterator = new TokenIterator(this, row, column); var token = iterator.getCurrentToken(); if (token && /^comment|string/.test(token.type)) { var range = new Range(); var re = new RegExp(token.type.replace(/\..*/, "\\.")); if (dir != 1) { do { token = iterator.stepBackward(); } while (token && re.test(token.type)); iterator.stepForward(); } range.start.row = iterator.getCurrentTokenRow(); range.start.column = iterator.getCurrentTokenColumn() + 2; iterator = new TokenIterator(this, row, column); if (dir != -1) { do { token = iterator.stepForward(); } while (token && re.test(token.type)); token = iterator.stepBackward(); } else token = iterator.getCurrentToken(); range.end.row = iterator.getCurrentTokenRow(); range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2; return range; } }; this.foldAll = function(startRow, endRow, depth) { if (depth == undefined) depth = 100000; // JSON.stringify doesn't hanle Infinity var foldWidgets = this.foldWidgets; if (!foldWidgets) return; // mode doesn't support folding endRow = endRow || this.getLength(); startRow = startRow || 0; for (var row = startRow; row < endRow; row++) { if (foldWidgets[row] == null) foldWidgets[row] = this.getFoldWidget(row); if (foldWidgets[row] != "start") continue; var range = this.getFoldWidgetRange(row); if (range && range.isMultiLine() && range.end.row <= endRow && range.start.row >= startRow ) { row = range.end.row; try { var fold = this.addFold("...", range); if (fold) fold.collapseChildren = depth; } catch(e) {} } } }; this.$foldStyles = { "manual": 1, "markbegin": 1, "markbeginend": 1 }; this.$foldStyle = "markbegin"; this.setFoldStyle = function(style) { if (!this.$foldStyles[style]) throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); if (this.$foldStyle == style) return; this.$foldStyle = style; if (style == "manual") this.unfold(); var mode = this.$foldMode; this.$setFolding(null); this.$setFolding(mode); }; this.$setFolding = function(foldMode) { if (this.$foldMode == foldMode) return; this.$foldMode = foldMode; this.off('change', this.$updateFoldWidgets); this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); this._signal("changeAnnotation"); if (!foldMode || this.$foldStyle == "manual") { this.foldWidgets = null; return; } this.foldWidgets = []; this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); this.on('change', this.$updateFoldWidgets); this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); }; this.getParentFoldRangeData = function (row, ignoreCurrent) { var fw = this.foldWidgets; if (!fw || (ignoreCurrent && fw[row])) return {}; var i = row - 1, firstRange; while (i >= 0) { var c = fw[i]; if (c == null) c = fw[i] = this.getFoldWidget(i); if (c == "start") { var range = this.getFoldWidgetRange(i); if (!firstRange) firstRange = range; if (range && range.end.row >= row) break; } i--; } return { range: i !== -1 && range, firstRange: firstRange }; }; this.onFoldWidgetClick = function(row, e) { e = e.domEvent; var options = { children: e.shiftKey, all: e.ctrlKey || e.metaKey, siblings: e.altKey }; var range = this.$toggleFoldWidget(row, options); if (!range) { var el = (e.target || e.srcElement); if (el && /ace_fold-widget/.test(el.className)) el.className += " ace_invalid"; } }; this.$toggleFoldWidget = function(row, options) { if (!this.getFoldWidget) return; var type = this.getFoldWidget(row); var line = this.getLine(row); var dir = type === "end" ? -1 : 1; var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); if (fold) { if (options.children || options.all) this.removeFold(fold); else this.expandFold(fold); return fold; } var range = this.getFoldWidgetRange(row, true); if (range && !range.isMultiLine()) { fold = this.getFoldAt(range.start.row, range.start.column, 1); if (fold && range.isEqual(fold.range)) { this.removeFold(fold); return fold; } } if (options.siblings) { var data = this.getParentFoldRangeData(row); if (data.range) { var startRow = data.range.start.row + 1; var endRow = data.range.end.row; } this.foldAll(startRow, endRow, options.all ? 10000 : 0); } else if (options.children) { endRow = range ? range.end.row : this.getLength(); this.foldAll(row + 1, endRow, options.all ? 10000 : 0); } else if (range) { if (options.all) range.collapseChildren = 10000; this.addFold("...", range); } return range; }; this.toggleFoldWidget = function(toggleParent) { var row = this.selection.getCursor().row; row = this.getRowFoldStart(row); var range = this.$toggleFoldWidget(row, {}); if (range) return; var data = this.getParentFoldRangeData(row, true); range = data.range || data.firstRange; if (range) { row = range.start.row; var fold = this.getFoldAt(row, this.getLine(row).length, 1); if (fold) { this.removeFold(fold); } else { this.addFold("...", range); } } }; this.updateFoldWidgets = function(delta) { var firstRow = delta.start.row; var len = delta.end.row - firstRow; if (len === 0) { this.foldWidgets[firstRow] = null; } else if (delta.action == 'remove') { this.foldWidgets.splice(firstRow, len + 1, null); } else { var args = Array(len + 1); args.unshift(firstRow, 1); this.foldWidgets.splice.apply(this.foldWidgets, args); } }; this.tokenizerUpdateFoldWidgets = function(e) { var rows = e.data; if (rows.first != rows.last) { if (this.foldWidgets.length > rows.first) this.foldWidgets.splice(rows.first, this.foldWidgets.length); } }; } exports.Folding = Folding; }); ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var Range = require("../range").Range; function BracketMatch() { this.findMatchingBracket = function(position, chr) { if (position.column == 0) return null; var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1); if (charBeforeCursor == "") return null; var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); if (!match) return null; if (match[1]) return this.$findClosingBracket(match[1], position); else return this.$findOpeningBracket(match[2], position); }; this.getBracketRange = function(pos) { var line = this.getLine(pos.row); var before = true, range; var chr = line.charAt(pos.column-1); var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); if (!match) { chr = line.charAt(pos.column); pos = {row: pos.row, column: pos.column + 1}; match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); before = false; } if (!match) return null; if (match[1]) { var bracketPos = this.$findClosingBracket(match[1], pos); if (!bracketPos) return null; range = Range.fromPoints(pos, bracketPos); if (!before) { range.end.column++; range.start.column--; } range.cursor = range.end; } else { var bracketPos = this.$findOpeningBracket(match[2], pos); if (!bracketPos) return null; range = Range.fromPoints(bracketPos, pos); if (!before) { range.start.column++; range.end.column--; } range.cursor = range.start; } return range; }; this.$brackets = { ")": "(", "(": ")", "]": "[", "[": "]", "{": "}", "}": "{" }; this.$findOpeningBracket = function(bracket, position, typeRe) { var openBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("rparen", ".paren") .replace(/\b(?:end)\b/, "(?:start|begin|end)") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; var value = token.value; while (true) { while (valueIndex >= 0) { var chr = value.charAt(valueIndex); if (chr == openBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex -= 1; } do { token = iterator.stepBackward(); } while (token && !typeRe.test(token.type)); if (token == null) break; value = token.value; valueIndex = value.length - 1; } return null; }; this.$findClosingBracket = function(bracket, position, typeRe) { var closingBracket = this.$brackets[bracket]; var depth = 1; var iterator = new TokenIterator(this, position.row, position.column); var token = iterator.getCurrentToken(); if (!token) token = iterator.stepForward(); if (!token) return; if (!typeRe){ typeRe = new RegExp( "(\\.?" + token.type.replace(".", "\\.").replace("lparen", ".paren") .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") + ")+" ); } var valueIndex = position.column - iterator.getCurrentTokenColumn(); while (true) { var value = token.value; var valueLength = value.length; while (valueIndex < valueLength) { var chr = value.charAt(valueIndex); if (chr == closingBracket) { depth -= 1; if (depth == 0) { return {row: iterator.getCurrentTokenRow(), column: valueIndex + iterator.getCurrentTokenColumn()}; } } else if (chr == bracket) { depth += 1; } valueIndex += 1; } do { token = iterator.stepForward(); } while (token && !typeRe.test(token.type)); if (token == null) break; valueIndex = 0; } return null; }; } exports.BracketMatch = BracketMatch; }); ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","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) { "use strict"; var oop = require("./lib/oop"); var lang = require("./lib/lang"); var config = require("./config"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var Selection = require("./selection").Selection; var TextMode = require("./mode/text").Mode; var Range = require("./range").Range; var Document = require("./document").Document; var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; var SearchHighlight = require("./search_highlight").SearchHighlight; var EditSession = function(text, mode) { this.$breakpoints = []; this.$decorations = []; this.$frontMarkers = {}; this.$backMarkers = {}; this.$markerId = 1; this.$undoSelect = true; this.$foldData = []; this.id = "session" + (++EditSession.$uid); this.$foldData.toString = function() { return this.join("\n"); }; this.on("changeFold", this.onChangeFold.bind(this)); this.$onChange = this.onChange.bind(this); if (typeof text != "object" || !text.getLine) text = new Document(text); this.setDocument(text); this.selection = new Selection(this); config.resetOptions(this); this.setMode(mode); config._signal("session", this); }; (function() { oop.implement(this, EventEmitter); this.setDocument = function(doc) { if (this.doc) this.doc.removeListener("change", this.$onChange); this.doc = doc; doc.on("change", this.$onChange); if (this.bgTokenizer) this.bgTokenizer.setDocument(this.getDocument()); this.resetCaches(); }; this.getDocument = function() { return this.doc; }; this.$resetRowCache = function(docRow) { if (!docRow) { this.$docRowCache = []; this.$screenRowCache = []; return; } var l = this.$docRowCache.length; var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; if (l > i) { this.$docRowCache.splice(i, l); this.$screenRowCache.splice(i, l); } }; this.$getRowCacheIndex = function(cacheArray, val) { var low = 0; var hi = cacheArray.length - 1; while (low <= hi) { var mid = (low + hi) >> 1; var c = cacheArray[mid]; if (val > c) low = mid + 1; else if (val < c) hi = mid - 1; else return mid; } return low -1; }; this.resetCaches = function() { this.$modified = true; this.$wrapData = []; this.$rowLengthCache = []; this.$resetRowCache(0); if (this.bgTokenizer) this.bgTokenizer.start(0); }; this.onChangeFold = function(e) { var fold = e.data; this.$resetRowCache(fold.start.row); }; this.onChange = function(delta) { this.$modified = true; this.$resetRowCache(delta.start.row); var removedFolds = this.$updateInternalDataOnChange(delta); if (!this.$fromUndo && this.$undoManager && !delta.ignore) { this.$deltasDoc.push(delta); if (removedFolds && removedFolds.length != 0) { this.$deltasFold.push({ action: "removeFolds", folds: removedFolds }); } this.$informUndoManager.schedule(); } this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta); this._signal("change", delta); }; this.setValue = function(text) { this.doc.setValue(text); this.selection.moveTo(0, 0); this.$resetRowCache(0); this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; this.setUndoManager(this.$undoManager); this.getUndoManager().reset(); }; this.getValue = this.toString = function() { return this.doc.getValue(); }; this.getSelection = function() { return this.selection; }; this.getState = function(row) { return this.bgTokenizer.getState(row); }; this.getTokens = function(row) { return this.bgTokenizer.getTokens(row); }; this.getTokenAt = function(row, column) { var tokens = this.bgTokenizer.getTokens(row); var token, c = 0; if (column == null) { i = tokens.length - 1; c = this.getLine(row).length; } else { for (var i = 0; i < tokens.length; i++) { c += tokens[i].value.length; if (c >= column) break; } } token = tokens[i]; if (!token) return null; token.index = i; token.start = c - token.value.length; return token; }; this.setUndoManager = function(undoManager) { this.$undoManager = undoManager; this.$deltas = []; this.$deltasDoc = []; this.$deltasFold = []; if (this.$informUndoManager) this.$informUndoManager.cancel(); if (undoManager) { var self = this; this.$syncInformUndoManager = function() { self.$informUndoManager.cancel(); if (self.$deltasFold.length) { self.$deltas.push({ group: "fold", deltas: self.$deltasFold }); self.$deltasFold = []; } if (self.$deltasDoc.length) { self.$deltas.push({ group: "doc", deltas: self.$deltasDoc }); self.$deltasDoc = []; } if (self.$deltas.length > 0) { undoManager.execute({ action: "aceupdate", args: [self.$deltas, self], merge: self.mergeUndoDeltas }); } self.mergeUndoDeltas = false; self.$deltas = []; }; this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); } }; this.markUndoGroup = function() { if (this.$syncInformUndoManager) this.$syncInformUndoManager(); }; this.$defaultUndoManager = { undo: function() {}, redo: function() {}, reset: function() {} }; this.getUndoManager = function() { return this.$undoManager || this.$defaultUndoManager; }; this.getTabString = function() { if (this.getUseSoftTabs()) { return lang.stringRepeat(" ", this.getTabSize()); } else { return "\t"; } }; this.setUseSoftTabs = function(val) { this.setOption("useSoftTabs", val); }; this.getUseSoftTabs = function() { return this.$useSoftTabs && !this.$mode.$indentWithTabs; }; this.setTabSize = function(tabSize) { this.setOption("tabSize", tabSize); }; this.getTabSize = function() { return this.$tabSize; }; this.isTabStop = function(position) { return this.$useSoftTabs && (position.column % this.$tabSize === 0); }; this.$overwrite = false; this.setOverwrite = function(overwrite) { this.setOption("overwrite", overwrite); }; this.getOverwrite = function() { return this.$overwrite; }; this.toggleOverwrite = function() { this.setOverwrite(!this.$overwrite); }; this.addGutterDecoration = function(row, className) { if (!this.$decorations[row]) this.$decorations[row] = ""; this.$decorations[row] += " " + className; this._signal("changeBreakpoint", {}); }; this.removeGutterDecoration = function(row, className) { this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); this._signal("changeBreakpoint", {}); }; this.getBreakpoints = function() { return this.$breakpoints; }; this.setBreakpoints = function(rows) { this.$breakpoints = []; for (var i=0; i<rows.length; i++) { this.$breakpoints[rows[i]] = "ace_breakpoint"; } this._signal("changeBreakpoint", {}); }; this.clearBreakpoints = function() { this.$breakpoints = []; this._signal("changeBreakpoint", {}); }; this.setBreakpoint = function(row, className) { if (className === undefined) className = "ace_breakpoint"; if (className) this.$breakpoints[row] = className; else delete this.$breakpoints[row]; this._signal("changeBreakpoint", {}); }; this.clearBreakpoint = function(row) { delete this.$breakpoints[row]; this._signal("changeBreakpoint", {}); }; this.addMarker = function(range, clazz, type, inFront) { var id = this.$markerId++; var marker = { range : range, type : type || "line", renderer: typeof type == "function" ? type : null, clazz : clazz, inFront: !!inFront, id: id }; if (inFront) { this.$frontMarkers[id] = marker; this._signal("changeFrontMarker"); } else { this.$backMarkers[id] = marker; this._signal("changeBackMarker"); } return id; }; this.addDynamicMarker = function(marker, inFront) { if (!marker.update) return; var id = this.$markerId++; marker.id = id; marker.inFront = !!inFront; if (inFront) { this.$frontMarkers[id] = marker; this._signal("changeFrontMarker"); } else { this.$backMarkers[id] = marker; this._signal("changeBackMarker"); } return marker; }; this.removeMarker = function(markerId) { var marker = this.$frontMarkers[markerId] || this.$backMarkers[markerId]; if (!marker) return; var markers = marker.inFront ? this.$frontMarkers : this.$backMarkers; if (marker) { delete (markers[markerId]); this._signal(marker.inFront ? "changeFrontMarker" : "changeBackMarker"); } }; this.getMarkers = function(inFront) { return inFront ? this.$frontMarkers : this.$backMarkers; }; this.highlight = function(re) { if (!this.$searchHighlight) { var highlight = new SearchHighlight(null, "ace_selected-word", "text"); this.$searchHighlight = this.addDynamicMarker(highlight); } this.$searchHighlight.setRegexp(re); }; this.highlightLines = function(startRow, endRow, clazz, inFront) { if (typeof endRow != "number") { clazz = endRow; endRow = startRow; } if (!clazz) clazz = "ace_step"; var range = new Range(startRow, 0, endRow, Infinity); range.id = this.addMarker(range, clazz, "fullLine", inFront); return range; }; this.setAnnotations = function(annotations) { this.$annotations = annotations; this._signal("changeAnnotation", {}); }; this.getAnnotations = function() { return this.$annotations || []; }; this.clearAnnotations = function() { this.setAnnotations([]); }; this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r?\n)/m); if (match) { this.$autoNewLine = match[1]; } else { this.$autoNewLine = "\n"; } }; this.getWordRange = function(row, column) { var line = this.getLine(row); var inToken = false; if (column > 0) inToken = !!line.charAt(column - 1).match(this.tokenRe); if (!inToken) inToken = !!line.charAt(column).match(this.tokenRe); if (inToken) var re = this.tokenRe; else if (/^\s+$/.test(line.slice(column-1, column+1))) var re = /\s/; else var re = this.nonTokenRe; var start = column; if (start > 0) { do { start--; } while (start >= 0 && line.charAt(start).match(re)); start++; } var end = column; while (end < line.length && line.charAt(end).match(re)) { end++; } return new Range(row, start, row, end); }; this.getAWordRange = function(row, column) { var wordRange = this.getWordRange(row, column); var line = this.getLine(wordRange.end.row); while (line.charAt(wordRange.end.column).match(/[ \t]/)) { wordRange.end.column += 1; } return wordRange; }; this.setNewLineMode = function(newLineMode) { this.doc.setNewLineMode(newLineMode); }; this.getNewLineMode = function() { return this.doc.getNewLineMode(); }; this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); }; this.getUseWorker = function() { return this.$useWorker; }; this.onReloadTokenizer = function(e) { var rows = e.data; this.bgTokenizer.start(rows.first); this._signal("tokenizerUpdate", e); }; this.$modes = {}; this.$mode = null; this.$modeId = null; this.setMode = function(mode, cb) { if (mode && typeof mode === "object") { if (mode.getTokenizer) return this.$onChangeMode(mode); var options = mode; var path = options.path; } else { path = mode || "ace/mode/text"; } if (!this.$modes["ace/mode/text"]) this.$modes["ace/mode/text"] = new TextMode(); if (this.$modes[path] && !options) { this.$onChangeMode(this.$modes[path]); cb && cb(); return; } this.$modeId = path; config.loadModule(["mode", path], function(m) { if (this.$modeId !== path) return cb && cb(); if (this.$modes[path] && !options) { this.$onChangeMode(this.$modes[path]); } else if (m && m.Mode) { m = new m.Mode(options); if (!options) { this.$modes[path] = m; m.$id = path; } this.$onChangeMode(m); } cb && cb(); }.bind(this)); if (!this.$mode) this.$onChangeMode(this.$modes["ace/mode/text"], true); }; this.$onChangeMode = function(mode, $isPlaceholder) { if (!$isPlaceholder) this.$modeId = mode.$id; if (this.$mode === mode) return; this.$mode = mode; this.$stopWorker(); if (this.$useWorker) this.$startWorker(); var tokenizer = mode.getTokenizer(); if(tokenizer.addEventListener !== undefined) { var onReloadTokenizer = this.onReloadTokenizer.bind(this); tokenizer.addEventListener("update", onReloadTokenizer); } if (!this.bgTokenizer) { this.bgTokenizer = new BackgroundTokenizer(tokenizer); var _self = this; this.bgTokenizer.addEventListener("update", function(e) { _self._signal("tokenizerUpdate", e); }); } else { this.bgTokenizer.setTokenizer(tokenizer); } this.bgTokenizer.setDocument(this.getDocument()); this.tokenRe = mode.tokenRe; this.nonTokenRe = mode.nonTokenRe; if (!$isPlaceholder) { if (mode.attachToSession) mode.attachToSession(this); this.$options.wrapMethod.set.call(this, this.$wrapMethod); this.$setFolding(mode.foldingRules); this.bgTokenizer.start(0); this._emit("changeMode"); } }; this.$stopWorker = function() { if (this.$worker) { this.$worker.terminate(); this.$worker = null; } }; this.$startWorker = function() { try { this.$worker = this.$mode.createWorker(this); } catch (e) { config.warn("Could not load worker", e); this.$worker = null; } }; this.getMode = function() { return this.$mode; }; this.$scrollTop = 0; this.setScrollTop = function(scrollTop) { if (this.$scrollTop === scrollTop || isNaN(scrollTop)) return; this.$scrollTop = scrollTop; this._signal("changeScrollTop", scrollTop); }; this.getScrollTop = function() { return this.$scrollTop; }; this.$scrollLeft = 0; this.setScrollLeft = function(scrollLeft) { if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) return; this.$scrollLeft = scrollLeft; this._signal("changeScrollLeft", scrollLeft); }; this.getScrollLeft = function() { return this.$scrollLeft; }; this.getScreenWidth = function() { this.$computeWidth(); if (this.lineWidgets) return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); return this.screenWidth; }; this.getLineWidgetMaxWidth = function() { if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth; var width = 0; this.lineWidgets.forEach(function(w) { if (w && w.screenWidth > width) width = w.screenWidth; }); return this.lineWidgetWidth = width; }; this.$computeWidth = function(force) { if (this.$modified || force) { this.$modified = false; if (this.$useWrapMode) return this.screenWidth = this.$wrapLimit; var lines = this.doc.getAllLines(); var cache = this.$rowLengthCache; var longestScreenLine = 0; var foldIndex = 0; var foldLine = this.$foldData[foldIndex]; var foldStart = foldLine ? foldLine.start.row : Infinity; var len = lines.length; for (var i = 0; i < len; i++) { if (i > foldStart) { i = foldLine.end.row + 1; if (i >= len) break; foldLine = this.$foldData[foldIndex++]; foldStart = foldLine ? foldLine.start.row : Infinity; } if (cache[i] == null) cache[i] = this.$getStringScreenWidth(lines[i])[0]; if (cache[i] > longestScreenLine) longestScreenLine = cache[i]; } this.screenWidth = longestScreenLine; } }; this.getLine = function(row) { return this.doc.getLine(row); }; this.getLines = function(firstRow, lastRow) { return this.doc.getLines(firstRow, lastRow); }; this.getLength = function() { return this.doc.getLength(); }; this.getTextRange = function(range) { return this.doc.getTextRange(range || this.selection.getRange()); }; this.insert = function(position, text) { return this.doc.insert(position, text); }; this.remove = function(range) { return this.doc.remove(range); }; this.removeFullLines = function(firstRow, lastRow){ return this.doc.removeFullLines(firstRow, lastRow); }; this.undoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = deltas.length - 1; i != -1; i--) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.revertDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, true, lastUndoRange); } else { delta.deltas.forEach(function(foldDelta) { this.addFolds(foldDelta.folds); }, this); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.redoChanges = function(deltas, dontSelect) { if (!deltas.length) return; this.$fromUndo = true; var lastUndoRange = null; for (var i = 0; i < deltas.length; i++) { var delta = deltas[i]; if (delta.group == "doc") { this.doc.applyDeltas(delta.deltas); lastUndoRange = this.$getUndoSelection(delta.deltas, false, lastUndoRange); } } this.$fromUndo = false; lastUndoRange && this.$undoSelect && !dontSelect && this.selection.setSelectionRange(lastUndoRange); return lastUndoRange; }; this.setUndoSelect = function(enable) { this.$undoSelect = enable; }; this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { function isInsert(delta) { return isUndo ? delta.action !== "insert" : delta.action === "insert"; } var delta = deltas[0]; var range, point; var lastDeltaIsInsert = false; if (isInsert(delta)) { range = Range.fromPoints(delta.start, delta.end); lastDeltaIsInsert = true; } else { range = Range.fromPoints(delta.start, delta.start); lastDeltaIsInsert = false; } for (var i = 1; i < deltas.length; i++) { delta = deltas[i]; if (isInsert(delta)) { point = delta.start; if (range.compare(point.row, point.column) == -1) { range.setStart(point); } point = delta.end; if (range.compare(point.row, point.column) == 1) { range.setEnd(point); } lastDeltaIsInsert = true; } else { point = delta.start; if (range.compare(point.row, point.column) == -1) { range = Range.fromPoints(delta.start, delta.start); } lastDeltaIsInsert = false; } } if (lastUndoRange != null) { if (Range.comparePoints(lastUndoRange.start, range.start) === 0) { lastUndoRange.start.column += range.end.column - range.start.column; lastUndoRange.end.column += range.end.column - range.start.column; } var cmp = lastUndoRange.compareRange(range); if (cmp == 1) { range.setStart(lastUndoRange.start); } else if (cmp == -1) { range.setEnd(lastUndoRange.end); } } return range; }; this.replace = function(range, text) { return this.doc.replace(range, text); }; this.moveText = function(fromRange, toPosition, copy) { var text = this.getTextRange(fromRange); var folds = this.getFoldsInRange(fromRange); var toRange = Range.fromPoints(toPosition, toPosition); if (!copy) { this.remove(fromRange); var rowDiff = fromRange.start.row - fromRange.end.row; var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; if (collDiff) { if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) toRange.start.column += collDiff; if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) toRange.end.column += collDiff; } if (rowDiff && toRange.start.row >= fromRange.end.row) { toRange.start.row += rowDiff; toRange.end.row += rowDiff; } } toRange.end = this.insert(toRange.start, text); if (folds.length) { var oldStart = fromRange.start; var newStart = toRange.start; var rowDiff = newStart.row - oldStart.row; var collDiff = newStart.column - oldStart.column; this.addFolds(folds.map(function(x) { x = x.clone(); if (x.start.row == oldStart.row) x.start.column += collDiff; if (x.end.row == oldStart.row) x.end.column += collDiff; x.start.row += rowDiff; x.end.row += rowDiff; return x; })); } return toRange; }; this.indentRows = function(startRow, endRow, indentString) { indentString = indentString.replace(/\t/g, this.getTabString()); for (var row=startRow; row<=endRow; row++) this.doc.insertInLine({row: row, column: 0}, indentString); }; this.outdentRows = function (range) { var rowRange = range.collapseRows(); var deleteRange = new Range(0, 0, 0, 0); var size = this.getTabSize(); for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { var line = this.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; for (var j = 0; j < size; ++j) if (line.charAt(j) != ' ') break; if (j < size && line.charAt(j) == '\t') { deleteRange.start.column = j; deleteRange.end.column = j + 1; } else { deleteRange.start.column = 0; deleteRange.end.column = j; } this.remove(deleteRange); } }; this.$moveLines = function(firstRow, lastRow, dir) { firstRow = this.getRowFoldStart(firstRow); lastRow = this.getRowFoldEnd(lastRow); if (dir < 0) { var row = this.getRowFoldStart(firstRow + dir); if (row < 0) return 0; var diff = row-firstRow; } else if (dir > 0) { var row = this.getRowFoldEnd(lastRow + dir); if (row > this.doc.getLength()-1) return 0; var diff = row-lastRow; } else { firstRow = this.$clipRowToDocument(firstRow); lastRow = this.$clipRowToDocument(lastRow); var diff = lastRow - firstRow + 1; } var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); var folds = this.getFoldsInRange(range).map(function(x){ x = x.clone(); x.start.row += diff; x.end.row += diff; return x; }); var lines = dir == 0 ? this.doc.getLines(firstRow, lastRow) : this.doc.removeFullLines(firstRow, lastRow); this.doc.insertFullLines(firstRow+diff, lines); folds.length && this.addFolds(folds); return diff; }; this.moveLinesUp = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, -1); }; this.moveLinesDown = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 1); }; this.duplicateLines = function(firstRow, lastRow) { return this.$moveLines(firstRow, lastRow, 0); }; this.$clipRowToDocument = function(row) { return Math.max(0, Math.min(row, this.doc.getLength()-1)); }; this.$clipColumnToRow = function(row, column) { if (column < 0) return 0; return Math.min(this.doc.getLine(row).length, column); }; this.$clipPositionToDocument = function(row, column) { column = Math.max(0, column); if (row < 0) { row = 0; column = 0; } else { var len = this.doc.getLength(); if (row >= len) { row = len - 1; column = this.doc.getLine(len-1).length; } else { column = Math.min(this.doc.getLine(row).length, column); } } return { row: row, column: column }; }; this.$clipRangeToDocument = function(range) { if (range.start.row < 0) { range.start.row = 0; range.start.column = 0; } else { range.start.column = this.$clipColumnToRow( range.start.row, range.start.column ); } var len = this.doc.getLength() - 1; if (range.end.row > len) { range.end.row = len; range.end.column = this.doc.getLine(len).length; } else { range.end.column = this.$clipColumnToRow( range.end.row, range.end.column ); } return range; }; this.$wrapLimit = 80; this.$useWrapMode = false; this.$wrapLimitRange = { min : null, max : null }; this.setUseWrapMode = function(useWrapMode) { if (useWrapMode != this.$useWrapMode) { this.$useWrapMode = useWrapMode; this.$modified = true; this.$resetRowCache(0); if (useWrapMode) { var len = this.getLength(); this.$wrapData = Array(len); this.$updateWrapData(0, len - 1); } this._signal("changeWrapMode"); } }; this.getUseWrapMode = function() { return this.$useWrapMode; }; this.setWrapLimitRange = function(min, max) { if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { this.$wrapLimitRange = { min: min, max: max }; this.$modified = true; if (this.$useWrapMode) this._signal("changeWrapMode"); } }; this.adjustWrapLimit = function(desiredLimit, $printMargin) { var limits = this.$wrapLimitRange; if (limits.max < 0) limits = {min: $printMargin, max: $printMargin}; var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { this.$wrapLimit = wrapLimit; this.$modified = true; if (this.$useWrapMode) { this.$updateWrapData(0, this.getLength() - 1); this.$resetRowCache(0); this._signal("changeWrapLimit"); } return true; } return false; }; this.$constrainWrapLimit = function(wrapLimit, min, max) { if (min) wrapLimit = Math.max(min, wrapLimit); if (max) wrapLimit = Math.min(max, wrapLimit); return wrapLimit; }; this.getWrapLimit = function() { return this.$wrapLimit; }; this.setWrapLimit = function (limit) { this.setWrapLimitRange(limit, limit); }; this.getWrapLimitRange = function() { return { min : this.$wrapLimitRange.min, max : this.$wrapLimitRange.max }; }; this.$updateInternalDataOnChange = function(delta) { var useWrapMode = this.$useWrapMode; var action = delta.action; var start = delta.start; var end = delta.end; var firstRow = start.row; var lastRow = end.row; var len = lastRow - firstRow; var removedFolds = null; this.$updating = true; if (len != 0) { if (action === "remove") { this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); var foldLines = this.$foldData; removedFolds = this.getFoldsInRange(delta); this.removeFolds(removedFolds); var foldLine = this.getFoldLine(end.row); var idx = 0; if (foldLine) { foldLine.addRemoveChars(end.row, end.column, start.column - end.column); foldLine.shiftRow(-len); var foldLineBefore = this.getFoldLine(firstRow); if (foldLineBefore && foldLineBefore !== foldLine) { foldLineBefore.merge(foldLine); foldLine = foldLineBefore; } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= end.row) { foldLine.shiftRow(-len); } } lastRow = firstRow; } else { var args = Array(len); args.unshift(firstRow, 0); var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache arr.splice.apply(arr, args); var foldLines = this.$foldData; var foldLine = this.getFoldLine(firstRow); var idx = 0; if (foldLine) { var cmp = foldLine.range.compareInside(start.row, start.column); if (cmp == 0) { foldLine = foldLine.split(start.row, start.column); if (foldLine) { foldLine.shiftRow(len); foldLine.addRemoveChars(lastRow, 0, end.column - start.column); } } else if (cmp == -1) { foldLine.addRemoveChars(firstRow, 0, end.column - start.column); foldLine.shiftRow(len); } idx = foldLines.indexOf(foldLine) + 1; } for (idx; idx < foldLines.length; idx++) { var foldLine = foldLines[idx]; if (foldLine.start.row >= firstRow) { foldLine.shiftRow(len); } } } } else { len = Math.abs(delta.start.column - delta.end.column); if (action === "remove") { removedFolds = this.getFoldsInRange(delta); this.removeFolds(removedFolds); len = -len; } var foldLine = this.getFoldLine(firstRow); if (foldLine) { foldLine.addRemoveChars(firstRow, start.column, len); } } if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { console.error("doc.getLength() and $wrapData.length have to be the same!"); } this.$updating = false; if (useWrapMode) this.$updateWrapData(firstRow, lastRow); else this.$updateRowLengthCache(firstRow, lastRow); return removedFolds; }; this.$updateRowLengthCache = function(firstRow, lastRow, b) { this.$rowLengthCache[firstRow] = null; this.$rowLengthCache[lastRow] = null; }; this.$updateWrapData = function(firstRow, lastRow) { var lines = this.doc.getAllLines(); var tabSize = this.getTabSize(); var wrapData = this.$wrapData; var wrapLimit = this.$wrapLimit; var tokens; var foldLine; var row = firstRow; lastRow = Math.min(lastRow, lines.length - 1); while (row <= lastRow) { foldLine = this.getFoldLine(row, foldLine); if (!foldLine) { tokens = this.$getDisplayTokens(lines[row]); wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row ++; } else { tokens = []; foldLine.walk(function(placeholder, row, column, lastColumn) { var walkTokens; if (placeholder != null) { walkTokens = this.$getDisplayTokens( placeholder, tokens.length); walkTokens[0] = PLACEHOLDER_START; for (var i = 1; i < walkTokens.length; i++) { walkTokens[i] = PLACEHOLDER_BODY; } } else { walkTokens = this.$getDisplayTokens( lines[row].substring(lastColumn, column), tokens.length); } tokens = tokens.concat(walkTokens); }.bind(this), foldLine.end.row, lines[foldLine.end.row].length + 1 ); wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); row = foldLine.end.row + 1; } } }; var CHAR = 1, CHAR_EXT = 2, PLACEHOLDER_START = 3, PLACEHOLDER_BODY = 4, PUNCTUATION = 9, SPACE = 10, TAB = 11, TAB_SPACE = 12; this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) { if (tokens.length == 0) { return []; } var splits = []; var displayLength = tokens.length; var lastSplit = 0, lastDocSplit = 0; var isCode = this.$wrapAsCode; var indentedSoftWrap = this.$indentedSoftWrap; var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); function getWrapIndent() { var indentation = 0; if (maxIndent === 0) return indentation; if (indentedSoftWrap) { for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (token == SPACE) indentation += 1; else if (token == TAB) indentation += tabSize; else if (token == TAB_SPACE) continue; else break; } } if (isCode && indentedSoftWrap !== false) indentation += tabSize; return Math.min(indentation, maxIndent); } function addSplit(screenPos) { var displayed = tokens.slice(lastSplit, screenPos); var len = displayed.length; displayed.join("") .replace(/12/g, function() { len -= 1; }) .replace(/2/g, function() { len -= 1; }); if (!splits.length) { indent = getWrapIndent(); splits.indent = indent; } lastDocSplit += len; splits.push(lastDocSplit); lastSplit = screenPos; } var indent = 0; while (displayLength - lastSplit > wrapLimit - indent) { var split = lastSplit + wrapLimit - indent; if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { addSplit(split); continue; } if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { for (split; split != lastSplit - 1; split--) { if (tokens[split] == PLACEHOLDER_START) { break; } } if (split > lastSplit) { addSplit(split); continue; } split = lastSplit + wrapLimit; for (split; split < tokens.length; split++) { if (tokens[split] != PLACEHOLDER_BODY) { break; } } if (split == tokens.length) { break; // Breaks the while-loop. } addSplit(split); continue; } var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1); while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } if (isCode) { while (split > minSplit && tokens[split] < PLACEHOLDER_START) { split --; } while (split > minSplit && tokens[split] == PUNCTUATION) { split --; } } else { while (split > minSplit && tokens[split] < SPACE) { split --; } } if (split > minSplit) { addSplit(++split); continue; } split = lastSplit + wrapLimit; if (tokens[split] == CHAR_EXT) split--; addSplit(split - indent); } return splits; }; this.$getDisplayTokens = function(str, offset) { var arr = []; var tabSize; offset = offset || 0; for (var i = 0; i < str.length; i++) { var c = str.charCodeAt(i); if (c == 9) { tabSize = this.getScreenTabSize(arr.length + offset); arr.push(TAB); for (var n = 1; n < tabSize; n++) { arr.push(TAB_SPACE); } } else if (c == 32) { arr.push(SPACE); } else if((c > 39 && c < 48) || (c > 57 && c < 64)) { arr.push(PUNCTUATION); } else if (c >= 0x1100 && isFullWidth(c)) { arr.push(CHAR, CHAR_EXT); } else { arr.push(CHAR); } } return arr; }; this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { if (maxScreenColumn == 0) return [0, 0]; if (maxScreenColumn == null) maxScreenColumn = Infinity; screenColumn = screenColumn || 0; var c, column; for (column = 0; column < str.length; column++) { c = str.charCodeAt(column); if (c == 9) { screenColumn += this.getScreenTabSize(screenColumn); } else if (c >= 0x1100 && isFullWidth(c)) { screenColumn += 2; } else { screenColumn += 1; } if (screenColumn > maxScreenColumn) { break; } } return [screenColumn, column]; }; this.lineWidgets = null; this.getRowLength = function(row) { if (this.lineWidgets) var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; else h = 0 if (!this.$useWrapMode || !this.$wrapData[row]) { return 1 + h; } else { return this.$wrapData[row].length + 1 + h; } }; this.getRowLineCount = function(row) { if (!this.$useWrapMode || !this.$wrapData[row]) { return 1; } else { return this.$wrapData[row].length + 1; } }; this.getRowWrapIndent = function(screenRow) { if (this.$useWrapMode) { var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); var splits = this.$wrapData[pos.row]; return splits.length && splits[0] < pos.column ? splits.indent : 0; } else { return 0; } } this.getScreenLastRowColumn = function(screenRow) { var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); return this.documentToScreenColumn(pos.row, pos.column); }; this.getDocumentLastRowColumn = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.getScreenLastRowColumn(screenRow); }; this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { var screenRow = this.documentToScreenRow(docRow, docColumn); return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); }; this.getRowSplitData = function(row) { if (!this.$useWrapMode) { return undefined; } else { return this.$wrapData[row]; } }; this.getScreenTabSize = function(screenColumn) { return this.$tabSize - screenColumn % this.$tabSize; }; this.screenToDocumentRow = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).row; }; this.screenToDocumentColumn = function(screenRow, screenColumn) { return this.screenToDocumentPosition(screenRow, screenColumn).column; }; this.screenToDocumentPosition = function(screenRow, screenColumn) { if (screenRow < 0) return {row: 0, column: 0}; var line; var docRow = 0; var docColumn = 0; var column; var row = 0; var rowLength = 0; var rowCache = this.$screenRowCache; var i = this.$getRowCacheIndex(rowCache, screenRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var docRow = this.$docRowCache[i]; var doCache = screenRow > rowCache[l - 1]; } else { var doCache = !l; } var maxRow = this.getLength() - 1; var foldLine = this.getNextFoldLine(docRow); var foldStart = foldLine ? foldLine.start.row : Infinity; while (row <= screenRow) { rowLength = this.getRowLength(docRow); if (row + rowLength > screenRow || docRow >= maxRow) { break; } else { row += rowLength; docRow++; if (docRow > foldStart) { docRow = foldLine.end.row+1; foldLine = this.getNextFoldLine(docRow, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } } if (doCache) { this.$docRowCache.push(docRow); this.$screenRowCache.push(row); } } if (foldLine && foldLine.start.row <= docRow) { line = this.getFoldDisplayLine(foldLine); docRow = foldLine.start.row; } else if (row + rowLength <= screenRow || docRow > maxRow) { return { row: maxRow, column: this.getLine(maxRow).length }; } else { line = this.getLine(docRow); foldLine = null; } var wrapIndent = 0; if (this.$useWrapMode) { var splits = this.$wrapData[docRow]; if (splits) { var splitIndex = Math.floor(screenRow - row); column = splits[splitIndex]; if(splitIndex > 0 && splits.length) { wrapIndent = splits.indent; docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; line = line.substring(docColumn); } } } docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; if (this.$useWrapMode && docColumn >= column) docColumn = column - 1; if (foldLine) return foldLine.idxToPosition(docColumn); return {row: docRow, column: docColumn}; }; this.documentToScreenPosition = function(docRow, docColumn) { if (typeof docColumn === "undefined") var pos = this.$clipPositionToDocument(docRow.row, docRow.column); else pos = this.$clipPositionToDocument(docRow, docColumn); docRow = pos.row; docColumn = pos.column; var screenRow = 0; var foldStartRow = null; var fold = null; fold = this.getFoldAt(docRow, docColumn, 1); if (fold) { docRow = fold.start.row; docColumn = fold.start.column; } var rowEnd, row = 0; var rowCache = this.$docRowCache; var i = this.$getRowCacheIndex(rowCache, docRow); var l = rowCache.length; if (l && i >= 0) { var row = rowCache[i]; var screenRow = this.$screenRowCache[i]; var doCache = docRow > rowCache[l - 1]; } else { var doCache = !l; } var foldLine = this.getNextFoldLine(row); var foldStart = foldLine ?foldLine.start.row :Infinity; while (row < docRow) { if (row >= foldStart) { rowEnd = foldLine.end.row + 1; if (rowEnd > docRow) break; foldLine = this.getNextFoldLine(rowEnd, foldLine); foldStart = foldLine ?foldLine.start.row :Infinity; } else { rowEnd = row + 1; } screenRow += this.getRowLength(row); row = rowEnd; if (doCache) { this.$docRowCache.push(row); this.$screenRowCache.push(screenRow); } } var textLine = ""; if (foldLine && row >= foldStart) { textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); foldStartRow = foldLine.start.row; } else { textLine = this.getLine(docRow).substring(0, docColumn); foldStartRow = docRow; } var wrapIndent = 0; if (this.$useWrapMode) { var wrapRow = this.$wrapData[foldStartRow]; if (wrapRow) { var screenRowOffset = 0; while (textLine.length >= wrapRow[screenRowOffset]) { screenRow ++; screenRowOffset++; } textLine = textLine.substring( wrapRow[screenRowOffset - 1] || 0, textLine.length ); wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; } } return { row: screenRow, column: wrapIndent + this.$getStringScreenWidth(textLine)[0] }; }; this.documentToScreenColumn = function(row, docColumn) { return this.documentToScreenPosition(row, docColumn).column; }; this.documentToScreenRow = function(docRow, docColumn) { return this.documentToScreenPosition(docRow, docColumn).row; }; this.getScreenLength = function() { var screenRows = 0; var fold = null; if (!this.$useWrapMode) { screenRows = this.getLength(); var foldData = this.$foldData; for (var i = 0; i < foldData.length; i++) { fold = foldData[i]; screenRows -= fold.end.row - fold.start.row; } } else { var lastRow = this.$wrapData.length; var row = 0, i = 0; var fold = this.$foldData[i++]; var foldStart = fold ? fold.start.row :Infinity; while (row < lastRow) { var splits = this.$wrapData[row]; screenRows += splits ? splits.length + 1 : 1; row ++; if (row > foldStart) { row = fold.end.row+1; fold = this.$foldData[i++]; foldStart = fold ?fold.start.row :Infinity; } } } if (this.lineWidgets) screenRows += this.$getWidgetScreenLength(); return screenRows; }; this.$setFontMetrics = function(fm) { if (!this.$enableVarChar) return; this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { if (maxScreenColumn === 0) return [0, 0]; if (!maxScreenColumn) maxScreenColumn = Infinity; screenColumn = screenColumn || 0; var c, column; for (column = 0; column < str.length; column++) { c = str.charAt(column); if (c === "\t") { screenColumn += this.getScreenTabSize(screenColumn); } else { screenColumn += fm.getCharacterWidth(c); } if (screenColumn > maxScreenColumn) { break; } } return [screenColumn, column]; }; }; this.destroy = function() { if (this.bgTokenizer) { this.bgTokenizer.setDocument(null); this.bgTokenizer = null; } this.$stopWorker(); }; function isFullWidth(c) { if (c < 0x1100) return false; 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; } }).call(EditSession.prototype); require("./edit_session/folding").Folding.call(EditSession.prototype); require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); config.defineOptions(EditSession.prototype, "session", { wrap: { set: function(value) { 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; if (this.$wrap == value) return; this.$wrap = value; if (!value) { this.setUseWrapMode(false); } else { var col = typeof value == "number" ? value : null; this.setWrapLimitRange(col, col); this.setUseWrapMode(true); } }, get: function() { if (this.getUseWrapMode()) { if (this.$wrap == -1) return "printMargin"; if (!this.getWrapLimitRange().min) return "free"; return this.$wrap; } return "off"; }, handlesSet: true }, wrapMethod: { set: function(val) { val = val == "auto" ? this.$mode.type != "text" : val != "text"; if (val != this.$wrapAsCode) { this.$wrapAsCode = val; if (this.$useWrapMode) { this.$modified = true; this.$resetRowCache(0); this.$updateWrapData(0, this.getLength() - 1); } } }, initialValue: "auto" }, indentedSoftWrap: { initialValue: true }, firstLineNumber: { set: function() {this._signal("changeBreakpoint");}, initialValue: 1 }, useWorker: { set: function(useWorker) { this.$useWorker = useWorker; this.$stopWorker(); if (useWorker) this.$startWorker(); }, initialValue: true }, useSoftTabs: {initialValue: true}, tabSize: { set: function(tabSize) { if (isNaN(tabSize) || this.$tabSize === tabSize) return; this.$modified = true; this.$rowLengthCache = []; this.$tabSize = tabSize; this._signal("changeTabSize"); }, initialValue: 4, handlesSet: true }, overwrite: { set: function(val) {this._signal("changeOverwrite");}, initialValue: false }, newLineMode: { set: function(val) {this.doc.setNewLineMode(val)}, get: function() {return this.doc.getNewLineMode()}, handlesSet: true }, mode: { set: function(val) { this.setMode(val) }, get: function() { return this.$modeId } } }); exports.EditSession = EditSession; }); ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { "use strict"; var lang = require("./lib/lang"); var oop = require("./lib/oop"); var Range = require("./range").Range; var Search = function() { this.$options = {}; }; (function() { this.set = function(options) { oop.mixin(this.$options, options); return this; }; this.getOptions = function() { return lang.copyObject(this.$options); }; this.setOptions = function(options) { this.$options = options; }; this.find = function(session) { var options = this.$options; var iterator = this.$matchIterator(session, options); if (!iterator) return false; var firstRange = null; iterator.forEach(function(range, row, offset) { if (!range.start) { var column = range.offset + (offset || 0); firstRange = new Range(row, column, row, column + range.length); if (!range.length && options.start && options.start.start && options.skipCurrent != false && firstRange.isEqual(options.start) ) { firstRange = null; return false; } } else firstRange = range; return true; }); return firstRange; }; this.findAll = function(session) { var options = this.$options; if (!options.needle) return []; this.$assembleRegExp(options); var range = options.range; var lines = range ? session.getLines(range.start.row, range.end.row) : session.doc.getAllLines(); var ranges = []; var re = options.re; if (options.$isMultiLine) { var len = re.length; var maxRow = lines.length - len; var prevRange; outer: for (var row = re.offset || 0; row <= maxRow; row++) { for (var j = 0; j < len; j++) if (lines[row + j].search(re[j]) == -1) continue outer; var startLine = lines[row]; var line = lines[row + len - 1]; var startIndex = startLine.length - startLine.match(re[0])[0].length; var endIndex = line.match(re[len - 1])[0].length; if (prevRange && prevRange.end.row === row && prevRange.end.column > startIndex ) { continue; } ranges.push(prevRange = new Range( row, startIndex, row + len - 1, endIndex )); if (len > 2) row = row + len - 2; } } else { for (var i = 0; i < lines.length; i++) { var matches = lang.getMatchOffsets(lines[i], re); for (var j = 0; j < matches.length; j++) { var match = matches[j]; ranges.push(new Range(i, match.offset, i, match.offset + match.length)); } } } if (range) { var startColumn = range.start.column; var endColumn = range.start.column; var i = 0, j = ranges.length - 1; while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) i++; while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) j--; ranges = ranges.slice(i, j + 1); for (i = 0, j = ranges.length; i < j; i++) { ranges[i].start.row += range.start.row; ranges[i].end.row += range.start.row; } } return ranges; }; this.replace = function(input, replacement) { var options = this.$options; var re = this.$assembleRegExp(options); if (options.$isMultiLine) return replacement; if (!re) return; var match = re.exec(input); if (!match || match[0].length != input.length) return null; replacement = input.replace(re, replacement); if (options.preserveCase) { replacement = replacement.split(""); for (var i = Math.min(input.length, input.length); i--; ) { var ch = input[i]; if (ch && ch.toLowerCase() != ch) replacement[i] = replacement[i].toUpperCase(); else replacement[i] = replacement[i].toLowerCase(); } replacement = replacement.join(""); } return replacement; }; this.$matchIterator = function(session, options) { var re = this.$assembleRegExp(options); if (!re) return false; var callback; if (options.$isMultiLine) { var len = re.length; var matchIterator = function(line, row, offset) { var startIndex = line.search(re[0]); if (startIndex == -1) return; for (var i = 1; i < len; i++) { line = session.getLine(row + i); if (line.search(re[i]) == -1) return; } var endIndex = line.match(re[len - 1])[0].length; var range = new Range(row, startIndex, row + len - 1, endIndex); if (re.offset == 1) { range.start.row--; range.start.column = Number.MAX_VALUE; } else if (offset) range.start.column += offset; if (callback(range)) return true; }; } else if (options.backwards) { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = matches.length-1; i >= 0; i--) if (callback(matches[i], row, startIndex)) return true; }; } else { var matchIterator = function(line, row, startIndex) { var matches = lang.getMatchOffsets(line, re); for (var i = 0; i < matches.length; i++) if (callback(matches[i], row, startIndex)) return true; }; } var lineIterator = this.$lineIterator(session, options); return { forEach: function(_callback) { callback = _callback; lineIterator.forEach(matchIterator); } }; }; this.$assembleRegExp = function(options, $disableFakeMultiline) { if (options.needle instanceof RegExp) return options.re = options.needle; var needle = options.needle; if (!options.needle) return options.re = false; if (!options.regExp) needle = lang.escapeRegExp(needle); if (options.wholeWord) needle = addWordBoundary(needle, options); var modifier = options.caseSensitive ? "gm" : "gmi"; options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); if (options.$isMultiLine) return options.re = this.$assembleMultilineRegExp(needle, modifier); try { var re = new RegExp(needle, modifier); } catch(e) { re = false; } return options.re = re; }; this.$assembleMultilineRegExp = function(needle, modifier) { var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); var re = []; for (var i = 0; i < parts.length; i++) try { re.push(new RegExp(parts[i], modifier)); } catch(e) { return false; } if (parts[0] == "") { re.shift(); re.offset = 1; } else { re.offset = 0; } return re; }; this.$lineIterator = function(session, options) { var backwards = options.backwards == true; var skipCurrent = options.skipCurrent != false; var range = options.range; var start = options.start; if (!start) start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); if (start.start) start = start[skipCurrent != backwards ? "end" : "start"]; var firstRow = range ? range.start.row : 0; var lastRow = range ? range.end.row : session.getLength() - 1; var forEach = backwards ? function(callback) { var row = start.row; var line = session.getLine(row).substring(0, start.column); if (callback(line, row)) return; for (row--; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; if (options.wrap == false) return; for (row = lastRow, firstRow = start.row; row >= firstRow; row--) if (callback(session.getLine(row), row)) return; } : function(callback) { var row = start.row; var line = session.getLine(row).substr(start.column); if (callback(line, row, start.column)) return; for (row = row+1; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; if (options.wrap == false) return; for (row = firstRow, lastRow = start.row; row <= lastRow; row++) if (callback(session.getLine(row), row)) return; }; return {forEach: forEach}; }; }).call(Search.prototype); function addWordBoundary(needle, options) { function wordBoundary(c) { if (/\w/.test(c) || options.regExp) return "\\b"; return ""; } return wordBoundary(needle[0]) + needle + wordBoundary(needle[needle.length - 1]); } exports.Search = Search; }); ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { "use strict"; var keyUtil = require("../lib/keys"); var useragent = require("../lib/useragent"); var KEY_MODS = keyUtil.KEY_MODS; function HashHandler(config, platform) { this.platform = platform || (useragent.isMac ? "mac" : "win"); this.commands = {}; this.commandKeyBinding = {}; this.addCommands(config); this.$singleCommand = true; } function MultiHashHandler(config, platform) { HashHandler.call(this, config, platform); this.$singleCommand = false; } MultiHashHandler.prototype = HashHandler.prototype; (function() { this.addCommand = function(command) { if (this.commands[command.name]) this.removeCommand(command); this.commands[command.name] = command; if (command.bindKey) this._buildKeyHash(command); }; this.removeCommand = function(command, keepCommand) { var name = command && (typeof command === 'string' ? command : command.name); command = this.commands[name]; if (!keepCommand) delete this.commands[name]; var ckb = this.commandKeyBinding; for (var keyId in ckb) { var cmdGroup = ckb[keyId]; if (cmdGroup == command) { delete ckb[keyId]; } else if (Array.isArray(cmdGroup)) { var i = cmdGroup.indexOf(command); if (i != -1) { cmdGroup.splice(i, 1); if (cmdGroup.length == 1) ckb[keyId] = cmdGroup[0]; } } } }; this.bindKey = function(key, command, position) { if (typeof key == "object" && key) { if (position == undefined) position = key.position; key = key[this.platform]; } if (!key) return; if (typeof command == "function") return this.addCommand({exec: command, bindKey: key, name: command.name || key}); key.split("|").forEach(function(keyPart) { var chain = ""; if (keyPart.indexOf(" ") != -1) { var parts = keyPart.split(/\s+/); keyPart = parts.pop(); parts.forEach(function(keyPart) { var binding = this.parseKeys(keyPart); var id = KEY_MODS[binding.hashId] + binding.key; chain += (chain ? " " : "") + id; this._addCommandToBinding(chain, "chainKeys"); }, this); chain += " "; } var binding = this.parseKeys(keyPart); var id = KEY_MODS[binding.hashId] + binding.key; this._addCommandToBinding(chain + id, command, position); }, this); }; function getPosition(command) { return typeof command == "object" && command.bindKey && command.bindKey.position || 0; } this._addCommandToBinding = function(keyId, command, position) { var ckb = this.commandKeyBinding, i; if (!command) { delete ckb[keyId]; } else if (!ckb[keyId] || this.$singleCommand) { ckb[keyId] = command; } else { if (!Array.isArray(ckb[keyId])) { ckb[keyId] = [ckb[keyId]]; } else if ((i = ckb[keyId].indexOf(command)) != -1) { ckb[keyId].splice(i, 1); } if (typeof position != "number") { if (position || command.isDefault) position = -100; else position = getPosition(command); } var commands = ckb[keyId]; for (i = 0; i < commands.length; i++) { var other = commands[i]; var otherPos = getPosition(other); if (otherPos > position) break; } commands.splice(i, 0, command); } }; this.addCommands = function(commands) { commands && Object.keys(commands).forEach(function(name) { var command = commands[name]; if (!command) return; if (typeof command === "string") return this.bindKey(command, name); if (typeof command === "function") command = { exec: command }; if (typeof command !== "object") return; if (!command.name) command.name = name; this.addCommand(command); }, this); }; this.removeCommands = function(commands) { Object.keys(commands).forEach(function(name) { this.removeCommand(commands[name]); }, this); }; this.bindKeys = function(keyList) { Object.keys(keyList).forEach(function(key) { this.bindKey(key, keyList[key]); }, this); }; this._buildKeyHash = function(command) { this.bindKey(command.bindKey, command); }; this.parseKeys = function(keys) { var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x}); var key = parts.pop(); var keyCode = keyUtil[key]; if (keyUtil.FUNCTION_KEYS[keyCode]) key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); else if (!parts.length) return {key: key, hashId: -1}; else if (parts.length == 1 && parts[0] == "shift") return {key: key.toUpperCase(), hashId: -1}; var hashId = 0; for (var i = parts.length; i--;) { var modifier = keyUtil.KEY_MODS[parts[i]]; if (modifier == null) { if (typeof console != "undefined") console.error("invalid modifier " + parts[i] + " in " + keys); return false; } hashId |= modifier; } return {key: key, hashId: hashId}; }; this.findKeyCommand = function findKeyCommand(hashId, keyString) { var key = KEY_MODS[hashId] + keyString; return this.commandKeyBinding[key]; }; this.handleKeyboard = function(data, hashId, keyString, keyCode) { if (keyCode < 0) return; var key = KEY_MODS[hashId] + keyString; var command = this.commandKeyBinding[key]; if (data.$keyChain) { data.$keyChain += " " + key; command = this.commandKeyBinding[data.$keyChain] || command; } if (command) { if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { data.$keyChain = data.$keyChain || key; return {command: "null"}; } } if (data.$keyChain) { if ((!hashId || hashId == 4) && keyString.length == 1) data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input else if (hashId == -1 || keyCode > 0) data.$keyChain = ""; // reset keyChain } return {command: command}; }; this.getStatusText = function(editor, data) { return data.$keyChain || ""; }; }).call(HashHandler.prototype); exports.HashHandler = HashHandler; exports.MultiHashHandler = MultiHashHandler; }); ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; var EventEmitter = require("../lib/event_emitter").EventEmitter; var CommandManager = function(platform, commands) { MultiHashHandler.call(this, commands, platform); this.byName = this.commands; this.setDefaultHandler("exec", function(e) { return e.command.exec(e.editor, e.args || {}); }); }; oop.inherits(CommandManager, MultiHashHandler); (function() { oop.implement(this, EventEmitter); this.exec = function(command, editor, args) { if (Array.isArray(command)) { for (var i = command.length; i--; ) { if (this.exec(command[i], editor, args)) return true; } return false; } if (typeof command === "string") command = this.commands[command]; if (!command) return false; if (editor && editor.$readOnly && !command.readOnly) return false; var e = {editor: editor, command: command, args: args}; e.returnValue = this._emit("exec", e); this._signal("afterExec", e); return e.returnValue === false ? false : true; }; this.toggleRecording = function(editor) { if (this.$inReplay) return; editor && editor._emit("changeStatus"); if (this.recording) { this.macro.pop(); this.removeEventListener("exec", this.$addCommandToMacro); if (!this.macro.length) this.macro = this.oldMacro; return this.recording = false; } if (!this.$addCommandToMacro) { this.$addCommandToMacro = function(e) { this.macro.push([e.command, e.args]); }.bind(this); } this.oldMacro = this.macro; this.macro = []; this.on("exec", this.$addCommandToMacro); return this.recording = true; }; this.replay = function(editor) { if (this.$inReplay || !this.macro) return; if (this.recording) return this.toggleRecording(editor); try { this.$inReplay = true; this.macro.forEach(function(x) { if (typeof x == "string") this.exec(x, editor); else this.exec(x[0], editor, x[1]); }, this); } finally { this.$inReplay = false; } }; this.trimMacro = function(m) { return m.map(function(x){ if (typeof x[0] != "string") x[0] = x[0].name; if (!x[1]) x = x[0]; return x; }); }; }).call(CommandManager.prototype); exports.CommandManager = CommandManager; }); ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module) { "use strict"; var lang = require("../lib/lang"); var config = require("../config"); var Range = require("../range").Range; function bindKey(win, mac) { return {win: win, mac: mac}; } exports.commands = [{ name: "showSettingsMenu", bindKey: bindKey("Ctrl-,", "Command-,"), exec: function(editor) { config.loadModule("ace/ext/settings_menu", function(module) { module.init(editor); editor.showSettingsMenu(); }); }, readOnly: true }, { name: "goToNextError", bindKey: bindKey("Alt-E", "F4"), exec: function(editor) { config.loadModule("ace/ext/error_marker", function(module) { module.showErrorMarker(editor, 1); }); }, scrollIntoView: "animate", readOnly: true }, { name: "goToPreviousError", bindKey: bindKey("Alt-Shift-E", "Shift-F4"), exec: function(editor) { config.loadModule("ace/ext/error_marker", function(module) { module.showErrorMarker(editor, -1); }); }, scrollIntoView: "animate", readOnly: true }, { name: "selectall", bindKey: bindKey("Ctrl-A", "Command-A"), exec: function(editor) { editor.selectAll(); }, readOnly: true }, { name: "centerselection", bindKey: bindKey(null, "Ctrl-L"), exec: function(editor) { editor.centerSelection(); }, readOnly: true }, { name: "gotoline", bindKey: bindKey("Ctrl-L", "Command-L"), exec: function(editor) { var line = parseInt(prompt("Enter line number:"), 10); if (!isNaN(line)) { editor.gotoLine(line); } }, readOnly: true }, { name: "fold", bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), exec: function(editor) { editor.session.toggleFold(false); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "unfold", bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), exec: function(editor) { editor.session.toggleFold(true); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "toggleFoldWidget", bindKey: bindKey("F2", "F2"), exec: function(editor) { editor.session.toggleFoldWidget(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "toggleParentFoldWidget", bindKey: bindKey("Alt-F2", "Alt-F2"), exec: function(editor) { editor.session.toggleFoldWidget(true); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "foldall", bindKey: bindKey(null, "Ctrl-Command-Option-0"), exec: function(editor) { editor.session.foldAll(); }, scrollIntoView: "center", readOnly: true }, { name: "foldOther", bindKey: bindKey("Alt-0", "Command-Option-0"), exec: function(editor) { editor.session.foldAll(); editor.session.unfold(editor.selection.getAllRanges()); }, scrollIntoView: "center", readOnly: true }, { name: "unfoldall", bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), exec: function(editor) { editor.session.unfold(); }, scrollIntoView: "center", readOnly: true }, { name: "findnext", bindKey: bindKey("Ctrl-K", "Command-G"), exec: function(editor) { editor.findNext(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "findprevious", bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), exec: function(editor) { editor.findPrevious(); }, multiSelectAction: "forEach", scrollIntoView: "center", readOnly: true }, { name: "selectOrFindNext", bindKey: bindKey("Alt-K", "Ctrl-G"), exec: function(editor) { if (editor.selection.isEmpty()) editor.selection.selectWord(); else editor.findNext(); }, readOnly: true }, { name: "selectOrFindPrevious", bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), exec: function(editor) { if (editor.selection.isEmpty()) editor.selection.selectWord(); else editor.findPrevious(); }, readOnly: true }, { name: "find", bindKey: bindKey("Ctrl-F", "Command-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)}); }, readOnly: true }, { name: "overwrite", bindKey: "Insert", exec: function(editor) { editor.toggleOverwrite(); }, readOnly: true }, { name: "selecttostart", bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Home|Command-Shift-Up"), exec: function(editor) { editor.getSelection().selectFileStart(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "gotostart", bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), exec: function(editor) { editor.navigateFileStart(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "selectup", bindKey: bindKey("Shift-Up", "Shift-Up|Ctrl-Shift-P"), exec: function(editor) { editor.getSelection().selectUp(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "golineup", bindKey: bindKey("Up", "Up|Ctrl-P"), exec: function(editor, args) { editor.navigateUp(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttoend", bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-End|Command-Shift-Down"), exec: function(editor) { editor.getSelection().selectFileEnd(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "gotoend", bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), exec: function(editor) { editor.navigateFileEnd(); }, multiSelectAction: "forEach", readOnly: true, scrollIntoView: "animate", aceCommandGroup: "fileJump" }, { name: "selectdown", bindKey: bindKey("Shift-Down", "Shift-Down|Ctrl-Shift-N"), exec: function(editor) { editor.getSelection().selectDown(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "golinedown", bindKey: bindKey("Down", "Down|Ctrl-N"), exec: function(editor, args) { editor.navigateDown(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectwordleft", bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), exec: function(editor) { editor.getSelection().selectWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotowordleft", bindKey: bindKey("Ctrl-Left", "Option-Left"), exec: function(editor) { editor.navigateWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttolinestart", bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left|Ctrl-Shift-A"), exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotolinestart", bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), exec: function(editor) { editor.navigateLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectleft", bindKey: bindKey("Shift-Left", "Shift-Left|Ctrl-Shift-B"), exec: function(editor) { editor.getSelection().selectLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotoleft", bindKey: bindKey("Left", "Left|Ctrl-B"), exec: function(editor, args) { editor.navigateLeft(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectwordright", bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), exec: function(editor) { editor.getSelection().selectWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotowordright", bindKey: bindKey("Ctrl-Right", "Option-Right"), exec: function(editor) { editor.navigateWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selecttolineend", bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right|Shift-End|Ctrl-Shift-E"), exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotolineend", bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), exec: function(editor) { editor.navigateLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectright", bindKey: bindKey("Shift-Right", "Shift-Right"), exec: function(editor) { editor.getSelection().selectRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "gotoright", bindKey: bindKey("Right", "Right|Ctrl-F"), exec: function(editor, args) { editor.navigateRight(args.times); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectpagedown", bindKey: "Shift-PageDown", exec: function(editor) { editor.selectPageDown(); }, readOnly: true }, { name: "pagedown", bindKey: bindKey(null, "Option-PageDown"), exec: function(editor) { editor.scrollPageDown(); }, readOnly: true }, { name: "gotopagedown", bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), exec: function(editor) { editor.gotoPageDown(); }, readOnly: true }, { name: "selectpageup", bindKey: "Shift-PageUp", exec: function(editor) { editor.selectPageUp(); }, readOnly: true }, { name: "pageup", bindKey: bindKey(null, "Option-PageUp"), exec: function(editor) { editor.scrollPageUp(); }, readOnly: true }, { name: "gotopageup", bindKey: "PageUp", exec: function(editor) { editor.gotoPageUp(); }, readOnly: true }, { name: "scrollup", bindKey: bindKey("Ctrl-Up", null), exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "scrolldown", bindKey: bindKey("Ctrl-Down", null), exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, readOnly: true }, { name: "selectlinestart", bindKey: "Shift-Home", exec: function(editor) { editor.getSelection().selectLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "selectlineend", bindKey: "Shift-End", exec: function(editor) { editor.getSelection().selectLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "togglerecording", bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), exec: function(editor) { editor.commands.toggleRecording(editor); }, readOnly: true }, { name: "replaymacro", bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), exec: function(editor) { editor.commands.replay(editor); }, readOnly: true }, { name: "jumptomatching", bindKey: bindKey("Ctrl-P", "Ctrl-P"), exec: function(editor) { editor.jumpToMatching(); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "selecttomatching", bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"), exec: function(editor) { editor.jumpToMatching(true); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "expandToMatching", bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), exec: function(editor) { editor.jumpToMatching(true, true); }, multiSelectAction: "forEach", scrollIntoView: "animate", readOnly: true }, { name: "passKeysToBrowser", bindKey: bindKey(null, null), exec: function() {}, passEvent: true, readOnly: true }, { name: "copy", exec: function(editor) { }, readOnly: true }, { name: "cut", exec: function(editor) { var range = editor.getSelectionRange(); editor._emit("cut", range); if (!editor.selection.isEmpty()) { editor.session.remove(range); editor.clearSelection(); } }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "paste", exec: function(editor, args) { editor.$handlePaste(args); }, scrollIntoView: "cursor" }, { name: "removeline", bindKey: bindKey("Ctrl-D", "Command-D"), exec: function(editor) { editor.removeLines(); }, scrollIntoView: "cursor", multiSelectAction: "forEachLine" }, { name: "duplicateSelection", bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), exec: function(editor) { editor.duplicateSelection(); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "sortlines", bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), exec: function(editor) { editor.sortLines(); }, scrollIntoView: "selection", multiSelectAction: "forEachLine" }, { name: "togglecomment", bindKey: bindKey("Ctrl-/", "Command-/"), exec: function(editor) { editor.toggleCommentLines(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "toggleBlockComment", bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), exec: function(editor) { editor.toggleBlockComment(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "modifyNumberUp", bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), exec: function(editor) { editor.modifyNumber(1); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "modifyNumberDown", bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), exec: function(editor) { editor.modifyNumber(-1); }, scrollIntoView: "cursor", multiSelectAction: "forEach" }, { name: "replace", bindKey: bindKey("Ctrl-H", "Command-Option-F"), exec: function(editor) { config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)}); } }, { name: "undo", bindKey: bindKey("Ctrl-Z", "Command-Z"), exec: function(editor) { editor.undo(); } }, { name: "redo", bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), exec: function(editor) { editor.redo(); } }, { name: "copylinesup", bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), exec: function(editor) { editor.copyLinesUp(); }, scrollIntoView: "cursor" }, { name: "movelinesup", bindKey: bindKey("Alt-Up", "Option-Up"), exec: function(editor) { editor.moveLinesUp(); }, scrollIntoView: "cursor" }, { name: "copylinesdown", bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), exec: function(editor) { editor.copyLinesDown(); }, scrollIntoView: "cursor" }, { name: "movelinesdown", bindKey: bindKey("Alt-Down", "Option-Down"), exec: function(editor) { editor.moveLinesDown(); }, scrollIntoView: "cursor" }, { name: "del", bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), exec: function(editor) { editor.remove("right"); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "backspace", bindKey: bindKey( "Shift-Backspace|Backspace", "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H" ), exec: function(editor) { editor.remove("left"); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "cut_or_delete", bindKey: bindKey("Shift-Delete", null), exec: function(editor) { if (editor.selection.isEmpty()) { editor.remove("left"); } else { return false; } }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removetolinestart", bindKey: bindKey("Alt-Backspace", "Command-Backspace"), exec: function(editor) { editor.removeToLineStart(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removetolineend", bindKey: bindKey("Alt-Delete", "Ctrl-K"), exec: function(editor) { editor.removeToLineEnd(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removewordleft", bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), exec: function(editor) { editor.removeWordLeft(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "removewordright", bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), exec: function(editor) { editor.removeWordRight(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "outdent", bindKey: bindKey("Shift-Tab", "Shift-Tab"), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "indent", bindKey: bindKey("Tab", "Tab"), exec: function(editor) { editor.indent(); }, multiSelectAction: "forEach", scrollIntoView: "selectionPart" }, { name: "blockoutdent", bindKey: bindKey("Ctrl-[", "Ctrl-["), exec: function(editor) { editor.blockOutdent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "blockindent", bindKey: bindKey("Ctrl-]", "Ctrl-]"), exec: function(editor) { editor.blockIndent(); }, multiSelectAction: "forEachLine", scrollIntoView: "selectionPart" }, { name: "insertstring", exec: function(editor, str) { editor.insert(str); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "inserttext", exec: function(editor, args) { editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "splitline", bindKey: bindKey(null, "Ctrl-O"), exec: function(editor) { editor.splitLine(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "transposeletters", bindKey: bindKey("Ctrl-T", "Ctrl-T"), exec: function(editor) { editor.transposeLetters(); }, multiSelectAction: function(editor) {editor.transposeSelections(1); }, scrollIntoView: "cursor" }, { name: "touppercase", bindKey: bindKey("Ctrl-U", "Ctrl-U"), exec: function(editor) { editor.toUpperCase(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "tolowercase", bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), exec: function(editor) { editor.toLowerCase(); }, multiSelectAction: "forEach", scrollIntoView: "cursor" }, { name: "expandtoline", bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), exec: function(editor) { var range = editor.selection.getRange(); range.start.column = range.end.column = 0; range.end.row++; editor.selection.setRange(range, false); }, multiSelectAction: "forEach", scrollIntoView: "cursor", readOnly: true }, { name: "joinlines", bindKey: bindKey(null, null), exec: function(editor) { var isBackwards = editor.selection.isBackwards(); var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); var selectedCount = selectedText.replace(/\n\s*/, " ").length; var insertLine = editor.session.doc.getLine(selectionStart.row); for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); if (curLine.length !== 0) { curLine = " " + curLine; } insertLine += curLine; } if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { insertLine += editor.session.doc.getNewLineCharacter(); } editor.clearSelection(); editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); if (selectedCount > 0) { editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); } else { firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); } }, multiSelectAction: "forEach", readOnly: true }, { name: "invertSelection", bindKey: bindKey(null, null), exec: function(editor) { var endRow = editor.session.doc.getLength() - 1; var endCol = editor.session.doc.getLine(endRow).length; var ranges = editor.selection.rangeList.ranges; var newRanges = []; if (ranges.length < 1) { ranges = [editor.selection.getRange()]; } for (var i = 0; i < ranges.length; i++) { if (i == (ranges.length - 1)) { if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); } } if (i === 0) { if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); } } else { newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column)); } } editor.exitMultiSelectMode(); editor.clearSelection(); for(var i = 0; i < newRanges.length; i++) { editor.selection.addRange(newRanges[i], false); } }, readOnly: true, scrollIntoView: "none" }]; }); ace.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"], function(require, exports, module) { "use strict"; require("./lib/fixoldbrowsers"); var oop = require("./lib/oop"); var dom = require("./lib/dom"); var lang = require("./lib/lang"); var useragent = require("./lib/useragent"); var TextInput = require("./keyboard/textinput").TextInput; var MouseHandler = require("./mouse/mouse_handler").MouseHandler; var FoldHandler = require("./mouse/fold_handler").FoldHandler; var KeyBinding = require("./keyboard/keybinding").KeyBinding; var EditSession = require("./edit_session").EditSession; var Search = require("./search").Search; var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var CommandManager = require("./commands/command_manager").CommandManager; var defaultCommands = require("./commands/default_commands").commands; var config = require("./config"); var TokenIterator = require("./token_iterator").TokenIterator; var Editor = function(renderer, session) { var container = renderer.getContainerElement(); this.container = container; this.renderer = renderer; this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); this.textInput = new TextInput(renderer.getTextAreaContainer(), this); this.renderer.textarea = this.textInput.getElement(); this.keyBinding = new KeyBinding(this); this.$mouseHandler = new MouseHandler(this); new FoldHandler(this); this.$blockScrolling = 0; this.$search = new Search().set({ wrap: true }); this.$historyTracker = this.$historyTracker.bind(this); this.commands.on("exec", this.$historyTracker); this.$initOperationListeners(); this._$emitInputEvent = lang.delayedCall(function() { this._signal("input", {}); if (this.session && this.session.bgTokenizer) this.session.bgTokenizer.scheduleStart(); }.bind(this)); this.on("change", function(_, _self) { _self._$emitInputEvent.schedule(31); }); this.setSession(session || new EditSession("")); config.resetOptions(this); config._signal("editor", this); }; (function(){ oop.implement(this, EventEmitter); this.$initOperationListeners = function() { function last(a) {return a[a.length - 1]} this.selections = []; this.commands.on("exec", this.startOperation.bind(this), true); this.commands.on("afterExec", this.endOperation.bind(this), true); this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this)); this.on("change", function() { this.curOp || this.startOperation(); this.curOp.docChanged = true; }.bind(this), true); this.on("changeSelection", function() { this.curOp || this.startOperation(); this.curOp.selectionChanged = true; }.bind(this), true); }; this.curOp = null; this.prevOp = {}; this.startOperation = function(commadEvent) { if (this.curOp) { if (!commadEvent || this.curOp.command) return; this.prevOp = this.curOp; } if (!commadEvent) { this.previousCommand = null; commadEvent = {}; } this.$opResetTimer.schedule(); this.curOp = { command: commadEvent.command || {}, args: commadEvent.args, scrollTop: this.renderer.scrollTop }; if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined) this.$blockScrolling++; }; this.endOperation = function(e) { if (this.curOp) { if (e && e.returnValue === false) return this.curOp = null; this._signal("beforeEndOperation"); var command = this.curOp.command; if (command.name && this.$blockScrolling > 0) this.$blockScrolling--; var scrollIntoView = command && command.scrollIntoView; if (scrollIntoView) { switch (scrollIntoView) { case "center-animate": scrollIntoView = "animate"; case "center": this.renderer.scrollCursorIntoView(null, 0.5); break; case "animate": case "cursor": this.renderer.scrollCursorIntoView(); break; case "selectionPart": var range = this.selection.getRange(); var config = this.renderer.layerConfig; if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); } break; default: break; } if (scrollIntoView == "animate") this.renderer.animateScrolling(this.curOp.scrollTop); } this.prevOp = this.curOp; this.curOp = null; } }; this.$mergeableCommands = ["backspace", "del", "insertstring"]; this.$historyTracker = function(e) { if (!this.$mergeUndoDeltas) return; var prev = this.prevOp; var mergeableCommands = this.$mergeableCommands; var shouldMerge = prev.command && (e.command.name == prev.command.name); if (e.command.name == "insertstring") { var text = e.args; if (this.mergeNextCommand === undefined) this.mergeNextCommand = true; shouldMerge = shouldMerge && this.mergeNextCommand // previous command allows to coalesce with && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type this.mergeNextCommand = true; } else { shouldMerge = shouldMerge && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable } if ( this.$mergeUndoDeltas != "always" && Date.now() - this.sequenceStartTime > 2000 ) { shouldMerge = false; // the sequence is too long } if (shouldMerge) this.session.mergeUndoDeltas = true; else if (mergeableCommands.indexOf(e.command.name) !== -1) this.sequenceStartTime = Date.now(); }; this.setKeyboardHandler = function(keyboardHandler, cb) { if (keyboardHandler && typeof keyboardHandler === "string") { this.$keybindingId = keyboardHandler; var _self = this; config.loadModule(["keybinding", keyboardHandler], function(module) { if (_self.$keybindingId == keyboardHandler) _self.keyBinding.setKeyboardHandler(module && module.handler); cb && cb(); }); } else { this.$keybindingId = null; this.keyBinding.setKeyboardHandler(keyboardHandler); cb && cb(); } }; this.getKeyboardHandler = function() { return this.keyBinding.getKeyboardHandler(); }; this.setSession = function(session) { if (this.session == session) return; if (this.curOp) this.endOperation(); this.curOp = {}; var oldSession = this.session; if (oldSession) { this.session.off("change", this.$onDocumentChange); this.session.off("changeMode", this.$onChangeMode); this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); this.session.off("changeTabSize", this.$onChangeTabSize); this.session.off("changeWrapLimit", this.$onChangeWrapLimit); this.session.off("changeWrapMode", this.$onChangeWrapMode); this.session.off("changeFold", this.$onChangeFold); this.session.off("changeFrontMarker", this.$onChangeFrontMarker); this.session.off("changeBackMarker", this.$onChangeBackMarker); this.session.off("changeBreakpoint", this.$onChangeBreakpoint); this.session.off("changeAnnotation", this.$onChangeAnnotation); this.session.off("changeOverwrite", this.$onCursorChange); this.session.off("changeScrollTop", this.$onScrollTopChange); this.session.off("changeScrollLeft", this.$onScrollLeftChange); var selection = this.session.getSelection(); selection.off("changeCursor", this.$onCursorChange); selection.off("changeSelection", this.$onSelectionChange); } this.session = session; if (session) { this.$onDocumentChange = this.onDocumentChange.bind(this); session.on("change", this.$onDocumentChange); this.renderer.setSession(session); this.$onChangeMode = this.onChangeMode.bind(this); session.on("changeMode", this.$onChangeMode); this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); session.on("tokenizerUpdate", this.$onTokenizerUpdate); this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); session.on("changeTabSize", this.$onChangeTabSize); this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); session.on("changeWrapLimit", this.$onChangeWrapLimit); this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); session.on("changeWrapMode", this.$onChangeWrapMode); this.$onChangeFold = this.onChangeFold.bind(this); session.on("changeFold", this.$onChangeFold); this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); this.session.on("changeFrontMarker", this.$onChangeFrontMarker); this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); this.session.on("changeBackMarker", this.$onChangeBackMarker); this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); this.session.on("changeBreakpoint", this.$onChangeBreakpoint); this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); this.session.on("changeAnnotation", this.$onChangeAnnotation); this.$onCursorChange = this.onCursorChange.bind(this); this.session.on("changeOverwrite", this.$onCursorChange); this.$onScrollTopChange = this.onScrollTopChange.bind(this); this.session.on("changeScrollTop", this.$onScrollTopChange); this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); this.session.on("changeScrollLeft", this.$onScrollLeftChange); this.selection = session.getSelection(); this.selection.on("changeCursor", this.$onCursorChange); this.$onSelectionChange = this.onSelectionChange.bind(this); this.selection.on("changeSelection", this.$onSelectionChange); this.onChangeMode(); this.$blockScrolling += 1; this.onCursorChange(); this.$blockScrolling -= 1; this.onScrollTopChange(); this.onScrollLeftChange(); this.onSelectionChange(); this.onChangeFrontMarker(); this.onChangeBackMarker(); this.onChangeBreakpoint(); this.onChangeAnnotation(); this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); this.renderer.updateFull(); } else { this.selection = null; this.renderer.setSession(session); } this._signal("changeSession", { session: session, oldSession: oldSession }); this.curOp = null; oldSession && oldSession._signal("changeEditor", {oldEditor: this}); session && session._signal("changeEditor", {editor: this}); }; this.getSession = function() { return this.session; }; this.setValue = function(val, cursorPos) { this.session.doc.setValue(val); if (!cursorPos) this.selectAll(); else if (cursorPos == 1) this.navigateFileEnd(); else if (cursorPos == -1) this.navigateFileStart(); return val; }; this.getValue = function() { return this.session.getValue(); }; this.getSelection = function() { return this.selection; }; this.resize = function(force) { this.renderer.onResize(force); }; this.setTheme = function(theme, cb) { this.renderer.setTheme(theme, cb); }; this.getTheme = function() { return this.renderer.getTheme(); }; this.setStyle = function(style) { this.renderer.setStyle(style); }; this.unsetStyle = function(style) { this.renderer.unsetStyle(style); }; this.getFontSize = function () { return this.getOption("fontSize") || dom.computedStyle(this.container, "fontSize"); }; this.setFontSize = function(size) { this.setOption("fontSize", size); }; this.$highlightBrackets = function() { if (this.session.$bracketHighlight) { this.session.removeMarker(this.session.$bracketHighlight); this.session.$bracketHighlight = null; } if (this.$highlightPending) { return; } var self = this; this.$highlightPending = true; setTimeout(function() { self.$highlightPending = false; var session = self.session; if (!session || !session.bgTokenizer) return; var pos = session.findMatchingBracket(self.getCursorPosition()); if (pos) { var range = new Range(pos.row, pos.column, pos.row, pos.column + 1); } else if (session.$mode.getMatching) { var range = session.$mode.getMatching(self.session); } if (range) session.$bracketHighlight = session.addMarker(range, "ace_bracket", "text"); }, 50); }; this.$highlightTags = function() { if (this.$highlightTagPending) return; var self = this; this.$highlightTagPending = true; setTimeout(function() { self.$highlightTagPending = false; var session = self.session; if (!session || !session.bgTokenizer) return; var pos = self.getCursorPosition(); var iterator = new TokenIterator(self.session, pos.row, pos.column); var token = iterator.getCurrentToken(); if (!token || !/\b(?:tag-open|tag-name)/.test(token.type)) { session.removeMarker(session.$tagHighlight); session.$tagHighlight = null; return; } if (token.type.indexOf("tag-open") != -1) { token = iterator.stepForward(); if (!token) return; } var tag = token.value; var depth = 0; var prevToken = iterator.stepBackward(); if (prevToken.value == '<'){ do { prevToken = token; token = iterator.stepForward(); if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { if (prevToken.value === '<'){ depth++; } else if (prevToken.value === '</'){ depth--; } } } while (token && depth >= 0); } else { do { token = prevToken; prevToken = iterator.stepBackward(); if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { if (prevToken.value === '<') { depth++; } else if (prevToken.value === '</') { depth--; } } } while (prevToken && depth <= 0); iterator.stepForward(); } if (!token) { session.removeMarker(session.$tagHighlight); session.$tagHighlight = null; return; } var row = iterator.getCurrentTokenRow(); var column = iterator.getCurrentTokenColumn(); var range = new Range(row, column, row, column+token.value.length); var sbm = session.$backMarkers[session.$tagHighlight]; if (session.$tagHighlight && sbm != undefined && range.compareRange(sbm.range) !== 0) { session.removeMarker(session.$tagHighlight); session.$tagHighlight = null; } if (range && !session.$tagHighlight) session.$tagHighlight = session.addMarker(range, "ace_bracket", "text"); }, 50); }; this.focus = function() { var _self = this; setTimeout(function() { _self.textInput.focus(); }); this.textInput.focus(); }; this.isFocused = function() { return this.textInput.isFocused(); }; this.blur = function() { this.textInput.blur(); }; this.onFocus = function(e) { if (this.$isFocused) return; this.$isFocused = true; this.renderer.showCursor(); this.renderer.visualizeFocus(); this._emit("focus", e); }; this.onBlur = function(e) { if (!this.$isFocused) return; this.$isFocused = false; this.renderer.hideCursor(); this.renderer.visualizeBlur(); this._emit("blur", e); }; this.$cursorChange = function() { this.renderer.updateCursor(); }; this.onDocumentChange = function(delta) { var wrap = this.session.$useWrapMode; var lastRow = (delta.start.row == delta.end.row ? delta.end.row : Infinity); this.renderer.updateLines(delta.start.row, lastRow, wrap); this._signal("change", delta); this.$cursorChange(); this.$updateHighlightActiveLine(); }; this.onTokenizerUpdate = function(e) { var rows = e.data; this.renderer.updateLines(rows.first, rows.last); }; this.onScrollTopChange = function() { this.renderer.scrollToY(this.session.getScrollTop()); }; this.onScrollLeftChange = function() { this.renderer.scrollToX(this.session.getScrollLeft()); }; this.onCursorChange = function() { this.$cursorChange(); if (!this.$blockScrolling) { config.warn("Automatically scrolling cursor into view after selection change", "this will be disabled in the next version", "set editor.$blockScrolling = Infinity to disable this message" ); this.renderer.scrollCursorIntoView(); } this.$highlightBrackets(); this.$highlightTags(); this.$updateHighlightActiveLine(); this._signal("changeSelection"); }; this.$updateHighlightActiveLine = function() { var session = this.getSession(); var highlight; if (this.$highlightActiveLine) { if ((this.$selectionStyle != "line" || !this.selection.isMultiLine())) highlight = this.getCursorPosition(); if (this.renderer.$maxLines && this.session.getLength() === 1 && !(this.renderer.$minLines > 1)) highlight = false; } if (session.$highlightLineMarker && !highlight) { session.removeMarker(session.$highlightLineMarker.id); session.$highlightLineMarker = null; } else if (!session.$highlightLineMarker && highlight) { var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); range.id = session.addMarker(range, "ace_active-line", "screenLine"); session.$highlightLineMarker = range; } else if (highlight) { session.$highlightLineMarker.start.row = highlight.row; session.$highlightLineMarker.end.row = highlight.row; session.$highlightLineMarker.start.column = highlight.column; session._signal("changeBackMarker"); } }; this.onSelectionChange = function(e) { var session = this.session; if (session.$selectionMarker) { session.removeMarker(session.$selectionMarker); } session.$selectionMarker = null; if (!this.selection.isEmpty()) { var range = this.selection.getRange(); var style = this.getSelectionStyle(); session.$selectionMarker = session.addMarker(range, "ace_selection", style); } else { this.$updateHighlightActiveLine(); } var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); this.session.highlight(re); this._signal("changeSelection"); }; this.$getSelectionHighLightRegexp = function() { var session = this.session; var selection = this.getSelectionRange(); if (selection.isEmpty() || selection.isMultiLine()) return; var startOuter = selection.start.column - 1; var endOuter = selection.end.column + 1; var line = session.getLine(selection.start.row); var lineCols = line.length; var needle = line.substring(Math.max(startOuter, 0), Math.min(endOuter, lineCols)); if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || (endOuter <= lineCols && /[\w\d]$/.test(needle))) return; needle = line.substring(selection.start.column, selection.end.column); if (!/^[\w\d]+$/.test(needle)) return; var re = this.$search.$assembleRegExp({ wholeWord: true, caseSensitive: true, needle: needle }); return re; }; this.onChangeFrontMarker = function() { this.renderer.updateFrontMarkers(); }; this.onChangeBackMarker = function() { this.renderer.updateBackMarkers(); }; this.onChangeBreakpoint = function() { this.renderer.updateBreakpoints(); }; this.onChangeAnnotation = function() { this.renderer.setAnnotations(this.session.getAnnotations()); }; this.onChangeMode = function(e) { this.renderer.updateText(); this._emit("changeMode", e); }; this.onChangeWrapLimit = function() { this.renderer.updateFull(); }; this.onChangeWrapMode = function() { this.renderer.onResize(true); }; this.onChangeFold = function() { this.$updateHighlightActiveLine(); this.renderer.updateFull(); }; this.getSelectedText = function() { return this.session.getTextRange(this.getSelectionRange()); }; this.getCopyText = function() { var text = this.getSelectedText(); this._signal("copy", text); return text; }; this.onCopy = function() { this.commands.exec("copy", this); }; this.onCut = function() { this.commands.exec("cut", this); }; this.onPaste = function(text, event) { var e = {text: text, event: event}; this.commands.exec("paste", this, e); }; this.$handlePaste = function(e) { if (typeof e == "string") e = {text: e}; this._signal("paste", e); var text = e.text; if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { this.insert(text); } else { var lines = text.split(/\r\n|\r|\n/); var ranges = this.selection.rangeList.ranges; if (lines.length > ranges.length || lines.length < 2 || !lines[1]) return this.commands.exec("insertstring", this, text); for (var i = ranges.length; i--;) { var range = ranges[i]; if (!range.isEmpty()) this.session.remove(range); this.session.insert(range.start, lines[i]); } } }; this.execCommand = function(command, args) { return this.commands.exec(command, this, args); }; this.insert = function(text, pasted) { var session = this.session; var mode = session.getMode(); var cursor = this.getCursorPosition(); if (this.getBehavioursEnabled() && !pasted) { var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); if (transform) { if (text !== transform.text) { this.session.mergeUndoDeltas = false; this.$mergeNextCommand = false; } text = transform.text; } } if (text == "\t") text = this.session.getTabString(); if (!this.selection.isEmpty()) { var range = this.getSelectionRange(); cursor = this.session.remove(range); this.clearSelection(); } else if (this.session.getOverwrite()) { var range = new Range.fromPoints(cursor, cursor); range.end.column += text.length; this.session.remove(range); } if (text == "\n" || text == "\r\n") { var line = session.getLine(cursor.row); if (cursor.column > line.search(/\S|$/)) { var d = line.substr(cursor.column).search(/\S|$/); session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); } } this.clearSelection(); var start = cursor.column; var lineState = session.getState(cursor.row); var line = session.getLine(cursor.row); var shouldOutdent = mode.checkOutdent(lineState, line, text); var end = session.insert(cursor, text); if (transform && transform.selection) { if (transform.selection.length == 2) { // Transform relative to the current column this.selection.setSelectionRange( new Range(cursor.row, start + transform.selection[0], cursor.row, start + transform.selection[1])); } else { // Transform relative to the current row. this.selection.setSelectionRange( new Range(cursor.row + transform.selection[0], transform.selection[1], cursor.row + transform.selection[2], transform.selection[3])); } } if (session.getDocument().isNewLine(text)) { var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); session.insert({row: cursor.row+1, column: 0}, lineIndent); } if (shouldOutdent) mode.autoOutdent(lineState, session, cursor.row); }; this.onTextInput = function(text) { this.keyBinding.onTextInput(text); }; this.onCommandKey = function(e, hashId, keyCode) { this.keyBinding.onCommandKey(e, hashId, keyCode); }; this.setOverwrite = function(overwrite) { this.session.setOverwrite(overwrite); }; this.getOverwrite = function() { return this.session.getOverwrite(); }; this.toggleOverwrite = function() { this.session.toggleOverwrite(); }; this.setScrollSpeed = function(speed) { this.setOption("scrollSpeed", speed); }; this.getScrollSpeed = function() { return this.getOption("scrollSpeed"); }; this.setDragDelay = function(dragDelay) { this.setOption("dragDelay", dragDelay); }; this.getDragDelay = function() { return this.getOption("dragDelay"); }; this.setSelectionStyle = function(val) { this.setOption("selectionStyle", val); }; this.getSelectionStyle = function() { return this.getOption("selectionStyle"); }; this.setHighlightActiveLine = function(shouldHighlight) { this.setOption("highlightActiveLine", shouldHighlight); }; this.getHighlightActiveLine = function() { return this.getOption("highlightActiveLine"); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.setHighlightSelectedWord = function(shouldHighlight) { this.setOption("highlightSelectedWord", shouldHighlight); }; this.getHighlightSelectedWord = function() { return this.$highlightSelectedWord; }; this.setAnimatedScroll = function(shouldAnimate){ this.renderer.setAnimatedScroll(shouldAnimate); }; this.getAnimatedScroll = function(){ return this.renderer.getAnimatedScroll(); }; this.setShowInvisibles = function(showInvisibles) { this.renderer.setShowInvisibles(showInvisibles); }; this.getShowInvisibles = function() { return this.renderer.getShowInvisibles(); }; this.setDisplayIndentGuides = function(display) { this.renderer.setDisplayIndentGuides(display); }; this.getDisplayIndentGuides = function() { return this.renderer.getDisplayIndentGuides(); }; this.setShowPrintMargin = function(showPrintMargin) { this.renderer.setShowPrintMargin(showPrintMargin); }; this.getShowPrintMargin = function() { return this.renderer.getShowPrintMargin(); }; this.setPrintMarginColumn = function(showPrintMargin) { this.renderer.setPrintMarginColumn(showPrintMargin); }; this.getPrintMarginColumn = function() { return this.renderer.getPrintMarginColumn(); }; this.setReadOnly = function(readOnly) { this.setOption("readOnly", readOnly); }; this.getReadOnly = function() { return this.getOption("readOnly"); }; this.setBehavioursEnabled = function (enabled) { this.setOption("behavioursEnabled", enabled); }; this.getBehavioursEnabled = function () { return this.getOption("behavioursEnabled"); }; this.setWrapBehavioursEnabled = function (enabled) { this.setOption("wrapBehavioursEnabled", enabled); }; this.getWrapBehavioursEnabled = function () { return this.getOption("wrapBehavioursEnabled"); }; this.setShowFoldWidgets = function(show) { this.setOption("showFoldWidgets", show); }; this.getShowFoldWidgets = function() { return this.getOption("showFoldWidgets"); }; this.setFadeFoldWidgets = function(fade) { this.setOption("fadeFoldWidgets", fade); }; this.getFadeFoldWidgets = function() { return this.getOption("fadeFoldWidgets"); }; this.remove = function(dir) { if (this.selection.isEmpty()){ if (dir == "left") this.selection.selectLeft(); else this.selection.selectRight(); } var range = this.getSelectionRange(); if (this.getBehavioursEnabled()) { var session = this.session; var state = session.getState(range.start.row); var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); if (range.end.column === 0) { var text = session.getTextRange(range); if (text[text.length - 1] == "\n") { var line = session.getLine(range.end.row); if (/^\s+$/.test(line)) { range.end.column = line.length; } } } if (new_range) range = new_range; } this.session.remove(range); this.clearSelection(); }; this.removeWordRight = function() { if (this.selection.isEmpty()) this.selection.selectWordRight(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeWordLeft = function() { if (this.selection.isEmpty()) this.selection.selectWordLeft(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineStart = function() { if (this.selection.isEmpty()) this.selection.selectLineStart(); this.session.remove(this.getSelectionRange()); this.clearSelection(); }; this.removeToLineEnd = function() { if (this.selection.isEmpty()) this.selection.selectLineEnd(); var range = this.getSelectionRange(); if (range.start.column == range.end.column && range.start.row == range.end.row) { range.end.column = 0; range.end.row++; } this.session.remove(range); this.clearSelection(); }; this.splitLine = function() { if (!this.selection.isEmpty()) { this.session.remove(this.getSelectionRange()); this.clearSelection(); } var cursor = this.getCursorPosition(); this.insert("\n"); this.moveCursorToPosition(cursor); }; this.transposeLetters = function() { if (!this.selection.isEmpty()) { return; } var cursor = this.getCursorPosition(); var column = cursor.column; if (column === 0) return; var line = this.session.getLine(cursor.row); var swap, range; if (column < line.length) { swap = line.charAt(column) + line.charAt(column-1); range = new Range(cursor.row, column-1, cursor.row, column+1); } else { swap = line.charAt(column-1) + line.charAt(column-2); range = new Range(cursor.row, column-2, cursor.row, column); } this.session.replace(range, swap); }; this.toLowerCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toLowerCase()); this.selection.setSelectionRange(originalRange); }; this.toUpperCase = function() { var originalRange = this.getSelectionRange(); if (this.selection.isEmpty()) { this.selection.selectWord(); } var range = this.getSelectionRange(); var text = this.session.getTextRange(range); this.session.replace(range, text.toUpperCase()); this.selection.setSelectionRange(originalRange); }; this.indent = function() { var session = this.session; var range = this.getSelectionRange(); if (range.start.row < range.end.row) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } else if (range.start.column < range.end.column) { var text = session.getTextRange(range); if (!/^\s+$/.test(text)) { var rows = this.$getSelectedRows(); session.indentRows(rows.first, rows.last, "\t"); return; } } var line = session.getLine(range.start.row); var position = range.start; var size = session.getTabSize(); var column = session.documentToScreenColumn(position.row, position.column); if (this.session.getUseSoftTabs()) { var count = (size - column % size); var indentString = lang.stringRepeat(" ", count); } else { var count = column % size; while (line[range.start.column - 1] == " " && count) { range.start.column--; count--; } this.selection.setSelectionRange(range); indentString = "\t"; } return this.insert(indentString); }; this.blockIndent = function() { var rows = this.$getSelectedRows(); this.session.indentRows(rows.first, rows.last, "\t"); }; this.blockOutdent = function() { var selection = this.session.getSelection(); this.session.outdentRows(selection.getRange()); }; this.sortLines = function() { var rows = this.$getSelectedRows(); var session = this.session; var lines = []; for (i = rows.first; i <= rows.last; i++) lines.push(session.getLine(i)); lines.sort(function(a, b) { if (a.toLowerCase() < b.toLowerCase()) return -1; if (a.toLowerCase() > b.toLowerCase()) return 1; return 0; }); var deleteRange = new Range(0, 0, 0, 0); for (var i = rows.first; i <= rows.last; i++) { var line = session.getLine(i); deleteRange.start.row = i; deleteRange.end.row = i; deleteRange.end.column = line.length; session.replace(deleteRange, lines[i-rows.first]); } }; this.toggleCommentLines = function() { var state = this.session.getState(this.getCursorPosition().row); var rows = this.$getSelectedRows(); this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); }; this.toggleBlockComment = function() { var cursor = this.getCursorPosition(); var state = this.session.getState(cursor.row); var range = this.getSelectionRange(); this.session.getMode().toggleBlockComment(state, this.session, range, cursor); }; this.getNumberAt = function(row, column) { var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; _numberRx.lastIndex = 0; var s = this.session.getLine(row); while (_numberRx.lastIndex < column) { var m = _numberRx.exec(s); if(m.index <= column && m.index+m[0].length >= column){ var number = { value: m[0], start: m.index, end: m.index+m[0].length }; return number; } } return null; }; this.modifyNumber = function(amount) { var row = this.selection.getCursor().row; var column = this.selection.getCursor().column; var charRange = new Range(row, column-1, row, column); var c = this.session.getTextRange(charRange); if (!isNaN(parseFloat(c)) && isFinite(c)) { var nr = this.getNumberAt(row, column); if (nr) { var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; var decimals = nr.start + nr.value.length - fp; var t = parseFloat(nr.value); t *= Math.pow(10, decimals); if(fp !== nr.end && column < fp){ amount *= Math.pow(10, nr.end - column - 1); } else { amount *= Math.pow(10, nr.end - column); } t += amount; t /= Math.pow(10, decimals); var nnr = t.toFixed(decimals); var replaceRange = new Range(row, nr.start, row, nr.end); this.session.replace(replaceRange, nnr); this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length)); } } }; this.removeLines = function() { var rows = this.$getSelectedRows(); this.session.removeFullLines(rows.first, rows.last); this.clearSelection(); }; this.duplicateSelection = function() { var sel = this.selection; var doc = this.session; var range = sel.getRange(); var reverse = sel.isBackwards(); if (range.isEmpty()) { var row = range.start.row; doc.duplicateLines(row, row); } else { var point = reverse ? range.start : range.end; var endPoint = doc.insert(point, doc.getTextRange(range), false); range.start = point; range.end = endPoint; sel.setSelectionRange(range, reverse); } }; this.moveLinesDown = function() { this.$moveLines(1, false); }; this.moveLinesUp = function() { this.$moveLines(-1, false); }; this.moveText = function(range, toPosition, copy) { return this.session.moveText(range, toPosition, copy); }; this.copyLinesUp = function() { this.$moveLines(-1, true); }; this.copyLinesDown = function() { this.$moveLines(1, true); }; this.$moveLines = function(dir, copy) { var rows, moved; var selection = this.selection; if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { var range = selection.toOrientedRange(); rows = this.$getSelectedRows(range); moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); if (copy && dir == -1) moved = 0; range.moveBy(moved, 0); selection.fromOrientedRange(range); } else { var ranges = selection.rangeList.ranges; selection.rangeList.detach(this.session); this.inVirtualSelectionMode = true; var diff = 0; var totalDiff = 0; var l = ranges.length; for (var i = 0; i < l; i++) { var rangeIndex = i; ranges[i].moveBy(diff, 0); rows = this.$getSelectedRows(ranges[i]); var first = rows.first; var last = rows.last; while (++i < l) { if (totalDiff) ranges[i].moveBy(totalDiff, 0); var subRows = this.$getSelectedRows(ranges[i]); if (copy && subRows.first != last) break; else if (!copy && subRows.first > last + 1) break; last = subRows.last; } i--; diff = this.session.$moveLines(first, last, copy ? 0 : dir); if (copy && dir == -1) rangeIndex = i + 1; while (rangeIndex <= i) { ranges[rangeIndex].moveBy(diff, 0); rangeIndex++; } if (!copy) diff = 0; totalDiff += diff; } selection.fromOrientedRange(selection.ranges[0]); selection.rangeList.attach(this.session); this.inVirtualSelectionMode = false; } }; this.$getSelectedRows = function(range) { range = (range || this.getSelectionRange()).collapseRows(); return { first: this.session.getRowFoldStart(range.start.row), last: this.session.getRowFoldEnd(range.end.row) }; }; this.onCompositionStart = function(text) { this.renderer.showComposition(this.getCursorPosition()); }; this.onCompositionUpdate = function(text) { this.renderer.setCompositionText(text); }; this.onCompositionEnd = function() { this.renderer.hideComposition(); }; this.getFirstVisibleRow = function() { return this.renderer.getFirstVisibleRow(); }; this.getLastVisibleRow = function() { return this.renderer.getLastVisibleRow(); }; this.isRowVisible = function(row) { return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); }; this.isRowFullyVisible = function(row) { return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); }; this.$getVisibleRowCount = function() { return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; }; this.$moveByPage = function(dir, select) { var renderer = this.renderer; var config = this.renderer.layerConfig; var rows = dir * Math.floor(config.height / config.lineHeight); this.$blockScrolling++; if (select === true) { this.selection.$moveSelection(function(){ this.moveCursorBy(rows, 0); }); } else if (select === false) { this.selection.moveCursorBy(rows, 0); this.selection.clearSelection(); } this.$blockScrolling--; var scrollTop = renderer.scrollTop; renderer.scrollBy(0, rows * config.lineHeight); if (select != null) renderer.scrollCursorIntoView(null, 0.5); renderer.animateScrolling(scrollTop); }; this.selectPageDown = function() { this.$moveByPage(1, true); }; this.selectPageUp = function() { this.$moveByPage(-1, true); }; this.gotoPageDown = function() { this.$moveByPage(1, false); }; this.gotoPageUp = function() { this.$moveByPage(-1, false); }; this.scrollPageDown = function() { this.$moveByPage(1); }; this.scrollPageUp = function() { this.$moveByPage(-1); }; this.scrollToRow = function(row) { this.renderer.scrollToRow(row); }; this.scrollToLine = function(line, center, animate, callback) { this.renderer.scrollToLine(line, center, animate, callback); }; this.centerSelection = function() { var range = this.getSelectionRange(); var pos = { row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) }; this.renderer.alignCursor(pos, 0.5); }; this.getCursorPosition = function() { return this.selection.getCursor(); }; this.getCursorPositionScreen = function() { return this.session.documentToScreenPosition(this.getCursorPosition()); }; this.getSelectionRange = function() { return this.selection.getRange(); }; this.selectAll = function() { this.$blockScrolling += 1; this.selection.selectAll(); this.$blockScrolling -= 1; }; this.clearSelection = function() { this.selection.clearSelection(); }; this.moveCursorTo = function(row, column) { this.selection.moveCursorTo(row, column); }; this.moveCursorToPosition = function(pos) { this.selection.moveCursorToPosition(pos); }; this.jumpToMatching = function(select, expand) { var cursor = this.getCursorPosition(); var iterator = new TokenIterator(this.session, cursor.row, cursor.column); var prevToken = iterator.getCurrentToken(); var token = prevToken || iterator.stepForward(); if (!token) return; var matchType; var found = false; var depth = {}; var i = cursor.column - token.start; var bracketType; var brackets = { ")": "(", "(": "(", "]": "[", "[": "[", "{": "{", "}": "{" }; do { if (token.value.match(/[{}()\[\]]/g)) { for (; i < token.value.length && !found; i++) { if (!brackets[token.value[i]]) { continue; } bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); if (isNaN(depth[bracketType])) { depth[bracketType] = 0; } switch (token.value[i]) { case '(': case '[': case '{': depth[bracketType]++; break; case ')': case ']': case '}': depth[bracketType]--; if (depth[bracketType] === -1) { matchType = 'bracket'; found = true; } break; } } } else if (token && token.type.indexOf('tag-name') !== -1) { if (isNaN(depth[token.value])) { depth[token.value] = 0; } if (prevToken.value === '<') { depth[token.value]++; } else if (prevToken.value === '</') { depth[token.value]--; } if (depth[token.value] === -1) { matchType = 'tag'; found = true; } } if (!found) { prevToken = token; token = iterator.stepForward(); i = 0; } } while (token && !found); if (!matchType) return; var range, pos; if (matchType === 'bracket') { range = this.session.getBracketRange(cursor); if (!range) { range = new Range( iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + i - 1 ); pos = range.start; if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2) range = this.session.getBracketRange(pos); } } else if (matchType === 'tag') { if (token && token.type.indexOf('tag-name') !== -1) var tag = token.value; else return; range = new Range( iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2, iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() - 2 ); if (range.compare(cursor.row, cursor.column) === 0) { found = false; do { token = prevToken; prevToken = iterator.stepBackward(); if (prevToken) { if (prevToken.type.indexOf('tag-close') !== -1) { range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1); } if (token.value === tag && token.type.indexOf('tag-name') !== -1) { if (prevToken.value === '<') { depth[tag]++; } else if (prevToken.value === '</') { depth[tag]--; } if (depth[tag] === 0) found = true; } } } while (prevToken && !found); } if (token && token.type.indexOf('tag-name')) { pos = range.start; if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2) pos = range.end; } } pos = range && range.cursor || pos; if (pos) { if (select) { if (range && expand) { this.selection.setRange(range); } else if (range && range.isEqual(this.getSelectionRange())) { this.clearSelection(); } else { this.selection.selectTo(pos.row, pos.column); } } else { this.selection.moveTo(pos.row, pos.column); } } }; this.gotoLine = function(lineNumber, column, animate) { this.selection.clearSelection(); this.session.unfold({row: lineNumber - 1, column: column || 0}); this.$blockScrolling += 1; this.exitMultiSelectMode && this.exitMultiSelectMode(); this.moveCursorTo(lineNumber - 1, column || 0); this.$blockScrolling -= 1; if (!this.isRowFullyVisible(lineNumber - 1)) this.scrollToLine(lineNumber - 1, true, animate); }; this.navigateTo = function(row, column) { this.selection.moveTo(row, column); }; this.navigateUp = function(times) { if (this.selection.isMultiLine() && !this.selection.isBackwards()) { var selectionStart = this.selection.anchor.getPosition(); return this.moveCursorToPosition(selectionStart); } this.selection.clearSelection(); this.selection.moveCursorBy(-times || -1, 0); }; this.navigateDown = function(times) { if (this.selection.isMultiLine() && this.selection.isBackwards()) { var selectionEnd = this.selection.anchor.getPosition(); return this.moveCursorToPosition(selectionEnd); } this.selection.clearSelection(); this.selection.moveCursorBy(times || 1, 0); }; this.navigateLeft = function(times) { if (!this.selection.isEmpty()) { var selectionStart = this.getSelectionRange().start; this.moveCursorToPosition(selectionStart); } else { times = times || 1; while (times--) { this.selection.moveCursorLeft(); } } this.clearSelection(); }; this.navigateRight = function(times) { if (!this.selection.isEmpty()) { var selectionEnd = this.getSelectionRange().end; this.moveCursorToPosition(selectionEnd); } else { times = times || 1; while (times--) { this.selection.moveCursorRight(); } } this.clearSelection(); }; this.navigateLineStart = function() { this.selection.moveCursorLineStart(); this.clearSelection(); }; this.navigateLineEnd = function() { this.selection.moveCursorLineEnd(); this.clearSelection(); }; this.navigateFileEnd = function() { this.selection.moveCursorFileEnd(); this.clearSelection(); }; this.navigateFileStart = function() { this.selection.moveCursorFileStart(); this.clearSelection(); }; this.navigateWordRight = function() { this.selection.moveCursorWordRight(); this.clearSelection(); }; this.navigateWordLeft = function() { this.selection.moveCursorWordLeft(); this.clearSelection(); }; this.replace = function(replacement, options) { if (options) this.$search.set(options); var range = this.$search.find(this.session); var replaced = 0; if (!range) return replaced; if (this.$tryReplace(range, replacement)) { replaced = 1; } if (range !== null) { this.selection.setSelectionRange(range); this.renderer.scrollSelectionIntoView(range.start, range.end); } return replaced; }; this.replaceAll = function(replacement, options) { if (options) { this.$search.set(options); } var ranges = this.$search.findAll(this.session); var replaced = 0; if (!ranges.length) return replaced; this.$blockScrolling += 1; var selection = this.getSelectionRange(); this.selection.moveTo(0, 0); for (var i = ranges.length - 1; i >= 0; --i) { if(this.$tryReplace(ranges[i], replacement)) { replaced++; } } this.selection.setSelectionRange(selection); this.$blockScrolling -= 1; return replaced; }; this.$tryReplace = function(range, replacement) { var input = this.session.getTextRange(range); replacement = this.$search.replace(input, replacement); if (replacement !== null) { range.end = this.session.replace(range, replacement); return range; } else { return null; } }; this.getLastSearchOptions = function() { return this.$search.getOptions(); }; this.find = function(needle, options, animate) { if (!options) options = {}; if (typeof needle == "string" || needle instanceof RegExp) options.needle = needle; else if (typeof needle == "object") oop.mixin(options, needle); var range = this.selection.getRange(); if (options.needle == null) { needle = this.session.getTextRange(range) || this.$search.$options.needle; if (!needle) { range = this.session.getWordRange(range.start.row, range.start.column); needle = this.session.getTextRange(range); } this.$search.set({needle: needle}); } this.$search.set(options); if (!options.start) this.$search.set({start: range}); var newRange = this.$search.find(this.session); if (options.preventScroll) return newRange; if (newRange) { this.revealRange(newRange, animate); return newRange; } if (options.backwards) range.start = range.end; else range.end = range.start; this.selection.setRange(range); }; this.findNext = function(options, animate) { this.find({skipCurrent: true, backwards: false}, options, animate); }; this.findPrevious = function(options, animate) { this.find(options, {skipCurrent: true, backwards: true}, animate); }; this.revealRange = function(range, animate) { this.$blockScrolling += 1; this.session.unfold(range); this.selection.setSelectionRange(range); this.$blockScrolling -= 1; var scrollTop = this.renderer.scrollTop; this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); if (animate !== false) this.renderer.animateScrolling(scrollTop); }; this.undo = function() { this.$blockScrolling++; this.session.getUndoManager().undo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.redo = function() { this.$blockScrolling++; this.session.getUndoManager().redo(); this.$blockScrolling--; this.renderer.scrollCursorIntoView(null, 0.5); }; this.destroy = function() { this.renderer.destroy(); this._signal("destroy", this); if (this.session) { this.session.destroy(); } }; this.setAutoScrollEditorIntoView = function(enable) { if (!enable) return; var rect; var self = this; var shouldScroll = false; if (!this.$scrollAnchor) this.$scrollAnchor = document.createElement("div"); var scrollAnchor = this.$scrollAnchor; scrollAnchor.style.cssText = "position:absolute"; this.container.insertBefore(scrollAnchor, this.container.firstChild); var onChangeSelection = this.on("changeSelection", function() { shouldScroll = true; }); var onBeforeRender = this.renderer.on("beforeRender", function() { if (shouldScroll) rect = self.renderer.container.getBoundingClientRect(); }); var onAfterRender = this.renderer.on("afterRender", function() { if (shouldScroll && rect && (self.isFocused() || self.searchBox && self.searchBox.isFocused()) ) { var renderer = self.renderer; var pos = renderer.$cursorLayer.$pixelPos; var config = renderer.layerConfig; var top = pos.top - config.offset; if (pos.top >= 0 && top + rect.top < 0) { shouldScroll = true; } else if (pos.top < config.height && pos.top + rect.top + config.lineHeight > window.innerHeight) { shouldScroll = false; } else { shouldScroll = null; } if (shouldScroll != null) { scrollAnchor.style.top = top + "px"; scrollAnchor.style.left = pos.left + "px"; scrollAnchor.style.height = config.lineHeight + "px"; scrollAnchor.scrollIntoView(shouldScroll); } shouldScroll = rect = null; } }); this.setAutoScrollEditorIntoView = function(enable) { if (enable) return; delete this.setAutoScrollEditorIntoView; this.off("changeSelection", onChangeSelection); this.renderer.off("afterRender", onAfterRender); this.renderer.off("beforeRender", onBeforeRender); }; }; this.$resetCursorStyle = function() { var style = this.$cursorStyle || "ace"; var cursorLayer = this.renderer.$cursorLayer; if (!cursorLayer) return; cursorLayer.setSmoothBlinking(/smooth/.test(style)); cursorLayer.isBlinking = !this.$readOnly && style != "wide"; dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); }; }).call(Editor.prototype); config.defineOptions(Editor.prototype, "editor", { selectionStyle: { set: function(style) { this.onSelectionChange(); this._signal("changeSelectionStyle", {data: style}); }, initialValue: "line" }, highlightActiveLine: { set: function() {this.$updateHighlightActiveLine();}, initialValue: true }, highlightSelectedWord: { set: function(shouldHighlight) {this.$onSelectionChange();}, initialValue: true }, readOnly: { set: function(readOnly) { this.$resetCursorStyle(); }, initialValue: false }, cursorStyle: { set: function(val) { this.$resetCursorStyle(); }, values: ["ace", "slim", "smooth", "wide"], initialValue: "ace" }, mergeUndoDeltas: { values: [false, true, "always"], initialValue: true }, behavioursEnabled: {initialValue: true}, wrapBehavioursEnabled: {initialValue: true}, autoScrollEditorIntoView: { set: function(val) {this.setAutoScrollEditorIntoView(val)} }, keyboardHandler: { set: function(val) { this.setKeyboardHandler(val); }, get: function() { return this.keybindingId; }, handlesSet: true }, hScrollBarAlwaysVisible: "renderer", vScrollBarAlwaysVisible: "renderer", highlightGutterLine: "renderer", animatedScroll: "renderer", showInvisibles: "renderer", showPrintMargin: "renderer", printMarginColumn: "renderer", printMargin: "renderer", fadeFoldWidgets: "renderer", showFoldWidgets: "renderer", showLineNumbers: "renderer", showGutter: "renderer", displayIndentGuides: "renderer", fontSize: "renderer", fontFamily: "renderer", maxLines: "renderer", minLines: "renderer", scrollPastEnd: "renderer", fixedWidthGutter: "renderer", theme: "renderer", scrollSpeed: "$mouseHandler", dragDelay: "$mouseHandler", dragEnabled: "$mouseHandler", focusTimout: "$mouseHandler", tooltipFollowsMouse: "$mouseHandler", firstLineNumber: "session", overwrite: "session", newLineMode: "session", useWorker: "session", useSoftTabs: "session", tabSize: "session", wrap: "session", indentedSoftWrap: "session", foldStyle: "session", mode: "session" }); exports.Editor = Editor; }); ace.define("ace/undomanager",["require","exports","module"], function(require, exports, module) { "use strict"; var UndoManager = function() { this.reset(); }; (function() { this.execute = function(options) { var deltaSets = options.args[0]; this.$doc = options.args[1]; if (options.merge && this.hasUndo()){ this.dirtyCounter--; deltaSets = this.$undoStack.pop().concat(deltaSets); } this.$undoStack.push(deltaSets); this.$redoStack = []; if (this.dirtyCounter < 0) { this.dirtyCounter = NaN; } this.dirtyCounter++; }; this.undo = function(dontSelect) { var deltaSets = this.$undoStack.pop(); var undoSelectionRange = null; if (deltaSets) { undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect); this.$redoStack.push(deltaSets); this.dirtyCounter--; } return undoSelectionRange; }; this.redo = function(dontSelect) { var deltaSets = this.$redoStack.pop(); var redoSelectionRange = null; if (deltaSets) { redoSelectionRange = this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect); this.$undoStack.push(deltaSets); this.dirtyCounter++; } return redoSelectionRange; }; this.reset = function() { this.$undoStack = []; this.$redoStack = []; this.dirtyCounter = 0; }; this.hasUndo = function() { return this.$undoStack.length > 0; }; this.hasRedo = function() { return this.$redoStack.length > 0; }; this.markClean = function() { this.dirtyCounter = 0; }; this.isClean = function() { return this.dirtyCounter === 0; }; this.$serializeDeltas = function(deltaSets) { return cloneDeltaSetsObj(deltaSets, $serializeDelta); }; this.$deserializeDeltas = function(deltaSets) { return cloneDeltaSetsObj(deltaSets, $deserializeDelta); }; function $serializeDelta(delta){ return { action: delta.action, start: delta.start, end: delta.end, lines: delta.lines.length == 1 ? null : delta.lines, text: delta.lines.length == 1 ? delta.lines[0] : null }; } function $deserializeDelta(delta) { return { action: delta.action, start: delta.start, end: delta.end, lines: delta.lines || [delta.text] }; } function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) { var deltaSets_new = new Array(deltaSets_old.length); for (var i = 0; i < deltaSets_old.length; i++) { var deltaSet_old = deltaSets_old[i]; var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)}; for (var j = 0; j < deltaSet_old.deltas.length; j++) { var delta_old = deltaSet_old.deltas[j]; deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old); } deltaSets_new[i] = deltaSet_new; } return deltaSets_new; } }).call(UndoManager.prototype); exports.UndoManager = UndoManager; }); ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var oop = require("../lib/oop"); var lang = require("../lib/lang"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Gutter = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_gutter-layer"; parentEl.appendChild(this.element); this.setShowFoldWidgets(this.$showFoldWidgets); this.gutterWidth = 0; this.$annotations = []; this.$updateAnnotations = this.$updateAnnotations.bind(this); this.$cells = []; }; (function() { oop.implement(this, EventEmitter); this.setSession = function(session) { if (this.session) this.session.removeEventListener("change", this.$updateAnnotations); this.session = session; if (session) session.on("change", this.$updateAnnotations); }; this.addGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.addGutterDecoration"); this.session.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ if (window.console) console.warn && console.warn("deprecated use session.removeGutterDecoration"); this.session.removeGutterDecoration(row, className); }; this.setAnnotations = function(annotations) { this.$annotations = []; for (var i = 0; i < annotations.length; i++) { var annotation = annotations[i]; var row = annotation.row; var rowInfo = this.$annotations[row]; if (!rowInfo) rowInfo = this.$annotations[row] = {text: []}; var annoText = annotation.text; annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; if (rowInfo.text.indexOf(annoText) === -1) rowInfo.text.push(annoText); var type = annotation.type; 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"; } }; this.$updateAnnotations = function (delta) { if (!this.$annotations.length) return; var firstRow = delta.start.row; var len = delta.end.row - firstRow; if (len === 0) { } else if (delta.action == 'remove') { this.$annotations.splice(firstRow, len + 1, null); } else { var args = new Array(len + 1); args.unshift(firstRow, 1); this.$annotations.splice.apply(this.$annotations, args); } }; this.update = function(config) { var session = this.session; var firstRow = config.firstRow; var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar session.getLength() - 1); var fold = session.getNextFoldLine(firstRow); var foldStart = fold ? fold.start.row : Infinity; var foldWidgets = this.$showFoldWidgets && session.foldWidgets; var breakpoints = session.$breakpoints; var decorations = session.$decorations; var firstLineNumber = session.$firstLineNumber; var lastLineNumber = 0; var gutterRenderer = session.gutterRenderer || this.$renderer; var cell = null; var index = -1; var row = firstRow; while (true) { if (row > foldStart) { row = fold.end.row + 1; fold = session.getNextFoldLine(row, fold); foldStart = fold ? fold.start.row : Infinity; } if (row > lastRow) { while (this.$cells.length > index + 1) { cell = this.$cells.pop(); this.element.removeChild(cell.element); } break; } cell = this.$cells[++index]; if (!cell) { cell = {element: null, textNode: null, foldWidget: null}; cell.element = dom.createElement("div"); cell.textNode = document.createTextNode(''); cell.element.appendChild(cell.textNode); this.element.appendChild(cell.element); this.$cells[index] = cell; } var className = "ace_gutter-cell "; if (breakpoints[row]) className += breakpoints[row]; if (decorations[row]) className += decorations[row]; if (this.$annotations[row]) className += this.$annotations[row].className; if (cell.element.className != className) cell.element.className = className; var height = session.getRowLength(row) * config.lineHeight + "px"; if (height != cell.element.style.height) cell.element.style.height = height; if (foldWidgets) { var c = foldWidgets[row]; if (c == null) c = foldWidgets[row] = session.getFoldWidget(row); } if (c) { if (!cell.foldWidget) { cell.foldWidget = dom.createElement("span"); cell.element.appendChild(cell.foldWidget); } var className = "ace_fold-widget ace_" + c; if (c == "start" && row == foldStart && row < fold.end.row) className += " ace_closed"; else className += " ace_open"; if (cell.foldWidget.className != className) cell.foldWidget.className = className; var height = config.lineHeight + "px"; if (cell.foldWidget.style.height != height) cell.foldWidget.style.height = height; } else { if (cell.foldWidget) { cell.element.removeChild(cell.foldWidget); cell.foldWidget = null; } } var text = lastLineNumber = gutterRenderer ? gutterRenderer.getText(session, row) : row + firstLineNumber; if (text != cell.textNode.data) cell.textNode.data = text; row++; } this.element.style.height = config.minHeight + "px"; if (this.$fixedWidth || session.$useWrapMode) lastLineNumber = session.getLength() + firstLineNumber; var gutterWidth = gutterRenderer ? gutterRenderer.getWidth(session, lastLineNumber, config) : lastLineNumber.toString().length * config.characterWidth; var padding = this.$padding || this.$computePadding(); gutterWidth += padding.left + padding.right; if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { this.gutterWidth = gutterWidth; this.element.style.width = Math.ceil(this.gutterWidth) + "px"; this._emit("changeGutterWidth", gutterWidth); } }; this.$fixedWidth = false; this.$showLineNumbers = true; this.$renderer = ""; this.setShowLineNumbers = function(show) { this.$renderer = !show && { getWidth: function() {return ""}, getText: function() {return ""} }; }; this.getShowLineNumbers = function() { return this.$showLineNumbers; }; this.$showFoldWidgets = true; this.setShowFoldWidgets = function(show) { if (show) dom.addCssClass(this.element, "ace_folding-enabled"); else dom.removeCssClass(this.element, "ace_folding-enabled"); this.$showFoldWidgets = show; this.$padding = null; }; this.getShowFoldWidgets = function() { return this.$showFoldWidgets; }; this.$computePadding = function() { if (!this.element.firstChild) return {left: 0, right: 0}; var style = dom.computedStyle(this.element.firstChild); this.$padding = {}; this.$padding.left = parseInt(style.paddingLeft) + 1 || 0; this.$padding.right = parseInt(style.paddingRight) || 0; return this.$padding; }; this.getRegion = function(point) { var padding = this.$padding || this.$computePadding(); var rect = this.element.getBoundingClientRect(); if (point.x < padding.left + rect.left) return "markers"; if (this.$showFoldWidgets && point.x > rect.right - padding.right) return "foldWidgets"; }; }).call(Gutter.prototype); exports.Gutter = Gutter; }); ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var dom = require("../lib/dom"); var Marker = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_marker-layer"; parentEl.appendChild(this.element); }; (function() { this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setMarkers = function(markers) { this.markers = markers; }; this.update = function(config) { var config = config || this.config; if (!config) return; this.config = config; var html = []; for (var key in this.markers) { var marker = this.markers[key]; if (!marker.range) { marker.update(html, this, this.session, config); continue; } var range = marker.range.clipRows(config.firstRow, config.lastRow); if (range.isEmpty()) continue; range = range.toScreenRange(this.session); if (marker.renderer) { var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; marker.renderer(html, range, left, top, config); } else if (marker.type == "fullLine") { this.drawFullLineMarker(html, range, marker.clazz, config); } else if (marker.type == "screenLine") { this.drawScreenLineMarker(html, range, marker.clazz, config); } else if (range.isMultiLine()) { if (marker.type == "text") this.drawTextMarker(html, range, marker.clazz, config); else this.drawMultiLineMarker(html, range, marker.clazz, config); } else { this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); } } this.element.innerHTML = html.join(""); }; this.$getTop = function(row, layerConfig) { return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; }; function getBorderClass(tl, tr, br, bl) { return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); } this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) { var session = this.session; var start = range.start.row; var end = range.end.row; var row = start; var prev = 0; var curr = 0; var next = session.getScreenLastRowColumn(row); var lineRange = new Range(row, range.start.column, row, curr); for (; row <= end; row++) { lineRange.start.row = lineRange.end.row = row; lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); lineRange.end.column = next; prev = curr; curr = next; next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; 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); } }; this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var padding = this.$padding; var height = config.lineHeight; var top = this.$getTop(range.start.row, config); var left = padding + range.start.column * config.characterWidth; extraStyle = extraStyle || ""; stringBuilder.push( "<div class='", clazz, " ace_br1 ace_start' style='", "height:", height, "px;", "right:0;", "top:", top, "px;", "left:", left, "px;", extraStyle, "'></div>" ); top = this.$getTop(range.end.row, config); var width = range.end.column * config.characterWidth; stringBuilder.push( "<div class='", clazz, " ace_br12' style='", "height:", height, "px;", "width:", width, "px;", "top:", top, "px;", "left:", padding, "px;", extraStyle, "'></div>" ); height = (range.end.row - range.start.row - 1) * config.lineHeight; if (height <= 0) return; top = this.$getTop(range.start.row + 1, config); var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); stringBuilder.push( "<div class='", clazz, (radiusClass ? " ace_br" + radiusClass : ""), "' style='", "height:", height, "px;", "right:0;", "top:", top, "px;", "left:", padding, "px;", extraStyle, "'></div>" ); }; this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) { var height = config.lineHeight; var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; var top = this.$getTop(range.start.row, config); var left = this.$padding + range.start.column * config.characterWidth; stringBuilder.push( "<div class='", clazz, "' style='", "height:", height, "px;", "width:", width, "px;", "top:", top, "px;", "left:", left, "px;", extraStyle || "", "'></div>" ); }; this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; if (range.start.row != range.end.row) height += this.$getTop(range.end.row, config) - top; stringBuilder.push( "<div class='", clazz, "' style='", "height:", height, "px;", "top:", top, "px;", "left:0;right:0;", extraStyle || "", "'></div>" ); }; this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { var top = this.$getTop(range.start.row, config); var height = config.lineHeight; stringBuilder.push( "<div class='", clazz, "' style='", "height:", height, "px;", "top:", top, "px;", "left:0;right:0;", extraStyle || "", "'></div>" ); }; }).call(Marker.prototype); exports.Marker = Marker; }); ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var useragent = require("../lib/useragent"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var Text = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_text-layer"; parentEl.appendChild(this.element); this.$updateEolChar = this.$updateEolChar.bind(this); }; (function() { oop.implement(this, EventEmitter); this.EOF_CHAR = "\xB6"; this.EOL_CHAR_LF = "\xAC"; this.EOL_CHAR_CRLF = "\xa4"; this.EOL_CHAR = this.EOL_CHAR_LF; this.TAB_CHAR = "\u2014"; //"\u21E5"; this.SPACE_CHAR = "\xB7"; this.$padding = 0; this.$updateEolChar = function() { var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n" ? this.EOL_CHAR_LF : this.EOL_CHAR_CRLF; if (this.EOL_CHAR != EOL_CHAR) { this.EOL_CHAR = EOL_CHAR; return true; } } this.setPadding = function(padding) { this.$padding = padding; this.element.style.padding = "0 " + padding + "px"; }; this.getLineHeight = function() { return this.$fontMetrics.$characterSize.height || 0; }; this.getCharacterWidth = function() { return this.$fontMetrics.$characterSize.width || 0; }; this.$setFontMetrics = function(measure) { this.$fontMetrics = measure; this.$fontMetrics.on("changeCharacterSize", function(e) { this._signal("changeCharacterSize", e); }.bind(this)); this.$pollSizeChanges(); } this.checkForSizeChanges = function() { this.$fontMetrics.checkForSizeChanges(); }; this.$pollSizeChanges = function() { return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); }; this.setSession = function(session) { this.session = session; if (session) this.$computeTabString(); }; this.showInvisibles = false; this.setShowInvisibles = function(showInvisibles) { if (this.showInvisibles == showInvisibles) return false; this.showInvisibles = showInvisibles; this.$computeTabString(); return true; }; this.displayIndentGuides = true; this.setDisplayIndentGuides = function(display) { if (this.displayIndentGuides == display) return false; this.displayIndentGuides = display; this.$computeTabString(); return true; }; this.$tabStrings = []; this.onChangeTabSize = this.$computeTabString = function() { var tabSize = this.session.getTabSize(); this.tabSize = tabSize; var tabStr = this.$tabStrings = [0]; for (var i = 1; i < tabSize + 1; i++) { if (this.showInvisibles) { tabStr.push("<span class='ace_invisible ace_invisible_tab'>" + lang.stringRepeat(this.TAB_CHAR, i) + "</span>"); } else { tabStr.push(lang.stringRepeat(" ", i)); } } if (this.displayIndentGuides) { this.$indentGuideRe = /\s\S| \t|\t |\s$/; var className = "ace_indent-guide"; var spaceClass = ""; var tabClass = ""; if (this.showInvisibles) { className += " ace_invisible"; spaceClass = " ace_invisible_space"; tabClass = " ace_invisible_tab"; var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize); } else{ var spaceContent = lang.stringRepeat(" ", this.tabSize); var tabContent = spaceContent; } this.$tabStrings[" "] = "<span class='" + className + spaceClass + "'>" + spaceContent + "</span>"; this.$tabStrings["\t"] = "<span class='" + className + tabClass + "'>" + tabContent + "</span>"; } }; this.updateLines = function(config, firstRow, lastRow) { if (this.config.lastRow != config.lastRow || this.config.firstRow != config.firstRow) { this.scrollLines(config); } this.config = config; var first = Math.max(firstRow, config.firstRow); var last = Math.min(lastRow, config.lastRow); var lineElements = this.element.childNodes; var lineElementsIdx = 0; for (var row = config.firstRow; row < first; row++) { var foldLine = this.session.getFoldLine(row); if (foldLine) { if (foldLine.containsRow(first)) { first = foldLine.start.row; break; } else { row = foldLine.end.row; } } lineElementsIdx ++; } var row = first; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > last) break; var lineElement = lineElements[lineElementsIdx++]; if (lineElement) { var html = []; this.$renderLine( html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false ); lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; lineElement.innerHTML = html.join(""); } row++; } }; this.scrollLines = function(config) { var oldConfig = this.config; this.config = config; if (!oldConfig || oldConfig.lastRow < config.firstRow) return this.update(config); if (config.lastRow < oldConfig.firstRow) return this.update(config); var el = this.element; if (oldConfig.firstRow < config.firstRow) for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) el.removeChild(el.firstChild); if (oldConfig.lastRow > config.lastRow) for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) el.removeChild(el.lastChild); if (config.firstRow < oldConfig.firstRow) { var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); if (el.firstChild) el.insertBefore(fragment, el.firstChild); else el.appendChild(fragment); } if (config.lastRow > oldConfig.lastRow) { var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); el.appendChild(fragment); } }; this.$renderLinesFragment = function(config, firstRow, lastRow) { var fragment = this.element.ownerDocument.createDocumentFragment(); var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row : Infinity; } if (row > lastRow) break; var container = dom.createElement("div"); var html = []; this.$renderLine(html, row, false, row == foldStart ? foldLine : false); container.innerHTML = html.join(""); if (this.$useLineGroups()) { container.className = 'ace_line_group'; fragment.appendChild(container); container.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; } else { while(container.firstChild) fragment.appendChild(container.firstChild); } row++; } return fragment; }; this.update = function(config) { this.config = config; var html = []; var firstRow = config.firstRow, lastRow = config.lastRow; var row = firstRow; var foldLine = this.session.getNextFoldLine(row); var foldStart = foldLine ? foldLine.start.row : Infinity; while (true) { if (row > foldStart) { row = foldLine.end.row+1; foldLine = this.session.getNextFoldLine(row, foldLine); foldStart = foldLine ? foldLine.start.row :Infinity; } if (row > lastRow) break; if (this.$useLineGroups()) html.push("<div class='ace_line_group' style='height:", config.lineHeight*this.session.getRowLength(row), "px'>") this.$renderLine(html, row, false, row == foldStart ? foldLine : false); if (this.$useLineGroups()) html.push("</div>"); // end the line group row++; } this.element.innerHTML = html.join(""); }; this.$textToken = { "text": true, "rparen": true, "lparen": true }; this.$renderToken = function(stringBuilder, screenColumn, token, value) { var self = this; var replaceReg = /\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\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]/g; var replaceFunc = function(c, a, b, tabIdx, idx4) { if (a) { return self.showInvisibles ? "<span class='ace_invisible ace_invisible_space'>" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "</span>" : c; } else if (c == "&") { return "&"; } else if (c == "<") { return "<"; } else if (c == ">") { return ">"; } else if (c == "\t") { var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); screenColumn += tabSize - 1; return self.$tabStrings[tabSize]; } else if (c == "\u3000") { var classToUse = self.showInvisibles ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; var space = self.showInvisibles ? self.SPACE_CHAR : ""; screenColumn += 1; return "<span class='" + classToUse + "' style='width:" + (self.config.characterWidth * 2) + "px'>" + space + "</span>"; } else if (b) { return "<span class='ace_invisible ace_invisible_space ace_invalid'>" + self.SPACE_CHAR + "</span>"; } else { screenColumn += 1; return "<span class='ace_cjk' style='width:" + (self.config.characterWidth * 2) + "px'>" + c + "</span>"; } }; var output = value.replace(replaceReg, replaceFunc); if (!this.$textToken[token.type]) { var classes = "ace_" + token.type.replace(/\./g, " ace_"); var style = ""; if (token.type == "fold") style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; stringBuilder.push("<span class='", classes, "'", style, ">", output, "</span>"); } else { stringBuilder.push(output); } return screenColumn + value.length; }; this.renderIndentGuide = function(stringBuilder, value, max) { var cols = value.search(this.$indentGuideRe); if (cols <= 0 || cols >= max) return value; if (value[0] == " ") { cols -= cols % this.tabSize; stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize)); return value.substr(cols); } else if (value[0] == "\t") { stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols)); return value.substr(cols); } return value; }; this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) { var chars = 0; var split = 0; var splitChars = splits[0]; var screenColumn = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; var value = token.value; if (i == 0 && this.displayIndentGuides) { chars = value.length; value = this.renderIndentGuide(stringBuilder, value, splitChars); if (!value) continue; chars -= value.length; } if (chars + value.length < splitChars) { screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); chars += value.length; } else { while (chars + value.length >= splitChars) { screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value.substring(0, splitChars - chars) ); value = value.substring(splitChars - chars); chars = splitChars; if (!onlyContents) { stringBuilder.push("</div>", "<div class='ace_line' style='height:", this.config.lineHeight, "px'>" ); } stringBuilder.push(lang.stringRepeat("\xa0", splits.indent)); split ++; screenColumn = 0; splitChars = splits[split] || Number.MAX_VALUE; } if (value.length != 0) { chars += value.length; screenColumn = this.$renderToken( stringBuilder, screenColumn, token, value ); } } } }; this.$renderSimpleLine = function(stringBuilder, tokens) { var screenColumn = 0; var token = tokens[0]; var value = token.value; if (this.displayIndentGuides) value = this.renderIndentGuide(stringBuilder, value); if (value) screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); for (var i = 1; i < tokens.length; i++) { token = tokens[i]; value = token.value; screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); } }; this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) { if (!foldLine && foldLine != false) foldLine = this.session.getFoldLine(row); if (foldLine) var tokens = this.$getFoldLineTokens(row, foldLine); else var tokens = this.session.getTokens(row); if (!onlyContents) { stringBuilder.push( "<div class='ace_line' style='height:", this.config.lineHeight * ( this.$useLineGroups() ? 1 :this.session.getRowLength(row) ), "px'>" ); } if (tokens.length) { var splits = this.session.getRowSplitData(row); if (splits && splits.length) this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents); else this.$renderSimpleLine(stringBuilder, tokens); } if (this.showInvisibles) { if (foldLine) row = foldLine.end.row stringBuilder.push( "<span class='ace_invisible ace_invisible_eol'>", row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, "</span>" ); } if (!onlyContents) stringBuilder.push("</div>"); }; this.$getFoldLineTokens = function(row, foldLine) { var session = this.session; var renderTokens = []; function addTokens(tokens, from, to) { var idx = 0, col = 0; while ((col + tokens[idx].value.length) < from) { col += tokens[idx].value.length; idx++; if (idx == tokens.length) return; } if (col != from) { var value = tokens[idx].value.substring(from - col); if (value.length > (to - from)) value = value.substring(0, to - from); renderTokens.push({ type: tokens[idx].type, value: value }); col = from + value.length; idx += 1; } while (col < to && idx < tokens.length) { var value = tokens[idx].value; if (value.length + col > to) { renderTokens.push({ type: tokens[idx].type, value: value.substring(0, to - col) }); } else renderTokens.push(tokens[idx]); col += value.length; idx += 1; } } var tokens = session.getTokens(row); foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { if (placeholder != null) { renderTokens.push({ type: "fold", value: placeholder }); } else { if (isNewRow) tokens = session.getTokens(row); if (tokens.length) addTokens(tokens, lastColumn, column); } }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); return renderTokens; }; this.$useLineGroups = function() { return this.session.getUseWrapMode(); }; this.destroy = function() { clearInterval(this.$pollSizeChangesTimer); if (this.$measureNode) this.$measureNode.parentNode.removeChild(this.$measureNode); delete this.$measureNode; }; }).call(Text.prototype); exports.Text = Text; }); ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var isIE8; var Cursor = function(parentEl) { this.element = dom.createElement("div"); this.element.className = "ace_layer ace_cursor-layer"; parentEl.appendChild(this.element); if (isIE8 === undefined) isIE8 = !("opacity" in this.element.style); this.isVisible = false; this.isBlinking = true; this.blinkInterval = 1000; this.smoothBlinking = false; this.cursors = []; this.cursor = this.addCursor(); dom.addCssClass(this.element, "ace_hidden-cursors"); this.$updateCursors = (isIE8 ? this.$updateVisibility : this.$updateOpacity).bind(this); }; (function() { this.$updateVisibility = function(val) { var cursors = this.cursors; for (var i = cursors.length; i--; ) cursors[i].style.visibility = val ? "" : "hidden"; }; this.$updateOpacity = function(val) { var cursors = this.cursors; for (var i = cursors.length; i--; ) cursors[i].style.opacity = val ? "" : "0"; }; this.$padding = 0; this.setPadding = function(padding) { this.$padding = padding; }; this.setSession = function(session) { this.session = session; }; this.setBlinking = function(blinking) { if (blinking != this.isBlinking){ this.isBlinking = blinking; this.restartTimer(); } }; this.setBlinkInterval = function(blinkInterval) { if (blinkInterval != this.blinkInterval){ this.blinkInterval = blinkInterval; this.restartTimer(); } }; this.setSmoothBlinking = function(smoothBlinking) { if (smoothBlinking != this.smoothBlinking && !isIE8) { this.smoothBlinking = smoothBlinking; dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); this.$updateCursors(true); this.$updateCursors = (this.$updateOpacity).bind(this); this.restartTimer(); } }; this.addCursor = function() { var el = dom.createElement("div"); el.className = "ace_cursor"; this.element.appendChild(el); this.cursors.push(el); return el; }; this.removeCursor = function() { if (this.cursors.length > 1) { var el = this.cursors.pop(); el.parentNode.removeChild(el); return el; } }; this.hideCursor = function() { this.isVisible = false; dom.addCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.showCursor = function() { this.isVisible = true; dom.removeCssClass(this.element, "ace_hidden-cursors"); this.restartTimer(); }; this.restartTimer = function() { var update = this.$updateCursors; clearInterval(this.intervalId); clearTimeout(this.timeoutId); if (this.smoothBlinking) { dom.removeCssClass(this.element, "ace_smooth-blinking"); } update(true); if (!this.isBlinking || !this.blinkInterval || !this.isVisible) return; if (this.smoothBlinking) { setTimeout(function(){ dom.addCssClass(this.element, "ace_smooth-blinking"); }.bind(this)); } var blink = function(){ this.timeoutId = setTimeout(function() { update(false); }, 0.6 * this.blinkInterval); }.bind(this); this.intervalId = setInterval(function() { update(true); blink(); }, this.blinkInterval); blink(); }; this.getPixelPosition = function(position, onScreen) { if (!this.config || !this.session) return {left : 0, top : 0}; if (!position) position = this.session.selection.getCursor(); var pos = this.session.documentToScreenPosition(position); var cursorLeft = this.$padding + pos.column * this.config.characterWidth; var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * this.config.lineHeight; return {left : cursorLeft, top : cursorTop}; }; this.update = function(config) { this.config = config; var selections = this.session.$selectionMarkers; var i = 0, cursorIndex = 0; if (selections === undefined || selections.length === 0){ selections = [{cursor: null}]; } for (var i = 0, n = selections.length; i < n; i++) { var pixelPos = this.getPixelPosition(selections[i].cursor, true); if ((pixelPos.top > config.height + config.offset || pixelPos.top < 0) && i > 1) { continue; } var style = (this.cursors[cursorIndex++] || this.addCursor()).style; if (!this.drawCursor) { style.left = pixelPos.left + "px"; style.top = pixelPos.top + "px"; style.width = config.characterWidth + "px"; style.height = config.lineHeight + "px"; } else { this.drawCursor(style, pixelPos, config, selections[i], this.session); } } while (this.cursors.length > cursorIndex) this.removeCursor(); var overwrite = this.session.getOverwrite(); this.$setOverwrite(overwrite); this.$pixelPos = pixelPos; this.restartTimer(); }; this.drawCursor = null; this.$setOverwrite = function(overwrite) { if (overwrite != this.overwrite) { this.overwrite = overwrite; if (overwrite) dom.addCssClass(this.element, "ace_overwrite-cursors"); else dom.removeCssClass(this.element, "ace_overwrite-cursors"); } }; this.destroy = function() { clearInterval(this.intervalId); clearTimeout(this.timeoutId); }; }).call(Cursor.prototype); exports.Cursor = Cursor; }); ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var event = require("./lib/event"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var MAX_SCROLL_H = 0x8000; var ScrollBar = function(parent) { this.element = dom.createElement("div"); this.element.className = "ace_scrollbar ace_scrollbar" + this.classSuffix; this.inner = dom.createElement("div"); this.inner.className = "ace_scrollbar-inner"; this.element.appendChild(this.inner); parent.appendChild(this.element); this.setVisible(false); this.skipEvent = false; event.addListener(this.element, "scroll", this.onScroll.bind(this)); event.addListener(this.element, "mousedown", event.preventDefault); }; (function() { oop.implement(this, EventEmitter); this.setVisible = function(isVisible) { this.element.style.display = isVisible ? "" : "none"; this.isVisible = isVisible; this.coeff = 1; }; }).call(ScrollBar.prototype); var VScrollBar = function(parent, renderer) { ScrollBar.call(this, parent); this.scrollTop = 0; this.scrollHeight = 0; renderer.$scrollbarWidth = this.width = dom.scrollbarWidth(parent.ownerDocument); this.inner.style.width = this.element.style.width = (this.width || 15) + 5 + "px"; }; oop.inherits(VScrollBar, ScrollBar); (function() { this.classSuffix = '-v'; this.onScroll = function() { if (!this.skipEvent) { this.scrollTop = this.element.scrollTop; if (this.coeff != 1) { var h = this.element.clientHeight / this.scrollHeight; this.scrollTop = this.scrollTop * (1 - h) / (this.coeff - h); } this._emit("scroll", {data: this.scrollTop}); } this.skipEvent = false; }; this.getWidth = function() { return this.isVisible ? this.width : 0; }; this.setHeight = function(height) { this.element.style.height = height + "px"; }; this.setInnerHeight = this.setScrollHeight = function(height) { this.scrollHeight = height; if (height > MAX_SCROLL_H) { this.coeff = MAX_SCROLL_H / height; height = MAX_SCROLL_H; } else if (this.coeff != 1) { this.coeff = 1 } this.inner.style.height = height + "px"; }; this.setScrollTop = function(scrollTop) { if (this.scrollTop != scrollTop) { this.skipEvent = true; this.scrollTop = scrollTop; this.element.scrollTop = scrollTop * this.coeff; } }; }).call(VScrollBar.prototype); var HScrollBar = function(parent, renderer) { ScrollBar.call(this, parent); this.scrollLeft = 0; this.height = renderer.$scrollbarWidth; this.inner.style.height = this.element.style.height = (this.height || 15) + 5 + "px"; }; oop.inherits(HScrollBar, ScrollBar); (function() { this.classSuffix = '-h'; this.onScroll = function() { if (!this.skipEvent) { this.scrollLeft = this.element.scrollLeft; this._emit("scroll", {data: this.scrollLeft}); } this.skipEvent = false; }; this.getHeight = function() { return this.isVisible ? this.height : 0; }; this.setWidth = function(width) { this.element.style.width = width + "px"; }; this.setInnerWidth = function(width) { this.inner.style.width = width + "px"; }; this.setScrollWidth = function(width) { this.inner.style.width = width + "px"; }; this.setScrollLeft = function(scrollLeft) { if (this.scrollLeft != scrollLeft) { this.skipEvent = true; this.scrollLeft = this.element.scrollLeft = scrollLeft; } }; }).call(HScrollBar.prototype); exports.ScrollBar = VScrollBar; // backward compatibility exports.ScrollBarV = VScrollBar; // backward compatibility exports.ScrollBarH = HScrollBar; // backward compatibility exports.VScrollBar = VScrollBar; exports.HScrollBar = HScrollBar; }); ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module) { "use strict"; var event = require("./lib/event"); var RenderLoop = function(onRender, win) { this.onRender = onRender; this.pending = false; this.changes = 0; this.window = win || window; }; (function() { this.schedule = function(change) { this.changes = this.changes | change; if (!this.pending && this.changes) { this.pending = true; var _self = this; event.nextFrame(function() { _self.pending = false; var changes; while (changes = _self.changes) { _self.changes = 0; _self.onRender(changes); } }, this.window); } }; }).call(RenderLoop.prototype); exports.RenderLoop = RenderLoop; }); ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { var oop = require("../lib/oop"); var dom = require("../lib/dom"); var lang = require("../lib/lang"); var useragent = require("../lib/useragent"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var CHAR_COUNT = 0; var FontMetrics = exports.FontMetrics = function(parentEl) { this.el = dom.createElement("div"); this.$setMeasureNodeStyles(this.el.style, true); this.$main = dom.createElement("div"); this.$setMeasureNodeStyles(this.$main.style); this.$measureNode = dom.createElement("div"); this.$setMeasureNodeStyles(this.$measureNode.style); this.el.appendChild(this.$main); this.el.appendChild(this.$measureNode); parentEl.appendChild(this.el); if (!CHAR_COUNT) this.$testFractionalRect(); this.$measureNode.innerHTML = lang.stringRepeat("X", CHAR_COUNT); this.$characterSize = {width: 0, height: 0}; this.checkForSizeChanges(); }; (function() { oop.implement(this, EventEmitter); this.$characterSize = {width: 0, height: 0}; this.$testFractionalRect = function() { var el = dom.createElement("div"); this.$setMeasureNodeStyles(el.style); el.style.width = "0.2px"; document.documentElement.appendChild(el); var w = el.getBoundingClientRect().width; if (w > 0 && w < 1) CHAR_COUNT = 50; else CHAR_COUNT = 100; el.parentNode.removeChild(el); }; this.$setMeasureNodeStyles = function(style, isRoot) { style.width = style.height = "auto"; style.left = style.top = "0px"; style.visibility = "hidden"; style.position = "absolute"; style.whiteSpace = "pre"; if (useragent.isIE < 8) { style["font-family"] = "inherit"; } else { style.font = "inherit"; } style.overflow = isRoot ? "hidden" : "visible"; }; this.checkForSizeChanges = function() { var size = this.$measureSizes(); if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { this.$measureNode.style.fontWeight = "bold"; var boldSize = this.$measureSizes(); this.$measureNode.style.fontWeight = ""; this.$characterSize = size; this.charSizes = Object.create(null); this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; this._emit("changeCharacterSize", {data: size}); } }; this.$pollSizeChanges = function() { if (this.$pollSizeChangesTimer) return this.$pollSizeChangesTimer; var self = this; return this.$pollSizeChangesTimer = setInterval(function() { self.checkForSizeChanges(); }, 500); }; this.setPolling = function(val) { if (val) { this.$pollSizeChanges(); } else if (this.$pollSizeChangesTimer) { clearInterval(this.$pollSizeChangesTimer); this.$pollSizeChangesTimer = 0; } }; this.$measureSizes = function() { if (CHAR_COUNT === 50) { var rect = null; try { rect = this.$measureNode.getBoundingClientRect(); } catch(e) { rect = {width: 0, height:0 }; } var size = { height: rect.height, width: rect.width / CHAR_COUNT }; } else { var size = { height: this.$measureNode.clientHeight, width: this.$measureNode.clientWidth / CHAR_COUNT }; } if (size.width === 0 || size.height === 0) return null; return size; }; this.$measureCharWidth = function(ch) { this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT); var rect = this.$main.getBoundingClientRect(); return rect.width / CHAR_COUNT; }; this.getCharacterWidth = function(ch) { var w = this.charSizes[ch]; if (w === undefined) { w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; } return w; }; this.destroy = function() { clearInterval(this.$pollSizeChangesTimer); if (this.el && this.el.parentNode) this.el.parentNode.removeChild(this.el); }; }).call(FontMetrics.prototype); }); ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","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"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var config = require("./config"); var useragent = require("./lib/useragent"); var GutterLayer = require("./layer/gutter").Gutter; var MarkerLayer = require("./layer/marker").Marker; var TextLayer = require("./layer/text").Text; var CursorLayer = require("./layer/cursor").Cursor; var HScrollBar = require("./scrollbar").HScrollBar; var VScrollBar = require("./scrollbar").VScrollBar; var RenderLoop = require("./renderloop").RenderLoop; var FontMetrics = require("./layer/font_metrics").FontMetrics; var EventEmitter = require("./lib/event_emitter").EventEmitter; var editorCss = ".ace_editor {\ position: relative;\ overflow: hidden;\ font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\ direction: ltr;\ text-align: left;\ }\ .ace_scroller {\ position: absolute;\ overflow: hidden;\ top: 0;\ bottom: 0;\ background-color: inherit;\ -ms-user-select: none;\ -moz-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ cursor: text;\ }\ .ace_content {\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ min-width: 100%;\ }\ .ace_dragging .ace_scroller:before{\ position: absolute;\ top: 0;\ left: 0;\ right: 0;\ bottom: 0;\ content: '';\ background: rgba(250, 250, 250, 0.01);\ z-index: 1000;\ }\ .ace_dragging.ace_dark .ace_scroller:before{\ background: rgba(0, 0, 0, 0.01);\ }\ .ace_selecting, .ace_selecting * {\ cursor: text !important;\ }\ .ace_gutter {\ position: absolute;\ overflow : hidden;\ width: auto;\ top: 0;\ bottom: 0;\ left: 0;\ cursor: default;\ z-index: 4;\ -ms-user-select: none;\ -moz-user-select: none;\ -webkit-user-select: none;\ user-select: none;\ }\ .ace_gutter-active-line {\ position: absolute;\ left: 0;\ right: 0;\ }\ .ace_scroller.ace_scroll-left {\ box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\ }\ .ace_gutter-cell {\ padding-left: 19px;\ padding-right: 6px;\ background-repeat: no-repeat;\ }\ .ace_gutter-cell.ace_error {\ background-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==\");\ background-repeat: no-repeat;\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_warning {\ background-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==\");\ background-position: 2px center;\ }\ .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\ background-position: 2px center;\ }\ .ace_dark .ace_gutter-cell.ace_info {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\ }\ .ace_scrollbar {\ position: absolute;\ right: 0;\ bottom: 0;\ z-index: 6;\ }\ .ace_scrollbar-inner {\ position: absolute;\ cursor: text;\ left: 0;\ top: 0;\ }\ .ace_scrollbar-v{\ overflow-x: hidden;\ overflow-y: scroll;\ top: 0;\ }\ .ace_scrollbar-h {\ overflow-x: scroll;\ overflow-y: hidden;\ left: 0;\ }\ .ace_print-margin {\ position: absolute;\ height: 100%;\ }\ .ace_text-input {\ position: absolute;\ z-index: 0;\ width: 0.5em;\ height: 1em;\ opacity: 0;\ background: transparent;\ -moz-appearance: none;\ appearance: none;\ border: none;\ resize: none;\ outline: none;\ overflow: hidden;\ font: inherit;\ padding: 0 1px;\ margin: 0 -1px;\ text-indent: -1em;\ -ms-user-select: text;\ -moz-user-select: text;\ -webkit-user-select: text;\ user-select: text;\ white-space: pre!important;\ }\ .ace_text-input.ace_composition {\ background: inherit;\ color: inherit;\ z-index: 1000;\ opacity: 1;\ text-indent: 0;\ }\ .ace_layer {\ z-index: 1;\ position: absolute;\ overflow: hidden;\ word-wrap: normal;\ white-space: pre;\ height: 100%;\ width: 100%;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ pointer-events: none;\ }\ .ace_gutter-layer {\ position: relative;\ width: auto;\ text-align: right;\ pointer-events: auto;\ }\ .ace_text-layer {\ font: inherit !important;\ }\ .ace_cjk {\ display: inline-block;\ text-align: center;\ }\ .ace_cursor-layer {\ z-index: 4;\ }\ .ace_cursor {\ z-index: 4;\ position: absolute;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ border-left: 2px solid;\ transform: translatez(0);\ }\ .ace_slim-cursors .ace_cursor {\ border-left-width: 1px;\ }\ .ace_overwrite-cursors .ace_cursor {\ border-left-width: 0;\ border-bottom: 1px solid;\ }\ .ace_hidden-cursors .ace_cursor {\ opacity: 0.2;\ }\ .ace_smooth-blinking .ace_cursor {\ -webkit-transition: opacity 0.18s;\ transition: opacity 0.18s;\ }\ .ace_editor.ace_multiselect .ace_cursor {\ border-left-width: 1px;\ }\ .ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\ position: absolute;\ z-index: 3;\ }\ .ace_marker-layer .ace_selection {\ position: absolute;\ z-index: 5;\ }\ .ace_marker-layer .ace_bracket {\ position: absolute;\ z-index: 6;\ }\ .ace_marker-layer .ace_active-line {\ position: absolute;\ z-index: 2;\ }\ .ace_marker-layer .ace_selected-word {\ position: absolute;\ z-index: 4;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ }\ .ace_line .ace_fold {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ display: inline-block;\ height: 11px;\ margin-top: -2px;\ vertical-align: middle;\ background-image:\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\ background-repeat: no-repeat, repeat-x;\ background-position: center center, top left;\ color: transparent;\ border: 1px solid black;\ border-radius: 2px;\ cursor: pointer;\ pointer-events: auto;\ }\ .ace_dark .ace_fold {\ }\ .ace_fold:hover{\ background-image:\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\ }\ .ace_tooltip {\ background-color: #FFF;\ background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\ background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\ border: 1px solid gray;\ border-radius: 1px;\ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\ color: black;\ max-width: 100%;\ padding: 3px 4px;\ position: fixed;\ z-index: 999999;\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ cursor: default;\ white-space: pre;\ word-wrap: break-word;\ line-height: normal;\ font-style: normal;\ font-weight: normal;\ letter-spacing: normal;\ pointer-events: none;\ }\ .ace_folding-enabled > .ace_gutter-cell {\ padding-right: 13px;\ }\ .ace_fold-widget {\ -moz-box-sizing: border-box;\ -webkit-box-sizing: border-box;\ box-sizing: border-box;\ margin: 0 -12px 0 1px;\ display: none;\ width: 11px;\ vertical-align: top;\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\ background-repeat: no-repeat;\ background-position: center;\ border-radius: 3px;\ border: 1px solid transparent;\ cursor: pointer;\ }\ .ace_folding-enabled .ace_fold-widget {\ display: inline-block; \ }\ .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\ }\ .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\ }\ .ace_fold-widget:hover {\ border: 1px solid rgba(0, 0, 0, 0.3);\ background-color: rgba(255, 255, 255, 0.2);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ }\ .ace_fold-widget:active {\ border: 1px solid rgba(0, 0, 0, 0.4);\ background-color: rgba(0, 0, 0, 0.05);\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ }\ .ace_dark .ace_fold-widget {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\ }\ .ace_dark .ace_fold-widget.ace_end {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget.ace_closed {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\ }\ .ace_dark .ace_fold-widget:hover {\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ background-color: rgba(255, 255, 255, 0.1);\ }\ .ace_dark .ace_fold-widget:active {\ box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ }\ .ace_fold-widget.ace_invalid {\ background-color: #FFB4B4;\ border-color: #DE5555;\ }\ .ace_fade-fold-widgets .ace_fold-widget {\ -webkit-transition: opacity 0.4s ease 0.05s;\ transition: opacity 0.4s ease 0.05s;\ opacity: 0;\ }\ .ace_fade-fold-widgets:hover .ace_fold-widget {\ -webkit-transition: opacity 0.05s ease 0.05s;\ transition: opacity 0.05s ease 0.05s;\ opacity:1;\ }\ .ace_underline {\ text-decoration: underline;\ }\ .ace_bold {\ font-weight: bold;\ }\ .ace_nobold .ace_bold {\ font-weight: normal;\ }\ .ace_italic {\ font-style: italic;\ }\ .ace_error-marker {\ background-color: rgba(255, 0, 0,0.2);\ position: absolute;\ z-index: 9;\ }\ .ace_highlight-marker {\ background-color: rgba(255, 255, 0,0.2);\ position: absolute;\ z-index: 8;\ }\ .ace_br1 {border-top-left-radius : 3px;}\ .ace_br2 {border-top-right-radius : 3px;}\ .ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\ .ace_br4 {border-bottom-right-radius: 3px;}\ .ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\ .ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\ .ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\ .ace_br8 {border-bottom-left-radius : 3px;}\ .ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\ .ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\ .ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ .ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ "; dom.importCssString(editorCss, "ace_editor.css"); var VirtualRenderer = function(container, theme) { var _self = this; this.container = container || dom.createElement("div"); this.$keepTextAreaAtCursor = !useragent.isOldIE; dom.addCssClass(this.container, "ace_editor"); this.setTheme(theme); this.$gutter = dom.createElement("div"); this.$gutter.className = "ace_gutter"; this.container.appendChild(this.$gutter); this.scroller = dom.createElement("div"); this.scroller.className = "ace_scroller"; this.container.appendChild(this.scroller); this.content = dom.createElement("div"); this.content.className = "ace_content"; this.scroller.appendChild(this.content); this.$gutterLayer = new GutterLayer(this.$gutter); this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); this.$markerBack = new MarkerLayer(this.content); var textLayer = this.$textLayer = new TextLayer(this.content); this.canvas = textLayer.element; this.$markerFront = new MarkerLayer(this.content); this.$cursorLayer = new CursorLayer(this.content); this.$horizScroll = false; this.$vScroll = false; this.scrollBar = this.scrollBarV = new VScrollBar(this.container, this); this.scrollBarH = new HScrollBar(this.container, this); this.scrollBarV.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollTop(e.data - _self.scrollMargin.top); }); this.scrollBarH.addEventListener("scroll", function(e) { if (!_self.$scrollAnimation) _self.session.setScrollLeft(e.data - _self.scrollMargin.left); }); this.scrollTop = 0; this.scrollLeft = 0; this.cursorPos = { row : 0, column : 0 }; this.$fontMetrics = new FontMetrics(this.container); this.$textLayer.$setFontMetrics(this.$fontMetrics); this.$textLayer.addEventListener("changeCharacterSize", function(e) { _self.updateCharacterSize(); _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); _self._signal("changeCharacterSize", e); }); this.$size = { width: 0, height: 0, scrollerHeight: 0, scrollerWidth: 0, $dirty: true }; this.layerConfig = { width : 1, padding : 0, firstRow : 0, firstRowScreen: 0, lastRow : 0, lineHeight : 0, characterWidth : 0, minHeight : 1, maxHeight : 1, offset : 0, height : 1, gutterOffset: 1 }; this.scrollMargin = { left: 0, right: 0, top: 0, bottom: 0, v: 0, h: 0 }; this.$loop = new RenderLoop( this.$renderChanges.bind(this), this.container.ownerDocument.defaultView ); this.$loop.schedule(this.CHANGE_FULL); this.updateCharacterSize(); this.setPadding(4); config.resetOptions(this); config._emit("renderer", this); }; (function() { this.CHANGE_CURSOR = 1; this.CHANGE_MARKER = 2; this.CHANGE_GUTTER = 4; this.CHANGE_SCROLL = 8; this.CHANGE_LINES = 16; this.CHANGE_TEXT = 32; this.CHANGE_SIZE = 64; this.CHANGE_MARKER_BACK = 128; this.CHANGE_MARKER_FRONT = 256; this.CHANGE_FULL = 512; this.CHANGE_H_SCROLL = 1024; oop.implement(this, EventEmitter); this.updateCharacterSize = function() { if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { this.$allowBoldFonts = this.$textLayer.allowBoldFonts; this.setStyle("ace_nobold", !this.$allowBoldFonts); } this.layerConfig.characterWidth = this.characterWidth = this.$textLayer.getCharacterWidth(); this.layerConfig.lineHeight = this.lineHeight = this.$textLayer.getLineHeight(); this.$updatePrintMargin(); }; this.setSession = function(session) { if (this.session) this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); this.session = session; if (session && this.scrollMargin.top && session.getScrollTop() <= 0) session.setScrollTop(-this.scrollMargin.top); this.$cursorLayer.setSession(session); this.$markerBack.setSession(session); this.$markerFront.setSession(session); this.$gutterLayer.setSession(session); this.$textLayer.setSession(session); if (!session) return; this.$loop.schedule(this.CHANGE_FULL); this.session.$setFontMetrics(this.$fontMetrics); this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null; this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); this.onChangeNewLineMode() this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); }; this.updateLines = function(firstRow, lastRow, force) { if (lastRow === undefined) lastRow = Infinity; if (!this.$changedLines) { this.$changedLines = { firstRow: firstRow, lastRow: lastRow }; } else { if (this.$changedLines.firstRow > firstRow) this.$changedLines.firstRow = firstRow; if (this.$changedLines.lastRow < lastRow) this.$changedLines.lastRow = lastRow; } if (this.$changedLines.lastRow < this.layerConfig.firstRow) { if (force) this.$changedLines.lastRow = this.layerConfig.lastRow; else return; } if (this.$changedLines.firstRow > this.layerConfig.lastRow) return; this.$loop.schedule(this.CHANGE_LINES); }; this.onChangeNewLineMode = function() { this.$loop.schedule(this.CHANGE_TEXT); this.$textLayer.$updateEolChar(); }; this.onChangeTabSize = function() { this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); this.$textLayer.onChangeTabSize(); }; this.updateText = function() { this.$loop.schedule(this.CHANGE_TEXT); }; this.updateFull = function(force) { if (force) this.$renderChanges(this.CHANGE_FULL, true); else this.$loop.schedule(this.CHANGE_FULL); }; this.updateFontSize = function() { this.$textLayer.checkForSizeChanges(); }; this.$changes = 0; this.$updateSizeAsync = function() { if (this.$loop.pending) this.$size.$dirty = true; else this.onResize(); }; this.onResize = function(force, gutterWidth, width, height) { if (this.resizing > 2) return; else if (this.resizing > 0) this.resizing++; else this.resizing = force ? 1 : 0; var el = this.container; if (!height) height = el.clientHeight || el.scrollHeight; if (!width) width = el.clientWidth || el.scrollWidth; var changes = this.$updateCachedSize(force, gutterWidth, width, height); if (!this.$size.scrollerHeight || (!width && !height)) return this.resizing = 0; if (force) this.$gutterLayer.$padding = null; if (force) this.$renderChanges(changes | this.$changes, true); else this.$loop.schedule(changes | this.$changes); if (this.resizing) this.resizing = 0; this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null; }; this.$updateCachedSize = function(force, gutterWidth, width, height) { height -= (this.$extraHeight || 0); var changes = 0; var size = this.$size; var oldSize = { width: size.width, height: size.height, scrollerHeight: size.scrollerHeight, scrollerWidth: size.scrollerWidth }; if (height && (force || size.height != height)) { size.height = height; changes |= this.CHANGE_SIZE; size.scrollerHeight = size.height; if (this.$horizScroll) size.scrollerHeight -= this.scrollBarH.getHeight(); this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; changes = changes | this.CHANGE_SCROLL; } if (width && (force || size.width != width)) { changes |= this.CHANGE_SIZE; size.width = width; if (gutterWidth == null) gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; this.gutterWidth = gutterWidth; this.scrollBarH.element.style.left = this.scroller.style.left = gutterWidth + "px"; size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); this.scrollBarH.element.style.right = this.scroller.style.right = this.scrollBarV.getWidth() + "px"; this.scroller.style.bottom = this.scrollBarH.getHeight() + "px"; if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) changes |= this.CHANGE_FULL; } size.$dirty = !width || !height; if (changes) this._signal("resize", oldSize); return changes; }; this.onGutterResize = function() { var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; if (gutterWidth != this.gutterWidth) this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { this.$loop.schedule(this.CHANGE_FULL); } else if (this.$size.$dirty) { this.$loop.schedule(this.CHANGE_FULL); } else { this.$computeLayerConfig(); this.$loop.schedule(this.CHANGE_MARKER); } }; this.adjustWrapLimit = function() { var availableWidth = this.$size.scrollerWidth - this.$padding * 2; var limit = Math.floor(availableWidth / this.characterWidth); return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); }; this.setAnimatedScroll = function(shouldAnimate){ this.setOption("animatedScroll", shouldAnimate); }; this.getAnimatedScroll = function() { return this.$animatedScroll; }; this.setShowInvisibles = function(showInvisibles) { this.setOption("showInvisibles", showInvisibles); }; this.getShowInvisibles = function() { return this.getOption("showInvisibles"); }; this.getDisplayIndentGuides = function() { return this.getOption("displayIndentGuides"); }; this.setDisplayIndentGuides = function(display) { this.setOption("displayIndentGuides", display); }; this.setShowPrintMargin = function(showPrintMargin) { this.setOption("showPrintMargin", showPrintMargin); }; this.getShowPrintMargin = function() { return this.getOption("showPrintMargin"); }; this.setPrintMarginColumn = function(showPrintMargin) { this.setOption("printMarginColumn", showPrintMargin); }; this.getPrintMarginColumn = function() { return this.getOption("printMarginColumn"); }; this.getShowGutter = function(){ return this.getOption("showGutter"); }; this.setShowGutter = function(show){ return this.setOption("showGutter", show); }; this.getFadeFoldWidgets = function(){ return this.getOption("fadeFoldWidgets") }; this.setFadeFoldWidgets = function(show) { this.setOption("fadeFoldWidgets", show); }; this.setHighlightGutterLine = function(shouldHighlight) { this.setOption("highlightGutterLine", shouldHighlight); }; this.getHighlightGutterLine = function() { return this.getOption("highlightGutterLine"); }; this.$updateGutterLineHighlight = function() { var pos = this.$cursorLayer.$pixelPos; var height = this.layerConfig.lineHeight; if (this.session.getUseWrapMode()) { var cursor = this.session.selection.getCursor(); cursor.column = 0; pos = this.$cursorLayer.getPixelPosition(cursor, true); height *= this.session.getRowLength(cursor.row); } this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px"; this.$gutterLineHighlight.style.height = height + "px"; }; this.$updatePrintMargin = function() { if (!this.$showPrintMargin && !this.$printMarginEl) return; if (!this.$printMarginEl) { var containerEl = dom.createElement("div"); containerEl.className = "ace_layer ace_print-margin-layer"; this.$printMarginEl = dom.createElement("div"); this.$printMarginEl.className = "ace_print-margin"; containerEl.appendChild(this.$printMarginEl); this.content.insertBefore(containerEl, this.content.firstChild); } var style = this.$printMarginEl.style; style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; style.visibility = this.$showPrintMargin ? "visible" : "hidden"; if (this.session && this.session.$wrap == -1) this.adjustWrapLimit(); }; this.getContainerElement = function() { return this.container; }; this.getMouseEventTarget = function() { return this.scroller; }; this.getTextAreaContainer = function() { return this.container; }; this.$moveTextAreaToCursor = function() { if (!this.$keepTextAreaAtCursor) return; var config = this.layerConfig; var posTop = this.$cursorLayer.$pixelPos.top; var posLeft = this.$cursorLayer.$pixelPos.left; posTop -= config.offset; var style = this.textarea.style; var h = this.lineHeight; if (posTop < 0 || posTop > config.height - h) { style.top = style.left = "0"; return; } var w = this.characterWidth; if (this.$composition) { var val = this.textarea.value.replace(/^\x01+/, ""); w *= (this.session.$getStringScreenWidth(val)[0]+2); h += 2; } posLeft -= this.scrollLeft; if (posLeft > this.$size.scrollerWidth - w) posLeft = this.$size.scrollerWidth - w; posLeft += this.gutterWidth; style.height = h + "px"; style.width = w + "px"; style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + "px"; style.top = Math.min(posTop, this.$size.height - h) + "px"; }; this.getFirstVisibleRow = function() { return this.layerConfig.firstRow; }; this.getFirstFullyVisibleRow = function() { return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); }; this.getLastFullyVisibleRow = function() { var config = this.layerConfig; var lastRow = config.lastRow var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; if (top - this.session.getScrollTop() > config.height - config.lineHeight) return lastRow - 1; return lastRow; }; this.getLastVisibleRow = function() { return this.layerConfig.lastRow; }; this.$padding = null; this.setPadding = function(padding) { this.$padding = padding; this.$textLayer.setPadding(padding); this.$cursorLayer.setPadding(padding); this.$markerFront.setPadding(padding); this.$markerBack.setPadding(padding); this.$loop.schedule(this.CHANGE_FULL); this.$updatePrintMargin(); }; this.setScrollMargin = function(top, bottom, left, right) { var sm = this.scrollMargin; sm.top = top|0; sm.bottom = bottom|0; sm.right = right|0; sm.left = left|0; sm.v = sm.top + sm.bottom; sm.h = sm.left + sm.right; if (sm.top && this.scrollTop <= 0 && this.session) this.session.setScrollTop(-sm.top); this.updateFull(); }; this.getHScrollBarAlwaysVisible = function() { return this.$hScrollBarAlwaysVisible; }; this.setHScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("hScrollBarAlwaysVisible", alwaysVisible); }; this.getVScrollBarAlwaysVisible = function() { return this.$vScrollBarAlwaysVisible; }; this.setVScrollBarAlwaysVisible = function(alwaysVisible) { this.setOption("vScrollBarAlwaysVisible", alwaysVisible); }; this.$updateScrollBarV = function() { var scrollHeight = this.layerConfig.maxHeight; var scrollerHeight = this.$size.scrollerHeight; if (!this.$maxLines && this.$scrollPastEnd) { scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; if (this.scrollTop > scrollHeight - scrollerHeight) { scrollHeight = this.scrollTop + scrollerHeight; this.scrollBarV.scrollTop = null; } } this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); }; this.$updateScrollBarH = function() { this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); }; this.$frozen = false; this.freeze = function() { this.$frozen = true; }; this.unfreeze = function() { this.$frozen = false; }; this.$renderChanges = function(changes, force) { if (this.$changes) { changes |= this.$changes; this.$changes = 0; } if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { this.$changes |= changes; return; } if (this.$size.$dirty) { this.$changes |= changes; return this.onResize(true); } if (!this.lineHeight) { this.$textLayer.checkForSizeChanges(); } this._signal("beforeRender"); var config = this.layerConfig; 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 ) { changes |= this.$computeLayerConfig(); if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight; if (st > 0) { this.scrollTop = st; changes = changes | this.CHANGE_SCROLL; changes |= this.$computeLayerConfig(); } } config = this.layerConfig; this.$updateScrollBarV(); if (changes & this.CHANGE_H_SCROLL) this.$updateScrollBarH(); this.$gutterLayer.element.style.marginTop = (-config.offset) + "px"; this.content.style.marginTop = (-config.offset) + "px"; this.content.style.width = config.width + 2 * this.$padding + "px"; this.content.style.height = config.minHeight + "px"; } if (changes & this.CHANGE_H_SCROLL) { this.content.style.marginLeft = -this.scrollLeft + "px"; this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left"; } if (changes & this.CHANGE_FULL) { this.$textLayer.update(config); if (this.$showGutter) this.$gutterLayer.update(config); this.$markerBack.update(config); this.$markerFront.update(config); this.$cursorLayer.update(config); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this._signal("afterRender"); return; } if (changes & this.CHANGE_SCROLL) { if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) this.$textLayer.update(config); else this.$textLayer.scrollLines(config); if (this.$showGutter) this.$gutterLayer.update(config); this.$markerBack.update(config); this.$markerFront.update(config); this.$cursorLayer.update(config); this.$highlightGutterLine && this.$updateGutterLineHighlight(); this.$moveTextAreaToCursor(); this._signal("afterRender"); return; } if (changes & this.CHANGE_TEXT) { this.$textLayer.update(config); if (this.$showGutter) this.$gutterLayer.update(config); } else if (changes & this.CHANGE_LINES) { if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) this.$gutterLayer.update(config); } else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { if (this.$showGutter) this.$gutterLayer.update(config); } if (changes & this.CHANGE_CURSOR) { this.$cursorLayer.update(config); this.$moveTextAreaToCursor(); this.$highlightGutterLine && this.$updateGutterLineHighlight(); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { this.$markerFront.update(config); } if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { this.$markerBack.update(config); } this._signal("afterRender"); }; this.$autosize = function() { var height = this.session.getScreenLength() * this.lineHeight; var maxHeight = this.$maxLines * this.lineHeight; var desiredHeight = Math.min(maxHeight, Math.max((this.$minLines || 1) * this.lineHeight, height) ) + this.scrollMargin.v + (this.$extraHeight || 0); if (this.$horizScroll) desiredHeight += this.scrollBarH.getHeight(); if (this.$maxPixelHeight && desiredHeight > this.$maxPixelHeight) desiredHeight = this.$maxPixelHeight; var vScroll = height > maxHeight; if (desiredHeight != this.desiredHeight || this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { if (vScroll != this.$vScroll) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } var w = this.container.clientWidth; this.container.style.height = desiredHeight + "px"; this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); this.desiredHeight = desiredHeight; this._signal("autosize"); } }; this.$computeLayerConfig = function() { var session = this.session; var size = this.$size; var hideScrollbars = size.height <= 2 * this.lineHeight; var screenLines = this.session.getScreenLength(); var maxHeight = screenLines * this.lineHeight; var longestLine = this.$getLongestLine(); var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || size.scrollerWidth - longestLine - 2 * this.$padding < 0); var hScrollChanged = this.$horizScroll !== horizScroll; if (hScrollChanged) { this.$horizScroll = horizScroll; this.scrollBarH.setVisible(horizScroll); } var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine if (this.$maxLines && this.lineHeight > 1) this.$autosize(); var offset = this.scrollTop % this.lineHeight; var minHeight = size.scrollerHeight + this.lineHeight; var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd : 0; maxHeight += scrollPastEnd; var sm = this.scrollMargin; this.session.setScrollTop(Math.max(-sm.top, Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); var vScrollChanged = vScrollBefore !== vScroll; if (vScrollChanged) { this.$vScroll = vScroll; this.scrollBarV.setVisible(vScroll); } var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); var lastRow = firstRow + lineCount; var firstRowScreen, firstRowHeight; var lineHeight = this.lineHeight; firstRow = session.screenToDocumentRow(firstRow, 0); var foldLine = session.getFoldLine(firstRow); if (foldLine) { firstRow = foldLine.start.row; } firstRowScreen = session.documentToScreenRow(firstRow, 0); firstRowHeight = session.getRowLength(firstRow) * lineHeight; lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + firstRowHeight; offset = this.scrollTop - firstRowScreen * lineHeight; var changes = 0; if (this.layerConfig.width != longestLine) changes = this.CHANGE_H_SCROLL; if (hScrollChanged || vScrollChanged) { changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); this._signal("scrollbarVisibilityChanged"); if (vScrollChanged) longestLine = this.$getLongestLine(); } this.layerConfig = { width : longestLine, padding : this.$padding, firstRow : firstRow, firstRowScreen: firstRowScreen, lastRow : lastRow, lineHeight : lineHeight, characterWidth : this.characterWidth, minHeight : minHeight, maxHeight : maxHeight, offset : offset, gutterOffset : lineHeight ? Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)) : 0, height : this.$size.scrollerHeight }; return changes; }; this.$updateLines = function() { var firstRow = this.$changedLines.firstRow; var lastRow = this.$changedLines.lastRow; this.$changedLines = null; var layerConfig = this.layerConfig; if (firstRow > layerConfig.lastRow + 1) { return; } if (lastRow < layerConfig.firstRow) { return; } if (lastRow === Infinity) { if (this.$showGutter) this.$gutterLayer.update(layerConfig); this.$textLayer.update(layerConfig); return; } this.$textLayer.updateLines(layerConfig, firstRow, lastRow); return true; }; this.$getLongestLine = function() { var charCount = this.session.getScreenWidth(); if (this.showInvisibles && !this.session.$useWrapMode) charCount += 1; return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); }; this.updateFrontMarkers = function() { this.$markerFront.setMarkers(this.session.getMarkers(true)); this.$loop.schedule(this.CHANGE_MARKER_FRONT); }; this.updateBackMarkers = function() { this.$markerBack.setMarkers(this.session.getMarkers()); this.$loop.schedule(this.CHANGE_MARKER_BACK); }; this.addGutterDecoration = function(row, className){ this.$gutterLayer.addGutterDecoration(row, className); }; this.removeGutterDecoration = function(row, className){ this.$gutterLayer.removeGutterDecoration(row, className); }; this.updateBreakpoints = function(rows) { this.$loop.schedule(this.CHANGE_GUTTER); }; this.setAnnotations = function(annotations) { this.$gutterLayer.setAnnotations(annotations); this.$loop.schedule(this.CHANGE_GUTTER); }; this.updateCursor = function() { this.$loop.schedule(this.CHANGE_CURSOR); }; this.hideCursor = function() { this.$cursorLayer.hideCursor(); }; this.showCursor = function() { this.$cursorLayer.showCursor(); }; this.scrollSelectionIntoView = function(anchor, lead, offset) { this.scrollCursorIntoView(anchor, offset); this.scrollCursorIntoView(lead, offset); }; this.scrollCursorIntoView = function(cursor, offset, $viewMargin) { if (this.$size.scrollerHeight === 0) return; var pos = this.$cursorLayer.getPixelPosition(cursor); var left = pos.left; var top = pos.top; var topMargin = $viewMargin && $viewMargin.top || 0; var bottomMargin = $viewMargin && $viewMargin.bottom || 0; var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; if (scrollTop + topMargin > top) { if (offset && scrollTop + topMargin > top + this.lineHeight) top -= offset * this.$size.scrollerHeight; if (top === 0) top = -this.scrollMargin.top; this.session.setScrollTop(top); } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) { if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight) top += offset * this.$size.scrollerHeight; this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); } var scrollLeft = this.scrollLeft; if (scrollLeft > left) { if (left < this.$padding + 2 * this.layerConfig.characterWidth) left = -this.scrollMargin.left; this.session.setScrollLeft(left); } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) { this.session.setScrollLeft(0); } }; this.getScrollTop = function() { return this.session.getScrollTop(); }; this.getScrollLeft = function() { return this.session.getScrollLeft(); }; this.getScrollTopRow = function() { return this.scrollTop / this.lineHeight; }; this.getScrollBottomRow = function() { return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); }; this.scrollToRow = function(row) { this.session.setScrollTop(row * this.lineHeight); }; this.alignCursor = function(cursor, alignment) { if (typeof cursor == "number") cursor = {row: cursor, column: 0}; var pos = this.$cursorLayer.getPixelPosition(cursor); var h = this.$size.scrollerHeight - this.lineHeight; var offset = pos.top - h * (alignment || 0); this.session.setScrollTop(offset); return offset; }; this.STEPS = 8; this.$calcSteps = function(fromValue, toValue){ var i = 0; var l = this.STEPS; var steps = []; var func = function(t, x_min, dx) { return dx * (Math.pow(t - 1, 3) + 1) + x_min; }; for (i = 0; i < l; ++i) steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); return steps; }; this.scrollToLine = function(line, center, animate, callback) { var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); var offset = pos.top; if (center) offset -= this.$size.scrollerHeight / 2; var initialScroll = this.scrollTop; this.session.setScrollTop(offset); if (animate !== false) this.animateScrolling(initialScroll, callback); }; this.animateScrolling = function(fromValue, callback) { var toValue = this.scrollTop; if (!this.$animatedScroll) return; var _self = this; if (fromValue == toValue) return; if (this.$scrollAnimation) { var oldSteps = this.$scrollAnimation.steps; if (oldSteps.length) { fromValue = oldSteps[0]; if (fromValue == toValue) return; } } var steps = _self.$calcSteps(fromValue, toValue); this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps}; clearInterval(this.$timer); _self.session.setScrollTop(steps.shift()); _self.session.$scrollTop = toValue; this.$timer = setInterval(function() { if (steps.length) { _self.session.setScrollTop(steps.shift()); _self.session.$scrollTop = toValue; } else if (toValue != null) { _self.session.$scrollTop = -1; _self.session.setScrollTop(toValue); toValue = null; } else { _self.$timer = clearInterval(_self.$timer); _self.$scrollAnimation = null; callback && callback(); } }, 10); }; this.scrollToY = function(scrollTop) { if (this.scrollTop !== scrollTop) { this.$loop.schedule(this.CHANGE_SCROLL); this.scrollTop = scrollTop; } }; this.scrollToX = function(scrollLeft) { if (this.scrollLeft !== scrollLeft) this.scrollLeft = scrollLeft; this.$loop.schedule(this.CHANGE_H_SCROLL); }; this.scrollTo = function(x, y) { this.session.setScrollTop(y); this.session.setScrollLeft(y); }; this.scrollBy = function(deltaX, deltaY) { deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); }; this.isScrollableBy = function(deltaX, deltaY) { if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) return true; if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) return true; if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) return true; if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - this.layerConfig.width < -1 + this.scrollMargin.right) return true; }; this.pixelToScreenCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); var col = Math.round(offset); return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; }; this.screenToTextCoordinates = function(x, y) { var canvasPos = this.scroller.getBoundingClientRect(); var col = Math.round( (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth ); var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight; return this.session.screenToDocumentPosition(row, Math.max(col, 0)); }; this.textToScreenCoordinates = function(row, column) { var canvasPos = this.scroller.getBoundingClientRect(); var pos = this.session.documentToScreenPosition(row, column); var x = this.$padding + Math.round(pos.column * this.characterWidth); var y = pos.row * this.lineHeight; return { pageX: canvasPos.left + x - this.scrollLeft, pageY: canvasPos.top + y - this.scrollTop }; }; this.visualizeFocus = function() { dom.addCssClass(this.container, "ace_focus"); }; this.visualizeBlur = function() { dom.removeCssClass(this.container, "ace_focus"); }; this.showComposition = function(position) { if (!this.$composition) this.$composition = { keepTextAreaAtCursor: this.$keepTextAreaAtCursor, cssText: this.textarea.style.cssText }; this.$keepTextAreaAtCursor = true; dom.addCssClass(this.textarea, "ace_composition"); this.textarea.style.cssText = ""; this.$moveTextAreaToCursor(); }; this.setCompositionText = function(text) { this.$moveTextAreaToCursor(); }; this.hideComposition = function() { if (!this.$composition) return; dom.removeCssClass(this.textarea, "ace_composition"); this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor; this.textarea.style.cssText = this.$composition.cssText; this.$composition = null; }; this.setTheme = function(theme, cb) { var _self = this; this.$themeId = theme; _self._dispatchEvent('themeChange',{theme:theme}); if (!theme || typeof theme == "string") { var moduleName = theme || this.$options.theme.initialValue; config.loadModule(["theme", moduleName], afterLoad); } else { afterLoad(theme); } function afterLoad(module) { if (_self.$themeId != theme) return cb && cb(); if (!module || !module.cssClass) throw new Error("couldn't load module " + theme + " or it didn't call define"); dom.importCssString( module.cssText, module.cssClass, _self.container.ownerDocument ); if (_self.theme) dom.removeCssClass(_self.container, _self.theme.cssClass); var padding = "padding" in module ? module.padding : "padding" in (_self.theme || {}) ? 4 : _self.$padding; if (_self.$padding && padding != _self.$padding) _self.setPadding(padding); _self.$theme = module.cssClass; _self.theme = module; dom.addCssClass(_self.container, module.cssClass); dom.setCssClass(_self.container, "ace_dark", module.isDark); if (_self.$size) { _self.$size.width = 0; _self.$updateSizeAsync(); } _self._dispatchEvent('themeLoaded', {theme:module}); cb && cb(); } }; this.getTheme = function() { return this.$themeId; }; this.setStyle = function(style, include) { dom.setCssClass(this.container, style, include !== false); }; this.unsetStyle = function(style) { dom.removeCssClass(this.container, style); }; this.setCursorStyle = function(style) { if (this.scroller.style.cursor != style) this.scroller.style.cursor = style; }; this.setMouseCursor = function(cursorStyle) { this.scroller.style.cursor = cursorStyle; }; this.destroy = function() { this.$textLayer.destroy(); this.$cursorLayer.destroy(); }; }).call(VirtualRenderer.prototype); config.defineOptions(VirtualRenderer.prototype, "renderer", { animatedScroll: {initialValue: false}, showInvisibles: { set: function(value) { if (this.$textLayer.setShowInvisibles(value)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: false }, showPrintMargin: { set: function() { this.$updatePrintMargin(); }, initialValue: true }, printMarginColumn: { set: function() { this.$updatePrintMargin(); }, initialValue: 80 }, printMargin: { set: function(val) { if (typeof val == "number") this.$printMarginColumn = val; this.$showPrintMargin = !!val; this.$updatePrintMargin(); }, get: function() { return this.$showPrintMargin && this.$printMarginColumn; } }, showGutter: { set: function(show){ this.$gutter.style.display = show ? "block" : "none"; this.$loop.schedule(this.CHANGE_FULL); this.onGutterResize(); }, initialValue: true }, fadeFoldWidgets: { set: function(show) { dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); }, initialValue: false }, showFoldWidgets: { set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)}, initialValue: true }, showLineNumbers: { set: function(show) { this.$gutterLayer.setShowLineNumbers(show); this.$loop.schedule(this.CHANGE_GUTTER); }, initialValue: true }, displayIndentGuides: { set: function(show) { if (this.$textLayer.setDisplayIndentGuides(show)) this.$loop.schedule(this.CHANGE_TEXT); }, initialValue: true }, highlightGutterLine: { set: function(shouldHighlight) { if (!this.$gutterLineHighlight) { this.$gutterLineHighlight = dom.createElement("div"); this.$gutterLineHighlight.className = "ace_gutter-active-line"; this.$gutter.appendChild(this.$gutterLineHighlight); return; } this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; if (this.$cursorLayer.$pixelPos) this.$updateGutterLineHighlight(); }, initialValue: false, value: true }, hScrollBarAlwaysVisible: { set: function(val) { if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, vScrollBarAlwaysVisible: { set: function(val) { if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: false }, fontSize: { set: function(size) { if (typeof size == "number") size = size + "px"; this.container.style.fontSize = size; this.updateFontSize(); }, initialValue: 12 }, fontFamily: { set: function(name) { this.container.style.fontFamily = name; this.updateFontSize(); } }, maxLines: { set: function(val) { this.updateFull(); } }, minLines: { set: function(val) { this.updateFull(); } }, maxPixelHeight: { set: function(val) { this.updateFull(); }, initialValue: 0 }, scrollPastEnd: { set: function(val) { val = +val || 0; if (this.$scrollPastEnd == val) return; this.$scrollPastEnd = val; this.$loop.schedule(this.CHANGE_SCROLL); }, initialValue: 0, handlesSet: true }, fixedWidthGutter: { set: function(val) { this.$gutterLayer.$fixedWidth = !!val; this.$loop.schedule(this.CHANGE_GUTTER); } }, theme: { set: function(val) { this.setTheme(val) }, get: function() { return this.$themeId || this.theme; }, initialValue: "./theme/textmate", handlesSet: true } }); exports.VirtualRenderer = VirtualRenderer; }); ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var net = require("../lib/net"); var EventEmitter = require("../lib/event_emitter").EventEmitter; var config = require("../config"); var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.onMessage = this.onMessage.bind(this); if (require.nameToUrl && !require.toUrl) require.toUrl = require.nameToUrl; if (config.get("packaged") || !require.toUrl) { workerUrl = workerUrl || config.moduleUrl(mod, "worker"); } else { var normalizePath = this.$normalizePath; workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); var tlns = {}; topLevelNamespaces.forEach(function(ns) { tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); }); } try { this.$worker = new Worker(workerUrl); } catch(e) { if (e instanceof window.DOMException) { var blob = this.$workerBlob(workerUrl); var URL = window.URL || window.webkitURL; var blobURL = URL.createObjectURL(blob); this.$worker = new Worker(blobURL); URL.revokeObjectURL(blobURL); } else { throw e; } } this.$worker.postMessage({ init : true, tlns : tlns, module : mod, classname : classname }); this.callbackId = 1; this.callbacks = {}; this.$worker.onmessage = this.onMessage; }; (function(){ oop.implement(this, EventEmitter); this.onMessage = function(e) { var msg = e.data; switch(msg.type) { case "event": this._signal(msg.name, {data: msg.data}); break; case "call": var callback = this.callbacks[msg.id]; if (callback) { callback(msg.data); delete this.callbacks[msg.id]; } break; case "error": this.reportError(msg.data); break; case "log": window.console && console.log && console.log.apply(console, msg.data); break; } }; this.reportError = function(err) { window.console && console.error && console.error(err); }; this.$normalizePath = function(path) { return net.qualifyURL(path); }; this.terminate = function() { this._signal("terminate", {}); this.deltaQueue = null; this.$worker.terminate(); this.$worker = null; if (this.$doc) this.$doc.off("change", this.changeListener); this.$doc = null; }; this.send = function(cmd, args) { this.$worker.postMessage({command: cmd, args: args}); }; this.call = function(cmd, args, callback) { if (callback) { var id = this.callbackId++; this.callbacks[id] = callback; args.push(id); } this.send(cmd, args); }; this.emit = function(event, data) { try { this.$worker.postMessage({event: event, data: {data: data.data}}); } catch(ex) { console.error(ex.stack); } }; this.attachToDocument = function(doc) { if(this.$doc) this.terminate(); this.$doc = doc; this.call("setValue", [doc.getValue()]); doc.on("change", this.changeListener); }; this.changeListener = function(delta) { if (!this.deltaQueue) { this.deltaQueue = []; setTimeout(this.$sendDeltaQueue, 0); } if (delta.action == "insert") this.deltaQueue.push(delta.start, delta.lines); else this.deltaQueue.push(delta.start, delta.end); }; this.$sendDeltaQueue = function() { var q = this.deltaQueue; if (!q) return; this.deltaQueue = null; if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { this.call("setValue", [this.$doc.getValue()]); } else this.emit("change", {data: q}); }; this.$workerBlob = function(workerUrl) { var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; try { return new Blob([script], {"type": "application/javascript"}); } catch (e) { // Backwards-compatibility var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; var blobBuilder = new BlobBuilder(); blobBuilder.append(script); return blobBuilder.getBlob("application/javascript"); } }; }).call(WorkerClient.prototype); var UIWorkerClient = function(topLevelNamespaces, mod, classname) { this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); this.changeListener = this.changeListener.bind(this); this.callbackId = 1; this.callbacks = {}; this.messageBuffer = []; var main = null; var emitSync = false; var sender = Object.create(EventEmitter); var _self = this; this.$worker = {}; this.$worker.terminate = function() {}; this.$worker.postMessage = function(e) { _self.messageBuffer.push(e); if (main) { if (emitSync) setTimeout(processNext); else processNext(); } }; this.setEmitSync = function(val) { emitSync = val }; var processNext = function() { var msg = _self.messageBuffer.shift(); if (msg.command) main[msg.command].apply(main, msg.args); else if (msg.event) sender._signal(msg.event, msg.data); }; sender.postMessage = function(msg) { _self.onMessage({data: msg}); }; sender.callback = function(data, callbackId) { this.postMessage({type: "call", id: callbackId, data: data}); }; sender.emit = function(name, data) { this.postMessage({type: "event", name: name, data: data}); }; config.loadModule(["worker", mod], function(Main) { main = new Main[classname](sender); while (_self.messageBuffer.length) processNext(); }); }; UIWorkerClient.prototype = WorkerClient.prototype; exports.UIWorkerClient = UIWorkerClient; exports.WorkerClient = WorkerClient; }); ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module) { "use strict"; var Range = require("./range").Range; var EventEmitter = require("./lib/event_emitter").EventEmitter; var oop = require("./lib/oop"); var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { var _self = this; this.length = length; this.session = session; this.doc = session.getDocument(); this.mainClass = mainClass; this.othersClass = othersClass; this.$onUpdate = this.onUpdate.bind(this); this.doc.on("change", this.$onUpdate); this.$others = others; this.$onCursorChange = function() { setTimeout(function() { _self.onCursorChange(); }); }; this.$pos = pos; var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; this.$undoStackDepth = undoStack.length; this.setup(); session.selection.on("changeCursor", this.$onCursorChange); }; (function() { oop.implement(this, EventEmitter); this.setup = function() { var _self = this; var doc = this.doc; var session = this.session; this.selectionBefore = session.selection.toJSON(); if (session.selection.inMultiSelectMode) session.selection.toSingleRange(); this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); var pos = this.pos; pos.$insertRight = true; pos.detach(); pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); this.others = []; this.$others.forEach(function(other) { var anchor = doc.createAnchor(other.row, other.column); anchor.$insertRight = true; anchor.detach(); _self.others.push(anchor); }); session.setUndoSelect(false); }; this.showOtherMarkers = function() { if (this.othersActive) return; var session = this.session; var _self = this; this.othersActive = true; this.others.forEach(function(anchor) { anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); }); }; this.hideOtherMarkers = function() { if (!this.othersActive) return; this.othersActive = false; for (var i = 0; i < this.others.length; i++) { this.session.removeMarker(this.others[i].markerId); } }; this.onUpdate = function(delta) { if (this.$updating) return this.updateAnchors(delta); var range = delta; if (range.start.row !== range.end.row) return; if (range.start.row !== this.pos.row) return; this.$updating = true; var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; var distanceFromStart = range.start.column - this.pos.column; this.updateAnchors(delta); if (inMainRange) this.length += lengthDiff; if (inMainRange && !this.session.$fromUndo) { if (delta.action === 'insert') { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; this.doc.insertMergedLines(newPos, delta.lines); } } else if (delta.action === 'remove') { for (var i = this.others.length - 1; i >= 0; i--) { var otherPos = this.others[i]; var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); } } } this.$updating = false; this.updateMarkers(); }; this.updateAnchors = function(delta) { this.pos.onChange(delta); for (var i = this.others.length; i--;) this.others[i].onChange(delta); this.updateMarkers(); }; this.updateMarkers = function() { if (this.$updating) return; var _self = this; var session = this.session; var updateMarker = function(pos, className) { session.removeMarker(pos.markerId); pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false); }; updateMarker(this.pos, this.mainClass); for (var i = this.others.length; i--;) updateMarker(this.others[i], this.othersClass); }; this.onCursorChange = function(event) { if (this.$updating || !this.session) return; var pos = this.session.selection.getCursor(); if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { this.showOtherMarkers(); this._emit("cursorEnter", event); } else { this.hideOtherMarkers(); this._emit("cursorLeave", event); } }; this.detach = function() { this.session.removeMarker(this.pos && this.pos.markerId); this.hideOtherMarkers(); this.doc.removeEventListener("change", this.$onUpdate); this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); this.session.setUndoSelect(true); this.session = null; }; this.cancel = function() { if (this.$undoStackDepth === -1) return; var undoManager = this.session.getUndoManager(); var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; for (var i = 0; i < undosRequired; i++) { undoManager.undo(true); } if (this.selectionBefore) this.session.selection.fromJSON(this.selectionBefore); }; }).call(PlaceHolder.prototype); exports.PlaceHolder = PlaceHolder; }); ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { var event = require("../lib/event"); var useragent = require("../lib/useragent"); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } function onMouseDown(e) { var ev = e.domEvent; var alt = ev.altKey; var shift = ev.shiftKey; var ctrl = ev.ctrlKey; var accel = e.getAccelKey(); var button = e.getButton(); if (ctrl && useragent.isMac) button = ev.button; if (e.editor.inMultiSelectMode && button == 2) { e.editor.textInput.onContextMenu(e.domEvent); return; } if (!ctrl && !alt && !accel) { if (button === 0 && e.editor.inMultiSelectMode) e.editor.exitMultiSelectMode(); return; } if (button !== 0) return; var editor = e.editor; var selection = editor.selection; var isMultiSelect = editor.inMultiSelectMode; var pos = e.getDocumentPosition(); var cursor = selection.getCursor(); var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); var mouseX = e.x, mouseY = e.y; var onMouseSelection = function(e) { mouseX = e.clientX; mouseY = e.clientY; }; var session = editor.session; var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var screenCursor = screenAnchor; var selectionMode; if (editor.$mouseHandler.$enableJumpToDef) { if (ctrl && alt || accel && alt) selectionMode = shift ? "block" : "add"; else if (alt && editor.$blockSelectEnabled) selectionMode = "block"; } else { if (accel && !alt) { selectionMode = "add"; if (!isMultiSelect && shift) return; } else if (alt && editor.$blockSelectEnabled) { selectionMode = "block"; } } if (selectionMode && useragent.isMac && ev.ctrlKey) { editor.$mouseHandler.cancelContextMenu(); } if (selectionMode == "add") { if (!isMultiSelect && inSelection) return; // dragging if (!isMultiSelect) { var range = selection.toOrientedRange(); editor.addSelectionMarker(range); } var oldRange = selection.rangeList.rangeAtPoint(pos); editor.$blockScrolling++; editor.inVirtualSelectionMode = true; if (shift) { oldRange = null; range = selection.ranges[0] || range; editor.removeSelectionMarker(range); } editor.once("mouseup", function() { var tmpSel = selection.toOrientedRange(); if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) selection.substractPoint(tmpSel.cursor); else { if (shift) { selection.substractPoint(range.cursor); } else if (range) { editor.removeSelectionMarker(range); selection.addRange(range); } selection.addRange(tmpSel); } editor.$blockScrolling--; editor.inVirtualSelectionMode = false; }); } else if (selectionMode == "block") { e.stop(); editor.inVirtualSelectionMode = true; var initialRange; var rectSel = []; var blockSelect = function() { var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) return; screenCursor = newCursor; editor.$blockScrolling++; editor.selection.moveToPosition(cursor); editor.renderer.scrollCursorIntoView(); editor.removeSelectionMarkers(rectSel); rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); rectSel.forEach(editor.addSelectionMarker, editor); editor.updateSelectionMarkers(); editor.$blockScrolling--; }; editor.$blockScrolling++; if (isMultiSelect && !accel) { selection.toSingleRange(); } else if (!isMultiSelect && accel) { initialRange = selection.toOrientedRange(); editor.addSelectionMarker(initialRange); } if (shift) screenAnchor = session.documentToScreenPosition(selection.lead); else selection.moveToPosition(pos); editor.$blockScrolling--; screenCursor = {row: -1, column: -1}; var onMouseSelectionEnd = function(e) { clearInterval(timerId); editor.removeSelectionMarkers(rectSel); if (!rectSel.length) rectSel = [selection.toOrientedRange()]; editor.$blockScrolling++; if (initialRange) { editor.removeSelectionMarker(initialRange); selection.toSingleRange(initialRange); } for (var i = 0; i < rectSel.length; i++) selection.addRange(rectSel[i]); editor.inVirtualSelectionMode = false; editor.$mouseHandler.$clickSelection = null; editor.$blockScrolling--; }; var onSelectionInterval = blockSelect; event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); var timerId = setInterval(function() {onSelectionInterval();}, 20); return e.preventDefault(); } } exports.onMouseDown = onMouseDown; }); ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module) { exports.defaultCommands = [{ name: "addCursorAbove", exec: function(editor) { editor.selectMoreLines(-1); }, bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, scrollIntoView: "cursor", readOnly: true }, { name: "addCursorBelow", exec: function(editor) { editor.selectMoreLines(1); }, bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, scrollIntoView: "cursor", readOnly: true }, { name: "addCursorAboveSkipCurrent", exec: function(editor) { editor.selectMoreLines(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, scrollIntoView: "cursor", readOnly: true }, { name: "addCursorBelowSkipCurrent", exec: function(editor) { editor.selectMoreLines(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectMoreBefore", exec: function(editor) { editor.selectMore(-1); }, bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectMoreAfter", exec: function(editor) { editor.selectMore(1); }, bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectNextBefore", exec: function(editor) { editor.selectMore(-1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, scrollIntoView: "cursor", readOnly: true }, { name: "selectNextAfter", exec: function(editor) { editor.selectMore(1, true); }, bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, scrollIntoView: "cursor", readOnly: true }, { name: "splitIntoLines", exec: function(editor) { editor.multiSelect.splitIntoLines(); }, bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"}, readOnly: true }, { name: "alignCursors", exec: function(editor) { editor.alignCursors(); }, bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"}, scrollIntoView: "cursor" }, { name: "findAll", exec: function(editor) { editor.findAll(); }, bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"}, scrollIntoView: "cursor", readOnly: true }]; exports.multiSelectCommands = [{ name: "singleSelection", bindKey: "esc", exec: function(editor) { editor.exitMultiSelectMode(); }, scrollIntoView: "cursor", readOnly: true, isAvailable: function(editor) {return editor && editor.inMultiSelectMode} }]; var HashHandler = require("../keyboard/hash_handler").HashHandler; exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); }); ace.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) { var RangeList = require("./range_list").RangeList; var Range = require("./range").Range; var Selection = require("./selection").Selection; var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; var event = require("./lib/event"); var lang = require("./lib/lang"); var commands = require("./commands/multi_select_commands"); exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); var Search = require("./search").Search; var search = new Search(); function find(session, needle, dir) { search.$options.wrap = true; search.$options.needle = needle; search.$options.backwards = dir == -1; return search.find(session); } var EditSession = require("./edit_session").EditSession; (function() { this.getSelectionMarkers = function() { return this.$selectionMarkers; }; }).call(EditSession.prototype); (function() { this.ranges = null; this.rangeList = null; this.addRange = function(range, $blockChangeEvents) { if (!range) return; if (!this.inMultiSelectMode && this.rangeCount === 0) { var oldRange = this.toOrientedRange(); this.rangeList.add(oldRange); this.rangeList.add(range); if (this.rangeList.ranges.length != 2) { this.rangeList.removeAll(); return $blockChangeEvents || this.fromOrientedRange(range); } this.rangeList.removeAll(); this.rangeList.add(oldRange); this.$onAddRange(oldRange); } if (!range.cursor) range.cursor = range.end; var removed = this.rangeList.add(range); this.$onAddRange(range); if (removed.length) this.$onRemoveRange(removed); if (this.rangeCount > 1 && !this.inMultiSelectMode) { this._signal("multiSelect"); this.inMultiSelectMode = true; this.session.$undoSelect = false; this.rangeList.attach(this.session); } return $blockChangeEvents || this.fromOrientedRange(range); }; this.toSingleRange = function(range) { range = range || this.ranges[0]; var removed = this.rangeList.removeAll(); if (removed.length) this.$onRemoveRange(removed); range && this.fromOrientedRange(range); }; this.substractPoint = function(pos) { var removed = this.rangeList.substractPoint(pos); if (removed) { this.$onRemoveRange(removed); return removed[0]; } }; this.mergeOverlappingRanges = function() { var removed = this.rangeList.merge(); if (removed.length) this.$onRemoveRange(removed); else if(this.ranges[0]) this.fromOrientedRange(this.ranges[0]); }; this.$onAddRange = function(range) { this.rangeCount = this.rangeList.ranges.length; this.ranges.unshift(range); this._signal("addRange", {range: range}); }; this.$onRemoveRange = function(removed) { this.rangeCount = this.rangeList.ranges.length; if (this.rangeCount == 1 && this.inMultiSelectMode) { var lastRange = this.rangeList.ranges.pop(); removed.push(lastRange); this.rangeCount = 0; } for (var i = removed.length; i--; ) { var index = this.ranges.indexOf(removed[i]); this.ranges.splice(index, 1); } this._signal("removeRange", {ranges: removed}); if (this.rangeCount === 0 && this.inMultiSelectMode) { this.inMultiSelectMode = false; this._signal("singleSelect"); this.session.$undoSelect = true; this.rangeList.detach(this.session); } lastRange = lastRange || this.ranges[0]; if (lastRange && !lastRange.isEqual(this.getRange())) this.fromOrientedRange(lastRange); }; this.$initRangeList = function() { if (this.rangeList) return; this.rangeList = new RangeList(); this.ranges = []; this.rangeCount = 0; }; this.getAllRanges = function() { return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; }; this.splitIntoLines = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var range = this.getRange(); var isBackwards = this.isBackwards(); var startRow = range.start.row; var endRow = range.end.row; if (startRow == endRow) { if (isBackwards) var start = range.end, end = range.start; else var start = range.start, end = range.end; this.addRange(Range.fromPoints(end, end)); this.addRange(Range.fromPoints(start, start)); return; } var rectSel = []; var r = this.getLineRange(startRow, true); r.start.column = range.start.column; rectSel.push(r); for (var i = startRow + 1; i < endRow; i++) rectSel.push(this.getLineRange(i, true)); r = this.getLineRange(endRow, true); r.end.column = range.end.column; rectSel.push(r); rectSel.forEach(this.addRange, this); } }; this.toggleBlockSelection = function () { if (this.rangeCount > 1) { var ranges = this.rangeList.ranges; var lastRange = ranges[ranges.length - 1]; var range = Range.fromPoints(ranges[0].start, lastRange.end); this.toSingleRange(); this.setSelectionRange(range, lastRange.cursor == lastRange.start); } else { var cursor = this.session.documentToScreenPosition(this.selectionLead); var anchor = this.session.documentToScreenPosition(this.selectionAnchor); var rectSel = this.rectangularRangeBlock(cursor, anchor); rectSel.forEach(this.addRange, this); } }; this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { var rectSel = []; var xBackwards = screenCursor.column < screenAnchor.column; if (xBackwards) { var startColumn = screenCursor.column; var endColumn = screenAnchor.column; } else { var startColumn = screenAnchor.column; var endColumn = screenCursor.column; } var yBackwards = screenCursor.row < screenAnchor.row; if (yBackwards) { var startRow = screenCursor.row; var endRow = screenAnchor.row; } else { var startRow = screenAnchor.row; var endRow = screenCursor.row; } if (startColumn < 0) startColumn = 0; if (startRow < 0) startRow = 0; if (startRow == endRow) includeEmptyLines = true; for (var row = startRow; row <= endRow; row++) { var range = Range.fromPoints( this.session.screenToDocumentPosition(row, startColumn), this.session.screenToDocumentPosition(row, endColumn) ); if (range.isEmpty()) { if (docEnd && isSamePoint(range.end, docEnd)) break; var docEnd = range.end; } range.cursor = xBackwards ? range.start : range.end; rectSel.push(range); } if (yBackwards) rectSel.reverse(); if (!includeEmptyLines) { var end = rectSel.length - 1; while (rectSel[end].isEmpty() && end > 0) end--; if (end > 0) { var start = 0; while (rectSel[start].isEmpty()) start++; } for (var i = end; i >= start; i--) { if (rectSel[i].isEmpty()) rectSel.splice(i, 1); } } return rectSel; }; }).call(Selection.prototype); var Editor = require("./editor").Editor; (function() { this.updateSelectionMarkers = function() { this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.addSelectionMarker = function(orientedRange) { if (!orientedRange.cursor) orientedRange.cursor = orientedRange.end; var style = this.getSelectionStyle(); orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); this.session.$selectionMarkers.push(orientedRange); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; return orientedRange; }; this.removeSelectionMarker = function(range) { if (!range.marker) return; this.session.removeMarker(range.marker); var index = this.session.$selectionMarkers.indexOf(range); if (index != -1) this.session.$selectionMarkers.splice(index, 1); this.session.selectionMarkerCount = this.session.$selectionMarkers.length; }; this.removeSelectionMarkers = function(ranges) { var markerList = this.session.$selectionMarkers; for (var i = ranges.length; i--; ) { var range = ranges[i]; if (!range.marker) continue; this.session.removeMarker(range.marker); var index = markerList.indexOf(range); if (index != -1) markerList.splice(index, 1); } this.session.selectionMarkerCount = markerList.length; }; this.$onAddRange = function(e) { this.addSelectionMarker(e.range); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onRemoveRange = function(e) { this.removeSelectionMarkers(e.ranges); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onMultiSelect = function(e) { if (this.inMultiSelectMode) return; this.inMultiSelectMode = true; this.setStyle("ace_multiselect"); this.keyBinding.addKeyboardHandler(commands.keyboardHandler); this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); }; this.$onSingleSelect = function(e) { if (this.session.multiSelect.inVirtualMode) return; this.inMultiSelectMode = false; this.unsetStyle("ace_multiselect"); this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); this._emit("changeSelection"); }; this.$onMultiSelectExec = function(e) { var command = e.command; var editor = e.editor; if (!editor.multiSelect) return; if (!command.multiSelectAction) { var result = command.exec(editor, e.args || {}); editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); editor.multiSelect.mergeOverlappingRanges(); } else if (command.multiSelectAction == "forEach") { result = editor.forEachSelection(command, e.args); } else if (command.multiSelectAction == "forEachLine") { result = editor.forEachSelection(command, e.args, true); } else if (command.multiSelectAction == "single") { editor.exitMultiSelectMode(); result = command.exec(editor, e.args || {}); } else { result = command.multiSelectAction(editor, e.args || {}); } return result; }; this.forEachSelection = function(cmd, args, options) { if (this.inVirtualSelectionMode) return; var keepOrder = options && options.keepOrder; var $byLines = options == true || options && options.$byLines var session = this.session; var selection = this.selection; var rangeList = selection.rangeList; var ranges = (keepOrder ? selection : rangeList).ranges; var result; if (!ranges.length) return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); var reg = selection._eventRegistry; selection._eventRegistry = {}; var tmpSel = new Selection(session); this.inVirtualSelectionMode = true; for (var i = ranges.length; i--;) { if ($byLines) { while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) i--; } tmpSel.fromOrientedRange(ranges[i]); tmpSel.index = i; this.selection = session.selection = tmpSel; var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); if (!result && cmdResult !== undefined) result = cmdResult; tmpSel.toOrientedRange(ranges[i]); } tmpSel.detach(); this.selection = session.selection = selection; this.inVirtualSelectionMode = false; selection._eventRegistry = reg; selection.mergeOverlappingRanges(); var anim = this.renderer.$scrollAnimation; this.onCursorChange(); this.onSelectionChange(); if (anim && anim.from == anim.to) this.renderer.animateScrolling(anim.from); return result; }; this.exitMultiSelectMode = function() { if (!this.inMultiSelectMode || this.inVirtualSelectionMode) return; this.multiSelect.toSingleRange(); }; this.getSelectedText = function() { var text = ""; if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { var ranges = this.multiSelect.rangeList.ranges; var buf = []; for (var i = 0; i < ranges.length; i++) { buf.push(this.session.getTextRange(ranges[i])); } var nl = this.session.getDocument().getNewLineCharacter(); text = buf.join(nl); if (text.length == (buf.length - 1) * nl.length) text = ""; } else if (!this.selection.isEmpty()) { text = this.session.getTextRange(this.getSelectionRange()); } return text; }; this.$checkMultiselectChange = function(e, anchor) { if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { var range = this.multiSelect.ranges[0]; if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) return; var pos = anchor == this.multiSelect.anchor ? range.cursor == range.start ? range.end : range.start : range.cursor; if (pos.row != anchor.row || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); } }; this.findAll = function(needle, options, additive) { options = options || {}; options.needle = needle || options.needle; if (options.needle == undefined) { var range = this.selection.isEmpty() ? this.selection.getWordRange() : this.selection.getRange(); options.needle = this.session.getTextRange(range); } this.$search.set(options); var ranges = this.$search.findAll(this.session); if (!ranges.length) return 0; this.$blockScrolling += 1; var selection = this.multiSelect; if (!additive) selection.toSingleRange(ranges[0]); for (var i = ranges.length; i--; ) selection.addRange(ranges[i], true); if (range && selection.rangeList.rangeAtPoint(range.start)) selection.addRange(range, true); this.$blockScrolling -= 1; return ranges.length; }; this.selectMoreLines = function(dir, skip) { var range = this.selection.toOrientedRange(); var isBackwards = range.cursor == range.end; var screenLead = this.session.documentToScreenPosition(range.cursor); if (this.selection.$desiredColumn) screenLead.column = this.selection.$desiredColumn; var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); if (!range.isEmpty()) { var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); } else { var anchor = lead; } if (isBackwards) { var newRange = Range.fromPoints(lead, anchor); newRange.cursor = newRange.start; } else { var newRange = Range.fromPoints(anchor, lead); newRange.cursor = newRange.end; } newRange.desiredColumn = screenLead.column; if (!this.selection.inMultiSelectMode) { this.selection.addRange(range); } else { if (skip) var toRemove = range.cursor; } this.selection.addRange(newRange); if (toRemove) this.selection.substractPoint(toRemove); }; this.transposeSelections = function(dir) { var session = this.session; var sel = session.multiSelect; var all = sel.ranges; for (var i = all.length; i--; ) { var range = all[i]; if (range.isEmpty()) { var tmp = session.getWordRange(range.start.row, range.start.column); range.start.row = tmp.start.row; range.start.column = tmp.start.column; range.end.row = tmp.end.row; range.end.column = tmp.end.column; } } sel.mergeOverlappingRanges(); var words = []; for (var i = all.length; i--; ) { var range = all[i]; words.unshift(session.getTextRange(range)); } if (dir < 0) words.unshift(words.pop()); else words.push(words.shift()); for (var i = all.length; i--; ) { var range = all[i]; var tmp = range.clone(); session.replace(range, words[i]); range.start.row = tmp.start.row; range.start.column = tmp.start.column; } }; this.selectMore = function(dir, skip, stopAtFirst) { var session = this.session; var sel = session.multiSelect; var range = sel.toOrientedRange(); if (range.isEmpty()) { range = session.getWordRange(range.start.row, range.start.column); range.cursor = dir == -1 ? range.start : range.end; this.multiSelect.addRange(range); if (stopAtFirst) return; } var needle = session.getTextRange(range); var newRange = find(session, needle, dir); if (newRange) { newRange.cursor = dir == -1 ? newRange.start : newRange.end; this.$blockScrolling += 1; this.session.unfold(newRange); this.multiSelect.addRange(newRange); this.$blockScrolling -= 1; this.renderer.scrollCursorIntoView(null, 0.5); } if (skip) this.multiSelect.substractPoint(range.cursor); }; this.alignCursors = function() { var session = this.session; var sel = session.multiSelect; var ranges = sel.ranges; var row = -1; var sameRowRanges = ranges.filter(function(r) { if (r.cursor.row == row) return true; row = r.cursor.row; }); if (!ranges.length || sameRowRanges.length == ranges.length - 1) { var range = this.selection.getRange(); var fr = range.start.row, lr = range.end.row; var guessRange = fr == lr; if (guessRange) { var max = this.session.getLength(); var line; do { line = this.session.getLine(lr); } while (/[=:]/.test(line) && ++lr < max); do { line = this.session.getLine(fr); } while (/[=:]/.test(line) && --fr > 0); if (fr < 0) fr = 0; if (lr >= max) lr = max - 1; } var lines = this.session.removeFullLines(fr, lr); lines = this.$reAlignText(lines, guessRange); this.session.insert({row: fr, column: 0}, lines.join("\n") + "\n"); if (!guessRange) { range.start.column = 0; range.end.column = lines[lines.length - 1].length; } this.selection.setRange(range); } else { sameRowRanges.forEach(function(r) { sel.substractPoint(r.cursor); }); var maxCol = 0; var minSpace = Infinity; var spaceOffsets = ranges.map(function(r) { var p = r.cursor; var line = session.getLine(p.row); var spaceOffset = line.substr(p.column).search(/\S/g); if (spaceOffset == -1) spaceOffset = 0; if (p.column > maxCol) maxCol = p.column; if (spaceOffset < minSpace) minSpace = spaceOffset; return spaceOffset; }); ranges.forEach(function(r, i) { var p = r.cursor; var l = maxCol - p.column; var d = spaceOffsets[i] - minSpace; 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)); r.start.column = r.end.column = maxCol; r.start.row = r.end.row = p.row; r.cursor = r.end; }); sel.fromOrientedRange(ranges[0]); this.renderer.updateCursor(); this.renderer.updateBackMarkers(); } }; this.$reAlignText = function(lines, forceLeft) { var isLeftAligned = true, isRightAligned = true; var startW, textW, endW; return lines.map(function(line) { var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); if (!m) return [line]; if (startW == null) { startW = m[1].length; textW = m[2].length; endW = m[3].length; return m; } if (startW + textW + endW != m[1].length + m[2].length + m[3].length) isRightAligned = false; if (startW != m[1].length) isLeftAligned = false; if (startW > m[1].length) startW = m[1].length; if (textW < m[2].length) textW = m[2].length; if (endW > m[3].length) endW = m[3].length; return m; }).map(forceLeft ? alignLeft : isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); function spaces(n) { return lang.stringRepeat(" ", n); } function alignLeft(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(textW - m[2].length + endW) + m[4].replace(/^([=:])\s+/, "$1 "); } function alignRight(m) { return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] + spaces(endW, " ") + m[4].replace(/^([=:])\s+/, "$1 "); } function unAlign(m) { return !m[2] ? m[0] : spaces(startW) + m[2] + spaces(endW) + m[4].replace(/^([=:])\s+/, "$1 "); } }; }).call(Editor.prototype); function isSamePoint(p1, p2) { return p1.row == p2.row && p1.column == p2.column; } exports.onSessionChange = function(e) { var session = e.session; if (session && !session.multiSelect) { session.$selectionMarkers = []; session.selection.$initRangeList(); session.multiSelect = session.selection; } this.multiSelect = session && session.multiSelect; var oldSession = e.oldSession; if (oldSession) { oldSession.multiSelect.off("addRange", this.$onAddRange); oldSession.multiSelect.off("removeRange", this.$onRemoveRange); oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); } if (session) { session.multiSelect.on("addRange", this.$onAddRange); session.multiSelect.on("removeRange", this.$onRemoveRange); session.multiSelect.on("multiSelect", this.$onMultiSelect); session.multiSelect.on("singleSelect", this.$onSingleSelect); session.multiSelect.lead.on("change", this.$checkMultiselectChange); session.multiSelect.anchor.on("change", this.$checkMultiselectChange); } if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { if (session.selection.inMultiSelectMode) this.$onMultiSelect(); else this.$onSingleSelect(); } }; function MultiSelect(editor) { if (editor.$multiselectOnSessionChange) return; editor.$onAddRange = editor.$onAddRange.bind(editor); editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); editor.$multiselectOnSessionChange(editor); editor.on("changeSession", editor.$multiselectOnSessionChange); editor.on("mousedown", onMouseDown); editor.commands.addCommands(commands.defaultCommands); addAltCursorListeners(editor); } function addAltCursorListeners(editor){ var el = editor.textInput.getElement(); var altCursor = false; event.addListener(el, "keydown", function(e) { var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); if (editor.$blockSelectEnabled && altDown) { if (!altCursor) { editor.renderer.setMouseCursor("crosshair"); altCursor = true; } } else if (altCursor) { reset(); } }); event.addListener(el, "keyup", reset); event.addListener(el, "blur", reset); function reset(e) { if (altCursor) { editor.renderer.setMouseCursor(""); altCursor = false; } } } exports.MultiSelect = MultiSelect; require("./config").defineOptions(Editor.prototype, "editor", { enableMultiselect: { set: function(val) { MultiSelect(this); if (val) { this.on("changeSession", this.$multiselectOnSessionChange); this.on("mousedown", onMouseDown); } else { this.off("changeSession", this.$multiselectOnSessionChange); this.off("mousedown", onMouseDown); } }, value: true }, enableBlockSelect: { set: function(val) { this.$blockSelectEnabled = val; }, value: true } }); }); ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; (function() { this.foldingStartMarker = null; this.foldingStopMarker = null; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.foldingStartMarker.test(line)) return "start"; if (foldStyle == "markbeginend" && this.foldingStopMarker && this.foldingStopMarker.test(line)) return "end"; return ""; }; this.getFoldWidgetRange = function(session, foldStyle, row) { return null; }; this.indentationBlock = function(session, row, column) { var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1) return; var startColumn = column || line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { var level = session.getLine(row).search(re); if (level == -1) continue; if (level <= startLevel) break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.openingBracketBlock = function(session, bracket, row, column, typeRe) { var start = {row: row, column: column + 1}; var end = session.$findClosingBracket(bracket, start, typeRe); if (!end) return; var fw = session.foldWidgets[end.row]; if (fw == null) fw = session.getFoldWidget(end.row); if (fw == "start" && end.row > start.row) { end.row --; end.column = session.getLine(end.row).length; } return Range.fromPoints(start, end); }; this.closingBracketBlock = function(session, bracket, row, column, typeRe) { var end = {row: row, column: column}; var start = session.$findOpeningBracket(bracket, end); if (!start) return; start.column++; end.column--; return Range.fromPoints(start, end); }; }).call(FoldMode.prototype); }); ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssClass = "ace-tm"; exports.cssText = ".ace-tm .ace_gutter {\ background: #f0f0f0;\ color: #333;\ }\ .ace-tm .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-tm .ace_fold {\ background-color: #6B72E6;\ }\ .ace-tm {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-tm .ace_cursor {\ color: black;\ }\ .ace-tm .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-tm .ace_storage,\ .ace-tm .ace_keyword {\ color: blue;\ }\ .ace-tm .ace_constant {\ color: rgb(197, 6, 11);\ }\ .ace-tm .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-tm .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-tm .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_invalid {\ background-color: rgba(255, 0, 0, 0.1);\ color: red;\ }\ .ace-tm .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-tm .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_support.ace_type,\ .ace-tm .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-tm .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-tm .ace_string {\ color: rgb(3, 106, 7);\ }\ .ace-tm .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-tm .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-tm .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-tm .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-tm .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-tm .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-tm .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-tm .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-tm .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-tm .ace_meta.ace_tag {\ color:rgb(0, 22, 142);\ }\ .ace-tm .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-tm .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-tm .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-tm .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-tm .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-tm .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-tm .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var dom = require("./lib/dom"); var Range = require("./range").Range; function LineWidgets(session) { this.session = session; this.session.widgetManager = this; this.session.getRowLength = this.getRowLength; this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; this.updateOnChange = this.updateOnChange.bind(this); this.renderWidgets = this.renderWidgets.bind(this); this.measureWidgets = this.measureWidgets.bind(this); this.session._changedWidgets = []; this.$onChangeEditor = this.$onChangeEditor.bind(this); this.session.on("change", this.updateOnChange); this.session.on("changeFold", this.updateOnFold); this.session.on("changeEditor", this.$onChangeEditor); } (function() { this.getRowLength = function(row) { var h; if (this.lineWidgets) h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; else h = 0; if (!this.$useWrapMode || !this.$wrapData[row]) { return 1 + h; } else { return this.$wrapData[row].length + 1 + h; } }; this.$getWidgetScreenLength = function() { var screenRows = 0; this.lineWidgets.forEach(function(w){ if (w && w.rowCount && !w.hidden) screenRows += w.rowCount; }); return screenRows; }; this.$onChangeEditor = function(e) { this.attach(e.editor); }; this.attach = function(editor) { if (editor && editor.widgetManager && editor.widgetManager != this) editor.widgetManager.detach(); if (this.editor == editor) return; this.detach(); this.editor = editor; if (editor) { editor.widgetManager = this; editor.renderer.on("beforeRender", this.measureWidgets); editor.renderer.on("afterRender", this.renderWidgets); } }; this.detach = function(e) { var editor = this.editor; if (!editor) return; this.editor = null; editor.widgetManager = null; editor.renderer.off("beforeRender", this.measureWidgets); editor.renderer.off("afterRender", this.renderWidgets); var lineWidgets = this.session.lineWidgets; lineWidgets && lineWidgets.forEach(function(w) { if (w && w.el && w.el.parentNode) { w._inDocument = false; w.el.parentNode.removeChild(w.el); } }); }; this.updateOnFold = function(e, session) { var lineWidgets = session.lineWidgets; if (!lineWidgets || !e.action) return; var fold = e.data; var start = fold.start.row; var end = fold.end.row; var hide = e.action == "add"; for (var i = start + 1; i < end; i++) { if (lineWidgets[i]) lineWidgets[i].hidden = hide; } if (lineWidgets[end]) { if (hide) { if (!lineWidgets[start]) lineWidgets[start] = lineWidgets[end]; else lineWidgets[end].hidden = hide; } else { if (lineWidgets[start] == lineWidgets[end]) lineWidgets[start] = undefined; lineWidgets[end].hidden = hide; } } }; this.updateOnChange = function(delta) { var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var startRow = delta.start.row; var len = delta.end.row - startRow; if (len === 0) { } else if (delta.action == 'remove') { var removed = lineWidgets.splice(startRow + 1, len); removed.forEach(function(w) { w && this.removeLineWidget(w); }, this); this.$updateRows(); } else { var args = new Array(len); args.unshift(startRow, 0); lineWidgets.splice.apply(lineWidgets, args); this.$updateRows(); } }; this.$updateRows = function() { var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var noWidgets = true; lineWidgets.forEach(function(w, i) { if (w) { noWidgets = false; w.row = i; while (w.$oldWidget) { w.$oldWidget.row = i; w = w.$oldWidget; } } }); if (noWidgets) this.session.lineWidgets = null; }; this.addLineWidget = function(w) { if (!this.session.lineWidgets) this.session.lineWidgets = new Array(this.session.getLength()); var old = this.session.lineWidgets[w.row]; if (old) { w.$oldWidget = old; if (old.el && old.el.parentNode) { old.el.parentNode.removeChild(old.el); old._inDocument = false; } } this.session.lineWidgets[w.row] = w; w.session = this.session; var renderer = this.editor.renderer; if (w.html && !w.el) { w.el = dom.createElement("div"); w.el.innerHTML = w.html; } if (w.el) { dom.addCssClass(w.el, "ace_lineWidgetContainer"); w.el.style.position = "absolute"; w.el.style.zIndex = 5; renderer.container.appendChild(w.el); w._inDocument = true; } if (!w.coverGutter) { w.el.style.zIndex = 3; } if (w.pixelHeight == null) { w.pixelHeight = w.el.offsetHeight; } if (w.rowCount == null) { w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; } var fold = this.session.getFoldAt(w.row, 0); w.$fold = fold; if (fold) { var lineWidgets = this.session.lineWidgets; if (w.row == fold.end.row && !lineWidgets[fold.start.row]) lineWidgets[fold.start.row] = w; else w.hidden = true; } this.session._emit("changeFold", {data:{start:{row: w.row}}}); this.$updateRows(); this.renderWidgets(null, renderer); this.onWidgetChanged(w); return w; }; this.removeLineWidget = function(w) { w._inDocument = false; w.session = null; if (w.el && w.el.parentNode) w.el.parentNode.removeChild(w.el); if (w.editor && w.editor.destroy) try { w.editor.destroy(); } catch(e){} if (this.session.lineWidgets) { var w1 = this.session.lineWidgets[w.row] if (w1 == w) { this.session.lineWidgets[w.row] = w.$oldWidget; if (w.$oldWidget) this.onWidgetChanged(w.$oldWidget); } else { while (w1) { if (w1.$oldWidget == w) { w1.$oldWidget = w.$oldWidget; break; } w1 = w1.$oldWidget; } } } this.session._emit("changeFold", {data:{start:{row: w.row}}}); this.$updateRows(); }; this.getWidgetsAtRow = function(row) { var lineWidgets = this.session.lineWidgets; var w = lineWidgets && lineWidgets[row]; var list = []; while (w) { list.push(w); w = w.$oldWidget; } return list; }; this.onWidgetChanged = function(w) { this.session._changedWidgets.push(w); this.editor && this.editor.renderer.updateFull(); }; this.measureWidgets = function(e, renderer) { var changedWidgets = this.session._changedWidgets; var config = renderer.layerConfig; if (!changedWidgets || !changedWidgets.length) return; var min = Infinity; for (var i = 0; i < changedWidgets.length; i++) { var w = changedWidgets[i]; if (!w || !w.el) continue; if (w.session != this.session) continue; if (!w._inDocument) { if (this.session.lineWidgets[w.row] != w) continue; w._inDocument = true; renderer.container.appendChild(w.el); } w.h = w.el.offsetHeight; if (!w.fixedWidth) { w.w = w.el.offsetWidth; w.screenWidth = Math.ceil(w.w / config.characterWidth); } var rowCount = w.h / config.lineHeight; if (w.coverLine) { rowCount -= this.session.getRowLineCount(w.row); if (rowCount < 0) rowCount = 0; } if (w.rowCount != rowCount) { w.rowCount = rowCount; if (w.row < min) min = w.row; } } if (min != Infinity) { this.session._emit("changeFold", {data:{start:{row: min}}}); this.session.lineWidgetWidth = null; } this.session._changedWidgets = []; }; this.renderWidgets = function(e, renderer) { var config = renderer.layerConfig; var lineWidgets = this.session.lineWidgets; if (!lineWidgets) return; var first = Math.min(this.firstRow, config.firstRow); var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); while (first > 0 && !lineWidgets[first]) first--; this.firstRow = config.firstRow; this.lastRow = config.lastRow; renderer.$cursorLayer.config = config; for (var i = first; i <= last; i++) { var w = lineWidgets[i]; if (!w || !w.el) continue; if (w.hidden) { w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; continue; } if (!w._inDocument) { w._inDocument = true; renderer.container.appendChild(w.el); } var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top; if (!w.coverLine) top += config.lineHeight * this.session.getRowLineCount(w.row); w.el.style.top = top - config.offset + "px"; var left = w.coverGutter ? 0 : renderer.gutterWidth; if (!w.fixedWidth) left -= renderer.scrollLeft; w.el.style.left = left + "px"; if (w.fullWidth && w.screenWidth) { w.el.style.minWidth = config.width + 2 * config.padding + "px"; } if (w.fixedWidth) { w.el.style.right = renderer.scrollBar.getWidth() + "px"; } else { w.el.style.right = ""; } } }; }).call(LineWidgets.prototype); exports.LineWidgets = LineWidgets; }); ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"], function(require, exports, module) { "use strict"; var LineWidgets = require("../line_widgets").LineWidgets; var dom = require("../lib/dom"); var Range = require("../range").Range; function binarySearch(array, needle, comparator) { var first = 0; var last = array.length - 1; while (first <= last) { var mid = (first + last) >> 1; var c = comparator(needle, array[mid]); if (c > 0) first = mid + 1; else if (c < 0) last = mid - 1; else return mid; } return -(first + 1); } function findAnnotations(session, row, dir) { var annotations = session.getAnnotations().sort(Range.comparePoints); if (!annotations.length) return; var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints); if (i < 0) i = -i - 1; if (i >= annotations.length) i = dir > 0 ? 0 : annotations.length - 1; else if (i === 0 && dir < 0) i = annotations.length - 1; var annotation = annotations[i]; if (!annotation || !dir) return; if (annotation.row === row) { do { annotation = annotations[i += dir]; } while (annotation && annotation.row === row); if (!annotation) return annotations.slice(); } var matched = []; row = annotation.row; do { matched[dir < 0 ? "unshift" : "push"](annotation); annotation = annotations[i += dir]; } while (annotation && annotation.row == row); return matched.length && matched; } exports.showErrorMarker = function(editor, dir) { var session = editor.session; if (!session.widgetManager) { session.widgetManager = new LineWidgets(session); session.widgetManager.attach(editor); } var pos = editor.getCursorPosition(); var row = pos.row; var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) { return w.type == "errorMarker"; })[0]; if (oldWidget) { oldWidget.destroy(); } else { row -= dir; } var annotations = findAnnotations(session, row, dir); var gutterAnno; if (annotations) { var annotation = annotations[0]; pos.column = (annotation.pos && typeof annotation.column != "number" ? annotation.pos.sc : annotation.column) || 0; pos.row = annotation.row; gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; } else if (oldWidget) { return; } else { gutterAnno = { text: ["Looks good!"], className: "ace_ok" }; } editor.session.unfold(pos.row); editor.selection.moveToPosition(pos); var w = { row: pos.row, fixedWidth: true, coverGutter: true, el: dom.createElement("div"), type: "errorMarker" }; var el = w.el.appendChild(dom.createElement("div")); var arrow = w.el.appendChild(dom.createElement("div")); arrow.className = "error_widget_arrow " + gutterAnno.className; var left = editor.renderer.$cursorLayer .getPixelPosition(pos).left; arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; w.el.className = "error_widget_wrapper"; el.className = "error_widget " + gutterAnno.className; el.innerHTML = gutterAnno.text.join("<br>"); el.appendChild(dom.createElement("div")); var kb = function(_, hashId, keyString) { if (hashId === 0 && (keyString === "esc" || keyString === "return")) { w.destroy(); return {command: "null"}; } }; w.destroy = function() { if (editor.$mouseHandler.isMousePressed) return; editor.keyBinding.removeKeyboardHandler(kb); session.widgetManager.removeLineWidget(w); editor.off("changeSelection", w.destroy); editor.off("changeSession", w.destroy); editor.off("mouseup", w.destroy); editor.off("change", w.destroy); }; editor.keyBinding.addKeyboardHandler(kb); editor.on("changeSelection", w.destroy); editor.on("changeSession", w.destroy); editor.on("mouseup", w.destroy); editor.on("change", w.destroy); editor.session.widgetManager.addLineWidget(w); w.el.onmousedown = editor.focus.bind(editor); editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight}); }; dom.importCssString("\ .error_widget_wrapper {\ background: inherit;\ color: inherit;\ border:none\ }\ .error_widget {\ border-top: solid 2px;\ border-bottom: solid 2px;\ margin: 5px 0;\ padding: 10px 40px;\ white-space: pre-wrap;\ }\ .error_widget.ace_error, .error_widget_arrow.ace_error{\ border-color: #ff5a5a\ }\ .error_widget.ace_warning, .error_widget_arrow.ace_warning{\ border-color: #F1D817\ }\ .error_widget.ace_info, .error_widget_arrow.ace_info{\ border-color: #5a5a5a\ }\ .error_widget.ace_ok, .error_widget_arrow.ace_ok{\ border-color: #5aaa5a\ }\ .error_widget_arrow {\ position: absolute;\ border: solid 5px;\ border-top-color: transparent!important;\ border-right-color: transparent!important;\ border-left-color: transparent!important;\ top: -5px;\ }\ ", ""); }); ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","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) { "use strict"; require("./lib/fixoldbrowsers"); var dom = require("./lib/dom"); var event = require("./lib/event"); var Editor = require("./editor").Editor; var EditSession = require("./edit_session").EditSession; var UndoManager = require("./undomanager").UndoManager; var Renderer = require("./virtual_renderer").VirtualRenderer; require("./worker/worker_client"); require("./keyboard/hash_handler"); require("./placeholder"); require("./multi_select"); require("./mode/folding/fold_mode"); require("./theme/textmate"); require("./ext/error_marker"); exports.config = require("./config"); exports.require = require; if (typeof define === "function") exports.define = define; exports.edit = function(el) { if (typeof el == "string") { var _id = el; el = document.getElementById(_id); if (!el) throw new Error("ace.edit can't find div #" + _id); } if (el && el.env && el.env.editor instanceof Editor) return el.env.editor; var value = ""; if (el && /input|textarea/i.test(el.tagName)) { var oldNode = el; value = oldNode.value; el = dom.createElement("pre"); oldNode.parentNode.replaceChild(el, oldNode); } else if (el) { value = dom.getInnerText(el); el.innerHTML = ""; } var doc = exports.createEditSession(value); var editor = new Editor(new Renderer(el)); editor.setSession(doc); var env = { document: doc, editor: editor, onResize: editor.resize.bind(editor, null) }; if (oldNode) env.textarea = oldNode; event.addListener(window, "resize", env.onResize); editor.on("destroy", function() { event.removeListener(window, "resize", env.onResize); env.editor.container.env = null; // prevent memory leak on old ie }); editor.container.env = editor.env = env; return editor; }; exports.createEditSession = function(text, mode) { var doc = new EditSession(text, mode); doc.setUndoManager(new UndoManager()); return doc; } exports.EditSession = EditSession; exports.UndoManager = UndoManager; exports.version = "1.2.6"; }); (function() { ace.require(["ace/ace"], function(a) { if (a) { a.config.init(true); a.define = ace.define; } if (!window.ace) window.ace = a; for (var key in a) if (a.hasOwnProperty(key)) window.ace[key] = a[key]; }); })(); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-emmet.js ================================================ ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var lang = require("./lib/lang"); var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var HashHandler = require("./keyboard/hash_handler").HashHandler; var Tokenizer = require("./tokenizer").Tokenizer; var comparePoints = Range.comparePoints; var SnippetManager = function() { this.snippetMap = {}; this.snippetNameMap = {}; }; (function() { oop.implement(this, EventEmitter); this.getTokenizer = function() { function TabstopToken(str, _, stack) { str = str.substr(1); if (/^\d+$/.test(str) && !stack.inFormatString) return [{tabstopId: parseInt(str, 10)}]; return [{text: str}]; } function escape(ch) { return "(?:[^\\\\" + ch + "]|\\\\.)"; } SnippetManager.$tokenizer = new Tokenizer({ start: [ {regex: /:/, onMatch: function(val, state, stack) { if (stack.length && stack[0].expectIf) { stack[0].expectIf = false; stack[0].elseBranch = stack[0]; return [stack[0]]; } return ":"; }}, {regex: /\\./, onMatch: function(val, state, stack) { var ch = val[1]; if (ch == "}" && stack.length) { val = ch; }else if ("`$\\".indexOf(ch) != -1) { val = ch; } else if (stack.inFormatString) { if (ch == "n") val = "\n"; else if (ch == "t") val = "\n"; else if ("ulULE".indexOf(ch) != -1) { val = {changeCase: ch, local: ch > "a"}; } } return [val]; }}, {regex: /}/, onMatch: function(val, state, stack) { return [stack.length ? stack.shift() : val]; }}, {regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken}, {regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) { var t = TabstopToken(str.substr(1), state, stack); stack.unshift(t[0]); return t; }, next: "snippetVar"}, {regex: /\n/, token: "newline", merge: false} ], snippetVar: [ {regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) { stack[0].choices = val.slice(1, -1).split(","); }, next: "start"}, {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\w*):?", onMatch: function(val, state, stack) { var ts = stack[0]; ts.fmtString = val; val = this.splitRegex.exec(val); ts.guard = val[1]; ts.fmt = val[2]; ts.flag = val[3]; return ""; }, next: "start"}, {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) { stack[0].code = val.splice(1, -1); return ""; }, next: "start"}, {regex: "\\?", onMatch: function(val, state, stack) { if (stack[0]) stack[0].expectIf = true; }, next: "start"}, {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"} ], formatString: [ {regex: "/(" + escape("/") + "+)/", token: "regex"}, {regex: "", onMatch: function(val, state, stack) { stack.inFormatString = true; }, next: "start"} ] }); SnippetManager.prototype.getTokenizer = function() { return SnippetManager.$tokenizer; }; return SnippetManager.$tokenizer; }; this.tokenizeTmSnippet = function(str, startState) { return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) { return x.value || x; }); }; this.$getDefaultValue = function(editor, name) { if (/^[A-Z]\d+$/.test(name)) { var i = name.substr(1); return (this.variables[name[0] + "__"] || {})[i]; } if (/^\d+$/.test(name)) { return (this.variables.__ || {})[name]; } name = name.replace(/^TM_/, ""); if (!editor) return; var s = editor.session; switch(name) { case "CURRENT_WORD": var r = s.getWordRange(); case "SELECTION": case "SELECTED_TEXT": return s.getTextRange(r); case "CURRENT_LINE": return s.getLine(editor.getCursorPosition().row); case "PREV_LINE": // not possible in textmate return s.getLine(editor.getCursorPosition().row - 1); case "LINE_INDEX": return editor.getCursorPosition().column; case "LINE_NUMBER": return editor.getCursorPosition().row + 1; case "SOFT_TABS": return s.getUseSoftTabs() ? "YES" : "NO"; case "TAB_SIZE": return s.getTabSize(); case "FILENAME": case "FILEPATH": return ""; case "FULLNAME": return "Ace"; } }; this.variables = {}; this.getVariableValue = function(editor, varName) { if (this.variables.hasOwnProperty(varName)) return this.variables[varName](editor, varName) || ""; return this.$getDefaultValue(editor, varName) || ""; }; this.tmStrFormat = function(str, ch, editor) { var flag = ch.flag || ""; var re = ch.guard; re = new RegExp(re, flag.replace(/[^gi]/, "")); var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString"); var _self = this; var formatted = str.replace(re, function() { _self.variables.__ = arguments; var fmtParts = _self.resolveVariables(fmtTokens, editor); var gChangeCase = "E"; for (var i = 0; i < fmtParts.length; i++) { var ch = fmtParts[i]; if (typeof ch == "object") { fmtParts[i] = ""; if (ch.changeCase && ch.local) { var next = fmtParts[i + 1]; if (next && typeof next == "string") { if (ch.changeCase == "u") fmtParts[i] = next[0].toUpperCase(); else fmtParts[i] = next[0].toLowerCase(); fmtParts[i + 1] = next.substr(1); } } else if (ch.changeCase) { gChangeCase = ch.changeCase; } } else if (gChangeCase == "U") { fmtParts[i] = ch.toUpperCase(); } else if (gChangeCase == "L") { fmtParts[i] = ch.toLowerCase(); } } return fmtParts.join(""); }); this.variables.__ = null; return formatted; }; this.resolveVariables = function(snippet, editor) { var result = []; for (var i = 0; i < snippet.length; i++) { var ch = snippet[i]; if (typeof ch == "string") { result.push(ch); } else if (typeof ch != "object") { continue; } else if (ch.skip) { gotoNext(ch); } else if (ch.processed < i) { continue; } else if (ch.text) { var value = this.getVariableValue(editor, ch.text); if (value && ch.fmtString) value = this.tmStrFormat(value, ch); ch.processed = i; if (ch.expectIf == null) { if (value) { result.push(value); gotoNext(ch); } } else { if (value) { ch.skip = ch.elseBranch; } else gotoNext(ch); } } else if (ch.tabstopId != null) { result.push(ch); } else if (ch.changeCase != null) { result.push(ch); } } function gotoNext(ch) { var i1 = snippet.indexOf(ch, i + 1); if (i1 != -1) i = i1; } return result; }; this.insertSnippetForSelection = function(editor, snippetText) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var tabString = editor.session.getTabString(); var indentString = line.match(/^\s*/)[0]; if (cursor.column < indentString.length) indentString = indentString.slice(0, cursor.column); snippetText = snippetText.replace(/\r/g, ""); var tokens = this.tokenizeTmSnippet(snippetText); tokens = this.resolveVariables(tokens, editor); tokens = tokens.map(function(x) { if (x == "\n") return x + indentString; if (typeof x == "string") return x.replace(/\t/g, tabString); return x; }); var tabstops = []; tokens.forEach(function(p, i) { if (typeof p != "object") return; var id = p.tabstopId; var ts = tabstops[id]; if (!ts) { ts = tabstops[id] = []; ts.index = id; ts.value = ""; } if (ts.indexOf(p) !== -1) return; ts.push(p); var i1 = tokens.indexOf(p, i + 1); if (i1 === -1) return; var value = tokens.slice(i + 1, i1); var isNested = value.some(function(t) {return typeof t === "object"}); if (isNested && !ts.value) { ts.value = value; } else if (value.length && (!ts.value || typeof ts.value !== "string")) { ts.value = value.join(""); } }); tabstops.forEach(function(ts) {ts.length = 0}); var expanding = {}; function copyValue(val) { var copy = []; for (var i = 0; i < val.length; i++) { var p = val[i]; if (typeof p == "object") { if (expanding[p.tabstopId]) continue; var j = val.lastIndexOf(p, i - 1); p = copy[j] || {tabstopId: p.tabstopId}; } copy[i] = p; } return copy; } for (var i = 0; i < tokens.length; i++) { var p = tokens[i]; if (typeof p != "object") continue; var id = p.tabstopId; var i1 = tokens.indexOf(p, i + 1); if (expanding[id]) { if (expanding[id] === p) expanding[id] = null; continue; } var ts = tabstops[id]; var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value); arg.unshift(i + 1, Math.max(0, i1 - i)); arg.push(p); expanding[id] = p; tokens.splice.apply(tokens, arg); if (ts.indexOf(p) === -1) ts.push(p); } var row = 0, column = 0; var text = ""; tokens.forEach(function(t) { if (typeof t === "string") { var lines = t.split("\n"); if (lines.length > 1){ column = lines[lines.length - 1].length; row += lines.length - 1; } else column += t.length; text += t; } else { if (!t.start) t.start = {row: row, column: column}; else t.end = {row: row, column: column}; } }); var range = editor.getSelectionRange(); var end = editor.session.replace(range, text); var tabstopManager = new TabstopManager(editor); var selectionId = editor.inVirtualSelectionMode && editor.selection.index; tabstopManager.addTabstops(tabstops, range.start, end, selectionId); }; this.insertSnippet = function(editor, snippetText) { var self = this; if (editor.inVirtualSelectionMode) return self.insertSnippetForSelection(editor, snippetText); editor.forEachSelection(function() { self.insertSnippetForSelection(editor, snippetText); }, null, {keepOrder: true}); if (editor.tabstopManager) editor.tabstopManager.tabNext(); }; this.$getScope = function(editor) { var scope = editor.session.$mode.$id || ""; scope = scope.split("/").pop(); if (scope === "html" || scope === "php") { if (scope === "php" && !editor.session.$mode.inlinePhp) scope = "html"; var c = editor.getCursorPosition(); var state = editor.session.getState(c.row); if (typeof state === "object") { state = state[0]; } if (state.substring) { 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"; } } return scope; }; this.getActiveScopes = function(editor) { var scope = this.$getScope(editor); var scopes = [scope]; var snippetMap = this.snippetMap; if (snippetMap[scope] && snippetMap[scope].includeScopes) { scopes.push.apply(scopes, snippetMap[scope].includeScopes); } scopes.push("_"); return scopes; }; this.expandWithTab = function(editor, options) { var self = this; var result = editor.forEachSelection(function() { return self.expandSnippetForSelection(editor, options); }, null, {keepOrder: true}); if (result && editor.tabstopManager) editor.tabstopManager.tabNext(); return result; }; this.expandSnippetForSelection = function(editor, options) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var before = line.substring(0, cursor.column); var after = line.substr(cursor.column); var snippetMap = this.snippetMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = this.findMatchingSnippet(snippets, before, after); return !!snippet; }, this); if (!snippet) return false; if (options && options.dryRun) return true; editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length ); this.variables.M__ = snippet.matchBefore; this.variables.T__ = snippet.matchAfter; this.insertSnippetForSelection(editor, snippet.content); this.variables.M__ = this.variables.T__ = null; return true; }; this.findMatchingSnippet = function(snippetList, before, after) { for (var i = snippetList.length; i--;) { var s = snippetList[i]; if (s.startRe && !s.startRe.test(before)) continue; if (s.endRe && !s.endRe.test(after)) continue; if (!s.startRe && !s.endRe) continue; s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; return s; } }; this.snippetMap = {}; this.snippetNameMap = {}; this.register = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; var self = this; if (!snippets) snippets = []; function wrapRegexp(src) { if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) src = "(?:" + src + ")"; return src || ""; } function guardedRegexp(re, guard, opening) { re = wrapRegexp(re); guard = wrapRegexp(guard); if (opening) { re = guard + re; if (re && re[re.length - 1] != "$") re = re + "$"; } else { re = re + guard; if (re && re[0] != "^") re = "^" + re; } return new RegExp(re); } function addSnippet(s) { if (!s.scope) s.scope = scope || "_"; scope = s.scope; if (!snippetMap[scope]) { snippetMap[scope] = []; snippetNameMap[scope] = {}; } var map = snippetNameMap[scope]; if (s.name) { var old = map[s.name]; if (old) self.unregister(old); map[s.name] = s; } snippetMap[scope].push(s); if (s.tabTrigger && !s.trigger) { if (!s.guard && /^\w/.test(s.tabTrigger)) s.guard = "\\b"; s.trigger = lang.escapeRegExp(s.tabTrigger); } if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) return; s.startRe = guardedRegexp(s.trigger, s.guard, true); s.triggerRe = new RegExp(s.trigger, "", true); s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); s.endTriggerRe = new RegExp(s.endTrigger, "", true); } if (snippets && snippets.content) addSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(addSnippet); this._signal("registerSnippets", {scope: scope}); }; this.unregister = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; function removeSnippet(s) { var nameMap = snippetNameMap[s.scope||scope]; if (nameMap && nameMap[s.name]) { delete nameMap[s.name]; var map = snippetMap[s.scope||scope]; var i = map && map.indexOf(s); if (i >= 0) map.splice(i, 1); } } if (snippets.content) removeSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(removeSnippet); }; this.parseSnippetFile = function(str) { str = str.replace(/\r/g, ""); var list = [], snippet = {}; var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; var m; while (m = re.exec(str)) { if (m[1]) { try { snippet = JSON.parse(m[1]); list.push(snippet); } catch (e) {} } if (m[4]) { snippet.content = m[4].replace(/^\t/gm, ""); list.push(snippet); snippet = {}; } else { var key = m[2], val = m[3]; if (key == "regex") { var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; snippet.guard = guardRe.exec(val)[1]; snippet.trigger = guardRe.exec(val)[1]; snippet.endTrigger = guardRe.exec(val)[1]; snippet.endGuard = guardRe.exec(val)[1]; } else if (key == "snippet") { snippet.tabTrigger = val.match(/^\S*/)[0]; if (!snippet.name) snippet.name = val; } else { snippet[key] = val; } } } return list; }; this.getSnippetByName = function(name, editor) { var snippetMap = this.snippetNameMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = snippets[name]; return !!snippet; }, this); return snippet; }; }).call(SnippetManager.prototype); var TabstopManager = function(editor) { if (editor.tabstopManager) return editor.tabstopManager; editor.tabstopManager = this; this.$onChange = this.onChange.bind(this); this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; this.$onChangeSession = this.onChangeSession.bind(this); this.$onAfterExec = this.onAfterExec.bind(this); this.attach(editor); }; (function() { this.attach = function(editor) { this.index = 0; this.ranges = []; this.tabstops = []; this.$openTabstops = null; this.selectedTabstop = null; this.editor = editor; this.editor.on("change", this.$onChange); this.editor.on("changeSelection", this.$onChangeSelection); this.editor.on("changeSession", this.$onChangeSession); this.editor.commands.on("afterExec", this.$onAfterExec); this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.detach = function() { this.tabstops.forEach(this.removeTabstopMarkers, this); this.ranges = null; this.tabstops = null; this.selectedTabstop = null; this.editor.removeListener("change", this.$onChange); this.editor.removeListener("changeSelection", this.$onChangeSelection); this.editor.removeListener("changeSession", this.$onChangeSession); this.editor.commands.removeListener("afterExec", this.$onAfterExec); this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.tabstopManager = null; this.editor = null; }; this.onChange = function(delta) { var changeRange = delta; var isRemove = delta.action[0] == "r"; var start = delta.start; var end = delta.end; var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = end.column - start.column; if (isRemove) { lineDif = -lineDif; colDiff = -colDiff; } if (!this.$inChange && isRemove) { var ts = this.selectedTabstop; var changedOutside = ts && !ts.some(function(r) { return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0; }); if (changedOutside) return this.detach(); } var ranges = this.ranges; for (var i = 0; i < ranges.length; i++) { var r = ranges[i]; if (r.end.row < start.row) continue; if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) { this.removeRange(r); i--; continue; } if (r.start.row == startRow && r.start.column > start.column) r.start.column += colDiff; if (r.end.row == startRow && r.end.column >= start.column) r.end.column += colDiff; if (r.start.row >= startRow) r.start.row += lineDif; if (r.end.row >= startRow) r.end.row += lineDif; if (comparePoints(r.start, r.end) > 0) this.removeRange(r); } if (!ranges.length) this.detach(); }; this.updateLinkedFields = function() { var ts = this.selectedTabstop; if (!ts || !ts.hasLinkedRanges) return; this.$inChange = true; var session = this.editor.session; var text = session.getTextRange(ts.firstNonLinked); for (var i = ts.length; i--;) { var range = ts[i]; if (!range.linked) continue; var fmt = exports.snippetManager.tmStrFormat(text, range.original); session.replace(range, fmt); } this.$inChange = false; }; this.onAfterExec = function(e) { if (e.command && !e.command.readOnly) this.updateLinkedFields(); }; this.onChangeSelection = function() { if (!this.editor) return; var lead = this.editor.selection.lead; var anchor = this.editor.selection.anchor; var isEmpty = this.editor.selection.isEmpty(); for (var i = this.ranges.length; i--;) { if (this.ranges[i].linked) continue; var containsLead = this.ranges[i].contains(lead.row, lead.column); var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); if (containsLead && containsAnchor) return; } this.detach(); }; this.onChangeSession = function() { this.detach(); }; this.tabNext = function(dir) { var max = this.tabstops.length; var index = this.index + (dir || 1); index = Math.min(Math.max(index, 1), max); if (index == max) index = 0; this.selectTabstop(index); if (index === 0) this.detach(); }; this.selectTabstop = function(index) { this.$openTabstops = null; var ts = this.tabstops[this.index]; if (ts) this.addTabstopMarkers(ts); this.index = index; ts = this.tabstops[this.index]; if (!ts || !ts.length) return; this.selectedTabstop = ts; if (!this.editor.inVirtualSelectionMode) { var sel = this.editor.multiSelect; sel.toSingleRange(ts.firstNonLinked.clone()); for (var i = ts.length; i--;) { if (ts.hasLinkedRanges && ts[i].linked) continue; sel.addRange(ts[i].clone(), true); } if (sel.ranges[0]) sel.addRange(sel.ranges[0].clone()); } else { this.editor.selection.setRange(ts.firstNonLinked); } this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.addTabstops = function(tabstops, start, end) { if (!this.$openTabstops) this.$openTabstops = []; if (!tabstops[0]) { var p = Range.fromPoints(end, end); moveRelative(p.start, start); moveRelative(p.end, start); tabstops[0] = [p]; tabstops[0].index = 0; } var i = this.index; var arg = [i + 1, 0]; var ranges = this.ranges; tabstops.forEach(function(ts, index) { var dest = this.$openTabstops[index] || ts; for (var i = ts.length; i--;) { var p = ts[i]; var range = Range.fromPoints(p.start, p.end || p.start); movePoint(range.start, start); movePoint(range.end, start); range.original = p; range.tabstop = dest; ranges.push(range); if (dest != ts) dest.unshift(range); else dest[i] = range; if (p.fmtString) { range.linked = true; dest.hasLinkedRanges = true; } else if (!dest.firstNonLinked) dest.firstNonLinked = range; } if (!dest.firstNonLinked) dest.hasLinkedRanges = false; if (dest === ts) { arg.push(dest); this.$openTabstops[index] = dest; } this.addTabstopMarkers(dest); }, this); if (arg.length > 2) { if (this.tabstops.length) arg.push(arg.splice(2, 1)[0]); this.tabstops.splice.apply(this.tabstops, arg); } }; this.addTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { if (!range.markerId) range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); }); }; this.removeTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { session.removeMarker(range.markerId); range.markerId = null; }); }; this.removeRange = function(range) { var i = range.tabstop.indexOf(range); range.tabstop.splice(i, 1); i = this.ranges.indexOf(range); this.ranges.splice(i, 1); this.editor.session.removeMarker(range.markerId); if (!range.tabstop.length) { i = this.tabstops.indexOf(range.tabstop); if (i != -1) this.tabstops.splice(i, 1); if (!this.tabstops.length) this.detach(); } }; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys({ "Tab": function(ed) { if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) { return; } ed.tabstopManager.tabNext(1); }, "Shift-Tab": function(ed) { ed.tabstopManager.tabNext(-1); }, "Esc": function(ed) { ed.tabstopManager.detach(); }, "Return": function(ed) { return false; } }); }).call(TabstopManager.prototype); var changeTracker = {}; changeTracker.onChange = Anchor.prototype.onChange; changeTracker.setPosition = function(row, column) { this.pos.row = row; this.pos.column = column; }; changeTracker.update = function(pos, delta, $insertRight) { this.$insertRight = $insertRight; this.pos = pos; this.onChange(delta); }; var movePoint = function(point, diff) { if (point.row == 0) point.column += diff.column; point.row += diff.row; }; var moveRelative = function(point, start) { if (point.row == start.row) point.column -= start.column; point.row -= start.row; }; require("./lib/dom").importCssString("\ .ace_snippet-marker {\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ background: rgba(194, 193, 208, 0.09);\ border: 1px dotted rgba(211, 208, 235, 0.62);\ position: absolute;\ }"); exports.snippetManager = new SnippetManager(); var Editor = require("./editor").Editor; (function() { this.insertSnippet = function(content, options) { return exports.snippetManager.insertSnippet(this, content, options); }; this.expandSnippet = function(options) { return exports.snippetManager.expandWithTab(this, options); }; }).call(Editor.prototype); }); ace.define("ace/ext/emmet",["require","exports","module","ace/keyboard/hash_handler","ace/editor","ace/snippets","ace/range","resources","resources","tabStops","resources","utils","actions","ace/config","ace/config"], function(require, exports, module) { "use strict"; var HashHandler = require("ace/keyboard/hash_handler").HashHandler; var Editor = require("ace/editor").Editor; var snippetManager = require("ace/snippets").snippetManager; var Range = require("ace/range").Range; var emmet, emmetPath; function AceEmmetEditor() {} AceEmmetEditor.prototype = { setupContext: function(editor) { this.ace = editor; this.indentation = editor.session.getTabString(); if (!emmet) emmet = window.emmet; var resources = emmet.resources || emmet.require("resources"); resources.setVariable("indentation", this.indentation); this.$syntax = null; this.$syntax = this.getSyntax(); }, getSelectionRange: function() { var range = this.ace.getSelectionRange(); var doc = this.ace.session.doc; return { start: doc.positionToIndex(range.start), end: doc.positionToIndex(range.end) }; }, createSelection: function(start, end) { var doc = this.ace.session.doc; this.ace.selection.setRange({ start: doc.indexToPosition(start), end: doc.indexToPosition(end) }); }, getCurrentLineRange: function() { var ace = this.ace; var row = ace.getCursorPosition().row; var lineLength = ace.session.getLine(row).length; var index = ace.session.doc.positionToIndex({row: row, column: 0}); return { start: index, end: index + lineLength }; }, getCaretPos: function(){ var pos = this.ace.getCursorPosition(); return this.ace.session.doc.positionToIndex(pos); }, setCaretPos: function(index){ var pos = this.ace.session.doc.indexToPosition(index); this.ace.selection.moveToPosition(pos); }, getCurrentLine: function() { var row = this.ace.getCursorPosition().row; return this.ace.session.getLine(row); }, replaceContent: function(value, start, end, noIndent) { if (end == null) end = start == null ? this.getContent().length : start; if (start == null) start = 0; var editor = this.ace; var doc = editor.session.doc; var range = Range.fromPoints(doc.indexToPosition(start), doc.indexToPosition(end)); editor.session.remove(range); range.end = range.start; value = this.$updateTabstops(value); snippetManager.insertSnippet(editor, value); }, getContent: function(){ return this.ace.getValue(); }, getSyntax: function() { if (this.$syntax) return this.$syntax; var syntax = this.ace.session.$modeId.split("/").pop(); if (syntax == "html" || syntax == "php") { var cursor = this.ace.getCursorPosition(); var state = this.ace.session.getState(cursor.row); if (typeof state != "string") state = state[0]; if (state) { state = state.split("-"); if (state.length > 1) syntax = state[0]; else if (syntax == "php") syntax = "html"; } } return syntax; }, getProfileName: function() { var resources = emmet.resources || emmet.require("resources"); switch (this.getSyntax()) { case "css": return "css"; case "xml": case "xsl": return "xml"; case "html": var profile = resources.getVariable("profile"); if (!profile) profile = this.ace.session.getLines(0,2).join("").search(/<!DOCTYPE[^>]+XHTML/i) != -1 ? "xhtml": "html"; return profile; default: var mode = this.ace.session.$mode; return mode.emmetConfig && mode.emmetConfig.profile || "xhtml"; } }, prompt: function(title) { return prompt(title); }, getSelection: function() { return this.ace.session.getTextRange(); }, getFilePath: function() { return ""; }, $updateTabstops: function(value) { var base = 1000; var zeroBase = 0; var lastZero = null; var ts = emmet.tabStops || emmet.require('tabStops'); var resources = emmet.resources || emmet.require("resources"); var settings = resources.getVocabulary("user"); var tabstopOptions = { tabstop: function(data) { var group = parseInt(data.group, 10); var isZero = group === 0; if (isZero) group = ++zeroBase; else group += base; var placeholder = data.placeholder; if (placeholder) { placeholder = ts.processText(placeholder, tabstopOptions); } var result = '${' + group + (placeholder ? ':' + placeholder : '') + '}'; if (isZero) { lastZero = [data.start, result]; } return result; }, escape: function(ch) { if (ch == '$') return '\\$'; if (ch == '\\') return '\\\\'; return ch; } }; value = ts.processText(value, tabstopOptions); if (settings.variables['insert_final_tabstop'] && !/\$\{0\}$/.test(value)) { value += '${0}'; } else if (lastZero) { var common = emmet.utils ? emmet.utils.common : emmet.require('utils'); value = common.replaceSubstring(value, '${0}', lastZero[0], lastZero[1]); } return value; } }; var keymap = { expand_abbreviation: {"mac": "ctrl+alt+e", "win": "alt+e"}, match_pair_outward: {"mac": "ctrl+d", "win": "ctrl+,"}, match_pair_inward: {"mac": "ctrl+j", "win": "ctrl+shift+0"}, matching_pair: {"mac": "ctrl+alt+j", "win": "alt+j"}, next_edit_point: "alt+right", prev_edit_point: "alt+left", toggle_comment: {"mac": "command+/", "win": "ctrl+/"}, split_join_tag: {"mac": "shift+command+'", "win": "shift+ctrl+`"}, remove_tag: {"mac": "command+'", "win": "shift+ctrl+;"}, evaluate_math_expression: {"mac": "shift+command+y", "win": "shift+ctrl+y"}, increment_number_by_1: "ctrl+up", decrement_number_by_1: "ctrl+down", increment_number_by_01: "alt+up", decrement_number_by_01: "alt+down", increment_number_by_10: {"mac": "alt+command+up", "win": "shift+alt+up"}, decrement_number_by_10: {"mac": "alt+command+down", "win": "shift+alt+down"}, select_next_item: {"mac": "shift+command+.", "win": "shift+ctrl+."}, select_previous_item: {"mac": "shift+command+,", "win": "shift+ctrl+,"}, reflect_css_value: {"mac": "shift+command+r", "win": "shift+ctrl+r"}, encode_decode_data_url: {"mac": "shift+ctrl+d", "win": "ctrl+'"}, expand_abbreviation_with_tab: "Tab", wrap_with_abbreviation: {"mac": "shift+ctrl+a", "win": "shift+ctrl+a"} }; var editorProxy = new AceEmmetEditor(); exports.commands = new HashHandler(); exports.runEmmetCommand = function runEmmetCommand(editor) { try { editorProxy.setupContext(editor); var actions = emmet.actions || emmet.require("actions"); if (this.action == "expand_abbreviation_with_tab") { if (!editor.selection.isEmpty()) return false; var pos = editor.selection.lead; var token = editor.session.getTokenAt(pos.row, pos.column); if (token && /\btag\b/.test(token.type)) return false; } if (this.action == "wrap_with_abbreviation") { return setTimeout(function() { actions.run("wrap_with_abbreviation", editorProxy); }, 0); } var result = actions.run(this.action, editorProxy); } catch(e) { if (!emmet) { load(runEmmetCommand.bind(this, editor)); return true; } editor._signal("changeStatus", typeof e == "string" ? e : e.message); console.log(e); result = false; } return result; }; for (var command in keymap) { exports.commands.addCommand({ name: "emmet:" + command, action: command, bindKey: keymap[command], exec: exports.runEmmetCommand, multiSelectAction: "forEach" }); } exports.updateCommands = function(editor, enabled) { if (enabled) { editor.keyBinding.addKeyboardHandler(exports.commands); } else { editor.keyBinding.removeKeyboardHandler(exports.commands); } }; exports.isSupportedMode = function(mode) { if (!mode) return false; if (mode.emmetConfig) return true; var id = mode.$id || mode; return /css|less|scss|sass|stylus|html|php|twig|ejs|handlebars/.test(id); }; exports.isAvailable = function(editor, command) { if (/(evaluate_math_expression|expand_abbreviation)$/.test(command)) return true; var mode = editor.session.$mode; var isSupported = exports.isSupportedMode(mode); if (isSupported && mode.$modes) { try { editorProxy.setupContext(editor); if (/js|php/.test(editorProxy.getSyntax())) isSupported = false; } catch(e) {} } return isSupported; } var onChangeMode = function(e, target) { var editor = target; if (!editor) return; var enabled = exports.isSupportedMode(editor.session.$mode); if (e.enableEmmet === false) enabled = false; if (enabled) load(); exports.updateCommands(editor, enabled); }; var load = function(cb) { if (typeof emmetPath == "string") { require("ace/config").loadModule(emmetPath, function() { emmetPath = null; cb && cb(); }); } }; exports.AceEmmetEditor = AceEmmetEditor; require("ace/config").defineOptions(Editor.prototype, "editor", { enableEmmet: { set: function(val) { this[val ? "on" : "removeListener"]("changeMode", onChangeMode); onChangeMode({enableEmmet: !!val}, this); }, value: true } }); exports.setCore = function(e) { if (typeof e == "string") emmetPath = e; else emmet = e; }; }); (function() { ace.require(["ace/ext/emmet"], function() {}); })(); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-language_tools.js ================================================ ace.define("ace/snippets",["require","exports","module","ace/lib/oop","ace/lib/event_emitter","ace/lib/lang","ace/range","ace/anchor","ace/keyboard/hash_handler","ace/tokenizer","ace/lib/dom","ace/editor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var EventEmitter = require("./lib/event_emitter").EventEmitter; var lang = require("./lib/lang"); var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var HashHandler = require("./keyboard/hash_handler").HashHandler; var Tokenizer = require("./tokenizer").Tokenizer; var comparePoints = Range.comparePoints; var SnippetManager = function() { this.snippetMap = {}; this.snippetNameMap = {}; }; (function() { oop.implement(this, EventEmitter); this.getTokenizer = function() { function TabstopToken(str, _, stack) { str = str.substr(1); if (/^\d+$/.test(str) && !stack.inFormatString) return [{tabstopId: parseInt(str, 10)}]; return [{text: str}]; } function escape(ch) { return "(?:[^\\\\" + ch + "]|\\\\.)"; } SnippetManager.$tokenizer = new Tokenizer({ start: [ {regex: /:/, onMatch: function(val, state, stack) { if (stack.length && stack[0].expectIf) { stack[0].expectIf = false; stack[0].elseBranch = stack[0]; return [stack[0]]; } return ":"; }}, {regex: /\\./, onMatch: function(val, state, stack) { var ch = val[1]; if (ch == "}" && stack.length) { val = ch; }else if ("`$\\".indexOf(ch) != -1) { val = ch; } else if (stack.inFormatString) { if (ch == "n") val = "\n"; else if (ch == "t") val = "\n"; else if ("ulULE".indexOf(ch) != -1) { val = {changeCase: ch, local: ch > "a"}; } } return [val]; }}, {regex: /}/, onMatch: function(val, state, stack) { return [stack.length ? stack.shift() : val]; }}, {regex: /\$(?:\d+|\w+)/, onMatch: TabstopToken}, {regex: /\$\{[\dA-Z_a-z]+/, onMatch: function(str, state, stack) { var t = TabstopToken(str.substr(1), state, stack); stack.unshift(t[0]); return t; }, next: "snippetVar"}, {regex: /\n/, token: "newline", merge: false} ], snippetVar: [ {regex: "\\|" + escape("\\|") + "*\\|", onMatch: function(val, state, stack) { stack[0].choices = val.slice(1, -1).split(","); }, next: "start"}, {regex: "/(" + escape("/") + "+)/(?:(" + escape("/") + "*)/)(\\w*):?", onMatch: function(val, state, stack) { var ts = stack[0]; ts.fmtString = val; val = this.splitRegex.exec(val); ts.guard = val[1]; ts.fmt = val[2]; ts.flag = val[3]; return ""; }, next: "start"}, {regex: "`" + escape("`") + "*`", onMatch: function(val, state, stack) { stack[0].code = val.splice(1, -1); return ""; }, next: "start"}, {regex: "\\?", onMatch: function(val, state, stack) { if (stack[0]) stack[0].expectIf = true; }, next: "start"}, {regex: "([^:}\\\\]|\\\\.)*:?", token: "", next: "start"} ], formatString: [ {regex: "/(" + escape("/") + "+)/", token: "regex"}, {regex: "", onMatch: function(val, state, stack) { stack.inFormatString = true; }, next: "start"} ] }); SnippetManager.prototype.getTokenizer = function() { return SnippetManager.$tokenizer; }; return SnippetManager.$tokenizer; }; this.tokenizeTmSnippet = function(str, startState) { return this.getTokenizer().getLineTokens(str, startState).tokens.map(function(x) { return x.value || x; }); }; this.$getDefaultValue = function(editor, name) { if (/^[A-Z]\d+$/.test(name)) { var i = name.substr(1); return (this.variables[name[0] + "__"] || {})[i]; } if (/^\d+$/.test(name)) { return (this.variables.__ || {})[name]; } name = name.replace(/^TM_/, ""); if (!editor) return; var s = editor.session; switch(name) { case "CURRENT_WORD": var r = s.getWordRange(); case "SELECTION": case "SELECTED_TEXT": return s.getTextRange(r); case "CURRENT_LINE": return s.getLine(editor.getCursorPosition().row); case "PREV_LINE": // not possible in textmate return s.getLine(editor.getCursorPosition().row - 1); case "LINE_INDEX": return editor.getCursorPosition().column; case "LINE_NUMBER": return editor.getCursorPosition().row + 1; case "SOFT_TABS": return s.getUseSoftTabs() ? "YES" : "NO"; case "TAB_SIZE": return s.getTabSize(); case "FILENAME": case "FILEPATH": return ""; case "FULLNAME": return "Ace"; } }; this.variables = {}; this.getVariableValue = function(editor, varName) { if (this.variables.hasOwnProperty(varName)) return this.variables[varName](editor, varName) || ""; return this.$getDefaultValue(editor, varName) || ""; }; this.tmStrFormat = function(str, ch, editor) { var flag = ch.flag || ""; var re = ch.guard; re = new RegExp(re, flag.replace(/[^gi]/, "")); var fmtTokens = this.tokenizeTmSnippet(ch.fmt, "formatString"); var _self = this; var formatted = str.replace(re, function() { _self.variables.__ = arguments; var fmtParts = _self.resolveVariables(fmtTokens, editor); var gChangeCase = "E"; for (var i = 0; i < fmtParts.length; i++) { var ch = fmtParts[i]; if (typeof ch == "object") { fmtParts[i] = ""; if (ch.changeCase && ch.local) { var next = fmtParts[i + 1]; if (next && typeof next == "string") { if (ch.changeCase == "u") fmtParts[i] = next[0].toUpperCase(); else fmtParts[i] = next[0].toLowerCase(); fmtParts[i + 1] = next.substr(1); } } else if (ch.changeCase) { gChangeCase = ch.changeCase; } } else if (gChangeCase == "U") { fmtParts[i] = ch.toUpperCase(); } else if (gChangeCase == "L") { fmtParts[i] = ch.toLowerCase(); } } return fmtParts.join(""); }); this.variables.__ = null; return formatted; }; this.resolveVariables = function(snippet, editor) { var result = []; for (var i = 0; i < snippet.length; i++) { var ch = snippet[i]; if (typeof ch == "string") { result.push(ch); } else if (typeof ch != "object") { continue; } else if (ch.skip) { gotoNext(ch); } else if (ch.processed < i) { continue; } else if (ch.text) { var value = this.getVariableValue(editor, ch.text); if (value && ch.fmtString) value = this.tmStrFormat(value, ch); ch.processed = i; if (ch.expectIf == null) { if (value) { result.push(value); gotoNext(ch); } } else { if (value) { ch.skip = ch.elseBranch; } else gotoNext(ch); } } else if (ch.tabstopId != null) { result.push(ch); } else if (ch.changeCase != null) { result.push(ch); } } function gotoNext(ch) { var i1 = snippet.indexOf(ch, i + 1); if (i1 != -1) i = i1; } return result; }; this.insertSnippetForSelection = function(editor, snippetText) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var tabString = editor.session.getTabString(); var indentString = line.match(/^\s*/)[0]; if (cursor.column < indentString.length) indentString = indentString.slice(0, cursor.column); snippetText = snippetText.replace(/\r/g, ""); var tokens = this.tokenizeTmSnippet(snippetText); tokens = this.resolveVariables(tokens, editor); tokens = tokens.map(function(x) { if (x == "\n") return x + indentString; if (typeof x == "string") return x.replace(/\t/g, tabString); return x; }); var tabstops = []; tokens.forEach(function(p, i) { if (typeof p != "object") return; var id = p.tabstopId; var ts = tabstops[id]; if (!ts) { ts = tabstops[id] = []; ts.index = id; ts.value = ""; } if (ts.indexOf(p) !== -1) return; ts.push(p); var i1 = tokens.indexOf(p, i + 1); if (i1 === -1) return; var value = tokens.slice(i + 1, i1); var isNested = value.some(function(t) {return typeof t === "object"}); if (isNested && !ts.value) { ts.value = value; } else if (value.length && (!ts.value || typeof ts.value !== "string")) { ts.value = value.join(""); } }); tabstops.forEach(function(ts) {ts.length = 0}); var expanding = {}; function copyValue(val) { var copy = []; for (var i = 0; i < val.length; i++) { var p = val[i]; if (typeof p == "object") { if (expanding[p.tabstopId]) continue; var j = val.lastIndexOf(p, i - 1); p = copy[j] || {tabstopId: p.tabstopId}; } copy[i] = p; } return copy; } for (var i = 0; i < tokens.length; i++) { var p = tokens[i]; if (typeof p != "object") continue; var id = p.tabstopId; var i1 = tokens.indexOf(p, i + 1); if (expanding[id]) { if (expanding[id] === p) expanding[id] = null; continue; } var ts = tabstops[id]; var arg = typeof ts.value == "string" ? [ts.value] : copyValue(ts.value); arg.unshift(i + 1, Math.max(0, i1 - i)); arg.push(p); expanding[id] = p; tokens.splice.apply(tokens, arg); if (ts.indexOf(p) === -1) ts.push(p); } var row = 0, column = 0; var text = ""; tokens.forEach(function(t) { if (typeof t === "string") { var lines = t.split("\n"); if (lines.length > 1){ column = lines[lines.length - 1].length; row += lines.length - 1; } else column += t.length; text += t; } else { if (!t.start) t.start = {row: row, column: column}; else t.end = {row: row, column: column}; } }); var range = editor.getSelectionRange(); var end = editor.session.replace(range, text); var tabstopManager = new TabstopManager(editor); var selectionId = editor.inVirtualSelectionMode && editor.selection.index; tabstopManager.addTabstops(tabstops, range.start, end, selectionId); }; this.insertSnippet = function(editor, snippetText) { var self = this; if (editor.inVirtualSelectionMode) return self.insertSnippetForSelection(editor, snippetText); editor.forEachSelection(function() { self.insertSnippetForSelection(editor, snippetText); }, null, {keepOrder: true}); if (editor.tabstopManager) editor.tabstopManager.tabNext(); }; this.$getScope = function(editor) { var scope = editor.session.$mode.$id || ""; scope = scope.split("/").pop(); if (scope === "html" || scope === "php") { if (scope === "php" && !editor.session.$mode.inlinePhp) scope = "html"; var c = editor.getCursorPosition(); var state = editor.session.getState(c.row); if (typeof state === "object") { state = state[0]; } if (state.substring) { 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"; } } return scope; }; this.getActiveScopes = function(editor) { var scope = this.$getScope(editor); var scopes = [scope]; var snippetMap = this.snippetMap; if (snippetMap[scope] && snippetMap[scope].includeScopes) { scopes.push.apply(scopes, snippetMap[scope].includeScopes); } scopes.push("_"); return scopes; }; this.expandWithTab = function(editor, options) { var self = this; var result = editor.forEachSelection(function() { return self.expandSnippetForSelection(editor, options); }, null, {keepOrder: true}); if (result && editor.tabstopManager) editor.tabstopManager.tabNext(); return result; }; this.expandSnippetForSelection = function(editor, options) { var cursor = editor.getCursorPosition(); var line = editor.session.getLine(cursor.row); var before = line.substring(0, cursor.column); var after = line.substr(cursor.column); var snippetMap = this.snippetMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = this.findMatchingSnippet(snippets, before, after); return !!snippet; }, this); if (!snippet) return false; if (options && options.dryRun) return true; editor.session.doc.removeInLine(cursor.row, cursor.column - snippet.replaceBefore.length, cursor.column + snippet.replaceAfter.length ); this.variables.M__ = snippet.matchBefore; this.variables.T__ = snippet.matchAfter; this.insertSnippetForSelection(editor, snippet.content); this.variables.M__ = this.variables.T__ = null; return true; }; this.findMatchingSnippet = function(snippetList, before, after) { for (var i = snippetList.length; i--;) { var s = snippetList[i]; if (s.startRe && !s.startRe.test(before)) continue; if (s.endRe && !s.endRe.test(after)) continue; if (!s.startRe && !s.endRe) continue; s.matchBefore = s.startRe ? s.startRe.exec(before) : [""]; s.matchAfter = s.endRe ? s.endRe.exec(after) : [""]; s.replaceBefore = s.triggerRe ? s.triggerRe.exec(before)[0] : ""; s.replaceAfter = s.endTriggerRe ? s.endTriggerRe.exec(after)[0] : ""; return s; } }; this.snippetMap = {}; this.snippetNameMap = {}; this.register = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; var self = this; if (!snippets) snippets = []; function wrapRegexp(src) { if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) src = "(?:" + src + ")"; return src || ""; } function guardedRegexp(re, guard, opening) { re = wrapRegexp(re); guard = wrapRegexp(guard); if (opening) { re = guard + re; if (re && re[re.length - 1] != "$") re = re + "$"; } else { re = re + guard; if (re && re[0] != "^") re = "^" + re; } return new RegExp(re); } function addSnippet(s) { if (!s.scope) s.scope = scope || "_"; scope = s.scope; if (!snippetMap[scope]) { snippetMap[scope] = []; snippetNameMap[scope] = {}; } var map = snippetNameMap[scope]; if (s.name) { var old = map[s.name]; if (old) self.unregister(old); map[s.name] = s; } snippetMap[scope].push(s); if (s.tabTrigger && !s.trigger) { if (!s.guard && /^\w/.test(s.tabTrigger)) s.guard = "\\b"; s.trigger = lang.escapeRegExp(s.tabTrigger); } if (!s.trigger && !s.guard && !s.endTrigger && !s.endGuard) return; s.startRe = guardedRegexp(s.trigger, s.guard, true); s.triggerRe = new RegExp(s.trigger, "", true); s.endRe = guardedRegexp(s.endTrigger, s.endGuard, true); s.endTriggerRe = new RegExp(s.endTrigger, "", true); } if (snippets && snippets.content) addSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(addSnippet); this._signal("registerSnippets", {scope: scope}); }; this.unregister = function(snippets, scope) { var snippetMap = this.snippetMap; var snippetNameMap = this.snippetNameMap; function removeSnippet(s) { var nameMap = snippetNameMap[s.scope||scope]; if (nameMap && nameMap[s.name]) { delete nameMap[s.name]; var map = snippetMap[s.scope||scope]; var i = map && map.indexOf(s); if (i >= 0) map.splice(i, 1); } } if (snippets.content) removeSnippet(snippets); else if (Array.isArray(snippets)) snippets.forEach(removeSnippet); }; this.parseSnippetFile = function(str) { str = str.replace(/\r/g, ""); var list = [], snippet = {}; var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; var m; while (m = re.exec(str)) { if (m[1]) { try { snippet = JSON.parse(m[1]); list.push(snippet); } catch (e) {} } if (m[4]) { snippet.content = m[4].replace(/^\t/gm, ""); list.push(snippet); snippet = {}; } else { var key = m[2], val = m[3]; if (key == "regex") { var guardRe = /\/((?:[^\/\\]|\\.)*)|$/g; snippet.guard = guardRe.exec(val)[1]; snippet.trigger = guardRe.exec(val)[1]; snippet.endTrigger = guardRe.exec(val)[1]; snippet.endGuard = guardRe.exec(val)[1]; } else if (key == "snippet") { snippet.tabTrigger = val.match(/^\S*/)[0]; if (!snippet.name) snippet.name = val; } else { snippet[key] = val; } } } return list; }; this.getSnippetByName = function(name, editor) { var snippetMap = this.snippetNameMap; var snippet; this.getActiveScopes(editor).some(function(scope) { var snippets = snippetMap[scope]; if (snippets) snippet = snippets[name]; return !!snippet; }, this); return snippet; }; }).call(SnippetManager.prototype); var TabstopManager = function(editor) { if (editor.tabstopManager) return editor.tabstopManager; editor.tabstopManager = this; this.$onChange = this.onChange.bind(this); this.$onChangeSelection = lang.delayedCall(this.onChangeSelection.bind(this)).schedule; this.$onChangeSession = this.onChangeSession.bind(this); this.$onAfterExec = this.onAfterExec.bind(this); this.attach(editor); }; (function() { this.attach = function(editor) { this.index = 0; this.ranges = []; this.tabstops = []; this.$openTabstops = null; this.selectedTabstop = null; this.editor = editor; this.editor.on("change", this.$onChange); this.editor.on("changeSelection", this.$onChangeSelection); this.editor.on("changeSession", this.$onChangeSession); this.editor.commands.on("afterExec", this.$onAfterExec); this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.detach = function() { this.tabstops.forEach(this.removeTabstopMarkers, this); this.ranges = null; this.tabstops = null; this.selectedTabstop = null; this.editor.removeListener("change", this.$onChange); this.editor.removeListener("changeSelection", this.$onChangeSelection); this.editor.removeListener("changeSession", this.$onChangeSession); this.editor.commands.removeListener("afterExec", this.$onAfterExec); this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.tabstopManager = null; this.editor = null; }; this.onChange = function(delta) { var changeRange = delta; var isRemove = delta.action[0] == "r"; var start = delta.start; var end = delta.end; var startRow = start.row; var endRow = end.row; var lineDif = endRow - startRow; var colDiff = end.column - start.column; if (isRemove) { lineDif = -lineDif; colDiff = -colDiff; } if (!this.$inChange && isRemove) { var ts = this.selectedTabstop; var changedOutside = ts && !ts.some(function(r) { return comparePoints(r.start, start) <= 0 && comparePoints(r.end, end) >= 0; }); if (changedOutside) return this.detach(); } var ranges = this.ranges; for (var i = 0; i < ranges.length; i++) { var r = ranges[i]; if (r.end.row < start.row) continue; if (isRemove && comparePoints(start, r.start) < 0 && comparePoints(end, r.end) > 0) { this.removeRange(r); i--; continue; } if (r.start.row == startRow && r.start.column > start.column) r.start.column += colDiff; if (r.end.row == startRow && r.end.column >= start.column) r.end.column += colDiff; if (r.start.row >= startRow) r.start.row += lineDif; if (r.end.row >= startRow) r.end.row += lineDif; if (comparePoints(r.start, r.end) > 0) this.removeRange(r); } if (!ranges.length) this.detach(); }; this.updateLinkedFields = function() { var ts = this.selectedTabstop; if (!ts || !ts.hasLinkedRanges) return; this.$inChange = true; var session = this.editor.session; var text = session.getTextRange(ts.firstNonLinked); for (var i = ts.length; i--;) { var range = ts[i]; if (!range.linked) continue; var fmt = exports.snippetManager.tmStrFormat(text, range.original); session.replace(range, fmt); } this.$inChange = false; }; this.onAfterExec = function(e) { if (e.command && !e.command.readOnly) this.updateLinkedFields(); }; this.onChangeSelection = function() { if (!this.editor) return; var lead = this.editor.selection.lead; var anchor = this.editor.selection.anchor; var isEmpty = this.editor.selection.isEmpty(); for (var i = this.ranges.length; i--;) { if (this.ranges[i].linked) continue; var containsLead = this.ranges[i].contains(lead.row, lead.column); var containsAnchor = isEmpty || this.ranges[i].contains(anchor.row, anchor.column); if (containsLead && containsAnchor) return; } this.detach(); }; this.onChangeSession = function() { this.detach(); }; this.tabNext = function(dir) { var max = this.tabstops.length; var index = this.index + (dir || 1); index = Math.min(Math.max(index, 1), max); if (index == max) index = 0; this.selectTabstop(index); if (index === 0) this.detach(); }; this.selectTabstop = function(index) { this.$openTabstops = null; var ts = this.tabstops[this.index]; if (ts) this.addTabstopMarkers(ts); this.index = index; ts = this.tabstops[this.index]; if (!ts || !ts.length) return; this.selectedTabstop = ts; if (!this.editor.inVirtualSelectionMode) { var sel = this.editor.multiSelect; sel.toSingleRange(ts.firstNonLinked.clone()); for (var i = ts.length; i--;) { if (ts.hasLinkedRanges && ts[i].linked) continue; sel.addRange(ts[i].clone(), true); } if (sel.ranges[0]) sel.addRange(sel.ranges[0].clone()); } else { this.editor.selection.setRange(ts.firstNonLinked); } this.editor.keyBinding.addKeyboardHandler(this.keyboardHandler); }; this.addTabstops = function(tabstops, start, end) { if (!this.$openTabstops) this.$openTabstops = []; if (!tabstops[0]) { var p = Range.fromPoints(end, end); moveRelative(p.start, start); moveRelative(p.end, start); tabstops[0] = [p]; tabstops[0].index = 0; } var i = this.index; var arg = [i + 1, 0]; var ranges = this.ranges; tabstops.forEach(function(ts, index) { var dest = this.$openTabstops[index] || ts; for (var i = ts.length; i--;) { var p = ts[i]; var range = Range.fromPoints(p.start, p.end || p.start); movePoint(range.start, start); movePoint(range.end, start); range.original = p; range.tabstop = dest; ranges.push(range); if (dest != ts) dest.unshift(range); else dest[i] = range; if (p.fmtString) { range.linked = true; dest.hasLinkedRanges = true; } else if (!dest.firstNonLinked) dest.firstNonLinked = range; } if (!dest.firstNonLinked) dest.hasLinkedRanges = false; if (dest === ts) { arg.push(dest); this.$openTabstops[index] = dest; } this.addTabstopMarkers(dest); }, this); if (arg.length > 2) { if (this.tabstops.length) arg.push(arg.splice(2, 1)[0]); this.tabstops.splice.apply(this.tabstops, arg); } }; this.addTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { if (!range.markerId) range.markerId = session.addMarker(range, "ace_snippet-marker", "text"); }); }; this.removeTabstopMarkers = function(ts) { var session = this.editor.session; ts.forEach(function(range) { session.removeMarker(range.markerId); range.markerId = null; }); }; this.removeRange = function(range) { var i = range.tabstop.indexOf(range); range.tabstop.splice(i, 1); i = this.ranges.indexOf(range); this.ranges.splice(i, 1); this.editor.session.removeMarker(range.markerId); if (!range.tabstop.length) { i = this.tabstops.indexOf(range.tabstop); if (i != -1) this.tabstops.splice(i, 1); if (!this.tabstops.length) this.detach(); } }; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys({ "Tab": function(ed) { if (exports.snippetManager && exports.snippetManager.expandWithTab(ed)) { return; } ed.tabstopManager.tabNext(1); }, "Shift-Tab": function(ed) { ed.tabstopManager.tabNext(-1); }, "Esc": function(ed) { ed.tabstopManager.detach(); }, "Return": function(ed) { return false; } }); }).call(TabstopManager.prototype); var changeTracker = {}; changeTracker.onChange = Anchor.prototype.onChange; changeTracker.setPosition = function(row, column) { this.pos.row = row; this.pos.column = column; }; changeTracker.update = function(pos, delta, $insertRight) { this.$insertRight = $insertRight; this.pos = pos; this.onChange(delta); }; var movePoint = function(point, diff) { if (point.row == 0) point.column += diff.column; point.row += diff.row; }; var moveRelative = function(point, start) { if (point.row == start.row) point.column -= start.column; point.row -= start.row; }; require("./lib/dom").importCssString("\ .ace_snippet-marker {\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ background: rgba(194, 193, 208, 0.09);\ border: 1px dotted rgba(211, 208, 235, 0.62);\ position: absolute;\ }"); exports.snippetManager = new SnippetManager(); var Editor = require("./editor").Editor; (function() { this.insertSnippet = function(content, options) { return exports.snippetManager.insertSnippet(this, content, options); }; this.expandSnippet = function(options) { return exports.snippetManager.expandWithTab(this, options); }; }).call(Editor.prototype); }); ace.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) { "use strict"; var Renderer = require("../virtual_renderer").VirtualRenderer; var Editor = require("../editor").Editor; var Range = require("../range").Range; var event = require("../lib/event"); var lang = require("../lib/lang"); var dom = require("../lib/dom"); var $singleLineEditor = function(el) { var renderer = new Renderer(el); renderer.$maxLines = 4; var editor = new Editor(renderer); editor.setHighlightActiveLine(false); editor.setShowPrintMargin(false); editor.renderer.setShowGutter(false); editor.renderer.setHighlightGutterLine(false); editor.$mouseHandler.$focusWaitTimout = 0; editor.$highlightTagPending = true; return editor; }; var AcePopup = function(parentNode) { var el = dom.createElement("div"); var popup = new $singleLineEditor(el); if (parentNode) parentNode.appendChild(el); el.style.display = "none"; popup.renderer.content.style.cursor = "default"; popup.renderer.setStyle("ace_autocomplete"); popup.setOption("displayIndentGuides", false); popup.setOption("dragDelay", 150); var noop = function(){}; popup.focus = noop; popup.$isFocused = true; popup.renderer.$cursorLayer.restartTimer = noop; popup.renderer.$cursorLayer.element.style.opacity = 0; popup.renderer.$maxLines = 8; popup.renderer.$keepTextAreaAtCursor = false; popup.setHighlightActiveLine(false); popup.session.highlight(""); popup.session.$searchHighlight.clazz = "ace_highlight-marker"; popup.on("mousedown", function(e) { var pos = e.getDocumentPosition(); popup.selection.moveToPosition(pos); selectionMarker.start.row = selectionMarker.end.row = pos.row; e.stop(); }); var lastMouseEvent; var hoverMarker = new Range(-1,0,-1,Infinity); var selectionMarker = new Range(-1,0,-1,Infinity); selectionMarker.id = popup.session.addMarker(selectionMarker, "ace_active-line", "fullLine"); popup.setSelectOnHover = function(val) { if (!val) { hoverMarker.id = popup.session.addMarker(hoverMarker, "ace_line-hover", "fullLine"); } else if (hoverMarker.id) { popup.session.removeMarker(hoverMarker.id); hoverMarker.id = null; } }; popup.setSelectOnHover(false); popup.on("mousemove", function(e) { if (!lastMouseEvent) { lastMouseEvent = e; return; } if (lastMouseEvent.x == e.x && lastMouseEvent.y == e.y) { return; } lastMouseEvent = e; lastMouseEvent.scrollTop = popup.renderer.scrollTop; var row = lastMouseEvent.getDocumentPosition().row; if (hoverMarker.start.row != row) { if (!hoverMarker.id) popup.setRow(row); setHoverMarker(row); } }); popup.renderer.on("beforeRender", function() { if (lastMouseEvent && hoverMarker.start.row != -1) { lastMouseEvent.$pos = null; var row = lastMouseEvent.getDocumentPosition().row; if (!hoverMarker.id) popup.setRow(row); setHoverMarker(row, true); } }); popup.renderer.on("afterRender", function() { var row = popup.getRow(); var t = popup.renderer.$textLayer; var selected = t.element.childNodes[row - t.config.firstRow]; if (selected == t.selectedNode) return; if (t.selectedNode) dom.removeCssClass(t.selectedNode, "ace_selected"); t.selectedNode = selected; if (selected) dom.addCssClass(selected, "ace_selected"); }); var hideHoverMarker = function() { setHoverMarker(-1) }; var setHoverMarker = function(row, suppressRedraw) { if (row !== hoverMarker.start.row) { hoverMarker.start.row = hoverMarker.end.row = row; if (!suppressRedraw) popup.session._emit("changeBackMarker"); popup._emit("changeHoverMarker"); } }; popup.getHoveredRow = function() { return hoverMarker.start.row; }; event.addListener(popup.container, "mouseout", hideHoverMarker); popup.on("hide", hideHoverMarker); popup.on("changeSelection", hideHoverMarker); popup.session.doc.getLength = function() { return popup.data.length; }; popup.session.doc.getLine = function(i) { var data = popup.data[i]; if (typeof data == "string") return data; return (data && data.value) || ""; }; var bgTokenizer = popup.session.bgTokenizer; bgTokenizer.$tokenizeRow = function(row) { var data = popup.data[row]; var tokens = []; if (!data) return tokens; if (typeof data == "string") data = {value: data}; if (!data.caption) data.caption = data.value || data.name; var last = -1; var flag, c; for (var i = 0; i < data.caption.length; i++) { c = data.caption[i]; flag = data.matchMask & (1 << i) ? 1 : 0; if (last !== flag) { tokens.push({type: data.className || "" + ( flag ? "completion-highlight" : ""), value: c}); last = flag; } else { tokens[tokens.length - 1].value += c; } } if (data.meta) { var maxW = popup.renderer.$size.scrollerWidth / popup.renderer.layerConfig.characterWidth; var metaData = data.meta; if (metaData.length + data.caption.length > maxW - 2) { metaData = metaData.substr(0, maxW - data.caption.length - 3) + "\u2026" } tokens.push({type: "rightAlignedText", value: metaData}); } return tokens; }; bgTokenizer.$updateOnChange = noop; bgTokenizer.start = noop; popup.session.$computeWidth = function() { return this.screenWidth = 0; }; popup.$blockScrolling = Infinity; popup.isOpen = false; popup.isTopdown = false; popup.data = []; popup.setData = function(list) { popup.setValue(lang.stringRepeat("\n", list.length), -1); popup.data = list || []; popup.setRow(0); }; popup.getData = function(row) { return popup.data[row]; }; popup.getRow = function() { return selectionMarker.start.row; }; popup.setRow = function(line) { line = Math.max(0, Math.min(this.data.length, line)); if (selectionMarker.start.row != line) { popup.selection.clearSelection(); selectionMarker.start.row = selectionMarker.end.row = line || 0; popup.session._emit("changeBackMarker"); popup.moveCursorTo(line || 0, 0); if (popup.isOpen) popup._signal("select"); } }; popup.on("changeSelection", function() { if (popup.isOpen) popup.setRow(popup.selection.lead.row); popup.renderer.scrollCursorIntoView(); }); popup.hide = function() { this.container.style.display = "none"; this._signal("hide"); popup.isOpen = false; }; popup.show = function(pos, lineHeight, topdownOnly) { var el = this.container; var screenHeight = window.innerHeight; var screenWidth = window.innerWidth; var renderer = this.renderer; var maxH = renderer.$maxLines * lineHeight * 1.4; var top = pos.top + this.$borderSize; var allowTopdown = top > screenHeight / 2 && !topdownOnly; if (allowTopdown && top + lineHeight + maxH > screenHeight) { renderer.$maxPixelHeight = top - 2 * this.$borderSize; el.style.top = ""; el.style.bottom = screenHeight - top + "px"; popup.isTopdown = false; } else { top += lineHeight; renderer.$maxPixelHeight = screenHeight - top - 0.2 * lineHeight; el.style.top = top + "px"; el.style.bottom = ""; popup.isTopdown = true; } el.style.display = ""; this.renderer.$textLayer.checkForSizeChanges(); var left = pos.left; if (left + el.offsetWidth > screenWidth) left = screenWidth - el.offsetWidth; el.style.left = left + "px"; this._signal("show"); lastMouseEvent = null; popup.isOpen = true; }; popup.getTextLeftOffset = function() { return this.$borderSize + this.renderer.$padding + this.$imageSize; }; popup.$imageSize = 0; popup.$borderSize = 1; return popup; }; dom.importCssString("\ .ace_editor.ace_autocomplete .ace_marker-layer .ace_active-line {\ background-color: #CAD6FA;\ z-index: 1;\ }\ .ace_editor.ace_autocomplete .ace_line-hover {\ border: 1px solid #abbffe;\ margin-top: -1px;\ background: rgba(233,233,253,0.4);\ }\ .ace_editor.ace_autocomplete .ace_line-hover {\ position: absolute;\ z-index: 2;\ }\ .ace_editor.ace_autocomplete .ace_scroller {\ background: none;\ border: none;\ box-shadow: none;\ }\ .ace_rightAlignedText {\ color: gray;\ display: inline-block;\ position: absolute;\ right: 4px;\ text-align: right;\ z-index: -1;\ }\ .ace_editor.ace_autocomplete .ace_completion-highlight{\ color: #000;\ text-shadow: 0 0 0.01em;\ }\ .ace_editor.ace_autocomplete {\ width: 280px;\ z-index: 200000;\ background: #fbfbfb;\ color: #444;\ border: 1px lightgray solid;\ position: fixed;\ box-shadow: 2px 3px 5px rgba(0,0,0,.2);\ line-height: 1.4;\ }"); exports.AcePopup = AcePopup; }); ace.define("ace/autocomplete/util",["require","exports","module"], function(require, exports, module) { "use strict"; exports.parForEach = function(array, fn, callback) { var completed = 0; var arLength = array.length; if (arLength === 0) callback(); for (var i = 0; i < arLength; i++) { fn(array[i], function(result, err) { completed++; if (completed === arLength) callback(result, err); }); } }; var ID_REGEX = /[a-zA-Z_0-9\$\-\u00A2-\uFFFF]/; exports.retrievePrecedingIdentifier = function(text, pos, regex) { regex = regex || ID_REGEX; var buf = []; for (var i = pos-1; i >= 0; i--) { if (regex.test(text[i])) buf.push(text[i]); else break; } return buf.reverse().join(""); }; exports.retrieveFollowingIdentifier = function(text, pos, regex) { regex = regex || ID_REGEX; var buf = []; for (var i = pos; i < text.length; i++) { if (regex.test(text[i])) buf.push(text[i]); else break; } return buf; }; exports.getCompletionPrefix = function (editor) { var pos = editor.getCursorPosition(); var line = editor.session.getLine(pos.row); var prefix; editor.completers.forEach(function(completer) { if (completer.identifierRegexps) { completer.identifierRegexps.forEach(function(identifierRegex) { if (!prefix && identifierRegex) prefix = this.retrievePrecedingIdentifier(line, pos.column, identifierRegex); }.bind(this)); } }.bind(this)); return prefix || this.retrievePrecedingIdentifier(line, pos.column); }; }); ace.define("ace/autocomplete",["require","exports","module","ace/keyboard/hash_handler","ace/autocomplete/popup","ace/autocomplete/util","ace/lib/event","ace/lib/lang","ace/lib/dom","ace/snippets"], function(require, exports, module) { "use strict"; var HashHandler = require("./keyboard/hash_handler").HashHandler; var AcePopup = require("./autocomplete/popup").AcePopup; var util = require("./autocomplete/util"); var event = require("./lib/event"); var lang = require("./lib/lang"); var dom = require("./lib/dom"); var snippetManager = require("./snippets").snippetManager; var Autocomplete = function() { this.autoInsert = false; this.autoSelect = true; this.exactMatch = false; this.gatherCompletionsId = 0; this.keyboardHandler = new HashHandler(); this.keyboardHandler.bindKeys(this.commands); this.blurListener = this.blurListener.bind(this); this.changeListener = this.changeListener.bind(this); this.mousedownListener = this.mousedownListener.bind(this); this.mousewheelListener = this.mousewheelListener.bind(this); this.changeTimer = lang.delayedCall(function() { this.updateCompletions(true); }.bind(this)); this.tooltipTimer = lang.delayedCall(this.updateDocTooltip.bind(this), 50); }; (function() { this.$init = function() { this.popup = new AcePopup(document.body || document.documentElement); this.popup.on("click", function(e) { this.insertMatch(); e.stop(); }.bind(this)); this.popup.focus = this.editor.focus.bind(this.editor); this.popup.on("show", this.tooltipTimer.bind(null, null)); this.popup.on("select", this.tooltipTimer.bind(null, null)); this.popup.on("changeHoverMarker", this.tooltipTimer.bind(null, null)); return this.popup; }; this.getPopup = function() { return this.popup || this.$init(); }; this.openPopup = function(editor, prefix, keepPopupPosition) { if (!this.popup) this.$init(); this.popup.setData(this.completions.filtered); editor.keyBinding.addKeyboardHandler(this.keyboardHandler); var renderer = editor.renderer; this.popup.setRow(this.autoSelect ? 0 : -1); if (!keepPopupPosition) { this.popup.setTheme(editor.getTheme()); this.popup.setFontSize(editor.getFontSize()); var lineHeight = renderer.layerConfig.lineHeight; var pos = renderer.$cursorLayer.getPixelPosition(this.base, true); pos.left -= this.popup.getTextLeftOffset(); var rect = editor.container.getBoundingClientRect(); pos.top += rect.top - renderer.layerConfig.offset; pos.left += rect.left - editor.renderer.scrollLeft; pos.left += renderer.gutterWidth; this.popup.show(pos, lineHeight); } else if (keepPopupPosition && !prefix) { this.detach(); } }; this.detach = function() { this.editor.keyBinding.removeKeyboardHandler(this.keyboardHandler); this.editor.off("changeSelection", this.changeListener); this.editor.off("blur", this.blurListener); this.editor.off("mousedown", this.mousedownListener); this.editor.off("mousewheel", this.mousewheelListener); this.changeTimer.cancel(); this.hideDocTooltip(); this.gatherCompletionsId += 1; if (this.popup && this.popup.isOpen) this.popup.hide(); if (this.base) this.base.detach(); this.activated = false; this.completions = this.base = null; }; this.changeListener = function(e) { var cursor = this.editor.selection.lead; if (cursor.row != this.base.row || cursor.column < this.base.column) { this.detach(); } if (this.activated) this.changeTimer.schedule(); else this.detach(); }; this.blurListener = function(e) { if (e.relatedTarget && e.relatedTarget.nodeName == "A" && e.relatedTarget.href) { window.open(e.relatedTarget.href, "_blank"); } var el = document.activeElement; var text = this.editor.textInput.getElement(); var fromTooltip = e.relatedTarget && e.relatedTarget == this.tooltipNode; var container = this.popup && this.popup.container; if (el != text && el.parentNode != container && !fromTooltip && el != this.tooltipNode && e.relatedTarget != text ) { this.detach(); } }; this.mousedownListener = function(e) { this.detach(); }; this.mousewheelListener = function(e) { this.detach(); }; this.goTo = function(where) { var row = this.popup.getRow(); var max = this.popup.session.getLength() - 1; switch(where) { case "up": row = row <= 0 ? max : row - 1; break; case "down": row = row >= max ? -1 : row + 1; break; case "start": row = 0; break; case "end": row = max; break; } this.popup.setRow(row); }; this.insertMatch = function(data, options) { if (!data) data = this.popup.getData(this.popup.getRow()); if (!data) return false; if (data.completer && data.completer.insertMatch) { data.completer.insertMatch(this.editor, data); } else { if (this.completions.filterText) { var ranges = this.editor.selection.getAllRanges(); for (var i = 0, range; range = ranges[i]; i++) { range.start.column -= this.completions.filterText.length; this.editor.session.remove(range); } } if (data.snippet) snippetManager.insertSnippet(this.editor, data.snippet); else this.editor.execCommand("insertstring", data.value || data); } this.detach(); }; this.commands = { "Up": function(editor) { editor.completer.goTo("up"); }, "Down": function(editor) { editor.completer.goTo("down"); }, "Ctrl-Up|Ctrl-Home": function(editor) { editor.completer.goTo("start"); }, "Ctrl-Down|Ctrl-End": function(editor) { editor.completer.goTo("end"); }, "Esc": function(editor) { editor.completer.detach(); }, "Return": function(editor) { return editor.completer.insertMatch(); }, "Shift-Return": function(editor) { editor.completer.insertMatch(null, {deleteSuffix: true}); }, "Tab": function(editor) { var result = editor.completer.insertMatch(); if (!result && !editor.tabstopManager) editor.completer.goTo("down"); else return result; }, "PageUp": function(editor) { editor.completer.popup.gotoPageUp(); }, "PageDown": function(editor) { editor.completer.popup.gotoPageDown(); } }; this.gatherCompletions = function(editor, callback) { var session = editor.getSession(); var pos = editor.getCursorPosition(); var line = session.getLine(pos.row); var prefix = util.getCompletionPrefix(editor); this.base = session.doc.createAnchor(pos.row, pos.column - prefix.length); this.base.$insertRight = true; var matches = []; var total = editor.completers.length; editor.completers.forEach(function(completer, i) { completer.getCompletions(editor, session, pos, prefix, function(err, results) { if (!err && results) matches = matches.concat(results); var pos = editor.getCursorPosition(); var line = session.getLine(pos.row); callback(null, { prefix: prefix, matches: matches, finished: (--total === 0) }); }); }); return true; }; this.showPopup = function(editor) { if (this.editor) this.detach(); this.activated = true; this.editor = editor; if (editor.completer != this) { if (editor.completer) editor.completer.detach(); editor.completer = this; } editor.on("changeSelection", this.changeListener); editor.on("blur", this.blurListener); editor.on("mousedown", this.mousedownListener); editor.on("mousewheel", this.mousewheelListener); this.updateCompletions(); }; this.updateCompletions = function(keepPopupPosition) { if (keepPopupPosition && this.base && this.completions) { var pos = this.editor.getCursorPosition(); var prefix = this.editor.session.getTextRange({start: this.base, end: pos}); if (prefix == this.completions.filterText) return; this.completions.setFilter(prefix); if (!this.completions.filtered.length) return this.detach(); if (this.completions.filtered.length == 1 && this.completions.filtered[0].value == prefix && !this.completions.filtered[0].snippet) return this.detach(); this.openPopup(this.editor, prefix, keepPopupPosition); return; } var _id = this.gatherCompletionsId; this.gatherCompletions(this.editor, function(err, results) { var detachIfFinished = function() { if (!results.finished) return; return this.detach(); }.bind(this); var prefix = results.prefix; var matches = results && results.matches; if (!matches || !matches.length) return detachIfFinished(); if (prefix.indexOf(results.prefix) !== 0 || _id != this.gatherCompletionsId) return; this.completions = new FilteredList(matches); if (this.exactMatch) this.completions.exactMatch = true; this.completions.setFilter(prefix); var filtered = this.completions.filtered; if (!filtered.length) return detachIfFinished(); if (filtered.length == 1 && filtered[0].value == prefix && !filtered[0].snippet) return detachIfFinished(); if (this.autoInsert && filtered.length == 1 && results.finished) return this.insertMatch(filtered[0]); this.openPopup(this.editor, prefix, keepPopupPosition); }.bind(this)); }; this.cancelContextMenu = function() { this.editor.$mouseHandler.cancelContextMenu(); }; this.updateDocTooltip = function() { var popup = this.popup; var all = popup.data; var selected = all && (all[popup.getHoveredRow()] || all[popup.getRow()]); var doc = null; if (!selected || !this.editor || !this.popup.isOpen) return this.hideDocTooltip(); this.editor.completers.some(function(completer) { if (completer.getDocTooltip) doc = completer.getDocTooltip(selected); return doc; }); if (!doc) doc = selected; if (typeof doc == "string") doc = {docText: doc}; if (!doc || !(doc.docHTML || doc.docText)) return this.hideDocTooltip(); this.showDocTooltip(doc); }; this.showDocTooltip = function(item) { if (!this.tooltipNode) { this.tooltipNode = dom.createElement("div"); this.tooltipNode.className = "ace_tooltip ace_doc-tooltip"; this.tooltipNode.style.margin = 0; this.tooltipNode.style.pointerEvents = "auto"; this.tooltipNode.tabIndex = -1; this.tooltipNode.onblur = this.blurListener.bind(this); } var tooltipNode = this.tooltipNode; if (item.docHTML) { tooltipNode.innerHTML = item.docHTML; } else if (item.docText) { tooltipNode.textContent = item.docText; } if (!tooltipNode.parentNode) document.body.appendChild(tooltipNode); var popup = this.popup; var rect = popup.container.getBoundingClientRect(); tooltipNode.style.top = popup.container.style.top; tooltipNode.style.bottom = popup.container.style.bottom; if (window.innerWidth - rect.right < 320) { tooltipNode.style.right = window.innerWidth - rect.left + "px"; tooltipNode.style.left = ""; } else { tooltipNode.style.left = (rect.right + 1) + "px"; tooltipNode.style.right = ""; } tooltipNode.style.display = "block"; }; this.hideDocTooltip = function() { this.tooltipTimer.cancel(); if (!this.tooltipNode) return; var el = this.tooltipNode; if (!this.editor.isFocused() && document.activeElement == el) this.editor.focus(); this.tooltipNode = null; if (el.parentNode) el.parentNode.removeChild(el); }; }).call(Autocomplete.prototype); Autocomplete.startCommand = { name: "startAutocomplete", exec: function(editor) { if (!editor.completer) editor.completer = new Autocomplete(); editor.completer.autoInsert = false; editor.completer.autoSelect = true; editor.completer.showPopup(editor); editor.completer.cancelContextMenu(); }, bindKey: "Ctrl-Space|Ctrl-Shift-Space|Alt-Space" }; var FilteredList = function(array, filterText) { this.all = array; this.filtered = array; this.filterText = filterText || ""; this.exactMatch = false; }; (function(){ this.setFilter = function(str) { if (str.length > this.filterText && str.lastIndexOf(this.filterText, 0) === 0) var matches = this.filtered; else var matches = this.all; this.filterText = str; matches = this.filterCompletions(matches, this.filterText); matches = matches.sort(function(a, b) { return b.exactMatch - a.exactMatch || b.score - a.score; }); var prev = null; matches = matches.filter(function(item){ var caption = item.snippet || item.caption || item.value; if (caption === prev) return false; prev = caption; return true; }); this.filtered = matches; }; this.filterCompletions = function(items, needle) { var results = []; var upper = needle.toUpperCase(); var lower = needle.toLowerCase(); loop: for (var i = 0, item; item = items[i]; i++) { var caption = item.value || item.caption || item.snippet; if (!caption) continue; var lastIndex = -1; var matchMask = 0; var penalty = 0; var index, distance; if (this.exactMatch) { if (needle !== caption.substr(0, needle.length)) continue loop; }else{ for (var j = 0; j < needle.length; j++) { var i1 = caption.indexOf(lower[j], lastIndex + 1); var i2 = caption.indexOf(upper[j], lastIndex + 1); index = (i1 >= 0) ? ((i2 < 0 || i1 < i2) ? i1 : i2) : i2; if (index < 0) continue loop; distance = index - lastIndex - 1; if (distance > 0) { if (lastIndex === -1) penalty += 10; penalty += distance; } matchMask = matchMask | (1 << index); lastIndex = index; } } item.matchMask = matchMask; item.exactMatch = penalty ? 0 : 1; item.score = (item.score || 0) - penalty; results.push(item); } return results; }; }).call(FilteredList.prototype); exports.Autocomplete = Autocomplete; exports.FilteredList = FilteredList; }); ace.define("ace/autocomplete/text_completer",["require","exports","module","ace/range"], function(require, exports, module) { var Range = require("../range").Range; var splitRegex = /[^a-zA-Z_0-9\$\-\u00C0-\u1FFF\u2C00-\uD7FF\w]+/; function getWordIndex(doc, pos) { var textBefore = doc.getTextRange(Range.fromPoints({row: 0, column:0}, pos)); return textBefore.split(splitRegex).length - 1; } function wordDistance(doc, pos) { var prefixPos = getWordIndex(doc, pos); var words = doc.getValue().split(splitRegex); var wordScores = Object.create(null); var currentWord = words[prefixPos]; words.forEach(function(word, idx) { if (!word || word === currentWord) return; var distance = Math.abs(prefixPos - idx); var score = words.length - distance; if (wordScores[word]) { wordScores[word] = Math.max(score, wordScores[word]); } else { wordScores[word] = score; } }); return wordScores; } exports.getCompletions = function(editor, session, pos, prefix, callback) { var wordScore = wordDistance(session, pos, prefix); var wordList = Object.keys(wordScore); callback(null, wordList.map(function(word) { return { caption: word, value: word, score: wordScore[word], meta: "local" }; })); }; }); ace.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) { "use strict"; var snippetManager = require("../snippets").snippetManager; var Autocomplete = require("../autocomplete").Autocomplete; var config = require("../config"); var lang = require("../lib/lang"); var util = require("../autocomplete/util"); var textCompleter = require("../autocomplete/text_completer"); var keyWordCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { if (session.$mode.completer) { return session.$mode.completer.getCompletions(editor, session, pos, prefix, callback); } var state = editor.session.getState(pos.row); var completions = session.$mode.getCompletions(state, session, pos, prefix); callback(null, completions); } }; var snippetCompleter = { getCompletions: function(editor, session, pos, prefix, callback) { var snippetMap = snippetManager.snippetMap; var completions = []; snippetManager.getActiveScopes(editor).forEach(function(scope) { var snippets = snippetMap[scope] || []; for (var i = snippets.length; i--;) { var s = snippets[i]; var caption = s.name || s.tabTrigger; if (!caption) continue; completions.push({ caption: caption, snippet: s.content, meta: s.tabTrigger && !s.name ? s.tabTrigger + "\u21E5 " : "snippet", type: "snippet" }); } }, this); callback(null, completions); }, getDocTooltip: function(item) { if (item.type == "snippet" && !item.docHTML) { item.docHTML = [ "<b>", lang.escapeHTML(item.caption), "</b>", "<hr></hr>", lang.escapeHTML(item.snippet) ].join(""); } } }; var completers = [snippetCompleter, textCompleter, keyWordCompleter]; exports.setCompleters = function(val) { completers.length = 0; if (val) completers.push.apply(completers, val); }; exports.addCompleter = function(completer) { completers.push(completer); }; exports.textCompleter = textCompleter; exports.keyWordCompleter = keyWordCompleter; exports.snippetCompleter = snippetCompleter; var expandSnippet = { name: "expandSnippet", exec: function(editor) { return snippetManager.expandWithTab(editor); }, bindKey: "Tab" }; var onChangeMode = function(e, editor) { loadSnippetsForMode(editor.session.$mode); }; var loadSnippetsForMode = function(mode) { var id = mode.$id; if (!snippetManager.files) snippetManager.files = {}; loadSnippetFile(id); if (mode.modes) mode.modes.forEach(loadSnippetsForMode); }; var loadSnippetFile = function(id) { if (!id || snippetManager.files[id]) return; var snippetFilePath = id.replace("mode", "snippets"); snippetManager.files[id] = {}; config.loadModule(snippetFilePath, function(m) { if (m) { snippetManager.files[id] = m; if (!m.snippets && m.snippetText) m.snippets = snippetManager.parseSnippetFile(m.snippetText); snippetManager.register(m.snippets || [], m.scope); if (m.includeScopes) { snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes; m.includeScopes.forEach(function(x) { loadSnippetFile("ace/mode/" + x); }); } } }); }; var doLiveAutocomplete = function(e) { var editor = e.editor; var hasCompleter = editor.completer && editor.completer.activated; if (e.command.name === "backspace") { if (hasCompleter && !util.getCompletionPrefix(editor)) editor.completer.detach(); } else if (e.command.name === "insertstring") { var prefix = util.getCompletionPrefix(editor); if (prefix && !hasCompleter) { if (!editor.completer) { editor.completer = new Autocomplete(); } editor.completer.autoInsert = false; editor.completer.showPopup(editor); } } }; var Editor = require("../editor").Editor; require("../config").defineOptions(Editor.prototype, "editor", { enableBasicAutocompletion: { set: function(val) { if (val) { if (!this.completers) this.completers = Array.isArray(val)? val: completers; this.commands.addCommand(Autocomplete.startCommand); } else { this.commands.removeCommand(Autocomplete.startCommand); } }, value: false }, enableLiveAutocompletion: { set: function(val) { if (val) { if (!this.completers) this.completers = Array.isArray(val)? val: completers; this.commands.on('afterExec', doLiveAutocomplete); } else { this.commands.removeListener('afterExec', doLiveAutocomplete); } }, value: false }, enableSnippets: { set: function(val) { if (val) { this.commands.addCommand(expandSnippet); this.on("changeMode", onChangeMode); onChangeMode(null, this); } else { this.commands.removeCommand(expandSnippet); this.off("changeMode", onChangeMode); } }, value: false } }); }); (function() { ace.require(["ace/ext/language_tools"], function() {}); })(); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/ext-searchbox.js ================================================ ace.define("ace/ext/searchbox",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/lib/event","ace/keyboard/hash_handler","ace/lib/keys"], function(require, exports, module) { "use strict"; var dom = require("../lib/dom"); var lang = require("../lib/lang"); var event = require("../lib/event"); var searchboxCss = "\ .ace_search {\ background-color: #ddd;\ border: 1px solid #cbcbcb;\ border-top: 0 none;\ max-width: 325px;\ overflow: hidden;\ margin: 0;\ padding: 4px;\ padding-right: 6px;\ padding-bottom: 0;\ position: absolute;\ top: 0px;\ z-index: 99;\ white-space: normal;\ }\ .ace_search.left {\ border-left: 0 none;\ border-radius: 0px 0px 5px 0px;\ left: 0;\ }\ .ace_search.right {\ border-radius: 0px 0px 0px 5px;\ border-right: 0 none;\ right: 0;\ }\ .ace_search_form, .ace_replace_form {\ border-radius: 3px;\ border: 1px solid #cbcbcb;\ float: left;\ margin-bottom: 4px;\ overflow: hidden;\ }\ .ace_search_form.ace_nomatch {\ outline: 1px solid red;\ }\ .ace_search_field {\ background-color: white;\ color: black;\ border-right: 1px solid #cbcbcb;\ border: 0 none;\ -webkit-box-sizing: border-box;\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ float: left;\ height: 22px;\ outline: 0;\ padding: 0 7px;\ width: 214px;\ margin: 0;\ }\ .ace_searchbtn,\ .ace_replacebtn {\ background: #fff;\ border: 0 none;\ border-left: 1px solid #dcdcdc;\ cursor: pointer;\ float: left;\ height: 22px;\ margin: 0;\ position: relative;\ }\ .ace_searchbtn:last-child,\ .ace_replacebtn:last-child {\ border-top-right-radius: 3px;\ border-bottom-right-radius: 3px;\ }\ .ace_searchbtn:disabled {\ background: none;\ cursor: default;\ }\ .ace_searchbtn {\ background-position: 50% 50%;\ background-repeat: no-repeat;\ width: 27px;\ }\ .ace_searchbtn.prev {\ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADFJREFUeNpiSU1NZUAC/6E0I0yACYskCpsJiySKIiY0SUZk40FyTEgCjGgKwTRAgAEAQJUIPCE+qfkAAAAASUVORK5CYII=); \ }\ .ace_searchbtn.next {\ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAFCAYAAAB4ka1VAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADRJREFUeNpiTE1NZQCC/0DMyIAKwGJMUAYDEo3M/s+EpvM/mkKwCQxYjIeLMaELoLMBAgwAU7UJObTKsvAAAAAASUVORK5CYII=); \ }\ .ace_searchbtn_close {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAcCAYAAABRVo5BAAAAZ0lEQVR42u2SUQrAMAhDvazn8OjZBilCkYVVxiis8H4CT0VrAJb4WHT3C5xU2a2IQZXJjiQIRMdkEoJ5Q2yMqpfDIo+XY4k6h+YXOyKqTIj5REaxloNAd0xiKmAtsTHqW8sR2W5f7gCu5nWFUpVjZwAAAABJRU5ErkJggg==) no-repeat 50% 0;\ border-radius: 50%;\ border: 0 none;\ color: #656565;\ cursor: pointer;\ float: right;\ font: 16px/16px Arial;\ height: 14px;\ margin: 5px 1px 9px 5px;\ padding: 0;\ text-align: center;\ width: 14px;\ }\ .ace_searchbtn_close:hover {\ background-color: #656565;\ background-position: 50% 100%;\ color: white;\ }\ .ace_replacebtn.prev {\ width: 54px\ }\ .ace_replacebtn.next {\ width: 27px\ }\ .ace_button {\ margin-left: 2px;\ cursor: pointer;\ -webkit-user-select: none;\ -moz-user-select: none;\ -o-user-select: none;\ -ms-user-select: none;\ user-select: none;\ overflow: hidden;\ opacity: 0.7;\ border: 1px solid rgba(100,100,100,0.23);\ padding: 1px;\ -moz-box-sizing: border-box;\ box-sizing: border-box;\ color: black;\ }\ .ace_button:hover {\ background-color: #eee;\ opacity:1;\ }\ .ace_button:active {\ background-color: #ddd;\ }\ .ace_button.checked {\ border-color: #3399ff;\ opacity:1;\ }\ .ace_search_options{\ margin-bottom: 3px;\ text-align: right;\ -webkit-user-select: none;\ -moz-user-select: none;\ -o-user-select: none;\ -ms-user-select: none;\ user-select: none;\ }"; var HashHandler = require("../keyboard/hash_handler").HashHandler; var keyUtil = require("../lib/keys"); dom.importCssString(searchboxCss, "ace_searchbox"); var html = '<div class="ace_search right">\ <button type="button" action="hide" class="ace_searchbtn_close"></button>\ <div class="ace_search_form">\ <input class="ace_search_field" placeholder="Search for" spellcheck="false"></input>\ <button type="button" action="findNext" class="ace_searchbtn next"></button>\ <button type="button" action="findPrev" class="ace_searchbtn prev"></button>\ <button type="button" action="findAll" class="ace_searchbtn" title="Alt-Enter">All</button>\ </div>\ <div class="ace_replace_form">\ <input class="ace_search_field" placeholder="Replace with" spellcheck="false"></input>\ <button type="button" action="replaceAndFindNext" class="ace_replacebtn">Replace</button>\ <button type="button" action="replaceAll" class="ace_replacebtn">All</button>\ </div>\ <div class="ace_search_options">\ <span action="toggleRegexpMode" class="ace_button" title="RegExp Search">.*</span>\ <span action="toggleCaseSensitive" class="ace_button" title="CaseSensitive Search">Aa</span>\ <span action="toggleWholeWords" class="ace_button" title="Whole Word Search">\\b</span>\ </div>\ </div>'.replace(/>\s+/g, ">"); var SearchBox = function(editor, range, showReplaceForm) { var div = dom.createElement("div"); div.innerHTML = html; this.element = div.firstChild; this.$init(); this.setEditor(editor); }; (function() { this.setEditor = function(editor) { editor.searchBox = this; editor.container.appendChild(this.element); this.editor = editor; }; this.$initElements = function(sb) { this.searchBox = sb.querySelector(".ace_search_form"); this.replaceBox = sb.querySelector(".ace_replace_form"); this.searchOptions = sb.querySelector(".ace_search_options"); this.regExpOption = sb.querySelector("[action=toggleRegexpMode]"); this.caseSensitiveOption = sb.querySelector("[action=toggleCaseSensitive]"); this.wholeWordOption = sb.querySelector("[action=toggleWholeWords]"); this.searchInput = this.searchBox.querySelector(".ace_search_field"); this.replaceInput = this.replaceBox.querySelector(".ace_search_field"); }; this.$init = function() { var sb = this.element; this.$initElements(sb); var _this = this; event.addListener(sb, "mousedown", function(e) { setTimeout(function(){ _this.activeInput.focus(); }, 0); event.stopPropagation(e); }); event.addListener(sb, "click", function(e) { var t = e.target || e.srcElement; var action = t.getAttribute("action"); if (action && _this[action]) _this[action](); else if (_this.$searchBarKb.commands[action]) _this.$searchBarKb.commands[action].exec(_this); event.stopPropagation(e); }); event.addCommandKeyListener(sb, function(e, hashId, keyCode) { var keyString = keyUtil.keyCodeToString(keyCode); var command = _this.$searchBarKb.findKeyCommand(hashId, keyString); if (command && command.exec) { command.exec(_this); event.stopEvent(e); } }); this.$onChange = lang.delayedCall(function() { _this.find(false, false); }); event.addListener(this.searchInput, "input", function() { _this.$onChange.schedule(20); }); event.addListener(this.searchInput, "focus", function() { _this.activeInput = _this.searchInput; _this.searchInput.value && _this.highlight(); }); event.addListener(this.replaceInput, "focus", function() { _this.activeInput = _this.replaceInput; _this.searchInput.value && _this.highlight(); }); }; this.$closeSearchBarKb = new HashHandler([{ bindKey: "Esc", name: "closeSearchBar", exec: function(editor) { editor.searchBox.hide(); } }]); this.$searchBarKb = new HashHandler(); this.$searchBarKb.bindKeys({ "Ctrl-f|Command-f": function(sb) { var isReplace = sb.isReplace = !sb.isReplace; sb.replaceBox.style.display = isReplace ? "" : "none"; sb.searchInput.focus(); }, "Ctrl-H|Command-Option-F": function(sb) { sb.replaceBox.style.display = ""; sb.replaceInput.focus(); }, "Ctrl-G|Command-G": function(sb) { sb.findNext(); }, "Ctrl-Shift-G|Command-Shift-G": function(sb) { sb.findPrev(); }, "esc": function(sb) { setTimeout(function() { sb.hide();}); }, "Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findNext(); }, "Shift-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replace(); sb.findPrev(); }, "Alt-Return": function(sb) { if (sb.activeInput == sb.replaceInput) sb.replaceAll(); sb.findAll(); }, "Tab": function(sb) { (sb.activeInput == sb.replaceInput ? sb.searchInput : sb.replaceInput).focus(); } }); this.$searchBarKb.addCommands([{ name: "toggleRegexpMode", bindKey: {win: "Alt-R|Alt-/", mac: "Ctrl-Alt-R|Ctrl-Alt-/"}, exec: function(sb) { sb.regExpOption.checked = !sb.regExpOption.checked; sb.$syncOptions(); } }, { name: "toggleCaseSensitive", bindKey: {win: "Alt-C|Alt-I", mac: "Ctrl-Alt-R|Ctrl-Alt-I"}, exec: function(sb) { sb.caseSensitiveOption.checked = !sb.caseSensitiveOption.checked; sb.$syncOptions(); } }, { name: "toggleWholeWords", bindKey: {win: "Alt-B|Alt-W", mac: "Ctrl-Alt-B|Ctrl-Alt-W"}, exec: function(sb) { sb.wholeWordOption.checked = !sb.wholeWordOption.checked; sb.$syncOptions(); } }]); this.$syncOptions = function() { dom.setCssClass(this.regExpOption, "checked", this.regExpOption.checked); dom.setCssClass(this.wholeWordOption, "checked", this.wholeWordOption.checked); dom.setCssClass(this.caseSensitiveOption, "checked", this.caseSensitiveOption.checked); this.find(false, false); }; this.highlight = function(re) { this.editor.session.highlight(re || this.editor.$search.$options.re); this.editor.renderer.updateBackMarkers() }; this.find = function(skipCurrent, backwards, preventScroll) { var range = this.editor.find(this.searchInput.value, { skipCurrent: skipCurrent, backwards: backwards, wrap: true, regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked, preventScroll: preventScroll }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); }; this.findNext = function() { this.find(true, false); }; this.findPrev = function() { this.find(true, true); }; this.findAll = function(){ var range = this.editor.findAll(this.searchInput.value, { regExp: this.regExpOption.checked, caseSensitive: this.caseSensitiveOption.checked, wholeWord: this.wholeWordOption.checked }); var noMatch = !range && this.searchInput.value; dom.setCssClass(this.searchBox, "ace_nomatch", noMatch); this.editor._emit("findSearchBox", { match: !noMatch }); this.highlight(); this.hide(); }; this.replace = function() { if (!this.editor.getReadOnly()) this.editor.replace(this.replaceInput.value); }; this.replaceAndFindNext = function() { if (!this.editor.getReadOnly()) { this.editor.replace(this.replaceInput.value); this.findNext() } }; this.replaceAll = function() { if (!this.editor.getReadOnly()) this.editor.replaceAll(this.replaceInput.value); }; this.hide = function() { this.element.style.display = "none"; this.editor.keyBinding.removeKeyboardHandler(this.$closeSearchBarKb); this.editor.focus(); }; this.show = function(value, isReplace) { this.element.style.display = ""; this.replaceBox.style.display = isReplace ? "" : "none"; this.isReplace = isReplace; if (value) this.searchInput.value = value; this.find(false, false, true); this.searchInput.focus(); this.searchInput.select(); this.editor.keyBinding.addKeyboardHandler(this.$closeSearchBarKb); }; this.isFocused = function() { var el = document.activeElement; return el == this.searchInput || el == this.replaceInput; } }).call(SearchBox.prototype); exports.SearchBox = SearchBox; exports.Search = function(editor, isReplace) { var sb = editor.searchBox || new SearchBox(editor); sb.show(editor.session.getTextRange(), isReplace); }; }); (function() { ace.require(["ace/ext/searchbox"], function() {}); })(); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-css.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssCompletions = require("./css_completions").CssCompletions; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-html.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|async|await|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode "[0-2][0-7]{0,2}|" + // oct "3[0-7][0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ DocCommentHighlightRules.getStartRule("doc-start"), comments("no_regex"), { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "punctuation.operator", regex : /[.](?![.])/, next : "property" }, { token : "keyword.operator", regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], property: [{ token : "text", regex : "\\s+" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", next: "function_arguments" }, { token : "punctuation.operator", regex : /[.](?![.])/ }, { token : "support.function", regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : "support.function.dom", regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : "support.constant", regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : "identifier", regex : identifierRe }, { regex: "", token: "empty", next: "no_regex" } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), comments("start"), { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); } else if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); if (!options || options.jsx != false) JSX.call(this); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); function JSX() { var tagRegex = identifierRe.replace("\\d", "\\d\\-"); var jsxTag = { onMatch : function(val, state, stack) { var offset = val.charAt(1) == "/" ? 2 : 1; if (offset == 1) { if (state != this.nextState) stack.unshift(this.next, this.nextState, 0); else stack.unshift(this.next); stack[2]++; } else if (offset == 2) { if (state == this.nextState) { stack[1]--; if (!stack[1] || stack[1] < 0) { stack.shift(); stack.shift(); } } } return [{ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", value: val.slice(0, offset) }, { type: "meta.tag.tag-name.xml", value: val.substr(offset) }]; }, regex : "</?" + tagRegex + "", next: "jsxAttributes", nextState: "jsx" }; this.$rules.start.unshift(jsxTag); var jsxJsRule = { regex: "{", token: "paren.quasi.start", push: "start" }; this.$rules.jsx = [ jsxJsRule, jsxTag, {include : "reference"}, {defaultToken: "string"} ]; this.$rules.jsxAttributes = [{ token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", onMatch : function(value, currentState, stack) { if (currentState == stack[0]) stack.shift(); if (value.length == 2) { if (stack[0] == this.nextState) stack[1]--; if (!stack[1] || stack[1] < 0) { stack.splice(0, 2); } } this.next = stack[0] || "start"; return [{type: this.token, value: value}]; }, nextState: "jsx" }, jsxJsRule, comments("jsxAttributes"), { token : "entity.other.attribute-name.xml", regex : tagRegex }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { token : "text.tag-whitespace.xml", regex : "\\s+" }, { token : "string.attribute-value.xml", regex : "'", stateName : "jsx_attr_q", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', stateName : "jsx_attr_qq", push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, jsxTag ]; this.$rules.reference = [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }]; } function comments(next) { return [ { token : "comment", // multi line comment regex : /\/\*/, next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] }, { token : "comment", regex : "\\/\\/", next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] } ]; } exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssCompletions = require("./css_completions").CssCompletions; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*"; this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction" }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "</"}, {token : "text.tag-open.xml", regex: "<"}, {include : "reference"}, {defaultToken : "text.xml"} ], xml_decl : [{ token : "entity.other.attribute-name.decl-attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.decl-attribute-equals.xml", regex : "=" }, { include: "whitespace" }, { include: "string" }, { token : "punctuation.xml-decl.xml", regex : "\\?>", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)(" + tagRegex + ")", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(</)(" + tag + "(?=\\s|>|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:.]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(</?)([-_a-zA-Z0-9:.]+)", next: "tag_stuff" }], tag_stuff: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getSelectionRange().start; var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); if (token.value == "<") { token = iterator.stepForward(); break; } } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "</" + element + ">", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { if (token.value == "/>") return; while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === "</") { return { text: "\n" + indent + "\n" + nextIndent, selection: [1, indent.length, 1, indent.length] }; } else { return { text: "\n" + indent }; } } } } }); }; oop.inherits(XmlBehaviour, Behaviour); exports.XmlBehaviour = XmlBehaviour; }); ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(defaultMode, subModes) { this.defaultMode = defaultMode; this.subModes = subModes; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.$getMode = function(state) { if (typeof state != "string") state = state[0]; for (var key in this.subModes) { if (state.indexOf(key) === 0) return this.subModes[key]; } return null; }; this.$tryMode = function(state, session, foldStyle, row) { var mode = this.$getMode(state); return (mode ? mode.getFoldWidget(session, foldStyle, row) : ""); }; this.getFoldWidget = function(session, foldStyle, row) { return ( this.$tryMode(session.getState(row-1), session, foldStyle, row) || this.$tryMode(session.getState(row), session, foldStyle, row) || this.defaultMode.getFoldWidget(session, foldStyle, row) ); }; this.getFoldWidgetRange = function(session, foldStyle, row) { var mode = this.$getMode(session.getState(row-1)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.$getMode(session.getState(row)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.defaultMode; return mode.getFoldWidgetRange(session, foldStyle, row); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var lang = require("../../lib/lang"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) { BaseFoldMode.call(this); this.voidElements = voidElements || {}; this.optionalEndTags = oop.mixin({}, this.voidElements); if (optionalEndTags) oop.mixin(this.optionalEndTags, optionalEndTags); }; oop.inherits(FoldMode, BaseFoldMode); var Tag = function() { this.tagName = ""; this.closing = false; this.selfClosing = false; this.start = {row: 0, column: 0}; this.end = {row: 0, column: 0}; }; function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; if (firstTag.start.row == firstTag.end.row) start.column = firstTag.end.column; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; if (tag.start.row == tag.end.row && tag.start.column < tag.end.column) tag.start.column = tag.end.column; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": {"manifest": 1}, "head": {}, "title": {}, "base": {"href": 1, "target": 1}, "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1}, "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1}, "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1}, "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1}, "noscript": {"href": 1}, "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1}, "section": {}, "nav": {}, "article": {"pubdate": 1}, "aside": {}, "h1": {}, "h2": {}, "h3": {}, "h4": {}, "h5": {}, "h6": {}, "header": {}, "footer": {}, "address": {}, "main": {}, "p": {}, "hr": {}, "pre": {}, "blockquote": {"cite": 1}, "ol": {"start": 1, "reversed": 1}, "ul": {}, "li": {"value": 1}, "dl": {}, "dt": {}, "dd": {}, "figure": {}, "figcaption": {}, "div": {}, "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1}, "em": {}, "strong": {}, "small": {}, "s": {}, "cite": {}, "q": {"cite": 1}, "dfn": {}, "abbr": {}, "data": {}, "time": {"datetime": 1}, "code": {}, "var": {}, "samp": {}, "kbd": {}, "sub": {}, "sup": {}, "i": {}, "b": {}, "u": {}, "mark": {}, "ruby": {}, "rt": {}, "rp": {}, "bdi": {}, "bdo": {}, "span": {}, "br": {}, "wbr": {}, "ins": {"cite": 1, "datetime": 1}, "del": {"cite": 1, "datetime": 1}, "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1}, "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}}, "embed": {"src": 1, "height": 1, "width": 1, "type": 1}, "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1}, "param": {"name": 1, "value": 1}, "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}}, "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }}, "source": {"src": 1, "type": 1, "media": 1}, "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1}, "canvas": {"width": 1, "height": 1}, "map": {"name": 1}, "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1}, "svg": {}, "math": {}, "table": {"summary": 1}, "caption": {}, "colgroup": {"span": 1}, "col": {"span": 1}, "tbody": {}, "thead": {}, "tfoot": {}, "tr": {}, "td": {"headers": 1, "rowspan": 1, "colspan": 1}, "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1}, "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}}, "fieldset": {"disabled": 1, "form": 1, "name": 1}, "legend": {}, "label": {"form": 1, "for": 1}, "input": { "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1}, "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "name": 1, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1}, "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}}, "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}}, "datalist": {}, "optgroup": {"disabled": 1, "label": 1}, "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1}, "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}}, "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1}, "output": {"for": 1, "form": 1, "name": 1}, "progress": {"value": 1, "max": 1}, "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1}, "details": {"open": 1}, "summary": {}, "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1}, "menu": {"type": 1, "label": 1}, "dialog": {"open": 1} }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } function findAttributeName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "attribute-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompletions(state, session, pos, prefix); if (is(token, "attribute-value")) return this.getAttributeValueCompletions(state, session, pos, prefix); var line = session.getLine(pos.row).substr(0, pos.column); if (/&[a-z]*$/i.test(line)) return this.getHTMLEntityCompletions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(Object.keys(attributeMap[tagName])); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; this.getAttributeValueCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); var attributeName = findAttributeName(session, pos); if (!tagName) return []; var values = []; if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") { values = Object.keys(attributeMap[tagName][attributeName]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "attribute value", score: Number.MAX_VALUE }; }); }; this.getHTMLEntityCompletions = function(state, session, pos, prefix) { var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;']; return values.map(function(value){ return { caption: value, snippet: value, meta: "html entity", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: "<!--", end: "-->"}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-javascript.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|async|await|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode "[0-2][0-7]{0,2}|" + // oct "3[0-7][0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ DocCommentHighlightRules.getStartRule("doc-start"), comments("no_regex"), { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "punctuation.operator", regex : /[.](?![.])/, next : "property" }, { token : "keyword.operator", regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], property: [{ token : "text", regex : "\\s+" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", next: "function_arguments" }, { token : "punctuation.operator", regex : /[.](?![.])/ }, { token : "support.function", regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : "support.function.dom", regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : "support.constant", regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : "identifier", regex : identifierRe }, { regex: "", token: "empty", next: "no_regex" } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), comments("start"), { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); } else if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); if (!options || options.jsx != false) JSX.call(this); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); function JSX() { var tagRegex = identifierRe.replace("\\d", "\\d\\-"); var jsxTag = { onMatch : function(val, state, stack) { var offset = val.charAt(1) == "/" ? 2 : 1; if (offset == 1) { if (state != this.nextState) stack.unshift(this.next, this.nextState, 0); else stack.unshift(this.next); stack[2]++; } else if (offset == 2) { if (state == this.nextState) { stack[1]--; if (!stack[1] || stack[1] < 0) { stack.shift(); stack.shift(); } } } return [{ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", value: val.slice(0, offset) }, { type: "meta.tag.tag-name.xml", value: val.substr(offset) }]; }, regex : "</?" + tagRegex + "", next: "jsxAttributes", nextState: "jsx" }; this.$rules.start.unshift(jsxTag); var jsxJsRule = { regex: "{", token: "paren.quasi.start", push: "start" }; this.$rules.jsx = [ jsxJsRule, jsxTag, {include : "reference"}, {defaultToken: "string"} ]; this.$rules.jsxAttributes = [{ token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", onMatch : function(value, currentState, stack) { if (currentState == stack[0]) stack.shift(); if (value.length == 2) { if (stack[0] == this.nextState) stack[1]--; if (!stack[1] || stack[1] < 0) { stack.splice(0, 2); } } this.next = stack[0] || "start"; return [{type: this.token, value: value}]; }, nextState: "jsx" }, jsxJsRule, comments("jsxAttributes"), { token : "entity.other.attribute-name.xml", regex : tagRegex }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { token : "text.tag-whitespace.xml", regex : "\\s+" }, { token : "string.attribute-value.xml", regex : "'", stateName : "jsx_attr_q", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', stateName : "jsx_attr_qq", push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, jsxTag ]; this.$rules.reference = [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }]; } function comments(next) { return [ { token : "comment", // multi line comment regex : /\/\*/, next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] }, { token : "comment", regex : "\\/\\/", next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] } ]; } exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-less.js ================================================ ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/less_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules","ace/mode/css_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var CssHighlightRules = require('./css_highlight_rules'); var LessHighlightRules = function() { var keywordList = "@import|@media|@font-face|@keyframes|@-webkit-keyframes|@supports|" + "@charset|@plugin|@namespace|@document|@page|@viewport|@-ms-viewport|" + "or|and|when|not"; var keywords = keywordList.split('|'); var properties = CssHighlightRules.supportType.split('|'); var keywordMapper = this.createKeywordMapper({ "support.constant": CssHighlightRules.supportConstant, "keyword": keywordList, "support.constant.color": CssHighlightRules.supportConstantColor, "support.constant.fonts": CssHighlightRules.supportConstantFonts }, "identifier", true); var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : "constant.numeric", regex : numRe }, { token : ["support.function", "paren.lparen", "string", "paren.rparen"], regex : "(url)(\\()(.*)(\\))" }, { token : ["support.function", "paren.lparen"], regex : "(:extend|[a-z0-9_\\-]+)(\\()" }, { token : function(value) { if (keywords.indexOf(value.toLowerCase()) > -1) return "keyword"; else return "variable"; }, regex : "[@\\$][a-z0-9_\\-@\\$]*\\b" }, { token : "variable", regex : "[@\\$]\\{[a-z0-9_\\-@\\$]*\\}" }, { token : function(first, second) { if(properties.indexOf(first.toLowerCase()) > -1) { return ["support.type.property", "text"]; } else { return ["support.type.unknownProperty", "text"]; } }, regex : "([a-z0-9-_]+)(\\s*:)" }, { token : "keyword", regex : "&" // special case - always treat as keyword }, { token : keywordMapper, regex : "\\-?[@a-z_][@a-z0-9_\\-]*" }, { token: "variable.language", regex: "#[a-z0-9-_]+" }, { token: "variable.language", regex: "\\.[a-z0-9-_]+" }, { token: "variable.language", regex: ":[a-z_][a-z0-9-_]*" }, { token: "constant", regex: "[a-z0-9-_]+" }, { token : "keyword.operator", regex : "<|>|<=|>=|=|!=|-|%|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ] }; this.normalizeRules(); }; oop.inherits(LessHighlightRules, TextHighlightRules); exports.LessHighlightRules = LessHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/less",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/less_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/css_completions","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var LessHighlightRules = require("./less_highlight_rules").LessHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CssCompletions = require("./css_completions").CssCompletions; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = LessHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions("ruleset", session, pos, prefix); }; this.$id = "ace/mode/less"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-markdown.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|async|await|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|of|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode "[0-2][0-7]{0,2}|" + // oct "3[0-7][0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ DocCommentHighlightRules.getStartRule("doc-start"), comments("no_regex"), { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "punctuation.operator", regex : /[.](?![.])/, next : "property" }, { token : "keyword.operator", regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], property: [{ token : "text", regex : "\\s+" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", next: "function_arguments" }, { token : "punctuation.operator", regex : /[.](?![.])/ }, { token : "support.function", regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : "support.function.dom", regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : "support.constant", regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : "identifier", regex : identifierRe }, { regex: "", token: "empty", next: "no_regex" } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), comments("start"), { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); } else if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); if (!options || options.jsx != false) JSX.call(this); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); function JSX() { var tagRegex = identifierRe.replace("\\d", "\\d\\-"); var jsxTag = { onMatch : function(val, state, stack) { var offset = val.charAt(1) == "/" ? 2 : 1; if (offset == 1) { if (state != this.nextState) stack.unshift(this.next, this.nextState, 0); else stack.unshift(this.next); stack[2]++; } else if (offset == 2) { if (state == this.nextState) { stack[1]--; if (!stack[1] || stack[1] < 0) { stack.shift(); stack.shift(); } } } return [{ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", value: val.slice(0, offset) }, { type: "meta.tag.tag-name.xml", value: val.substr(offset) }]; }, regex : "</?" + tagRegex + "", next: "jsxAttributes", nextState: "jsx" }; this.$rules.start.unshift(jsxTag); var jsxJsRule = { regex: "{", token: "paren.quasi.start", push: "start" }; this.$rules.jsx = [ jsxJsRule, jsxTag, {include : "reference"}, {defaultToken: "string"} ]; this.$rules.jsxAttributes = [{ token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", onMatch : function(value, currentState, stack) { if (currentState == stack[0]) stack.shift(); if (value.length == 2) { if (stack[0] == this.nextState) stack[1]--; if (!stack[1] || stack[1] < 0) { stack.splice(0, 2); } } this.next = stack[0] || "start"; return [{type: this.token, value: value}]; }, nextState: "jsx" }, jsxJsRule, comments("jsxAttributes"), { token : "entity.other.attribute-name.xml", regex : tagRegex }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { token : "text.tag-whitespace.xml", regex : "\\s+" }, { token : "string.attribute-value.xml", regex : "'", stateName : "jsx_attr_q", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', stateName : "jsx_attr_qq", push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, jsxTag ]; this.$rules.reference = [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }]; } function comments(next) { return [ { token : "comment", // multi line comment regex : /\/\*/, next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] }, { token : "comment", regex : "\\/\\/", next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] } ]; } exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*"; this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction" }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "</"}, {token : "text.tag-open.xml", regex: "<"}, {include : "reference"}, {defaultToken : "text.xml"} ], xml_decl : [{ token : "entity.other.attribute-name.decl-attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.decl-attribute-equals.xml", regex : "=" }, { include: "whitespace" }, { include: "string" }, { token : "punctuation.xml-decl.xml", regex : "\\?>", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)(" + tagRegex + ")", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(</)(" + tag + "(?=\\s|>|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getSelectionRange().start; var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); if (token.value == "<") { token = iterator.stepForward(); break; } } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "</" + element + ">", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { if (token.value == "/>") return; while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === "</") { return { text: "\n" + indent + "\n" + nextIndent, selection: [1, indent.length, 1, indent.length] }; } else { return { text: "\n" + indent }; } } } } }); }; oop.inherits(XmlBehaviour, Behaviour); exports.XmlBehaviour = XmlBehaviour; }); ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var lang = require("../../lib/lang"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) { BaseFoldMode.call(this); this.voidElements = voidElements || {}; this.optionalEndTags = oop.mixin({}, this.voidElements); if (optionalEndTags) oop.mixin(this.optionalEndTags, optionalEndTags); }; oop.inherits(FoldMode, BaseFoldMode); var Tag = function() { this.tagName = ""; this.closing = false; this.selfClosing = false; this.start = {row: 0, column: 0}; this.end = {row: 0, column: 0}; }; function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; if (firstTag.start.row == firstTag.end.row) start.column = firstTag.end.column; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; if (tag.start.row == tag.end.row && tag.start.column < tag.end.column) tag.start.column = tag.end.column; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/xml_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/xml","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var XmlFoldMode = require("./folding/xml").FoldMode; var WorkerClient = require("../worker/worker_client").WorkerClient; var Mode = function() { this.HighlightRules = XmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.foldingRules = new XmlFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.voidElements = lang.arrayToMap([]); this.blockComment = {start: "<!--", end: "-->"}; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/xml_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/xml"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssCompletions = require("./css_completions").CssCompletions; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:.]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(</?)([-_a-zA-Z0-9:.]+)", next: "tag_stuff" }], tag_stuff: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(new JavaScriptHighlightRules({jsx: false}).getRules(), "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(defaultMode, subModes) { this.defaultMode = defaultMode; this.subModes = subModes; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.$getMode = function(state) { if (typeof state != "string") state = state[0]; for (var key in this.subModes) { if (state.indexOf(key) === 0) return this.subModes[key]; } return null; }; this.$tryMode = function(state, session, foldStyle, row) { var mode = this.$getMode(state); return (mode ? mode.getFoldWidget(session, foldStyle, row) : ""); }; this.getFoldWidget = function(session, foldStyle, row) { return ( this.$tryMode(session.getState(row-1), session, foldStyle, row) || this.$tryMode(session.getState(row), session, foldStyle, row) || this.defaultMode.getFoldWidget(session, foldStyle, row) ); }; this.getFoldWidgetRange = function(session, foldStyle, row) { var mode = this.$getMode(session.getState(row-1)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.$getMode(session.getState(row)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.defaultMode; return mode.getFoldWidgetRange(session, foldStyle, row); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": {"manifest": 1}, "head": {}, "title": {}, "base": {"href": 1, "target": 1}, "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1}, "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1}, "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1}, "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1}, "noscript": {"href": 1}, "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1}, "section": {}, "nav": {}, "article": {"pubdate": 1}, "aside": {}, "h1": {}, "h2": {}, "h3": {}, "h4": {}, "h5": {}, "h6": {}, "header": {}, "footer": {}, "address": {}, "main": {}, "p": {}, "hr": {}, "pre": {}, "blockquote": {"cite": 1}, "ol": {"start": 1, "reversed": 1}, "ul": {}, "li": {"value": 1}, "dl": {}, "dt": {}, "dd": {}, "figure": {}, "figcaption": {}, "div": {}, "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1}, "em": {}, "strong": {}, "small": {}, "s": {}, "cite": {}, "q": {"cite": 1}, "dfn": {}, "abbr": {}, "data": {}, "time": {"datetime": 1}, "code": {}, "var": {}, "samp": {}, "kbd": {}, "sub": {}, "sup": {}, "i": {}, "b": {}, "u": {}, "mark": {}, "ruby": {}, "rt": {}, "rp": {}, "bdi": {}, "bdo": {}, "span": {}, "br": {}, "wbr": {}, "ins": {"cite": 1, "datetime": 1}, "del": {"cite": 1, "datetime": 1}, "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1}, "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}}, "embed": {"src": 1, "height": 1, "width": 1, "type": 1}, "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1}, "param": {"name": 1, "value": 1}, "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}}, "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }}, "source": {"src": 1, "type": 1, "media": 1}, "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1}, "canvas": {"width": 1, "height": 1}, "map": {"name": 1}, "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1}, "svg": {}, "math": {}, "table": {"summary": 1}, "caption": {}, "colgroup": {"span": 1}, "col": {"span": 1}, "tbody": {}, "thead": {}, "tfoot": {}, "tr": {}, "td": {"headers": 1, "rowspan": 1, "colspan": 1}, "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1}, "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}}, "fieldset": {"disabled": 1, "form": 1, "name": 1}, "legend": {}, "label": {"form": 1, "for": 1}, "input": { "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1}, "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "name": 1, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1}, "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}}, "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}}, "datalist": {}, "optgroup": {"disabled": 1, "label": 1}, "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1}, "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}}, "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1}, "output": {"for": 1, "form": 1, "name": 1}, "progress": {"value": 1, "max": 1}, "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1}, "details": {"open": 1}, "summary": {}, "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1}, "menu": {"type": 1, "label": 1}, "dialog": {"open": 1} }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } function findAttributeName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "attribute-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompletions(state, session, pos, prefix); if (is(token, "attribute-value")) return this.getAttributeValueCompletions(state, session, pos, prefix); var line = session.getLine(pos.row).substr(0, pos.column); if (/&[a-z]*$/i.test(line)) return this.getHTMLEntityCompletions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(Object.keys(attributeMap[tagName])); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; this.getAttributeValueCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); var attributeName = findAttributeName(session, pos); if (!tagName) return []; var values = []; if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") { values = Object.keys(attributeMap[tagName][attributeName]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "attribute value", score: Number.MAX_VALUE }; }); }; this.getHTMLEntityCompletions = function(state, session, pos, prefix) { var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;']; return values.map(function(value){ return { caption: value, snippet: value, meta: "html entity", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: "<!--", end: "-->"}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/markdown_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules","ace/mode/html_highlight_rules","ace/mode/css_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var escaped = function(ch) { return "(?:[^" + lang.escapeRegExp(ch) + "\\\\]|\\\\.)*"; } function github_embed(tag, prefix) { return { // Github style block token : "support.function", regex : "^\\s*```" + tag + "\\s*$", push : prefix + "start" }; } var MarkdownHighlightRules = function() { HtmlHighlightRules.call(this); this.$rules["start"].unshift({ token : "empty_line", regex : '^$', next: "allowBlock" }, { // h1 token: "markup.heading.1", regex: "^=+(?=\\s*$)" }, { // h2 token: "markup.heading.2", regex: "^\\-+(?=\\s*$)" }, { token : function(value) { return "markup.heading." + value.length; }, regex : /^#{1,6}(?=\s*[^ #]|\s+#.)/, next : "header" }, github_embed("(?:javascript|js)", "jscode-"), github_embed("xml", "xmlcode-"), github_embed("html", "htmlcode-"), github_embed("css", "csscode-"), { // Github style block token : "support.function", regex : "^\\s*```\\s*\\S*(?:{.*?\\})?\\s*$", next : "githubblock" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { // HR * - _ token : "constant", regex : "^ {0,2}(?:(?: ?\\* ?){3,}|(?: ?\\- ?){3,}|(?: ?\\_ ?){3,})\\s*$", next: "allowBlock" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic" }); this.addRules({ "basic" : [{ token : "constant.language.escape", regex : /\\[\\`*_{}\[\]()#+\-.!]/ }, { // code span ` token : "support.function", regex : "(`+)(.*?[^`])(\\1)" }, { // reference token : ["text", "constant", "text", "url", "string", "text"], regex : "^([ ]{0,3}\\[)([^\\]]+)(\\]:\\s*)([^ ]+)(\\s*(?:[\"][^\"]+[\"])?(\\s*))$" }, { // link by reference token : ["text", "string", "text", "constant", "text"], regex : "(\\[)(" + escaped("]") + ")(\\]\\s*\\[)("+ escaped("]") + ")(\\])" }, { // link by url token : ["text", "string", "text", "markup.underline", "string", "text"], regex : "(\\[)(" + // [ escaped("]") + // link text ")(\\]\\()"+ // ]( '((?:[^\\)\\s\\\\]|\\\\.|\\s(?=[^"]))*)' + // href '(\\s*"' + escaped('"') + '"\\s*)?' + // "title" "(\\))" // ) }, { // strong ** __ token : "string.strong", regex : "([*]{2}|[_]{2}(?=\\S))(.*?\\S[*_]*)(\\1)" }, { // emphasis * _ token : "string.emphasis", regex : "([*]|[_](?=\\S))(.*?\\S[*_]*)(\\1)" }, { // token : ["text", "url", "text"], regex : "(<)("+ "(?:https?|ftp|dict):[^'\">\\s]+"+ "|"+ "(?:mailto:)?[-.\\w]+\\@[-a-z0-9]+(?:\\.[-a-z0-9]+)*\\.[a-z]+"+ ")(>)" }], "allowBlock": [ {token : "support.function", regex : "^ {4}.+", next : "allowBlock"}, {token : "empty_line", regex : '^$', next: "allowBlock"}, {token : "empty", regex : "", next : "start"} ], "header" : [{ regex: "$", next : "start" }, { include: "basic" }, { defaultToken : "heading" } ], "listblock-start" : [{ token : "support.variable", regex : /(?:\[[ x]\])?/, next : "listblock" }], "listblock" : [ { // Lists only escape on completely blank lines. token : "empty_line", regex : "^$", next : "start" }, { // list token : "markup.list", regex : "^\\s{0,3}(?:[*+-]|\\d+\\.)\\s+", next : "listblock-start" }, { include : "basic", noEscape: true }, { // Github style block token : "support.function", regex : "^\\s*```\\s*[a-zA-Z]*(?:{.*?\\})?\\s*$", next : "githubblock" }, { defaultToken : "list" //do not use markup.list to allow stling leading `*` differntly } ], "blockquote" : [ { // Blockquotes only escape on blank lines. token : "empty_line", regex : "^\\s*$", next : "start" }, { // block quote token : "string.blockquote", regex : "^\\s*>\\s*(?:[*+-]|\\d+\\.)?\\s+", next : "blockquote" }, { include : "basic", noEscape: true }, { defaultToken : "string.blockquote" } ], "githubblock" : [ { token : "support.function", regex : "^\\s*```", next : "start" }, { token : "support.function", regex : ".+" } ] }); this.embedRules(JavaScriptHighlightRules, "jscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(HtmlHighlightRules, "htmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(CssHighlightRules, "csscode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.embedRules(XmlHighlightRules, "xmlcode-", [{ token : "support.function", regex : "^\\s*```", next : "pop" }]); this.normalizeRules(); }; oop.inherits(MarkdownHighlightRules, TextHighlightRules); exports.MarkdownHighlightRules = MarkdownHighlightRules; }); ace.define("ace/mode/folding/markdown",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /^(?:[=-]+\s*$|#{1,6} |`{3})/; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (!this.foldingStartMarker.test(line)) return ""; if (line[0] == "`") { if (session.bgTokenizer.getState(row) == "start") return "end"; return "start"; } return "start"; }; this.getFoldWidgetRange = function(session, foldStyle, row) { var line = session.getLine(row); var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; if (!line.match(this.foldingStartMarker)) return; if (line[0] == "`") { if (session.bgTokenizer.getState(row) !== "start") { while (++row < maxRow) { line = session.getLine(row); if (line[0] == "`" & line.substring(0, 3) == "```") break; } return new Range(startRow, startColumn, row, 0); } else { while (row -- > 0) { line = session.getLine(row); if (line[0] == "`" & line.substring(0, 3) == "```") break; } return new Range(row, line.length, startRow, 0); } } var token; function isHeading(row) { token = session.getTokens(row)[0]; return token && token.type.lastIndexOf(heading, 0) === 0; } var heading = "markup.heading"; function getLevel() { var ch = token.value[0]; if (ch == "=") return 6; if (ch == "-") return 5; return 7 - token.value.search(/[^#]/); } if (isHeading(row)) { var startHeadingLevel = getLevel(); while (++row < maxRow) { if (!isHeading(row)) continue; var level = getLevel(); if (level >= startHeadingLevel) break; } endRow = row - (!token || ["=", "-"].indexOf(token.value[0]) == -1 ? 1 : 2); if (endRow > startRow) { while (endRow > startRow && /^\s*$/.test(session.getLine(endRow))) endRow--; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/markdown",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript","ace/mode/xml","ace/mode/html","ace/mode/markdown_highlight_rules","ace/mode/folding/markdown"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var XmlMode = require("./xml").Mode; var HtmlMode = require("./html").Mode; var MarkdownHighlightRules = require("./markdown_highlight_rules").MarkdownHighlightRules; var MarkdownFoldMode = require("./folding/markdown").FoldMode; var Mode = function() { this.HighlightRules = MarkdownHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode, "xml-": XmlMode, "html-": HtmlMode }); this.foldingRules = new MarkdownFoldMode(); this.$behaviour = this.$defaultBehaviour; }; oop.inherits(Mode, TextMode); (function() { this.type = "text"; this.blockComment = {start: "<!--", end: "-->"}; this.getNextLineIndent = function(state, line, tab) { if (state == "listblock") { var match = /^(\s*)(?:([-+*])|(\d+)\.)(\s+)/.exec(line); if (!match) return ""; var marker = match[2]; if (!marker) marker = parseInt(match[3], 10) + 1 + "."; return match[1] + marker + match[4]; } else { return this.$getIndent(line); } }; this.$id = "ace/mode/markdown"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-php.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|async|await|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode "[0-2][0-7]{0,2}|" + // oct "3[0-7][0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ DocCommentHighlightRules.getStartRule("doc-start"), comments("no_regex"), { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "punctuation.operator", regex : /[.](?![.])/, next : "property" }, { token : "keyword.operator", regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], property: [{ token : "text", regex : "\\s+" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", next: "function_arguments" }, { token : "punctuation.operator", regex : /[.](?![.])/ }, { token : "support.function", regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : "support.function.dom", regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : "support.constant", regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : "identifier", regex : identifierRe }, { regex: "", token: "empty", next: "no_regex" } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), comments("start"), { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); } else if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); if (!options || !options.noJSX) JSX.call(this); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); function JSX() { var tagRegex = identifierRe.replace("\\d", "\\d\\-"); var jsxTag = { onMatch : function(val, state, stack) { var offset = val.charAt(1) == "/" ? 2 : 1; if (offset == 1) { if (state != this.nextState) stack.unshift(this.next, this.nextState, 0); else stack.unshift(this.next); stack[2]++; } else if (offset == 2) { if (state == this.nextState) { stack[1]--; if (!stack[1] || stack[1] < 0) { stack.shift(); stack.shift(); } } } return [{ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", value: val.slice(0, offset) }, { type: "meta.tag.tag-name.xml", value: val.substr(offset) }]; }, regex : "</?" + tagRegex + "", next: "jsxAttributes", nextState: "jsx" }; this.$rules.start.unshift(jsxTag); var jsxJsRule = { regex: "{", token: "paren.quasi.start", push: "start" }; this.$rules.jsx = [ jsxJsRule, jsxTag, {include : "reference"}, {defaultToken: "string"} ]; this.$rules.jsxAttributes = [{ token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", onMatch : function(value, currentState, stack) { if (currentState == stack[0]) stack.shift(); if (value.length == 2) { if (stack[0] == this.nextState) stack[1]--; if (!stack[1] || stack[1] < 0) { stack.splice(0, 2); } } this.next = stack[0] || "start"; return [{type: this.token, value: value}]; }, nextState: "jsx" }, jsxJsRule, comments("jsxAttributes"), { token : "entity.other.attribute-name.xml", regex : tagRegex }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { token : "text.tag-whitespace.xml", regex : "\\s+" }, { token : "string.attribute-value.xml", regex : "'", stateName : "jsx_attr_q", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', stateName : "jsx_attr_qq", push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, jsxTag ]; this.$rules.reference = [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }]; } function comments(next) { return [ { token : "comment", // multi line comment regex : /\/\*/, next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] }, { token : "comment", regex : "\\/\\/", next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] } ]; } exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*"; this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction" }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "</"}, {token : "text.tag-open.xml", regex: "<"}, {include : "reference"}, {defaultToken : "text.xml"} ], xml_decl : [{ token : "entity.other.attribute-name.decl-attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.decl-attribute-equals.xml", regex : "=" }, { include: "whitespace" }, { include: "string" }, { token : "punctuation.xml-decl.xml", regex : "\\?>", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)(" + tagRegex + ")", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(</)(" + tag + "(?=\\s|>|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:.]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(</?)([-_a-zA-Z0-9:.]+)", next: "tag_stuff" }], tag_stuff: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(new JavaScriptHighlightRules({noJSX: true}).getRules(), "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/php_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules","ace/mode/html_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var PhpLangHighlightRules = function() { var docComment = DocCommentHighlightRules; var builtinFunctions = lang.arrayToMap( ('abs|acos|acosh|addcslashes|addslashes|aggregate|aggregate_info|aggregate_methods|aggregate_methods_by_list|aggregate_methods_by_regexp|' + 'aggregate_properties|aggregate_properties_by_list|aggregate_properties_by_regexp|aggregation_info|amqpconnection|amqpexchange|amqpqueue|' + 'apache_child_terminate|apache_get_modules|apache_get_version|apache_getenv|apache_lookup_uri|apache_note|apache_request_headers|' + 'apache_reset_timeout|apache_response_headers|apache_setenv|apc_add|apc_bin_dump|apc_bin_dumpfile|apc_bin_load|apc_bin_loadfile|' + 'apc_cache_info|apc_cas|apc_clear_cache|apc_compile_file|apc_dec|apc_define_constants|apc_delete|apc_delete_file|apc_exists|apc_fetch|' + 'apc_inc|apc_load_constants|apc_sma_info|apc_store|apciterator|apd_breakpoint|apd_callstack|apd_clunk|apd_continue|apd_croak|' + 'apd_dump_function_table|apd_dump_persistent_resources|apd_dump_regular_resources|apd_echo|apd_get_active_symbols|apd_set_pprof_trace|' + 'apd_set_session|apd_set_session_trace|apd_set_session_trace_socket|appenditerator|array|array_change_key_case|array_chunk|array_combine|' + 'array_count_values|array_diff|array_diff_assoc|array_diff_key|array_diff_uassoc|array_diff_ukey|array_fill|array_fill_keys|array_filter|' + 'array_flip|array_intersect|array_intersect_assoc|array_intersect_key|array_intersect_uassoc|array_intersect_ukey|array_key_exists|' + 'array_keys|array_map|array_merge|array_merge_recursive|array_multisort|array_pad|array_pop|array_product|array_push|array_rand|' + 'array_reduce|array_replace|array_replace_recursive|array_reverse|array_search|array_shift|array_slice|array_splice|array_sum|array_udiff|' + 'array_udiff_assoc|array_udiff_uassoc|array_uintersect|array_uintersect_assoc|array_uintersect_uassoc|array_unique|array_unshift|' + 'array_values|array_walk|array_walk_recursive|arrayaccess|arrayiterator|arrayobject|arsort|asin|asinh|asort|assert|assert_options|atan|' + 'atan2|atanh|audioproperties|badfunctioncallexception|badmethodcallexception|base64_decode|base64_encode|base_convert|basename|' + 'bbcode_add_element|bbcode_add_smiley|bbcode_create|bbcode_destroy|bbcode_parse|bbcode_set_arg_parser|bbcode_set_flags|bcadd|bccomp|bcdiv|' + 'bcmod|bcmul|bcompiler_load|bcompiler_load_exe|bcompiler_parse_class|bcompiler_read|bcompiler_write_class|bcompiler_write_constant|' + 'bcompiler_write_exe_footer|bcompiler_write_file|bcompiler_write_footer|bcompiler_write_function|bcompiler_write_functions_from_file|' + 'bcompiler_write_header|bcompiler_write_included_filename|bcpow|bcpowmod|bcscale|bcsqrt|bcsub|bin2hex|bind_textdomain_codeset|bindec|' + 'bindtextdomain|bson_decode|bson_encode|bumpValue|bzclose|bzcompress|bzdecompress|bzerrno|bzerror|bzerrstr|bzflush|bzopen|bzread|bzwrite|' + 'cachingiterator|cairo|cairo_create|cairo_font_face_get_type|cairo_font_face_status|cairo_font_options_create|cairo_font_options_equal|' + 'cairo_font_options_get_antialias|cairo_font_options_get_hint_metrics|cairo_font_options_get_hint_style|' + 'cairo_font_options_get_subpixel_order|cairo_font_options_hash|cairo_font_options_merge|cairo_font_options_set_antialias|' + 'cairo_font_options_set_hint_metrics|cairo_font_options_set_hint_style|cairo_font_options_set_subpixel_order|cairo_font_options_status|' + 'cairo_format_stride_for_width|cairo_image_surface_create|cairo_image_surface_create_for_data|cairo_image_surface_create_from_png|' + 'cairo_image_surface_get_data|cairo_image_surface_get_format|cairo_image_surface_get_height|cairo_image_surface_get_stride|' + 'cairo_image_surface_get_width|cairo_matrix_create_scale|cairo_matrix_create_translate|cairo_matrix_invert|cairo_matrix_multiply|' + 'cairo_matrix_rotate|cairo_matrix_transform_distance|cairo_matrix_transform_point|cairo_matrix_translate|cairo_pattern_add_color_stop_rgb|' + 'cairo_pattern_add_color_stop_rgba|cairo_pattern_create_for_surface|cairo_pattern_create_linear|cairo_pattern_create_radial|' + 'cairo_pattern_create_rgb|cairo_pattern_create_rgba|cairo_pattern_get_color_stop_count|cairo_pattern_get_color_stop_rgba|' + 'cairo_pattern_get_extend|cairo_pattern_get_filter|cairo_pattern_get_linear_points|cairo_pattern_get_matrix|' + 'cairo_pattern_get_radial_circles|cairo_pattern_get_rgba|cairo_pattern_get_surface|cairo_pattern_get_type|cairo_pattern_set_extend|' + 'cairo_pattern_set_filter|cairo_pattern_set_matrix|cairo_pattern_status|cairo_pdf_surface_create|cairo_pdf_surface_set_size|' + 'cairo_ps_get_levels|cairo_ps_level_to_string|cairo_ps_surface_create|cairo_ps_surface_dsc_begin_page_setup|' + 'cairo_ps_surface_dsc_begin_setup|cairo_ps_surface_dsc_comment|cairo_ps_surface_get_eps|cairo_ps_surface_restrict_to_level|' + 'cairo_ps_surface_set_eps|cairo_ps_surface_set_size|cairo_scaled_font_create|cairo_scaled_font_extents|cairo_scaled_font_get_ctm|' + 'cairo_scaled_font_get_font_face|cairo_scaled_font_get_font_matrix|cairo_scaled_font_get_font_options|cairo_scaled_font_get_scale_matrix|' + 'cairo_scaled_font_get_type|cairo_scaled_font_glyph_extents|cairo_scaled_font_status|cairo_scaled_font_text_extents|' + 'cairo_surface_copy_page|cairo_surface_create_similar|cairo_surface_finish|cairo_surface_flush|cairo_surface_get_content|' + 'cairo_surface_get_device_offset|cairo_surface_get_font_options|cairo_surface_get_type|cairo_surface_mark_dirty|' + 'cairo_surface_mark_dirty_rectangle|cairo_surface_set_device_offset|cairo_surface_set_fallback_resolution|cairo_surface_show_page|' + 'cairo_surface_status|cairo_surface_write_to_png|cairo_svg_surface_create|cairo_svg_surface_restrict_to_version|' + 'cairo_svg_version_to_string|cairoantialias|cairocontent|cairocontext|cairoexception|cairoextend|cairofillrule|cairofilter|cairofontface|' + 'cairofontoptions|cairofontslant|cairofonttype|cairofontweight|cairoformat|cairogradientpattern|cairohintmetrics|cairohintstyle|' + 'cairoimagesurface|cairolineargradient|cairolinecap|cairolinejoin|cairomatrix|cairooperator|cairopath|cairopattern|cairopatterntype|' + 'cairopdfsurface|cairopslevel|cairopssurface|cairoradialgradient|cairoscaledfont|cairosolidpattern|cairostatus|cairosubpixelorder|' + 'cairosurface|cairosurfacepattern|cairosurfacetype|cairosvgsurface|cairosvgversion|cairotoyfontface|cal_days_in_month|cal_from_jd|cal_info|' + 'cal_to_jd|calcul_hmac|calculhmac|call_user_func|call_user_func_array|call_user_method|call_user_method_array|callbackfilteriterator|ceil|' + 'chdb|chdb_create|chdir|checkdate|checkdnsrr|chgrp|chmod|chop|chown|chr|chroot|chunk_split|class_alias|class_exists|class_implements|' + 'class_parents|class_uses|classkit_import|classkit_method_add|classkit_method_copy|classkit_method_redefine|classkit_method_remove|' + 'classkit_method_rename|clearstatcache|clone|closedir|closelog|collator|com|com_addref|com_create_guid|com_event_sink|com_get|' + 'com_get_active_object|com_invoke|com_isenum|com_load|com_load_typelib|com_message_pump|com_print_typeinfo|com_propget|com_propput|' + 'com_propset|com_release|com_set|compact|connection_aborted|connection_status|connection_timeout|constant|construct|construct|construct|' + 'convert_cyr_string|convert_uudecode|convert_uuencode|copy|cos|cosh|count|count_chars|countable|counter_bump|counter_bump_value|' + 'counter_create|counter_get|counter_get_meta|counter_get_named|counter_get_value|counter_reset|counter_reset_value|crack_check|' + 'crack_closedict|crack_getlastmessage|crack_opendict|crc32|create_function|crypt|ctype_alnum|ctype_alpha|ctype_cntrl|ctype_digit|' + 'ctype_graph|ctype_lower|ctype_print|ctype_punct|ctype_space|ctype_upper|ctype_xdigit|cubrid_affected_rows|cubrid_bind|' + 'cubrid_client_encoding|cubrid_close|cubrid_close_prepare|cubrid_close_request|cubrid_col_get|cubrid_col_size|cubrid_column_names|' + 'cubrid_column_types|cubrid_commit|cubrid_connect|cubrid_connect_with_url|cubrid_current_oid|cubrid_data_seek|cubrid_db_name|' + 'cubrid_disconnect|cubrid_drop|cubrid_errno|cubrid_error|cubrid_error_code|cubrid_error_code_facility|cubrid_error_msg|cubrid_execute|' + 'cubrid_fetch|cubrid_fetch_array|cubrid_fetch_assoc|cubrid_fetch_field|cubrid_fetch_lengths|cubrid_fetch_object|cubrid_fetch_row|' + 'cubrid_field_flags|cubrid_field_len|cubrid_field_name|cubrid_field_seek|cubrid_field_table|cubrid_field_type|cubrid_free_result|' + 'cubrid_get|cubrid_get_autocommit|cubrid_get_charset|cubrid_get_class_name|cubrid_get_client_info|cubrid_get_db_parameter|' + 'cubrid_get_server_info|cubrid_insert_id|cubrid_is_instance|cubrid_list_dbs|cubrid_load_from_glo|cubrid_lob_close|cubrid_lob_export|' + 'cubrid_lob_get|cubrid_lob_send|cubrid_lob_size|cubrid_lock_read|cubrid_lock_write|cubrid_move_cursor|cubrid_new_glo|cubrid_next_result|' + 'cubrid_num_cols|cubrid_num_fields|cubrid_num_rows|cubrid_ping|cubrid_prepare|cubrid_put|cubrid_query|cubrid_real_escape_string|' + 'cubrid_result|cubrid_rollback|cubrid_save_to_glo|cubrid_schema|cubrid_send_glo|cubrid_seq_drop|cubrid_seq_insert|cubrid_seq_put|' + 'cubrid_set_add|cubrid_set_autocommit|cubrid_set_db_parameter|cubrid_set_drop|cubrid_unbuffered_query|cubrid_version|curl_close|' + 'curl_copy_handle|curl_errno|curl_error|curl_exec|curl_getinfo|curl_init|curl_multi_add_handle|curl_multi_close|curl_multi_exec|' + 'curl_multi_getcontent|curl_multi_info_read|curl_multi_init|curl_multi_remove_handle|curl_multi_select|curl_setopt|curl_setopt_array|' + 'curl_version|current|cyrus_authenticate|cyrus_bind|cyrus_close|cyrus_connect|cyrus_query|cyrus_unbind|date|date_add|date_create|' + 'date_create_from_format|date_date_set|date_default_timezone_get|date_default_timezone_set|date_diff|date_format|date_get_last_errors|' + 'date_interval_create_from_date_string|date_interval_format|date_isodate_set|date_modify|date_offset_get|date_parse|date_parse_from_format|' + 'date_sub|date_sun_info|date_sunrise|date_sunset|date_time_set|date_timestamp_get|date_timestamp_set|date_timezone_get|date_timezone_set|' + 'dateinterval|dateperiod|datetime|datetimezone|db2_autocommit|db2_bind_param|db2_client_info|db2_close|db2_column_privileges|db2_columns|' + 'db2_commit|db2_conn_error|db2_conn_errormsg|db2_connect|db2_cursor_type|db2_escape_string|db2_exec|db2_execute|db2_fetch_array|' + 'db2_fetch_assoc|db2_fetch_both|db2_fetch_object|db2_fetch_row|db2_field_display_size|db2_field_name|db2_field_num|db2_field_precision|' + 'db2_field_scale|db2_field_type|db2_field_width|db2_foreign_keys|db2_free_result|db2_free_stmt|db2_get_option|db2_last_insert_id|' + 'db2_lob_read|db2_next_result|db2_num_fields|db2_num_rows|db2_pclose|db2_pconnect|db2_prepare|db2_primary_keys|db2_procedure_columns|' + 'db2_procedures|db2_result|db2_rollback|db2_server_info|db2_set_option|db2_special_columns|db2_statistics|db2_stmt_error|db2_stmt_errormsg|' + 'db2_table_privileges|db2_tables|dba_close|dba_delete|dba_exists|dba_fetch|dba_firstkey|dba_handlers|dba_insert|dba_key_split|dba_list|' + 'dba_nextkey|dba_open|dba_optimize|dba_popen|dba_replace|dba_sync|dbase_add_record|dbase_close|dbase_create|dbase_delete_record|' + 'dbase_get_header_info|dbase_get_record|dbase_get_record_with_names|dbase_numfields|dbase_numrecords|dbase_open|dbase_pack|' + 'dbase_replace_record|dbplus_add|dbplus_aql|dbplus_chdir|dbplus_close|dbplus_curr|dbplus_errcode|dbplus_errno|dbplus_find|dbplus_first|' + 'dbplus_flush|dbplus_freealllocks|dbplus_freelock|dbplus_freerlocks|dbplus_getlock|dbplus_getunique|dbplus_info|dbplus_last|dbplus_lockrel|' + 'dbplus_next|dbplus_open|dbplus_prev|dbplus_rchperm|dbplus_rcreate|dbplus_rcrtexact|dbplus_rcrtlike|dbplus_resolve|dbplus_restorepos|' + 'dbplus_rkeys|dbplus_ropen|dbplus_rquery|dbplus_rrename|dbplus_rsecindex|dbplus_runlink|dbplus_rzap|dbplus_savepos|dbplus_setindex|' + 'dbplus_setindexbynumber|dbplus_sql|dbplus_tcl|dbplus_tremove|dbplus_undo|dbplus_undoprepare|dbplus_unlockrel|dbplus_unselect|' + 'dbplus_update|dbplus_xlockrel|dbplus_xunlockrel|dbx_close|dbx_compare|dbx_connect|dbx_error|dbx_escape_string|dbx_fetch_row|dbx_query|' + 'dbx_sort|dcgettext|dcngettext|deaggregate|debug_backtrace|debug_print_backtrace|debug_zval_dump|decbin|dechex|decoct|define|' + 'define_syslog_variables|defined|deg2rad|delete|dgettext|die|dio_close|dio_fcntl|dio_open|dio_read|dio_seek|dio_stat|dio_tcsetattr|' + 'dio_truncate|dio_write|dir|directoryiterator|dirname|disk_free_space|disk_total_space|diskfreespace|dl|dngettext|dns_check_record|' + 'dns_get_mx|dns_get_record|dom_import_simplexml|domainexception|domattr|domattribute_name|domattribute_set_value|domattribute_specified|' + 'domattribute_value|domcharacterdata|domcomment|domdocument|domdocument_add_root|domdocument_create_attribute|' + 'domdocument_create_cdata_section|domdocument_create_comment|domdocument_create_element|domdocument_create_element_ns|' + 'domdocument_create_entity_reference|domdocument_create_processing_instruction|domdocument_create_text_node|domdocument_doctype|' + 'domdocument_document_element|domdocument_dump_file|domdocument_dump_mem|domdocument_get_element_by_id|domdocument_get_elements_by_tagname|' + 'domdocument_html_dump_mem|domdocument_xinclude|domdocumentfragment|domdocumenttype|domdocumenttype_entities|' + 'domdocumenttype_internal_subset|domdocumenttype_name|domdocumenttype_notations|domdocumenttype_public_id|domdocumenttype_system_id|' + 'domelement|domelement_get_attribute|domelement_get_attribute_node|domelement_get_elements_by_tagname|domelement_has_attribute|' + 'domelement_remove_attribute|domelement_set_attribute|domelement_set_attribute_node|domelement_tagname|domentity|domentityreference|' + 'domexception|domimplementation|domnamednodemap|domnode|domnode_add_namespace|domnode_append_child|domnode_append_sibling|' + 'domnode_attributes|domnode_child_nodes|domnode_clone_node|domnode_dump_node|domnode_first_child|domnode_get_content|' + 'domnode_has_attributes|domnode_has_child_nodes|domnode_insert_before|domnode_is_blank_node|domnode_last_child|domnode_next_sibling|' + 'domnode_node_name|domnode_node_type|domnode_node_value|domnode_owner_document|domnode_parent_node|domnode_prefix|domnode_previous_sibling|' + 'domnode_remove_child|domnode_replace_child|domnode_replace_node|domnode_set_content|domnode_set_name|domnode_set_namespace|' + 'domnode_unlink_node|domnodelist|domnotation|domprocessinginstruction|domprocessinginstruction_data|domprocessinginstruction_target|' + 'domtext|domxml_new_doc|domxml_open_file|domxml_open_mem|domxml_version|domxml_xmltree|domxml_xslt_stylesheet|domxml_xslt_stylesheet_doc|' + 'domxml_xslt_stylesheet_file|domxml_xslt_version|domxpath|domxsltstylesheet_process|domxsltstylesheet_result_dump_file|' + 'domxsltstylesheet_result_dump_mem|dotnet|dotnet_load|doubleval|each|easter_date|easter_days|echo|empty|emptyiterator|' + 'enchant_broker_describe|enchant_broker_dict_exists|enchant_broker_free|enchant_broker_free_dict|enchant_broker_get_error|' + 'enchant_broker_init|enchant_broker_list_dicts|enchant_broker_request_dict|enchant_broker_request_pwl_dict|enchant_broker_set_ordering|' + 'enchant_dict_add_to_personal|enchant_dict_add_to_session|enchant_dict_check|enchant_dict_describe|enchant_dict_get_error|' + 'enchant_dict_is_in_session|enchant_dict_quick_check|enchant_dict_store_replacement|enchant_dict_suggest|end|ereg|ereg_replace|eregi|' + 'eregi_replace|error_get_last|error_log|error_reporting|errorexception|escapeshellarg|escapeshellcmd|eval|event_add|event_base_free|' + 'event_base_loop|event_base_loopbreak|event_base_loopexit|event_base_new|event_base_priority_init|event_base_set|event_buffer_base_set|' + 'event_buffer_disable|event_buffer_enable|event_buffer_fd_set|event_buffer_free|event_buffer_new|event_buffer_priority_set|' + 'event_buffer_read|event_buffer_set_callback|event_buffer_timeout_set|event_buffer_watermark_set|event_buffer_write|event_del|event_free|' + 'event_new|event_set|exception|exec|exif_imagetype|exif_read_data|exif_tagname|exif_thumbnail|exit|exp|expect_expectl|expect_popen|explode|' + 'expm1|export|export|extension_loaded|extract|ezmlm_hash|fam_cancel_monitor|fam_close|fam_monitor_collection|fam_monitor_directory|' + 'fam_monitor_file|fam_next_event|fam_open|fam_pending|fam_resume_monitor|fam_suspend_monitor|fbsql_affected_rows|fbsql_autocommit|' + 'fbsql_blob_size|fbsql_change_user|fbsql_clob_size|fbsql_close|fbsql_commit|fbsql_connect|fbsql_create_blob|fbsql_create_clob|' + 'fbsql_create_db|fbsql_data_seek|fbsql_database|fbsql_database_password|fbsql_db_query|fbsql_db_status|fbsql_drop_db|fbsql_errno|' + 'fbsql_error|fbsql_fetch_array|fbsql_fetch_assoc|fbsql_fetch_field|fbsql_fetch_lengths|fbsql_fetch_object|fbsql_fetch_row|' + 'fbsql_field_flags|fbsql_field_len|fbsql_field_name|fbsql_field_seek|fbsql_field_table|fbsql_field_type|fbsql_free_result|' + 'fbsql_get_autostart_info|fbsql_hostname|fbsql_insert_id|fbsql_list_dbs|fbsql_list_fields|fbsql_list_tables|fbsql_next_result|' + 'fbsql_num_fields|fbsql_num_rows|fbsql_password|fbsql_pconnect|fbsql_query|fbsql_read_blob|fbsql_read_clob|fbsql_result|fbsql_rollback|' + 'fbsql_rows_fetched|fbsql_select_db|fbsql_set_characterset|fbsql_set_lob_mode|fbsql_set_password|fbsql_set_transaction|fbsql_start_db|' + 'fbsql_stop_db|fbsql_table_name|fbsql_tablename|fbsql_username|fbsql_warnings|fclose|fdf_add_doc_javascript|fdf_add_template|fdf_close|' + 'fdf_create|fdf_enum_values|fdf_errno|fdf_error|fdf_get_ap|fdf_get_attachment|fdf_get_encoding|fdf_get_file|fdf_get_flags|fdf_get_opt|' + 'fdf_get_status|fdf_get_value|fdf_get_version|fdf_header|fdf_next_field_name|fdf_open|fdf_open_string|fdf_remove_item|fdf_save|' + 'fdf_save_string|fdf_set_ap|fdf_set_encoding|fdf_set_file|fdf_set_flags|fdf_set_javascript_action|fdf_set_on_import_javascript|fdf_set_opt|' + 'fdf_set_status|fdf_set_submit_form_action|fdf_set_target_frame|fdf_set_value|fdf_set_version|feof|fflush|fgetc|fgetcsv|fgets|fgetss|file|' + 'file_exists|file_get_contents|file_put_contents|fileatime|filectime|filegroup|fileinode|filemtime|fileowner|fileperms|filepro|' + 'filepro_fieldcount|filepro_fieldname|filepro_fieldtype|filepro_fieldwidth|filepro_retrieve|filepro_rowcount|filesize|filesystemiterator|' + 'filetype|filter_has_var|filter_id|filter_input|filter_input_array|filter_list|filter_var|filter_var_array|filteriterator|finfo_buffer|' + 'finfo_close|finfo_file|finfo_open|finfo_set_flags|floatval|flock|floor|flush|fmod|fnmatch|fopen|forward_static_call|' + 'forward_static_call_array|fpassthru|fprintf|fputcsv|fputs|fread|frenchtojd|fribidi_log2vis|fscanf|fseek|fsockopen|fstat|ftell|ftok|' + 'ftp_alloc|ftp_cdup|ftp_chdir|ftp_chmod|ftp_close|ftp_connect|ftp_delete|ftp_exec|ftp_fget|ftp_fput|ftp_get|ftp_get_option|ftp_login|' + 'ftp_mdtm|ftp_mkdir|ftp_nb_continue|ftp_nb_fget|ftp_nb_fput|ftp_nb_get|ftp_nb_put|ftp_nlist|ftp_pasv|ftp_put|ftp_pwd|ftp_quit|ftp_raw|' + 'ftp_rawlist|ftp_rename|ftp_rmdir|ftp_set_option|ftp_site|ftp_size|ftp_ssl_connect|ftp_systype|ftruncate|func_get_arg|func_get_args|' + 'func_num_args|function_exists|fwrite|gc_collect_cycles|gc_disable|gc_enable|gc_enabled|gd_info|gearmanclient|gearmanjob|gearmantask|' + 'gearmanworker|geoip_continent_code_by_name|geoip_country_code3_by_name|geoip_country_code_by_name|geoip_country_name_by_name|' + 'geoip_database_info|geoip_db_avail|geoip_db_filename|geoip_db_get_all_info|geoip_id_by_name|geoip_isp_by_name|geoip_org_by_name|' + 'geoip_record_by_name|geoip_region_by_name|geoip_region_name_by_code|geoip_time_zone_by_country_and_region|getMeta|getNamed|getValue|' + 'get_browser|get_called_class|get_cfg_var|get_class|get_class_methods|get_class_vars|get_current_user|get_declared_classes|' + 'get_declared_interfaces|get_declared_traits|get_defined_constants|get_defined_functions|get_defined_vars|get_extension_funcs|get_headers|' + 'get_html_translation_table|get_include_path|get_included_files|get_loaded_extensions|get_magic_quotes_gpc|get_magic_quotes_runtime|' + 'get_meta_tags|get_object_vars|get_parent_class|get_required_files|get_resource_type|getallheaders|getconstant|getconstants|getconstructor|' + 'getcwd|getdate|getdefaultproperties|getdoccomment|getendline|getenv|getextension|getextensionname|getfilename|gethostbyaddr|gethostbyname|' + 'gethostbynamel|gethostname|getimagesize|getinterfacenames|getinterfaces|getlastmod|getmethod|getmethods|getmodifiers|getmxrr|getmygid|' + 'getmyinode|getmypid|getmyuid|getname|getnamespacename|getopt|getparentclass|getproperties|getproperty|getprotobyname|getprotobynumber|' + 'getrandmax|getrusage|getservbyname|getservbyport|getshortname|getstartline|getstaticproperties|getstaticpropertyvalue|gettext|' + 'gettimeofday|gettype|glob|globiterator|gmagick|gmagickdraw|gmagickpixel|gmdate|gmmktime|gmp_abs|gmp_add|gmp_and|gmp_clrbit|gmp_cmp|' + 'gmp_com|gmp_div|gmp_div_q|gmp_div_qr|gmp_div_r|gmp_divexact|gmp_fact|gmp_gcd|gmp_gcdext|gmp_hamdist|gmp_init|gmp_intval|gmp_invert|' + 'gmp_jacobi|gmp_legendre|gmp_mod|gmp_mul|gmp_neg|gmp_nextprime|gmp_or|gmp_perfect_square|gmp_popcount|gmp_pow|gmp_powm|gmp_prob_prime|' + 'gmp_random|gmp_scan0|gmp_scan1|gmp_setbit|gmp_sign|gmp_sqrt|gmp_sqrtrem|gmp_strval|gmp_sub|gmp_testbit|gmp_xor|gmstrftime|' + 'gnupg_adddecryptkey|gnupg_addencryptkey|gnupg_addsignkey|gnupg_cleardecryptkeys|gnupg_clearencryptkeys|gnupg_clearsignkeys|gnupg_decrypt|' + 'gnupg_decryptverify|gnupg_encrypt|gnupg_encryptsign|gnupg_export|gnupg_geterror|gnupg_getprotocol|gnupg_import|gnupg_init|gnupg_keyinfo|' + 'gnupg_setarmor|gnupg_seterrormode|gnupg_setsignmode|gnupg_sign|gnupg_verify|gopher_parsedir|grapheme_extract|grapheme_stripos|' + 'grapheme_stristr|grapheme_strlen|grapheme_strpos|grapheme_strripos|grapheme_strrpos|grapheme_strstr|grapheme_substr|gregoriantojd|' + 'gupnp_context_get_host_ip|gupnp_context_get_port|gupnp_context_get_subscription_timeout|gupnp_context_host_path|gupnp_context_new|' + 'gupnp_context_set_subscription_timeout|gupnp_context_timeout_add|gupnp_context_unhost_path|gupnp_control_point_browse_start|' + 'gupnp_control_point_browse_stop|gupnp_control_point_callback_set|gupnp_control_point_new|gupnp_device_action_callback_set|' + 'gupnp_device_info_get|gupnp_device_info_get_service|gupnp_root_device_get_available|gupnp_root_device_get_relative_location|' + 'gupnp_root_device_new|gupnp_root_device_set_available|gupnp_root_device_start|gupnp_root_device_stop|gupnp_service_action_get|' + 'gupnp_service_action_return|gupnp_service_action_return_error|gupnp_service_action_set|gupnp_service_freeze_notify|gupnp_service_info_get|' + 'gupnp_service_info_get_introspection|gupnp_service_introspection_get_state_variable|gupnp_service_notify|gupnp_service_proxy_action_get|' + 'gupnp_service_proxy_action_set|gupnp_service_proxy_add_notify|gupnp_service_proxy_callback_set|gupnp_service_proxy_get_subscribed|' + 'gupnp_service_proxy_remove_notify|gupnp_service_proxy_set_subscribed|gupnp_service_thaw_notify|gzclose|gzcompress|gzdecode|gzdeflate|' + 'gzencode|gzeof|gzfile|gzgetc|gzgets|gzgetss|gzinflate|gzopen|gzpassthru|gzputs|gzread|gzrewind|gzseek|gztell|gzuncompress|gzwrite|' + 'halt_compiler|haruannotation|haruannotation_setborderstyle|haruannotation_sethighlightmode|haruannotation_seticon|' + 'haruannotation_setopened|harudestination|harudestination_setfit|harudestination_setfitb|harudestination_setfitbh|harudestination_setfitbv|' + 'harudestination_setfith|harudestination_setfitr|harudestination_setfitv|harudestination_setxyz|harudoc|harudoc_addpage|' + 'harudoc_addpagelabel|harudoc_construct|harudoc_createoutline|harudoc_getcurrentencoder|harudoc_getcurrentpage|harudoc_getencoder|' + 'harudoc_getfont|harudoc_getinfoattr|harudoc_getpagelayout|harudoc_getpagemode|harudoc_getstreamsize|harudoc_insertpage|harudoc_loadjpeg|' + 'harudoc_loadpng|harudoc_loadraw|harudoc_loadttc|harudoc_loadttf|harudoc_loadtype1|harudoc_output|harudoc_readfromstream|' + 'harudoc_reseterror|harudoc_resetstream|harudoc_save|harudoc_savetostream|harudoc_setcompressionmode|harudoc_setcurrentencoder|' + 'harudoc_setencryptionmode|harudoc_setinfoattr|harudoc_setinfodateattr|harudoc_setopenaction|harudoc_setpagelayout|harudoc_setpagemode|' + 'harudoc_setpagesconfiguration|harudoc_setpassword|harudoc_setpermission|harudoc_usecnsencodings|harudoc_usecnsfonts|' + 'harudoc_usecntencodings|harudoc_usecntfonts|harudoc_usejpencodings|harudoc_usejpfonts|harudoc_usekrencodings|harudoc_usekrfonts|' + 'haruencoder|haruencoder_getbytetype|haruencoder_gettype|haruencoder_getunicode|haruencoder_getwritingmode|haruexception|harufont|' + 'harufont_getascent|harufont_getcapheight|harufont_getdescent|harufont_getencodingname|harufont_getfontname|harufont_gettextwidth|' + 'harufont_getunicodewidth|harufont_getxheight|harufont_measuretext|haruimage|haruimage_getbitspercomponent|haruimage_getcolorspace|' + 'haruimage_getheight|haruimage_getsize|haruimage_getwidth|haruimage_setcolormask|haruimage_setmaskimage|haruoutline|' + 'haruoutline_setdestination|haruoutline_setopened|harupage|harupage_arc|harupage_begintext|harupage_circle|harupage_closepath|' + 'harupage_concat|harupage_createdestination|harupage_createlinkannotation|harupage_createtextannotation|harupage_createurlannotation|' + 'harupage_curveto|harupage_curveto2|harupage_curveto3|harupage_drawimage|harupage_ellipse|harupage_endpath|harupage_endtext|' + 'harupage_eofill|harupage_eofillstroke|harupage_fill|harupage_fillstroke|harupage_getcharspace|harupage_getcmykfill|harupage_getcmykstroke|' + 'harupage_getcurrentfont|harupage_getcurrentfontsize|harupage_getcurrentpos|harupage_getcurrenttextpos|harupage_getdash|' + 'harupage_getfillingcolorspace|harupage_getflatness|harupage_getgmode|harupage_getgrayfill|harupage_getgraystroke|harupage_getheight|' + 'harupage_gethorizontalscaling|harupage_getlinecap|harupage_getlinejoin|harupage_getlinewidth|harupage_getmiterlimit|harupage_getrgbfill|' + 'harupage_getrgbstroke|harupage_getstrokingcolorspace|harupage_gettextleading|harupage_gettextmatrix|harupage_gettextrenderingmode|' + 'harupage_gettextrise|harupage_gettextwidth|harupage_gettransmatrix|harupage_getwidth|harupage_getwordspace|harupage_lineto|' + 'harupage_measuretext|harupage_movetextpos|harupage_moveto|harupage_movetonextline|harupage_rectangle|harupage_setcharspace|' + 'harupage_setcmykfill|harupage_setcmykstroke|harupage_setdash|harupage_setflatness|harupage_setfontandsize|harupage_setgrayfill|' + 'harupage_setgraystroke|harupage_setheight|harupage_sethorizontalscaling|harupage_setlinecap|harupage_setlinejoin|harupage_setlinewidth|' + 'harupage_setmiterlimit|harupage_setrgbfill|harupage_setrgbstroke|harupage_setrotate|harupage_setsize|harupage_setslideshow|' + 'harupage_settextleading|harupage_settextmatrix|harupage_settextrenderingmode|harupage_settextrise|harupage_setwidth|harupage_setwordspace|' + 'harupage_showtext|harupage_showtextnextline|harupage_stroke|harupage_textout|harupage_textrect|hasconstant|hash|hash_algos|hash_copy|' + 'hash_file|hash_final|hash_hmac|hash_hmac_file|hash_init|hash_update|hash_update_file|hash_update_stream|hasmethod|hasproperty|header|' + 'header_register_callback|header_remove|headers_list|headers_sent|hebrev|hebrevc|hex2bin|hexdec|highlight_file|highlight_string|' + 'html_entity_decode|htmlentities|htmlspecialchars|htmlspecialchars_decode|http_build_cookie|http_build_query|http_build_str|http_build_url|' + 'http_cache_etag|http_cache_last_modified|http_chunked_decode|http_date|http_deflate|http_get|http_get_request_body|' + 'http_get_request_body_stream|http_get_request_headers|http_head|http_inflate|http_match_etag|http_match_modified|' + 'http_match_request_header|http_negotiate_charset|http_negotiate_content_type|http_negotiate_language|http_parse_cookie|http_parse_headers|' + 'http_parse_message|http_parse_params|http_persistent_handles_clean|http_persistent_handles_count|http_persistent_handles_ident|' + 'http_post_data|http_post_fields|http_put_data|http_put_file|http_put_stream|http_redirect|http_request|http_request_body_encode|' + 'http_request_method_exists|http_request_method_name|http_request_method_register|http_request_method_unregister|http_response_code|' + 'http_send_content_disposition|http_send_content_type|http_send_data|http_send_file|http_send_last_modified|http_send_status|' + 'http_send_stream|http_support|http_throttle|httpdeflatestream|httpdeflatestream_construct|httpdeflatestream_factory|' + 'httpdeflatestream_finish|httpdeflatestream_flush|httpdeflatestream_update|httpinflatestream|httpinflatestream_construct|' + 'httpinflatestream_factory|httpinflatestream_finish|httpinflatestream_flush|httpinflatestream_update|httpmessage|httpmessage_addheaders|' + 'httpmessage_construct|httpmessage_detach|httpmessage_factory|httpmessage_fromenv|httpmessage_fromstring|httpmessage_getbody|' + 'httpmessage_getheader|httpmessage_getheaders|httpmessage_gethttpversion|httpmessage_getparentmessage|httpmessage_getrequestmethod|' + 'httpmessage_getrequesturl|httpmessage_getresponsecode|httpmessage_getresponsestatus|httpmessage_gettype|httpmessage_guesscontenttype|' + 'httpmessage_prepend|httpmessage_reverse|httpmessage_send|httpmessage_setbody|httpmessage_setheaders|httpmessage_sethttpversion|' + 'httpmessage_setrequestmethod|httpmessage_setrequesturl|httpmessage_setresponsecode|httpmessage_setresponsestatus|httpmessage_settype|' + 'httpmessage_tomessagetypeobject|httpmessage_tostring|httpquerystring|httpquerystring_construct|httpquerystring_get|httpquerystring_mod|' + 'httpquerystring_set|httpquerystring_singleton|httpquerystring_toarray|httpquerystring_tostring|httpquerystring_xlate|httprequest|' + 'httprequest_addcookies|httprequest_addheaders|httprequest_addpostfields|httprequest_addpostfile|httprequest_addputdata|' + 'httprequest_addquerydata|httprequest_addrawpostdata|httprequest_addssloptions|httprequest_clearhistory|httprequest_construct|' + 'httprequest_enablecookies|httprequest_getcontenttype|httprequest_getcookies|httprequest_getheaders|httprequest_gethistory|' + 'httprequest_getmethod|httprequest_getoptions|httprequest_getpostfields|httprequest_getpostfiles|httprequest_getputdata|' + 'httprequest_getputfile|httprequest_getquerydata|httprequest_getrawpostdata|httprequest_getrawrequestmessage|' + 'httprequest_getrawresponsemessage|httprequest_getrequestmessage|httprequest_getresponsebody|httprequest_getresponsecode|' + 'httprequest_getresponsecookies|httprequest_getresponsedata|httprequest_getresponseheader|httprequest_getresponseinfo|' + 'httprequest_getresponsemessage|httprequest_getresponsestatus|httprequest_getssloptions|httprequest_geturl|httprequest_resetcookies|' + 'httprequest_send|httprequest_setcontenttype|httprequest_setcookies|httprequest_setheaders|httprequest_setmethod|httprequest_setoptions|' + 'httprequest_setpostfields|httprequest_setpostfiles|httprequest_setputdata|httprequest_setputfile|httprequest_setquerydata|' + 'httprequest_setrawpostdata|httprequest_setssloptions|httprequest_seturl|httprequestpool|httprequestpool_attach|httprequestpool_construct|' + 'httprequestpool_destruct|httprequestpool_detach|httprequestpool_getattachedrequests|httprequestpool_getfinishedrequests|' + 'httprequestpool_reset|httprequestpool_send|httprequestpool_socketperform|httprequestpool_socketselect|httpresponse|httpresponse_capture|' + 'httpresponse_getbuffersize|httpresponse_getcache|httpresponse_getcachecontrol|httpresponse_getcontentdisposition|' + 'httpresponse_getcontenttype|httpresponse_getdata|httpresponse_getetag|httpresponse_getfile|httpresponse_getgzip|httpresponse_getheader|' + 'httpresponse_getlastmodified|httpresponse_getrequestbody|httpresponse_getrequestbodystream|httpresponse_getrequestheaders|' + 'httpresponse_getstream|httpresponse_getthrottledelay|httpresponse_guesscontenttype|httpresponse_redirect|httpresponse_send|' + 'httpresponse_setbuffersize|httpresponse_setcache|httpresponse_setcachecontrol|httpresponse_setcontentdisposition|' + 'httpresponse_setcontenttype|httpresponse_setdata|httpresponse_setetag|httpresponse_setfile|httpresponse_setgzip|httpresponse_setheader|' + 'httpresponse_setlastmodified|httpresponse_setstream|httpresponse_setthrottledelay|httpresponse_status|hw_array2objrec|hw_changeobject|' + 'hw_children|hw_childrenobj|hw_close|hw_connect|hw_connection_info|hw_cp|hw_deleteobject|hw_docbyanchor|hw_docbyanchorobj|' + 'hw_document_attributes|hw_document_bodytag|hw_document_content|hw_document_setcontent|hw_document_size|hw_dummy|hw_edittext|hw_error|' + 'hw_errormsg|hw_free_document|hw_getanchors|hw_getanchorsobj|hw_getandlock|hw_getchildcoll|hw_getchildcollobj|hw_getchilddoccoll|' + 'hw_getchilddoccollobj|hw_getobject|hw_getobjectbyquery|hw_getobjectbyquerycoll|hw_getobjectbyquerycollobj|hw_getobjectbyqueryobj|' + 'hw_getparents|hw_getparentsobj|hw_getrellink|hw_getremote|hw_getremotechildren|hw_getsrcbydestobj|hw_gettext|hw_getusername|hw_identify|' + 'hw_incollections|hw_info|hw_inscoll|hw_insdoc|hw_insertanchors|hw_insertdocument|hw_insertobject|hw_mapid|hw_modifyobject|hw_mv|' + 'hw_new_document|hw_objrec2array|hw_output_document|hw_pconnect|hw_pipedocument|hw_root|hw_setlinkroot|hw_stat|hw_unlock|hw_who|' + 'hwapi_attribute|hwapi_attribute_key|hwapi_attribute_langdepvalue|hwapi_attribute_value|hwapi_attribute_values|hwapi_checkin|' + 'hwapi_checkout|hwapi_children|hwapi_content|hwapi_content_mimetype|hwapi_content_read|hwapi_copy|hwapi_dbstat|hwapi_dcstat|' + 'hwapi_dstanchors|hwapi_dstofsrcanchor|hwapi_error_count|hwapi_error_reason|hwapi_find|hwapi_ftstat|hwapi_hgcsp|hwapi_hwstat|' + 'hwapi_identify|hwapi_info|hwapi_insert|hwapi_insertanchor|hwapi_insertcollection|hwapi_insertdocument|hwapi_link|hwapi_lock|hwapi_move|' + 'hwapi_new_content|hwapi_object|hwapi_object_assign|hwapi_object_attreditable|hwapi_object_count|hwapi_object_insert|hwapi_object_new|' + 'hwapi_object_remove|hwapi_object_title|hwapi_object_value|hwapi_objectbyanchor|hwapi_parents|hwapi_reason_description|hwapi_reason_type|' + 'hwapi_remove|hwapi_replace|hwapi_setcommittedversion|hwapi_srcanchors|hwapi_srcsofdst|hwapi_unlock|hwapi_user|hwapi_userlist|hypot|' + 'ibase_add_user|ibase_affected_rows|ibase_backup|ibase_blob_add|ibase_blob_cancel|ibase_blob_close|ibase_blob_create|ibase_blob_echo|' + 'ibase_blob_get|ibase_blob_import|ibase_blob_info|ibase_blob_open|ibase_close|ibase_commit|ibase_commit_ret|ibase_connect|ibase_db_info|' + 'ibase_delete_user|ibase_drop_db|ibase_errcode|ibase_errmsg|ibase_execute|ibase_fetch_assoc|ibase_fetch_object|ibase_fetch_row|' + 'ibase_field_info|ibase_free_event_handler|ibase_free_query|ibase_free_result|ibase_gen_id|ibase_maintain_db|ibase_modify_user|' + 'ibase_name_result|ibase_num_fields|ibase_num_params|ibase_param_info|ibase_pconnect|ibase_prepare|ibase_query|ibase_restore|' + 'ibase_rollback|ibase_rollback_ret|ibase_server_info|ibase_service_attach|ibase_service_detach|ibase_set_event_handler|ibase_timefmt|' + 'ibase_trans|ibase_wait_event|iconv|iconv_get_encoding|iconv_mime_decode|iconv_mime_decode_headers|iconv_mime_encode|iconv_set_encoding|' + 'iconv_strlen|iconv_strpos|iconv_strrpos|iconv_substr|id3_get_frame_long_name|id3_get_frame_short_name|id3_get_genre_id|id3_get_genre_list|' + 'id3_get_genre_name|id3_get_tag|id3_get_version|id3_remove_tag|id3_set_tag|id3v2attachedpictureframe|id3v2frame|id3v2tag|idate|' + 'idn_to_ascii|idn_to_unicode|idn_to_utf8|ifx_affected_rows|ifx_blobinfile_mode|ifx_byteasvarchar|ifx_close|ifx_connect|ifx_copy_blob|' + 'ifx_create_blob|ifx_create_char|ifx_do|ifx_error|ifx_errormsg|ifx_fetch_row|ifx_fieldproperties|ifx_fieldtypes|ifx_free_blob|' + 'ifx_free_char|ifx_free_result|ifx_get_blob|ifx_get_char|ifx_getsqlca|ifx_htmltbl_result|ifx_nullformat|ifx_num_fields|ifx_num_rows|' + 'ifx_pconnect|ifx_prepare|ifx_query|ifx_textasvarchar|ifx_update_blob|ifx_update_char|ifxus_close_slob|ifxus_create_slob|ifxus_free_slob|' + 'ifxus_open_slob|ifxus_read_slob|ifxus_seek_slob|ifxus_tell_slob|ifxus_write_slob|ignore_user_abort|iis_add_server|iis_get_dir_security|' + 'iis_get_script_map|iis_get_server_by_comment|iis_get_server_by_path|iis_get_server_rights|iis_get_service_state|iis_remove_server|' + 'iis_set_app_settings|iis_set_dir_security|iis_set_script_map|iis_set_server_rights|iis_start_server|iis_start_service|iis_stop_server|' + 'iis_stop_service|image2wbmp|image_type_to_extension|image_type_to_mime_type|imagealphablending|imageantialias|imagearc|imagechar|' + 'imagecharup|imagecolorallocate|imagecolorallocatealpha|imagecolorat|imagecolorclosest|imagecolorclosestalpha|imagecolorclosesthwb|' + 'imagecolordeallocate|imagecolorexact|imagecolorexactalpha|imagecolormatch|imagecolorresolve|imagecolorresolvealpha|imagecolorset|' + 'imagecolorsforindex|imagecolorstotal|imagecolortransparent|imageconvolution|imagecopy|imagecopymerge|imagecopymergegray|' + 'imagecopyresampled|imagecopyresized|imagecreate|imagecreatefromgd|imagecreatefromgd2|imagecreatefromgd2part|imagecreatefromgif|' + 'imagecreatefromjpeg|imagecreatefrompng|imagecreatefromstring|imagecreatefromwbmp|imagecreatefromxbm|imagecreatefromxpm|' + 'imagecreatetruecolor|imagedashedline|imagedestroy|imageellipse|imagefill|imagefilledarc|imagefilledellipse|imagefilledpolygon|' + 'imagefilledrectangle|imagefilltoborder|imagefilter|imagefontheight|imagefontwidth|imageftbbox|imagefttext|imagegammacorrect|imagegd|' + 'imagegd2|imagegif|imagegrabscreen|imagegrabwindow|imageinterlace|imageistruecolor|imagejpeg|imagelayereffect|imageline|imageloadfont|' + 'imagepalettecopy|imagepng|imagepolygon|imagepsbbox|imagepsencodefont|imagepsextendfont|imagepsfreefont|imagepsloadfont|imagepsslantfont|' + 'imagepstext|imagerectangle|imagerotate|imagesavealpha|imagesetbrush|imagesetpixel|imagesetstyle|imagesetthickness|imagesettile|' + 'imagestring|imagestringup|imagesx|imagesy|imagetruecolortopalette|imagettfbbox|imagettftext|imagetypes|imagewbmp|imagexbm|imagick|' + 'imagick_adaptiveblurimage|imagick_adaptiveresizeimage|imagick_adaptivesharpenimage|imagick_adaptivethresholdimage|imagick_addimage|' + 'imagick_addnoiseimage|imagick_affinetransformimage|imagick_animateimages|imagick_annotateimage|imagick_appendimages|imagick_averageimages|' + 'imagick_blackthresholdimage|imagick_blurimage|imagick_borderimage|imagick_charcoalimage|imagick_chopimage|imagick_clear|imagick_clipimage|' + 'imagick_clippathimage|imagick_clone|imagick_clutimage|imagick_coalesceimages|imagick_colorfloodfillimage|imagick_colorizeimage|' + 'imagick_combineimages|imagick_commentimage|imagick_compareimagechannels|imagick_compareimagelayers|imagick_compareimages|' + 'imagick_compositeimage|imagick_construct|imagick_contrastimage|imagick_contraststretchimage|imagick_convolveimage|imagick_cropimage|' + 'imagick_cropthumbnailimage|imagick_current|imagick_cyclecolormapimage|imagick_decipherimage|imagick_deconstructimages|' + 'imagick_deleteimageartifact|imagick_despeckleimage|imagick_destroy|imagick_displayimage|imagick_displayimages|imagick_distortimage|' + 'imagick_drawimage|imagick_edgeimage|imagick_embossimage|imagick_encipherimage|imagick_enhanceimage|imagick_equalizeimage|' + 'imagick_evaluateimage|imagick_extentimage|imagick_flattenimages|imagick_flipimage|imagick_floodfillpaintimage|imagick_flopimage|' + 'imagick_frameimage|imagick_fximage|imagick_gammaimage|imagick_gaussianblurimage|imagick_getcolorspace|imagick_getcompression|' + 'imagick_getcompressionquality|imagick_getcopyright|imagick_getfilename|imagick_getfont|imagick_getformat|imagick_getgravity|' + 'imagick_gethomeurl|imagick_getimage|imagick_getimagealphachannel|imagick_getimageartifact|imagick_getimagebackgroundcolor|' + 'imagick_getimageblob|imagick_getimageblueprimary|imagick_getimagebordercolor|imagick_getimagechanneldepth|' + 'imagick_getimagechanneldistortion|imagick_getimagechanneldistortions|imagick_getimagechannelextrema|imagick_getimagechannelmean|' + 'imagick_getimagechannelrange|imagick_getimagechannelstatistics|imagick_getimageclipmask|imagick_getimagecolormapcolor|' + 'imagick_getimagecolors|imagick_getimagecolorspace|imagick_getimagecompose|imagick_getimagecompression|imagick_getimagecompressionquality|' + 'imagick_getimagedelay|imagick_getimagedepth|imagick_getimagedispose|imagick_getimagedistortion|imagick_getimageextrema|' + 'imagick_getimagefilename|imagick_getimageformat|imagick_getimagegamma|imagick_getimagegeometry|imagick_getimagegravity|' + 'imagick_getimagegreenprimary|imagick_getimageheight|imagick_getimagehistogram|imagick_getimageindex|imagick_getimageinterlacescheme|' + 'imagick_getimageinterpolatemethod|imagick_getimageiterations|imagick_getimagelength|imagick_getimagemagicklicense|imagick_getimagematte|' + 'imagick_getimagemattecolor|imagick_getimageorientation|imagick_getimagepage|imagick_getimagepixelcolor|imagick_getimageprofile|' + 'imagick_getimageprofiles|imagick_getimageproperties|imagick_getimageproperty|imagick_getimageredprimary|imagick_getimageregion|' + 'imagick_getimagerenderingintent|imagick_getimageresolution|imagick_getimagesblob|imagick_getimagescene|imagick_getimagesignature|' + 'imagick_getimagesize|imagick_getimagetickspersecond|imagick_getimagetotalinkdensity|imagick_getimagetype|imagick_getimageunits|' + 'imagick_getimagevirtualpixelmethod|imagick_getimagewhitepoint|imagick_getimagewidth|imagick_getinterlacescheme|imagick_getiteratorindex|' + 'imagick_getnumberimages|imagick_getoption|imagick_getpackagename|imagick_getpage|imagick_getpixeliterator|imagick_getpixelregioniterator|' + 'imagick_getpointsize|imagick_getquantumdepth|imagick_getquantumrange|imagick_getreleasedate|imagick_getresource|imagick_getresourcelimit|' + 'imagick_getsamplingfactors|imagick_getsize|imagick_getsizeoffset|imagick_getversion|imagick_hasnextimage|imagick_haspreviousimage|' + 'imagick_identifyimage|imagick_implodeimage|imagick_labelimage|imagick_levelimage|imagick_linearstretchimage|imagick_liquidrescaleimage|' + 'imagick_magnifyimage|imagick_mapimage|imagick_mattefloodfillimage|imagick_medianfilterimage|imagick_mergeimagelayers|imagick_minifyimage|' + 'imagick_modulateimage|imagick_montageimage|imagick_morphimages|imagick_mosaicimages|imagick_motionblurimage|imagick_negateimage|' + 'imagick_newimage|imagick_newpseudoimage|imagick_nextimage|imagick_normalizeimage|imagick_oilpaintimage|imagick_opaquepaintimage|' + 'imagick_optimizeimagelayers|imagick_orderedposterizeimage|imagick_paintfloodfillimage|imagick_paintopaqueimage|' + 'imagick_painttransparentimage|imagick_pingimage|imagick_pingimageblob|imagick_pingimagefile|imagick_polaroidimage|imagick_posterizeimage|' + 'imagick_previewimages|imagick_previousimage|imagick_profileimage|imagick_quantizeimage|imagick_quantizeimages|imagick_queryfontmetrics|' + 'imagick_queryfonts|imagick_queryformats|imagick_radialblurimage|imagick_raiseimage|imagick_randomthresholdimage|imagick_readimage|' + 'imagick_readimageblob|imagick_readimagefile|imagick_recolorimage|imagick_reducenoiseimage|imagick_removeimage|imagick_removeimageprofile|' + 'imagick_render|imagick_resampleimage|imagick_resetimagepage|imagick_resizeimage|imagick_rollimage|imagick_rotateimage|' + 'imagick_roundcorners|imagick_sampleimage|imagick_scaleimage|imagick_separateimagechannel|imagick_sepiatoneimage|' + 'imagick_setbackgroundcolor|imagick_setcolorspace|imagick_setcompression|imagick_setcompressionquality|imagick_setfilename|' + 'imagick_setfirstiterator|imagick_setfont|imagick_setformat|imagick_setgravity|imagick_setimage|imagick_setimagealphachannel|' + 'imagick_setimageartifact|imagick_setimagebackgroundcolor|imagick_setimagebias|imagick_setimageblueprimary|imagick_setimagebordercolor|' + 'imagick_setimagechanneldepth|imagick_setimageclipmask|imagick_setimagecolormapcolor|imagick_setimagecolorspace|imagick_setimagecompose|' + 'imagick_setimagecompression|imagick_setimagecompressionquality|imagick_setimagedelay|imagick_setimagedepth|imagick_setimagedispose|' + 'imagick_setimageextent|imagick_setimagefilename|imagick_setimageformat|imagick_setimagegamma|imagick_setimagegravity|' + 'imagick_setimagegreenprimary|imagick_setimageindex|imagick_setimageinterlacescheme|imagick_setimageinterpolatemethod|' + 'imagick_setimageiterations|imagick_setimagematte|imagick_setimagemattecolor|imagick_setimageopacity|imagick_setimageorientation|' + 'imagick_setimagepage|imagick_setimageprofile|imagick_setimageproperty|imagick_setimageredprimary|imagick_setimagerenderingintent|' + 'imagick_setimageresolution|imagick_setimagescene|imagick_setimagetickspersecond|imagick_setimagetype|imagick_setimageunits|' + 'imagick_setimagevirtualpixelmethod|imagick_setimagewhitepoint|imagick_setinterlacescheme|imagick_setiteratorindex|imagick_setlastiterator|' + 'imagick_setoption|imagick_setpage|imagick_setpointsize|imagick_setresolution|imagick_setresourcelimit|imagick_setsamplingfactors|' + 'imagick_setsize|imagick_setsizeoffset|imagick_settype|imagick_shadeimage|imagick_shadowimage|imagick_sharpenimage|imagick_shaveimage|' + 'imagick_shearimage|imagick_sigmoidalcontrastimage|imagick_sketchimage|imagick_solarizeimage|imagick_spliceimage|imagick_spreadimage|' + 'imagick_steganoimage|imagick_stereoimage|imagick_stripimage|imagick_swirlimage|imagick_textureimage|imagick_thresholdimage|' + 'imagick_thumbnailimage|imagick_tintimage|imagick_transformimage|imagick_transparentpaintimage|imagick_transposeimage|' + 'imagick_transverseimage|imagick_trimimage|imagick_uniqueimagecolors|imagick_unsharpmaskimage|imagick_valid|imagick_vignetteimage|' + 'imagick_waveimage|imagick_whitethresholdimage|imagick_writeimage|imagick_writeimagefile|imagick_writeimages|imagick_writeimagesfile|' + 'imagickdraw|imagickdraw_affine|imagickdraw_annotation|imagickdraw_arc|imagickdraw_bezier|imagickdraw_circle|imagickdraw_clear|' + 'imagickdraw_clone|imagickdraw_color|imagickdraw_comment|imagickdraw_composite|imagickdraw_construct|imagickdraw_destroy|' + 'imagickdraw_ellipse|imagickdraw_getclippath|imagickdraw_getcliprule|imagickdraw_getclipunits|imagickdraw_getfillcolor|' + 'imagickdraw_getfillopacity|imagickdraw_getfillrule|imagickdraw_getfont|imagickdraw_getfontfamily|imagickdraw_getfontsize|' + 'imagickdraw_getfontstyle|imagickdraw_getfontweight|imagickdraw_getgravity|imagickdraw_getstrokeantialias|imagickdraw_getstrokecolor|' + 'imagickdraw_getstrokedasharray|imagickdraw_getstrokedashoffset|imagickdraw_getstrokelinecap|imagickdraw_getstrokelinejoin|' + 'imagickdraw_getstrokemiterlimit|imagickdraw_getstrokeopacity|imagickdraw_getstrokewidth|imagickdraw_gettextalignment|' + 'imagickdraw_gettextantialias|imagickdraw_gettextdecoration|imagickdraw_gettextencoding|imagickdraw_gettextundercolor|' + 'imagickdraw_getvectorgraphics|imagickdraw_line|imagickdraw_matte|imagickdraw_pathclose|imagickdraw_pathcurvetoabsolute|' + 'imagickdraw_pathcurvetoquadraticbezierabsolute|imagickdraw_pathcurvetoquadraticbezierrelative|' + 'imagickdraw_pathcurvetoquadraticbeziersmoothabsolute|imagickdraw_pathcurvetoquadraticbeziersmoothrelative|imagickdraw_pathcurvetorelative|' + 'imagickdraw_pathcurvetosmoothabsolute|imagickdraw_pathcurvetosmoothrelative|imagickdraw_pathellipticarcabsolute|' + 'imagickdraw_pathellipticarcrelative|imagickdraw_pathfinish|imagickdraw_pathlinetoabsolute|imagickdraw_pathlinetohorizontalabsolute|' + 'imagickdraw_pathlinetohorizontalrelative|imagickdraw_pathlinetorelative|imagickdraw_pathlinetoverticalabsolute|' + 'imagickdraw_pathlinetoverticalrelative|imagickdraw_pathmovetoabsolute|imagickdraw_pathmovetorelative|imagickdraw_pathstart|' + 'imagickdraw_point|imagickdraw_polygon|imagickdraw_polyline|imagickdraw_pop|imagickdraw_popclippath|imagickdraw_popdefs|' + 'imagickdraw_poppattern|imagickdraw_push|imagickdraw_pushclippath|imagickdraw_pushdefs|imagickdraw_pushpattern|imagickdraw_rectangle|' + 'imagickdraw_render|imagickdraw_rotate|imagickdraw_roundrectangle|imagickdraw_scale|imagickdraw_setclippath|imagickdraw_setcliprule|' + 'imagickdraw_setclipunits|imagickdraw_setfillalpha|imagickdraw_setfillcolor|imagickdraw_setfillopacity|imagickdraw_setfillpatternurl|' + 'imagickdraw_setfillrule|imagickdraw_setfont|imagickdraw_setfontfamily|imagickdraw_setfontsize|imagickdraw_setfontstretch|' + 'imagickdraw_setfontstyle|imagickdraw_setfontweight|imagickdraw_setgravity|imagickdraw_setstrokealpha|imagickdraw_setstrokeantialias|' + 'imagickdraw_setstrokecolor|imagickdraw_setstrokedasharray|imagickdraw_setstrokedashoffset|imagickdraw_setstrokelinecap|' + 'imagickdraw_setstrokelinejoin|imagickdraw_setstrokemiterlimit|imagickdraw_setstrokeopacity|imagickdraw_setstrokepatternurl|' + 'imagickdraw_setstrokewidth|imagickdraw_settextalignment|imagickdraw_settextantialias|imagickdraw_settextdecoration|' + 'imagickdraw_settextencoding|imagickdraw_settextundercolor|imagickdraw_setvectorgraphics|imagickdraw_setviewbox|imagickdraw_skewx|' + 'imagickdraw_skewy|imagickdraw_translate|imagickpixel|imagickpixel_clear|imagickpixel_construct|imagickpixel_destroy|imagickpixel_getcolor|' + 'imagickpixel_getcolorasstring|imagickpixel_getcolorcount|imagickpixel_getcolorvalue|imagickpixel_gethsl|imagickpixel_issimilar|' + 'imagickpixel_setcolor|imagickpixel_setcolorvalue|imagickpixel_sethsl|imagickpixeliterator|imagickpixeliterator_clear|' + 'imagickpixeliterator_construct|imagickpixeliterator_destroy|imagickpixeliterator_getcurrentiteratorrow|' + 'imagickpixeliterator_getiteratorrow|imagickpixeliterator_getnextiteratorrow|imagickpixeliterator_getpreviousiteratorrow|' + 'imagickpixeliterator_newpixeliterator|imagickpixeliterator_newpixelregioniterator|imagickpixeliterator_resetiterator|' + 'imagickpixeliterator_setiteratorfirstrow|imagickpixeliterator_setiteratorlastrow|imagickpixeliterator_setiteratorrow|' + 'imagickpixeliterator_synciterator|imap_8bit|imap_alerts|imap_append|imap_base64|imap_binary|imap_body|imap_bodystruct|imap_check|' + 'imap_clearflag_full|imap_close|imap_create|imap_createmailbox|imap_delete|imap_deletemailbox|imap_errors|imap_expunge|imap_fetch_overview|' + 'imap_fetchbody|imap_fetchheader|imap_fetchmime|imap_fetchstructure|imap_fetchtext|imap_gc|imap_get_quota|imap_get_quotaroot|imap_getacl|' + 'imap_getmailboxes|imap_getsubscribed|imap_header|imap_headerinfo|imap_headers|imap_last_error|imap_list|imap_listmailbox|imap_listscan|' + 'imap_listsubscribed|imap_lsub|imap_mail|imap_mail_compose|imap_mail_copy|imap_mail_move|imap_mailboxmsginfo|imap_mime_header_decode|' + 'imap_msgno|imap_num_msg|imap_num_recent|imap_open|imap_ping|imap_qprint|imap_rename|imap_renamemailbox|imap_reopen|' + 'imap_rfc822_parse_adrlist|imap_rfc822_parse_headers|imap_rfc822_write_address|imap_savebody|imap_scan|imap_scanmailbox|imap_search|' + 'imap_set_quota|imap_setacl|imap_setflag_full|imap_sort|imap_status|imap_subscribe|imap_thread|imap_timeout|imap_uid|imap_undelete|' + 'imap_unsubscribe|imap_utf7_decode|imap_utf7_encode|imap_utf8|implementsinterface|implode|import_request_variables|in_array|include|' + 'include_once|inclued_get_data|inet_ntop|inet_pton|infiniteiterator|ingres_autocommit|ingres_autocommit_state|ingres_charset|ingres_close|' + 'ingres_commit|ingres_connect|ingres_cursor|ingres_errno|ingres_error|ingres_errsqlstate|ingres_escape_string|ingres_execute|' + 'ingres_fetch_array|ingres_fetch_assoc|ingres_fetch_object|ingres_fetch_proc_return|ingres_fetch_row|ingres_field_length|ingres_field_name|' + 'ingres_field_nullable|ingres_field_precision|ingres_field_scale|ingres_field_type|ingres_free_result|ingres_next_error|ingres_num_fields|' + 'ingres_num_rows|ingres_pconnect|ingres_prepare|ingres_query|ingres_result_seek|ingres_rollback|ingres_set_environment|' + 'ingres_unbuffered_query|ini_alter|ini_get|ini_get_all|ini_restore|ini_set|innamespace|inotify_add_watch|inotify_init|inotify_queue_len|' + 'inotify_read|inotify_rm_watch|interface_exists|intl_error_name|intl_get_error_code|intl_get_error_message|intl_is_failure|' + 'intldateformatter|intval|invalidargumentexception|invoke|invokeargs|ip2long|iptcembed|iptcparse|is_a|is_array|is_bool|is_callable|is_dir|' + 'is_double|is_executable|is_file|is_finite|is_float|is_infinite|is_int|is_integer|is_link|is_long|is_nan|is_null|is_numeric|is_object|' + 'is_readable|is_real|is_resource|is_scalar|is_soap_fault|is_string|is_subclass_of|is_uploaded_file|is_writable|is_writeable|isabstract|' + 'iscloneable|isdisabled|isfinal|isinstance|isinstantiable|isinterface|isinternal|isiterateable|isset|issubclassof|isuserdefined|iterator|' + 'iterator_apply|iterator_count|iterator_to_array|iteratoraggregate|iteratoriterator|java_last_exception_clear|java_last_exception_get|' + 'jddayofweek|jdmonthname|jdtofrench|jdtogregorian|jdtojewish|jdtojulian|jdtounix|jewishtojd|join|jpeg2wbmp|json_decode|json_encode|' + 'json_last_error|jsonserializable|judy|judy_type|judy_version|juliantojd|kadm5_chpass_principal|kadm5_create_principal|' + 'kadm5_delete_principal|kadm5_destroy|kadm5_flush|kadm5_get_policies|kadm5_get_principal|kadm5_get_principals|kadm5_init_with_password|' + 'kadm5_modify_principal|key|krsort|ksort|lcfirst|lcg_value|lchgrp|lchown|ldap_8859_to_t61|ldap_add|ldap_bind|ldap_close|ldap_compare|' + 'ldap_connect|ldap_count_entries|ldap_delete|ldap_dn2ufn|ldap_err2str|ldap_errno|ldap_error|ldap_explode_dn|ldap_first_attribute|' + 'ldap_first_entry|ldap_first_reference|ldap_free_result|ldap_get_attributes|ldap_get_dn|ldap_get_entries|ldap_get_option|ldap_get_values|' + 'ldap_get_values_len|ldap_list|ldap_mod_add|ldap_mod_del|ldap_mod_replace|ldap_modify|ldap_next_attribute|ldap_next_entry|' + 'ldap_next_reference|ldap_parse_reference|ldap_parse_result|ldap_read|ldap_rename|ldap_sasl_bind|ldap_search|ldap_set_option|' + 'ldap_set_rebind_proc|ldap_sort|ldap_start_tls|ldap_t61_to_8859|ldap_unbind|lengthexception|levenshtein|libxml_clear_errors|' + 'libxml_disable_entity_loader|libxml_get_errors|libxml_get_last_error|libxml_set_streams_context|libxml_use_internal_errors|libxmlerror|' + 'limititerator|link|linkinfo|list|locale|localeconv|localtime|log|log10|log1p|logicexception|long2ip|lstat|ltrim|lzf_compress|' + 'lzf_decompress|lzf_optimized_for|m_checkstatus|m_completeauthorizations|m_connect|m_connectionerror|m_deletetrans|m_destroyconn|' + 'm_destroyengine|m_getcell|m_getcellbynum|m_getcommadelimited|m_getheader|m_initconn|m_initengine|m_iscommadelimited|m_maxconntimeout|' + 'm_monitor|m_numcolumns|m_numrows|m_parsecommadelimited|m_responsekeys|m_responseparam|m_returnstatus|m_setblocking|m_setdropfile|m_setip|' + 'm_setssl|m_setssl_cafile|m_setssl_files|m_settimeout|m_sslcert_gen_hash|m_transactionssent|m_transinqueue|m_transkeyval|m_transnew|' + 'm_transsend|m_uwait|m_validateidentifier|m_verifyconnection|m_verifysslcert|magic_quotes_runtime|mail|' + 'mailparse_determine_best_xfer_encoding|mailparse_msg_create|mailparse_msg_extract_part|mailparse_msg_extract_part_file|' + 'mailparse_msg_extract_whole_part_file|mailparse_msg_free|mailparse_msg_get_part|mailparse_msg_get_part_data|mailparse_msg_get_structure|' + 'mailparse_msg_parse|mailparse_msg_parse_file|mailparse_rfc822_parse_addresses|mailparse_stream_encode|mailparse_uudecode_all|main|max|' + 'maxdb_affected_rows|maxdb_autocommit|maxdb_bind_param|maxdb_bind_result|maxdb_change_user|maxdb_character_set_name|maxdb_client_encoding|' + 'maxdb_close|maxdb_close_long_data|maxdb_commit|maxdb_connect|maxdb_connect_errno|maxdb_connect_error|maxdb_data_seek|maxdb_debug|' + 'maxdb_disable_reads_from_master|maxdb_disable_rpl_parse|maxdb_dump_debug_info|maxdb_embedded_connect|maxdb_enable_reads_from_master|' + 'maxdb_enable_rpl_parse|maxdb_errno|maxdb_error|maxdb_escape_string|maxdb_execute|maxdb_fetch|maxdb_fetch_array|maxdb_fetch_assoc|' + 'maxdb_fetch_field|maxdb_fetch_field_direct|maxdb_fetch_fields|maxdb_fetch_lengths|maxdb_fetch_object|maxdb_fetch_row|maxdb_field_count|' + 'maxdb_field_seek|maxdb_field_tell|maxdb_free_result|maxdb_get_client_info|maxdb_get_client_version|maxdb_get_host_info|maxdb_get_metadata|' + 'maxdb_get_proto_info|maxdb_get_server_info|maxdb_get_server_version|maxdb_info|maxdb_init|maxdb_insert_id|maxdb_kill|maxdb_master_query|' + 'maxdb_more_results|maxdb_multi_query|maxdb_next_result|maxdb_num_fields|maxdb_num_rows|maxdb_options|maxdb_param_count|maxdb_ping|' + 'maxdb_prepare|maxdb_query|maxdb_real_connect|maxdb_real_escape_string|maxdb_real_query|maxdb_report|maxdb_rollback|' + 'maxdb_rpl_parse_enabled|maxdb_rpl_probe|maxdb_rpl_query_type|maxdb_select_db|maxdb_send_long_data|maxdb_send_query|maxdb_server_end|' + 'maxdb_server_init|maxdb_set_opt|maxdb_sqlstate|maxdb_ssl_set|maxdb_stat|maxdb_stmt_affected_rows|maxdb_stmt_bind_param|' + 'maxdb_stmt_bind_result|maxdb_stmt_close|maxdb_stmt_close_long_data|maxdb_stmt_data_seek|maxdb_stmt_errno|maxdb_stmt_error|' + 'maxdb_stmt_execute|maxdb_stmt_fetch|maxdb_stmt_free_result|maxdb_stmt_init|maxdb_stmt_num_rows|maxdb_stmt_param_count|maxdb_stmt_prepare|' + 'maxdb_stmt_reset|maxdb_stmt_result_metadata|maxdb_stmt_send_long_data|maxdb_stmt_sqlstate|maxdb_stmt_store_result|maxdb_store_result|' + 'maxdb_thread_id|maxdb_thread_safe|maxdb_use_result|maxdb_warning_count|mb_check_encoding|mb_convert_case|mb_convert_encoding|' + 'mb_convert_kana|mb_convert_variables|mb_decode_mimeheader|mb_decode_numericentity|mb_detect_encoding|mb_detect_order|mb_encode_mimeheader|' + 'mb_encode_numericentity|mb_encoding_aliases|mb_ereg|mb_ereg_match|mb_ereg_replace|mb_ereg_search|mb_ereg_search_getpos|' + 'mb_ereg_search_getregs|mb_ereg_search_init|mb_ereg_search_pos|mb_ereg_search_regs|mb_ereg_search_setpos|mb_eregi|mb_eregi_replace|' + 'mb_get_info|mb_http_input|mb_http_output|mb_internal_encoding|mb_language|mb_list_encodings|mb_output_handler|mb_parse_str|' + 'mb_preferred_mime_name|mb_regex_encoding|mb_regex_set_options|mb_send_mail|mb_split|mb_strcut|mb_strimwidth|mb_stripos|mb_stristr|' + 'mb_strlen|mb_strpos|mb_strrchr|mb_strrichr|mb_strripos|mb_strrpos|mb_strstr|mb_strtolower|mb_strtoupper|mb_strwidth|' + 'mb_substitute_character|mb_substr|mb_substr_count|mcrypt_cbc|mcrypt_cfb|mcrypt_create_iv|mcrypt_decrypt|mcrypt_ecb|' + 'mcrypt_enc_get_algorithms_name|mcrypt_enc_get_block_size|mcrypt_enc_get_iv_size|mcrypt_enc_get_key_size|mcrypt_enc_get_modes_name|' + 'mcrypt_enc_get_supported_key_sizes|mcrypt_enc_is_block_algorithm|mcrypt_enc_is_block_algorithm_mode|mcrypt_enc_is_block_mode|' + 'mcrypt_enc_self_test|mcrypt_encrypt|mcrypt_generic|mcrypt_generic_deinit|mcrypt_generic_end|mcrypt_generic_init|mcrypt_get_block_size|' + 'mcrypt_get_cipher_name|mcrypt_get_iv_size|mcrypt_get_key_size|mcrypt_list_algorithms|mcrypt_list_modes|mcrypt_module_close|' + 'mcrypt_module_get_algo_block_size|mcrypt_module_get_algo_key_size|mcrypt_module_get_supported_key_sizes|mcrypt_module_is_block_algorithm|' + 'mcrypt_module_is_block_algorithm_mode|mcrypt_module_is_block_mode|mcrypt_module_open|mcrypt_module_self_test|mcrypt_ofb|md5|md5_file|' + 'mdecrypt_generic|memcache|memcache_debug|memcached|memory_get_peak_usage|memory_get_usage|messageformatter|metaphone|method_exists|mhash|' + 'mhash_count|mhash_get_block_size|mhash_get_hash_name|mhash_keygen_s2k|microtime|mime_content_type|min|ming_keypress|' + 'ming_setcubicthreshold|ming_setscale|ming_setswfcompression|ming_useconstants|ming_useswfversion|mkdir|mktime|money_format|mongo|' + 'mongobindata|mongocode|mongocollection|mongoconnectionexception|mongocursor|mongocursorexception|mongocursortimeoutexception|mongodate|' + 'mongodb|mongodbref|mongoexception|mongogridfs|mongogridfscursor|mongogridfsexception|mongogridfsfile|mongoid|mongoint32|mongoint64|' + 'mongomaxkey|mongominkey|mongoregex|mongotimestamp|move_uploaded_file|mpegfile|mqseries_back|mqseries_begin|mqseries_close|mqseries_cmit|' + 'mqseries_conn|mqseries_connx|mqseries_disc|mqseries_get|mqseries_inq|mqseries_open|mqseries_put|mqseries_put1|mqseries_set|' + 'mqseries_strerror|msession_connect|msession_count|msession_create|msession_destroy|msession_disconnect|msession_find|msession_get|' + 'msession_get_array|msession_get_data|msession_inc|msession_list|msession_listvar|msession_lock|msession_plugin|msession_randstr|' + 'msession_set|msession_set_array|msession_set_data|msession_timeout|msession_uniq|msession_unlock|msg_get_queue|msg_queue_exists|' + 'msg_receive|msg_remove_queue|msg_send|msg_set_queue|msg_stat_queue|msql|msql_affected_rows|msql_close|msql_connect|msql_create_db|' + 'msql_createdb|msql_data_seek|msql_db_query|msql_dbname|msql_drop_db|msql_error|msql_fetch_array|msql_fetch_field|msql_fetch_object|' + 'msql_fetch_row|msql_field_flags|msql_field_len|msql_field_name|msql_field_seek|msql_field_table|msql_field_type|msql_fieldflags|' + 'msql_fieldlen|msql_fieldname|msql_fieldtable|msql_fieldtype|msql_free_result|msql_list_dbs|msql_list_fields|msql_list_tables|' + 'msql_num_fields|msql_num_rows|msql_numfields|msql_numrows|msql_pconnect|msql_query|msql_regcase|msql_result|msql_select_db|msql_tablename|' + 'mssql_bind|mssql_close|mssql_connect|mssql_data_seek|mssql_execute|mssql_fetch_array|mssql_fetch_assoc|mssql_fetch_batch|' + 'mssql_fetch_field|mssql_fetch_object|mssql_fetch_row|mssql_field_length|mssql_field_name|mssql_field_seek|mssql_field_type|' + 'mssql_free_result|mssql_free_statement|mssql_get_last_message|mssql_guid_string|mssql_init|mssql_min_error_severity|' + 'mssql_min_message_severity|mssql_next_result|mssql_num_fields|mssql_num_rows|mssql_pconnect|mssql_query|mssql_result|mssql_rows_affected|' + 'mssql_select_db|mt_getrandmax|mt_rand|mt_srand|multipleiterator|mysql_affected_rows|mysql_client_encoding|mysql_close|mysql_connect|' + 'mysql_create_db|mysql_data_seek|mysql_db_name|mysql_db_query|mysql_drop_db|mysql_errno|mysql_error|mysql_escape_string|mysql_fetch_array|' + 'mysql_fetch_assoc|mysql_fetch_field|mysql_fetch_lengths|mysql_fetch_object|mysql_fetch_row|mysql_field_flags|mysql_field_len|' + 'mysql_field_name|mysql_field_seek|mysql_field_table|mysql_field_type|mysql_free_result|mysql_get_client_info|mysql_get_host_info|' + 'mysql_get_proto_info|mysql_get_server_info|mysql_info|mysql_insert_id|mysql_list_dbs|mysql_list_fields|mysql_list_processes|' + 'mysql_list_tables|mysql_num_fields|mysql_num_rows|mysql_pconnect|mysql_ping|mysql_query|mysql_real_escape_string|mysql_result|' + 'mysql_select_db|mysql_set_charset|mysql_stat|mysql_tablename|mysql_thread_id|mysql_unbuffered_query|mysqli|mysqli_bind_param|' + 'mysqli_bind_result|mysqli_client_encoding|mysqli_connect|mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_driver|' + 'mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_escape_string|mysqli_execute|mysqli_fetch|mysqli_get_metadata|' + 'mysqli_master_query|mysqli_param_count|mysqli_report|mysqli_result|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' + 'mysqli_send_long_data|mysqli_send_query|mysqli_set_opt|mysqli_slave_query|mysqli_stmt|mysqli_warning|mysqlnd_ms_get_stats|' + 'mysqlnd_ms_query_is_select|mysqlnd_ms_set_user_pick_server|mysqlnd_qc_change_handler|mysqlnd_qc_clear_cache|mysqlnd_qc_get_cache_info|' + 'mysqlnd_qc_get_core_stats|mysqlnd_qc_get_handler|mysqlnd_qc_get_query_trace_log|mysqlnd_qc_set_user_handlers|natcasesort|natsort|' + 'ncurses_addch|ncurses_addchnstr|ncurses_addchstr|ncurses_addnstr|ncurses_addstr|ncurses_assume_default_colors|ncurses_attroff|' + 'ncurses_attron|ncurses_attrset|ncurses_baudrate|ncurses_beep|ncurses_bkgd|ncurses_bkgdset|ncurses_border|ncurses_bottom_panel|' + 'ncurses_can_change_color|ncurses_cbreak|ncurses_clear|ncurses_clrtobot|ncurses_clrtoeol|ncurses_color_content|ncurses_color_set|' + 'ncurses_curs_set|ncurses_def_prog_mode|ncurses_def_shell_mode|ncurses_define_key|ncurses_del_panel|ncurses_delay_output|ncurses_delch|' + 'ncurses_deleteln|ncurses_delwin|ncurses_doupdate|ncurses_echo|ncurses_echochar|ncurses_end|ncurses_erase|ncurses_erasechar|ncurses_filter|' + 'ncurses_flash|ncurses_flushinp|ncurses_getch|ncurses_getmaxyx|ncurses_getmouse|ncurses_getyx|ncurses_halfdelay|ncurses_has_colors|' + 'ncurses_has_ic|ncurses_has_il|ncurses_has_key|ncurses_hide_panel|ncurses_hline|ncurses_inch|ncurses_init|ncurses_init_color|' + 'ncurses_init_pair|ncurses_insch|ncurses_insdelln|ncurses_insertln|ncurses_insstr|ncurses_instr|ncurses_isendwin|ncurses_keyok|' + 'ncurses_keypad|ncurses_killchar|ncurses_longname|ncurses_meta|ncurses_mouse_trafo|ncurses_mouseinterval|ncurses_mousemask|ncurses_move|' + 'ncurses_move_panel|ncurses_mvaddch|ncurses_mvaddchnstr|ncurses_mvaddchstr|ncurses_mvaddnstr|ncurses_mvaddstr|ncurses_mvcur|' + 'ncurses_mvdelch|ncurses_mvgetch|ncurses_mvhline|ncurses_mvinch|ncurses_mvvline|ncurses_mvwaddstr|ncurses_napms|ncurses_new_panel|' + 'ncurses_newpad|ncurses_newwin|ncurses_nl|ncurses_nocbreak|ncurses_noecho|ncurses_nonl|ncurses_noqiflush|ncurses_noraw|' + 'ncurses_pair_content|ncurses_panel_above|ncurses_panel_below|ncurses_panel_window|ncurses_pnoutrefresh|ncurses_prefresh|ncurses_putp|' + 'ncurses_qiflush|ncurses_raw|ncurses_refresh|ncurses_replace_panel|ncurses_reset_prog_mode|ncurses_reset_shell_mode|ncurses_resetty|' + 'ncurses_savetty|ncurses_scr_dump|ncurses_scr_init|ncurses_scr_restore|ncurses_scr_set|ncurses_scrl|ncurses_show_panel|ncurses_slk_attr|' + 'ncurses_slk_attroff|ncurses_slk_attron|ncurses_slk_attrset|ncurses_slk_clear|ncurses_slk_color|ncurses_slk_init|ncurses_slk_noutrefresh|' + 'ncurses_slk_refresh|ncurses_slk_restore|ncurses_slk_set|ncurses_slk_touch|ncurses_standend|ncurses_standout|ncurses_start_color|' + 'ncurses_termattrs|ncurses_termname|ncurses_timeout|ncurses_top_panel|ncurses_typeahead|ncurses_ungetch|ncurses_ungetmouse|' + 'ncurses_update_panels|ncurses_use_default_colors|ncurses_use_env|ncurses_use_extended_names|ncurses_vidattr|ncurses_vline|ncurses_waddch|' + 'ncurses_waddstr|ncurses_wattroff|ncurses_wattron|ncurses_wattrset|ncurses_wborder|ncurses_wclear|ncurses_wcolor_set|ncurses_werase|' + 'ncurses_wgetch|ncurses_whline|ncurses_wmouse_trafo|ncurses_wmove|ncurses_wnoutrefresh|ncurses_wrefresh|ncurses_wstandend|' + 'ncurses_wstandout|ncurses_wvline|newinstance|newinstanceargs|newt_bell|newt_button|newt_button_bar|newt_centered_window|newt_checkbox|' + 'newt_checkbox_get_value|newt_checkbox_set_flags|newt_checkbox_set_value|newt_checkbox_tree|newt_checkbox_tree_add_item|' + 'newt_checkbox_tree_find_item|newt_checkbox_tree_get_current|newt_checkbox_tree_get_entry_value|newt_checkbox_tree_get_multi_selection|' + 'newt_checkbox_tree_get_selection|newt_checkbox_tree_multi|newt_checkbox_tree_set_current|newt_checkbox_tree_set_entry|' + 'newt_checkbox_tree_set_entry_value|newt_checkbox_tree_set_width|newt_clear_key_buffer|newt_cls|newt_compact_button|' + 'newt_component_add_callback|newt_component_takes_focus|newt_create_grid|newt_cursor_off|newt_cursor_on|newt_delay|newt_draw_form|' + 'newt_draw_root_text|newt_entry|newt_entry_get_value|newt_entry_set|newt_entry_set_filter|newt_entry_set_flags|newt_finished|newt_form|' + 'newt_form_add_component|newt_form_add_components|newt_form_add_hot_key|newt_form_destroy|newt_form_get_current|newt_form_run|' + 'newt_form_set_background|newt_form_set_height|newt_form_set_size|newt_form_set_timer|newt_form_set_width|newt_form_watch_fd|' + 'newt_get_screen_size|newt_grid_add_components_to_form|newt_grid_basic_window|newt_grid_free|newt_grid_get_size|newt_grid_h_close_stacked|' + 'newt_grid_h_stacked|newt_grid_place|newt_grid_set_field|newt_grid_simple_window|newt_grid_v_close_stacked|newt_grid_v_stacked|' + 'newt_grid_wrapped_window|newt_grid_wrapped_window_at|newt_init|newt_label|newt_label_set_text|newt_listbox|newt_listbox_append_entry|' + 'newt_listbox_clear|newt_listbox_clear_selection|newt_listbox_delete_entry|newt_listbox_get_current|newt_listbox_get_selection|' + 'newt_listbox_insert_entry|newt_listbox_item_count|newt_listbox_select_item|newt_listbox_set_current|newt_listbox_set_current_by_key|' + 'newt_listbox_set_data|newt_listbox_set_entry|newt_listbox_set_width|newt_listitem|newt_listitem_get_data|newt_listitem_set|' + 'newt_open_window|newt_pop_help_line|newt_pop_window|newt_push_help_line|newt_radio_get_current|newt_radiobutton|newt_redraw_help_line|' + 'newt_reflow_text|newt_refresh|newt_resize_screen|newt_resume|newt_run_form|newt_scale|newt_scale_set|newt_scrollbar_set|' + 'newt_set_help_callback|newt_set_suspend_callback|newt_suspend|newt_textbox|newt_textbox_get_num_lines|newt_textbox_reflowed|' + 'newt_textbox_set_height|newt_textbox_set_text|newt_vertical_scrollbar|newt_wait_for_key|newt_win_choice|newt_win_entries|newt_win_menu|' + 'newt_win_message|newt_win_messagev|newt_win_ternary|next|ngettext|nl2br|nl_langinfo|norewinditerator|normalizer|notes_body|notes_copy_db|' + 'notes_create_db|notes_create_note|notes_drop_db|notes_find_note|notes_header_info|notes_list_msgs|notes_mark_read|notes_mark_unread|' + 'notes_nav_create|notes_search|notes_unread|notes_version|nsapi_request_headers|nsapi_response_headers|nsapi_virtual|nthmac|number_format|' + 'numberformatter|oauth|oauth_get_sbs|oauth_urlencode|oauthexception|oauthprovider|ob_clean|ob_deflatehandler|ob_end_clean|ob_end_flush|' + 'ob_etaghandler|ob_flush|ob_get_clean|ob_get_contents|ob_get_flush|ob_get_length|ob_get_level|ob_get_status|ob_gzhandler|ob_iconv_handler|' + 'ob_implicit_flush|ob_inflatehandler|ob_list_handlers|ob_start|ob_tidyhandler|oci_bind_array_by_name|oci_bind_by_name|oci_cancel|' + 'oci_client_version|oci_close|oci_collection_append|oci_collection_assign|oci_collection_element_assign|oci_collection_element_get|' + 'oci_collection_free|oci_collection_max|oci_collection_size|oci_collection_trim|oci_commit|oci_connect|oci_define_by_name|oci_error|' + 'oci_execute|oci_fetch|oci_fetch_all|oci_fetch_array|oci_fetch_assoc|oci_fetch_object|oci_fetch_row|oci_field_is_null|oci_field_name|' + 'oci_field_precision|oci_field_scale|oci_field_size|oci_field_type|oci_field_type_raw|oci_free_statement|oci_internal_debug|oci_lob_append|' + 'oci_lob_close|oci_lob_copy|oci_lob_eof|oci_lob_erase|oci_lob_export|oci_lob_flush|oci_lob_free|oci_lob_getbuffering|oci_lob_import|' + 'oci_lob_is_equal|oci_lob_load|oci_lob_read|oci_lob_rewind|oci_lob_save|oci_lob_savefile|oci_lob_seek|oci_lob_setbuffering|oci_lob_size|' + 'oci_lob_tell|oci_lob_truncate|oci_lob_write|oci_lob_writetemporary|oci_lob_writetofile|oci_new_collection|oci_new_connect|oci_new_cursor|' + 'oci_new_descriptor|oci_num_fields|oci_num_rows|oci_parse|oci_password_change|oci_pconnect|oci_result|oci_rollback|oci_server_version|' + 'oci_set_action|oci_set_client_identifier|oci_set_client_info|oci_set_edition|oci_set_module_name|oci_set_prefetch|oci_statement_type|' + 'ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|' + 'ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|' + 'ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|' + 'ociloadlob|ocilogoff|ocilogon|ocinewcollection|ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|' + 'ocirollback|ocirowcount|ocisavelob|ocisavelobfile|ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|' + 'octdec|odbc_autocommit|odbc_binmode|odbc_close|odbc_close_all|odbc_columnprivileges|odbc_columns|odbc_commit|odbc_connect|odbc_cursor|' + 'odbc_data_source|odbc_do|odbc_error|odbc_errormsg|odbc_exec|odbc_execute|odbc_fetch_array|odbc_fetch_into|odbc_fetch_object|' + 'odbc_fetch_row|odbc_field_len|odbc_field_name|odbc_field_num|odbc_field_precision|odbc_field_scale|odbc_field_type|odbc_foreignkeys|' + 'odbc_free_result|odbc_gettypeinfo|odbc_longreadlen|odbc_next_result|odbc_num_fields|odbc_num_rows|odbc_pconnect|odbc_prepare|' + 'odbc_primarykeys|odbc_procedurecolumns|odbc_procedures|odbc_result|odbc_result_all|odbc_rollback|odbc_setoption|odbc_specialcolumns|' + 'odbc_statistics|odbc_tableprivileges|odbc_tables|openal_buffer_create|openal_buffer_data|openal_buffer_destroy|openal_buffer_get|' + 'openal_buffer_loadwav|openal_context_create|openal_context_current|openal_context_destroy|openal_context_process|openal_context_suspend|' + 'openal_device_close|openal_device_open|openal_listener_get|openal_listener_set|openal_source_create|openal_source_destroy|' + 'openal_source_get|openal_source_pause|openal_source_play|openal_source_rewind|openal_source_set|openal_source_stop|openal_stream|opendir|' + 'openlog|openssl_cipher_iv_length|openssl_csr_export|openssl_csr_export_to_file|openssl_csr_get_public_key|openssl_csr_get_subject|' + 'openssl_csr_new|openssl_csr_sign|openssl_decrypt|openssl_dh_compute_key|openssl_digest|openssl_encrypt|openssl_error_string|' + 'openssl_free_key|openssl_get_cipher_methods|openssl_get_md_methods|openssl_get_privatekey|openssl_get_publickey|openssl_open|' + 'openssl_pkcs12_export|openssl_pkcs12_export_to_file|openssl_pkcs12_read|openssl_pkcs7_decrypt|openssl_pkcs7_encrypt|openssl_pkcs7_sign|' + 'openssl_pkcs7_verify|openssl_pkey_export|openssl_pkey_export_to_file|openssl_pkey_free|openssl_pkey_get_details|openssl_pkey_get_private|' + 'openssl_pkey_get_public|openssl_pkey_new|openssl_private_decrypt|openssl_private_encrypt|openssl_public_decrypt|openssl_public_encrypt|' + 'openssl_random_pseudo_bytes|openssl_seal|openssl_sign|openssl_verify|openssl_x509_check_private_key|openssl_x509_checkpurpose|' + 'openssl_x509_export|openssl_x509_export_to_file|openssl_x509_free|openssl_x509_parse|openssl_x509_read|ord|outeriterator|' + 'outofboundsexception|outofrangeexception|output_add_rewrite_var|output_reset_rewrite_vars|overflowexception|overload|override_function|' + 'ovrimos_close|ovrimos_commit|ovrimos_connect|ovrimos_cursor|ovrimos_exec|ovrimos_execute|ovrimos_fetch_into|ovrimos_fetch_row|' + 'ovrimos_field_len|ovrimos_field_name|ovrimos_field_num|ovrimos_field_type|ovrimos_free_result|ovrimos_longreadlen|ovrimos_num_fields|' + 'ovrimos_num_rows|ovrimos_prepare|ovrimos_result|ovrimos_result_all|ovrimos_rollback|pack|parentiterator|parse_ini_file|parse_ini_string|' + 'parse_str|parse_url|parsekit_compile_file|parsekit_compile_string|parsekit_func_arginfo|passthru|pathinfo|pclose|pcntl_alarm|pcntl_exec|' + 'pcntl_fork|pcntl_getpriority|pcntl_setpriority|pcntl_signal|pcntl_signal_dispatch|pcntl_sigprocmask|pcntl_sigtimedwait|pcntl_sigwaitinfo|' + 'pcntl_wait|pcntl_waitpid|pcntl_wexitstatus|pcntl_wifexited|pcntl_wifsignaled|pcntl_wifstopped|pcntl_wstopsig|pcntl_wtermsig|' + 'pdf_activate_item|pdf_add_annotation|pdf_add_bookmark|pdf_add_launchlink|pdf_add_locallink|pdf_add_nameddest|pdf_add_note|pdf_add_outline|' + 'pdf_add_pdflink|pdf_add_table_cell|pdf_add_textflow|pdf_add_thumbnail|pdf_add_weblink|pdf_arc|pdf_arcn|pdf_attach_file|pdf_begin_document|' + 'pdf_begin_font|pdf_begin_glyph|pdf_begin_item|pdf_begin_layer|pdf_begin_page|pdf_begin_page_ext|pdf_begin_pattern|pdf_begin_template|' + 'pdf_begin_template_ext|pdf_circle|pdf_clip|pdf_close|pdf_close_image|pdf_close_pdi|pdf_close_pdi_page|pdf_closepath|' + 'pdf_closepath_fill_stroke|pdf_closepath_stroke|pdf_concat|pdf_continue_text|pdf_create_3dview|pdf_create_action|pdf_create_annotation|' + 'pdf_create_bookmark|pdf_create_field|pdf_create_fieldgroup|pdf_create_gstate|pdf_create_pvf|pdf_create_textflow|pdf_curveto|' + 'pdf_define_layer|pdf_delete|pdf_delete_pvf|pdf_delete_table|pdf_delete_textflow|pdf_encoding_set_char|pdf_end_document|pdf_end_font|' + 'pdf_end_glyph|pdf_end_item|pdf_end_layer|pdf_end_page|pdf_end_page_ext|pdf_end_pattern|pdf_end_template|pdf_endpath|pdf_fill|' + 'pdf_fill_imageblock|pdf_fill_pdfblock|pdf_fill_stroke|pdf_fill_textblock|pdf_findfont|pdf_fit_image|pdf_fit_pdi_page|pdf_fit_table|' + 'pdf_fit_textflow|pdf_fit_textline|pdf_get_apiname|pdf_get_buffer|pdf_get_errmsg|pdf_get_errnum|pdf_get_font|pdf_get_fontname|' + 'pdf_get_fontsize|pdf_get_image_height|pdf_get_image_width|pdf_get_majorversion|pdf_get_minorversion|pdf_get_parameter|' + 'pdf_get_pdi_parameter|pdf_get_pdi_value|pdf_get_value|pdf_info_font|pdf_info_matchbox|pdf_info_table|pdf_info_textflow|pdf_info_textline|' + 'pdf_initgraphics|pdf_lineto|pdf_load_3ddata|pdf_load_font|pdf_load_iccprofile|pdf_load_image|pdf_makespotcolor|pdf_moveto|pdf_new|' + 'pdf_open_ccitt|pdf_open_file|pdf_open_gif|pdf_open_image|pdf_open_image_file|pdf_open_jpeg|pdf_open_memory_image|pdf_open_pdi|' + 'pdf_open_pdi_document|pdf_open_pdi_page|pdf_open_tiff|pdf_pcos_get_number|pdf_pcos_get_stream|pdf_pcos_get_string|pdf_place_image|' + 'pdf_place_pdi_page|pdf_process_pdi|pdf_rect|pdf_restore|pdf_resume_page|pdf_rotate|pdf_save|pdf_scale|pdf_set_border_color|' + 'pdf_set_border_dash|pdf_set_border_style|pdf_set_char_spacing|pdf_set_duration|pdf_set_gstate|pdf_set_horiz_scaling|pdf_set_info|' + 'pdf_set_info_author|pdf_set_info_creator|pdf_set_info_keywords|pdf_set_info_subject|pdf_set_info_title|pdf_set_layer_dependency|' + 'pdf_set_leading|pdf_set_parameter|pdf_set_text_matrix|pdf_set_text_pos|pdf_set_text_rendering|pdf_set_text_rise|pdf_set_value|' + 'pdf_set_word_spacing|pdf_setcolor|pdf_setdash|pdf_setdashpattern|pdf_setflat|pdf_setfont|pdf_setgray|pdf_setgray_fill|pdf_setgray_stroke|' + 'pdf_setlinecap|pdf_setlinejoin|pdf_setlinewidth|pdf_setmatrix|pdf_setmiterlimit|pdf_setpolydash|pdf_setrgbcolor|pdf_setrgbcolor_fill|' + 'pdf_setrgbcolor_stroke|pdf_shading|pdf_shading_pattern|pdf_shfill|pdf_show|pdf_show_boxed|pdf_show_xy|pdf_skew|pdf_stringwidth|pdf_stroke|' + 'pdf_suspend_page|pdf_translate|pdf_utf16_to_utf8|pdf_utf32_to_utf16|pdf_utf8_to_utf16|pdo|pdo_cubrid_schema|pdo_pgsqllobcreate|' + 'pdo_pgsqllobopen|pdo_pgsqllobunlink|pdo_sqlitecreateaggregate|pdo_sqlitecreatefunction|pdoexception|pdostatement|pfsockopen|' + 'pg_affected_rows|pg_cancel_query|pg_client_encoding|pg_close|pg_connect|pg_connection_busy|pg_connection_reset|pg_connection_status|' + 'pg_convert|pg_copy_from|pg_copy_to|pg_dbname|pg_delete|pg_end_copy|pg_escape_bytea|pg_escape_string|pg_execute|pg_fetch_all|' + 'pg_fetch_all_columns|pg_fetch_array|pg_fetch_assoc|pg_fetch_object|pg_fetch_result|pg_fetch_row|pg_field_is_null|pg_field_name|' + 'pg_field_num|pg_field_prtlen|pg_field_size|pg_field_table|pg_field_type|pg_field_type_oid|pg_free_result|pg_get_notify|pg_get_pid|' + 'pg_get_result|pg_host|pg_insert|pg_last_error|pg_last_notice|pg_last_oid|pg_lo_close|pg_lo_create|pg_lo_export|pg_lo_import|pg_lo_open|' + 'pg_lo_read|pg_lo_read_all|pg_lo_seek|pg_lo_tell|pg_lo_unlink|pg_lo_write|pg_meta_data|pg_num_fields|pg_num_rows|pg_options|' + 'pg_parameter_status|pg_pconnect|pg_ping|pg_port|pg_prepare|pg_put_line|pg_query|pg_query_params|pg_result_error|pg_result_error_field|' + 'pg_result_seek|pg_result_status|pg_select|pg_send_execute|pg_send_prepare|pg_send_query|pg_send_query_params|pg_set_client_encoding|' + 'pg_set_error_verbosity|pg_trace|pg_transaction_status|pg_tty|pg_unescape_bytea|pg_untrace|pg_update|pg_version|php_check_syntax|' + 'php_ini_loaded_file|php_ini_scanned_files|php_logo_guid|php_sapi_name|php_strip_whitespace|php_uname|phpcredits|phpinfo|phpversion|pi|' + 'png2wbmp|popen|pos|posix_access|posix_ctermid|posix_errno|posix_get_last_error|posix_getcwd|posix_getegid|posix_geteuid|posix_getgid|' + 'posix_getgrgid|posix_getgrnam|posix_getgroups|posix_getlogin|posix_getpgid|posix_getpgrp|posix_getpid|posix_getppid|posix_getpwnam|' + 'posix_getpwuid|posix_getrlimit|posix_getsid|posix_getuid|posix_initgroups|posix_isatty|posix_kill|posix_mkfifo|posix_mknod|posix_setegid|' + 'posix_seteuid|posix_setgid|posix_setpgid|posix_setsid|posix_setuid|posix_strerror|posix_times|posix_ttyname|posix_uname|pow|preg_filter|' + 'preg_grep|preg_last_error|preg_match|preg_match_all|preg_quote|preg_replace|preg_replace_callback|preg_split|prev|print|print_r|' + 'printer_abort|printer_close|printer_create_brush|printer_create_dc|printer_create_font|printer_create_pen|printer_delete_brush|' + 'printer_delete_dc|printer_delete_font|printer_delete_pen|printer_draw_bmp|printer_draw_chord|printer_draw_elipse|printer_draw_line|' + 'printer_draw_pie|printer_draw_rectangle|printer_draw_roundrect|printer_draw_text|printer_end_doc|printer_end_page|printer_get_option|' + 'printer_list|printer_logical_fontheight|printer_open|printer_select_brush|printer_select_font|printer_select_pen|printer_set_option|' + 'printer_start_doc|printer_start_page|printer_write|printf|proc_close|proc_get_status|proc_nice|proc_open|proc_terminate|property_exists|' + 'ps_add_bookmark|ps_add_launchlink|ps_add_locallink|ps_add_note|ps_add_pdflink|ps_add_weblink|ps_arc|ps_arcn|ps_begin_page|' + 'ps_begin_pattern|ps_begin_template|ps_circle|ps_clip|ps_close|ps_close_image|ps_closepath|ps_closepath_stroke|ps_continue_text|ps_curveto|' + 'ps_delete|ps_end_page|ps_end_pattern|ps_end_template|ps_fill|ps_fill_stroke|ps_findfont|ps_get_buffer|ps_get_parameter|ps_get_value|' + 'ps_hyphenate|ps_include_file|ps_lineto|ps_makespotcolor|ps_moveto|ps_new|ps_open_file|ps_open_image|ps_open_image_file|' + 'ps_open_memory_image|ps_place_image|ps_rect|ps_restore|ps_rotate|ps_save|ps_scale|ps_set_border_color|ps_set_border_dash|' + 'ps_set_border_style|ps_set_info|ps_set_parameter|ps_set_text_pos|ps_set_value|ps_setcolor|ps_setdash|ps_setflat|ps_setfont|ps_setgray|' + 'ps_setlinecap|ps_setlinejoin|ps_setlinewidth|ps_setmiterlimit|ps_setoverprintmode|ps_setpolydash|ps_shading|ps_shading_pattern|ps_shfill|' + 'ps_show|ps_show2|ps_show_boxed|ps_show_xy|ps_show_xy2|ps_string_geometry|ps_stringwidth|ps_stroke|ps_symbol|ps_symbol_name|' + 'ps_symbol_width|ps_translate|pspell_add_to_personal|pspell_add_to_session|pspell_check|pspell_clear_session|pspell_config_create|' + 'pspell_config_data_dir|pspell_config_dict_dir|pspell_config_ignore|pspell_config_mode|pspell_config_personal|pspell_config_repl|' + 'pspell_config_runtogether|pspell_config_save_repl|pspell_new|pspell_new_config|pspell_new_personal|pspell_save_wordlist|' + 'pspell_store_replacement|pspell_suggest|putenv|px_close|px_create_fp|px_date2string|px_delete|px_delete_record|px_get_field|px_get_info|' + 'px_get_parameter|px_get_record|px_get_schema|px_get_value|px_insert_record|px_new|px_numfields|px_numrecords|px_open_fp|px_put_record|' + 'px_retrieve_record|px_set_blob_file|px_set_parameter|px_set_tablename|px_set_targetencoding|px_set_value|px_timestamp2string|' + 'px_update_record|qdom_error|qdom_tree|quoted_printable_decode|quoted_printable_encode|quotemeta|rad2deg|radius_acct_open|' + 'radius_add_server|radius_auth_open|radius_close|radius_config|radius_create_request|radius_cvt_addr|radius_cvt_int|radius_cvt_string|' + 'radius_demangle|radius_demangle_mppe_key|radius_get_attr|radius_get_vendor_attr|radius_put_addr|radius_put_attr|radius_put_int|' + 'radius_put_string|radius_put_vendor_addr|radius_put_vendor_attr|radius_put_vendor_int|radius_put_vendor_string|' + 'radius_request_authenticator|radius_send_request|radius_server_secret|radius_strerror|rand|range|rangeexception|rar_wrapper_cache_stats|' + 'rararchive|rarentry|rarexception|rawurldecode|rawurlencode|read_exif_data|readdir|readfile|readgzfile|readline|readline_add_history|' + 'readline_callback_handler_install|readline_callback_handler_remove|readline_callback_read_char|readline_clear_history|' + 'readline_completion_function|readline_info|readline_list_history|readline_on_new_line|readline_read_history|readline_redisplay|' + 'readline_write_history|readlink|realpath|realpath_cache_get|realpath_cache_size|recode|recode_file|recode_string|recursivearrayiterator|' + 'recursivecachingiterator|recursivecallbackfilteriterator|recursivedirectoryiterator|recursivefilteriterator|recursiveiterator|' + 'recursiveiteratoriterator|recursiveregexiterator|recursivetreeiterator|reflection|reflectionclass|reflectionexception|reflectionextension|' + 'reflectionfunction|reflectionfunctionabstract|reflectionmethod|reflectionobject|reflectionparameter|reflectionproperty|reflector|' + 'regexiterator|register_shutdown_function|register_tick_function|rename|rename_function|require|require_once|reset|resetValue|' + 'resourcebundle|restore_error_handler|restore_exception_handler|restore_include_path|return|rewind|rewinddir|rmdir|round|rpm_close|' + 'rpm_get_tag|rpm_is_valid|rpm_open|rpm_version|rrd_create|rrd_error|rrd_fetch|rrd_first|rrd_graph|rrd_info|rrd_last|rrd_lastupdate|' + 'rrd_restore|rrd_tune|rrd_update|rrd_xport|rrdcreator|rrdgraph|rrdupdater|rsort|rtrim|runkit_class_adopt|runkit_class_emancipate|' + 'runkit_constant_add|runkit_constant_redefine|runkit_constant_remove|runkit_function_add|runkit_function_copy|runkit_function_redefine|' + 'runkit_function_remove|runkit_function_rename|runkit_import|runkit_lint|runkit_lint_file|runkit_method_add|runkit_method_copy|' + 'runkit_method_redefine|runkit_method_remove|runkit_method_rename|runkit_return_value_used|runkit_sandbox_output_handler|' + 'runkit_superglobals|runtimeexception|samconnection_commit|samconnection_connect|samconnection_constructor|samconnection_disconnect|' + 'samconnection_errno|samconnection_error|samconnection_isconnected|samconnection_peek|samconnection_peekall|samconnection_receive|' + 'samconnection_remove|samconnection_rollback|samconnection_send|samconnection_setDebug|samconnection_subscribe|samconnection_unsubscribe|' + 'sammessage_body|sammessage_constructor|sammessage_header|sca_createdataobject|sca_getservice|sca_localproxy_createdataobject|' + 'sca_soapproxy_createdataobject|scandir|sdo_das_changesummary_beginlogging|sdo_das_changesummary_endlogging|' + 'sdo_das_changesummary_getchangeddataobjects|sdo_das_changesummary_getchangetype|sdo_das_changesummary_getoldcontainer|' + 'sdo_das_changesummary_getoldvalues|sdo_das_changesummary_islogging|sdo_das_datafactory_addpropertytotype|sdo_das_datafactory_addtype|' + 'sdo_das_datafactory_getdatafactory|sdo_das_dataobject_getchangesummary|sdo_das_relational_applychanges|sdo_das_relational_construct|' + 'sdo_das_relational_createrootdataobject|sdo_das_relational_executepreparedquery|sdo_das_relational_executequery|' + 'sdo_das_setting_getlistindex|sdo_das_setting_getpropertyindex|sdo_das_setting_getpropertyname|sdo_das_setting_getvalue|' + 'sdo_das_setting_isset|sdo_das_xml_addtypes|sdo_das_xml_create|sdo_das_xml_createdataobject|sdo_das_xml_createdocument|' + 'sdo_das_xml_document_getrootdataobject|sdo_das_xml_document_getrootelementname|sdo_das_xml_document_getrootelementuri|' + 'sdo_das_xml_document_setencoding|sdo_das_xml_document_setxmldeclaration|sdo_das_xml_document_setxmlversion|sdo_das_xml_loadfile|' + 'sdo_das_xml_loadstring|sdo_das_xml_savefile|sdo_das_xml_savestring|sdo_datafactory_create|sdo_dataobject_clear|' + 'sdo_dataobject_createdataobject|sdo_dataobject_getcontainer|sdo_dataobject_getsequence|sdo_dataobject_gettypename|' + 'sdo_dataobject_gettypenamespaceuri|sdo_exception_getcause|sdo_list_insert|sdo_model_property_getcontainingtype|' + 'sdo_model_property_getdefault|sdo_model_property_getname|sdo_model_property_gettype|sdo_model_property_iscontainment|' + 'sdo_model_property_ismany|sdo_model_reflectiondataobject_construct|sdo_model_reflectiondataobject_export|' + 'sdo_model_reflectiondataobject_getcontainmentproperty|sdo_model_reflectiondataobject_getinstanceproperties|' + 'sdo_model_reflectiondataobject_gettype|sdo_model_type_getbasetype|sdo_model_type_getname|sdo_model_type_getnamespaceuri|' + 'sdo_model_type_getproperties|sdo_model_type_getproperty|sdo_model_type_isabstracttype|sdo_model_type_isdatatype|sdo_model_type_isinstance|' + 'sdo_model_type_isopentype|sdo_model_type_issequencedtype|sdo_sequence_getproperty|sdo_sequence_insert|sdo_sequence_move|seekableiterator|' + 'sem_acquire|sem_get|sem_release|sem_remove|serializable|serialize|session_cache_expire|session_cache_limiter|session_commit|' + 'session_decode|session_destroy|session_encode|session_get_cookie_params|session_id|session_is_registered|session_module_name|session_name|' + 'session_pgsql_add_error|session_pgsql_get_error|session_pgsql_get_field|session_pgsql_reset|session_pgsql_set_field|session_pgsql_status|' + 'session_regenerate_id|session_register|session_save_path|session_set_cookie_params|session_set_save_handler|session_start|' + 'session_unregister|session_unset|session_write_close|setCounterClass|set_error_handler|set_exception_handler|set_file_buffer|' + 'set_include_path|set_magic_quotes_runtime|set_socket_blocking|set_time_limit|setcookie|setlocale|setproctitle|setrawcookie|' + 'setstaticpropertyvalue|setthreadtitle|settype|sha1|sha1_file|shell_exec|shm_attach|shm_detach|shm_get_var|shm_has_var|shm_put_var|' + 'shm_remove|shm_remove_var|shmop_close|shmop_delete|shmop_open|shmop_read|shmop_size|shmop_write|show_source|shuffle|signeurlpaiement|' + 'similar_text|simplexml_import_dom|simplexml_load_file|simplexml_load_string|simplexmlelement|simplexmliterator|sin|sinh|sizeof|sleep|snmp|' + 'snmp2_get|snmp2_getnext|snmp2_real_walk|snmp2_set|snmp2_walk|snmp3_get|snmp3_getnext|snmp3_real_walk|snmp3_set|snmp3_walk|' + 'snmp_get_quick_print|snmp_get_valueretrieval|snmp_read_mib|snmp_set_enum_print|snmp_set_oid_numeric_print|snmp_set_oid_output_format|' + 'snmp_set_quick_print|snmp_set_valueretrieval|snmpget|snmpgetnext|snmprealwalk|snmpset|snmpwalk|snmpwalkoid|soapclient|soapfault|' + 'soapheader|soapparam|soapserver|soapvar|socket_accept|socket_bind|socket_clear_error|socket_close|socket_connect|socket_create|' + 'socket_create_listen|socket_create_pair|socket_get_option|socket_get_status|socket_getpeername|socket_getsockname|socket_last_error|' + 'socket_listen|socket_read|socket_recv|socket_recvfrom|socket_select|socket_send|socket_sendto|socket_set_block|socket_set_blocking|' + 'socket_set_nonblock|socket_set_option|socket_set_timeout|socket_shutdown|socket_strerror|socket_write|solr_get_version|solrclient|' + 'solrclientexception|solrdocument|solrdocumentfield|solrexception|solrgenericresponse|solrillegalargumentexception|' + 'solrillegaloperationexception|solrinputdocument|solrmodifiableparams|solrobject|solrparams|solrpingresponse|solrquery|solrqueryresponse|' + 'solrresponse|solrupdateresponse|solrutils|sort|soundex|sphinxclient|spl_autoload|spl_autoload_call|spl_autoload_extensions|' + 'spl_autoload_functions|spl_autoload_register|spl_autoload_unregister|spl_classes|spl_object_hash|splbool|spldoublylinkedlist|splenum|' + 'splfileinfo|splfileobject|splfixedarray|splfloat|splheap|splint|split|spliti|splmaxheap|splminheap|splobjectstorage|splobserver|' + 'splpriorityqueue|splqueue|splstack|splstring|splsubject|spltempfileobject|spoofchecker|sprintf|sql_regcase|sqlite3|sqlite3result|' + 'sqlite3stmt|sqlite_array_query|sqlite_busy_timeout|sqlite_changes|sqlite_close|sqlite_column|sqlite_create_aggregate|' + 'sqlite_create_function|sqlite_current|sqlite_error_string|sqlite_escape_string|sqlite_exec|sqlite_factory|sqlite_fetch_all|' + 'sqlite_fetch_array|sqlite_fetch_column_types|sqlite_fetch_object|sqlite_fetch_single|sqlite_fetch_string|sqlite_field_name|' + 'sqlite_has_more|sqlite_has_prev|sqlite_key|sqlite_last_error|sqlite_last_insert_rowid|sqlite_libencoding|sqlite_libversion|sqlite_next|' + 'sqlite_num_fields|sqlite_num_rows|sqlite_open|sqlite_popen|sqlite_prev|sqlite_query|sqlite_rewind|sqlite_seek|sqlite_single_query|' + 'sqlite_udf_decode_binary|sqlite_udf_encode_binary|sqlite_unbuffered_query|sqlite_valid|sqrt|srand|sscanf|ssdeep_fuzzy_compare|' + 'ssdeep_fuzzy_hash|ssdeep_fuzzy_hash_filename|ssh2_auth_hostbased_file|ssh2_auth_none|ssh2_auth_password|ssh2_auth_pubkey_file|' + 'ssh2_connect|ssh2_exec|ssh2_fetch_stream|ssh2_fingerprint|ssh2_methods_negotiated|ssh2_publickey_add|ssh2_publickey_init|' + 'ssh2_publickey_list|ssh2_publickey_remove|ssh2_scp_recv|ssh2_scp_send|ssh2_sftp|ssh2_sftp_lstat|ssh2_sftp_mkdir|ssh2_sftp_readlink|' + 'ssh2_sftp_realpath|ssh2_sftp_rename|ssh2_sftp_rmdir|ssh2_sftp_stat|ssh2_sftp_symlink|ssh2_sftp_unlink|ssh2_shell|ssh2_tunnel|stat|' + 'stats_absolute_deviation|stats_cdf_beta|stats_cdf_binomial|stats_cdf_cauchy|stats_cdf_chisquare|stats_cdf_exponential|stats_cdf_f|' + 'stats_cdf_gamma|stats_cdf_laplace|stats_cdf_logistic|stats_cdf_negative_binomial|stats_cdf_noncentral_chisquare|stats_cdf_noncentral_f|' + 'stats_cdf_poisson|stats_cdf_t|stats_cdf_uniform|stats_cdf_weibull|stats_covariance|stats_den_uniform|stats_dens_beta|stats_dens_cauchy|' + 'stats_dens_chisquare|stats_dens_exponential|stats_dens_f|stats_dens_gamma|stats_dens_laplace|stats_dens_logistic|' + 'stats_dens_negative_binomial|stats_dens_normal|stats_dens_pmf_binomial|stats_dens_pmf_hypergeometric|stats_dens_pmf_poisson|stats_dens_t|' + 'stats_dens_weibull|stats_harmonic_mean|stats_kurtosis|stats_rand_gen_beta|stats_rand_gen_chisquare|stats_rand_gen_exponential|' + 'stats_rand_gen_f|stats_rand_gen_funiform|stats_rand_gen_gamma|stats_rand_gen_ibinomial|stats_rand_gen_ibinomial_negative|' + 'stats_rand_gen_int|stats_rand_gen_ipoisson|stats_rand_gen_iuniform|stats_rand_gen_noncenral_chisquare|stats_rand_gen_noncentral_f|' + 'stats_rand_gen_noncentral_t|stats_rand_gen_normal|stats_rand_gen_t|stats_rand_get_seeds|stats_rand_phrase_to_seeds|stats_rand_ranf|' + 'stats_rand_setall|stats_skew|stats_standard_deviation|stats_stat_binomial_coef|stats_stat_correlation|stats_stat_gennch|' + 'stats_stat_independent_t|stats_stat_innerproduct|stats_stat_noncentral_t|stats_stat_paired_t|stats_stat_percentile|stats_stat_powersum|' + 'stats_variance|stomp|stomp_connect_error|stomp_version|stompexception|stompframe|str_getcsv|str_ireplace|str_pad|str_repeat|str_replace|' + 'str_rot13|str_shuffle|str_split|str_word_count|strcasecmp|strchr|strcmp|strcoll|strcspn|stream_bucket_append|stream_bucket_make_writeable|' + 'stream_bucket_new|stream_bucket_prepend|stream_context_create|stream_context_get_default|stream_context_get_options|' + 'stream_context_get_params|stream_context_set_default|stream_context_set_option|stream_context_set_params|stream_copy_to_stream|' + 'stream_encoding|stream_filter_append|stream_filter_prepend|stream_filter_register|stream_filter_remove|stream_get_contents|' + 'stream_get_filters|stream_get_line|stream_get_meta_data|stream_get_transports|stream_get_wrappers|stream_is_local|' + 'stream_notification_callback|stream_register_wrapper|stream_resolve_include_path|stream_select|stream_set_blocking|stream_set_read_buffer|' + 'stream_set_timeout|stream_set_write_buffer|stream_socket_accept|stream_socket_client|stream_socket_enable_crypto|stream_socket_get_name|' + 'stream_socket_pair|stream_socket_recvfrom|stream_socket_sendto|stream_socket_server|stream_socket_shutdown|stream_supports_lock|' + 'stream_wrapper_register|stream_wrapper_restore|stream_wrapper_unregister|streamwrapper|strftime|strip_tags|stripcslashes|stripos|' + 'stripslashes|stristr|strlen|strnatcasecmp|strnatcmp|strncasecmp|strncmp|strpbrk|strpos|strptime|strrchr|strrev|strripos|strrpos|strspn|' + 'strstr|strtok|strtolower|strtotime|strtoupper|strtr|strval|substr|substr_compare|substr_count|substr_replace|svm|svmmodel|svn_add|' + 'svn_auth_get_parameter|svn_auth_set_parameter|svn_blame|svn_cat|svn_checkout|svn_cleanup|svn_client_version|svn_commit|svn_delete|' + 'svn_diff|svn_export|svn_fs_abort_txn|svn_fs_apply_text|svn_fs_begin_txn2|svn_fs_change_node_prop|svn_fs_check_path|' + 'svn_fs_contents_changed|svn_fs_copy|svn_fs_delete|svn_fs_dir_entries|svn_fs_file_contents|svn_fs_file_length|svn_fs_is_dir|svn_fs_is_file|' + 'svn_fs_make_dir|svn_fs_make_file|svn_fs_node_created_rev|svn_fs_node_prop|svn_fs_props_changed|svn_fs_revision_prop|svn_fs_revision_root|' + 'svn_fs_txn_root|svn_fs_youngest_rev|svn_import|svn_log|svn_ls|svn_mkdir|svn_repos_create|svn_repos_fs|svn_repos_fs_begin_txn_for_commit|' + 'svn_repos_fs_commit_txn|svn_repos_hotcopy|svn_repos_open|svn_repos_recover|svn_revert|svn_status|svn_update|swf_actiongeturl|' + 'swf_actiongotoframe|swf_actiongotolabel|swf_actionnextframe|swf_actionplay|swf_actionprevframe|swf_actionsettarget|swf_actionstop|' + 'swf_actiontogglequality|swf_actionwaitforframe|swf_addbuttonrecord|swf_addcolor|swf_closefile|swf_definebitmap|swf_definefont|' + 'swf_defineline|swf_definepoly|swf_definerect|swf_definetext|swf_endbutton|swf_enddoaction|swf_endshape|swf_endsymbol|swf_fontsize|' + 'swf_fontslant|swf_fonttracking|swf_getbitmapinfo|swf_getfontinfo|swf_getframe|swf_labelframe|swf_lookat|swf_modifyobject|swf_mulcolor|' + 'swf_nextid|swf_oncondition|swf_openfile|swf_ortho|swf_ortho2|swf_perspective|swf_placeobject|swf_polarview|swf_popmatrix|swf_posround|' + 'swf_pushmatrix|swf_removeobject|swf_rotate|swf_scale|swf_setfont|swf_setframe|swf_shapearc|swf_shapecurveto|swf_shapecurveto3|' + 'swf_shapefillbitmapclip|swf_shapefillbitmaptile|swf_shapefilloff|swf_shapefillsolid|swf_shapelinesolid|swf_shapelineto|swf_shapemoveto|' + 'swf_showframe|swf_startbutton|swf_startdoaction|swf_startshape|swf_startsymbol|swf_textwidth|swf_translate|swf_viewport|swfaction|' + 'swfbitmap|swfbutton|swfdisplayitem|swffill|swffont|swffontchar|swfgradient|swfmorph|swfmovie|swfprebuiltclip|swfshape|swfsound|' + 'swfsoundinstance|swfsprite|swftext|swftextfield|swfvideostream|swish_construct|swish_getmetalist|swish_getpropertylist|swish_prepare|' + 'swish_query|swishresult_getmetalist|swishresult_stem|swishresults_getparsedwords|swishresults_getremovedstopwords|swishresults_nextresult|' + 'swishresults_seekresult|swishsearch_execute|swishsearch_resetlimit|swishsearch_setlimit|swishsearch_setphrasedelimiter|' + 'swishsearch_setsort|swishsearch_setstructure|sybase_affected_rows|sybase_close|sybase_connect|sybase_data_seek|' + 'sybase_deadlock_retry_count|sybase_fetch_array|sybase_fetch_assoc|sybase_fetch_field|sybase_fetch_object|sybase_fetch_row|' + 'sybase_field_seek|sybase_free_result|sybase_get_last_message|sybase_min_client_severity|sybase_min_error_severity|' + 'sybase_min_message_severity|sybase_min_server_severity|sybase_num_fields|sybase_num_rows|sybase_pconnect|sybase_query|sybase_result|' + 'sybase_select_db|sybase_set_message_handler|sybase_unbuffered_query|symlink|sys_get_temp_dir|sys_getloadavg|syslog|system|tag|tan|tanh|' + 'tcpwrap_check|tempnam|textdomain|tidy|tidy_access_count|tidy_config_count|tidy_diagnose|tidy_error_count|tidy_get_error_buffer|' + 'tidy_get_output|tidy_load_config|tidy_reset_config|tidy_save_config|tidy_set_encoding|tidy_setopt|tidy_warning_count|tidynode|time|' + 'time_nanosleep|time_sleep_until|timezone_abbreviations_list|timezone_identifiers_list|timezone_location_get|timezone_name_from_abbr|' + 'timezone_name_get|timezone_offset_get|timezone_open|timezone_transitions_get|timezone_version_get|tmpfile|token_get_all|token_name|' + 'tokyotyrant|tokyotyrantquery|tokyotyranttable|tostring|tostring|touch|trait_exists|transliterator|traversable|trigger_error|trim|uasort|ucfirst|' + 'ucwords|udm_add_search_limit|udm_alloc_agent|udm_alloc_agent_array|udm_api_version|udm_cat_list|udm_cat_path|udm_check_charset|' + 'udm_check_stored|udm_clear_search_limits|udm_close_stored|udm_crc32|udm_errno|udm_error|udm_find|udm_free_agent|udm_free_ispell_data|' + 'udm_free_res|udm_get_doc_count|udm_get_res_field|udm_get_res_param|udm_hash32|udm_load_ispell_data|udm_open_stored|udm_set_agent_param|' + 'uksort|umask|underflowexception|unexpectedvalueexception|uniqid|unixtojd|unlink|unpack|unregister_tick_function|unserialize|unset|' + 'urldecode|urlencode|use_soap_error_handler|user_error|usleep|usort|utf8_decode|utf8_encode|v8js|v8jsexception|var_dump|var_export|variant|' + 'variant_abs|variant_add|variant_and|variant_cast|variant_cat|variant_cmp|variant_date_from_timestamp|variant_date_to_timestamp|' + 'variant_div|variant_eqv|variant_fix|variant_get_type|variant_idiv|variant_imp|variant_int|variant_mod|variant_mul|variant_neg|variant_not|' + 'variant_or|variant_pow|variant_round|variant_set|variant_set_type|variant_sub|variant_xor|version_compare|vfprintf|virtual|' + 'vpopmail_add_alias_domain|vpopmail_add_alias_domain_ex|vpopmail_add_domain|vpopmail_add_domain_ex|vpopmail_add_user|vpopmail_alias_add|' + 'vpopmail_alias_del|vpopmail_alias_del_domain|vpopmail_alias_get|vpopmail_alias_get_all|vpopmail_auth_user|vpopmail_del_domain|' + 'vpopmail_del_domain_ex|vpopmail_del_user|vpopmail_error|vpopmail_passwd|vpopmail_set_user_quota|vprintf|vsprintf|w32api_deftype|' + 'w32api_init_dtype|w32api_invoke_function|w32api_register_function|w32api_set_call_method|wddx_add_vars|wddx_deserialize|wddx_packet_end|' + 'wddx_packet_start|wddx_serialize_value|wddx_serialize_vars|win32_continue_service|win32_create_service|win32_delete_service|' + 'win32_get_last_control_message|win32_pause_service|win32_ps_list_procs|win32_ps_stat_mem|win32_ps_stat_proc|win32_query_service_status|' + 'win32_set_service_status|win32_start_service|win32_start_service_ctrl_dispatcher|win32_stop_service|wincache_fcache_fileinfo|' + 'wincache_fcache_meminfo|wincache_lock|wincache_ocache_fileinfo|wincache_ocache_meminfo|wincache_refresh_if_changed|' + 'wincache_rplist_fileinfo|wincache_rplist_meminfo|wincache_scache_info|wincache_scache_meminfo|wincache_ucache_add|wincache_ucache_cas|' + 'wincache_ucache_clear|wincache_ucache_dec|wincache_ucache_delete|wincache_ucache_exists|wincache_ucache_get|wincache_ucache_inc|' + 'wincache_ucache_info|wincache_ucache_meminfo|wincache_ucache_set|wincache_unlock|wordwrap|xattr_get|xattr_list|xattr_remove|xattr_set|' + 'xattr_supported|xdiff_file_bdiff|xdiff_file_bdiff_size|xdiff_file_bpatch|xdiff_file_diff|xdiff_file_diff_binary|xdiff_file_merge3|' + 'xdiff_file_patch|xdiff_file_patch_binary|xdiff_file_rabdiff|xdiff_string_bdiff|xdiff_string_bdiff_size|xdiff_string_bpatch|' + 'xdiff_string_diff|xdiff_string_diff_binary|xdiff_string_merge3|xdiff_string_patch|xdiff_string_patch_binary|xdiff_string_rabdiff|' + 'xhprof_disable|xhprof_enable|xhprof_sample_disable|xhprof_sample_enable|xml_error_string|xml_get_current_byte_index|' + 'xml_get_current_column_number|xml_get_current_line_number|xml_get_error_code|xml_parse|xml_parse_into_struct|xml_parser_create|' + 'xml_parser_create_ns|xml_parser_free|xml_parser_get_option|xml_parser_set_option|xml_set_character_data_handler|xml_set_default_handler|' + 'xml_set_element_handler|xml_set_end_namespace_decl_handler|xml_set_external_entity_ref_handler|xml_set_notation_decl_handler|' + 'xml_set_object|xml_set_processing_instruction_handler|xml_set_start_namespace_decl_handler|xml_set_unparsed_entity_decl_handler|xmlreader|' + 'xmlrpc_decode|xmlrpc_decode_request|xmlrpc_encode|xmlrpc_encode_request|xmlrpc_get_type|xmlrpc_is_fault|xmlrpc_parse_method_descriptions|' + 'xmlrpc_server_add_introspection_data|xmlrpc_server_call_method|xmlrpc_server_create|xmlrpc_server_destroy|' + 'xmlrpc_server_register_introspection_callback|xmlrpc_server_register_method|xmlrpc_set_type|xmlwriter_end_attribute|xmlwriter_end_cdata|' + 'xmlwriter_end_comment|xmlwriter_end_document|xmlwriter_end_dtd|xmlwriter_end_dtd_attlist|xmlwriter_end_dtd_element|' + 'xmlwriter_end_dtd_entity|xmlwriter_end_element|xmlwriter_end_pi|xmlwriter_flush|xmlwriter_full_end_element|xmlwriter_open_memory|' + 'xmlwriter_open_uri|xmlwriter_output_memory|xmlwriter_set_indent|xmlwriter_set_indent_string|xmlwriter_start_attribute|' + 'xmlwriter_start_attribute_ns|xmlwriter_start_cdata|xmlwriter_start_comment|xmlwriter_start_document|xmlwriter_start_dtd|' + 'xmlwriter_start_dtd_attlist|xmlwriter_start_dtd_element|xmlwriter_start_dtd_entity|xmlwriter_start_element|xmlwriter_start_element_ns|' + 'xmlwriter_start_pi|xmlwriter_text|xmlwriter_write_attribute|xmlwriter_write_attribute_ns|xmlwriter_write_cdata|xmlwriter_write_comment|' + 'xmlwriter_write_dtd|xmlwriter_write_dtd_attlist|xmlwriter_write_dtd_element|xmlwriter_write_dtd_entity|xmlwriter_write_element|' + 'xmlwriter_write_element_ns|xmlwriter_write_pi|xmlwriter_write_raw|xpath_eval|xpath_eval_expression|xpath_new_context|xpath_register_ns|' + 'xpath_register_ns_auto|xptr_eval|xptr_new_context|xslt_backend_info|xslt_backend_name|xslt_backend_version|xslt_create|xslt_errno|' + 'xslt_error|xslt_free|xslt_getopt|xslt_process|xslt_set_base|xslt_set_encoding|xslt_set_error_handler|xslt_set_log|xslt_set_object|' + 'xslt_set_sax_handler|xslt_set_sax_handlers|xslt_set_scheme_handler|xslt_set_scheme_handlers|xslt_setopt|xsltprocessor|yaml_emit|' + 'yaml_emit_file|yaml_parse|yaml_parse_file|yaml_parse_url|yaz_addinfo|yaz_ccl_conf|yaz_ccl_parse|yaz_close|yaz_connect|yaz_database|' + 'yaz_element|yaz_errno|yaz_error|yaz_es|yaz_es_result|yaz_get_option|yaz_hits|yaz_itemorder|yaz_present|yaz_range|yaz_record|yaz_scan|' + 'yaz_scan_result|yaz_schema|yaz_search|yaz_set_option|yaz_sort|yaz_syntax|yaz_wait|yp_all|yp_cat|yp_err_string|yp_errno|yp_first|' + 'yp_get_default_domain|yp_master|yp_match|yp_next|yp_order|zend_logo_guid|zend_thread_id|zend_version|zip_close|zip_entry_close|' + 'zip_entry_compressedsize|zip_entry_compressionmethod|zip_entry_filesize|zip_entry_name|zip_entry_open|zip_entry_read|zip_open|zip_read|' + 'ziparchive|ziparchive_addemptydir|ziparchive_addfile|ziparchive_addfromstring|ziparchive_close|ziparchive_deleteindex|' + 'ziparchive_deletename|ziparchive_extractto|ziparchive_getarchivecomment|ziparchive_getcommentindex|ziparchive_getcommentname|' + 'ziparchive_getfromindex|ziparchive_getfromname|ziparchive_getnameindex|ziparchive_getstatusstring|ziparchive_getstream|' + 'ziparchive_locatename|ziparchive_open|ziparchive_renameindex|ziparchive_renamename|ziparchive_setCommentName|ziparchive_setarchivecomment|' + 'ziparchive_setcommentindex|ziparchive_statindex|ziparchive_statname|ziparchive_unchangeall|ziparchive_unchangearchive|' + 'ziparchive_unchangeindex|ziparchive_unchangename|zlib_get_coding_type').split('|') ); var keywords = lang.arrayToMap( ('abstract|and|array|as|break|case|catch|class|clone|const|continue|declare|default|do|else|elseif|enddeclare|endfor|endforeach|endif|' + 'endswitch|endwhile|extends|final|for|foreach|function|global|goto|if|implements|interface|instanceof|namespace|new|or|private|protected|' + 'public|static|switch|throw|trait|try|use|var|while|xor').split('|') ); var languageConstructs = lang.arrayToMap( ('die|echo|empty|exit|eval|include|include_once|isset|list|require|require_once|return|print|unset').split('|') ); var builtinConstants = lang.arrayToMap( ('true|TRUE|false|FALSE|null|NULL|__CLASS__|__DIR__|__FILE__|__LINE__|__METHOD__|__FUNCTION__|__NAMESPACE__').split('|') ); var builtinVariables = lang.arrayToMap( ('$GLOBALS|$_SERVER|$_GET|$_POST|$_FILES|$_REQUEST|$_SESSION|$_ENV|$_COOKIE|$php_errormsg|$HTTP_RAW_POST_DATA|' + '$http_response_header|$argc|$argv').split('|') ); var builtinFunctionsDeprecated = lang.arrayToMap( ('key_exists|cairo_matrix_create_scale|cairo_matrix_create_translate|call_user_method|call_user_method_array|com_addref|com_get|' + 'com_invoke|com_isenum|com_load|com_release|com_set|connection_timeout|cubrid_load_from_glo|cubrid_new_glo|cubrid_save_to_glo|' + 'cubrid_send_glo|define_syslog_variables|dl|ereg|ereg_replace|eregi|eregi_replace|hw_documentattributes|hw_documentbodytag|' + 'hw_documentsize|hw_outputdocument|imagedashedline|maxdb_bind_param|maxdb_bind_result|maxdb_client_encoding|maxdb_close_long_data|' + 'maxdb_execute|maxdb_fetch|maxdb_get_metadata|maxdb_param_count|maxdb_send_long_data|mcrypt_ecb|mcrypt_generic_end|mime_content_type|' + 'mysql_createdb|mysql_dbname|mysql_db_query|mysql_drop_db|mysql_dropdb|mysql_escape_string|mysql_fieldflags|mysql_fieldflags|' + 'mysql_fieldname|mysql_fieldtable|mysql_fieldtype|mysql_freeresult|mysql_listdbs|mysql_list_fields|mysql_listfields|mysql_list_tables|' + 'mysql_listtables|mysql_numfields|mysql_numrows|mysql_selectdb|mysql_tablename|mysqli_bind_param|mysqli_bind_result|' + 'mysqli_disable_reads_from_master|mysqli_disable_rpl_parse|mysqli_enable_reads_from_master|mysqli_enable_rpl_parse|mysqli_execute|' + 'mysqli_fetch|mysqli_get_metadata|mysqli_master_query|mysqli_param_count|mysqli_rpl_parse_enabled|mysqli_rpl_probe|mysqli_rpl_query_type|' + 'mysqli_send_long_data|mysqli_send_query|mysqli_slave_query|ocibindbyname|ocicancel|ocicloselob|ocicollappend|ocicollassign|' + 'ocicollassignelem|ocicollgetelem|ocicollmax|ocicollsize|ocicolltrim|ocicolumnisnull|ocicolumnname|ocicolumnprecision|ocicolumnscale|' + 'ocicolumnsize|ocicolumntype|ocicolumntyperaw|ocicommit|ocidefinebyname|ocierror|ociexecute|ocifetch|ocifetchinto|ocifetchstatement|' + 'ocifreecollection|ocifreecursor|ocifreedesc|ocifreestatement|ociinternaldebug|ociloadlob|ocilogoff|ocilogon|ocinewcollection|' + 'ocinewcursor|ocinewdescriptor|ocinlogon|ocinumcols|ociparse|ociplogon|ociresult|ocirollback|ocirowcount|ocisavelob|ocisavelobfile|' + 'ociserverversion|ocisetprefetch|ocistatementtype|ociwritelobtofile|ociwritetemporarylob|PDF_add_annotation|PDF_add_bookmark|' + 'PDF_add_launchlink|PDF_add_locallink|PDF_add_note|PDF_add_outline|PDF_add_pdflink|PDF_add_weblink|PDF_attach_file|PDF_begin_page|' + 'PDF_begin_template|PDF_close_pdi|PDF_close|PDF_findfont|PDF_get_font|PDF_get_fontname|PDF_get_fontsize|PDF_get_image_height|' + 'PDF_get_image_width|PDF_get_majorversion|PDF_get_minorversion|PDF_get_pdi_parameter|PDF_get_pdi_value|PDF_open_ccitt|PDF_open_file|' + 'PDF_open_gif|PDF_open_image_file|PDF_open_image|PDF_open_jpeg|PDF_open_pdi|PDF_open_tiff|PDF_place_image|PDF_place_pdi_page|' + 'PDF_set_border_color|PDF_set_border_dash|PDF_set_border_style|PDF_set_char_spacing|PDF_set_duration|PDF_set_horiz_scaling|' + 'PDF_set_info_author|PDF_set_info_creator|PDF_set_info_keywords|PDF_set_info_subject|PDF_set_info_title|PDF_set_leading|' + 'PDF_set_text_matrix|PDF_set_text_rendering|PDF_set_text_rise|PDF_set_word_spacing|PDF_setgray_fill|PDF_setgray_stroke|PDF_setgray|' + 'PDF_setpolydash|PDF_setrgbcolor_fill|PDF_setrgbcolor_stroke|PDF_setrgbcolor|PDF_show_boxed|php_check_syntax|px_set_tablename|' + 'px_set_targetencoding|runkit_sandbox_output_handler|session_is_registered|session_register|session_unregister' + 'set_magic_quotes_runtime|magic_quotes_runtime|set_socket_blocking|socket_set_blocking|set_socket_timeout|socket_set_timeout|split|spliti|' + 'sql_regcase').split('|') ); var keywordsDeprecated = lang.arrayToMap( ('cfunction|old_function').split('|') ); var futureReserved = lang.arrayToMap([]); this.$rules = { "start" : [ { token : "comment", regex : /(?:#|\/\/)(?:[^?]|\?[^>])*/ }, docComment.getStartRule("doc-start"), { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string.regexp", regex : "[/](?:(?:\\[(?:\\\\]|[^\\]])+\\])|(?:\\\\/|[^\\]/]))*[/][gimy]*\\s*(?=[).,;]|$)" }, { token : "string", // " string start regex : '"', next : "qqstring" }, { token : "string", // ' string start regex : "'", next : "qstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language", // constants regex : "\\b(?:DEFAULT_INCLUDE_PATH|E_(?:ALL|CO(?:MPILE_(?:ERROR|WARNING)|RE_(?:ERROR|WARNING))|" + "ERROR|NOTICE|PARSE|STRICT|USER_(?:ERROR|NOTICE|WARNING)|WARNING)|P(?:EAR_(?:EXTENSION_DIR|INSTALL_DIR)|" + "HP_(?:BINDIR|CONFIG_FILE_(?:PATH|SCAN_DIR)|DATADIR|E(?:OL|XTENSION_DIR)|INT_(?:MAX|SIZE)|" + "L(?:IBDIR|OCALSTATEDIR)|O(?:S|UTPUT_HANDLER_(?:CONT|END|START))|PREFIX|S(?:API|HLIB_SUFFIX|YSCONFDIR)|" + "VERSION))|__COMPILER_HALT_OFFSET__)\\b" }, { token : ["keyword", "text", "support.class"], regex : "\\b(new)(\\s+)(\\w+)" }, { token : ["support.class", "keyword.operator"], regex : "\\b(\\w+)(::)" }, { token : "constant.language", // constants regex : "\\b(?:A(?:B(?:DAY_(?:1|2|3|4|5|6|7)|MON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9))|LT_DIGITS|M_STR|" + "SSERT_(?:ACTIVE|BAIL|CALLBACK|QUIET_EVAL|WARNING))|C(?:ASE_(?:LOWER|UPPER)|HAR_MAX|" + "O(?:DESET|NNECTION_(?:ABORTED|NORMAL|TIMEOUT)|UNT_(?:NORMAL|RECURSIVE))|" + "R(?:EDITS_(?:ALL|DOCS|FULLPAGE|G(?:ENERAL|ROUP)|MODULES|QA|SAPI)|NCYSTR|" + "YPT_(?:BLOWFISH|EXT_DES|MD5|S(?:ALT_LENGTH|TD_DES)))|URRENCY_SYMBOL)|D(?:AY_(?:1|2|3|4|5|6|7)|" + "ECIMAL_POINT|IRECTORY_SEPARATOR|_(?:FMT|T_FMT))|E(?:NT_(?:COMPAT|NOQUOTES|QUOTES)|RA(?:_(?:D_(?:FMT|T_FMT)|" + "T_FMT|YEAR)|)|XTR_(?:IF_EXISTS|OVERWRITE|PREFIX_(?:ALL|I(?:F_EXISTS|NVALID)|SAME)|SKIP))|FRAC_DIGITS|GROUPING|" + "HTML_(?:ENTITIES|SPECIALCHARS)|IN(?:FO_(?:ALL|C(?:ONFIGURATION|REDITS)|ENVIRONMENT|GENERAL|LICENSE|MODULES|VARIABLES)|" + "I_(?:ALL|PERDIR|SYSTEM|USER)|T_(?:CURR_SYMBOL|FRAC_DIGITS))|L(?:C_(?:ALL|C(?:OLLATE|TYPE)|M(?:ESSAGES|ONETARY)|NUMERIC|TIME)|" + "O(?:CK_(?:EX|NB|SH|UN)|G_(?:A(?:LERT|UTH(?:PRIV|))|C(?:ONS|R(?:IT|ON))|D(?:AEMON|EBUG)|E(?:MERG|RR)|INFO|KERN|" + "L(?:OCAL(?:0|1|2|3|4|5|6|7)|PR)|MAIL|N(?:DELAY|EWS|O(?:TICE|WAIT))|ODELAY|P(?:ERROR|ID)|SYSLOG|U(?:SER|UCP)|WARNING)))|" + "M(?:ON_(?:1(?:0|1|2|)|2|3|4|5|6|7|8|9|DECIMAL_POINT|GROUPING|THOUSANDS_SEP)|_(?:1_PI|2_(?:PI|SQRTPI)|E|L(?:N(?:10|2)|" + "OG(?:10E|2E))|PI(?:_(?:2|4)|)|SQRT(?:1_2|2)))|N(?:EGATIVE_SIGN|O(?:EXPR|STR)|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" + "P(?:ATH(?:INFO_(?:BASENAME|DIRNAME|EXTENSION)|_SEPARATOR)|M_STR|OSITIVE_SIGN|_(?:CS_PRECEDES|S(?:EP_BY_SPACE|IGN_POSN)))|" + "RADIXCHAR|S(?:EEK_(?:CUR|END|SET)|ORT_(?:ASC|DESC|NUMERIC|REGULAR|STRING)|TR_PAD_(?:BOTH|LEFT|RIGHT))|" + "T(?:HOUS(?:ANDS_SEP|EP)|_FMT(?:_AMPM|))|YES(?:EXPR|STR)|STD(?:IN|OUT|ERR))\\b" }, { token : function(value) { if (keywords.hasOwnProperty(value)) return "keyword"; else if (builtinConstants.hasOwnProperty(value)) return "constant.language"; else if (builtinVariables.hasOwnProperty(value)) return "variable.language"; else if (futureReserved.hasOwnProperty(value)) return "invalid.illegal"; else if (builtinFunctions.hasOwnProperty(value)) return "support.function"; else if (value == "debugger") return "invalid.deprecated"; else if(value.match(/^(\$[a-zA-Z_\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*|self|parent)$/)) return "variable"; return "identifier"; }, regex : /[a-zA-Z_$\x7f-\uffff][a-zA-Z0-9_\x7f-\uffff]*/ }, { onMatch : function(value, currentSate, state) { value = value.substr(3); if (value[0] == "'" || value[0] == '"') value = value.slice(1, -1); state.unshift(this.next, value); return "markup.list"; }, regex : /<<<(?:\w+|'\w+'|"\w+")$/, next: "heredoc" }, { token : "keyword.operator", regex : "::|!|\\$|%|&|\\*|\\-\\-|\\-|\\+\\+|\\+|~|===|==|!=|!==|<=|>=|=>|<<=|>>=|>>>=|<>|<|>|=|!|&&|\\|\\||\\?\\:|\\*=|%=|\\+=|\\-=|&=|\\^=|\\b(?:in|instanceof|new|delete|typeof|void)" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" } ], "heredoc" : [ { onMatch : function(value, currentSate, stack) { if (stack[1] != value) return "string"; stack.shift(); stack.shift(); return "markup.list"; }, regex : "^\\w+(?=;?$)", next: "start" }, { token: "string", regex : ".*" } ], "comment" : [ { token : "comment", regex : "\\*\\/", next : "start" }, { defaultToken : "comment" } ], "qqstring" : [ { token : "constant.language.escape", regex : '\\\\(?:[nrtvef\\\\"$]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2})' }, { token : "variable", regex : /\$[\w]+(?:\[[\w\]+]|[=\-]>\w+)?/ }, { token : "variable", regex : /\$\{[^"\}]+\}?/ // this is wrong but ok for now }, {token : "string", regex : '"', next : "start"}, {defaultToken : "string"} ], "qstring" : [ {token : "constant.language.escape", regex : /\\['\\]/}, {token : "string", regex : "'", next : "start"}, {defaultToken : "string"} ] }; this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("start") ]); }; oop.inherits(PhpLangHighlightRules, TextHighlightRules); var PhpHighlightRules = function() { HtmlHighlightRules.call(this); var startRules = [ { token : "support.php_tag", // php open tag regex : "<\\?(?:php|=)?", push : "php-start" } ]; var endRules = [ { token : "support.php_tag", // php close tag regex : "\\?>", next : "pop" } ]; for (var key in this.$rules) this.$rules[key].unshift.apply(this.$rules[key], startRules); this.embedRules(PhpLangHighlightRules, "php-", endRules, ["start"]); this.normalizeRules(); }; oop.inherits(PhpHighlightRules, HtmlHighlightRules); exports.PhpHighlightRules = PhpHighlightRules; exports.PhpLangHighlightRules = PhpLangHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/php_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var functionMap = { "abs": [ "int abs(int number)", "Return the absolute value of the number" ], "acos": [ "float acos(float number)", "Return the arc cosine of the number in radians" ], "acosh": [ "float acosh(float number)", "Returns the inverse hyperbolic cosine of the number, i.e. the value whose hyperbolic cosine is number" ], "addGlob": [ "bool addGlob(string pattern[,int flags [, array options]])", "Add files matching the glob pattern. See php's glob for the pattern syntax." ], "addPattern": [ "bool addPattern(string pattern[, string path [, array options]])", "Add files matching the pcre pattern. See php's pcre for the pattern syntax." ], "addcslashes": [ "string addcslashes(string str, string charlist)", "Escapes all chars mentioned in charlist with backslash. It creates octal representations if asked to backslash characters with 8th bit set or with ASCII<32 (except '\\n', '\\r', '\\t' etc...)" ], "addslashes": [ "string addslashes(string str)", "Escapes single quote, double quotes and backslash characters in a string with backslashes" ], "apache_child_terminate": [ "bool apache_child_terminate(void)", "Terminate apache process after this request" ], "apache_get_modules": [ "array apache_get_modules(void)", "Get a list of loaded Apache modules" ], "apache_get_version": [ "string apache_get_version(void)", "Fetch Apache version" ], "apache_getenv": [ "bool apache_getenv(string variable [, bool walk_to_top])", "Get an Apache subprocess_env variable" ], "apache_lookup_uri": [ "object apache_lookup_uri(string URI)", "Perform a partial request of the given URI to obtain information about it" ], "apache_note": [ "string apache_note(string note_name [, string note_value])", "Get and set Apache request notes" ], "apache_request_auth_name": [ "string apache_request_auth_name()", "" ], "apache_request_auth_type": [ "string apache_request_auth_type()", "" ], "apache_request_discard_request_body": [ "long apache_request_discard_request_body()", "" ], "apache_request_err_headers_out": [ "array apache_request_err_headers_out([{string name|array list} [, string value [, bool replace = false]]])", "* fetch all headers that go out in case of an error or a subrequest" ], "apache_request_headers": [ "array apache_request_headers(void)", "Fetch all HTTP request headers" ], "apache_request_headers_in": [ "array apache_request_headers_in()", "* fetch all incoming request headers" ], "apache_request_headers_out": [ "array apache_request_headers_out([{string name|array list} [, string value [, bool replace = false]]])", "* fetch all outgoing request headers" ], "apache_request_is_initial_req": [ "bool apache_request_is_initial_req()", "" ], "apache_request_log_error": [ "boolean apache_request_log_error(string message, [long facility])", "" ], "apache_request_meets_conditions": [ "long apache_request_meets_conditions()", "" ], "apache_request_remote_host": [ "int apache_request_remote_host([int type])", "" ], "apache_request_run": [ "long apache_request_run()", "This is a wrapper for ap_sub_run_req and ap_destory_sub_req. It takes sub_request, runs it, destroys it, and returns it's status." ], "apache_request_satisfies": [ "long apache_request_satisfies()", "" ], "apache_request_server_port": [ "int apache_request_server_port()", "" ], "apache_request_set_etag": [ "void apache_request_set_etag()", "" ], "apache_request_set_last_modified": [ "void apache_request_set_last_modified()", "" ], "apache_request_some_auth_required": [ "bool apache_request_some_auth_required()", "" ], "apache_request_sub_req_lookup_file": [ "object apache_request_sub_req_lookup_file(string file)", "Returns sub-request for the specified file. You would need to run it yourself with run()." ], "apache_request_sub_req_lookup_uri": [ "object apache_request_sub_req_lookup_uri(string uri)", "Returns sub-request for the specified uri. You would need to run it yourself with run()" ], "apache_request_sub_req_method_uri": [ "object apache_request_sub_req_method_uri(string method, string uri)", "Returns sub-request for the specified file. You would need to run it yourself with run()." ], "apache_request_update_mtime": [ "long apache_request_update_mtime([int dependency_mtime])", "" ], "apache_reset_timeout": [ "bool apache_reset_timeout(void)", "Reset the Apache write timer" ], "apache_response_headers": [ "array apache_response_headers(void)", "Fetch all HTTP response headers" ], "apache_setenv": [ "bool apache_setenv(string variable, string value [, bool walk_to_top])", "Set an Apache subprocess_env variable" ], "array_change_key_case": [ "array array_change_key_case(array input [, int case=CASE_LOWER])", "Retuns an array with all string keys lowercased [or uppercased]" ], "array_chunk": [ "array array_chunk(array input, int size [, bool preserve_keys])", "Split array into chunks" ], "array_combine": [ "array array_combine(array keys, array values)", "Creates an array by using the elements of the first parameter as keys and the elements of the second as the corresponding values" ], "array_count_values": [ "array array_count_values(array input)", "Return the value as key and the frequency of that value in input as value" ], "array_diff": [ "array array_diff(array arr1, array arr2 [, array ...])", "Returns the entries of arr1 that have values which are not present in any of the others arguments." ], "array_diff_assoc": [ "array array_diff_assoc(array arr1, array arr2 [, array ...])", "Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal" ], "array_diff_key": [ "array array_diff_key(array arr1, array arr2 [, array ...])", "Returns the entries of arr1 that have keys which are not present in any of the others arguments. This function is like array_diff() but works on the keys instead of the values. The associativity is preserved." ], "array_diff_uassoc": [ "array array_diff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func)", "Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Elements are compared by user supplied function." ], "array_diff_ukey": [ "array array_diff_ukey(array arr1, array arr2 [, array ...], callback key_comp_func)", "Returns the entries of arr1 that have keys which are not present in any of the others arguments. User supplied function is used for comparing the keys. This function is like array_udiff() but works on the keys instead of the values. The associativity is preserved." ], "array_fill": [ "array array_fill(int start_key, int num, mixed val)", "Create an array containing num elements starting with index start_key each initialized to val" ], "array_fill_keys": [ "array array_fill_keys(array keys, mixed val)", "Create an array using the elements of the first parameter as keys each initialized to val" ], "array_filter": [ "array array_filter(array input [, mixed callback])", "Filters elements from the array via the callback." ], "array_flip": [ "array array_flip(array input)", "Return array with key <-> value flipped" ], "array_intersect": [ "array array_intersect(array arr1, array arr2 [, array ...])", "Returns the entries of arr1 that have values which are present in all the other arguments" ], "array_intersect_assoc": [ "array array_intersect_assoc(array arr1, array arr2 [, array ...])", "Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check" ], "array_intersect_key": [ "array array_intersect_key(array arr1, array arr2 [, array ...])", "Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). Equivalent of array_intersect_assoc() but does not do compare of the data." ], "array_intersect_uassoc": [ "array array_intersect_uassoc(array arr1, array arr2 [, array ...], callback key_compare_func)", "Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check and they are compared by using an user-supplied callback." ], "array_intersect_ukey": [ "array array_intersect_ukey(array arr1, array arr2 [, array ...], callback key_compare_func)", "Returns the entries of arr1 that have keys which are present in all the other arguments. Kind of equivalent to array_diff(array_keys($arr1), array_keys($arr2)[,array_keys(...)]). The comparison of the keys is performed by a user supplied function. Equivalent of array_intersect_uassoc() but does not do compare of the data." ], "array_key_exists": [ "bool array_key_exists(mixed key, array search)", "Checks if the given key or index exists in the array" ], "array_keys": [ "array array_keys(array input [, mixed search_value[, bool strict]])", "Return just the keys from the input array, optionally only for the specified search_value" ], "array_map": [ "array array_map(mixed callback, array input1 [, array input2 ,...])", "Applies the callback to the elements in given arrays." ], "array_merge": [ "array array_merge(array arr1, array arr2 [, array ...])", "Merges elements from passed arrays into one array" ], "array_merge_recursive": [ "array array_merge_recursive(array arr1, array arr2 [, array ...])", "Recursively merges elements from passed arrays into one array" ], "array_multisort": [ "bool array_multisort(array ar1 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]] [, array ar2 [, SORT_ASC|SORT_DESC [, SORT_REGULAR|SORT_NUMERIC|SORT_STRING]], ...])", "Sort multiple arrays at once similar to how ORDER BY clause works in SQL" ], "array_pad": [ "array array_pad(array input, int pad_size, mixed pad_value)", "Returns a copy of input array padded with pad_value to size pad_size" ], "array_pop": [ "mixed array_pop(array stack)", "Pops an element off the end of the array" ], "array_product": [ "mixed array_product(array input)", "Returns the product of the array entries" ], "array_push": [ "int array_push(array stack, mixed var [, mixed ...])", "Pushes elements onto the end of the array" ], "array_rand": [ "mixed array_rand(array input [, int num_req])", "Return key\/keys for random entry\/entries in the array" ], "array_reduce": [ "mixed array_reduce(array input, mixed callback [, mixed initial])", "Iteratively reduce the array to a single value via the callback." ], "array_replace": [ "array array_replace(array arr1, array arr2 [, array ...])", "Replaces elements from passed arrays into one array" ], "array_replace_recursive": [ "array array_replace_recursive(array arr1, array arr2 [, array ...])", "Recursively replaces elements from passed arrays into one array" ], "array_reverse": [ "array array_reverse(array input [, bool preserve keys])", "Return input as a new array with the order of the entries reversed" ], "array_search": [ "mixed array_search(mixed needle, array haystack [, bool strict])", "Searches the array for a given value and returns the corresponding key if successful" ], "array_shift": [ "mixed array_shift(array stack)", "Pops an element off the beginning of the array" ], "array_slice": [ "array array_slice(array input, int offset [, int length [, bool preserve_keys]])", "Returns elements specified by offset and length" ], "array_splice": [ "array array_splice(array input, int offset [, int length [, array replacement]])", "Removes the elements designated by offset and length and replace them with supplied array" ], "array_sum": [ "mixed array_sum(array input)", "Returns the sum of the array entries" ], "array_udiff": [ "array array_udiff(array arr1, array arr2 [, array ...], callback data_comp_func)", "Returns the entries of arr1 that have values which are not present in any of the others arguments. Elements are compared by user supplied function." ], "array_udiff_assoc": [ "array array_udiff_assoc(array arr1, array arr2 [, array ...], callback key_comp_func)", "Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys are compared by user supplied function." ], "array_udiff_uassoc": [ "array array_udiff_uassoc(array arr1, array arr2 [, array ...], callback data_comp_func, callback key_comp_func)", "Returns the entries of arr1 that have values which are not present in any of the others arguments but do additional checks whether the keys are equal. Keys and elements are compared by user supplied functions." ], "array_uintersect": [ "array array_uintersect(array arr1, array arr2 [, array ...], callback data_compare_func)", "Returns the entries of arr1 that have values which are present in all the other arguments. Data is compared by using an user-supplied callback." ], "array_uintersect_assoc": [ "array array_uintersect_assoc(array arr1, array arr2 [, array ...], callback data_compare_func)", "Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Data is compared by using an user-supplied callback." ], "array_uintersect_uassoc": [ "array array_uintersect_uassoc(array arr1, array arr2 [, array ...], callback data_compare_func, callback key_compare_func)", "Returns the entries of arr1 that have values which are present in all the other arguments. Keys are used to do more restrictive check. Both data and keys are compared by using user-supplied callbacks." ], "array_unique": [ "array array_unique(array input [, int sort_flags])", "Removes duplicate values from array" ], "array_unshift": [ "int array_unshift(array stack, mixed var [, mixed ...])", "Pushes elements onto the beginning of the array" ], "array_values": [ "array array_values(array input)", "Return just the values from the input array" ], "array_walk": [ "bool array_walk(array input, string funcname [, mixed userdata])", "Apply a user function to every member of an array" ], "array_walk_recursive": [ "bool array_walk_recursive(array input, string funcname [, mixed userdata])", "Apply a user function recursively to every member of an array" ], "arsort": [ "bool arsort(array &array_arg [, int sort_flags])", "Sort an array in reverse order and maintain index association" ], "asin": [ "float asin(float number)", "Returns the arc sine of the number in radians" ], "asinh": [ "float asinh(float number)", "Returns the inverse hyperbolic sine of the number, i.e. the value whose hyperbolic sine is number" ], "asort": [ "bool asort(array &array_arg [, int sort_flags])", "Sort an array and maintain index association" ], "assert": [ "int assert(string|bool assertion)", "Checks if assertion is false" ], "assert_options": [ "mixed assert_options(int what [, mixed value])", "Set\/get the various assert flags" ], "atan": [ "float atan(float number)", "Returns the arc tangent of the number in radians" ], "atan2": [ "float atan2(float y, float x)", "Returns the arc tangent of y\/x, with the resulting quadrant determined by the signs of y and x" ], "atanh": [ "float atanh(float number)", "Returns the inverse hyperbolic tangent of the number, i.e. the value whose hyperbolic tangent is number" ], "attachIterator": [ "void attachIterator(Iterator iterator[, mixed info])", "Attach a new iterator" ], "base64_decode": [ "string base64_decode(string str[, bool strict])", "Decodes string using MIME base64 algorithm" ], "base64_encode": [ "string base64_encode(string str)", "Encodes string using MIME base64 algorithm" ], "base_convert": [ "string base_convert(string number, int frombase, int tobase)", "Converts a number in a string from any base <= 36 to any base <= 36" ], "basename": [ "string basename(string path [, string suffix])", "Returns the filename component of the path" ], "bcadd": [ "string bcadd(string left_operand, string right_operand [, int scale])", "Returns the sum of two arbitrary precision numbers" ], "bccomp": [ "int bccomp(string left_operand, string right_operand [, int scale])", "Compares two arbitrary precision numbers" ], "bcdiv": [ "string bcdiv(string left_operand, string right_operand [, int scale])", "Returns the quotient of two arbitrary precision numbers (division)" ], "bcmod": [ "string bcmod(string left_operand, string right_operand)", "Returns the modulus of the two arbitrary precision operands" ], "bcmul": [ "string bcmul(string left_operand, string right_operand [, int scale])", "Returns the multiplication of two arbitrary precision numbers" ], "bcpow": [ "string bcpow(string x, string y [, int scale])", "Returns the value of an arbitrary precision number raised to the power of another" ], "bcpowmod": [ "string bcpowmod(string x, string y, string mod [, int scale])", "Returns the value of an arbitrary precision number raised to the power of another reduced by a modulous" ], "bcscale": [ "bool bcscale(int scale)", "Sets default scale parameter for all bc math functions" ], "bcsqrt": [ "string bcsqrt(string operand [, int scale])", "Returns the square root of an arbitray precision number" ], "bcsub": [ "string bcsub(string left_operand, string right_operand [, int scale])", "Returns the difference between two arbitrary precision numbers" ], "bin2hex": [ "string bin2hex(string data)", "Converts the binary representation of data to hex" ], "bind_textdomain_codeset": [ "string bind_textdomain_codeset (string domain, string codeset)", "Specify the character encoding in which the messages from the DOMAIN message catalog will be returned." ], "bindec": [ "int bindec(string binary_number)", "Returns the decimal equivalent of the binary number" ], "bindtextdomain": [ "string bindtextdomain(string domain_name, string dir)", "Bind to the text domain domain_name, looking for translations in dir. Returns the current domain" ], "birdstep_autocommit": [ "bool birdstep_autocommit(int index)", "" ], "birdstep_close": [ "bool birdstep_close(int id)", "" ], "birdstep_commit": [ "bool birdstep_commit(int index)", "" ], "birdstep_connect": [ "int birdstep_connect(string server, string user, string pass)", "" ], "birdstep_exec": [ "int birdstep_exec(int index, string exec_str)", "" ], "birdstep_fetch": [ "bool birdstep_fetch(int index)", "" ], "birdstep_fieldname": [ "string birdstep_fieldname(int index, int col)", "" ], "birdstep_fieldnum": [ "int birdstep_fieldnum(int index)", "" ], "birdstep_freeresult": [ "bool birdstep_freeresult(int index)", "" ], "birdstep_off_autocommit": [ "bool birdstep_off_autocommit(int index)", "" ], "birdstep_result": [ "mixed birdstep_result(int index, mixed col)", "" ], "birdstep_rollback": [ "bool birdstep_rollback(int index)", "" ], "bzcompress": [ "string bzcompress(string source [, int blocksize100k [, int workfactor]])", "Compresses a string into BZip2 encoded data" ], "bzdecompress": [ "string bzdecompress(string source [, int small])", "Decompresses BZip2 compressed data" ], "bzerrno": [ "int bzerrno(resource bz)", "Returns the error number" ], "bzerror": [ "array bzerror(resource bz)", "Returns the error number and error string in an associative array" ], "bzerrstr": [ "string bzerrstr(resource bz)", "Returns the error string" ], "bzopen": [ "resource bzopen(string|int file|fp, string mode)", "Opens a new BZip2 stream" ], "bzread": [ "string bzread(resource bz[, int length])", "Reads up to length bytes from a BZip2 stream, or 1024 bytes if length is not specified" ], "cal_days_in_month": [ "int cal_days_in_month(int calendar, int month, int year)", "Returns the number of days in a month for a given year and calendar" ], "cal_from_jd": [ "array cal_from_jd(int jd, int calendar)", "Converts from Julian Day Count to a supported calendar and return extended information" ], "cal_info": [ "array cal_info([int calendar])", "Returns information about a particular calendar" ], "cal_to_jd": [ "int cal_to_jd(int calendar, int month, int day, int year)", "Converts from a supported calendar to Julian Day Count" ], "call_user_func": [ "mixed call_user_func(mixed function_name [, mixed parmeter] [, mixed ...])", "Call a user function which is the first parameter" ], "call_user_func_array": [ "mixed call_user_func_array(string function_name, array parameters)", "Call a user function which is the first parameter with the arguments contained in array" ], "call_user_method": [ "mixed call_user_method(string method_name, mixed object [, mixed parameter] [, mixed ...])", "Call a user method on a specific object or class" ], "call_user_method_array": [ "mixed call_user_method_array(string method_name, mixed object, array params)", "Call a user method on a specific object or class using a parameter array" ], "ceil": [ "float ceil(float number)", "Returns the next highest integer value of the number" ], "chdir": [ "bool chdir(string directory)", "Change the current directory" ], "checkdate": [ "bool checkdate(int month, int day, int year)", "Returns true(1) if it is a valid date in gregorian calendar" ], "chgrp": [ "bool chgrp(string filename, mixed group)", "Change file group" ], "chmod": [ "bool chmod(string filename, int mode)", "Change file mode" ], "chown": [ "bool chown (string filename, mixed user)", "Change file owner" ], "chr": [ "string chr(int ascii)", "Converts ASCII code to a character" ], "chroot": [ "bool chroot(string directory)", "Change root directory" ], "chunk_split": [ "string chunk_split(string str [, int chunklen [, string ending]])", "Returns split line" ], "class_alias": [ "bool class_alias(string user_class_name , string alias_name [, bool autoload])", "Creates an alias for user defined class" ], "class_exists": [ "bool class_exists(string classname [, bool autoload])", "Checks if the class exists" ], "class_implements": [ "array class_implements(mixed what [, bool autoload ])", "Return all classes and interfaces implemented by SPL" ], "class_parents": [ "array class_parents(object instance [, boolean autoload = true])", "Return an array containing the names of all parent classes" ], "clearstatcache": [ "void clearstatcache([bool clear_realpath_cache[, string filename]])", "Clear file stat cache" ], "closedir": [ "void closedir([resource dir_handle])", "Close directory connection identified by the dir_handle" ], "closelog": [ "bool closelog(void)", "Close connection to system logger" ], "collator_asort": [ "bool collator_asort( Collator $coll, array(string) $arr )", "* Sort array using specified collator, maintaining index association." ], "collator_compare": [ "int collator_compare( Collator $coll, string $str1, string $str2 )", "* Compare two strings." ], "collator_create": [ "Collator collator_create( string $locale )", "* Create collator." ], "collator_get_attribute": [ "int collator_get_attribute( Collator $coll, int $attr )", "* Get collation attribute value." ], "collator_get_error_code": [ "int collator_get_error_code( Collator $coll )", "* Get collator's last error code." ], "collator_get_error_message": [ "string collator_get_error_message( Collator $coll )", "* Get text description for collator's last error code." ], "collator_get_locale": [ "string collator_get_locale( Collator $coll, int $type )", "* Gets the locale name of the collator." ], "collator_get_sort_key": [ "bool collator_get_sort_key( Collator $coll, string $str )", "* Get a sort key for a string from a Collator. }}}" ], "collator_get_strength": [ "int collator_get_strength(Collator coll)", "* Returns the current collation strength." ], "collator_set_attribute": [ "bool collator_set_attribute( Collator $coll, int $attr, int $val )", "* Set collation attribute." ], "collator_set_strength": [ "bool collator_set_strength(Collator coll, int strength)", "* Set the collation strength." ], "collator_sort": [ "bool collator_sort( Collator $coll, array(string) $arr [, int $sort_flags] )", "* Sort array using specified collator." ], "collator_sort_with_sort_keys": [ "bool collator_sort_with_sort_keys( Collator $coll, array(string) $arr )", "* Equivalent to standard PHP sort using Collator. * Uses ICU ucol_getSortKey for performance." ], "com_create_guid": [ "string com_create_guid()", "Generate a globally unique identifier (GUID)" ], "com_event_sink": [ "bool com_event_sink(object comobject, object sinkobject [, mixed sinkinterface])", "Connect events from a COM object to a PHP object" ], "com_get_active_object": [ "object com_get_active_object(string progid [, int code_page ])", "Returns a handle to an already running instance of a COM object" ], "com_load_typelib": [ "bool com_load_typelib(string typelib_name [, int case_insensitive])", "Loads a Typelibrary and registers its constants" ], "com_message_pump": [ "bool com_message_pump([int timeoutms])", "Process COM messages, sleeping for up to timeoutms milliseconds" ], "com_print_typeinfo": [ "bool com_print_typeinfo(object comobject | string typelib, string dispinterface, bool wantsink)", "Print out a PHP class definition for a dispatchable interface" ], "compact": [ "array compact(mixed var_names [, mixed ...])", "Creates a hash containing variables and their values" ], "compose_locale": [ "static string compose_locale($array)", "* Creates a locale by combining the parts of locale-ID passed * }}}" ], "confirm_extname_compiled": [ "string confirm_extname_compiled(string arg)", "Return a string to confirm that the module is compiled in" ], "connection_aborted": [ "int connection_aborted(void)", "Returns true if client disconnected" ], "connection_status": [ "int connection_status(void)", "Returns the connection status bitfield" ], "constant": [ "mixed constant(string const_name)", "Given the name of a constant this function will return the constant's associated value" ], "convert_cyr_string": [ "string convert_cyr_string(string str, string from, string to)", "Convert from one Cyrillic character set to another" ], "convert_uudecode": [ "string convert_uudecode(string data)", "decode a uuencoded string" ], "convert_uuencode": [ "string convert_uuencode(string data)", "uuencode a string" ], "copy": [ "bool copy(string source_file, string destination_file [, resource context])", "Copy a file" ], "cos": [ "float cos(float number)", "Returns the cosine of the number in radians" ], "cosh": [ "float cosh(float number)", "Returns the hyperbolic cosine of the number, defined as (exp(number) + exp(-number))\/2" ], "count": [ "int count(mixed var [, int mode])", "Count the number of elements in a variable (usually an array)" ], "count_chars": [ "mixed count_chars(string input [, int mode])", "Returns info about what characters are used in input" ], "crc32": [ "string crc32(string str)", "Calculate the crc32 polynomial of a string" ], "create_function": [ "string create_function(string args, string code)", "Creates an anonymous function, and returns its name (funny, eh?)" ], "crypt": [ "string crypt(string str [, string salt])", "Hash a string" ], "ctype_alnum": [ "bool ctype_alnum(mixed c)", "Checks for alphanumeric character(s)" ], "ctype_alpha": [ "bool ctype_alpha(mixed c)", "Checks for alphabetic character(s)" ], "ctype_cntrl": [ "bool ctype_cntrl(mixed c)", "Checks for control character(s)" ], "ctype_digit": [ "bool ctype_digit(mixed c)", "Checks for numeric character(s)" ], "ctype_graph": [ "bool ctype_graph(mixed c)", "Checks for any printable character(s) except space" ], "ctype_lower": [ "bool ctype_lower(mixed c)", "Checks for lowercase character(s)" ], "ctype_print": [ "bool ctype_print(mixed c)", "Checks for printable character(s)" ], "ctype_punct": [ "bool ctype_punct(mixed c)", "Checks for any printable character which is not whitespace or an alphanumeric character" ], "ctype_space": [ "bool ctype_space(mixed c)", "Checks for whitespace character(s)" ], "ctype_upper": [ "bool ctype_upper(mixed c)", "Checks for uppercase character(s)" ], "ctype_xdigit": [ "bool ctype_xdigit(mixed c)", "Checks for character(s) representing a hexadecimal digit" ], "curl_close": [ "void curl_close(resource ch)", "Close a cURL session" ], "curl_copy_handle": [ "resource curl_copy_handle(resource ch)", "Copy a cURL handle along with all of it's preferences" ], "curl_errno": [ "int curl_errno(resource ch)", "Return an integer containing the last error number" ], "curl_error": [ "string curl_error(resource ch)", "Return a string contain the last error for the current session" ], "curl_exec": [ "bool curl_exec(resource ch)", "Perform a cURL session" ], "curl_getinfo": [ "mixed curl_getinfo(resource ch [, int option])", "Get information regarding a specific transfer" ], "curl_init": [ "resource curl_init([string url])", "Initialize a cURL session" ], "curl_multi_add_handle": [ "int curl_multi_add_handle(resource mh, resource ch)", "Add a normal cURL handle to a cURL multi handle" ], "curl_multi_close": [ "void curl_multi_close(resource mh)", "Close a set of cURL handles" ], "curl_multi_exec": [ "int curl_multi_exec(resource mh, int &still_running)", "Run the sub-connections of the current cURL handle" ], "curl_multi_getcontent": [ "string curl_multi_getcontent(resource ch)", "Return the content of a cURL handle if CURLOPT_RETURNTRANSFER is set" ], "curl_multi_info_read": [ "array curl_multi_info_read(resource mh [, long msgs_in_queue])", "Get information about the current transfers" ], "curl_multi_init": [ "resource curl_multi_init(void)", "Returns a new cURL multi handle" ], "curl_multi_remove_handle": [ "int curl_multi_remove_handle(resource mh, resource ch)", "Remove a multi handle from a set of cURL handles" ], "curl_multi_select": [ "int curl_multi_select(resource mh[, double timeout])", "Get all the sockets associated with the cURL extension, which can then be \"selected\"" ], "curl_setopt": [ "bool curl_setopt(resource ch, int option, mixed value)", "Set an option for a cURL transfer" ], "curl_setopt_array": [ "bool curl_setopt_array(resource ch, array options)", "Set an array of option for a cURL transfer" ], "curl_version": [ "array curl_version([int version])", "Return cURL version information." ], "current": [ "mixed current(array array_arg)", "Return the element currently pointed to by the internal array pointer" ], "date": [ "string date(string format [, long timestamp])", "Format a local date\/time" ], "date_add": [ "DateTime date_add(DateTime object, DateInterval interval)", "Adds an interval to the current date in object." ], "date_create": [ "DateTime date_create([string time[, DateTimeZone object]])", "Returns new DateTime object" ], "date_create_from_format": [ "DateTime date_create_from_format(string format, string time[, DateTimeZone object])", "Returns new DateTime object formatted according to the specified format" ], "date_date_set": [ "DateTime date_date_set(DateTime object, long year, long month, long day)", "Sets the date." ], "date_default_timezone_get": [ "string date_default_timezone_get()", "Gets the default timezone used by all date\/time functions in a script" ], "date_default_timezone_set": [ "bool date_default_timezone_set(string timezone_identifier)", "Sets the default timezone used by all date\/time functions in a script" ], "date_diff": [ "DateInterval date_diff(DateTime object [, bool absolute])", "Returns the difference between two DateTime objects." ], "date_format": [ "string date_format(DateTime object, string format)", "Returns date formatted according to given format" ], "date_get_last_errors": [ "array date_get_last_errors()", "Returns the warnings and errors found while parsing a date\/time string." ], "date_interval_create_from_date_string": [ "DateInterval date_interval_create_from_date_string(string time)", "Uses the normal date parsers and sets up a DateInterval from the relative parts of the parsed string" ], "date_interval_format": [ "string date_interval_format(DateInterval object, string format)", "Formats the interval." ], "date_isodate_set": [ "DateTime date_isodate_set(DateTime object, long year, long week[, long day])", "Sets the ISO date." ], "date_modify": [ "DateTime date_modify(DateTime object, string modify)", "Alters the timestamp." ], "date_offset_get": [ "long date_offset_get(DateTime object)", "Returns the DST offset." ], "date_parse": [ "array date_parse(string date)", "Returns associative array with detailed info about given date" ], "date_parse_from_format": [ "array date_parse_from_format(string format, string date)", "Returns associative array with detailed info about given date" ], "date_sub": [ "DateTime date_sub(DateTime object, DateInterval interval)", "Subtracts an interval to the current date in object." ], "date_sun_info": [ "array date_sun_info(long time, float latitude, float longitude)", "Returns an array with information about sun set\/rise and twilight begin\/end" ], "date_sunrise": [ "mixed date_sunrise(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])", "Returns time of sunrise for a given day and location" ], "date_sunset": [ "mixed date_sunset(mixed time [, int format [, float latitude [, float longitude [, float zenith [, float gmt_offset]]]]])", "Returns time of sunset for a given day and location" ], "date_time_set": [ "DateTime date_time_set(DateTime object, long hour, long minute[, long second])", "Sets the time." ], "date_timestamp_get": [ "long date_timestamp_get(DateTime object)", "Gets the Unix timestamp." ], "date_timestamp_set": [ "DateTime date_timestamp_set(DateTime object, long unixTimestamp)", "Sets the date and time based on an Unix timestamp." ], "date_timezone_get": [ "DateTimeZone date_timezone_get(DateTime object)", "Return new DateTimeZone object relative to give DateTime" ], "date_timezone_set": [ "DateTime date_timezone_set(DateTime object, DateTimeZone object)", "Sets the timezone for the DateTime object." ], "datefmt_create": [ "IntlDateFormatter datefmt_create(string $locale, long date_type, long time_type[, string $timezone_str, long $calendar, string $pattern] )", "* Create formatter." ], "datefmt_format": [ "string datefmt_format( [mixed]int $args or array $args )", "* Format the time value as a string. }}}" ], "datefmt_get_calendar": [ "string datefmt_get_calendar( IntlDateFormatter $mf )", "* Get formatter calendar." ], "datefmt_get_datetype": [ "string datefmt_get_datetype( IntlDateFormatter $mf )", "* Get formatter datetype." ], "datefmt_get_error_code": [ "int datefmt_get_error_code( IntlDateFormatter $nf )", "* Get formatter's last error code." ], "datefmt_get_error_message": [ "string datefmt_get_error_message( IntlDateFormatter $coll )", "* Get text description for formatter's last error code." ], "datefmt_get_locale": [ "string datefmt_get_locale(IntlDateFormatter $mf)", "* Get formatter locale." ], "datefmt_get_pattern": [ "string datefmt_get_pattern( IntlDateFormatter $mf )", "* Get formatter pattern." ], "datefmt_get_timetype": [ "string datefmt_get_timetype( IntlDateFormatter $mf )", "* Get formatter timetype." ], "datefmt_get_timezone_id": [ "string datefmt_get_timezone_id( IntlDateFormatter $mf )", "* Get formatter timezone_id." ], "datefmt_isLenient": [ "string datefmt_isLenient(IntlDateFormatter $mf)", "* Get formatter locale." ], "datefmt_localtime": [ "integer datefmt_localtime( IntlDateFormatter $fmt, string $text_to_parse[, int $parse_pos ])", "* Parse the string $value to a localtime array }}}" ], "datefmt_parse": [ "integer datefmt_parse( IntlDateFormatter $fmt, string $text_to_parse [, int $parse_pos] )", "* Parse the string $value starting at parse_pos to a Unix timestamp -int }}}" ], "datefmt_setLenient": [ "string datefmt_setLenient(IntlDateFormatter $mf)", "* Set formatter lenient." ], "datefmt_set_calendar": [ "bool datefmt_set_calendar( IntlDateFormatter $mf, int $calendar )", "* Set formatter calendar." ], "datefmt_set_pattern": [ "bool datefmt_set_pattern( IntlDateFormatter $mf, string $pattern )", "* Set formatter pattern." ], "datefmt_set_timezone_id": [ "boolean datefmt_set_timezone_id( IntlDateFormatter $mf,$timezone_id)", "* Set formatter timezone_id." ], "dba_close": [ "void dba_close(resource handle)", "Closes database" ], "dba_delete": [ "bool dba_delete(string key, resource handle)", "Deletes the entry associated with key If inifile: remove all other key lines" ], "dba_exists": [ "bool dba_exists(string key, resource handle)", "Checks, if the specified key exists" ], "dba_fetch": [ "string dba_fetch(string key, [int skip ,] resource handle)", "Fetches the data associated with key" ], "dba_firstkey": [ "string dba_firstkey(resource handle)", "Resets the internal key pointer and returns the first key" ], "dba_handlers": [ "array dba_handlers([bool full_info])", "List configured database handlers" ], "dba_insert": [ "bool dba_insert(string key, string value, resource handle)", "If not inifile: Insert value as key, return false, if key exists already If inifile: Add vakue as key (next instance of key)" ], "dba_key_split": [ "array|false dba_key_split(string key)", "Splits an inifile key into an array of the form array(0=>group,1=>value_name) but returns false if input is false or null" ], "dba_list": [ "array dba_list()", "List opened databases" ], "dba_nextkey": [ "string dba_nextkey(resource handle)", "Returns the next key" ], "dba_open": [ "resource dba_open(string path, string mode [, string handlername, string ...])", "Opens path using the specified handler in mode" ], "dba_optimize": [ "bool dba_optimize(resource handle)", "Optimizes (e.g. clean up, vacuum) database" ], "dba_popen": [ "resource dba_popen(string path, string mode [, string handlername, string ...])", "Opens path using the specified handler in mode persistently" ], "dba_replace": [ "bool dba_replace(string key, string value, resource handle)", "Inserts value as key, replaces key, if key exists already If inifile: remove all other key lines" ], "dba_sync": [ "bool dba_sync(resource handle)", "Synchronizes database" ], "dcgettext": [ "string dcgettext(string domain_name, string msgid, long category)", "Return the translation of msgid for domain_name and category, or msgid unaltered if a translation does not exist" ], "dcngettext": [ "string dcngettext (string domain, string msgid1, string msgid2, int n, int category)", "Plural version of dcgettext()" ], "debug_backtrace": [ "array debug_backtrace([bool provide_object])", "Return backtrace as array" ], "debug_print_backtrace": [ "void debug_print_backtrace(void) *\/", "ZEND_FUNCTION(debug_print_backtrace) { zend_execute_data *ptr, *skip; int lineno; char *function_name; char *filename; char *class_name = NULL; char *call_type; char *include_filename = NULL; zval *arg_array = NULL; int indent = 0; if (zend_parse_parameters_none() == FAILURE) { return; } ptr = EG(current_execute_data); \/* skip debug_backtrace()" ], "debug_zval_dump": [ "void debug_zval_dump(mixed var)", "Dumps a string representation of an internal zend value to output." ], "decbin": [ "string decbin(int decimal_number)", "Returns a string containing a binary representation of the number" ], "dechex": [ "string dechex(int decimal_number)", "Returns a string containing a hexadecimal representation of the given number" ], "decoct": [ "string decoct(int decimal_number)", "Returns a string containing an octal representation of the given number" ], "define": [ "bool define(string constant_name, mixed value, boolean case_insensitive=false)", "Define a new constant" ], "define_syslog_variables": [ "void define_syslog_variables(void)", "Initializes all syslog-related variables" ], "defined": [ "bool defined(string constant_name)", "Check whether a constant exists" ], "deg2rad": [ "float deg2rad(float number)", "Converts the number in degrees to the radian equivalent" ], "dgettext": [ "string dgettext(string domain_name, string msgid)", "Return the translation of msgid for domain_name, or msgid unaltered if a translation does not exist" ], "die": [ "void die([mixed status])", "Output a message and terminate the current script" ], "dir": [ "object dir(string directory[, resource context])", "Directory class with properties, handle and class and methods read, rewind and close" ], "dirname": [ "string dirname(string path)", "Returns the directory name component of the path" ], "disk_free_space": [ "float disk_free_space(string path)", "Get free disk space for filesystem that path is on" ], "disk_total_space": [ "float disk_total_space(string path)", "Get total disk space for filesystem that path is on" ], "display_disabled_function": [ "void display_disabled_function(void)", "Dummy function which displays an error when a disabled function is called." ], "dl": [ "int dl(string extension_filename)", "Load a PHP extension at runtime" ], "dngettext": [ "string dngettext (string domain, string msgid1, string msgid2, int count)", "Plural version of dgettext()" ], "dns_check_record": [ "bool dns_check_record(string host [, string type])", "Check DNS records corresponding to a given Internet host name or IP address" ], "dns_get_mx": [ "bool dns_get_mx(string hostname, array mxhosts [, array weight])", "Get MX records corresponding to a given Internet host name" ], "dns_get_record": [ "array|false dns_get_record(string hostname [, int type[, array authns, array addtl]])", "Get any Resource Record corresponding to a given Internet host name" ], "dom_attr_is_id": [ "boolean dom_attr_is_id();", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Attr-isId Since: DOM Level 3" ], "dom_characterdata_append_data": [ "void dom_characterdata_append_data(string arg);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-32791A2F Since:" ], "dom_characterdata_delete_data": [ "void dom_characterdata_delete_data(int offset, int count);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-7C603781 Since:" ], "dom_characterdata_insert_data": [ "void dom_characterdata_insert_data(int offset, string arg);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-3EDB695F Since:" ], "dom_characterdata_replace_data": [ "void dom_characterdata_replace_data(int offset, int count, string arg);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-E5CBA7FB Since:" ], "dom_characterdata_substring_data": [ "string dom_characterdata_substring_data(int offset, int count);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-6531BCCF Since:" ], "dom_document_adopt_node": [ "DOMNode dom_document_adopt_node(DOMNode source);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-Document3-adoptNode Since: DOM Level 3" ], "dom_document_create_attribute": [ "DOMAttr dom_document_create_attribute(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-1084891198 Since:" ], "dom_document_create_attribute_ns": [ "DOMAttr dom_document_create_attribute_ns(string namespaceURI, string qualifiedName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-DocCrAttrNS Since: DOM Level 2" ], "dom_document_create_cdatasection": [ "DOMCdataSection dom_document_create_cdatasection(string data);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-D26C0AF8 Since:" ], "dom_document_create_comment": [ "DOMComment dom_document_create_comment(string data);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-1334481328 Since:" ], "dom_document_create_document_fragment": [ "DOMDocumentFragment dom_document_create_document_fragment();", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-35CB04B5 Since:" ], "dom_document_create_element": [ "DOMElement dom_document_create_element(string tagName [, string value]);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-2141741547 Since:" ], "dom_document_create_element_ns": [ "DOMElement dom_document_create_element_ns(string namespaceURI, string qualifiedName [,string value]);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-DocCrElNS Since: DOM Level 2" ], "dom_document_create_entity_reference": [ "DOMEntityReference dom_document_create_entity_reference(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-392B75AE Since:" ], "dom_document_create_processing_instruction": [ "DOMProcessingInstruction dom_document_create_processing_instruction(string target, string data);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-135944439 Since:" ], "dom_document_create_text_node": [ "DOMText dom_document_create_text_node(string data);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-1975348127 Since:" ], "dom_document_get_element_by_id": [ "DOMElement dom_document_get_element_by_id(string elementId);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-getElBId Since: DOM Level 2" ], "dom_document_get_elements_by_tag_name": [ "DOMNodeList dom_document_get_elements_by_tag_name(string tagname);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-A6C9094 Since:" ], "dom_document_get_elements_by_tag_name_ns": [ "DOMNodeList dom_document_get_elements_by_tag_name_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-getElBTNNS Since: DOM Level 2" ], "dom_document_import_node": [ "DOMNode dom_document_import_node(DOMNode importedNode, boolean deep);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Core-Document-importNode Since: DOM Level 2" ], "dom_document_load": [ "DOMNode dom_document_load(string source [, int options]);", "URL: http:\/\/www.w3.org\/TR\/DOM-Level-3-LS\/load-save.html#LS-DocumentLS-load Since: DOM Level 3" ], "dom_document_load_html": [ "DOMNode dom_document_load_html(string source);", "Since: DOM extended" ], "dom_document_load_html_file": [ "DOMNode dom_document_load_html_file(string source);", "Since: DOM extended" ], "dom_document_loadxml": [ "DOMNode dom_document_loadxml(string source [, int options]);", "URL: http:\/\/www.w3.org\/TR\/DOM-Level-3-LS\/load-save.html#LS-DocumentLS-loadXML Since: DOM Level 3" ], "dom_document_normalize_document": [ "void dom_document_normalize_document();", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-Document3-normalizeDocument Since: DOM Level 3" ], "dom_document_relaxNG_validate_file": [ "boolean dom_document_relaxNG_validate_file(string filename); *\/", "PHP_FUNCTION(dom_document_relaxNG_validate_file) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } \/* }}} end dom_document_relaxNG_validate_file" ], "dom_document_relaxNG_validate_xml": [ "boolean dom_document_relaxNG_validate_xml(string source); *\/", "PHP_FUNCTION(dom_document_relaxNG_validate_xml) { _dom_document_relaxNG_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } \/* }}} end dom_document_relaxNG_validate_xml" ], "dom_document_rename_node": [ "DOMNode dom_document_rename_node(node n, string namespaceURI, string qualifiedName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-Document3-renameNode Since: DOM Level 3" ], "dom_document_save": [ "int dom_document_save(string file);", "Convenience method to save to file" ], "dom_document_save_html": [ "string dom_document_save_html();", "Convenience method to output as html" ], "dom_document_save_html_file": [ "int dom_document_save_html_file(string file);", "Convenience method to save to file as html" ], "dom_document_savexml": [ "string dom_document_savexml([node n]);", "URL: http:\/\/www.w3.org\/TR\/DOM-Level-3-LS\/load-save.html#LS-DocumentLS-saveXML Since: DOM Level 3" ], "dom_document_schema_validate": [ "boolean dom_document_schema_validate(string source); *\/", "PHP_FUNCTION(dom_document_schema_validate_xml) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_STRING); } \/* }}} end dom_document_schema_validate" ], "dom_document_schema_validate_file": [ "boolean dom_document_schema_validate_file(string filename); *\/", "PHP_FUNCTION(dom_document_schema_validate_file) { _dom_document_schema_validate(INTERNAL_FUNCTION_PARAM_PASSTHRU, DOM_LOAD_FILE); } \/* }}} end dom_document_schema_validate_file" ], "dom_document_validate": [ "boolean dom_document_validate();", "Since: DOM extended" ], "dom_document_xinclude": [ "int dom_document_xinclude([int options])", "Substitutues xincludes in a DomDocument" ], "dom_domconfiguration_can_set_parameter": [ "boolean dom_domconfiguration_can_set_parameter(string name, domuserdata value);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#DOMConfiguration-canSetParameter Since:" ], "dom_domconfiguration_get_parameter": [ "domdomuserdata dom_domconfiguration_get_parameter(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#DOMConfiguration-getParameter Since:" ], "dom_domconfiguration_set_parameter": [ "dom_void dom_domconfiguration_set_parameter(string name, domuserdata value);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#DOMConfiguration-property Since:" ], "dom_domerrorhandler_handle_error": [ "dom_boolean dom_domerrorhandler_handle_error(domerror error);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#ID-ERRORS-DOMErrorHandler-handleError Since:" ], "dom_domimplementation_create_document": [ "DOMDocument dom_domimplementation_create_document(string namespaceURI, string qualifiedName, DOMDocumentType doctype);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Level-2-Core-DOM-createDocument Since: DOM Level 2" ], "dom_domimplementation_create_document_type": [ "DOMDocumentType dom_domimplementation_create_document_type(string qualifiedName, string publicId, string systemId);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Level-2-Core-DOM-createDocType Since: DOM Level 2" ], "dom_domimplementation_get_feature": [ "DOMNode dom_domimplementation_get_feature(string feature, string version);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#DOMImplementation3-getFeature Since: DOM Level 3" ], "dom_domimplementation_has_feature": [ "boolean dom_domimplementation_has_feature(string feature, string version);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#ID-5CED94D7 Since:" ], "dom_domimplementationlist_item": [ "domdomimplementation dom_domimplementationlist_item(int index);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#DOMImplementationList-item Since:" ], "dom_domimplementationsource_get_domimplementation": [ "domdomimplementation dom_domimplementationsource_get_domimplementation(string features);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#ID-getDOMImpl Since:" ], "dom_domimplementationsource_get_domimplementations": [ "domimplementationlist dom_domimplementationsource_get_domimplementations(string features);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#ID-getDOMImpls Since:" ], "dom_domstringlist_item": [ "domstring dom_domstringlist_item(int index);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#DOMStringList-item Since:" ], "dom_element_get_attribute": [ "string dom_element_get_attribute(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-666EE0F9 Since:" ], "dom_element_get_attribute_node": [ "DOMAttr dom_element_get_attribute_node(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-217A91B8 Since:" ], "dom_element_get_attribute_node_ns": [ "DOMAttr dom_element_get_attribute_node_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElGetAtNodeNS Since: DOM Level 2" ], "dom_element_get_attribute_ns": [ "string dom_element_get_attribute_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElGetAttrNS Since: DOM Level 2" ], "dom_element_get_elements_by_tag_name": [ "DOMNodeList dom_element_get_elements_by_tag_name(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-1938918D Since:" ], "dom_element_get_elements_by_tag_name_ns": [ "DOMNodeList dom_element_get_elements_by_tag_name_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-A6C90942 Since: DOM Level 2" ], "dom_element_has_attribute": [ "boolean dom_element_has_attribute(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElHasAttr Since: DOM Level 2" ], "dom_element_has_attribute_ns": [ "boolean dom_element_has_attribute_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElHasAttrNS Since: DOM Level 2" ], "dom_element_remove_attribute": [ "void dom_element_remove_attribute(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-6D6AC0F9 Since:" ], "dom_element_remove_attribute_node": [ "DOMAttr dom_element_remove_attribute_node(DOMAttr oldAttr);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-D589198 Since:" ], "dom_element_remove_attribute_ns": [ "void dom_element_remove_attribute_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElRemAtNS Since: DOM Level 2" ], "dom_element_set_attribute": [ "void dom_element_set_attribute(string name, string value);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-F68F082 Since:" ], "dom_element_set_attribute_node": [ "DOMAttr dom_element_set_attribute_node(DOMAttr newAttr);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-887236154 Since:" ], "dom_element_set_attribute_node_ns": [ "DOMAttr dom_element_set_attribute_node_ns(DOMAttr newAttr);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElSetAtNodeNS Since: DOM Level 2" ], "dom_element_set_attribute_ns": [ "void dom_element_set_attribute_ns(string namespaceURI, string qualifiedName, string value);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElSetAttrNS Since: DOM Level 2" ], "dom_element_set_id_attribute": [ "void dom_element_set_id_attribute(string name, boolean isId);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElSetIdAttr Since: DOM Level 3" ], "dom_element_set_id_attribute_node": [ "void dom_element_set_id_attribute_node(attr idAttr, boolean isId);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElSetIdAttrNode Since: DOM Level 3" ], "dom_element_set_id_attribute_ns": [ "void dom_element_set_id_attribute_ns(string namespaceURI, string localName, boolean isId);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-ElSetIdAttrNS Since: DOM Level 3" ], "dom_import_simplexml": [ "somNode dom_import_simplexml(sxeobject node)", "Get a simplexml_element object from dom to allow for processing" ], "dom_namednodemap_get_named_item": [ "DOMNode dom_namednodemap_get_named_item(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-1074577549 Since:" ], "dom_namednodemap_get_named_item_ns": [ "DOMNode dom_namednodemap_get_named_item_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-getNamedItemNS Since: DOM Level 2" ], "dom_namednodemap_item": [ "DOMNode dom_namednodemap_item(int index);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-349467F9 Since:" ], "dom_namednodemap_remove_named_item": [ "DOMNode dom_namednodemap_remove_named_item(string name);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-D58B193 Since:" ], "dom_namednodemap_remove_named_item_ns": [ "DOMNode dom_namednodemap_remove_named_item_ns(string namespaceURI, string localName);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-removeNamedItemNS Since: DOM Level 2" ], "dom_namednodemap_set_named_item": [ "DOMNode dom_namednodemap_set_named_item(DOMNode arg);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-1025163788 Since:" ], "dom_namednodemap_set_named_item_ns": [ "DOMNode dom_namednodemap_set_named_item_ns(DOMNode arg);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-setNamedItemNS Since: DOM Level 2" ], "dom_namelist_get_name": [ "string dom_namelist_get_name(int index);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#NameList-getName Since:" ], "dom_namelist_get_namespace_uri": [ "string dom_namelist_get_namespace_uri(int index);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#NameList-getNamespaceURI Since:" ], "dom_node_append_child": [ "DomNode dom_node_append_child(DomNode newChild);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-184E7107 Since:" ], "dom_node_clone_node": [ "DomNode dom_node_clone_node(boolean deep);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-3A0ED0A4 Since:" ], "dom_node_compare_document_position": [ "short dom_node_compare_document_position(DomNode other);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Node3-compareDocumentPosition Since: DOM Level 3" ], "dom_node_get_feature": [ "DomNode dom_node_get_feature(string feature, string version);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Node3-getFeature Since: DOM Level 3" ], "dom_node_get_user_data": [ "mixed dom_node_get_user_data(string key);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Node3-getUserData Since: DOM Level 3" ], "dom_node_has_attributes": [ "boolean dom_node_has_attributes();", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-NodeHasAttrs Since: DOM Level 2" ], "dom_node_has_child_nodes": [ "boolean dom_node_has_child_nodes();", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-810594187 Since:" ], "dom_node_insert_before": [ "domnode dom_node_insert_before(DomNode newChild, DomNode refChild);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-952280727 Since:" ], "dom_node_is_default_namespace": [ "boolean dom_node_is_default_namespace(string namespaceURI);", "URL: http:\/\/www.w3.org\/TR\/DOM-Level-3-Core\/core.html#Node3-isDefaultNamespace Since: DOM Level 3" ], "dom_node_is_equal_node": [ "boolean dom_node_is_equal_node(DomNode arg);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Node3-isEqualNode Since: DOM Level 3" ], "dom_node_is_same_node": [ "boolean dom_node_is_same_node(DomNode other);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Node3-isSameNode Since: DOM Level 3" ], "dom_node_is_supported": [ "boolean dom_node_is_supported(string feature, string version);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-Level-2-Core-Node-supports Since: DOM Level 2" ], "dom_node_lookup_namespace_uri": [ "string dom_node_lookup_namespace_uri(string prefix);", "URL: http:\/\/www.w3.org\/TR\/DOM-Level-3-Core\/core.html#Node3-lookupNamespaceURI Since: DOM Level 3" ], "dom_node_lookup_prefix": [ "string dom_node_lookup_prefix(string namespaceURI);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Node3-lookupNamespacePrefix Since: DOM Level 3" ], "dom_node_normalize": [ "void dom_node_normalize();", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-normalize Since:" ], "dom_node_remove_child": [ "DomNode dom_node_remove_child(DomNode oldChild);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-1734834066 Since:" ], "dom_node_replace_child": [ "DomNode dom_node_replace_child(DomNode newChild, DomNode oldChild);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-785887307 Since:" ], "dom_node_set_user_data": [ "mixed dom_node_set_user_data(string key, mixed data, userdatahandler handler);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#Node3-setUserData Since: DOM Level 3" ], "dom_nodelist_item": [ "DOMNode dom_nodelist_item(int index);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#ID-844377136 Since:" ], "dom_string_extend_find_offset16": [ "int dom_string_extend_find_offset16(int offset32);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#i18n-methods-StringExtend-findOffset16 Since:" ], "dom_string_extend_find_offset32": [ "int dom_string_extend_find_offset32(int offset16);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#i18n-methods-StringExtend-findOffset32 Since:" ], "dom_text_is_whitespace_in_element_content": [ "boolean dom_text_is_whitespace_in_element_content();", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-Text3-isWhitespaceInElementContent Since: DOM Level 3" ], "dom_text_replace_whole_text": [ "DOMText dom_text_replace_whole_text(string content);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-Text3-replaceWholeText Since: DOM Level 3" ], "dom_text_split_text": [ "DOMText dom_text_split_text(int offset);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#core-ID-38853C1D Since:" ], "dom_userdatahandler_handle": [ "dom_void dom_userdatahandler_handle(short operation, string key, domobject data, node src, node dst);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html#ID-handleUserDataEvent Since:" ], "dom_xpath_evaluate": [ "mixed dom_xpath_evaluate(string expr [,DOMNode context]); *\/", "PHP_FUNCTION(dom_xpath_evaluate) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_EVALUATE); } \/* }}} end dom_xpath_evaluate" ], "dom_xpath_query": [ "DOMNodeList dom_xpath_query(string expr [,DOMNode context]); *\/", "PHP_FUNCTION(dom_xpath_query) { php_xpath_eval(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_DOM_XPATH_QUERY); } \/* }}} end dom_xpath_query" ], "dom_xpath_register_ns": [ "boolean dom_xpath_register_ns(string prefix, string uri); *\/", "PHP_FUNCTION(dom_xpath_register_ns) { zval *id; xmlXPathContextPtr ctxp; int prefix_len, ns_uri_len; dom_xpath_object *intern; unsigned char *prefix, *ns_uri; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Oss\", &id, dom_xpath_class_entry, &prefix, &prefix_len, &ns_uri, &ns_uri_len) == FAILURE) { return; } intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); ctxp = (xmlXPathContextPtr) intern->ptr; if (ctxp == NULL) { php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid XPath Context\"); RETURN_FALSE; } if (xmlXPathRegisterNs(ctxp, prefix, ns_uri) != 0) { RETURN_FALSE } RETURN_TRUE; } \/* }}}" ], "dom_xpath_register_php_functions": [ "void dom_xpath_register_php_functions() *\/", "PHP_FUNCTION(dom_xpath_register_php_functions) { zval *id; dom_xpath_object *intern; zval *array_value, **entry, *new_string; int name_len = 0; char *name; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"a\", &array_value) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); zend_hash_internal_pointer_reset(Z_ARRVAL_P(array_value)); while (zend_hash_get_current_data(Z_ARRVAL_P(array_value), (void **)&entry) == SUCCESS) { SEPARATE_ZVAL(entry); convert_to_string_ex(entry); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, Z_STRVAL_PP(entry), Z_STRLEN_PP(entry) + 1, &new_string, sizeof(zval*), NULL); zend_hash_move_forward(Z_ARRVAL_P(array_value)); } intern->registerPhpFunctions = 2; RETURN_TRUE; } else if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s\", &name, &name_len) == SUCCESS) { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); MAKE_STD_ZVAL(new_string); ZVAL_LONG(new_string,1); zend_hash_update(intern->registered_phpfunctions, name, name_len + 1, &new_string, sizeof(zval*), NULL); intern->registerPhpFunctions = 2; } else { intern = (dom_xpath_object *)zend_object_store_get_object(id TSRMLS_CC); intern->registerPhpFunctions = 1; } } \/* }}} end dom_xpath_register_php_functions" ], "each": [ "array each(array arr)", "Return the currently pointed key..value pair in the passed array, and advance the pointer to the next element" ], "easter_date": [ "int easter_date([int year])", "Return the timestamp of midnight on Easter of a given year (defaults to current year)" ], "easter_days": [ "int easter_days([int year, [int method]])", "Return the number of days after March 21 that Easter falls on for a given year (defaults to current year)" ], "echo": [ "void echo(string arg1 [, string ...])", "Output one or more strings" ], "empty": [ "bool empty( mixed var )", "Determine whether a variable is empty" ], "enchant_broker_describe": [ "array enchant_broker_describe(resource broker)", "Enumerates the Enchant providers and tells you some rudimentary information about them. The same info is provided through phpinfo()" ], "enchant_broker_dict_exists": [ "bool enchant_broker_dict_exists(resource broker, string tag)", "Wether a dictionary exists or not. Using non-empty tag" ], "enchant_broker_free": [ "boolean enchant_broker_free(resource broker)", "Destroys the broker object and its dictionnaries" ], "enchant_broker_free_dict": [ "resource enchant_broker_free_dict(resource dict)", "Free the dictionary resource" ], "enchant_broker_get_dict_path": [ "string enchant_broker_get_dict_path(resource broker, int dict_type)", "Get the directory path for a given backend, works with ispell and myspell" ], "enchant_broker_get_error": [ "string enchant_broker_get_error(resource broker)", "Returns the last error of the broker" ], "enchant_broker_init": [ "resource enchant_broker_init()", "create a new broker object capable of requesting" ], "enchant_broker_list_dicts": [ "string enchant_broker_list_dicts(resource broker)", "Lists the dictionaries available for the given broker" ], "enchant_broker_request_dict": [ "resource enchant_broker_request_dict(resource broker, string tag)", "create a new dictionary using tag, the non-empty language tag you wish to request a dictionary for (\"en_US\", \"de_DE\", ...)" ], "enchant_broker_request_pwl_dict": [ "resource enchant_broker_request_pwl_dict(resource broker, string filename)", "creates a dictionary using a PWL file. A PWL file is personal word file one word per line. It must exist before the call." ], "enchant_broker_set_dict_path": [ "bool enchant_broker_set_dict_path(resource broker, int dict_type, string value)", "Set the directory path for a given backend, works with ispell and myspell" ], "enchant_broker_set_ordering": [ "bool enchant_broker_set_ordering(resource broker, string tag, string ordering)", "Declares a preference of dictionaries to use for the language described\/referred to by 'tag'. The ordering is a comma delimited list of provider names. As a special exception, the \"*\" tag can be used as a language tag to declare a default ordering for any language that does not explictly declare an ordering." ], "enchant_dict_add_to_personal": [ "void enchant_dict_add_to_personal(resource dict, string word)", "add 'word' to personal word list" ], "enchant_dict_add_to_session": [ "void enchant_dict_add_to_session(resource dict, string word)", "add 'word' to this spell-checking session" ], "enchant_dict_check": [ "bool enchant_dict_check(resource dict, string word)", "If the word is correctly spelled return true, otherwise return false" ], "enchant_dict_describe": [ "array enchant_dict_describe(resource dict)", "Describes an individual dictionary 'dict'" ], "enchant_dict_get_error": [ "string enchant_dict_get_error(resource dict)", "Returns the last error of the current spelling-session" ], "enchant_dict_is_in_session": [ "bool enchant_dict_is_in_session(resource dict, string word)", "whether or not 'word' exists in this spelling-session" ], "enchant_dict_quick_check": [ "bool enchant_dict_quick_check(resource dict, string word [, array &suggestions])", "If the word is correctly spelled return true, otherwise return false, if suggestions variable is provided, fill it with spelling alternatives." ], "enchant_dict_store_replacement": [ "void enchant_dict_store_replacement(resource dict, string mis, string cor)", "add a correction for 'mis' using 'cor'. Notes that you replaced @mis with @cor, so it's possibly more likely that future occurrences of @mis will be replaced with @cor. So it might bump @cor up in the suggestion list." ], "enchant_dict_suggest": [ "array enchant_dict_suggest(resource dict, string word)", "Will return a list of values if any of those pre-conditions are not met." ], "end": [ "mixed end(array array_arg)", "Advances array argument's internal pointer to the last element and return it" ], "ereg": [ "int ereg(string pattern, string string [, array registers])", "Regular expression match" ], "ereg_replace": [ "string ereg_replace(string pattern, string replacement, string string)", "Replace regular expression" ], "eregi": [ "int eregi(string pattern, string string [, array registers])", "Case-insensitive regular expression match" ], "eregi_replace": [ "string eregi_replace(string pattern, string replacement, string string)", "Case insensitive replace regular expression" ], "error_get_last": [ "array error_get_last()", "Get the last occurred error as associative array. Returns NULL if there hasn't been an error yet." ], "error_log": [ "bool error_log(string message [, int message_type [, string destination [, string extra_headers]]])", "Send an error message somewhere" ], "error_reporting": [ "int error_reporting([int new_error_level])", "Return the current error_reporting level, and if an argument was passed - change to the new level" ], "escapeshellarg": [ "string escapeshellarg(string arg)", "Quote and escape an argument for use in a shell command" ], "escapeshellcmd": [ "string escapeshellcmd(string command)", "Escape shell metacharacters" ], "exec": [ "string exec(string command [, array &output [, int &return_value]])", "Execute an external program" ], "exif_imagetype": [ "int exif_imagetype(string imagefile)", "Get the type of an image" ], "exif_read_data": [ "array exif_read_data(string filename [, sections_needed [, sub_arrays[, read_thumbnail]]])", "Reads header data from the JPEG\/TIFF image filename and optionally reads the internal thumbnails" ], "exif_tagname": [ "string exif_tagname(index)", "Get headername for index or false if not defined" ], "exif_thumbnail": [ "string exif_thumbnail(string filename [, &width, &height [, &imagetype]])", "Reads the embedded thumbnail" ], "exit": [ "void exit([mixed status])", "Output a message and terminate the current script" ], "exp": [ "float exp(float number)", "Returns e raised to the power of the number" ], "explode": [ "array explode(string separator, string str [, int limit])", "Splits a string on string separator and return array of components. If limit is positive only limit number of components is returned. If limit is negative all components except the last abs(limit) are returned." ], "expm1": [ "float expm1(float number)", "Returns exp(number) - 1, computed in a way that accurate even when the value of number is close to zero" ], "extension_loaded": [ "bool extension_loaded(string extension_name)", "Returns true if the named extension is loaded" ], "extract": [ "int extract(array var_array [, int extract_type [, string prefix]])", "Imports variables into symbol table from an array" ], "ezmlm_hash": [ "int ezmlm_hash(string addr)", "Calculate EZMLM list hash value." ], "fclose": [ "bool fclose(resource fp)", "Close an open file pointer" ], "feof": [ "bool feof(resource fp)", "Test for end-of-file on a file pointer" ], "fflush": [ "bool fflush(resource fp)", "Flushes output" ], "fgetc": [ "string fgetc(resource fp)", "Get a character from file pointer" ], "fgetcsv": [ "array fgetcsv(resource fp [,int length [, string delimiter [, string enclosure [, string escape]]]])", "Get line from file pointer and parse for CSV fields" ], "fgets": [ "string fgets(resource fp[, int length])", "Get a line from file pointer" ], "fgetss": [ "string fgetss(resource fp [, int length [, string allowable_tags]])", "Get a line from file pointer and strip HTML tags" ], "file": [ "array file(string filename [, int flags[, resource context]])", "Read entire file into an array" ], "file_exists": [ "bool file_exists(string filename)", "Returns true if filename exists" ], "file_get_contents": [ "string file_get_contents(string filename [, bool use_include_path [, resource context [, long offset [, long maxlen]]]])", "Read the entire file into a string" ], "file_put_contents": [ "int file_put_contents(string file, mixed data [, int flags [, resource context]])", "Write\/Create a file with contents data and return the number of bytes written" ], "fileatime": [ "int fileatime(string filename)", "Get last access time of file" ], "filectime": [ "int filectime(string filename)", "Get inode modification time of file" ], "filegroup": [ "int filegroup(string filename)", "Get file group" ], "fileinode": [ "int fileinode(string filename)", "Get file inode" ], "filemtime": [ "int filemtime(string filename)", "Get last modification time of file" ], "fileowner": [ "int fileowner(string filename)", "Get file owner" ], "fileperms": [ "int fileperms(string filename)", "Get file permissions" ], "filesize": [ "int filesize(string filename)", "Get file size" ], "filetype": [ "string filetype(string filename)", "Get file type" ], "filter_has_var": [ "mixed filter_has_var(constant type, string variable_name)", "* Returns true if the variable with the name 'name' exists in source." ], "filter_input": [ "mixed filter_input(constant type, string variable_name [, long filter [, mixed options]])", "* Returns the filtered variable 'name'* from source `type`." ], "filter_input_array": [ "mixed filter_input_array(constant type, [, mixed options]])", "* Returns an array with all arguments defined in 'definition'." ], "filter_var": [ "mixed filter_var(mixed variable [, long filter [, mixed options]])", "* Returns the filtered version of the vriable." ], "filter_var_array": [ "mixed filter_var_array(array data, [, mixed options]])", "* Returns an array with all arguments defined in 'definition'." ], "finfo_buffer": [ "string finfo_buffer(resource finfo, char *string [, int options [, resource context]])", "Return infromation about a string buffer." ], "finfo_close": [ "resource finfo_close(resource finfo)", "Close fileinfo resource." ], "finfo_file": [ "string finfo_file(resource finfo, char *file_name [, int options [, resource context]])", "Return information about a file." ], "finfo_open": [ "resource finfo_open([int options [, string arg]])", "Create a new fileinfo resource." ], "finfo_set_flags": [ "bool finfo_set_flags(resource finfo, int options)", "Set libmagic configuration options." ], "floatval": [ "float floatval(mixed var)", "Get the float value of a variable" ], "flock": [ "bool flock(resource fp, int operation [, int &wouldblock])", "Portable file locking" ], "floor": [ "float floor(float number)", "Returns the next lowest integer value from the number" ], "flush": [ "void flush(void)", "Flush the output buffer" ], "fmod": [ "float fmod(float x, float y)", "Returns the remainder of dividing x by y as a float" ], "fnmatch": [ "bool fnmatch(string pattern, string filename [, int flags])", "Match filename against pattern" ], "fopen": [ "resource fopen(string filename, string mode [, bool use_include_path [, resource context]])", "Open a file or a URL and return a file pointer" ], "forward_static_call": [ "mixed forward_static_call(mixed function_name [, mixed parmeter] [, mixed ...])", "Call a user function which is the first parameter" ], "fpassthru": [ "int fpassthru(resource fp)", "Output all remaining data from a file pointer" ], "fprintf": [ "int fprintf(resource stream, string format [, mixed arg1 [, mixed ...]])", "Output a formatted string into a stream" ], "fputcsv": [ "int fputcsv(resource fp, array fields [, string delimiter [, string enclosure]])", "Format line as CSV and write to file pointer" ], "fread": [ "string fread(resource fp, int length)", "Binary-safe file read" ], "frenchtojd": [ "int frenchtojd(int month, int day, int year)", "Converts a french republic calendar date to julian day count" ], "fscanf": [ "mixed fscanf(resource stream, string format [, string ...])", "Implements a mostly ANSI compatible fscanf()" ], "fseek": [ "int fseek(resource fp, int offset [, int whence])", "Seek on a file pointer" ], "fsockopen": [ "resource fsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])", "Open Internet or Unix domain socket connection" ], "fstat": [ "array fstat(resource fp)", "Stat() on a filehandle" ], "ftell": [ "int ftell(resource fp)", "Get file pointer's read\/write position" ], "ftok": [ "int ftok(string pathname, string proj)", "Convert a pathname and a project identifier to a System V IPC key" ], "ftp_alloc": [ "bool ftp_alloc(resource stream, int size[, &response])", "Attempt to allocate space on the remote FTP server" ], "ftp_cdup": [ "bool ftp_cdup(resource stream)", "Changes to the parent directory" ], "ftp_chdir": [ "bool ftp_chdir(resource stream, string directory)", "Changes directories" ], "ftp_chmod": [ "int ftp_chmod(resource stream, int mode, string filename)", "Sets permissions on a file" ], "ftp_close": [ "bool ftp_close(resource stream)", "Closes the FTP stream" ], "ftp_connect": [ "resource ftp_connect(string host [, int port [, int timeout]])", "Opens a FTP stream" ], "ftp_delete": [ "bool ftp_delete(resource stream, string file)", "Deletes a file" ], "ftp_exec": [ "bool ftp_exec(resource stream, string command)", "Requests execution of a program on the FTP server" ], "ftp_fget": [ "bool ftp_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])", "Retrieves a file from the FTP server and writes it to an open file" ], "ftp_fput": [ "bool ftp_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])", "Stores a file from an open file to the FTP server" ], "ftp_get": [ "bool ftp_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])", "Retrieves a file from the FTP server and writes it to a local file" ], "ftp_get_option": [ "mixed ftp_get_option(resource stream, int option)", "Gets an FTP option" ], "ftp_login": [ "bool ftp_login(resource stream, string username, string password)", "Logs into the FTP server" ], "ftp_mdtm": [ "int ftp_mdtm(resource stream, string filename)", "Returns the last modification time of the file, or -1 on error" ], "ftp_mkdir": [ "string ftp_mkdir(resource stream, string directory)", "Creates a directory and returns the absolute path for the new directory or false on error" ], "ftp_nb_continue": [ "int ftp_nb_continue(resource stream)", "Continues retrieving\/sending a file nbronously" ], "ftp_nb_fget": [ "int ftp_nb_fget(resource stream, resource fp, string remote_file, int mode[, int resumepos])", "Retrieves a file from the FTP server asynchronly and writes it to an open file" ], "ftp_nb_fput": [ "int ftp_nb_fput(resource stream, string remote_file, resource fp, int mode[, int startpos])", "Stores a file from an open file to the FTP server nbronly" ], "ftp_nb_get": [ "int ftp_nb_get(resource stream, string local_file, string remote_file, int mode[, int resume_pos])", "Retrieves a file from the FTP server nbhronly and writes it to a local file" ], "ftp_nb_put": [ "int ftp_nb_put(resource stream, string remote_file, string local_file, int mode[, int startpos])", "Stores a file on the FTP server" ], "ftp_nlist": [ "array ftp_nlist(resource stream, string directory)", "Returns an array of filenames in the given directory" ], "ftp_pasv": [ "bool ftp_pasv(resource stream, bool pasv)", "Turns passive mode on or off" ], "ftp_put": [ "bool ftp_put(resource stream, string remote_file, string local_file, int mode[, int startpos])", "Stores a file on the FTP server" ], "ftp_pwd": [ "string ftp_pwd(resource stream)", "Returns the present working directory" ], "ftp_raw": [ "array ftp_raw(resource stream, string command)", "Sends a literal command to the FTP server" ], "ftp_rawlist": [ "array ftp_rawlist(resource stream, string directory [, bool recursive])", "Returns a detailed listing of a directory as an array of output lines" ], "ftp_rename": [ "bool ftp_rename(resource stream, string src, string dest)", "Renames the given file to a new path" ], "ftp_rmdir": [ "bool ftp_rmdir(resource stream, string directory)", "Removes a directory" ], "ftp_set_option": [ "bool ftp_set_option(resource stream, int option, mixed value)", "Sets an FTP option" ], "ftp_site": [ "bool ftp_site(resource stream, string cmd)", "Sends a SITE command to the server" ], "ftp_size": [ "int ftp_size(resource stream, string filename)", "Returns the size of the file, or -1 on error" ], "ftp_ssl_connect": [ "resource ftp_ssl_connect(string host [, int port [, int timeout]])", "Opens a FTP-SSL stream" ], "ftp_systype": [ "string ftp_systype(resource stream)", "Returns the system type identifier" ], "ftruncate": [ "bool ftruncate(resource fp, int size)", "Truncate file to 'size' length" ], "func_get_arg": [ "mixed func_get_arg(int arg_num)", "Get the $arg_num'th argument that was passed to the function" ], "func_get_args": [ "array func_get_args()", "Get an array of the arguments that were passed to the function" ], "func_num_args": [ "int func_num_args(void)", "Get the number of arguments that were passed to the function" ], "function_exists": [ "bool function_exists(string function_name)", "Checks if the function exists" ], "fwrite": [ "int fwrite(resource fp, string str [, int length])", "Binary-safe file write" ], "gc_collect_cycles": [ "int gc_collect_cycles(void)", "Forces collection of any existing garbage cycles. Returns number of freed zvals" ], "gc_disable": [ "void gc_disable(void)", "Deactivates the circular reference collector" ], "gc_enable": [ "void gc_enable(void)", "Activates the circular reference collector" ], "gc_enabled": [ "void gc_enabled(void)", "Returns status of the circular reference collector" ], "gd_info": [ "array gd_info()", "" ], "getKeywords": [ "static array getKeywords(string $locale) {", "* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!) * }}}" ], "get_browser": [ "mixed get_browser([string browser_name [, bool return_array]])", "Get information about the capabilities of a browser. If browser_name is omitted or null, HTTP_USER_AGENT is used. Returns an object by default; if return_array is true, returns an array." ], "get_called_class": [ "string get_called_class()", "Retrieves the \"Late Static Binding\" class name" ], "get_cfg_var": [ "mixed get_cfg_var(string option_name)", "Get the value of a PHP configuration option" ], "get_class": [ "string get_class([object object])", "Retrieves the class name" ], "get_class_methods": [ "array get_class_methods(mixed class)", "Returns an array of method names for class or class instance." ], "get_class_vars": [ "array get_class_vars(string class_name)", "Returns an array of default properties of the class." ], "get_current_user": [ "string get_current_user(void)", "Get the name of the owner of the current PHP script" ], "get_declared_classes": [ "array get_declared_classes()", "Returns an array of all declared classes." ], "get_declared_interfaces": [ "array get_declared_interfaces()", "Returns an array of all declared interfaces." ], "get_defined_constants": [ "array get_defined_constants([bool categorize])", "Return an array containing the names and values of all defined constants" ], "get_defined_functions": [ "array get_defined_functions(void)", "Returns an array of all defined functions" ], "get_defined_vars": [ "array get_defined_vars(void)", "Returns an associative array of names and values of all currently defined variable names (variables in the current scope)" ], "get_display_language": [ "static string get_display_language($locale[, $in_locale = null])", "* gets the language for the $locale in $in_locale or default_locale" ], "get_display_name": [ "static string get_display_name($locale[, $in_locale = null])", "* gets the name for the $locale in $in_locale or default_locale" ], "get_display_region": [ "static string get_display_region($locale, $in_locale = null)", "* gets the region for the $locale in $in_locale or default_locale" ], "get_display_script": [ "static string get_display_script($locale, $in_locale = null)", "* gets the script for the $locale in $in_locale or default_locale" ], "get_extension_funcs": [ "array get_extension_funcs(string extension_name)", "Returns an array with the names of functions belonging to the named extension" ], "get_headers": [ "array get_headers(string url[, int format])", "fetches all the headers sent by the server in response to a HTTP request" ], "get_html_translation_table": [ "array get_html_translation_table([int table [, int quote_style]])", "Returns the internal translation table used by htmlspecialchars and htmlentities" ], "get_include_path": [ "string get_include_path()", "Get the current include_path configuration option" ], "get_included_files": [ "array get_included_files(void)", "Returns an array with the file names that were include_once()'d" ], "get_loaded_extensions": [ "array get_loaded_extensions([bool zend_extensions])", "Return an array containing names of loaded extensions" ], "get_magic_quotes_gpc": [ "int get_magic_quotes_gpc(void)", "Get the current active configuration setting of magic_quotes_gpc" ], "get_magic_quotes_runtime": [ "int get_magic_quotes_runtime(void)", "Get the current active configuration setting of magic_quotes_runtime" ], "get_meta_tags": [ "array get_meta_tags(string filename [, bool use_include_path])", "Extracts all meta tag content attributes from a file and returns an array" ], "get_object_vars": [ "array get_object_vars(object obj)", "Returns an array of object properties" ], "get_parent_class": [ "string get_parent_class([mixed object])", "Retrieves the parent class name for object or class or current scope." ], "get_resource_type": [ "string get_resource_type(resource res)", "Get the resource type name for a given resource" ], "getallheaders": [ "array getallheaders(void)", "" ], "getcwd": [ "mixed getcwd(void)", "Gets the current directory" ], "getdate": [ "array getdate([int timestamp])", "Get date\/time information" ], "getenv": [ "string getenv(string varname)", "Get the value of an environment variable" ], "gethostbyaddr": [ "string gethostbyaddr(string ip_address)", "Get the Internet host name corresponding to a given IP address" ], "gethostbyname": [ "string gethostbyname(string hostname)", "Get the IP address corresponding to a given Internet host name" ], "gethostbynamel": [ "array gethostbynamel(string hostname)", "Return a list of IP addresses that a given hostname resolves to." ], "gethostname": [ "string gethostname()", "Get the host name of the current machine" ], "getimagesize": [ "array getimagesize(string imagefile [, array info])", "Get the size of an image as 4-element array" ], "getlastmod": [ "int getlastmod(void)", "Get time of last page modification" ], "getmygid": [ "int getmygid(void)", "Get PHP script owner's GID" ], "getmyinode": [ "int getmyinode(void)", "Get the inode of the current script being parsed" ], "getmypid": [ "int getmypid(void)", "Get current process ID" ], "getmyuid": [ "int getmyuid(void)", "Get PHP script owner's UID" ], "getopt": [ "array getopt(string options [, array longopts])", "Get options from the command line argument list" ], "getprotobyname": [ "int getprotobyname(string name)", "Returns protocol number associated with name as per \/etc\/protocols" ], "getprotobynumber": [ "string getprotobynumber(int proto)", "Returns protocol name associated with protocol number proto" ], "getrandmax": [ "int getrandmax(void)", "Returns the maximum value a random number can have" ], "getrusage": [ "array getrusage([int who])", "Returns an array of usage statistics" ], "getservbyname": [ "int getservbyname(string service, string protocol)", "Returns port associated with service. Protocol must be \"tcp\" or \"udp\"" ], "getservbyport": [ "string getservbyport(int port, string protocol)", "Returns service name associated with port. Protocol must be \"tcp\" or \"udp\"" ], "gettext": [ "string gettext(string msgid)", "Return the translation of msgid for the current domain, or msgid unaltered if a translation does not exist" ], "gettimeofday": [ "array gettimeofday([bool get_as_float])", "Returns the current time as array" ], "gettype": [ "string gettype(mixed var)", "Returns the type of the variable" ], "glob": [ "array glob(string pattern [, int flags])", "Find pathnames matching a pattern" ], "gmdate": [ "string gmdate(string format [, long timestamp])", "Format a GMT date\/time" ], "gmmktime": [ "int gmmktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])", "Get UNIX timestamp for a GMT date" ], "gmp_abs": [ "resource gmp_abs(resource a)", "Calculates absolute value" ], "gmp_add": [ "resource gmp_add(resource a, resource b)", "Add a and b" ], "gmp_and": [ "resource gmp_and(resource a, resource b)", "Calculates logical AND of a and b" ], "gmp_clrbit": [ "void gmp_clrbit(resource &a, int index)", "Clears bit in a" ], "gmp_cmp": [ "int gmp_cmp(resource a, resource b)", "Compares two numbers" ], "gmp_com": [ "resource gmp_com(resource a)", "Calculates one's complement of a" ], "gmp_div_q": [ "resource gmp_div_q(resource a, resource b [, int round])", "Divide a by b, returns quotient only" ], "gmp_div_qr": [ "array gmp_div_qr(resource a, resource b [, int round])", "Divide a by b, returns quotient and reminder" ], "gmp_div_r": [ "resource gmp_div_r(resource a, resource b [, int round])", "Divide a by b, returns reminder only" ], "gmp_divexact": [ "resource gmp_divexact(resource a, resource b)", "Divide a by b using exact division algorithm" ], "gmp_fact": [ "resource gmp_fact(int a)", "Calculates factorial function" ], "gmp_gcd": [ "resource gmp_gcd(resource a, resource b)", "Computes greatest common denominator (gcd) of a and b" ], "gmp_gcdext": [ "array gmp_gcdext(resource a, resource b)", "Computes G, S, and T, such that AS + BT = G = `gcd' (A, B)" ], "gmp_hamdist": [ "int gmp_hamdist(resource a, resource b)", "Calculates hamming distance between a and b" ], "gmp_init": [ "resource gmp_init(mixed number [, int base])", "Initializes GMP number" ], "gmp_intval": [ "int gmp_intval(resource gmpnumber)", "Gets signed long value of GMP number" ], "gmp_invert": [ "resource gmp_invert(resource a, resource b)", "Computes the inverse of a modulo b" ], "gmp_jacobi": [ "int gmp_jacobi(resource a, resource b)", "Computes Jacobi symbol" ], "gmp_legendre": [ "int gmp_legendre(resource a, resource b)", "Computes Legendre symbol" ], "gmp_mod": [ "resource gmp_mod(resource a, resource b)", "Computes a modulo b" ], "gmp_mul": [ "resource gmp_mul(resource a, resource b)", "Multiply a and b" ], "gmp_neg": [ "resource gmp_neg(resource a)", "Negates a number" ], "gmp_nextprime": [ "resource gmp_nextprime(resource a)", "Finds next prime of a" ], "gmp_or": [ "resource gmp_or(resource a, resource b)", "Calculates logical OR of a and b" ], "gmp_perfect_square": [ "bool gmp_perfect_square(resource a)", "Checks if a is an exact square" ], "gmp_popcount": [ "int gmp_popcount(resource a)", "Calculates the population count of a" ], "gmp_pow": [ "resource gmp_pow(resource base, int exp)", "Raise base to power exp" ], "gmp_powm": [ "resource gmp_powm(resource base, resource exp, resource mod)", "Raise base to power exp and take result modulo mod" ], "gmp_prob_prime": [ "int gmp_prob_prime(resource a[, int reps])", "Checks if a is \"probably prime\"" ], "gmp_random": [ "resource gmp_random([int limiter])", "Gets random number" ], "gmp_scan0": [ "int gmp_scan0(resource a, int start)", "Finds first zero bit" ], "gmp_scan1": [ "int gmp_scan1(resource a, int start)", "Finds first non-zero bit" ], "gmp_setbit": [ "void gmp_setbit(resource &a, int index[, bool set_clear])", "Sets or clear bit in a" ], "gmp_sign": [ "int gmp_sign(resource a)", "Gets the sign of the number" ], "gmp_sqrt": [ "resource gmp_sqrt(resource a)", "Takes integer part of square root of a" ], "gmp_sqrtrem": [ "array gmp_sqrtrem(resource a)", "Square root with remainder" ], "gmp_strval": [ "string gmp_strval(resource gmpnumber [, int base])", "Gets string representation of GMP number" ], "gmp_sub": [ "resource gmp_sub(resource a, resource b)", "Subtract b from a" ], "gmp_testbit": [ "bool gmp_testbit(resource a, int index)", "Tests if bit is set in a" ], "gmp_xor": [ "resource gmp_xor(resource a, resource b)", "Calculates logical exclusive OR of a and b" ], "gmstrftime": [ "string gmstrftime(string format [, int timestamp])", "Format a GMT\/UCT time\/date according to locale settings" ], "grapheme_extract": [ "string grapheme_extract(string str, int size[, int extract_type[, int start[, int next]]])", "Function to extract a sequence of default grapheme clusters" ], "grapheme_stripos": [ "int grapheme_stripos(string haystack, string needle [, int offset ])", "Find position of first occurrence of a string within another, ignoring case differences" ], "grapheme_stristr": [ "string grapheme_stristr(string haystack, string needle[, bool part])", "Finds first occurrence of a string within another" ], "grapheme_strlen": [ "int grapheme_strlen(string str)", "Get number of graphemes in a string" ], "grapheme_strpos": [ "int grapheme_strpos(string haystack, string needle [, int offset ])", "Find position of first occurrence of a string within another" ], "grapheme_strripos": [ "int grapheme_strripos(string haystack, string needle [, int offset])", "Find position of last occurrence of a string within another, ignoring case" ], "grapheme_strrpos": [ "int grapheme_strrpos(string haystack, string needle [, int offset])", "Find position of last occurrence of a string within another" ], "grapheme_strstr": [ "string grapheme_strstr(string haystack, string needle[, bool part])", "Finds first occurrence of a string within another" ], "grapheme_substr": [ "string grapheme_substr(string str, int start [, int length])", "Returns part of a string" ], "gregoriantojd": [ "int gregoriantojd(int month, int day, int year)", "Converts a gregorian calendar date to julian day count" ], "gzcompress": [ "string gzcompress(string data [, int level])", "Gzip-compress a string" ], "gzdeflate": [ "string gzdeflate(string data [, int level])", "Gzip-compress a string" ], "gzencode": [ "string gzencode(string data [, int level [, int encoding_mode]])", "GZ encode a string" ], "gzfile": [ "array gzfile(string filename [, int use_include_path])", "Read und uncompress entire .gz-file into an array" ], "gzinflate": [ "string gzinflate(string data [, int length])", "Unzip a gzip-compressed string" ], "gzopen": [ "resource gzopen(string filename, string mode [, int use_include_path])", "Open a .gz-file and return a .gz-file pointer" ], "gzuncompress": [ "string gzuncompress(string data [, int length])", "Unzip a gzip-compressed string" ], "hash": [ "string hash(string algo, string data[, bool raw_output = false])", "Generate a hash of a given input string Returns lowercase hexits by default" ], "hash_algos": [ "array hash_algos(void)", "Return a list of registered hashing algorithms" ], "hash_copy": [ "resource hash_copy(resource context)", "Copy hash resource" ], "hash_file": [ "string hash_file(string algo, string filename[, bool raw_output = false])", "Generate a hash of a given file Returns lowercase hexits by default" ], "hash_final": [ "string hash_final(resource context[, bool raw_output=false])", "Output resulting digest" ], "hash_hmac": [ "string hash_hmac(string algo, string data, string key[, bool raw_output = false])", "Generate a hash of a given input string with a key using HMAC Returns lowercase hexits by default" ], "hash_hmac_file": [ "string hash_hmac_file(string algo, string filename, string key[, bool raw_output = false])", "Generate a hash of a given file with a key using HMAC Returns lowercase hexits by default" ], "hash_init": [ "resource hash_init(string algo[, int options, string key])", "Initialize a hashing context" ], "hash_update": [ "bool hash_update(resource context, string data)", "Pump data into the hashing algorithm" ], "hash_update_file": [ "bool hash_update_file(resource context, string filename[, resource context])", "Pump data into the hashing algorithm from a file" ], "hash_update_stream": [ "int hash_update_stream(resource context, resource handle[, integer length])", "Pump data into the hashing algorithm from an open stream" ], "header": [ "void header(string header [, bool replace, [int http_response_code]])", "Sends a raw HTTP header" ], "header_remove": [ "void header_remove([string name])", "Removes an HTTP header previously set using header()" ], "headers_list": [ "array headers_list(void)", "Return list of headers to be sent \/ already sent" ], "headers_sent": [ "bool headers_sent([string &$file [, int &$line]])", "Returns true if headers have already been sent, false otherwise" ], "hebrev": [ "string hebrev(string str [, int max_chars_per_line])", "Converts logical Hebrew text to visual text" ], "hebrevc": [ "string hebrevc(string str [, int max_chars_per_line])", "Converts logical Hebrew text to visual text with newline conversion" ], "hexdec": [ "int hexdec(string hexadecimal_number)", "Returns the decimal equivalent of the hexadecimal number" ], "highlight_file": [ "bool highlight_file(string file_name [, bool return] )", "Syntax highlight a source file" ], "highlight_string": [ "bool highlight_string(string string [, bool return] )", "Syntax highlight a string or optionally return it" ], "html_entity_decode": [ "string html_entity_decode(string string [, int quote_style][, string charset])", "Convert all HTML entities to their applicable characters" ], "htmlentities": [ "string htmlentities(string string [, int quote_style[, string charset[, bool double_encode]]])", "Convert all applicable characters to HTML entities" ], "htmlspecialchars": [ "string htmlspecialchars(string string [, int quote_style[, string charset[, bool double_encode]]])", "Convert special characters to HTML entities" ], "htmlspecialchars_decode": [ "string htmlspecialchars_decode(string string [, int quote_style])", "Convert special HTML entities back to characters" ], "http_build_query": [ "string http_build_query(mixed formdata [, string prefix [, string arg_separator]])", "Generates a form-encoded query string from an associative array or object." ], "hypot": [ "float hypot(float num1, float num2)", "Returns sqrt(num1*num1 + num2*num2)" ], "ibase_add_user": [ "bool ibase_add_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])", "Add a user to security database" ], "ibase_affected_rows": [ "int ibase_affected_rows( [ resource link_identifier ] )", "Returns the number of rows affected by the previous INSERT, UPDATE or DELETE statement" ], "ibase_backup": [ "mixed ibase_backup(resource service_handle, string source_db, string dest_file [, int options [, bool verbose]])", "Initiates a backup task in the service manager and returns immediately" ], "ibase_blob_add": [ "bool ibase_blob_add(resource blob_handle, string data)", "Add data into created blob" ], "ibase_blob_cancel": [ "bool ibase_blob_cancel(resource blob_handle)", "Cancel creating blob" ], "ibase_blob_close": [ "string ibase_blob_close(resource blob_handle)", "Close blob" ], "ibase_blob_create": [ "resource ibase_blob_create([resource link_identifier])", "Create blob for adding data" ], "ibase_blob_echo": [ "bool ibase_blob_echo([ resource link_identifier, ] string blob_id)", "Output blob contents to browser" ], "ibase_blob_get": [ "string ibase_blob_get(resource blob_handle, int len)", "Get len bytes data from open blob" ], "ibase_blob_import": [ "string ibase_blob_import([ resource link_identifier, ] resource file)", "Create blob, copy file in it, and close it" ], "ibase_blob_info": [ "array ibase_blob_info([ resource link_identifier, ] string blob_id)", "Return blob length and other useful info" ], "ibase_blob_open": [ "resource ibase_blob_open([ resource link_identifier, ] string blob_id)", "Open blob for retrieving data parts" ], "ibase_close": [ "bool ibase_close([resource link_identifier])", "Close an InterBase connection" ], "ibase_commit": [ "bool ibase_commit( resource link_identifier )", "Commit transaction" ], "ibase_commit_ret": [ "bool ibase_commit_ret( resource link_identifier )", "Commit transaction and retain the transaction context" ], "ibase_connect": [ "resource ibase_connect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])", "Open a connection to an InterBase database" ], "ibase_db_info": [ "string ibase_db_info(resource service_handle, string db, int action [, int argument])", "Request statistics about a database" ], "ibase_delete_user": [ "bool ibase_delete_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])", "Delete a user from security database" ], "ibase_drop_db": [ "bool ibase_drop_db([resource link_identifier])", "Drop an InterBase database" ], "ibase_errcode": [ "int ibase_errcode(void)", "Return error code" ], "ibase_errmsg": [ "string ibase_errmsg(void)", "Return error message" ], "ibase_execute": [ "mixed ibase_execute(resource query [, mixed bind_arg [, mixed bind_arg [, ...]]])", "Execute a previously prepared query" ], "ibase_fetch_assoc": [ "array ibase_fetch_assoc(resource result [, int fetch_flags])", "Fetch a row from the results of a query" ], "ibase_fetch_object": [ "object ibase_fetch_object(resource result [, int fetch_flags])", "Fetch a object from the results of a query" ], "ibase_fetch_row": [ "array ibase_fetch_row(resource result [, int fetch_flags])", "Fetch a row from the results of a query" ], "ibase_field_info": [ "array ibase_field_info(resource query_result, int field_number)", "Get information about a field" ], "ibase_free_event_handler": [ "bool ibase_free_event_handler(resource event)", "Frees the event handler set by ibase_set_event_handler()" ], "ibase_free_query": [ "bool ibase_free_query(resource query)", "Free memory used by a query" ], "ibase_free_result": [ "bool ibase_free_result(resource result)", "Free the memory used by a result" ], "ibase_gen_id": [ "int ibase_gen_id(string generator [, int increment [, resource link_identifier ]])", "Increments the named generator and returns its new value" ], "ibase_maintain_db": [ "bool ibase_maintain_db(resource service_handle, string db, int action [, int argument])", "Execute a maintenance command on the database server" ], "ibase_modify_user": [ "bool ibase_modify_user(resource service_handle, string user_name, string password [, string first_name [, string middle_name [, string last_name]]])", "Modify a user in security database" ], "ibase_name_result": [ "bool ibase_name_result(resource result, string name)", "Assign a name to a result for use with ... WHERE CURRENT OF <name> statements" ], "ibase_num_fields": [ "int ibase_num_fields(resource query_result)", "Get the number of fields in result" ], "ibase_num_params": [ "int ibase_num_params(resource query)", "Get the number of params in a prepared query" ], "ibase_num_rows": [ "int ibase_num_rows( resource result_identifier )", "Return the number of rows that are available in a result" ], "ibase_param_info": [ "array ibase_param_info(resource query, int field_number)", "Get information about a parameter" ], "ibase_pconnect": [ "resource ibase_pconnect(string database [, string username [, string password [, string charset [, int buffers [, int dialect [, string role]]]]]])", "Open a persistent connection to an InterBase database" ], "ibase_prepare": [ "resource ibase_prepare(resource link_identifier[, string query [, resource trans_identifier ]])", "Prepare a query for later execution" ], "ibase_query": [ "mixed ibase_query([resource link_identifier, [ resource link_identifier, ]] string query [, mixed bind_arg [, mixed bind_arg [, ...]]])", "Execute a query" ], "ibase_restore": [ "mixed ibase_restore(resource service_handle, string source_file, string dest_db [, int options [, bool verbose]])", "Initiates a restore task in the service manager and returns immediately" ], "ibase_rollback": [ "bool ibase_rollback( resource link_identifier )", "Rollback transaction" ], "ibase_rollback_ret": [ "bool ibase_rollback_ret( resource link_identifier )", "Rollback transaction and retain the transaction context" ], "ibase_server_info": [ "string ibase_server_info(resource service_handle, int action)", "Request information about a database server" ], "ibase_service_attach": [ "resource ibase_service_attach(string host, string dba_username, string dba_password)", "Connect to the service manager" ], "ibase_service_detach": [ "bool ibase_service_detach(resource service_handle)", "Disconnect from the service manager" ], "ibase_set_event_handler": [ "resource ibase_set_event_handler([resource link_identifier,] callback handler, string event [, string event [, ...]])", "Register the callback for handling each of the named events" ], "ibase_trans": [ "resource ibase_trans([int trans_args [, resource link_identifier [, ... ], int trans_args [, resource link_identifier [, ... ]] [, ...]]])", "Start a transaction over one or several databases" ], "ibase_wait_event": [ "string ibase_wait_event([resource link_identifier,] string event [, string event [, ...]])", "Waits for any one of the passed Interbase events to be posted by the database, and returns its name" ], "iconv": [ "string iconv(string in_charset, string out_charset, string str)", "Returns str converted to the out_charset character set" ], "iconv_get_encoding": [ "mixed iconv_get_encoding([string type])", "Get internal encoding and output encoding for ob_iconv_handler()" ], "iconv_mime_decode": [ "string iconv_mime_decode(string encoded_string [, int mode, string charset])", "Decodes a mime header field" ], "iconv_mime_decode_headers": [ "array iconv_mime_decode_headers(string headers [, int mode, string charset])", "Decodes multiple mime header fields" ], "iconv_mime_encode": [ "string iconv_mime_encode(string field_name, string field_value [, array preference])", "Composes a mime header field with field_name and field_value in a specified scheme" ], "iconv_set_encoding": [ "bool iconv_set_encoding(string type, string charset)", "Sets internal encoding and output encoding for ob_iconv_handler()" ], "iconv_strlen": [ "int iconv_strlen(string str [, string charset])", "Returns the character count of str" ], "iconv_strpos": [ "int iconv_strpos(string haystack, string needle [, int offset [, string charset]])", "Finds position of first occurrence of needle within part of haystack beginning with offset" ], "iconv_strrpos": [ "int iconv_strrpos(string haystack, string needle [, string charset])", "Finds position of last occurrence of needle within part of haystack beginning with offset" ], "iconv_substr": [ "string iconv_substr(string str, int offset, [int length, string charset])", "Returns specified part of a string" ], "idate": [ "int idate(string format [, int timestamp])", "Format a local time\/date as integer" ], "idn_to_ascii": [ "int idn_to_ascii(string domain[, int options])", "Converts an Unicode domain to ASCII representation, as defined in the IDNA RFC" ], "idn_to_utf8": [ "int idn_to_utf8(string domain[, int options])", "Converts an ASCII representation of the domain to Unicode (UTF-8), as defined in the IDNA RFC" ], "ignore_user_abort": [ "int ignore_user_abort([string value])", "Set whether we want to ignore a user abort event or not" ], "image2wbmp": [ "bool image2wbmp(resource im [, string filename [, int threshold]])", "Output WBMP image to browser or file" ], "image_type_to_extension": [ "string image_type_to_extension(int imagetype [, bool include_dot])", "Get file extension for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype" ], "image_type_to_mime_type": [ "string image_type_to_mime_type(int imagetype)", "Get Mime-Type for image-type returned by getimagesize, exif_read_data, exif_thumbnail, exif_imagetype" ], "imagealphablending": [ "bool imagealphablending(resource im, bool on)", "Turn alpha blending mode on or off for the given image" ], "imageantialias": [ "bool imageantialias(resource im, bool on)", "Should antialiased functions used or not" ], "imagearc": [ "bool imagearc(resource im, int cx, int cy, int w, int h, int s, int e, int col)", "Draw a partial ellipse" ], "imagechar": [ "bool imagechar(resource im, int font, int x, int y, string c, int col)", "Draw a character" ], "imagecharup": [ "bool imagecharup(resource im, int font, int x, int y, string c, int col)", "Draw a character rotated 90 degrees counter-clockwise" ], "imagecolorallocate": [ "int imagecolorallocate(resource im, int red, int green, int blue)", "Allocate a color for an image" ], "imagecolorallocatealpha": [ "int imagecolorallocatealpha(resource im, int red, int green, int blue, int alpha)", "Allocate a color with an alpha level. Works for true color and palette based images" ], "imagecolorat": [ "int imagecolorat(resource im, int x, int y)", "Get the index of the color of a pixel" ], "imagecolorclosest": [ "int imagecolorclosest(resource im, int red, int green, int blue)", "Get the index of the closest color to the specified color" ], "imagecolorclosestalpha": [ "int imagecolorclosestalpha(resource im, int red, int green, int blue, int alpha)", "Find the closest matching colour with alpha transparency" ], "imagecolorclosesthwb": [ "int imagecolorclosesthwb(resource im, int red, int green, int blue)", "Get the index of the color which has the hue, white and blackness nearest to the given color" ], "imagecolordeallocate": [ "bool imagecolordeallocate(resource im, int index)", "De-allocate a color for an image" ], "imagecolorexact": [ "int imagecolorexact(resource im, int red, int green, int blue)", "Get the index of the specified color" ], "imagecolorexactalpha": [ "int imagecolorexactalpha(resource im, int red, int green, int blue, int alpha)", "Find exact match for colour with transparency" ], "imagecolormatch": [ "bool imagecolormatch(resource im1, resource im2)", "Makes the colors of the palette version of an image more closely match the true color version" ], "imagecolorresolve": [ "int imagecolorresolve(resource im, int red, int green, int blue)", "Get the index of the specified color or its closest possible alternative" ], "imagecolorresolvealpha": [ "int imagecolorresolvealpha(resource im, int red, int green, int blue, int alpha)", "Resolve\/Allocate a colour with an alpha level. Works for true colour and palette based images" ], "imagecolorset": [ "void imagecolorset(resource im, int col, int red, int green, int blue)", "Set the color for the specified palette index" ], "imagecolorsforindex": [ "array imagecolorsforindex(resource im, int col)", "Get the colors for an index" ], "imagecolorstotal": [ "int imagecolorstotal(resource im)", "Find out the number of colors in an image's palette" ], "imagecolortransparent": [ "int imagecolortransparent(resource im [, int col])", "Define a color as transparent" ], "imageconvolution": [ "resource imageconvolution(resource src_im, array matrix3x3, double div, double offset)", "Apply a 3x3 convolution matrix, using coefficient div and offset" ], "imagecopy": [ "bool imagecopy(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h)", "Copy part of an image" ], "imagecopymerge": [ "bool imagecopymerge(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)", "Merge one part of an image with another" ], "imagecopymergegray": [ "bool imagecopymergegray(resource src_im, resource dst_im, int dst_x, int dst_y, int src_x, int src_y, int src_w, int src_h, int pct)", "Merge one part of an image with another" ], "imagecopyresampled": [ "bool imagecopyresampled(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)", "Copy and resize part of an image using resampling to help ensure clarity" ], "imagecopyresized": [ "bool imagecopyresized(resource dst_im, resource src_im, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h)", "Copy and resize part of an image" ], "imagecreate": [ "resource imagecreate(int x_size, int y_size)", "Create a new image" ], "imagecreatefromgd": [ "resource imagecreatefromgd(string filename)", "Create a new image from GD file or URL" ], "imagecreatefromgd2": [ "resource imagecreatefromgd2(string filename)", "Create a new image from GD2 file or URL" ], "imagecreatefromgd2part": [ "resource imagecreatefromgd2part(string filename, int srcX, int srcY, int width, int height)", "Create a new image from a given part of GD2 file or URL" ], "imagecreatefromgif": [ "resource imagecreatefromgif(string filename)", "Create a new image from GIF file or URL" ], "imagecreatefromjpeg": [ "resource imagecreatefromjpeg(string filename)", "Create a new image from JPEG file or URL" ], "imagecreatefrompng": [ "resource imagecreatefrompng(string filename)", "Create a new image from PNG file or URL" ], "imagecreatefromstring": [ "resource imagecreatefromstring(string image)", "Create a new image from the image stream in the string" ], "imagecreatefromwbmp": [ "resource imagecreatefromwbmp(string filename)", "Create a new image from WBMP file or URL" ], "imagecreatefromxbm": [ "resource imagecreatefromxbm(string filename)", "Create a new image from XBM file or URL" ], "imagecreatefromxpm": [ "resource imagecreatefromxpm(string filename)", "Create a new image from XPM file or URL" ], "imagecreatetruecolor": [ "resource imagecreatetruecolor(int x_size, int y_size)", "Create a new true color image" ], "imagedashedline": [ "bool imagedashedline(resource im, int x1, int y1, int x2, int y2, int col)", "Draw a dashed line" ], "imagedestroy": [ "bool imagedestroy(resource im)", "Destroy an image" ], "imageellipse": [ "bool imageellipse(resource im, int cx, int cy, int w, int h, int color)", "Draw an ellipse" ], "imagefill": [ "bool imagefill(resource im, int x, int y, int col)", "Flood fill" ], "imagefilledarc": [ "bool imagefilledarc(resource im, int cx, int cy, int w, int h, int s, int e, int col, int style)", "Draw a filled partial ellipse" ], "imagefilledellipse": [ "bool imagefilledellipse(resource im, int cx, int cy, int w, int h, int color)", "Draw an ellipse" ], "imagefilledpolygon": [ "bool imagefilledpolygon(resource im, array point, int num_points, int col)", "Draw a filled polygon" ], "imagefilledrectangle": [ "bool imagefilledrectangle(resource im, int x1, int y1, int x2, int y2, int col)", "Draw a filled rectangle" ], "imagefilltoborder": [ "bool imagefilltoborder(resource im, int x, int y, int border, int col)", "Flood fill to specific color" ], "imagefilter": [ "bool imagefilter(resource src_im, int filtertype, [args] )", "Applies Filter an image using a custom angle" ], "imagefontheight": [ "int imagefontheight(int font)", "Get font height" ], "imagefontwidth": [ "int imagefontwidth(int font)", "Get font width" ], "imageftbbox": [ "array imageftbbox(float size, float angle, string font_file, string text [, array extrainfo])", "Give the bounding box of a text using fonts via freetype2" ], "imagefttext": [ "array imagefttext(resource im, float size, float angle, int x, int y, int col, string font_file, string text [, array extrainfo])", "Write text to the image using fonts via freetype2" ], "imagegammacorrect": [ "bool imagegammacorrect(resource im, float inputgamma, float outputgamma)", "Apply a gamma correction to a GD image" ], "imagegd": [ "bool imagegd(resource im [, string filename])", "Output GD image to browser or file" ], "imagegd2": [ "bool imagegd2(resource im [, string filename, [, int chunk_size, [, int type]]])", "Output GD2 image to browser or file" ], "imagegif": [ "bool imagegif(resource im [, string filename])", "Output GIF image to browser or file" ], "imagegrabscreen": [ "resource imagegrabscreen()", "Grab a screenshot" ], "imagegrabwindow": [ "resource imagegrabwindow(int window_handle [, int client_area])", "Grab a window or its client area using a windows handle (HWND property in COM instance)" ], "imageinterlace": [ "int imageinterlace(resource im [, int interlace])", "Enable or disable interlace" ], "imageistruecolor": [ "bool imageistruecolor(resource im)", "return true if the image uses truecolor" ], "imagejpeg": [ "bool imagejpeg(resource im [, string filename [, int quality]])", "Output JPEG image to browser or file" ], "imagelayereffect": [ "bool imagelayereffect(resource im, int effect)", "Set the alpha blending flag to use the bundled libgd layering effects" ], "imageline": [ "bool imageline(resource im, int x1, int y1, int x2, int y2, int col)", "Draw a line" ], "imageloadfont": [ "int imageloadfont(string filename)", "Load a new font" ], "imagepalettecopy": [ "void imagepalettecopy(resource dst, resource src)", "Copy the palette from the src image onto the dst image" ], "imagepng": [ "bool imagepng(resource im [, string filename])", "Output PNG image to browser or file" ], "imagepolygon": [ "bool imagepolygon(resource im, array point, int num_points, int col)", "Draw a polygon" ], "imagepsbbox": [ "array imagepsbbox(string text, resource font, int size [, int space, int tightness, float angle])", "Return the bounding box needed by a string if rasterized" ], "imagepscopyfont": [ "int imagepscopyfont(int font_index)", "Make a copy of a font for purposes like extending or reenconding" ], "imagepsencodefont": [ "bool imagepsencodefont(resource font_index, string filename)", "To change a fonts character encoding vector" ], "imagepsextendfont": [ "bool imagepsextendfont(resource font_index, float extend)", "Extend or or condense (if extend < 1) a font" ], "imagepsfreefont": [ "bool imagepsfreefont(resource font_index)", "Free memory used by a font" ], "imagepsloadfont": [ "resource imagepsloadfont(string pathname)", "Load a new font from specified file" ], "imagepsslantfont": [ "bool imagepsslantfont(resource font_index, float slant)", "Slant a font" ], "imagepstext": [ "array imagepstext(resource image, string text, resource font, int size, int foreground, int background, int xcoord, int ycoord [, int space [, int tightness [, float angle [, int antialias])", "Rasterize a string over an image" ], "imagerectangle": [ "bool imagerectangle(resource im, int x1, int y1, int x2, int y2, int col)", "Draw a rectangle" ], "imagerotate": [ "resource imagerotate(resource src_im, float angle, int bgdcolor [, int ignoretransparent])", "Rotate an image using a custom angle" ], "imagesavealpha": [ "bool imagesavealpha(resource im, bool on)", "Include alpha channel to a saved image" ], "imagesetbrush": [ "bool imagesetbrush(resource image, resource brush)", "Set the brush image to $brush when filling $image with the \"IMG_COLOR_BRUSHED\" color" ], "imagesetpixel": [ "bool imagesetpixel(resource im, int x, int y, int col)", "Set a single pixel" ], "imagesetstyle": [ "bool imagesetstyle(resource im, array styles)", "Set the line drawing styles for use with imageline and IMG_COLOR_STYLED." ], "imagesetthickness": [ "bool imagesetthickness(resource im, int thickness)", "Set line thickness for drawing lines, ellipses, rectangles, polygons etc." ], "imagesettile": [ "bool imagesettile(resource image, resource tile)", "Set the tile image to $tile when filling $image with the \"IMG_COLOR_TILED\" color" ], "imagestring": [ "bool imagestring(resource im, int font, int x, int y, string str, int col)", "Draw a string horizontally" ], "imagestringup": [ "bool imagestringup(resource im, int font, int x, int y, string str, int col)", "Draw a string vertically - rotated 90 degrees counter-clockwise" ], "imagesx": [ "int imagesx(resource im)", "Get image width" ], "imagesy": [ "int imagesy(resource im)", "Get image height" ], "imagetruecolortopalette": [ "void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)", "Convert a true colour image to a palette based image with a number of colours, optionally using dithering." ], "imagettfbbox": [ "array imagettfbbox(float size, float angle, string font_file, string text)", "Give the bounding box of a text using TrueType fonts" ], "imagettftext": [ "array imagettftext(resource im, float size, float angle, int x, int y, int col, string font_file, string text)", "Write text to the image using a TrueType font" ], "imagetypes": [ "int imagetypes(void)", "Return the types of images supported in a bitfield - 1=GIF, 2=JPEG, 4=PNG, 8=WBMP, 16=XPM" ], "imagewbmp": [ "bool imagewbmp(resource im [, string filename, [, int foreground]])", "Output WBMP image to browser or file" ], "imagexbm": [ "int imagexbm(int im, string filename [, int foreground])", "Output XBM image to browser or file" ], "imap_8bit": [ "string imap_8bit(string text)", "Convert an 8-bit string to a quoted-printable string" ], "imap_alerts": [ "array imap_alerts(void)", "Returns an array of all IMAP alerts that have been generated since the last page load or since the last imap_alerts() call, whichever came last. The alert stack is cleared after imap_alerts() is called." ], "imap_append": [ "bool imap_append(resource stream_id, string folder, string message [, string options [, string internal_date]])", "Append a new message to a specified mailbox" ], "imap_base64": [ "string imap_base64(string text)", "Decode BASE64 encoded text" ], "imap_binary": [ "string imap_binary(string text)", "Convert an 8bit string to a base64 string" ], "imap_body": [ "string imap_body(resource stream_id, int msg_no [, int options])", "Read the message body" ], "imap_bodystruct": [ "object imap_bodystruct(resource stream_id, int msg_no, string section)", "Read the structure of a specified body section of a specific message" ], "imap_check": [ "object imap_check(resource stream_id)", "Get mailbox properties" ], "imap_clearflag_full": [ "bool imap_clearflag_full(resource stream_id, string sequence, string flag [, int options])", "Clears flags on messages" ], "imap_close": [ "bool imap_close(resource stream_id [, int options])", "Close an IMAP stream" ], "imap_createmailbox": [ "bool imap_createmailbox(resource stream_id, string mailbox)", "Create a new mailbox" ], "imap_delete": [ "bool imap_delete(resource stream_id, int msg_no [, int options])", "Mark a message for deletion" ], "imap_deletemailbox": [ "bool imap_deletemailbox(resource stream_id, string mailbox)", "Delete a mailbox" ], "imap_errors": [ "array imap_errors(void)", "Returns an array of all IMAP errors generated since the last page load, or since the last imap_errors() call, whichever came last. The error stack is cleared after imap_errors() is called." ], "imap_expunge": [ "bool imap_expunge(resource stream_id)", "Permanently delete all messages marked for deletion" ], "imap_fetch_overview": [ "array imap_fetch_overview(resource stream_id, string sequence [, int options])", "Read an overview of the information in the headers of the given message sequence" ], "imap_fetchbody": [ "string imap_fetchbody(resource stream_id, int msg_no, string section [, int options])", "Get a specific body section" ], "imap_fetchheader": [ "string imap_fetchheader(resource stream_id, int msg_no [, int options])", "Get the full unfiltered header for a message" ], "imap_fetchstructure": [ "object imap_fetchstructure(resource stream_id, int msg_no [, int options])", "Read the full structure of a message" ], "imap_gc": [ "bool imap_gc(resource stream_id, int flags)", "This function garbage collects (purges) the cache of entries of a specific type." ], "imap_get_quota": [ "array imap_get_quota(resource stream_id, string qroot)", "Returns the quota set to the mailbox account qroot" ], "imap_get_quotaroot": [ "array imap_get_quotaroot(resource stream_id, string mbox)", "Returns the quota set to the mailbox account mbox" ], "imap_getacl": [ "array imap_getacl(resource stream_id, string mailbox)", "Gets the ACL for a given mailbox" ], "imap_getmailboxes": [ "array imap_getmailboxes(resource stream_id, string ref, string pattern)", "Reads the list of mailboxes and returns a full array of objects containing name, attributes, and delimiter" ], "imap_getsubscribed": [ "array imap_getsubscribed(resource stream_id, string ref, string pattern)", "Return a list of subscribed mailboxes, in the same format as imap_getmailboxes()" ], "imap_headerinfo": [ "object imap_headerinfo(resource stream_id, int msg_no [, int from_length [, int subject_length [, string default_host]]])", "Read the headers of the message" ], "imap_headers": [ "array imap_headers(resource stream_id)", "Returns headers for all messages in a mailbox" ], "imap_last_error": [ "string imap_last_error(void)", "Returns the last error that was generated by an IMAP function. The error stack is NOT cleared after this call." ], "imap_list": [ "array imap_list(resource stream_id, string ref, string pattern)", "Read the list of mailboxes" ], "imap_listscan": [ "array imap_listscan(resource stream_id, string ref, string pattern, string content)", "Read list of mailboxes containing a certain string" ], "imap_lsub": [ "array imap_lsub(resource stream_id, string ref, string pattern)", "Return a list of subscribed mailboxes" ], "imap_mail": [ "bool imap_mail(string to, string subject, string message [, string additional_headers [, string cc [, string bcc [, string rpath]]]])", "Send an email message" ], "imap_mail_compose": [ "string imap_mail_compose(array envelope, array body)", "Create a MIME message based on given envelope and body sections" ], "imap_mail_copy": [ "bool imap_mail_copy(resource stream_id, string msglist, string mailbox [, int options])", "Copy specified message to a mailbox" ], "imap_mail_move": [ "bool imap_mail_move(resource stream_id, string sequence, string mailbox [, int options])", "Move specified message to a mailbox" ], "imap_mailboxmsginfo": [ "object imap_mailboxmsginfo(resource stream_id)", "Returns info about the current mailbox" ], "imap_mime_header_decode": [ "array imap_mime_header_decode(string str)", "Decode mime header element in accordance with RFC 2047 and return array of objects containing 'charset' encoding and decoded 'text'" ], "imap_msgno": [ "int imap_msgno(resource stream_id, int unique_msg_id)", "Get the sequence number associated with a UID" ], "imap_mutf7_to_utf8": [ "string imap_mutf7_to_utf8(string in)", "Decode a modified UTF-7 string to UTF-8" ], "imap_num_msg": [ "int imap_num_msg(resource stream_id)", "Gives the number of messages in the current mailbox" ], "imap_num_recent": [ "int imap_num_recent(resource stream_id)", "Gives the number of recent messages in current mailbox" ], "imap_open": [ "resource imap_open(string mailbox, string user, string password [, int options [, int n_retries]])", "Open an IMAP stream to a mailbox" ], "imap_ping": [ "bool imap_ping(resource stream_id)", "Check if the IMAP stream is still active" ], "imap_qprint": [ "string imap_qprint(string text)", "Convert a quoted-printable string to an 8-bit string" ], "imap_renamemailbox": [ "bool imap_renamemailbox(resource stream_id, string old_name, string new_name)", "Rename a mailbox" ], "imap_reopen": [ "bool imap_reopen(resource stream_id, string mailbox [, int options [, int n_retries]])", "Reopen an IMAP stream to a new mailbox" ], "imap_rfc822_parse_adrlist": [ "array imap_rfc822_parse_adrlist(string address_string, string default_host)", "Parses an address string" ], "imap_rfc822_parse_headers": [ "object imap_rfc822_parse_headers(string headers [, string default_host])", "Parse a set of mail headers contained in a string, and return an object similar to imap_headerinfo()" ], "imap_rfc822_write_address": [ "string imap_rfc822_write_address(string mailbox, string host, string personal)", "Returns a properly formatted email address given the mailbox, host, and personal info" ], "imap_savebody": [ "bool imap_savebody(resource stream_id, string|resource file, int msg_no[, string section = \"\"[, int options = 0]])", "Save a specific body section to a file" ], "imap_search": [ "array imap_search(resource stream_id, string criteria [, int options [, string charset]])", "Return a list of messages matching the given criteria" ], "imap_set_quota": [ "bool imap_set_quota(resource stream_id, string qroot, int mailbox_size)", "Will set the quota for qroot mailbox" ], "imap_setacl": [ "bool imap_setacl(resource stream_id, string mailbox, string id, string rights)", "Sets the ACL for a given mailbox" ], "imap_setflag_full": [ "bool imap_setflag_full(resource stream_id, string sequence, string flag [, int options])", "Sets flags on messages" ], "imap_sort": [ "array imap_sort(resource stream_id, int criteria, int reverse [, int options [, string search_criteria [, string charset]]])", "Sort an array of message headers, optionally including only messages that meet specified criteria." ], "imap_status": [ "object imap_status(resource stream_id, string mailbox, int options)", "Get status info from a mailbox" ], "imap_subscribe": [ "bool imap_subscribe(resource stream_id, string mailbox)", "Subscribe to a mailbox" ], "imap_thread": [ "array imap_thread(resource stream_id [, int options])", "Return threaded by REFERENCES tree" ], "imap_timeout": [ "mixed imap_timeout(int timeout_type [, int timeout])", "Set or fetch imap timeout" ], "imap_uid": [ "int imap_uid(resource stream_id, int msg_no)", "Get the unique message id associated with a standard sequential message number" ], "imap_undelete": [ "bool imap_undelete(resource stream_id, int msg_no [, int flags])", "Remove the delete flag from a message" ], "imap_unsubscribe": [ "bool imap_unsubscribe(resource stream_id, string mailbox)", "Unsubscribe from a mailbox" ], "imap_utf7_decode": [ "string imap_utf7_decode(string buf)", "Decode a modified UTF-7 string" ], "imap_utf7_encode": [ "string imap_utf7_encode(string buf)", "Encode a string in modified UTF-7" ], "imap_utf8": [ "string imap_utf8(string mime_encoded_text)", "Convert a mime-encoded text to UTF-8" ], "imap_utf8_to_mutf7": [ "string imap_utf8_to_mutf7(string in)", "Encode a UTF-8 string to modified UTF-7" ], "implode": [ "string implode([string glue,] array pieces)", "Joins array elements placing glue string between items and return one string" ], "import_request_variables": [ "bool import_request_variables(string types [, string prefix])", "Import GET\/POST\/Cookie variables into the global scope" ], "in_array": [ "bool in_array(mixed needle, array haystack [, bool strict])", "Checks if the given value exists in the array" ], "include": [ "bool include(string path)", "Includes and evaluates the specified file" ], "include_once": [ "bool include_once(string path)", "Includes and evaluates the specified file" ], "inet_ntop": [ "string inet_ntop(string in_addr)", "Converts a packed inet address to a human readable IP address string" ], "inet_pton": [ "string inet_pton(string ip_address)", "Converts a human readable IP address to a packed binary string" ], "ini_get": [ "string ini_get(string varname)", "Get a configuration option" ], "ini_get_all": [ "array ini_get_all([string extension[, bool details = true]])", "Get all configuration options" ], "ini_restore": [ "void ini_restore(string varname)", "Restore the value of a configuration option specified by varname" ], "ini_set": [ "string ini_set(string varname, string newvalue)", "Set a configuration option, returns false on error and the old value of the configuration option on success" ], "interface_exists": [ "bool interface_exists(string classname [, bool autoload])", "Checks if the class exists" ], "intl_error_name": [ "string intl_error_name()", "* Return a string for a given error code. * The string will be the same as the name of the error code constant." ], "intl_get_error_code": [ "int intl_get_error_code()", "* Get code of the last occured error." ], "intl_get_error_message": [ "string intl_get_error_message()", "* Get text description of the last occured error." ], "intl_is_failure": [ "bool intl_is_failure()", "* Check whether the given error code indicates a failure. * Returns true if it does, and false if the code * indicates success or a warning." ], "intval": [ "int intval(mixed var [, int base])", "Get the integer value of a variable using the optional base for the conversion" ], "ip2long": [ "int ip2long(string ip_address)", "Converts a string containing an (IPv4) Internet Protocol dotted address into a proper address" ], "iptcembed": [ "array iptcembed(string iptcdata, string jpeg_file_name [, int spool])", "Embed binary IPTC data into a JPEG image." ], "iptcparse": [ "array iptcparse(string iptcdata)", "Parse binary IPTC-data into associative array" ], "is_a": [ "bool is_a(object object, string class_name)", "Returns true if the object is of this class or has this class as one of its parents" ], "is_array": [ "bool is_array(mixed var)", "Returns true if variable is an array" ], "is_bool": [ "bool is_bool(mixed var)", "Returns true if variable is a boolean" ], "is_callable": [ "bool is_callable(mixed var [, bool syntax_only [, string callable_name]])", "Returns true if var is callable." ], "is_dir": [ "bool is_dir(string filename)", "Returns true if file is directory" ], "is_executable": [ "bool is_executable(string filename)", "Returns true if file is executable" ], "is_file": [ "bool is_file(string filename)", "Returns true if file is a regular file" ], "is_finite": [ "bool is_finite(float val)", "Returns whether argument is finite" ], "is_float": [ "bool is_float(mixed var)", "Returns true if variable is float point" ], "is_infinite": [ "bool is_infinite(float val)", "Returns whether argument is infinite" ], "is_link": [ "bool is_link(string filename)", "Returns true if file is symbolic link" ], "is_long": [ "bool is_long(mixed var)", "Returns true if variable is a long (integer)" ], "is_nan": [ "bool is_nan(float val)", "Returns whether argument is not a number" ], "is_null": [ "bool is_null(mixed var)", "Returns true if variable is null" ], "is_numeric": [ "bool is_numeric(mixed value)", "Returns true if value is a number or a numeric string" ], "is_object": [ "bool is_object(mixed var)", "Returns true if variable is an object" ], "is_readable": [ "bool is_readable(string filename)", "Returns true if file can be read" ], "is_resource": [ "bool is_resource(mixed var)", "Returns true if variable is a resource" ], "is_scalar": [ "bool is_scalar(mixed value)", "Returns true if value is a scalar" ], "is_string": [ "bool is_string(mixed var)", "Returns true if variable is a string" ], "is_subclass_of": [ "bool is_subclass_of(object object, string class_name)", "Returns true if the object has this class as one of its parents" ], "is_uploaded_file": [ "bool is_uploaded_file(string path)", "Check if file was created by rfc1867 upload" ], "is_writable": [ "bool is_writable(string filename)", "Returns true if file can be written" ], "isset": [ "bool isset(mixed var [, mixed var])", "Determine whether a variable is set" ], "iterator_apply": [ "int iterator_apply(Traversable it, mixed function [, mixed params])", "Calls a function for every element in an iterator" ], "iterator_count": [ "int iterator_count(Traversable it)", "Count the elements in an iterator" ], "iterator_to_array": [ "array iterator_to_array(Traversable it [, bool use_keys = true])", "Copy the iterator into an array" ], "jddayofweek": [ "mixed jddayofweek(int juliandaycount [, int mode])", "Returns name or number of day of week from julian day count" ], "jdmonthname": [ "string jdmonthname(int juliandaycount, int mode)", "Returns name of month for julian day count" ], "jdtofrench": [ "string jdtofrench(int juliandaycount)", "Converts a julian day count to a french republic calendar date" ], "jdtogregorian": [ "string jdtogregorian(int juliandaycount)", "Converts a julian day count to a gregorian calendar date" ], "jdtojewish": [ "string jdtojewish(int juliandaycount [, bool hebrew [, int fl]])", "Converts a julian day count to a jewish calendar date" ], "jdtojulian": [ "string jdtojulian(int juliandaycount)", "Convert a julian day count to a julian calendar date" ], "jdtounix": [ "int jdtounix(int jday)", "Convert Julian Day to UNIX timestamp" ], "jewishtojd": [ "int jewishtojd(int month, int day, int year)", "Converts a jewish calendar date to a julian day count" ], "join": [ "string join(array src, string glue)", "An alias for implode" ], "jpeg2wbmp": [ "bool jpeg2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)", "Convert JPEG image to WBMP image" ], "json_decode": [ "mixed json_decode(string json [, bool assoc [, long depth]])", "Decodes the JSON representation into a PHP value" ], "json_encode": [ "string json_encode(mixed data [, int options])", "Returns the JSON representation of a value" ], "json_last_error": [ "int json_last_error()", "Returns the error code of the last json_decode()." ], "juliantojd": [ "int juliantojd(int month, int day, int year)", "Converts a julian calendar date to julian day count" ], "key": [ "mixed key(array array_arg)", "Return the key of the element currently pointed to by the internal array pointer" ], "krsort": [ "bool krsort(array &array_arg [, int sort_flags])", "Sort an array by key value in reverse order" ], "ksort": [ "bool ksort(array &array_arg [, int sort_flags])", "Sort an array by key" ], "lcfirst": [ "string lcfirst(string str)", "Make a string's first character lowercase" ], "lcg_value": [ "float lcg_value()", "Returns a value from the combined linear congruential generator" ], "lchgrp": [ "bool lchgrp(string filename, mixed group)", "Change symlink group" ], "ldap_8859_to_t61": [ "string ldap_8859_to_t61(string value)", "Translate 8859 characters to t61 characters" ], "ldap_add": [ "bool ldap_add(resource link, string dn, array entry)", "Add entries to LDAP directory" ], "ldap_bind": [ "bool ldap_bind(resource link [, string dn [, string password]])", "Bind to LDAP directory" ], "ldap_compare": [ "bool ldap_compare(resource link, string dn, string attr, string value)", "Determine if an entry has a specific value for one of its attributes" ], "ldap_connect": [ "resource ldap_connect([string host [, int port [, string wallet [, string wallet_passwd [, int authmode]]]]])", "Connect to an LDAP server" ], "ldap_count_entries": [ "int ldap_count_entries(resource link, resource result)", "Count the number of entries in a search result" ], "ldap_delete": [ "bool ldap_delete(resource link, string dn)", "Delete an entry from a directory" ], "ldap_dn2ufn": [ "string ldap_dn2ufn(string dn)", "Convert DN to User Friendly Naming format" ], "ldap_err2str": [ "string ldap_err2str(int errno)", "Convert error number to error string" ], "ldap_errno": [ "int ldap_errno(resource link)", "Get the current ldap error number" ], "ldap_error": [ "string ldap_error(resource link)", "Get the current ldap error string" ], "ldap_explode_dn": [ "array ldap_explode_dn(string dn, int with_attrib)", "Splits DN into its component parts" ], "ldap_first_attribute": [ "string ldap_first_attribute(resource link, resource result_entry)", "Return first attribute" ], "ldap_first_entry": [ "resource ldap_first_entry(resource link, resource result)", "Return first result id" ], "ldap_first_reference": [ "resource ldap_first_reference(resource link, resource result)", "Return first reference" ], "ldap_free_result": [ "bool ldap_free_result(resource result)", "Free result memory" ], "ldap_get_attributes": [ "array ldap_get_attributes(resource link, resource result_entry)", "Get attributes from a search result entry" ], "ldap_get_dn": [ "string ldap_get_dn(resource link, resource result_entry)", "Get the DN of a result entry" ], "ldap_get_entries": [ "array ldap_get_entries(resource link, resource result)", "Get all result entries" ], "ldap_get_option": [ "bool ldap_get_option(resource link, int option, mixed retval)", "Get the current value of various session-wide parameters" ], "ldap_get_values_len": [ "array ldap_get_values_len(resource link, resource result_entry, string attribute)", "Get all values with lengths from a result entry" ], "ldap_list": [ "resource ldap_list(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])", "Single-level search" ], "ldap_mod_add": [ "bool ldap_mod_add(resource link, string dn, array entry)", "Add attribute values to current" ], "ldap_mod_del": [ "bool ldap_mod_del(resource link, string dn, array entry)", "Delete attribute values" ], "ldap_mod_replace": [ "bool ldap_mod_replace(resource link, string dn, array entry)", "Replace attribute values with new ones" ], "ldap_next_attribute": [ "string ldap_next_attribute(resource link, resource result_entry)", "Get the next attribute in result" ], "ldap_next_entry": [ "resource ldap_next_entry(resource link, resource result_entry)", "Get next result entry" ], "ldap_next_reference": [ "resource ldap_next_reference(resource link, resource reference_entry)", "Get next reference" ], "ldap_parse_reference": [ "bool ldap_parse_reference(resource link, resource reference_entry, array referrals)", "Extract information from reference entry" ], "ldap_parse_result": [ "bool ldap_parse_result(resource link, resource result, int errcode, string matcheddn, string errmsg, array referrals)", "Extract information from result" ], "ldap_read": [ "resource ldap_read(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])", "Read an entry" ], "ldap_rename": [ "bool ldap_rename(resource link, string dn, string newrdn, string newparent, bool deleteoldrdn);", "Modify the name of an entry" ], "ldap_sasl_bind": [ "bool ldap_sasl_bind(resource link [, string binddn [, string password [, string sasl_mech [, string sasl_realm [, string sasl_authc_id [, string sasl_authz_id [, string props]]]]]]])", "Bind to LDAP directory using SASL" ], "ldap_search": [ "resource ldap_search(resource|array link, string base_dn, string filter [, array attrs [, int attrsonly [, int sizelimit [, int timelimit [, int deref]]]]])", "Search LDAP tree under base_dn" ], "ldap_set_option": [ "bool ldap_set_option(resource link, int option, mixed newval)", "Set the value of various session-wide parameters" ], "ldap_set_rebind_proc": [ "bool ldap_set_rebind_proc(resource link, string callback)", "Set a callback function to do re-binds on referral chasing." ], "ldap_sort": [ "bool ldap_sort(resource link, resource result, string sortfilter)", "Sort LDAP result entries" ], "ldap_start_tls": [ "bool ldap_start_tls(resource link)", "Start TLS" ], "ldap_t61_to_8859": [ "string ldap_t61_to_8859(string value)", "Translate t61 characters to 8859 characters" ], "ldap_unbind": [ "bool ldap_unbind(resource link)", "Unbind from LDAP directory" ], "leak": [ "void leak(int num_bytes=3)", "Cause an intentional memory leak, for testing\/debugging purposes" ], "levenshtein": [ "int levenshtein(string str1, string str2[, int cost_ins, int cost_rep, int cost_del])", "Calculate Levenshtein distance between two strings" ], "libxml_clear_errors": [ "void libxml_clear_errors()", "Clear last error from libxml" ], "libxml_disable_entity_loader": [ "bool libxml_disable_entity_loader([boolean disable])", "Disable\/Enable ability to load external entities" ], "libxml_get_errors": [ "object libxml_get_errors()", "Retrieve array of errors" ], "libxml_get_last_error": [ "object libxml_get_last_error()", "Retrieve last error from libxml" ], "libxml_set_streams_context": [ "void libxml_set_streams_context(resource streams_context)", "Set the streams context for the next libxml document load or write" ], "libxml_use_internal_errors": [ "bool libxml_use_internal_errors([boolean use_errors])", "Disable libxml errors and allow user to fetch error information as needed" ], "link": [ "int link(string target, string link)", "Create a hard link" ], "linkinfo": [ "int linkinfo(string filename)", "Returns the st_dev field of the UNIX C stat structure describing the link" ], "litespeed_request_headers": [ "array litespeed_request_headers(void)", "Fetch all HTTP request headers" ], "litespeed_response_headers": [ "array litespeed_response_headers(void)", "Fetch all HTTP response headers" ], "locale_accept_from_http": [ "string locale_accept_from_http(string $http_accept)", null ], "locale_canonicalize": [ "static string locale_canonicalize(Locale $loc, string $locale)", "* @param string $locale The locale string to canonicalize" ], "locale_filter_matches": [ "boolean locale_filter_matches(string $langtag, string $locale[, bool $canonicalize])", "* Checks if a $langtag filter matches with $locale according to RFC 4647's basic filtering algorithm" ], "locale_get_all_variants": [ "static array locale_get_all_variants($locale)", "* gets an array containing the list of variants, or null" ], "locale_get_default": [ "static string locale_get_default( )", "Get default locale" ], "locale_get_keywords": [ "static array locale_get_keywords(string $locale) {", "* return an associative array containing keyword-value * pairs for this locale. The keys are keys to the array (doh!)" ], "locale_get_primary_language": [ "static string locale_get_primary_language($locale)", "* gets the primary language for the $locale" ], "locale_get_region": [ "static string locale_get_region($locale)", "* gets the region for the $locale" ], "locale_get_script": [ "static string locale_get_script($locale)", "* gets the script for the $locale" ], "locale_lookup": [ "string locale_lookup(array $langtag, string $locale[, bool $canonicalize[, string $default = null]])", "* Searchs the items in $langtag for the best match to the language * range" ], "locale_set_default": [ "static string locale_set_default( string $locale )", "Set default locale" ], "localeconv": [ "array localeconv(void)", "Returns numeric formatting information based on the current locale" ], "localtime": [ "array localtime([int timestamp [, bool associative_array]])", "Returns the results of the C system call localtime as an associative array if the associative_array argument is set to 1 other wise it is a regular array" ], "log": [ "float log(float number, [float base])", "Returns the natural logarithm of the number, or the base log if base is specified" ], "log10": [ "float log10(float number)", "Returns the base-10 logarithm of the number" ], "log1p": [ "float log1p(float number)", "Returns log(1 + number), computed in a way that accurate even when the value of number is close to zero" ], "long2ip": [ "string long2ip(int proper_address)", "Converts an (IPv4) Internet network address into a string in Internet standard dotted format" ], "lstat": [ "array lstat(string filename)", "Give information about a file or symbolic link" ], "ltrim": [ "string ltrim(string str [, string character_mask])", "Strips whitespace from the beginning of a string" ], "mail": [ "int mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])", "Send an email message" ], "max": [ "mixed max(mixed arg1 [, mixed arg2 [, mixed ...]])", "Return the highest value in an array or a series of arguments" ], "mb_check_encoding": [ "bool mb_check_encoding([string var[, string encoding]])", "Check if the string is valid for the specified encoding" ], "mb_convert_case": [ "string mb_convert_case(string sourcestring, int mode [, string encoding])", "Returns a case-folded version of sourcestring" ], "mb_convert_encoding": [ "string mb_convert_encoding(string str, string to-encoding [, mixed from-encoding])", "Returns converted string in desired encoding" ], "mb_convert_kana": [ "string mb_convert_kana(string str [, string option] [, string encoding])", "Conversion between full-width character and half-width character (Japanese)" ], "mb_convert_variables": [ "string mb_convert_variables(string to-encoding, mixed from-encoding, mixed vars [, ...])", "Converts the string resource in variables to desired encoding" ], "mb_decode_mimeheader": [ "string mb_decode_mimeheader(string string)", "Decodes the MIME \"encoded-word\" in the string" ], "mb_decode_numericentity": [ "string mb_decode_numericentity(string string, array convmap [, string encoding])", "Converts HTML numeric entities to character code" ], "mb_detect_encoding": [ "string mb_detect_encoding(string str [, mixed encoding_list [, bool strict]])", "Encodings of the given string is returned (as a string)" ], "mb_detect_order": [ "bool|array mb_detect_order([mixed encoding-list])", "Sets the current detect_order or Return the current detect_order as a array" ], "mb_encode_mimeheader": [ "string mb_encode_mimeheader(string str [, string charset [, string transfer-encoding [, string linefeed [, int indent]]]])", "Converts the string to MIME \"encoded-word\" in the format of =?charset?(B|Q)?encoded_string?=" ], "mb_encode_numericentity": [ "string mb_encode_numericentity(string string, array convmap [, string encoding])", "Converts specified characters to HTML numeric entities" ], "mb_encoding_aliases": [ "array mb_encoding_aliases(string encoding)", "Returns an array of the aliases of a given encoding name" ], "mb_ereg": [ "int mb_ereg(string pattern, string string [, array registers])", "Regular expression match for multibyte string" ], "mb_ereg_match": [ "bool mb_ereg_match(string pattern, string string [,string option])", "Regular expression match for multibyte string" ], "mb_ereg_replace": [ "string mb_ereg_replace(string pattern, string replacement, string string [, string option])", "Replace regular expression for multibyte string" ], "mb_ereg_search": [ "bool mb_ereg_search([string pattern[, string option]])", "Regular expression search for multibyte string" ], "mb_ereg_search_getpos": [ "int mb_ereg_search_getpos(void)", "Get search start position" ], "mb_ereg_search_getregs": [ "array mb_ereg_search_getregs(void)", "Get matched substring of the last time" ], "mb_ereg_search_init": [ "bool mb_ereg_search_init(string string [, string pattern[, string option]])", "Initialize string and regular expression for search." ], "mb_ereg_search_pos": [ "array mb_ereg_search_pos([string pattern[, string option]])", "Regular expression search for multibyte string" ], "mb_ereg_search_regs": [ "array mb_ereg_search_regs([string pattern[, string option]])", "Regular expression search for multibyte string" ], "mb_ereg_search_setpos": [ "bool mb_ereg_search_setpos(int position)", "Set search start position" ], "mb_eregi": [ "int mb_eregi(string pattern, string string [, array registers])", "Case-insensitive regular expression match for multibyte string" ], "mb_eregi_replace": [ "string mb_eregi_replace(string pattern, string replacement, string string)", "Case insensitive replace regular expression for multibyte string" ], "mb_get_info": [ "mixed mb_get_info([string type])", "Returns the current settings of mbstring" ], "mb_http_input": [ "mixed mb_http_input([string type])", "Returns the input encoding" ], "mb_http_output": [ "string mb_http_output([string encoding])", "Sets the current output_encoding or returns the current output_encoding as a string" ], "mb_internal_encoding": [ "string mb_internal_encoding([string encoding])", "Sets the current internal encoding or Returns the current internal encoding as a string" ], "mb_language": [ "string mb_language([string language])", "Sets the current language or Returns the current language as a string" ], "mb_list_encodings": [ "mixed mb_list_encodings()", "Returns an array of all supported entity encodings" ], "mb_output_handler": [ "string mb_output_handler(string contents, int status)", "Returns string in output buffer converted to the http_output encoding" ], "mb_parse_str": [ "bool mb_parse_str(string encoded_string [, array result])", "Parses GET\/POST\/COOKIE data and sets global variables" ], "mb_preferred_mime_name": [ "string mb_preferred_mime_name(string encoding)", "Return the preferred MIME name (charset) as a string" ], "mb_regex_encoding": [ "string mb_regex_encoding([string encoding])", "Returns the current encoding for regex as a string." ], "mb_regex_set_options": [ "string mb_regex_set_options([string options])", "Set or get the default options for mbregex functions" ], "mb_send_mail": [ "int mb_send_mail(string to, string subject, string message [, string additional_headers [, string additional_parameters]])", "* Sends an email message with MIME scheme" ], "mb_split": [ "array mb_split(string pattern, string string [, int limit])", "split multibyte string into array by regular expression" ], "mb_strcut": [ "string mb_strcut(string str, int start [, int length [, string encoding]])", "Returns part of a string" ], "mb_strimwidth": [ "string mb_strimwidth(string str, int start, int width [, string trimmarker [, string encoding]])", "Trim the string in terminal width" ], "mb_stripos": [ "int mb_stripos(string haystack, string needle [, int offset [, string encoding]])", "Finds position of first occurrence of a string within another, case insensitive" ], "mb_stristr": [ "string mb_stristr(string haystack, string needle[, bool part[, string encoding]])", "Finds first occurrence of a string within another, case insensitive" ], "mb_strlen": [ "int mb_strlen(string str [, string encoding])", "Get character numbers of a string" ], "mb_strpos": [ "int mb_strpos(string haystack, string needle [, int offset [, string encoding]])", "Find position of first occurrence of a string within another" ], "mb_strrchr": [ "string mb_strrchr(string haystack, string needle[, bool part[, string encoding]])", "Finds the last occurrence of a character in a string within another" ], "mb_strrichr": [ "string mb_strrichr(string haystack, string needle[, bool part[, string encoding]])", "Finds the last occurrence of a character in a string within another, case insensitive" ], "mb_strripos": [ "int mb_strripos(string haystack, string needle [, int offset [, string encoding]])", "Finds position of last occurrence of a string within another, case insensitive" ], "mb_strrpos": [ "int mb_strrpos(string haystack, string needle [, int offset [, string encoding]])", "Find position of last occurrence of a string within another" ], "mb_strstr": [ "string mb_strstr(string haystack, string needle[, bool part[, string encoding]])", "Finds first occurrence of a string within another" ], "mb_strtolower": [ "string mb_strtolower(string sourcestring [, string encoding])", "* Returns a lowercased version of sourcestring" ], "mb_strtoupper": [ "string mb_strtoupper(string sourcestring [, string encoding])", "* Returns a uppercased version of sourcestring" ], "mb_strwidth": [ "int mb_strwidth(string str [, string encoding])", "Gets terminal width of a string" ], "mb_substitute_character": [ "mixed mb_substitute_character([mixed substchar])", "Sets the current substitute_character or returns the current substitute_character" ], "mb_substr": [ "string mb_substr(string str, int start [, int length [, string encoding]])", "Returns part of a string" ], "mb_substr_count": [ "int mb_substr_count(string haystack, string needle [, string encoding])", "Count the number of substring occurrences" ], "mcrypt_cbc": [ "string mcrypt_cbc(int cipher, string key, string data, int mode, string iv)", "CBC crypt\/decrypt data using key key with cipher cipher starting with iv" ], "mcrypt_cfb": [ "string mcrypt_cfb(int cipher, string key, string data, int mode, string iv)", "CFB crypt\/decrypt data using key key with cipher cipher starting with iv" ], "mcrypt_create_iv": [ "string mcrypt_create_iv(int size, int source)", "Create an initialization vector (IV)" ], "mcrypt_decrypt": [ "string mcrypt_decrypt(string cipher, string key, string data, string mode, string iv)", "OFB crypt\/decrypt data using key key with cipher cipher starting with iv" ], "mcrypt_ecb": [ "string mcrypt_ecb(int cipher, string key, string data, int mode, string iv)", "ECB crypt\/decrypt data using key key with cipher cipher starting with iv" ], "mcrypt_enc_get_algorithms_name": [ "string mcrypt_enc_get_algorithms_name(resource td)", "Returns the name of the algorithm specified by the descriptor td" ], "mcrypt_enc_get_block_size": [ "int mcrypt_enc_get_block_size(resource td)", "Returns the block size of the cipher specified by the descriptor td" ], "mcrypt_enc_get_iv_size": [ "int mcrypt_enc_get_iv_size(resource td)", "Returns the size of the IV in bytes of the algorithm specified by the descriptor td" ], "mcrypt_enc_get_key_size": [ "int mcrypt_enc_get_key_size(resource td)", "Returns the maximum supported key size in bytes of the algorithm specified by the descriptor td" ], "mcrypt_enc_get_modes_name": [ "string mcrypt_enc_get_modes_name(resource td)", "Returns the name of the mode specified by the descriptor td" ], "mcrypt_enc_get_supported_key_sizes": [ "array mcrypt_enc_get_supported_key_sizes(resource td)", "This function decrypts the crypttext" ], "mcrypt_enc_is_block_algorithm": [ "bool mcrypt_enc_is_block_algorithm(resource td)", "Returns TRUE if the alrogithm is a block algorithms" ], "mcrypt_enc_is_block_algorithm_mode": [ "bool mcrypt_enc_is_block_algorithm_mode(resource td)", "Returns TRUE if the mode is for use with block algorithms" ], "mcrypt_enc_is_block_mode": [ "bool mcrypt_enc_is_block_mode(resource td)", "Returns TRUE if the mode outputs blocks" ], "mcrypt_enc_self_test": [ "int mcrypt_enc_self_test(resource td)", "This function runs the self test on the algorithm specified by the descriptor td" ], "mcrypt_encrypt": [ "string mcrypt_encrypt(string cipher, string key, string data, string mode, string iv)", "OFB crypt\/decrypt data using key key with cipher cipher starting with iv" ], "mcrypt_generic": [ "string mcrypt_generic(resource td, string data)", "This function encrypts the plaintext" ], "mcrypt_generic_deinit": [ "bool mcrypt_generic_deinit(resource td)", "This function terminates encrypt specified by the descriptor td" ], "mcrypt_generic_init": [ "int mcrypt_generic_init(resource td, string key, string iv)", "This function initializes all buffers for the specific module" ], "mcrypt_get_block_size": [ "int mcrypt_get_block_size(string cipher, string module)", "Get the key size of cipher" ], "mcrypt_get_cipher_name": [ "string mcrypt_get_cipher_name(string cipher)", "Get the key size of cipher" ], "mcrypt_get_iv_size": [ "int mcrypt_get_iv_size(string cipher, string module)", "Get the IV size of cipher (Usually the same as the blocksize)" ], "mcrypt_get_key_size": [ "int mcrypt_get_key_size(string cipher, string module)", "Get the key size of cipher" ], "mcrypt_list_algorithms": [ "array mcrypt_list_algorithms([string lib_dir])", "List all algorithms in \"module_dir\"" ], "mcrypt_list_modes": [ "array mcrypt_list_modes([string lib_dir])", "List all modes \"module_dir\"" ], "mcrypt_module_close": [ "bool mcrypt_module_close(resource td)", "Free the descriptor td" ], "mcrypt_module_get_algo_block_size": [ "int mcrypt_module_get_algo_block_size(string algorithm [, string lib_dir])", "Returns the block size of the algorithm" ], "mcrypt_module_get_algo_key_size": [ "int mcrypt_module_get_algo_key_size(string algorithm [, string lib_dir])", "Returns the maximum supported key size of the algorithm" ], "mcrypt_module_get_supported_key_sizes": [ "array mcrypt_module_get_supported_key_sizes(string algorithm [, string lib_dir])", "This function decrypts the crypttext" ], "mcrypt_module_is_block_algorithm": [ "bool mcrypt_module_is_block_algorithm(string algorithm [, string lib_dir])", "Returns TRUE if the algorithm is a block algorithm" ], "mcrypt_module_is_block_algorithm_mode": [ "bool mcrypt_module_is_block_algorithm_mode(string mode [, string lib_dir])", "Returns TRUE if the mode is for use with block algorithms" ], "mcrypt_module_is_block_mode": [ "bool mcrypt_module_is_block_mode(string mode [, string lib_dir])", "Returns TRUE if the mode outputs blocks of bytes" ], "mcrypt_module_open": [ "resource mcrypt_module_open(string cipher, string cipher_directory, string mode, string mode_directory)", "Opens the module of the algorithm and the mode to be used" ], "mcrypt_module_self_test": [ "bool mcrypt_module_self_test(string algorithm [, string lib_dir])", "Does a self test of the module \"module\"" ], "mcrypt_ofb": [ "string mcrypt_ofb(int cipher, string key, string data, int mode, string iv)", "OFB crypt\/decrypt data using key key with cipher cipher starting with iv" ], "md5": [ "string md5(string str, [ bool raw_output])", "Calculate the md5 hash of a string" ], "md5_file": [ "string md5_file(string filename [, bool raw_output])", "Calculate the md5 hash of given filename" ], "mdecrypt_generic": [ "string mdecrypt_generic(resource td, string data)", "This function decrypts the plaintext" ], "memory_get_peak_usage": [ "int memory_get_peak_usage([real_usage])", "Returns the peak allocated by PHP memory" ], "memory_get_usage": [ "int memory_get_usage([real_usage])", "Returns the allocated by PHP memory" ], "metaphone": [ "string metaphone(string text[, int phones])", "Break english phrases down into their phonemes" ], "method_exists": [ "bool method_exists(object object, string method)", "Checks if the class method exists" ], "mhash": [ "string mhash(int hash, string data [, string key])", "Hash data with hash" ], "mhash_count": [ "int mhash_count(void)", "Gets the number of available hashes" ], "mhash_get_block_size": [ "int mhash_get_block_size(int hash)", "Gets the block size of hash" ], "mhash_get_hash_name": [ "string mhash_get_hash_name(int hash)", "Gets the name of hash" ], "mhash_keygen_s2k": [ "string mhash_keygen_s2k(int hash, string input_password, string salt, int bytes)", "Generates a key using hash functions" ], "microtime": [ "mixed microtime([bool get_as_float])", "Returns either a string or a float containing the current time in seconds and microseconds" ], "mime_content_type": [ "string mime_content_type(string filename|resource stream)", "Return content-type for file" ], "min": [ "mixed min(mixed arg1 [, mixed arg2 [, mixed ...]])", "Return the lowest value in an array or a series of arguments" ], "mkdir": [ "bool mkdir(string pathname [, int mode [, bool recursive [, resource context]]])", "Create a directory" ], "mktime": [ "int mktime([int hour [, int min [, int sec [, int mon [, int day [, int year]]]]]])", "Get UNIX timestamp for a date" ], "money_format": [ "string money_format(string format , float value)", "Convert monetary value(s) to string" ], "move_uploaded_file": [ "bool move_uploaded_file(string path, string new_path)", "Move a file if and only if it was created by an upload" ], "msg_get_queue": [ "resource msg_get_queue(int key [, int perms])", "Attach to a message queue" ], "msg_queue_exists": [ "bool msg_queue_exists(int key)", "Check wether a message queue exists" ], "msg_receive": [ "mixed msg_receive(resource queue, int desiredmsgtype, int &msgtype, int maxsize, mixed message [, bool unserialize=true [, int flags=0 [, int errorcode]]])", "Send a message of type msgtype (must be > 0) to a message queue" ], "msg_remove_queue": [ "bool msg_remove_queue(resource queue)", "Destroy the queue" ], "msg_send": [ "bool msg_send(resource queue, int msgtype, mixed message [, bool serialize=true [, bool blocking=true [, int errorcode]]])", "Send a message of type msgtype (must be > 0) to a message queue" ], "msg_set_queue": [ "bool msg_set_queue(resource queue, array data)", "Set information for a message queue" ], "msg_stat_queue": [ "array msg_stat_queue(resource queue)", "Returns information about a message queue" ], "msgfmt_create": [ "MessageFormatter msgfmt_create( string $locale, string $pattern )", "* Create formatter." ], "msgfmt_format": [ "mixed msgfmt_format( MessageFormatter $nf, array $args )", "* Format a message." ], "msgfmt_format_message": [ "mixed msgfmt_format_message( string $locale, string $pattern, array $args )", "* Format a message." ], "msgfmt_get_error_code": [ "int msgfmt_get_error_code( MessageFormatter $nf )", "* Get formatter's last error code." ], "msgfmt_get_error_message": [ "string msgfmt_get_error_message( MessageFormatter $coll )", "* Get text description for formatter's last error code." ], "msgfmt_get_locale": [ "string msgfmt_get_locale(MessageFormatter $mf)", "* Get formatter locale." ], "msgfmt_get_pattern": [ "string msgfmt_get_pattern( MessageFormatter $mf )", "* Get formatter pattern." ], "msgfmt_parse": [ "array msgfmt_parse( MessageFormatter $nf, string $source )", "* Parse a message." ], "msgfmt_set_pattern": [ "bool msgfmt_set_pattern( MessageFormatter $mf, string $pattern )", "* Set formatter pattern." ], "mssql_bind": [ "bool mssql_bind(resource stmt, string param_name, mixed var, int type [, bool is_output [, bool is_null [, int maxlen]]])", "Adds a parameter to a stored procedure or a remote stored procedure" ], "mssql_close": [ "bool mssql_close([resource conn_id])", "Closes a connection to a MS-SQL server" ], "mssql_connect": [ "int mssql_connect([string servername [, string username [, string password [, bool new_link]]]])", "Establishes a connection to a MS-SQL server" ], "mssql_data_seek": [ "bool mssql_data_seek(resource result_id, int offset)", "Moves the internal row pointer of the MS-SQL result associated with the specified result identifier to pointer to the specified row number" ], "mssql_execute": [ "mixed mssql_execute(resource stmt [, bool skip_results = false])", "Executes a stored procedure on a MS-SQL server database" ], "mssql_fetch_array": [ "array mssql_fetch_array(resource result_id [, int result_type])", "Returns an associative array of the current row in the result set specified by result_id" ], "mssql_fetch_assoc": [ "array mssql_fetch_assoc(resource result_id)", "Returns an associative array of the current row in the result set specified by result_id" ], "mssql_fetch_batch": [ "int mssql_fetch_batch(resource result_index)", "Returns the next batch of records" ], "mssql_fetch_field": [ "object mssql_fetch_field(resource result_id [, int offset])", "Gets information about certain fields in a query result" ], "mssql_fetch_object": [ "object mssql_fetch_object(resource result_id)", "Returns a pseudo-object of the current row in the result set specified by result_id" ], "mssql_fetch_row": [ "array mssql_fetch_row(resource result_id)", "Returns an array of the current row in the result set specified by result_id" ], "mssql_field_length": [ "int mssql_field_length(resource result_id [, int offset])", "Get the length of a MS-SQL field" ], "mssql_field_name": [ "string mssql_field_name(resource result_id [, int offset])", "Returns the name of the field given by offset in the result set given by result_id" ], "mssql_field_seek": [ "bool mssql_field_seek(resource result_id, int offset)", "Seeks to the specified field offset" ], "mssql_field_type": [ "string mssql_field_type(resource result_id [, int offset])", "Returns the type of a field" ], "mssql_free_result": [ "bool mssql_free_result(resource result_index)", "Free a MS-SQL result index" ], "mssql_free_statement": [ "bool mssql_free_statement(resource result_index)", "Free a MS-SQL statement index" ], "mssql_get_last_message": [ "string mssql_get_last_message(void)", "Gets the last message from the MS-SQL server" ], "mssql_guid_string": [ "string mssql_guid_string(string binary [,bool short_format])", "Converts a 16 byte binary GUID to a string" ], "mssql_init": [ "int mssql_init(string sp_name [, resource conn_id])", "Initializes a stored procedure or a remote stored procedure" ], "mssql_min_error_severity": [ "void mssql_min_error_severity(int severity)", "Sets the lower error severity" ], "mssql_min_message_severity": [ "void mssql_min_message_severity(int severity)", "Sets the lower message severity" ], "mssql_next_result": [ "bool mssql_next_result(resource result_id)", "Move the internal result pointer to the next result" ], "mssql_num_fields": [ "int mssql_num_fields(resource mssql_result_index)", "Returns the number of fields fetched in from the result id specified" ], "mssql_num_rows": [ "int mssql_num_rows(resource mssql_result_index)", "Returns the number of rows fetched in from the result id specified" ], "mssql_pconnect": [ "int mssql_pconnect([string servername [, string username [, string password [, bool new_link]]]])", "Establishes a persistent connection to a MS-SQL server" ], "mssql_query": [ "resource mssql_query(string query [, resource conn_id [, int batch_size]])", "Perform an SQL query on a MS-SQL server database" ], "mssql_result": [ "string mssql_result(resource result_id, int row, mixed field)", "Returns the contents of one cell from a MS-SQL result set" ], "mssql_rows_affected": [ "int mssql_rows_affected(resource conn_id)", "Returns the number of records affected by the query" ], "mssql_select_db": [ "bool mssql_select_db(string database_name [, resource conn_id])", "Select a MS-SQL database" ], "mt_getrandmax": [ "int mt_getrandmax(void)", "Returns the maximum value a random number from Mersenne Twister can have" ], "mt_rand": [ "int mt_rand([int min, int max])", "Returns a random number from Mersenne Twister" ], "mt_srand": [ "void mt_srand([int seed])", "Seeds Mersenne Twister random number generator" ], "mysql_affected_rows": [ "int mysql_affected_rows([int link_identifier])", "Gets number of affected rows in previous MySQL operation" ], "mysql_client_encoding": [ "string mysql_client_encoding([int link_identifier])", "Returns the default character set for the current connection" ], "mysql_close": [ "bool mysql_close([int link_identifier])", "Close a MySQL connection" ], "mysql_connect": [ "resource mysql_connect([string hostname[:port][:\/path\/to\/socket] [, string username [, string password [, bool new [, int flags]]]]])", "Opens a connection to a MySQL Server" ], "mysql_create_db": [ "bool mysql_create_db(string database_name [, int link_identifier])", "Create a MySQL database" ], "mysql_data_seek": [ "bool mysql_data_seek(resource result, int row_number)", "Move internal result pointer" ], "mysql_db_query": [ "resource mysql_db_query(string database_name, string query [, int link_identifier])", "Sends an SQL query to MySQL" ], "mysql_drop_db": [ "bool mysql_drop_db(string database_name [, int link_identifier])", "Drops (delete) a MySQL database" ], "mysql_errno": [ "int mysql_errno([int link_identifier])", "Returns the number of the error message from previous MySQL operation" ], "mysql_error": [ "string mysql_error([int link_identifier])", "Returns the text of the error message from previous MySQL operation" ], "mysql_escape_string": [ "string mysql_escape_string(string to_be_escaped)", "Escape string for mysql query" ], "mysql_fetch_array": [ "array mysql_fetch_array(resource result [, int result_type])", "Fetch a result row as an array (associative, numeric or both)" ], "mysql_fetch_assoc": [ "array mysql_fetch_assoc(resource result)", "Fetch a result row as an associative array" ], "mysql_fetch_field": [ "object mysql_fetch_field(resource result [, int field_offset])", "Gets column information from a result and return as an object" ], "mysql_fetch_lengths": [ "array mysql_fetch_lengths(resource result)", "Gets max data size of each column in a result" ], "mysql_fetch_object": [ "object mysql_fetch_object(resource result [, string class_name [, NULL|array ctor_params]])", "Fetch a result row as an object" ], "mysql_fetch_row": [ "array mysql_fetch_row(resource result)", "Gets a result row as an enumerated array" ], "mysql_field_flags": [ "string mysql_field_flags(resource result, int field_offset)", "Gets the flags associated with the specified field in a result" ], "mysql_field_len": [ "int mysql_field_len(resource result, int field_offset)", "Returns the length of the specified field" ], "mysql_field_name": [ "string mysql_field_name(resource result, int field_index)", "Gets the name of the specified field in a result" ], "mysql_field_seek": [ "bool mysql_field_seek(resource result, int field_offset)", "Sets result pointer to a specific field offset" ], "mysql_field_table": [ "string mysql_field_table(resource result, int field_offset)", "Gets name of the table the specified field is in" ], "mysql_field_type": [ "string mysql_field_type(resource result, int field_offset)", "Gets the type of the specified field in a result" ], "mysql_free_result": [ "bool mysql_free_result(resource result)", "Free result memory" ], "mysql_get_client_info": [ "string mysql_get_client_info(void)", "Returns a string that represents the client library version" ], "mysql_get_host_info": [ "string mysql_get_host_info([int link_identifier])", "Returns a string describing the type of connection in use, including the server host name" ], "mysql_get_proto_info": [ "int mysql_get_proto_info([int link_identifier])", "Returns the protocol version used by current connection" ], "mysql_get_server_info": [ "string mysql_get_server_info([int link_identifier])", "Returns a string that represents the server version number" ], "mysql_info": [ "string mysql_info([int link_identifier])", "Returns a string containing information about the most recent query" ], "mysql_insert_id": [ "int mysql_insert_id([int link_identifier])", "Gets the ID generated from the previous INSERT operation" ], "mysql_list_dbs": [ "resource mysql_list_dbs([int link_identifier])", "List databases available on a MySQL server" ], "mysql_list_fields": [ "resource mysql_list_fields(string database_name, string table_name [, int link_identifier])", "List MySQL result fields" ], "mysql_list_processes": [ "resource mysql_list_processes([int link_identifier])", "Returns a result set describing the current server threads" ], "mysql_list_tables": [ "resource mysql_list_tables(string database_name [, int link_identifier])", "List tables in a MySQL database" ], "mysql_num_fields": [ "int mysql_num_fields(resource result)", "Gets number of fields in a result" ], "mysql_num_rows": [ "int mysql_num_rows(resource result)", "Gets number of rows in a result" ], "mysql_pconnect": [ "resource mysql_pconnect([string hostname[:port][:\/path\/to\/socket] [, string username [, string password [, int flags]]]])", "Opens a persistent connection to a MySQL Server" ], "mysql_ping": [ "bool mysql_ping([int link_identifier])", "Ping a server connection. If no connection then reconnect." ], "mysql_query": [ "resource mysql_query(string query [, int link_identifier])", "Sends an SQL query to MySQL" ], "mysql_real_escape_string": [ "string mysql_real_escape_string(string to_be_escaped [, int link_identifier])", "Escape special characters in a string for use in a SQL statement, taking into account the current charset of the connection" ], "mysql_result": [ "mixed mysql_result(resource result, int row [, mixed field])", "Gets result data" ], "mysql_select_db": [ "bool mysql_select_db(string database_name [, int link_identifier])", "Selects a MySQL database" ], "mysql_set_charset": [ "bool mysql_set_charset(string csname [, int link_identifier])", "sets client character set" ], "mysql_stat": [ "string mysql_stat([int link_identifier])", "Returns a string containing status information" ], "mysql_thread_id": [ "int mysql_thread_id([int link_identifier])", "Returns the thread id of current connection" ], "mysql_unbuffered_query": [ "resource mysql_unbuffered_query(string query [, int link_identifier])", "Sends an SQL query to MySQL, without fetching and buffering the result rows" ], "mysqli_affected_rows": [ "mixed mysqli_affected_rows(object link)", "Get number of affected rows in previous MySQL operation" ], "mysqli_autocommit": [ "bool mysqli_autocommit(object link, bool mode)", "Turn auto commit on or of" ], "mysqli_cache_stats": [ "array mysqli_cache_stats(void)", "Returns statistics about the zval cache" ], "mysqli_change_user": [ "bool mysqli_change_user(object link, string user, string password, string database)", "Change logged-in user of the active connection" ], "mysqli_character_set_name": [ "string mysqli_character_set_name(object link)", "Returns the name of the character set used for this connection" ], "mysqli_close": [ "bool mysqli_close(object link)", "Close connection" ], "mysqli_commit": [ "bool mysqli_commit(object link)", "Commit outstanding actions and close transaction" ], "mysqli_connect": [ "object mysqli_connect([string hostname [,string username [,string passwd [,string dbname [,int port [,string socket]]]]]])", "Open a connection to a mysql server" ], "mysqli_connect_errno": [ "int mysqli_connect_errno(void)", "Returns the numerical value of the error message from last connect command" ], "mysqli_connect_error": [ "string mysqli_connect_error(void)", "Returns the text of the error message from previous MySQL operation" ], "mysqli_data_seek": [ "bool mysqli_data_seek(object result, int offset)", "Move internal result pointer" ], "mysqli_debug": [ "void mysqli_debug(string debug)", "" ], "mysqli_dump_debug_info": [ "bool mysqli_dump_debug_info(object link)", "" ], "mysqli_embedded_server_end": [ "void mysqli_embedded_server_end(void)", "" ], "mysqli_embedded_server_start": [ "bool mysqli_embedded_server_start(bool start, array arguments, array groups)", "initialize and start embedded server" ], "mysqli_errno": [ "int mysqli_errno(object link)", "Returns the numerical value of the error message from previous MySQL operation" ], "mysqli_error": [ "string mysqli_error(object link)", "Returns the text of the error message from previous MySQL operation" ], "mysqli_fetch_all": [ "mixed mysqli_fetch_all (object result [,int resulttype])", "Fetches all result rows as an associative array, a numeric array, or both" ], "mysqli_fetch_array": [ "mixed mysqli_fetch_array (object result [,int resulttype])", "Fetch a result row as an associative array, a numeric array, or both" ], "mysqli_fetch_assoc": [ "mixed mysqli_fetch_assoc (object result)", "Fetch a result row as an associative array" ], "mysqli_fetch_field": [ "mixed mysqli_fetch_field (object result)", "Get column information from a result and return as an object" ], "mysqli_fetch_field_direct": [ "mixed mysqli_fetch_field_direct (object result, int offset)", "Fetch meta-data for a single field" ], "mysqli_fetch_fields": [ "mixed mysqli_fetch_fields (object result)", "Return array of objects containing field meta-data" ], "mysqli_fetch_lengths": [ "mixed mysqli_fetch_lengths (object result)", "Get the length of each output in a result" ], "mysqli_fetch_object": [ "mixed mysqli_fetch_object (object result [, string class_name [, NULL|array ctor_params]])", "Fetch a result row as an object" ], "mysqli_fetch_row": [ "array mysqli_fetch_row (object result)", "Get a result row as an enumerated array" ], "mysqli_field_count": [ "int mysqli_field_count(object link)", "Fetch the number of fields returned by the last query for the given link" ], "mysqli_field_seek": [ "int mysqli_field_seek(object result, int fieldnr)", "Set result pointer to a specified field offset" ], "mysqli_field_tell": [ "int mysqli_field_tell(object result)", "Get current field offset of result pointer" ], "mysqli_free_result": [ "void mysqli_free_result(object result)", "Free query result memory for the given result handle" ], "mysqli_get_charset": [ "object mysqli_get_charset(object link)", "returns a character set object" ], "mysqli_get_client_info": [ "string mysqli_get_client_info(void)", "Get MySQL client info" ], "mysqli_get_client_stats": [ "array mysqli_get_client_stats(void)", "Returns statistics about the zval cache" ], "mysqli_get_client_version": [ "int mysqli_get_client_version(void)", "Get MySQL client info" ], "mysqli_get_connection_stats": [ "array mysqli_get_connection_stats(void)", "Returns statistics about the zval cache" ], "mysqli_get_host_info": [ "string mysqli_get_host_info (object link)", "Get MySQL host info" ], "mysqli_get_proto_info": [ "int mysqli_get_proto_info(object link)", "Get MySQL protocol information" ], "mysqli_get_server_info": [ "string mysqli_get_server_info(object link)", "Get MySQL server info" ], "mysqli_get_server_version": [ "int mysqli_get_server_version(object link)", "Return the MySQL version for the server referenced by the given link" ], "mysqli_get_warnings": [ "object mysqli_get_warnings(object link) *\/", "PHP_FUNCTION(mysqli_get_warnings) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &mysql_link, mysqli_link_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID); if (mysql_warning_count(mysql->mysql)) { w = php_get_warnings(mysql->mysql TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } \/* }}}" ], "mysqli_info": [ "string mysqli_info(object link)", "Get information about the most recent query" ], "mysqli_init": [ "resource mysqli_init(void)", "Initialize mysqli and return a resource for use with mysql_real_connect" ], "mysqli_insert_id": [ "mixed mysqli_insert_id(object link)", "Get the ID generated from the previous INSERT operation" ], "mysqli_kill": [ "bool mysqli_kill(object link, int processid)", "Kill a mysql process on the server" ], "mysqli_link_construct": [ "object mysqli_link_construct()", "" ], "mysqli_more_results": [ "bool mysqli_more_results(object link)", "check if there any more query results from a multi query" ], "mysqli_multi_query": [ "bool mysqli_multi_query(object link, string query)", "allows to execute multiple queries" ], "mysqli_next_result": [ "bool mysqli_next_result(object link)", "read next result from multi_query" ], "mysqli_num_fields": [ "int mysqli_num_fields(object result)", "Get number of fields in result" ], "mysqli_num_rows": [ "mixed mysqli_num_rows(object result)", "Get number of rows in result" ], "mysqli_options": [ "bool mysqli_options(object link, int flags, mixed values)", "Set options" ], "mysqli_ping": [ "bool mysqli_ping(object link)", "Ping a server connection or reconnect if there is no connection" ], "mysqli_poll": [ "int mysqli_poll(array read, array write, array error, long sec [, long usec])", "Poll connections" ], "mysqli_prepare": [ "mixed mysqli_prepare(object link, string query)", "Prepare a SQL statement for execution" ], "mysqli_query": [ "mixed mysqli_query(object link, string query [,int resultmode]) *\/", "PHP_FUNCTION(mysqli_query) { MY_MYSQL *mysql; zval *mysql_link; MYSQLI_RESOURCE *mysqli_resource; MYSQL_RES *result; char *query = NULL; unsigned int query_len; unsigned long resultmode = MYSQLI_STORE_RESULT; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"Os|l\", &mysql_link, mysqli_link_class_entry, &query, &query_len, &resultmode) == FAILURE) { return; } if (!query_len) { php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Empty query\"); RETURN_FALSE; } if ((resultmode & ~MYSQLI_ASYNC) != MYSQLI_USE_RESULT && (resultmode & ~MYSQLI_ASYNC) != MYSQLI_STORE_RESULT) { php_error_docref(NULL TSRMLS_CC, E_WARNING, \"Invalid value for resultmode\"); RETURN_FALSE; } MYSQLI_FETCH_RESOURCE(mysql, MY_MYSQL*, &mysql_link, \"mysqli_link\", MYSQLI_STATUS_VALID); MYSQLI_DISABLE_MQ; #ifdef MYSQLI_USE_MYSQLND if (resultmode & MYSQLI_ASYNC) { if (mysqli_async_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } mysql->async_result_fetch_type = resultmode & ~MYSQLI_ASYNC; RETURN_TRUE; } #endif if (mysql_real_query(mysql->mysql, query, query_len)) { MYSQLI_REPORT_MYSQL_ERROR(mysql->mysql); RETURN_FALSE; } if (!mysql_field_count(mysql->mysql)) { \/* no result set - not a SELECT" ], "mysqli_real_connect": [ "bool mysqli_real_connect(object link [,string hostname [,string username [,string passwd [,string dbname [,int port [,string socket [,int flags]]]]]]])", "Open a connection to a mysql server" ], "mysqli_real_escape_string": [ "string mysqli_real_escape_string(object link, string escapestr)", "Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection" ], "mysqli_real_query": [ "bool mysqli_real_query(object link, string query)", "Binary-safe version of mysql_query()" ], "mysqli_reap_async_query": [ "int mysqli_reap_async_query(object link)", "Poll connections" ], "mysqli_refresh": [ "bool mysqli_refresh(object link, long options)", "Flush tables or caches, or reset replication server information" ], "mysqli_report": [ "bool mysqli_report(int flags)", "sets report level" ], "mysqli_rollback": [ "bool mysqli_rollback(object link)", "Undo actions from current transaction" ], "mysqli_select_db": [ "bool mysqli_select_db(object link, string dbname)", "Select a MySQL database" ], "mysqli_set_charset": [ "bool mysqli_set_charset(object link, string csname)", "sets client character set" ], "mysqli_set_local_infile_default": [ "void mysqli_set_local_infile_default(object link)", "unsets user defined handler for load local infile command" ], "mysqli_set_local_infile_handler": [ "bool mysqli_set_local_infile_handler(object link, callback read_func)", "Set callback functions for LOAD DATA LOCAL INFILE" ], "mysqli_sqlstate": [ "string mysqli_sqlstate(object link)", "Returns the SQLSTATE error from previous MySQL operation" ], "mysqli_ssl_set": [ "bool mysqli_ssl_set(object link ,string key ,string cert ,string ca ,string capath ,string cipher])", "" ], "mysqli_stat": [ "mixed mysqli_stat(object link)", "Get current system status" ], "mysqli_stmt_affected_rows": [ "mixed mysqli_stmt_affected_rows(object stmt)", "Return the number of rows affected in the last query for the given link" ], "mysqli_stmt_attr_get": [ "int mysqli_stmt_attr_get(object stmt, long attr)", "" ], "mysqli_stmt_attr_set": [ "int mysqli_stmt_attr_set(object stmt, long attr, long mode)", "" ], "mysqli_stmt_bind_param": [ "bool mysqli_stmt_bind_param(object stmt, string types, mixed variable [,mixed,....])", "Bind variables to a prepared statement as parameters" ], "mysqli_stmt_bind_result": [ "bool mysqli_stmt_bind_result(object stmt, mixed var, [,mixed, ...])", "Bind variables to a prepared statement for result storage" ], "mysqli_stmt_close": [ "bool mysqli_stmt_close(object stmt)", "Close statement" ], "mysqli_stmt_data_seek": [ "void mysqli_stmt_data_seek(object stmt, int offset)", "Move internal result pointer" ], "mysqli_stmt_errno": [ "int mysqli_stmt_errno(object stmt)", "" ], "mysqli_stmt_error": [ "string mysqli_stmt_error(object stmt)", "" ], "mysqli_stmt_execute": [ "bool mysqli_stmt_execute(object stmt)", "Execute a prepared statement" ], "mysqli_stmt_fetch": [ "mixed mysqli_stmt_fetch(object stmt)", "Fetch results from a prepared statement into the bound variables" ], "mysqli_stmt_field_count": [ "int mysqli_stmt_field_count(object stmt) {", "Return the number of result columns for the given statement" ], "mysqli_stmt_free_result": [ "void mysqli_stmt_free_result(object stmt)", "Free stored result memory for the given statement handle" ], "mysqli_stmt_get_result": [ "object mysqli_stmt_get_result(object link)", "Buffer result set on client" ], "mysqli_stmt_get_warnings": [ "object mysqli_stmt_get_warnings(object link) *\/", "PHP_FUNCTION(mysqli_stmt_get_warnings) { MY_STMT *stmt; zval *stmt_link; MYSQLI_RESOURCE *mysqli_resource; MYSQLI_WARNING *w; if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), \"O\", &stmt_link, mysqli_stmt_class_entry) == FAILURE) { return; } MYSQLI_FETCH_RESOURCE(stmt, MY_STMT*, &stmt_link, \"mysqli_stmt\", MYSQLI_STATUS_VALID); if (mysqli_stmt_warning_count(stmt->stmt)) { w = php_get_warnings(mysqli_stmt_get_connection(stmt->stmt) TSRMLS_CC); } else { RETURN_FALSE; } mysqli_resource = (MYSQLI_RESOURCE *)ecalloc (1, sizeof(MYSQLI_RESOURCE)); mysqli_resource->ptr = mysqli_resource->info = (void *)w; mysqli_resource->status = MYSQLI_STATUS_VALID; MYSQLI_RETURN_RESOURCE(mysqli_resource, mysqli_warning_class_entry); } \/* }}}" ], "mysqli_stmt_init": [ "mixed mysqli_stmt_init(object link)", "Initialize statement object" ], "mysqli_stmt_insert_id": [ "mixed mysqli_stmt_insert_id(object stmt)", "Get the ID generated from the previous INSERT operation" ], "mysqli_stmt_next_result": [ "bool mysqli_stmt_next_result(object link)", "read next result from multi_query" ], "mysqli_stmt_num_rows": [ "mixed mysqli_stmt_num_rows(object stmt)", "Return the number of rows in statements result set" ], "mysqli_stmt_param_count": [ "int mysqli_stmt_param_count(object stmt)", "Return the number of parameter for the given statement" ], "mysqli_stmt_prepare": [ "bool mysqli_stmt_prepare(object stmt, string query)", "prepare server side statement with query" ], "mysqli_stmt_reset": [ "bool mysqli_stmt_reset(object stmt)", "reset a prepared statement" ], "mysqli_stmt_result_metadata": [ "mixed mysqli_stmt_result_metadata(object stmt)", "return result set from statement" ], "mysqli_stmt_send_long_data": [ "bool mysqli_stmt_send_long_data(object stmt, int param_nr, string data)", "" ], "mysqli_stmt_sqlstate": [ "string mysqli_stmt_sqlstate(object stmt)", "" ], "mysqli_stmt_store_result": [ "bool mysqli_stmt_store_result(stmt)", "" ], "mysqli_store_result": [ "object mysqli_store_result(object link)", "Buffer result set on client" ], "mysqli_thread_id": [ "int mysqli_thread_id(object link)", "Return the current thread ID" ], "mysqli_thread_safe": [ "bool mysqli_thread_safe(void)", "Return whether thread safety is given or not" ], "mysqli_use_result": [ "mixed mysqli_use_result(object link)", "Directly retrieve query results - do not buffer results on client side" ], "mysqli_warning_count": [ "int mysqli_warning_count (object link)", "Return number of warnings from the last query for the given link" ], "natcasesort": [ "void natcasesort(array &array_arg)", "Sort an array using case-insensitive natural sort" ], "natsort": [ "void natsort(array &array_arg)", "Sort an array using natural sort" ], "next": [ "mixed next(array array_arg)", "Move array argument's internal pointer to the next element and return it" ], "ngettext": [ "string ngettext(string MSGID1, string MSGID2, int N)", "Plural version of gettext()" ], "nl2br": [ "string nl2br(string str [, bool is_xhtml])", "Converts newlines to HTML line breaks" ], "nl_langinfo": [ "string nl_langinfo(int item)", "Query language and locale information" ], "normalizer_is_normalize": [ "bool normalizer_is_normalize( string $input [, string $form = FORM_C] )", "* Test if a string is in a given normalization form." ], "normalizer_normalize": [ "string normalizer_normalize( string $input [, string $form = FORM_C] )", "* Normalize a string." ], "nsapi_request_headers": [ "array nsapi_request_headers(void)", "Get all headers from the request" ], "nsapi_response_headers": [ "array nsapi_response_headers(void)", "Get all headers from the response" ], "nsapi_virtual": [ "bool nsapi_virtual(string uri)", "Perform an NSAPI sub-request" ], "number_format": [ "string number_format(float number [, int num_decimal_places [, string dec_seperator, string thousands_seperator]])", "Formats a number with grouped thousands" ], "numfmt_create": [ "NumberFormatter numfmt_create( string $locale, int style[, string $pattern ] )", "* Create number formatter." ], "numfmt_format": [ "mixed numfmt_format( NumberFormatter $nf, mixed $num[, int type] )", "* Format a number." ], "numfmt_format_currency": [ "mixed numfmt_format_currency( NumberFormatter $nf, double $num, string $currency )", "* Format a number as currency." ], "numfmt_get_attribute": [ "mixed numfmt_get_attribute( NumberFormatter $nf, int $attr )", "* Get formatter attribute value." ], "numfmt_get_error_code": [ "int numfmt_get_error_code( NumberFormatter $nf )", "* Get formatter's last error code." ], "numfmt_get_error_message": [ "string numfmt_get_error_message( NumberFormatter $nf )", "* Get text description for formatter's last error code." ], "numfmt_get_locale": [ "string numfmt_get_locale( NumberFormatter $nf[, int type] )", "* Get formatter locale." ], "numfmt_get_pattern": [ "string numfmt_get_pattern( NumberFormatter $nf )", "* Get formatter pattern." ], "numfmt_get_symbol": [ "string numfmt_get_symbol( NumberFormatter $nf, int $attr )", "* Get formatter symbol value." ], "numfmt_get_text_attribute": [ "string numfmt_get_text_attribute( NumberFormatter $nf, int $attr )", "* Get formatter attribute value." ], "numfmt_parse": [ "mixed numfmt_parse( NumberFormatter $nf, string $str[, int $type, int &$position ])", "* Parse a number." ], "numfmt_parse_currency": [ "double numfmt_parse_currency( NumberFormatter $nf, string $str, string $¤cy[, int $&position] )", "* Parse a number as currency." ], "numfmt_parse_message": [ "array numfmt_parse_message( string $locale, string $pattern, string $source )", "* Parse a message." ], "numfmt_set_attribute": [ "bool numfmt_set_attribute( NumberFormatter $nf, int $attr, mixed $value )", "* Get formatter attribute value." ], "numfmt_set_pattern": [ "bool numfmt_set_pattern( NumberFormatter $nf, string $pattern )", "* Set formatter pattern." ], "numfmt_set_symbol": [ "bool numfmt_set_symbol( NumberFormatter $nf, int $attr, string $symbol )", "* Set formatter symbol value." ], "numfmt_set_text_attribute": [ "bool numfmt_set_text_attribute( NumberFormatter $nf, int $attr, string $value )", "* Get formatter attribute value." ], "ob_clean": [ "bool ob_clean(void)", "Clean (delete) the current output buffer" ], "ob_end_clean": [ "bool ob_end_clean(void)", "Clean the output buffer, and delete current output buffer" ], "ob_end_flush": [ "bool ob_end_flush(void)", "Flush (send) the output buffer, and delete current output buffer" ], "ob_flush": [ "bool ob_flush(void)", "Flush (send) contents of the output buffer. The last buffer content is sent to next buffer" ], "ob_get_clean": [ "bool ob_get_clean(void)", "Get current buffer contents and delete current output buffer" ], "ob_get_contents": [ "string ob_get_contents(void)", "Return the contents of the output buffer" ], "ob_get_flush": [ "bool ob_get_flush(void)", "Get current buffer contents, flush (send) the output buffer, and delete current output buffer" ], "ob_get_length": [ "int ob_get_length(void)", "Return the length of the output buffer" ], "ob_get_level": [ "int ob_get_level(void)", "Return the nesting level of the output buffer" ], "ob_get_status": [ "false|array ob_get_status([bool full_status])", "Return the status of the active or all output buffers" ], "ob_gzhandler": [ "string ob_gzhandler(string str, int mode)", "Encode str based on accept-encoding setting - designed to be called from ob_start()" ], "ob_iconv_handler": [ "string ob_iconv_handler(string contents, int status)", "Returns str in output buffer converted to the iconv.output_encoding character set" ], "ob_implicit_flush": [ "void ob_implicit_flush([int flag])", "Turn implicit flush on\/off and is equivalent to calling flush() after every output call" ], "ob_list_handlers": [ "false|array ob_list_handlers()", "* List all output_buffers in an array" ], "ob_start": [ "bool ob_start([ string|array user_function [, int chunk_size [, bool erase]]])", "Turn on Output Buffering (specifying an optional output handler)." ], "oci_bind_array_by_name": [ "bool oci_bind_array_by_name(resource stmt, string name, array &var, int max_table_length [, int max_item_length [, int type ]])", "Bind a PHP array to an Oracle PL\/SQL type by name" ], "oci_bind_by_name": [ "bool oci_bind_by_name(resource stmt, string name, mixed &var, [, int maxlength [, int type]])", "Bind a PHP variable to an Oracle placeholder by name" ], "oci_cancel": [ "bool oci_cancel(resource stmt)", "Cancel reading from a cursor" ], "oci_close": [ "bool oci_close(resource connection)", "Disconnect from database" ], "oci_collection_append": [ "bool oci_collection_append(string value)", "Append an object to the collection" ], "oci_collection_assign": [ "bool oci_collection_assign(object from)", "Assign a collection from another existing collection" ], "oci_collection_element_assign": [ "bool oci_collection_element_assign(int index, string val)", "Assign element val to collection at index ndx" ], "oci_collection_element_get": [ "string oci_collection_element_get(int ndx)", "Retrieve the value at collection index ndx" ], "oci_collection_max": [ "int oci_collection_max()", "Return the max value of a collection. For a varray this is the maximum length of the array" ], "oci_collection_size": [ "int oci_collection_size()", "Return the size of a collection" ], "oci_collection_trim": [ "bool oci_collection_trim(int num)", "Trim num elements from the end of a collection" ], "oci_commit": [ "bool oci_commit(resource connection)", "Commit the current context" ], "oci_connect": [ "resource oci_connect(string user, string pass [, string db [, string charset [, int session_mode ]])", "Connect to an Oracle database and log on. Returns a new session." ], "oci_define_by_name": [ "bool oci_define_by_name(resource stmt, string name, mixed &var [, int type])", "Define a PHP variable to an Oracle column by name" ], "oci_error": [ "array oci_error([resource stmt|connection|global])", "Return the last error of stmt|connection|global. If no error happened returns false." ], "oci_execute": [ "bool oci_execute(resource stmt [, int mode])", "Execute a parsed statement" ], "oci_fetch": [ "bool oci_fetch(resource stmt)", "Prepare a new row of data for reading" ], "oci_fetch_all": [ "int oci_fetch_all(resource stmt, array &output[, int skip[, int maxrows[, int flags]]])", "Fetch all rows of result data into an array" ], "oci_fetch_array": [ "array oci_fetch_array( resource stmt [, int mode ])", "Fetch a result row as an array" ], "oci_fetch_assoc": [ "array oci_fetch_assoc( resource stmt )", "Fetch a result row as an associative array" ], "oci_fetch_object": [ "object oci_fetch_object( resource stmt )", "Fetch a result row as an object" ], "oci_fetch_row": [ "array oci_fetch_row( resource stmt )", "Fetch a result row as an enumerated array" ], "oci_field_is_null": [ "bool oci_field_is_null(resource stmt, int col)", "Tell whether a column is NULL" ], "oci_field_name": [ "string oci_field_name(resource stmt, int col)", "Tell the name of a column" ], "oci_field_precision": [ "int oci_field_precision(resource stmt, int col)", "Tell the precision of a column" ], "oci_field_scale": [ "int oci_field_scale(resource stmt, int col)", "Tell the scale of a column" ], "oci_field_size": [ "int oci_field_size(resource stmt, int col)", "Tell the maximum data size of a column" ], "oci_field_type": [ "mixed oci_field_type(resource stmt, int col)", "Tell the data type of a column" ], "oci_field_type_raw": [ "int oci_field_type_raw(resource stmt, int col)", "Tell the raw oracle data type of a column" ], "oci_free_collection": [ "bool oci_free_collection()", "Deletes collection object" ], "oci_free_descriptor": [ "bool oci_free_descriptor()", "Deletes large object description" ], "oci_free_statement": [ "bool oci_free_statement(resource stmt)", "Free all resources associated with a statement" ], "oci_internal_debug": [ "void oci_internal_debug(int onoff)", "Toggle internal debugging output for the OCI extension" ], "oci_lob_append": [ "bool oci_lob_append( object lob )", "Appends data from a LOB to another LOB" ], "oci_lob_close": [ "bool oci_lob_close()", "Closes lob descriptor" ], "oci_lob_copy": [ "bool oci_lob_copy( object lob_to, object lob_from [, int length ] )", "Copies data from a LOB to another LOB" ], "oci_lob_eof": [ "bool oci_lob_eof()", "Checks if EOF is reached" ], "oci_lob_erase": [ "int oci_lob_erase( [ int offset [, int length ] ] )", "Erases a specified portion of the internal LOB, starting at a specified offset" ], "oci_lob_export": [ "bool oci_lob_export([string filename [, int start [, int length]]])", "Writes a large object into a file" ], "oci_lob_flush": [ "bool oci_lob_flush( [ int flag ] )", "Flushes the LOB buffer" ], "oci_lob_import": [ "bool oci_lob_import( string filename )", "Loads file into a LOB" ], "oci_lob_is_equal": [ "bool oci_lob_is_equal( object lob1, object lob2 )", "Tests to see if two LOB\/FILE locators are equal" ], "oci_lob_load": [ "string oci_lob_load()", "Loads a large object" ], "oci_lob_read": [ "string oci_lob_read( int length )", "Reads particular part of a large object" ], "oci_lob_rewind": [ "bool oci_lob_rewind()", "Rewind pointer of a LOB" ], "oci_lob_save": [ "bool oci_lob_save( string data [, int offset ])", "Saves a large object" ], "oci_lob_seek": [ "bool oci_lob_seek( int offset [, int whence ])", "Moves the pointer of a LOB" ], "oci_lob_size": [ "int oci_lob_size()", "Returns size of a large object" ], "oci_lob_tell": [ "int oci_lob_tell()", "Tells LOB pointer position" ], "oci_lob_truncate": [ "bool oci_lob_truncate( [ int length ])", "Truncates a LOB" ], "oci_lob_write": [ "int oci_lob_write( string string [, int length ])", "Writes data to current position of a LOB" ], "oci_lob_write_temporary": [ "bool oci_lob_write_temporary(string var [, int lob_type])", "Writes temporary blob" ], "oci_new_collection": [ "object oci_new_collection(resource connection, string tdo [, string schema])", "Initialize a new collection" ], "oci_new_connect": [ "resource oci_new_connect(string user, string pass [, string db])", "Connect to an Oracle database and log on. Returns a new session." ], "oci_new_cursor": [ "resource oci_new_cursor(resource connection)", "Return a new cursor (Statement-Handle) - use this to bind ref-cursors!" ], "oci_new_descriptor": [ "object oci_new_descriptor(resource connection [, int type])", "Initialize a new empty descriptor LOB\/FILE (LOB is default)" ], "oci_num_fields": [ "int oci_num_fields(resource stmt)", "Return the number of result columns in a statement" ], "oci_num_rows": [ "int oci_num_rows(resource stmt)", "Return the row count of an OCI statement" ], "oci_parse": [ "resource oci_parse(resource connection, string query)", "Parse a query and return a statement" ], "oci_password_change": [ "bool oci_password_change(resource connection, string username, string old_password, string new_password)", "Changes the password of an account" ], "oci_pconnect": [ "resource oci_pconnect(string user, string pass [, string db [, string charset ]])", "Connect to an Oracle database using a persistent connection and log on. Returns a new session." ], "oci_result": [ "string oci_result(resource stmt, mixed column)", "Return a single column of result data" ], "oci_rollback": [ "bool oci_rollback(resource connection)", "Rollback the current context" ], "oci_server_version": [ "string oci_server_version(resource connection)", "Return a string containing server version information" ], "oci_set_action": [ "bool oci_set_action(resource connection, string value)", "Sets the action attribute on the connection" ], "oci_set_client_identifier": [ "bool oci_set_client_identifier(resource connection, string value)", "Sets the client identifier attribute on the connection" ], "oci_set_client_info": [ "bool oci_set_client_info(resource connection, string value)", "Sets the client info attribute on the connection" ], "oci_set_edition": [ "bool oci_set_edition(string value)", "Sets the edition attribute for all subsequent connections created" ], "oci_set_module_name": [ "bool oci_set_module_name(resource connection, string value)", "Sets the module attribute on the connection" ], "oci_set_prefetch": [ "bool oci_set_prefetch(resource stmt, int prefetch_rows)", "Sets the number of rows to be prefetched on execute to prefetch_rows for stmt" ], "oci_statement_type": [ "string oci_statement_type(resource stmt)", "Return the query type of an OCI statement" ], "ocifetchinto": [ "int ocifetchinto(resource stmt, array &output [, int mode])", "Fetch a row of result data into an array" ], "ocigetbufferinglob": [ "bool ocigetbufferinglob()", "Returns current state of buffering for a LOB" ], "ocisetbufferinglob": [ "bool ocisetbufferinglob( boolean flag )", "Enables\/disables buffering for a LOB" ], "octdec": [ "int octdec(string octal_number)", "Returns the decimal equivalent of an octal string" ], "odbc_autocommit": [ "mixed odbc_autocommit(resource connection_id [, int OnOff])", "Toggle autocommit mode or get status" ], "odbc_binmode": [ "bool odbc_binmode(int result_id, int mode)", "Handle binary column data" ], "odbc_close": [ "void odbc_close(resource connection_id)", "Close an ODBC connection" ], "odbc_close_all": [ "void odbc_close_all(void)", "Close all ODBC connections" ], "odbc_columnprivileges": [ "resource odbc_columnprivileges(resource connection_id, string catalog, string schema, string table, string column)", "Returns a result identifier that can be used to fetch a list of columns and associated privileges for the specified table" ], "odbc_columns": [ "resource odbc_columns(resource connection_id [, string qualifier [, string owner [, string table_name [, string column_name]]]])", "Returns a result identifier that can be used to fetch a list of column names in specified tables" ], "odbc_commit": [ "bool odbc_commit(resource connection_id)", "Commit an ODBC transaction" ], "odbc_connect": [ "resource odbc_connect(string DSN, string user, string password [, int cursor_option])", "Connect to a datasource" ], "odbc_cursor": [ "string odbc_cursor(resource result_id)", "Get cursor name" ], "odbc_data_source": [ "array odbc_data_source(resource connection_id, int fetch_type)", "Return information about the currently connected data source" ], "odbc_error": [ "string odbc_error([resource connection_id])", "Get the last error code" ], "odbc_errormsg": [ "string odbc_errormsg([resource connection_id])", "Get the last error message" ], "odbc_exec": [ "resource odbc_exec(resource connection_id, string query [, int flags])", "Prepare and execute an SQL statement" ], "odbc_execute": [ "bool odbc_execute(resource result_id [, array parameters_array])", "Execute a prepared statement" ], "odbc_fetch_array": [ "array odbc_fetch_array(int result [, int rownumber])", "Fetch a result row as an associative array" ], "odbc_fetch_into": [ "int odbc_fetch_into(resource result_id, array &result_array, [, int rownumber])", "Fetch one result row into an array" ], "odbc_fetch_object": [ "object odbc_fetch_object(int result [, int rownumber])", "Fetch a result row as an object" ], "odbc_fetch_row": [ "bool odbc_fetch_row(resource result_id [, int row_number])", "Fetch a row" ], "odbc_field_len": [ "int odbc_field_len(resource result_id, int field_number)", "Get the length (precision) of a column" ], "odbc_field_name": [ "string odbc_field_name(resource result_id, int field_number)", "Get a column name" ], "odbc_field_num": [ "int odbc_field_num(resource result_id, string field_name)", "Return column number" ], "odbc_field_scale": [ "int odbc_field_scale(resource result_id, int field_number)", "Get the scale of a column" ], "odbc_field_type": [ "string odbc_field_type(resource result_id, int field_number)", "Get the datatype of a column" ], "odbc_foreignkeys": [ "resource odbc_foreignkeys(resource connection_id, string pk_qualifier, string pk_owner, string pk_table, string fk_qualifier, string fk_owner, string fk_table)", "Returns a result identifier to either a list of foreign keys in the specified table or a list of foreign keys in other tables that refer to the primary key in the specified table" ], "odbc_free_result": [ "bool odbc_free_result(resource result_id)", "Free resources associated with a result" ], "odbc_gettypeinfo": [ "resource odbc_gettypeinfo(resource connection_id [, int data_type])", "Returns a result identifier containing information about data types supported by the data source" ], "odbc_longreadlen": [ "bool odbc_longreadlen(int result_id, int length)", "Handle LONG columns" ], "odbc_next_result": [ "bool odbc_next_result(resource result_id)", "Checks if multiple results are avaiable" ], "odbc_num_fields": [ "int odbc_num_fields(resource result_id)", "Get number of columns in a result" ], "odbc_num_rows": [ "int odbc_num_rows(resource result_id)", "Get number of rows in a result" ], "odbc_pconnect": [ "resource odbc_pconnect(string DSN, string user, string password [, int cursor_option])", "Establish a persistent connection to a datasource" ], "odbc_prepare": [ "resource odbc_prepare(resource connection_id, string query)", "Prepares a statement for execution" ], "odbc_primarykeys": [ "resource odbc_primarykeys(resource connection_id, string qualifier, string owner, string table)", "Returns a result identifier listing the column names that comprise the primary key for a table" ], "odbc_procedurecolumns": [ "resource odbc_procedurecolumns(resource connection_id [, string qualifier, string owner, string proc, string column])", "Returns a result identifier containing the list of input and output parameters, as well as the columns that make up the result set for the specified procedures" ], "odbc_procedures": [ "resource odbc_procedures(resource connection_id [, string qualifier, string owner, string name])", "Returns a result identifier containg the list of procedure names in a datasource" ], "odbc_result": [ "mixed odbc_result(resource result_id, mixed field)", "Get result data" ], "odbc_result_all": [ "int odbc_result_all(resource result_id [, string format])", "Print result as HTML table" ], "odbc_rollback": [ "bool odbc_rollback(resource connection_id)", "Rollback a transaction" ], "odbc_setoption": [ "bool odbc_setoption(resource conn_id|result_id, int which, int option, int value)", "Sets connection or statement options" ], "odbc_specialcolumns": [ "resource odbc_specialcolumns(resource connection_id, int type, string qualifier, string owner, string table, int scope, int nullable)", "Returns a result identifier containing either the optimal set of columns that uniquely identifies a row in the table or columns that are automatically updated when any value in the row is updated by a transaction" ], "odbc_statistics": [ "resource odbc_statistics(resource connection_id, string qualifier, string owner, string name, int unique, int accuracy)", "Returns a result identifier that contains statistics about a single table and the indexes associated with the table" ], "odbc_tableprivileges": [ "resource odbc_tableprivileges(resource connection_id, string qualifier, string owner, string name)", "Returns a result identifier containing a list of tables and the privileges associated with each table" ], "odbc_tables": [ "resource odbc_tables(resource connection_id [, string qualifier [, string owner [, string name [, string table_types]]]])", "Call the SQLTables function" ], "opendir": [ "mixed opendir(string path[, resource context])", "Open a directory and return a dir_handle" ], "openlog": [ "bool openlog(string ident, int option, int facility)", "Open connection to system logger" ], "openssl_csr_export": [ "bool openssl_csr_export(resource csr, string &out [, bool notext=true])", "Exports a CSR to file or a var" ], "openssl_csr_export_to_file": [ "bool openssl_csr_export_to_file(resource csr, string outfilename [, bool notext=true])", "Exports a CSR to file" ], "openssl_csr_get_public_key": [ "mixed openssl_csr_get_public_key(mixed csr)", "Returns the subject of a CERT or FALSE on error" ], "openssl_csr_get_subject": [ "mixed openssl_csr_get_subject(mixed csr)", "Returns the subject of a CERT or FALSE on error" ], "openssl_csr_new": [ "bool openssl_csr_new(array dn, resource &privkey [, array configargs [, array extraattribs]])", "Generates a privkey and CSR" ], "openssl_csr_sign": [ "resource openssl_csr_sign(mixed csr, mixed x509, mixed priv_key, long days [, array config_args [, long serial]])", "Signs a cert with another CERT" ], "openssl_decrypt": [ "string openssl_decrypt(string data, string method, string password [, bool raw_input=false])", "Takes raw or base64 encoded string and dectupt it using given method and key" ], "openssl_dh_compute_key": [ "string openssl_dh_compute_key(string pub_key, resource dh_key)", "Computes shared sicret for public value of remote DH key and local DH key" ], "openssl_digest": [ "string openssl_digest(string data, string method [, bool raw_output=false])", "Computes digest hash value for given data using given method, returns raw or binhex encoded string" ], "openssl_encrypt": [ "string openssl_encrypt(string data, string method, string password [, bool raw_output=false])", "Encrypts given data with given method and key, returns raw or base64 encoded string" ], "openssl_error_string": [ "mixed openssl_error_string(void)", "Returns a description of the last error, and alters the index of the error messages. Returns false when the are no more messages" ], "openssl_get_cipher_methods": [ "array openssl_get_cipher_methods([bool aliases = false])", "Return array of available cipher methods" ], "openssl_get_md_methods": [ "array openssl_get_md_methods([bool aliases = false])", "Return array of available digest methods" ], "openssl_open": [ "bool openssl_open(string data, &string opendata, string ekey, mixed privkey)", "Opens data" ], "openssl_pkcs12_export": [ "bool openssl_pkcs12_export(mixed x509, string &out, mixed priv_key, string pass[, array args])", "Creates and exports a PKCS12 to a var" ], "openssl_pkcs12_export_to_file": [ "bool openssl_pkcs12_export_to_file(mixed x509, string filename, mixed priv_key, string pass[, array args])", "Creates and exports a PKCS to file" ], "openssl_pkcs12_read": [ "bool openssl_pkcs12_read(string PKCS12, array &certs, string pass)", "Parses a PKCS12 to an array" ], "openssl_pkcs7_decrypt": [ "bool openssl_pkcs7_decrypt(string infilename, string outfilename, mixed recipcert [, mixed recipkey])", "Decrypts the S\/MIME message in the file name infilename and output the results to the file name outfilename. recipcert is a CERT for one of the recipients. recipkey specifies the private key matching recipcert, if recipcert does not include the key" ], "openssl_pkcs7_encrypt": [ "bool openssl_pkcs7_encrypt(string infile, string outfile, mixed recipcerts, array headers [, long flags [, long cipher]])", "Encrypts the message in the file named infile with the certificates in recipcerts and output the result to the file named outfile" ], "openssl_pkcs7_sign": [ "bool openssl_pkcs7_sign(string infile, string outfile, mixed signcert, mixed signkey, array headers [, long flags [, string extracertsfilename]])", "Signs the MIME message in the file named infile with signcert\/signkey and output the result to file name outfile. headers lists plain text headers to exclude from the signed portion of the message, and should include to, from and subject as a minimum" ], "openssl_pkcs7_verify": [ "bool openssl_pkcs7_verify(string filename, long flags [, string signerscerts [, array cainfo [, string extracerts [, string content]]]])", "Verifys that the data block is intact, the signer is who they say they are, and returns the CERTs of the signers" ], "openssl_pkey_export": [ "bool openssl_pkey_export(mixed key, &mixed out [, string passphrase [, array config_args]])", "Gets an exportable representation of a key into a string or file" ], "openssl_pkey_export_to_file": [ "bool openssl_pkey_export_to_file(mixed key, string outfilename [, string passphrase, array config_args)", "Gets an exportable representation of a key into a file" ], "openssl_pkey_free": [ "void openssl_pkey_free(int key)", "Frees a key" ], "openssl_pkey_get_details": [ "resource openssl_pkey_get_details(resource key)", "returns an array with the key details (bits, pkey, type)" ], "openssl_pkey_get_private": [ "int openssl_pkey_get_private(string key [, string passphrase])", "Gets private keys" ], "openssl_pkey_get_public": [ "int openssl_pkey_get_public(mixed cert)", "Gets public key from X.509 certificate" ], "openssl_pkey_new": [ "resource openssl_pkey_new([array configargs])", "Generates a new private key" ], "openssl_private_decrypt": [ "bool openssl_private_decrypt(string data, string &decrypted, mixed key [, int padding])", "Decrypts data with private key" ], "openssl_private_encrypt": [ "bool openssl_private_encrypt(string data, string &crypted, mixed key [, int padding])", "Encrypts data with private key" ], "openssl_public_decrypt": [ "bool openssl_public_decrypt(string data, string &crypted, resource key [, int padding])", "Decrypts data with public key" ], "openssl_public_encrypt": [ "bool openssl_public_encrypt(string data, string &crypted, mixed key [, int padding])", "Encrypts data with public key" ], "openssl_random_pseudo_bytes": [ "string openssl_random_pseudo_bytes(integer length [, &bool returned_strong_result])", "Returns a string of the length specified filled with random pseudo bytes" ], "openssl_seal": [ "int openssl_seal(string data, &string sealdata, &array ekeys, array pubkeys)", "Seals data" ], "openssl_sign": [ "bool openssl_sign(string data, &string signature, mixed key[, mixed method])", "Signs data" ], "openssl_verify": [ "int openssl_verify(string data, string signature, mixed key[, mixed method])", "Verifys data" ], "openssl_x509_check_private_key": [ "bool openssl_x509_check_private_key(mixed cert, mixed key)", "Checks if a private key corresponds to a CERT" ], "openssl_x509_checkpurpose": [ "int openssl_x509_checkpurpose(mixed x509cert, int purpose, array cainfo [, string untrustedfile])", "Checks the CERT to see if it can be used for the purpose in purpose. cainfo holds information about trusted CAs" ], "openssl_x509_export": [ "bool openssl_x509_export(mixed x509, string &out [, bool notext = true])", "Exports a CERT to file or a var" ], "openssl_x509_export_to_file": [ "bool openssl_x509_export_to_file(mixed x509, string outfilename [, bool notext = true])", "Exports a CERT to file or a var" ], "openssl_x509_free": [ "void openssl_x509_free(resource x509)", "Frees X.509 certificates" ], "openssl_x509_parse": [ "array openssl_x509_parse(mixed x509 [, bool shortnames=true])", "Returns an array of the fields\/values of the CERT" ], "openssl_x509_read": [ "resource openssl_x509_read(mixed cert)", "Reads X.509 certificates" ], "ord": [ "int ord(string character)", "Returns ASCII value of character" ], "output_add_rewrite_var": [ "bool output_add_rewrite_var(string name, string value)", "Add URL rewriter values" ], "output_reset_rewrite_vars": [ "bool output_reset_rewrite_vars(void)", "Reset(clear) URL rewriter values" ], "pack": [ "string pack(string format, mixed arg1 [, mixed arg2 [, mixed ...]])", "Takes one or more arguments and packs them into a binary string according to the format argument" ], "parse_ini_file": [ "array parse_ini_file(string filename [, bool process_sections [, int scanner_mode]])", "Parse configuration file" ], "parse_ini_string": [ "array parse_ini_string(string ini_string [, bool process_sections [, int scanner_mode]])", "Parse configuration string" ], "parse_locale": [ "static array parse_locale($locale)", "* parses a locale-id into an array the different parts of it" ], "parse_str": [ "void parse_str(string encoded_string [, array result])", "Parses GET\/POST\/COOKIE data and sets global variables" ], "parse_url": [ "mixed parse_url(string url, [int url_component])", "Parse a URL and return its components" ], "passthru": [ "void passthru(string command [, int &return_value])", "Execute an external program and display raw output" ], "pathinfo": [ "array pathinfo(string path[, int options])", "Returns information about a certain string" ], "pclose": [ "int pclose(resource fp)", "Close a file pointer opened by popen()" ], "pcnlt_sigwaitinfo": [ "int pcnlt_sigwaitinfo(array set[, array &siginfo])", "Synchronously wait for queued signals" ], "pcntl_alarm": [ "int pcntl_alarm(int seconds)", "Set an alarm clock for delivery of a signal" ], "pcntl_exec": [ "bool pcntl_exec(string path [, array args [, array envs]])", "Executes specified program in current process space as defined by exec(2)" ], "pcntl_fork": [ "int pcntl_fork(void)", "Forks the currently running process following the same behavior as the UNIX fork() system call" ], "pcntl_getpriority": [ "int pcntl_getpriority([int pid [, int process_identifier]])", "Get the priority of any process" ], "pcntl_setpriority": [ "bool pcntl_setpriority(int priority [, int pid [, int process_identifier]])", "Change the priority of any process" ], "pcntl_signal": [ "bool pcntl_signal(int signo, callback handle [, bool restart_syscalls])", "Assigns a system signal handler to a PHP function" ], "pcntl_signal_dispatch": [ "bool pcntl_signal_dispatch()", "Dispatch signals to signal handlers" ], "pcntl_sigprocmask": [ "bool pcntl_sigprocmask(int how, array set[, array &oldset])", "Examine and change blocked signals" ], "pcntl_sigtimedwait": [ "int pcntl_sigtimedwait(array set[, array &siginfo[, int seconds[, int nanoseconds]]])", "Wait for queued signals" ], "pcntl_wait": [ "int pcntl_wait(int &status)", "Waits on or returns the status of a forked child as defined by the waitpid() system call" ], "pcntl_waitpid": [ "int pcntl_waitpid(int pid, int &status, int options)", "Waits on or returns the status of a forked child as defined by the waitpid() system call" ], "pcntl_wexitstatus": [ "int pcntl_wexitstatus(int status)", "Returns the status code of a child's exit" ], "pcntl_wifexited": [ "bool pcntl_wifexited(int status)", "Returns true if the child status code represents a successful exit" ], "pcntl_wifsignaled": [ "bool pcntl_wifsignaled(int status)", "Returns true if the child status code represents a process that was terminated due to a signal" ], "pcntl_wifstopped": [ "bool pcntl_wifstopped(int status)", "Returns true if the child status code represents a stopped process (WUNTRACED must have been used with waitpid)" ], "pcntl_wstopsig": [ "int pcntl_wstopsig(int status)", "Returns the number of the signal that caused the process to stop who's status code is passed" ], "pcntl_wtermsig": [ "int pcntl_wtermsig(int status)", "Returns the number of the signal that terminated the process who's status code is passed" ], "pdo_drivers": [ "array pdo_drivers()", "Return array of available PDO drivers" ], "pfsockopen": [ "resource pfsockopen(string hostname, int port [, int errno [, string errstr [, float timeout]]])", "Open persistent Internet or Unix domain socket connection" ], "pg_affected_rows": [ "int pg_affected_rows(resource result)", "Returns the number of affected tuples" ], "pg_cancel_query": [ "bool pg_cancel_query(resource connection)", "Cancel request" ], "pg_client_encoding": [ "string pg_client_encoding([resource connection])", "Get the current client encoding" ], "pg_close": [ "bool pg_close([resource connection])", "Close a PostgreSQL connection" ], "pg_connect": [ "resource pg_connect(string connection_string[, int connect_type] | [string host, string port [, string options [, string tty,]]] string database)", "Open a PostgreSQL connection" ], "pg_connection_busy": [ "bool pg_connection_busy(resource connection)", "Get connection is busy or not" ], "pg_connection_reset": [ "bool pg_connection_reset(resource connection)", "Reset connection (reconnect)" ], "pg_connection_status": [ "int pg_connection_status(resource connnection)", "Get connection status" ], "pg_convert": [ "array pg_convert(resource db, string table, array values[, int options])", "Check and convert values for PostgreSQL SQL statement" ], "pg_copy_from": [ "bool pg_copy_from(resource connection, string table_name , array rows [, string delimiter [, string null_as]])", "Copy table from array" ], "pg_copy_to": [ "array pg_copy_to(resource connection, string table_name [, string delimiter [, string null_as]])", "Copy table to array" ], "pg_dbname": [ "string pg_dbname([resource connection])", "Get the database name" ], "pg_delete": [ "mixed pg_delete(resource db, string table, array ids[, int options])", "Delete records has ids (id=>value)" ], "pg_end_copy": [ "bool pg_end_copy([resource connection])", "Sync with backend. Completes the Copy command" ], "pg_escape_bytea": [ "string pg_escape_bytea([resource connection,] string data)", "Escape binary for bytea type" ], "pg_escape_string": [ "string pg_escape_string([resource connection,] string data)", "Escape string for text\/char type" ], "pg_execute": [ "resource pg_execute([resource connection,] string stmtname, array params)", "Execute a prepared query" ], "pg_fetch_all": [ "array pg_fetch_all(resource result)", "Fetch all rows into array" ], "pg_fetch_all_columns": [ "array pg_fetch_all_columns(resource result [, int column_number])", "Fetch all rows into array" ], "pg_fetch_array": [ "array pg_fetch_array(resource result [, int row [, int result_type]])", "Fetch a row as an array" ], "pg_fetch_assoc": [ "array pg_fetch_assoc(resource result [, int row])", "Fetch a row as an assoc array" ], "pg_fetch_object": [ "object pg_fetch_object(resource result [, int row [, string class_name [, NULL|array ctor_params]]])", "Fetch a row as an object" ], "pg_fetch_result": [ "mixed pg_fetch_result(resource result, [int row_number,] mixed field_name)", "Returns values from a result identifier" ], "pg_fetch_row": [ "array pg_fetch_row(resource result [, int row [, int result_type]])", "Get a row as an enumerated array" ], "pg_field_is_null": [ "int pg_field_is_null(resource result, [int row,] mixed field_name_or_number)", "Test if a field is NULL" ], "pg_field_name": [ "string pg_field_name(resource result, int field_number)", "Returns the name of the field" ], "pg_field_num": [ "int pg_field_num(resource result, string field_name)", "Returns the field number of the named field" ], "pg_field_prtlen": [ "int pg_field_prtlen(resource result, [int row,] mixed field_name_or_number)", "Returns the printed length" ], "pg_field_size": [ "int pg_field_size(resource result, int field_number)", "Returns the internal size of the field" ], "pg_field_table": [ "mixed pg_field_table(resource result, int field_number[, bool oid_only])", "Returns the name of the table field belongs to, or table's oid if oid_only is true" ], "pg_field_type": [ "string pg_field_type(resource result, int field_number)", "Returns the type name for the given field" ], "pg_field_type_oid": [ "string pg_field_type_oid(resource result, int field_number)", "Returns the type oid for the given field" ], "pg_free_result": [ "bool pg_free_result(resource result)", "Free result memory" ], "pg_get_notify": [ "array pg_get_notify([resource connection[, result_type]])", "Get asynchronous notification" ], "pg_get_pid": [ "int pg_get_pid([resource connection)", "Get backend(server) pid" ], "pg_get_result": [ "resource pg_get_result(resource connection)", "Get asynchronous query result" ], "pg_host": [ "string pg_host([resource connection])", "Returns the host name associated with the connection" ], "pg_insert": [ "mixed pg_insert(resource db, string table, array values[, int options])", "Insert values (filed=>value) to table" ], "pg_last_error": [ "string pg_last_error([resource connection])", "Get the error message string" ], "pg_last_notice": [ "string pg_last_notice(resource connection)", "Returns the last notice set by the backend" ], "pg_last_oid": [ "string pg_last_oid(resource result)", "Returns the last object identifier" ], "pg_lo_close": [ "bool pg_lo_close(resource large_object)", "Close a large object" ], "pg_lo_create": [ "mixed pg_lo_create([resource connection],[mixed large_object_oid])", "Create a large object" ], "pg_lo_export": [ "bool pg_lo_export([resource connection, ] int objoid, string filename)", "Export large object direct to filesystem" ], "pg_lo_import": [ "int pg_lo_import([resource connection, ] string filename [, mixed oid])", "Import large object direct from filesystem" ], "pg_lo_open": [ "resource pg_lo_open([resource connection,] int large_object_oid, string mode)", "Open a large object and return fd" ], "pg_lo_read": [ "string pg_lo_read(resource large_object [, int len])", "Read a large object" ], "pg_lo_read_all": [ "int pg_lo_read_all(resource large_object)", "Read a large object and send straight to browser" ], "pg_lo_seek": [ "bool pg_lo_seek(resource large_object, int offset [, int whence])", "Seeks position of large object" ], "pg_lo_tell": [ "int pg_lo_tell(resource large_object)", "Returns current position of large object" ], "pg_lo_unlink": [ "bool pg_lo_unlink([resource connection,] string large_object_oid)", "Delete a large object" ], "pg_lo_write": [ "int pg_lo_write(resource large_object, string buf [, int len])", "Write a large object" ], "pg_meta_data": [ "array pg_meta_data(resource db, string table)", "Get meta_data" ], "pg_num_fields": [ "int pg_num_fields(resource result)", "Return the number of fields in the result" ], "pg_num_rows": [ "int pg_num_rows(resource result)", "Return the number of rows in the result" ], "pg_options": [ "string pg_options([resource connection])", "Get the options associated with the connection" ], "pg_parameter_status": [ "string|false pg_parameter_status([resource connection,] string param_name)", "Returns the value of a server parameter" ], "pg_pconnect": [ "resource pg_pconnect(string connection_string | [string host, string port [, string options [, string tty,]]] string database)", "Open a persistent PostgreSQL connection" ], "pg_ping": [ "bool pg_ping([resource connection])", "Ping database. If connection is bad, try to reconnect." ], "pg_port": [ "int pg_port([resource connection])", "Return the port number associated with the connection" ], "pg_prepare": [ "resource pg_prepare([resource connection,] string stmtname, string query)", "Prepare a query for future execution" ], "pg_put_line": [ "bool pg_put_line([resource connection,] string query)", "Send null-terminated string to backend server" ], "pg_query": [ "resource pg_query([resource connection,] string query)", "Execute a query" ], "pg_query_params": [ "resource pg_query_params([resource connection,] string query, array params)", "Execute a query" ], "pg_result_error": [ "string pg_result_error(resource result)", "Get error message associated with result" ], "pg_result_error_field": [ "string pg_result_error_field(resource result, int fieldcode)", "Get error message field associated with result" ], "pg_result_seek": [ "bool pg_result_seek(resource result, int offset)", "Set internal row offset" ], "pg_result_status": [ "mixed pg_result_status(resource result[, long result_type])", "Get status of query result" ], "pg_select": [ "mixed pg_select(resource db, string table, array ids[, int options])", "Select records that has ids (id=>value)" ], "pg_send_execute": [ "bool pg_send_execute(resource connection, string stmtname, array params)", "Executes prevriously prepared stmtname asynchronously" ], "pg_send_prepare": [ "bool pg_send_prepare(resource connection, string stmtname, string query)", "Asynchronously prepare a query for future execution" ], "pg_send_query": [ "bool pg_send_query(resource connection, string query)", "Send asynchronous query" ], "pg_send_query_params": [ "bool pg_send_query_params(resource connection, string query, array params)", "Send asynchronous parameterized query" ], "pg_set_client_encoding": [ "int pg_set_client_encoding([resource connection,] string encoding)", "Set client encoding" ], "pg_set_error_verbosity": [ "int pg_set_error_verbosity([resource connection,] int verbosity)", "Set error verbosity" ], "pg_trace": [ "bool pg_trace(string filename [, string mode [, resource connection]])", "Enable tracing a PostgreSQL connection" ], "pg_transaction_status": [ "int pg_transaction_status(resource connnection)", "Get transaction status" ], "pg_tty": [ "string pg_tty([resource connection])", "Return the tty name associated with the connection" ], "pg_unescape_bytea": [ "string pg_unescape_bytea(string data)", "Unescape binary for bytea type" ], "pg_untrace": [ "bool pg_untrace([resource connection])", "Disable tracing of a PostgreSQL connection" ], "pg_update": [ "mixed pg_update(resource db, string table, array fields, array ids[, int options])", "Update table using values (field=>value) and ids (id=>value)" ], "pg_version": [ "array pg_version([resource connection])", "Returns an array with client, protocol and server version (when available)" ], "php_egg_logo_guid": [ "string php_egg_logo_guid(void)", "Return the special ID used to request the PHP logo in phpinfo screens" ], "php_ini_loaded_file": [ "string php_ini_loaded_file(void)", "Return the actual loaded ini filename" ], "php_ini_scanned_files": [ "string php_ini_scanned_files(void)", "Return comma-separated string of .ini files parsed from the additional ini dir" ], "php_logo_guid": [ "string php_logo_guid(void)", "Return the special ID used to request the PHP logo in phpinfo screens" ], "php_real_logo_guid": [ "string php_real_logo_guid(void)", "Return the special ID used to request the PHP logo in phpinfo screens" ], "php_sapi_name": [ "string php_sapi_name(void)", "Return the current SAPI module name" ], "php_snmpv3": [ "void php_snmpv3(INTERNAL_FUNCTION_PARAMETERS, int st)", "* * Generic SNMPv3 object fetcher * From here is passed on the the common internal object fetcher. * * st=SNMP_CMD_GET snmp3_get() - query an agent and return a single value. * st=SNMP_CMD_GETNEXT snmp3_getnext() - query an agent and return the next single value. * st=SNMP_CMD_WALK snmp3_walk() - walk the mib and return a single dimensional array * containing the values. * st=SNMP_CMD_REALWALK snmp3_real_walk() - walk the mib and return an * array of oid,value pairs. * st=SNMP_CMD_SET snmp3_set() - query an agent and set a single value *" ], "php_strip_whitespace": [ "string php_strip_whitespace(string file_name)", "Return source with stripped comments and whitespace" ], "php_uname": [ "string php_uname(void)", "Return information about the system PHP was built on" ], "phpcredits": [ "void phpcredits([int flag])", "Prints the list of people who've contributed to the PHP project" ], "phpinfo": [ "void phpinfo([int what])", "Output a page of useful information about PHP and the current request" ], "phpversion": [ "string phpversion([string extension])", "Return the current PHP version" ], "pi": [ "float pi(void)", "Returns an approximation of pi" ], "png2wbmp": [ "bool png2wbmp (string f_org, string f_dest, int d_height, int d_width, int threshold)", "Convert PNG image to WBMP image" ], "popen": [ "resource popen(string command, string mode)", "Execute a command and open either a read or a write pipe to it" ], "posix_access": [ "bool posix_access(string file [, int mode])", "Determine accessibility of a file (POSIX.1 5.6.3)" ], "posix_ctermid": [ "string posix_ctermid(void)", "Generate terminal path name (POSIX.1, 4.7.1)" ], "posix_get_last_error": [ "int posix_get_last_error(void)", "Retrieve the error number set by the last posix function which failed." ], "posix_getcwd": [ "string posix_getcwd(void)", "Get working directory pathname (POSIX.1, 5.2.2)" ], "posix_getegid": [ "int posix_getegid(void)", "Get the current effective group id (POSIX.1, 4.2.1)" ], "posix_geteuid": [ "int posix_geteuid(void)", "Get the current effective user id (POSIX.1, 4.2.1)" ], "posix_getgid": [ "int posix_getgid(void)", "Get the current group id (POSIX.1, 4.2.1)" ], "posix_getgrgid": [ "array posix_getgrgid(long gid)", "Group database access (POSIX.1, 9.2.1)" ], "posix_getgrnam": [ "array posix_getgrnam(string groupname)", "Group database access (POSIX.1, 9.2.1)" ], "posix_getgroups": [ "array posix_getgroups(void)", "Get supplementary group id's (POSIX.1, 4.2.3)" ], "posix_getlogin": [ "string posix_getlogin(void)", "Get user name (POSIX.1, 4.2.4)" ], "posix_getpgid": [ "int posix_getpgid(void)", "Get the process group id of the specified process (This is not a POSIX function, but a SVR4ism, so we compile conditionally)" ], "posix_getpgrp": [ "int posix_getpgrp(void)", "Get current process group id (POSIX.1, 4.3.1)" ], "posix_getpid": [ "int posix_getpid(void)", "Get the current process id (POSIX.1, 4.1.1)" ], "posix_getppid": [ "int posix_getppid(void)", "Get the parent process id (POSIX.1, 4.1.1)" ], "posix_getpwnam": [ "array posix_getpwnam(string groupname)", "User database access (POSIX.1, 9.2.2)" ], "posix_getpwuid": [ "array posix_getpwuid(long uid)", "User database access (POSIX.1, 9.2.2)" ], "posix_getrlimit": [ "array posix_getrlimit(void)", "Get system resource consumption limits (This is not a POSIX function, but a BSDism and a SVR4ism. We compile conditionally)" ], "posix_getsid": [ "int posix_getsid(void)", "Get process group id of session leader (This is not a POSIX function, but a SVR4ism, so be compile conditionally)" ], "posix_getuid": [ "int posix_getuid(void)", "Get the current user id (POSIX.1, 4.2.1)" ], "posix_initgroups": [ "bool posix_initgroups(string name, int base_group_id)", "Calculate the group access list for the user specified in name." ], "posix_isatty": [ "bool posix_isatty(int fd)", "Determine if filedesc is a tty (POSIX.1, 4.7.1)" ], "posix_kill": [ "bool posix_kill(int pid, int sig)", "Send a signal to a process (POSIX.1, 3.3.2)" ], "posix_mkfifo": [ "bool posix_mkfifo(string pathname, int mode)", "Make a FIFO special file (POSIX.1, 5.4.2)" ], "posix_mknod": [ "bool posix_mknod(string pathname, int mode [, int major [, int minor]])", "Make a special or ordinary file (POSIX.1)" ], "posix_setegid": [ "bool posix_setegid(long uid)", "Set effective group id" ], "posix_seteuid": [ "bool posix_seteuid(long uid)", "Set effective user id" ], "posix_setgid": [ "bool posix_setgid(int uid)", "Set group id (POSIX.1, 4.2.2)" ], "posix_setpgid": [ "bool posix_setpgid(int pid, int pgid)", "Set process group id for job control (POSIX.1, 4.3.3)" ], "posix_setsid": [ "int posix_setsid(void)", "Create session and set process group id (POSIX.1, 4.3.2)" ], "posix_setuid": [ "bool posix_setuid(long uid)", "Set user id (POSIX.1, 4.2.2)" ], "posix_strerror": [ "string posix_strerror(int errno)", "Retrieve the system error message associated with the given errno." ], "posix_times": [ "array posix_times(void)", "Get process times (POSIX.1, 4.5.2)" ], "posix_ttyname": [ "string posix_ttyname(int fd)", "Determine terminal device name (POSIX.1, 4.7.2)" ], "posix_uname": [ "array posix_uname(void)", "Get system name (POSIX.1, 4.4.1)" ], "pow": [ "number pow(number base, number exponent)", "Returns base raised to the power of exponent. Returns integer result when possible" ], "preg_filter": [ "mixed preg_filter(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])", "Perform Perl-style regular expression replacement and only return matches." ], "preg_grep": [ "array preg_grep(string regex, array input [, int flags])", "Searches array and returns entries which match regex" ], "preg_last_error": [ "int preg_last_error()", "Returns the error code of the last regexp execution." ], "preg_match": [ "int preg_match(string pattern, string subject [, array &subpatterns [, int flags [, int offset]]])", "Perform a Perl-style regular expression match" ], "preg_match_all": [ "int preg_match_all(string pattern, string subject, array &subpatterns [, int flags [, int offset]])", "Perform a Perl-style global regular expression match" ], "preg_quote": [ "string preg_quote(string str [, string delim_char])", "Quote regular expression characters plus an optional character" ], "preg_replace": [ "mixed preg_replace(mixed regex, mixed replace, mixed subject [, int limit [, int &count]])", "Perform Perl-style regular expression replacement." ], "preg_replace_callback": [ "mixed preg_replace_callback(mixed regex, mixed callback, mixed subject [, int limit [, int &count]])", "Perform Perl-style regular expression replacement using replacement callback." ], "preg_split": [ "array preg_split(string pattern, string subject [, int limit [, int flags]])", "Split string into an array using a perl-style regular expression as a delimiter" ], "prev": [ "mixed prev(array array_arg)", "Move array argument's internal pointer to the previous element and return it" ], "print": [ "int print(string arg)", "Output a string" ], "print_r": [ "mixed print_r(mixed var [, bool return])", "Prints out or returns information about the specified variable" ], "printf": [ "int printf(string format [, mixed arg1 [, mixed ...]])", "Output a formatted string" ], "proc_close": [ "int proc_close(resource process)", "close a process opened by proc_open" ], "proc_get_status": [ "array proc_get_status(resource process)", "get information about a process opened by proc_open" ], "proc_nice": [ "bool proc_nice(int priority)", "Change the priority of the current process" ], "proc_open": [ "resource proc_open(string command, array descriptorspec, array &pipes [, string cwd [, array env [, array other_options]]])", "Run a process with more control over it's file descriptors" ], "proc_terminate": [ "bool proc_terminate(resource process [, long signal])", "kill a process opened by proc_open" ], "property_exists": [ "bool property_exists(mixed object_or_class, string property_name)", "Checks if the object or class has a property" ], "pspell_add_to_personal": [ "bool pspell_add_to_personal(int pspell, string word)", "Adds a word to a personal list" ], "pspell_add_to_session": [ "bool pspell_add_to_session(int pspell, string word)", "Adds a word to the current session" ], "pspell_check": [ "bool pspell_check(int pspell, string word)", "Returns true if word is valid" ], "pspell_clear_session": [ "bool pspell_clear_session(int pspell)", "Clears the current session" ], "pspell_config_create": [ "int pspell_config_create(string language [, string spelling [, string jargon [, string encoding]]])", "Create a new config to be used later to create a manager" ], "pspell_config_data_dir": [ "bool pspell_config_data_dir(int conf, string directory)", "location of language data files" ], "pspell_config_dict_dir": [ "bool pspell_config_dict_dir(int conf, string directory)", "location of the main word list" ], "pspell_config_ignore": [ "bool pspell_config_ignore(int conf, int ignore)", "Ignore words <= n chars" ], "pspell_config_mode": [ "bool pspell_config_mode(int conf, long mode)", "Select mode for config (PSPELL_FAST, PSPELL_NORMAL or PSPELL_BAD_SPELLERS)" ], "pspell_config_personal": [ "bool pspell_config_personal(int conf, string personal)", "Use a personal dictionary for this config" ], "pspell_config_repl": [ "bool pspell_config_repl(int conf, string repl)", "Use a personal dictionary with replacement pairs for this config" ], "pspell_config_runtogether": [ "bool pspell_config_runtogether(int conf, bool runtogether)", "Consider run-together words as valid components" ], "pspell_config_save_repl": [ "bool pspell_config_save_repl(int conf, bool save)", "Save replacement pairs when personal list is saved for this config" ], "pspell_new": [ "int pspell_new(string language [, string spelling [, string jargon [, string encoding [, int mode]]]])", "Load a dictionary" ], "pspell_new_config": [ "int pspell_new_config(int config)", "Load a dictionary based on the given config" ], "pspell_new_personal": [ "int pspell_new_personal(string personal, string language [, string spelling [, string jargon [, string encoding [, int mode]]]])", "Load a dictionary with a personal wordlist" ], "pspell_save_wordlist": [ "bool pspell_save_wordlist(int pspell)", "Saves the current (personal) wordlist" ], "pspell_store_replacement": [ "bool pspell_store_replacement(int pspell, string misspell, string correct)", "Notify the dictionary of a user-selected replacement" ], "pspell_suggest": [ "array pspell_suggest(int pspell, string word)", "Returns array of suggestions" ], "putenv": [ "bool putenv(string setting)", "Set the value of an environment variable" ], "quoted_printable_decode": [ "string quoted_printable_decode(string str)", "Convert a quoted-printable string to an 8 bit string" ], "quoted_printable_encode": [ "string quoted_printable_encode(string str) *\/", "PHP_FUNCTION(quoted_printable_encode) { char *str, *new_str; int str_len; size_t new_str_len; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, \"s\", &str, &str_len) != SUCCESS) { return; } if (!str_len) { RETURN_EMPTY_STRING(); } new_str = (char *)php_quot_print_encode((unsigned char *)str, (size_t)str_len, &new_str_len); RETURN_STRINGL(new_str, new_str_len, 0); } \/* }}}" ], "quotemeta": [ "string quotemeta(string str)", "Quotes meta characters" ], "rad2deg": [ "float rad2deg(float number)", "Converts the radian number to the equivalent number in degrees" ], "rand": [ "int rand([int min, int max])", "Returns a random number" ], "range": [ "array range(mixed low, mixed high[, int step])", "Create an array containing the range of integers or characters from low to high (inclusive)" ], "rawurldecode": [ "string rawurldecode(string str)", "Decodes URL-encodes string" ], "rawurlencode": [ "string rawurlencode(string str)", "URL-encodes string" ], "readdir": [ "string readdir([resource dir_handle])", "Read directory entry from dir_handle" ], "readfile": [ "int readfile(string filename [, bool use_include_path[, resource context]])", "Output a file or a URL" ], "readgzfile": [ "int readgzfile(string filename [, int use_include_path])", "Output a .gz-file" ], "readline": [ "string readline([string prompt])", "Reads a line" ], "readline_add_history": [ "bool readline_add_history(string prompt)", "Adds a line to the history" ], "readline_callback_handler_install": [ "void readline_callback_handler_install(string prompt, mixed callback)", "Initializes the readline callback interface and terminal, prints the prompt and returns immediately" ], "readline_callback_handler_remove": [ "bool readline_callback_handler_remove()", "Removes a previously installed callback handler and restores terminal settings" ], "readline_callback_read_char": [ "void readline_callback_read_char()", "Informs the readline callback interface that a character is ready for input" ], "readline_clear_history": [ "bool readline_clear_history(void)", "Clears the history" ], "readline_completion_function": [ "bool readline_completion_function(string funcname)", "Readline completion function?" ], "readline_info": [ "mixed readline_info([string varname [, string newvalue]])", "Gets\/sets various internal readline variables." ], "readline_list_history": [ "array readline_list_history(void)", "Lists the history" ], "readline_on_new_line": [ "void readline_on_new_line(void)", "Inform readline that the cursor has moved to a new line" ], "readline_read_history": [ "bool readline_read_history([string filename])", "Reads the history" ], "readline_redisplay": [ "void readline_redisplay(void)", "Ask readline to redraw the display" ], "readline_write_history": [ "bool readline_write_history([string filename])", "Writes the history" ], "readlink": [ "string readlink(string filename)", "Return the target of a symbolic link" ], "realpath": [ "string realpath(string path)", "Return the resolved path" ], "realpath_cache_get": [ "bool realpath_cache_get()", "Get current size of realpath cache" ], "realpath_cache_size": [ "bool realpath_cache_size()", "Get current size of realpath cache" ], "recode_file": [ "bool recode_file(string request, resource input, resource output)", "Recode file input into file output according to request" ], "recode_string": [ "string recode_string(string request, string str)", "Recode string str according to request string" ], "register_shutdown_function": [ "void register_shutdown_function(string function_name)", "Register a user-level function to be called on request termination" ], "register_tick_function": [ "bool register_tick_function(string function_name [, mixed arg [, mixed ... ]])", "Registers a tick callback function" ], "rename": [ "bool rename(string old_name, string new_name[, resource context])", "Rename a file" ], "require": [ "bool require(string path)", "Includes and evaluates the specified file, erroring if the file cannot be included" ], "require_once": [ "bool require_once(string path)", "Includes and evaluates the specified file, erroring if the file cannot be included" ], "reset": [ "mixed reset(array array_arg)", "Set array argument's internal pointer to the first element and return it" ], "restore_error_handler": [ "void restore_error_handler(void)", "Restores the previously defined error handler function" ], "restore_exception_handler": [ "void restore_exception_handler(void)", "Restores the previously defined exception handler function" ], "restore_include_path": [ "void restore_include_path()", "Restore the value of the include_path configuration option" ], "rewind": [ "bool rewind(resource fp)", "Rewind the position of a file pointer" ], "rewinddir": [ "void rewinddir([resource dir_handle])", "Rewind dir_handle back to the start" ], "rmdir": [ "bool rmdir(string dirname[, resource context])", "Remove a directory" ], "round": [ "float round(float number [, int precision [, int mode]])", "Returns the number rounded to specified precision" ], "rsort": [ "bool rsort(array &array_arg [, int sort_flags])", "Sort an array in reverse order" ], "rtrim": [ "string rtrim(string str [, string character_mask])", "Removes trailing whitespace" ], "scandir": [ "array scandir(string dir [, int sorting_order [, resource context]])", "List files & directories inside the specified path" ], "sem_acquire": [ "bool sem_acquire(resource id)", "Acquires the semaphore with the given id, blocking if necessary" ], "sem_get": [ "resource sem_get(int key [, int max_acquire [, int perm [, int auto_release]])", "Return an id for the semaphore with the given key, and allow max_acquire (default 1) processes to acquire it simultaneously" ], "sem_release": [ "bool sem_release(resource id)", "Releases the semaphore with the given id" ], "sem_remove": [ "bool sem_remove(resource id)", "Removes semaphore from Unix systems" ], "serialize": [ "string serialize(mixed variable)", "Returns a string representation of variable (which can later be unserialized)" ], "session_cache_expire": [ "int session_cache_expire([int new_cache_expire])", "Return the current cache expire. If new_cache_expire is given, the current cache_expire is replaced with new_cache_expire" ], "session_cache_limiter": [ "string session_cache_limiter([string new_cache_limiter])", "Return the current cache limiter. If new_cache_limited is given, the current cache_limiter is replaced with new_cache_limiter" ], "session_decode": [ "bool session_decode(string data)", "Deserializes data and reinitializes the variables" ], "session_destroy": [ "bool session_destroy(void)", "Destroy the current session and all data associated with it" ], "session_encode": [ "string session_encode(void)", "Serializes the current setup and returns the serialized representation" ], "session_get_cookie_params": [ "array session_get_cookie_params(void)", "Return the session cookie parameters" ], "session_id": [ "string session_id([string newid])", "Return the current session id. If newid is given, the session id is replaced with newid" ], "session_is_registered": [ "bool session_is_registered(string varname)", "Checks if a variable is registered in session" ], "session_module_name": [ "string session_module_name([string newname])", "Return the current module name used for accessing session data. If newname is given, the module name is replaced with newname" ], "session_name": [ "string session_name([string newname])", "Return the current session name. If newname is given, the session name is replaced with newname" ], "session_regenerate_id": [ "bool session_regenerate_id([bool delete_old_session])", "Update the current session id with a newly generated one. If delete_old_session is set to true, remove the old session." ], "session_register": [ "bool session_register(mixed var_names [, mixed ...])", "Adds varname(s) to the list of variables which are freezed at the session end" ], "session_save_path": [ "string session_save_path([string newname])", "Return the current save path passed to module_name. If newname is given, the save path is replaced with newname" ], "session_set_cookie_params": [ "void session_set_cookie_params(int lifetime [, string path [, string domain [, bool secure[, bool httponly]]]])", "Set session cookie parameters" ], "session_set_save_handler": [ "void session_set_save_handler(string open, string close, string read, string write, string destroy, string gc)", "Sets user-level functions" ], "session_start": [ "bool session_start(void)", "Begin session - reinitializes freezed variables, registers browsers etc" ], "session_unregister": [ "bool session_unregister(string varname)", "Removes varname from the list of variables which are freezed at the session end" ], "session_unset": [ "void session_unset(void)", "Unset all registered variables" ], "session_write_close": [ "void session_write_close(void)", "Write session data and end session" ], "set_error_handler": [ "string set_error_handler(string error_handler [, int error_types])", "Sets a user-defined error handler function. Returns the previously defined error handler, or false on error" ], "set_exception_handler": [ "string set_exception_handler(callable exception_handler)", "Sets a user-defined exception handler function. Returns the previously defined exception handler, or false on error" ], "set_include_path": [ "string set_include_path(string new_include_path)", "Sets the include_path configuration option" ], "set_magic_quotes_runtime": [ "bool set_magic_quotes_runtime(int new_setting)", "Set the current active configuration setting of magic_quotes_runtime and return previous" ], "set_time_limit": [ "bool set_time_limit(int seconds)", "Sets the maximum time a script can run" ], "setcookie": [ "bool setcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])", "Send a cookie" ], "setlocale": [ "string setlocale(mixed category, string locale [, string ...])", "Set locale information" ], "setrawcookie": [ "bool setrawcookie(string name [, string value [, int expires [, string path [, string domain [, bool secure[, bool httponly]]]]]])", "Send a cookie with no url encoding of the value" ], "settype": [ "bool settype(mixed var, string type)", "Set the type of the variable" ], "sha1": [ "string sha1(string str [, bool raw_output])", "Calculate the sha1 hash of a string" ], "sha1_file": [ "string sha1_file(string filename [, bool raw_output])", "Calculate the sha1 hash of given filename" ], "shell_exec": [ "string shell_exec(string cmd)", "Execute command via shell and return complete output as string" ], "shm_attach": [ "int shm_attach(int key [, int memsize [, int perm]])", "Creates or open a shared memory segment" ], "shm_detach": [ "bool shm_detach(resource shm_identifier)", "Disconnects from shared memory segment" ], "shm_get_var": [ "mixed shm_get_var(resource id, int variable_key)", "Returns a variable from shared memory" ], "shm_has_var": [ "bool shm_has_var(resource id, int variable_key)", "Checks whether a specific entry exists" ], "shm_put_var": [ "bool shm_put_var(resource shm_identifier, int variable_key, mixed variable)", "Inserts or updates a variable in shared memory" ], "shm_remove": [ "bool shm_remove(resource shm_identifier)", "Removes shared memory from Unix systems" ], "shm_remove_var": [ "bool shm_remove_var(resource id, int variable_key)", "Removes variable from shared memory" ], "shmop_close": [ "void shmop_close (int shmid)", "closes a shared memory segment" ], "shmop_delete": [ "bool shmop_delete (int shmid)", "mark segment for deletion" ], "shmop_open": [ "int shmop_open (int key, string flags, int mode, int size)", "gets and attaches a shared memory segment" ], "shmop_read": [ "string shmop_read (int shmid, int start, int count)", "reads from a shm segment" ], "shmop_size": [ "int shmop_size (int shmid)", "returns the shm size" ], "shmop_write": [ "int shmop_write (int shmid, string data, int offset)", "writes to a shared memory segment" ], "shuffle": [ "bool shuffle(array array_arg)", "Randomly shuffle the contents of an array" ], "similar_text": [ "int similar_text(string str1, string str2 [, float percent])", "Calculates the similarity between two strings" ], "simplexml_import_dom": [ "simplemxml_element simplexml_import_dom(domNode node [, string class_name])", "Get a simplexml_element object from dom to allow for processing" ], "simplexml_load_file": [ "simplemxml_element simplexml_load_file(string filename [, string class_name [, int options [, string ns [, bool is_prefix]]]])", "Load a filename and return a simplexml_element object to allow for processing" ], "simplexml_load_string": [ "simplemxml_element simplexml_load_string(string data [, string class_name [, int options [, string ns [, bool is_prefix]]]])", "Load a string and return a simplexml_element object to allow for processing" ], "sin": [ "float sin(float number)", "Returns the sine of the number in radians" ], "sinh": [ "float sinh(float number)", "Returns the hyperbolic sine of the number, defined as (exp(number) - exp(-number))\/2" ], "sleep": [ "void sleep(int seconds)", "Delay for a given number of seconds" ], "smfi_addheader": [ "bool smfi_addheader(string headerf, string headerv)", "Adds a header to the current message." ], "smfi_addrcpt": [ "bool smfi_addrcpt(string rcpt)", "Add a recipient to the message envelope." ], "smfi_chgheader": [ "bool smfi_chgheader(string headerf, string headerv)", "Changes a header's value for the current message." ], "smfi_delrcpt": [ "bool smfi_delrcpt(string rcpt)", "Removes the named recipient from the current message's envelope." ], "smfi_getsymval": [ "string smfi_getsymval(string macro)", "Returns the value of the given macro or NULL if the macro is not defined." ], "smfi_replacebody": [ "bool smfi_replacebody(string body)", "Replaces the body of the current message. If called more than once, subsequent calls result in data being appended to the new body." ], "smfi_setflags": [ "void smfi_setflags(long flags)", "Sets the flags describing the actions the filter may take." ], "smfi_setreply": [ "bool smfi_setreply(string rcode, string xcode, string message)", "Directly set the SMTP error reply code for this connection. This code will be used on subsequent error replies resulting from actions taken by this filter." ], "smfi_settimeout": [ "void smfi_settimeout(long timeout)", "Sets the number of seconds libmilter will wait for an MTA connection before timing out a socket." ], "snmp2_get": [ "string snmp2_get(string host, string community, string object_id [, int timeout [, int retries]])", "Fetch a SNMP object" ], "snmp2_getnext": [ "string snmp2_getnext(string host, string community, string object_id [, int timeout [, int retries]])", "Fetch a SNMP object" ], "snmp2_real_walk": [ "array snmp2_real_walk(string host, string community, string object_id [, int timeout [, int retries]])", "Return all objects including their respective object id withing the specified one" ], "snmp2_set": [ "int snmp2_set(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])", "Set the value of a SNMP object" ], "snmp2_walk": [ "array snmp2_walk(string host, string community, string object_id [, int timeout [, int retries]])", "Return all objects under the specified object id" ], "snmp3_get": [ "int snmp3_get(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])", "Fetch the value of a SNMP object" ], "snmp3_getnext": [ "int snmp3_getnext(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])", "Fetch the value of a SNMP object" ], "snmp3_real_walk": [ "int snmp3_real_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])", "Fetch the value of a SNMP object" ], "snmp3_set": [ "int snmp3_set(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id, string type, mixed value [, int timeout [, int retries]])", "Fetch the value of a SNMP object" ], "snmp3_walk": [ "int snmp3_walk(string host, string sec_name, string sec_level, string auth_protocol, string auth_passphrase, string priv_protocol, string priv_passphrase, string object_id [, int timeout [, int retries]])", "Fetch the value of a SNMP object" ], "snmp_get_quick_print": [ "bool snmp_get_quick_print(void)", "Return the current status of quick_print" ], "snmp_get_valueretrieval": [ "int snmp_get_valueretrieval()", "Return the method how the SNMP values will be returned" ], "snmp_read_mib": [ "int snmp_read_mib(string filename)", "Reads and parses a MIB file into the active MIB tree." ], "snmp_set_enum_print": [ "void snmp_set_enum_print(int enum_print)", "Return all values that are enums with their enum value instead of the raw integer" ], "snmp_set_oid_output_format": [ "void snmp_set_oid_output_format(int oid_format)", "Set the OID output format." ], "snmp_set_quick_print": [ "void snmp_set_quick_print(int quick_print)", "Return all objects including their respective object id withing the specified one" ], "snmp_set_valueretrieval": [ "void snmp_set_valueretrieval(int method)", "Specify the method how the SNMP values will be returned" ], "snmpget": [ "string snmpget(string host, string community, string object_id [, int timeout [, int retries]])", "Fetch a SNMP object" ], "snmpgetnext": [ "string snmpgetnext(string host, string community, string object_id [, int timeout [, int retries]])", "Fetch a SNMP object" ], "snmprealwalk": [ "array snmprealwalk(string host, string community, string object_id [, int timeout [, int retries]])", "Return all objects including their respective object id withing the specified one" ], "snmpset": [ "int snmpset(string host, string community, string object_id, string type, mixed value [, int timeout [, int retries]])", "Set the value of a SNMP object" ], "snmpwalk": [ "array snmpwalk(string host, string community, string object_id [, int timeout [, int retries]])", "Return all objects under the specified object id" ], "socket_accept": [ "resource socket_accept(resource socket)", "Accepts a connection on the listening socket fd" ], "socket_bind": [ "bool socket_bind(resource socket, string addr [, int port])", "Binds an open socket to a listening port, port is only specified in AF_INET family." ], "socket_clear_error": [ "void socket_clear_error([resource socket])", "Clears the error on the socket or the last error code." ], "socket_close": [ "void socket_close(resource socket)", "Closes a file descriptor" ], "socket_connect": [ "bool socket_connect(resource socket, string addr [, int port])", "Opens a connection to addr:port on the socket specified by socket" ], "socket_create": [ "resource socket_create(int domain, int type, int protocol)", "Creates an endpoint for communication in the domain specified by domain, of type specified by type" ], "socket_create_listen": [ "resource socket_create_listen(int port[, int backlog])", "Opens a socket on port to accept connections" ], "socket_create_pair": [ "bool socket_create_pair(int domain, int type, int protocol, array &fd)", "Creates a pair of indistinguishable sockets and stores them in fds." ], "socket_get_option": [ "mixed socket_get_option(resource socket, int level, int optname)", "Gets socket options for the socket" ], "socket_getpeername": [ "bool socket_getpeername(resource socket, string &addr[, int &port])", "Queries the remote side of the given socket which may either result in host\/port or in a UNIX filesystem path, dependent on its type." ], "socket_getsockname": [ "bool socket_getsockname(resource socket, string &addr[, int &port])", "Queries the remote side of the given socket which may either result in host\/port or in a UNIX filesystem path, dependent on its type." ], "socket_last_error": [ "int socket_last_error([resource socket])", "Returns the last socket error (either the last used or the provided socket resource)" ], "socket_listen": [ "bool socket_listen(resource socket[, int backlog])", "Sets the maximum number of connections allowed to be waited for on the socket specified by fd" ], "socket_read": [ "string socket_read(resource socket, int length [, int type])", "Reads a maximum of length bytes from socket" ], "socket_recv": [ "int socket_recv(resource socket, string &buf, int len, int flags)", "Receives data from a connected socket" ], "socket_recvfrom": [ "int socket_recvfrom(resource socket, string &buf, int len, int flags, string &name [, int &port])", "Receives data from a socket, connected or not" ], "socket_select": [ "int socket_select(array &read_fds, array &write_fds, array &except_fds, int tv_sec[, int tv_usec])", "Runs the select() system call on the sets mentioned with a timeout specified by tv_sec and tv_usec" ], "socket_send": [ "int socket_send(resource socket, string buf, int len, int flags)", "Sends data to a connected socket" ], "socket_sendto": [ "int socket_sendto(resource socket, string buf, int len, int flags, string addr [, int port])", "Sends a message to a socket, whether it is connected or not" ], "socket_set_block": [ "bool socket_set_block(resource socket)", "Sets blocking mode on a socket resource" ], "socket_set_nonblock": [ "bool socket_set_nonblock(resource socket)", "Sets nonblocking mode on a socket resource" ], "socket_set_option": [ "bool socket_set_option(resource socket, int level, int optname, int|array optval)", "Sets socket options for the socket" ], "socket_shutdown": [ "bool socket_shutdown(resource socket[, int how])", "Shuts down a socket for receiving, sending, or both." ], "socket_strerror": [ "string socket_strerror(int errno)", "Returns a string describing an error" ], "socket_write": [ "int socket_write(resource socket, string buf[, int length])", "Writes the buffer to the socket resource, length is optional" ], "solid_fetch_prev": [ "bool solid_fetch_prev(resource result_id)", "" ], "sort": [ "bool sort(array &array_arg [, int sort_flags])", "Sort an array" ], "soundex": [ "string soundex(string str)", "Calculate the soundex key of a string" ], "spl_autoload": [ "void spl_autoload(string class_name [, string file_extensions])", "Default implementation for __autoload()" ], "spl_autoload_call": [ "void spl_autoload_call(string class_name)", "Try all registerd autoload function to load the requested class" ], "spl_autoload_extensions": [ "string spl_autoload_extensions([string file_extensions])", "Register and return default file extensions for spl_autoload" ], "spl_autoload_functions": [ "false|array spl_autoload_functions()", "Return all registered __autoload() functionns" ], "spl_autoload_register": [ "bool spl_autoload_register([mixed autoload_function = \"spl_autoload\" [, throw = true [, prepend]]])", "Register given function as __autoload() implementation" ], "spl_autoload_unregister": [ "bool spl_autoload_unregister(mixed autoload_function)", "Unregister given function as __autoload() implementation" ], "spl_classes": [ "array spl_classes()", "Return an array containing the names of all clsses and interfaces defined in SPL" ], "spl_object_hash": [ "string spl_object_hash(object obj)", "Return hash id for given object" ], "split": [ "array split(string pattern, string string [, int limit])", "Split string into array by regular expression" ], "spliti": [ "array spliti(string pattern, string string [, int limit])", "Split string into array by regular expression case-insensitive" ], "sprintf": [ "string sprintf(string format [, mixed arg1 [, mixed ...]])", "Return a formatted string" ], "sql_regcase": [ "string sql_regcase(string string)", "Make regular expression for case insensitive match" ], "sqlite_array_query": [ "array sqlite_array_query(resource db, string query [ , int result_type [, bool decode_binary]])", "Executes a query against a given database and returns an array of arrays." ], "sqlite_busy_timeout": [ "void sqlite_busy_timeout(resource db, int ms)", "Set busy timeout duration. If ms <= 0, all busy handlers are disabled." ], "sqlite_changes": [ "int sqlite_changes(resource db)", "Returns the number of rows that were changed by the most recent SQL statement." ], "sqlite_close": [ "void sqlite_close(resource db)", "Closes an open sqlite database." ], "sqlite_column": [ "mixed sqlite_column(resource result, mixed index_or_name [, bool decode_binary])", "Fetches a column from the current row of a result set." ], "sqlite_create_aggregate": [ "bool sqlite_create_aggregate(resource db, string funcname, mixed step_func, mixed finalize_func[, long num_args])", "Registers an aggregate function for queries." ], "sqlite_create_function": [ "bool sqlite_create_function(resource db, string funcname, mixed callback[, long num_args])", "Registers a \"regular\" function for queries." ], "sqlite_current": [ "array sqlite_current(resource result [, int result_type [, bool decode_binary]])", "Fetches the current row from a result set as an array." ], "sqlite_error_string": [ "string sqlite_error_string(int error_code)", "Returns the textual description of an error code." ], "sqlite_escape_string": [ "string sqlite_escape_string(string item)", "Escapes a string for use as a query parameter." ], "sqlite_exec": [ "boolean sqlite_exec(string query, resource db[, string &error_message])", "Executes a result-less query against a given database" ], "sqlite_factory": [ "object sqlite_factory(string filename [, int mode [, string &error_message]])", "Opens a SQLite database and creates an object for it. Will create the database if it does not exist." ], "sqlite_fetch_all": [ "array sqlite_fetch_all(resource result [, int result_type [, bool decode_binary]])", "Fetches all rows from a result set as an array of arrays." ], "sqlite_fetch_array": [ "array sqlite_fetch_array(resource result [, int result_type [, bool decode_binary]])", "Fetches the next row from a result set as an array." ], "sqlite_fetch_column_types": [ "resource sqlite_fetch_column_types(string table_name, resource db [, int result_type])", "Return an array of column types from a particular table." ], "sqlite_fetch_object": [ "object sqlite_fetch_object(resource result [, string class_name [, NULL|array ctor_params [, bool decode_binary]]])", "Fetches the next row from a result set as an object." ], "sqlite_fetch_single": [ "string sqlite_fetch_single(resource result [, bool decode_binary])", "Fetches the first column of a result set as a string." ], "sqlite_field_name": [ "string sqlite_field_name(resource result, int field_index)", "Returns the name of a particular field of a result set." ], "sqlite_has_prev": [ "bool sqlite_has_prev(resource result)", "* Returns whether a previous row is available." ], "sqlite_key": [ "int sqlite_key(resource result)", "Return the current row index of a buffered result." ], "sqlite_last_error": [ "int sqlite_last_error(resource db)", "Returns the error code of the last error for a database." ], "sqlite_last_insert_rowid": [ "int sqlite_last_insert_rowid(resource db)", "Returns the rowid of the most recently inserted row." ], "sqlite_libencoding": [ "string sqlite_libencoding()", "Returns the encoding (iso8859 or UTF-8) of the linked SQLite library." ], "sqlite_libversion": [ "string sqlite_libversion()", "Returns the version of the linked SQLite library." ], "sqlite_next": [ "bool sqlite_next(resource result)", "Seek to the next row number of a result set." ], "sqlite_num_fields": [ "int sqlite_num_fields(resource result)", "Returns the number of fields in a result set." ], "sqlite_num_rows": [ "int sqlite_num_rows(resource result)", "Returns the number of rows in a buffered result set." ], "sqlite_open": [ "resource sqlite_open(string filename [, int mode [, string &error_message]])", "Opens a SQLite database. Will create the database if it does not exist." ], "sqlite_popen": [ "resource sqlite_popen(string filename [, int mode [, string &error_message]])", "Opens a persistent handle to a SQLite database. Will create the database if it does not exist." ], "sqlite_prev": [ "bool sqlite_prev(resource result)", "* Seek to the previous row number of a result set." ], "sqlite_query": [ "resource sqlite_query(string query, resource db [, int result_type [, string &error_message]])", "Executes a query against a given database and returns a result handle." ], "sqlite_rewind": [ "bool sqlite_rewind(resource result)", "Seek to the first row number of a buffered result set." ], "sqlite_seek": [ "bool sqlite_seek(resource result, int row)", "Seek to a particular row number of a buffered result set." ], "sqlite_single_query": [ "array sqlite_single_query(resource db, string query [, bool first_row_only [, bool decode_binary]])", "Executes a query and returns either an array for one single column or the value of the first row." ], "sqlite_udf_decode_binary": [ "string sqlite_udf_decode_binary(string data)", "Decode binary encoding on a string parameter passed to an UDF." ], "sqlite_udf_encode_binary": [ "string sqlite_udf_encode_binary(string data)", "Apply binary encoding (if required) to a string to return from an UDF." ], "sqlite_unbuffered_query": [ "resource sqlite_unbuffered_query(string query, resource db [ , int result_type [, string &error_message]])", "Executes a query that does not prefetch and buffer all data." ], "sqlite_valid": [ "bool sqlite_valid(resource result)", "Returns whether more rows are available." ], "sqrt": [ "float sqrt(float number)", "Returns the square root of the number" ], "srand": [ "void srand([int seed])", "Seeds random number generator" ], "sscanf": [ "mixed sscanf(string str, string format [, string ...])", "Implements an ANSI C compatible sscanf" ], "stat": [ "array stat(string filename)", "Give information about a file" ], "str_getcsv": [ "array str_getcsv(string input[, string delimiter[, string enclosure[, string escape]]])", "Parse a CSV string into an array" ], "str_ireplace": [ "mixed str_ireplace(mixed search, mixed replace, mixed subject [, int &replace_count])", "Replaces all occurrences of search in haystack with replace \/ case-insensitive" ], "str_pad": [ "string str_pad(string input, int pad_length [, string pad_string [, int pad_type]])", "Returns input string padded on the left or right to specified length with pad_string" ], "str_repeat": [ "string str_repeat(string input, int mult)", "Returns the input string repeat mult times" ], "str_replace": [ "mixed str_replace(mixed search, mixed replace, mixed subject [, int &replace_count])", "Replaces all occurrences of search in haystack with replace" ], "str_rot13": [ "string str_rot13(string str)", "Perform the rot13 transform on a string" ], "str_shuffle": [ "void str_shuffle(string str)", "Shuffles string. One permutation of all possible is created" ], "str_split": [ "array str_split(string str [, int split_length])", "Convert a string to an array. If split_length is specified, break the string down into chunks each split_length characters long." ], "str_word_count": [ "mixed str_word_count(string str, [int format [, string charlist]])", "Counts the number of words inside a string. If format of 1 is specified, then the function will return an array containing all the words found inside the string. If format of 2 is specified, then the function will return an associated array where the position of the word is the key and the word itself is the value. For the purpose of this function, 'word' is defined as a locale dependent string containing alphabetic characters, which also may contain, but not start with \"'\" and \"-\" characters." ], "strcasecmp": [ "int strcasecmp(string str1, string str2)", "Binary safe case-insensitive string comparison" ], "strchr": [ "string strchr(string haystack, string needle)", "An alias for strstr" ], "strcmp": [ "int strcmp(string str1, string str2)", "Binary safe string comparison" ], "strcoll": [ "int strcoll(string str1, string str2)", "Compares two strings using the current locale" ], "strcspn": [ "int strcspn(string str, string mask [, start [, len]])", "Finds length of initial segment consisting entirely of characters not found in mask. If start or\/and length is provide works like strcspn(substr($s,$start,$len),$bad_chars)" ], "stream_bucket_append": [ "void stream_bucket_append(resource brigade, resource bucket)", "Append bucket to brigade" ], "stream_bucket_make_writeable": [ "object stream_bucket_make_writeable(resource brigade)", "Return a bucket object from the brigade for operating on" ], "stream_bucket_new": [ "resource stream_bucket_new(resource stream, string buffer)", "Create a new bucket for use on the current stream" ], "stream_bucket_prepend": [ "void stream_bucket_prepend(resource brigade, resource bucket)", "Prepend bucket to brigade" ], "stream_context_create": [ "resource stream_context_create([array options[, array params]])", "Create a file context and optionally set parameters" ], "stream_context_get_default": [ "resource stream_context_get_default([array options])", "Get a handle on the default file\/stream context and optionally set parameters" ], "stream_context_get_options": [ "array stream_context_get_options(resource context|resource stream)", "Retrieve options for a stream\/wrapper\/context" ], "stream_context_get_params": [ "array stream_context_get_params(resource context|resource stream)", "Get parameters of a file context" ], "stream_context_set_default": [ "resource stream_context_set_default(array options)", "Set default file\/stream context, returns the context as a resource" ], "stream_context_set_option": [ "bool stream_context_set_option(resource context|resource stream, string wrappername, string optionname, mixed value)", "Set an option for a wrapper" ], "stream_context_set_params": [ "bool stream_context_set_params(resource context|resource stream, array options)", "Set parameters for a file context" ], "stream_copy_to_stream": [ "long stream_copy_to_stream(resource source, resource dest [, long maxlen [, long pos]])", "Reads up to maxlen bytes from source stream and writes them to dest stream." ], "stream_filter_append": [ "resource stream_filter_append(resource stream, string filtername[, int read_write[, string filterparams]])", "Append a filter to a stream" ], "stream_filter_prepend": [ "resource stream_filter_prepend(resource stream, string filtername[, int read_write[, string filterparams]])", "Prepend a filter to a stream" ], "stream_filter_register": [ "bool stream_filter_register(string filtername, string classname)", "Registers a custom filter handler class" ], "stream_filter_remove": [ "bool stream_filter_remove(resource stream_filter)", "Flushes any data in the filter's internal buffer, removes it from the chain, and frees the resource" ], "stream_get_contents": [ "string stream_get_contents(resource source [, long maxlen [, long offset]])", "Reads all remaining bytes (or up to maxlen bytes) from a stream and returns them as a string." ], "stream_get_filters": [ "array stream_get_filters(void)", "Returns a list of registered filters" ], "stream_get_line": [ "string stream_get_line(resource stream, int maxlen [, string ending])", "Read up to maxlen bytes from a stream or until the ending string is found" ], "stream_get_meta_data": [ "array stream_get_meta_data(resource fp)", "Retrieves header\/meta data from streams\/file pointers" ], "stream_get_transports": [ "array stream_get_transports()", "Retrieves list of registered socket transports" ], "stream_get_wrappers": [ "array stream_get_wrappers()", "Retrieves list of registered stream wrappers" ], "stream_is_local": [ "bool stream_is_local(resource stream|string url)", "" ], "stream_resolve_include_path": [ "string stream_resolve_include_path(string filename)", "Determine what file will be opened by calls to fopen() with a relative path" ], "stream_select": [ "int stream_select(array &read_streams, array &write_streams, array &except_streams, int tv_sec[, int tv_usec])", "Runs the select() system call on the sets of streams with a timeout specified by tv_sec and tv_usec" ], "stream_set_blocking": [ "bool stream_set_blocking(resource socket, int mode)", "Set blocking\/non-blocking mode on a socket or stream" ], "stream_set_timeout": [ "bool stream_set_timeout(resource stream, int seconds [, int microseconds])", "Set timeout on stream read to seconds + microseonds" ], "stream_set_write_buffer": [ "int stream_set_write_buffer(resource fp, int buffer)", "Set file write buffer" ], "stream_socket_accept": [ "resource stream_socket_accept(resource serverstream, [ double timeout [, string &peername ]])", "Accept a client connection from a server socket" ], "stream_socket_client": [ "resource stream_socket_client(string remoteaddress [, long &errcode [, string &errstring [, double timeout [, long flags [, resource context]]]]])", "Open a client connection to a remote address" ], "stream_socket_enable_crypto": [ "int stream_socket_enable_crypto(resource stream, bool enable [, int cryptokind [, resource sessionstream]])", "Enable or disable a specific kind of crypto on the stream" ], "stream_socket_get_name": [ "string stream_socket_get_name(resource stream, bool want_peer)", "Returns either the locally bound or remote name for a socket stream" ], "stream_socket_pair": [ "array stream_socket_pair(int domain, int type, int protocol)", "Creates a pair of connected, indistinguishable socket streams" ], "stream_socket_recvfrom": [ "string stream_socket_recvfrom(resource stream, long amount [, long flags [, string &remote_addr]])", "Receives data from a socket stream" ], "stream_socket_sendto": [ "long stream_socket_sendto(resouce stream, string data [, long flags [, string target_addr]])", "Send data to a socket stream. If target_addr is specified it must be in dotted quad (or [ipv6]) format" ], "stream_socket_server": [ "resource stream_socket_server(string localaddress [, long &errcode [, string &errstring [, long flags [, resource context]]]])", "Create a server socket bound to localaddress" ], "stream_socket_shutdown": [ "int stream_socket_shutdown(resource stream, int how)", "causes all or part of a full-duplex connection on the socket associated with stream to be shut down. If how is SHUT_RD, further receptions will be disallowed. If how is SHUT_WR, further transmissions will be disallowed. If how is SHUT_RDWR, further receptions and transmissions will be disallowed." ], "stream_supports_lock": [ "bool stream_supports_lock(resource stream)", "Tells wether the stream supports locking through flock()." ], "stream_wrapper_register": [ "bool stream_wrapper_register(string protocol, string classname[, integer flags])", "Registers a custom URL protocol handler class" ], "stream_wrapper_restore": [ "bool stream_wrapper_restore(string protocol)", "Restore the original protocol handler, overriding if necessary" ], "stream_wrapper_unregister": [ "bool stream_wrapper_unregister(string protocol)", "Unregister a wrapper for the life of the current request." ], "strftime": [ "string strftime(string format [, int timestamp])", "Format a local time\/date according to locale settings" ], "strip_tags": [ "string strip_tags(string str [, string allowable_tags])", "Strips HTML and PHP tags from a string" ], "stripcslashes": [ "string stripcslashes(string str)", "Strips backslashes from a string. Uses C-style conventions" ], "stripos": [ "int stripos(string haystack, string needle [, int offset])", "Finds position of first occurrence of a string within another, case insensitive" ], "stripslashes": [ "string stripslashes(string str)", "Strips backslashes from a string" ], "stristr": [ "string stristr(string haystack, string needle[, bool part])", "Finds first occurrence of a string within another, case insensitive" ], "strlen": [ "int strlen(string str)", "Get string length" ], "strnatcasecmp": [ "int strnatcasecmp(string s1, string s2)", "Returns the result of case-insensitive string comparison using 'natural' algorithm" ], "strnatcmp": [ "int strnatcmp(string s1, string s2)", "Returns the result of string comparison using 'natural' algorithm" ], "strncasecmp": [ "int strncasecmp(string str1, string str2, int len)", "Binary safe string comparison" ], "strncmp": [ "int strncmp(string str1, string str2, int len)", "Binary safe string comparison" ], "strpbrk": [ "array strpbrk(string haystack, string char_list)", "Search a string for any of a set of characters" ], "strpos": [ "int strpos(string haystack, string needle [, int offset])", "Finds position of first occurrence of a string within another" ], "strptime": [ "string strptime(string timestamp, string format)", "Parse a time\/date generated with strftime()" ], "strrchr": [ "string strrchr(string haystack, string needle)", "Finds the last occurrence of a character in a string within another" ], "strrev": [ "string strrev(string str)", "Reverse a string" ], "strripos": [ "int strripos(string haystack, string needle [, int offset])", "Finds position of last occurrence of a string within another string" ], "strrpos": [ "int strrpos(string haystack, string needle [, int offset])", "Finds position of last occurrence of a string within another string" ], "strspn": [ "int strspn(string str, string mask [, start [, len]])", "Finds length of initial segment consisting entirely of characters found in mask. If start or\/and length is provided works like strspn(substr($s,$start,$len),$good_chars)" ], "strstr": [ "string strstr(string haystack, string needle[, bool part])", "Finds first occurrence of a string within another" ], "strtok": [ "string strtok([string str,] string token)", "Tokenize a string" ], "strtolower": [ "string strtolower(string str)", "Makes a string lowercase" ], "strtotime": [ "int strtotime(string time [, int now ])", "Convert string representation of date and time to a timestamp" ], "strtoupper": [ "string strtoupper(string str)", "Makes a string uppercase" ], "strtr": [ "string strtr(string str, string from[, string to])", "Translates characters in str using given translation tables" ], "strval": [ "string strval(mixed var)", "Get the string value of a variable" ], "substr": [ "string substr(string str, int start [, int length])", "Returns part of a string" ], "substr_compare": [ "int substr_compare(string main_str, string str, int offset [, int length [, bool case_sensitivity]])", "Binary safe optionally case insensitive comparison of 2 strings from an offset, up to length characters" ], "substr_count": [ "int substr_count(string haystack, string needle [, int offset [, int length]])", "Returns the number of times a substring occurs in the string" ], "substr_replace": [ "mixed substr_replace(mixed str, mixed repl, mixed start [, mixed length])", "Replaces part of a string with another string" ], "sybase_affected_rows": [ "int sybase_affected_rows([resource link_id])", "Get number of affected rows in last query" ], "sybase_close": [ "bool sybase_close([resource link_id])", "Close Sybase connection" ], "sybase_connect": [ "int sybase_connect([string host [, string user [, string password [, string charset [, string appname [, bool new]]]]]])", "Open Sybase server connection" ], "sybase_data_seek": [ "bool sybase_data_seek(resource result, int offset)", "Move internal row pointer" ], "sybase_deadlock_retry_count": [ "void sybase_deadlock_retry_count(int retry_count)", "Sets deadlock retry count" ], "sybase_fetch_array": [ "array sybase_fetch_array(resource result)", "Fetch row as array" ], "sybase_fetch_assoc": [ "array sybase_fetch_assoc(resource result)", "Fetch row as array without numberic indices" ], "sybase_fetch_field": [ "object sybase_fetch_field(resource result [, int offset])", "Get field information" ], "sybase_fetch_object": [ "object sybase_fetch_object(resource result [, mixed object])", "Fetch row as object" ], "sybase_fetch_row": [ "array sybase_fetch_row(resource result)", "Get row as enumerated array" ], "sybase_field_seek": [ "bool sybase_field_seek(resource result, int offset)", "Set field offset" ], "sybase_free_result": [ "bool sybase_free_result(resource result)", "Free result memory" ], "sybase_get_last_message": [ "string sybase_get_last_message(void)", "Returns the last message from server (over min_message_severity)" ], "sybase_min_client_severity": [ "void sybase_min_client_severity(int severity)", "Sets minimum client severity" ], "sybase_min_server_severity": [ "void sybase_min_server_severity(int severity)", "Sets minimum server severity" ], "sybase_num_fields": [ "int sybase_num_fields(resource result)", "Get number of fields in result" ], "sybase_num_rows": [ "int sybase_num_rows(resource result)", "Get number of rows in result" ], "sybase_pconnect": [ "int sybase_pconnect([string host [, string user [, string password [, string charset [, string appname]]]]])", "Open persistent Sybase connection" ], "sybase_query": [ "int sybase_query(string query [, resource link_id])", "Send Sybase query" ], "sybase_result": [ "string sybase_result(resource result, int row, mixed field)", "Get result data" ], "sybase_select_db": [ "bool sybase_select_db(string database [, resource link_id])", "Select Sybase database" ], "sybase_set_message_handler": [ "bool sybase_set_message_handler(mixed error_func [, resource connection])", "Set the error handler, to be called when a server message is raised. If error_func is NULL the handler will be deleted" ], "sybase_unbuffered_query": [ "int sybase_unbuffered_query(string query [, resource link_id])", "Send Sybase query" ], "symlink": [ "int symlink(string target, string link)", "Create a symbolic link" ], "sys_get_temp_dir": [ "string sys_get_temp_dir()", "Returns directory path used for temporary files" ], "sys_getloadavg": [ "array sys_getloadavg()", "" ], "syslog": [ "bool syslog(int priority, string message)", "Generate a system log message" ], "system": [ "int system(string command [, int &return_value])", "Execute an external program and display output" ], "tan": [ "float tan(float number)", "Returns the tangent of the number in radians" ], "tanh": [ "float tanh(float number)", "Returns the hyperbolic tangent of the number, defined as sinh(number)\/cosh(number)" ], "tempnam": [ "string tempnam(string dir, string prefix)", "Create a unique filename in a directory" ], "textdomain": [ "string textdomain(string domain)", "Set the textdomain to \"domain\". Returns the current domain" ], "tidy_access_count": [ "int tidy_access_count()", "Returns the Number of Tidy accessibility warnings encountered for specified document." ], "tidy_clean_repair": [ "boolean tidy_clean_repair()", "Execute configured cleanup and repair operations on parsed markup" ], "tidy_config_count": [ "int tidy_config_count()", "Returns the Number of Tidy configuration errors encountered for specified document." ], "tidy_diagnose": [ "boolean tidy_diagnose()", "Run configured diagnostics on parsed and repaired markup." ], "tidy_error_count": [ "int tidy_error_count()", "Returns the Number of Tidy errors encountered for specified document." ], "tidy_get_body": [ "TidyNode tidy_get_body(resource tidy)", "Returns a TidyNode Object starting from the <BODY> tag of the tidy parse tree" ], "tidy_get_config": [ "array tidy_get_config()", "Get current Tidy configuarion" ], "tidy_get_error_buffer": [ "string tidy_get_error_buffer([boolean detailed])", "Return warnings and errors which occured parsing the specified document" ], "tidy_get_head": [ "TidyNode tidy_get_head()", "Returns a TidyNode Object starting from the <HEAD> tag of the tidy parse tree" ], "tidy_get_html": [ "TidyNode tidy_get_html()", "Returns a TidyNode Object starting from the <HTML> tag of the tidy parse tree" ], "tidy_get_html_ver": [ "int tidy_get_html_ver()", "Get the Detected HTML version for the specified document." ], "tidy_get_opt_doc": [ "string tidy_get_opt_doc(tidy resource, string optname)", "Returns the documentation for the given option name" ], "tidy_get_output": [ "string tidy_get_output()", "Return a string representing the parsed tidy markup" ], "tidy_get_release": [ "string tidy_get_release()", "Get release date (version) for Tidy library" ], "tidy_get_root": [ "TidyNode tidy_get_root()", "Returns a TidyNode Object representing the root of the tidy parse tree" ], "tidy_get_status": [ "int tidy_get_status()", "Get status of specfied document." ], "tidy_getopt": [ "mixed tidy_getopt(string option)", "Returns the value of the specified configuration option for the tidy document." ], "tidy_is_xhtml": [ "boolean tidy_is_xhtml()", "Indicates if the document is a XHTML document." ], "tidy_is_xml": [ "boolean tidy_is_xml()", "Indicates if the document is a generic (non HTML\/XHTML) XML document." ], "tidy_parse_file": [ "boolean tidy_parse_file(string file [, mixed config_options [, string encoding [, bool use_include_path]]])", "Parse markup in file or URI" ], "tidy_parse_string": [ "bool tidy_parse_string(string input [, mixed config_options [, string encoding]])", "Parse a document stored in a string" ], "tidy_repair_file": [ "boolean tidy_repair_file(string filename [, mixed config_file [, string encoding [, bool use_include_path]]])", "Repair a file using an optionally provided configuration file" ], "tidy_repair_string": [ "boolean tidy_repair_string(string data [, mixed config_file [, string encoding]])", "Repair a string using an optionally provided configuration file" ], "tidy_warning_count": [ "int tidy_warning_count()", "Returns the Number of Tidy warnings encountered for specified document." ], "time": [ "int time(void)", "Return current UNIX timestamp" ], "time_nanosleep": [ "mixed time_nanosleep(long seconds, long nanoseconds)", "Delay for a number of seconds and nano seconds" ], "time_sleep_until": [ "mixed time_sleep_until(float timestamp)", "Make the script sleep until the specified time" ], "timezone_abbreviations_list": [ "array timezone_abbreviations_list()", "Returns associative array containing dst, offset and the timezone name" ], "timezone_identifiers_list": [ "array timezone_identifiers_list([long what[, string country]])", "Returns numerically index array with all timezone identifiers." ], "timezone_location_get": [ "array timezone_location_get()", "Returns location information for a timezone, including country code, latitude\/longitude and comments" ], "timezone_name_from_abbr": [ "string timezone_name_from_abbr(string abbr[, long gmtOffset[, long isdst]])", "Returns the timezone name from abbrevation" ], "timezone_name_get": [ "string timezone_name_get(DateTimeZone object)", "Returns the name of the timezone." ], "timezone_offset_get": [ "long timezone_offset_get(DateTimeZone object, DateTime object)", "Returns the timezone offset." ], "timezone_open": [ "DateTimeZone timezone_open(string timezone)", "Returns new DateTimeZone object" ], "timezone_transitions_get": [ "array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long timestamp_end ]])", "Returns numerically indexed array containing associative array for all transitions in the specified range for the timezone." ], "timezone_version_get": [ "array timezone_version_get()", "Returns the Olson database version number." ], "tmpfile": [ "resource tmpfile(void)", "Create a temporary file that will be deleted automatically after use" ], "token_get_all": [ "array token_get_all(string source)", "" ], "token_name": [ "string token_name(int type)", "" ], "touch": [ "bool touch(string filename [, int time [, int atime]])", "Set modification time of file" ], "trigger_error": [ "void trigger_error(string messsage [, int error_type])", "Generates a user-level error\/warning\/notice message" ], "trim": [ "string trim(string str [, string character_mask])", "Strips whitespace from the beginning and end of a string" ], "uasort": [ "bool uasort(array array_arg, string cmp_function)", "Sort an array with a user-defined comparison function and maintain index association" ], "ucfirst": [ "string ucfirst(string str)", "Make a string's first character lowercase" ], "ucwords": [ "string ucwords(string str)", "Uppercase the first character of every word in a string" ], "uksort": [ "bool uksort(array array_arg, string cmp_function)", "Sort an array by keys using a user-defined comparison function" ], "umask": [ "int umask([int mask])", "Return or change the umask" ], "uniqid": [ "string uniqid([string prefix [, bool more_entropy]])", "Generates a unique ID" ], "unixtojd": [ "int unixtojd([int timestamp])", "Convert UNIX timestamp to Julian Day" ], "unlink": [ "bool unlink(string filename[, context context])", "Delete a file" ], "unpack": [ "array unpack(string format, string input)", "Unpack binary string into named array elements according to format argument" ], "unregister_tick_function": [ "void unregister_tick_function(string function_name)", "Unregisters a tick callback function" ], "unserialize": [ "mixed unserialize(string variable_representation)", "Takes a string representation of variable and recreates it" ], "unset": [ "void unset (mixed var [, mixed var])", "Unset a given variable" ], "urldecode": [ "string urldecode(string str)", "Decodes URL-encoded string" ], "urlencode": [ "string urlencode(string str)", "URL-encodes string" ], "usleep": [ "void usleep(int micro_seconds)", "Delay for a given number of micro seconds" ], "usort": [ "bool usort(array array_arg, string cmp_function)", "Sort an array by values using a user-defined comparison function" ], "utf8_decode": [ "string utf8_decode(string data)", "Converts a UTF-8 encoded string to ISO-8859-1" ], "utf8_encode": [ "string utf8_encode(string data)", "Encodes an ISO-8859-1 string to UTF-8" ], "var_dump": [ "void var_dump(mixed var)", "Dumps a string representation of variable to output" ], "var_export": [ "mixed var_export(mixed var [, bool return])", "Outputs or returns a string representation of a variable" ], "variant_abs": [ "mixed variant_abs(mixed left)", "Returns the absolute value of a variant" ], "variant_add": [ "mixed variant_add(mixed left, mixed right)", "\"Adds\" two variant values together and returns the result" ], "variant_and": [ "mixed variant_and(mixed left, mixed right)", "performs a bitwise AND operation between two variants and returns the result" ], "variant_cast": [ "object variant_cast(object variant, int type)", "Convert a variant into a new variant object of another type" ], "variant_cat": [ "mixed variant_cat(mixed left, mixed right)", "concatenates two variant values together and returns the result" ], "variant_cmp": [ "int variant_cmp(mixed left, mixed right [, int lcid [, int flags]])", "Compares two variants" ], "variant_date_from_timestamp": [ "object variant_date_from_timestamp(int timestamp)", "Returns a variant date representation of a unix timestamp" ], "variant_date_to_timestamp": [ "int variant_date_to_timestamp(object variant)", "Converts a variant date\/time value to unix timestamp" ], "variant_div": [ "mixed variant_div(mixed left, mixed right)", "Returns the result from dividing two variants" ], "variant_eqv": [ "mixed variant_eqv(mixed left, mixed right)", "Performs a bitwise equivalence on two variants" ], "variant_fix": [ "mixed variant_fix(mixed left)", "Returns the integer part ? of a variant" ], "variant_get_type": [ "int variant_get_type(object variant)", "Returns the VT_XXX type code for a variant" ], "variant_idiv": [ "mixed variant_idiv(mixed left, mixed right)", "Converts variants to integers and then returns the result from dividing them" ], "variant_imp": [ "mixed variant_imp(mixed left, mixed right)", "Performs a bitwise implication on two variants" ], "variant_int": [ "mixed variant_int(mixed left)", "Returns the integer portion of a variant" ], "variant_mod": [ "mixed variant_mod(mixed left, mixed right)", "Divides two variants and returns only the remainder" ], "variant_mul": [ "mixed variant_mul(mixed left, mixed right)", "multiplies the values of the two variants and returns the result" ], "variant_neg": [ "mixed variant_neg(mixed left)", "Performs logical negation on a variant" ], "variant_not": [ "mixed variant_not(mixed left)", "Performs bitwise not negation on a variant" ], "variant_or": [ "mixed variant_or(mixed left, mixed right)", "Performs a logical disjunction on two variants" ], "variant_pow": [ "mixed variant_pow(mixed left, mixed right)", "Returns the result of performing the power function with two variants" ], "variant_round": [ "mixed variant_round(mixed left, int decimals)", "Rounds a variant to the specified number of decimal places" ], "variant_set": [ "void variant_set(object variant, mixed value)", "Assigns a new value for a variant object" ], "variant_set_type": [ "void variant_set_type(object variant, int type)", "Convert a variant into another type. Variant is modified \"in-place\"" ], "variant_sub": [ "mixed variant_sub(mixed left, mixed right)", "subtracts the value of the right variant from the left variant value and returns the result" ], "variant_xor": [ "mixed variant_xor(mixed left, mixed right)", "Performs a logical exclusion on two variants" ], "version_compare": [ "int version_compare(string ver1, string ver2 [, string oper])", "Compares two \"PHP-standardized\" version number strings" ], "vfprintf": [ "int vfprintf(resource stream, string format, array args)", "Output a formatted string into a stream" ], "virtual": [ "bool virtual(string filename)", "Perform an Apache sub-request" ], "vprintf": [ "int vprintf(string format, array args)", "Output a formatted string" ], "vsprintf": [ "string vsprintf(string format, array args)", "Return a formatted string" ], "wddx_add_vars": [ "int wddx_add_vars(resource packet_id, mixed var_names [, mixed ...])", "Serializes given variables and adds them to packet given by packet_id" ], "wddx_deserialize": [ "mixed wddx_deserialize(mixed packet)", "Deserializes given packet and returns a PHP value" ], "wddx_packet_end": [ "string wddx_packet_end(resource packet_id)", "Ends specified WDDX packet and returns the string containing the packet" ], "wddx_packet_start": [ "resource wddx_packet_start([string comment])", "Starts a WDDX packet with optional comment and returns the packet id" ], "wddx_serialize_value": [ "string wddx_serialize_value(mixed var [, string comment])", "Creates a new packet and serializes the given value" ], "wddx_serialize_vars": [ "string wddx_serialize_vars(mixed var_name [, mixed ...])", "Creates a new packet and serializes given variables into a struct" ], "wordwrap": [ "string wordwrap(string str [, int width [, string break [, boolean cut]]])", "Wraps buffer to selected number of characters using string break char" ], "xml_error_string": [ "string xml_error_string(int code)", "Get XML parser error string" ], "xml_get_current_byte_index": [ "int xml_get_current_byte_index(resource parser)", "Get current byte index for an XML parser" ], "xml_get_current_column_number": [ "int xml_get_current_column_number(resource parser)", "Get current column number for an XML parser" ], "xml_get_current_line_number": [ "int xml_get_current_line_number(resource parser)", "Get current line number for an XML parser" ], "xml_get_error_code": [ "int xml_get_error_code(resource parser)", "Get XML parser error code" ], "xml_parse": [ "int xml_parse(resource parser, string data [, int isFinal])", "Start parsing an XML document" ], "xml_parse_into_struct": [ "int xml_parse_into_struct(resource parser, string data, array &values [, array &index ])", "Parsing a XML document" ], "xml_parser_create": [ "resource xml_parser_create([string encoding])", "Create an XML parser" ], "xml_parser_create_ns": [ "resource xml_parser_create_ns([string encoding [, string sep]])", "Create an XML parser" ], "xml_parser_free": [ "int xml_parser_free(resource parser)", "Free an XML parser" ], "xml_parser_get_option": [ "int xml_parser_get_option(resource parser, int option)", "Get options from an XML parser" ], "xml_parser_set_option": [ "int xml_parser_set_option(resource parser, int option, mixed value)", "Set options in an XML parser" ], "xml_set_character_data_handler": [ "int xml_set_character_data_handler(resource parser, string hdl)", "Set up character data handler" ], "xml_set_default_handler": [ "int xml_set_default_handler(resource parser, string hdl)", "Set up default handler" ], "xml_set_element_handler": [ "int xml_set_element_handler(resource parser, string shdl, string ehdl)", "Set up start and end element handlers" ], "xml_set_end_namespace_decl_handler": [ "int xml_set_end_namespace_decl_handler(resource parser, string hdl)", "Set up character data handler" ], "xml_set_external_entity_ref_handler": [ "int xml_set_external_entity_ref_handler(resource parser, string hdl)", "Set up external entity reference handler" ], "xml_set_notation_decl_handler": [ "int xml_set_notation_decl_handler(resource parser, string hdl)", "Set up notation declaration handler" ], "xml_set_object": [ "int xml_set_object(resource parser, object &obj)", "Set up object which should be used for callbacks" ], "xml_set_processing_instruction_handler": [ "int xml_set_processing_instruction_handler(resource parser, string hdl)", "Set up processing instruction (PI) handler" ], "xml_set_start_namespace_decl_handler": [ "int xml_set_start_namespace_decl_handler(resource parser, string hdl)", "Set up character data handler" ], "xml_set_unparsed_entity_decl_handler": [ "int xml_set_unparsed_entity_decl_handler(resource parser, string hdl)", "Set up unparsed entity declaration handler" ], "xmlrpc_decode": [ "array xmlrpc_decode(string xml [, string encoding])", "Decodes XML into native PHP types" ], "xmlrpc_decode_request": [ "array xmlrpc_decode_request(string xml, string& method [, string encoding])", "Decodes XML into native PHP types" ], "xmlrpc_encode": [ "string xmlrpc_encode(mixed value)", "Generates XML for a PHP value" ], "xmlrpc_encode_request": [ "string xmlrpc_encode_request(string method, mixed params [, array output_options])", "Generates XML for a method request" ], "xmlrpc_get_type": [ "string xmlrpc_get_type(mixed value)", "Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings" ], "xmlrpc_is_fault": [ "bool xmlrpc_is_fault(array)", "Determines if an array value represents an XMLRPC fault." ], "xmlrpc_parse_method_descriptions": [ "array xmlrpc_parse_method_descriptions(string xml)", "Decodes XML into a list of method descriptions" ], "xmlrpc_server_add_introspection_data": [ "int xmlrpc_server_add_introspection_data(resource server, array desc)", "Adds introspection documentation" ], "xmlrpc_server_call_method": [ "mixed xmlrpc_server_call_method(resource server, string xml, mixed user_data [, array output_options])", "Parses XML requests and call methods" ], "xmlrpc_server_create": [ "resource xmlrpc_server_create(void)", "Creates an xmlrpc server" ], "xmlrpc_server_destroy": [ "int xmlrpc_server_destroy(resource server)", "Destroys server resources" ], "xmlrpc_server_register_introspection_callback": [ "bool xmlrpc_server_register_introspection_callback(resource server, string function)", "Register a PHP function to generate documentation" ], "xmlrpc_server_register_method": [ "bool xmlrpc_server_register_method(resource server, string method_name, string function)", "Register a PHP function to handle method matching method_name" ], "xmlrpc_set_type": [ "bool xmlrpc_set_type(string value, string type)", "Sets xmlrpc type, base64 or datetime, for a PHP string value" ], "xmlwriter_end_attribute": [ "bool xmlwriter_end_attribute(resource xmlwriter)", "End attribute - returns FALSE on error" ], "xmlwriter_end_cdata": [ "bool xmlwriter_end_cdata(resource xmlwriter)", "End current CDATA - returns FALSE on error" ], "xmlwriter_end_comment": [ "bool xmlwriter_end_comment(resource xmlwriter)", "Create end comment - returns FALSE on error" ], "xmlwriter_end_document": [ "bool xmlwriter_end_document(resource xmlwriter)", "End current document - returns FALSE on error" ], "xmlwriter_end_dtd": [ "bool xmlwriter_end_dtd(resource xmlwriter)", "End current DTD - returns FALSE on error" ], "xmlwriter_end_dtd_attlist": [ "bool xmlwriter_end_dtd_attlist(resource xmlwriter)", "End current DTD AttList - returns FALSE on error" ], "xmlwriter_end_dtd_element": [ "bool xmlwriter_end_dtd_element(resource xmlwriter)", "End current DTD element - returns FALSE on error" ], "xmlwriter_end_dtd_entity": [ "bool xmlwriter_end_dtd_entity(resource xmlwriter)", "End current DTD Entity - returns FALSE on error" ], "xmlwriter_end_element": [ "bool xmlwriter_end_element(resource xmlwriter)", "End current element - returns FALSE on error" ], "xmlwriter_end_pi": [ "bool xmlwriter_end_pi(resource xmlwriter)", "End current PI - returns FALSE on error" ], "xmlwriter_flush": [ "mixed xmlwriter_flush(resource xmlwriter [,bool empty])", "Output current buffer" ], "xmlwriter_full_end_element": [ "bool xmlwriter_full_end_element(resource xmlwriter)", "End current element - returns FALSE on error" ], "xmlwriter_open_memory": [ "resource xmlwriter_open_memory()", "Create new xmlwriter using memory for string output" ], "xmlwriter_open_uri": [ "resource xmlwriter_open_uri(resource xmlwriter, string source)", "Create new xmlwriter using source uri for output" ], "xmlwriter_output_memory": [ "string xmlwriter_output_memory(resource xmlwriter [,bool flush])", "Output current buffer as string" ], "xmlwriter_set_indent": [ "bool xmlwriter_set_indent(resource xmlwriter, bool indent)", "Toggle indentation on\/off - returns FALSE on error" ], "xmlwriter_set_indent_string": [ "bool xmlwriter_set_indent_string(resource xmlwriter, string indentString)", "Set string used for indenting - returns FALSE on error" ], "xmlwriter_start_attribute": [ "bool xmlwriter_start_attribute(resource xmlwriter, string name)", "Create start attribute - returns FALSE on error" ], "xmlwriter_start_attribute_ns": [ "bool xmlwriter_start_attribute_ns(resource xmlwriter, string prefix, string name, string uri)", "Create start namespaced attribute - returns FALSE on error" ], "xmlwriter_start_cdata": [ "bool xmlwriter_start_cdata(resource xmlwriter)", "Create start CDATA tag - returns FALSE on error" ], "xmlwriter_start_comment": [ "bool xmlwriter_start_comment(resource xmlwriter)", "Create start comment - returns FALSE on error" ], "xmlwriter_start_document": [ "bool xmlwriter_start_document(resource xmlwriter, string version, string encoding, string standalone)", "Create document tag - returns FALSE on error" ], "xmlwriter_start_dtd": [ "bool xmlwriter_start_dtd(resource xmlwriter, string name, string pubid, string sysid)", "Create start DTD tag - returns FALSE on error" ], "xmlwriter_start_dtd_attlist": [ "bool xmlwriter_start_dtd_attlist(resource xmlwriter, string name)", "Create start DTD AttList - returns FALSE on error" ], "xmlwriter_start_dtd_element": [ "bool xmlwriter_start_dtd_element(resource xmlwriter, string name)", "Create start DTD element - returns FALSE on error" ], "xmlwriter_start_dtd_entity": [ "bool xmlwriter_start_dtd_entity(resource xmlwriter, string name, bool isparam)", "Create start DTD Entity - returns FALSE on error" ], "xmlwriter_start_element": [ "bool xmlwriter_start_element(resource xmlwriter, string name)", "Create start element tag - returns FALSE on error" ], "xmlwriter_start_element_ns": [ "bool xmlwriter_start_element_ns(resource xmlwriter, string prefix, string name, string uri)", "Create start namespaced element tag - returns FALSE on error" ], "xmlwriter_start_pi": [ "bool xmlwriter_start_pi(resource xmlwriter, string target)", "Create start PI tag - returns FALSE on error" ], "xmlwriter_text": [ "bool xmlwriter_text(resource xmlwriter, string content)", "Write text - returns FALSE on error" ], "xmlwriter_write_attribute": [ "bool xmlwriter_write_attribute(resource xmlwriter, string name, string content)", "Write full attribute - returns FALSE on error" ], "xmlwriter_write_attribute_ns": [ "bool xmlwriter_write_attribute_ns(resource xmlwriter, string prefix, string name, string uri, string content)", "Write full namespaced attribute - returns FALSE on error" ], "xmlwriter_write_cdata": [ "bool xmlwriter_write_cdata(resource xmlwriter, string content)", "Write full CDATA tag - returns FALSE on error" ], "xmlwriter_write_comment": [ "bool xmlwriter_write_comment(resource xmlwriter, string content)", "Write full comment tag - returns FALSE on error" ], "xmlwriter_write_dtd": [ "bool xmlwriter_write_dtd(resource xmlwriter, string name, string pubid, string sysid, string subset)", "Write full DTD tag - returns FALSE on error" ], "xmlwriter_write_dtd_attlist": [ "bool xmlwriter_write_dtd_attlist(resource xmlwriter, string name, string content)", "Write full DTD AttList tag - returns FALSE on error" ], "xmlwriter_write_dtd_element": [ "bool xmlwriter_write_dtd_element(resource xmlwriter, string name, string content)", "Write full DTD element tag - returns FALSE on error" ], "xmlwriter_write_dtd_entity": [ "bool xmlwriter_write_dtd_entity(resource xmlwriter, string name, string content [, int pe [, string pubid [, string sysid [, string ndataid]]]])", "Write full DTD Entity tag - returns FALSE on error" ], "xmlwriter_write_element": [ "bool xmlwriter_write_element(resource xmlwriter, string name[, string content])", "Write full element tag - returns FALSE on error" ], "xmlwriter_write_element_ns": [ "bool xmlwriter_write_element_ns(resource xmlwriter, string prefix, string name, string uri[, string content])", "Write full namesapced element tag - returns FALSE on error" ], "xmlwriter_write_pi": [ "bool xmlwriter_write_pi(resource xmlwriter, string target, string content)", "Write full PI tag - returns FALSE on error" ], "xmlwriter_write_raw": [ "bool xmlwriter_write_raw(resource xmlwriter, string content)", "Write text - returns FALSE on error" ], "xsl_xsltprocessor_get_parameter": [ "string xsl_xsltprocessor_get_parameter(string namespace, string name);", "" ], "xsl_xsltprocessor_has_exslt_support": [ "bool xsl_xsltprocessor_has_exslt_support();", "" ], "xsl_xsltprocessor_import_stylesheet": [ "void xsl_xsltprocessor_import_stylesheet(domdocument doc);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html# Since:" ], "xsl_xsltprocessor_register_php_functions": [ "void xsl_xsltprocessor_register_php_functions([mixed $restrict]);", "" ], "xsl_xsltprocessor_remove_parameter": [ "bool xsl_xsltprocessor_remove_parameter(string namespace, string name);", "" ], "xsl_xsltprocessor_set_parameter": [ "bool xsl_xsltprocessor_set_parameter(string namespace, mixed name [, string value]);", "" ], "xsl_xsltprocessor_set_profiling": [ "bool xsl_xsltprocessor_set_profiling(string filename) *\/", "PHP_FUNCTION(xsl_xsltprocessor_set_profiling) { zval *id; xsl_object *intern; char *filename = NULL; int filename_len; DOM_GET_THIS(id); if (zend_parse_parameters_ex(ZEND_PARSE_PARAMS_QUIET, ZEND_NUM_ARGS() TSRMLS_CC, \"s!\", &filename, &filename_len) == SUCCESS) { intern = (xsl_object *)zend_object_store_get_object(id TSRMLS_CC); if (intern->profiling) { efree(intern->profiling); } if (filename != NULL) { intern->profiling = estrndup(filename,filename_len); } else { intern->profiling = NULL; } RETURN_TRUE; } else { WRONG_PARAM_COUNT; } } \/* }}} end xsl_xsltprocessor_set_profiling" ], "xsl_xsltprocessor_transform_to_doc": [ "domdocument xsl_xsltprocessor_transform_to_doc(domnode doc);", "URL: http:\/\/www.w3.org\/TR\/2003\/WD-DOM-Level-3-Core-20030226\/DOM3-Core.html# Since:" ], "xsl_xsltprocessor_transform_to_uri": [ "int xsl_xsltprocessor_transform_to_uri(domdocument doc, string uri);", "" ], "xsl_xsltprocessor_transform_to_xml": [ "string xsl_xsltprocessor_transform_to_xml(domdocument doc);", "" ], "zend_logo_guid": [ "string zend_logo_guid(void)", "Return the special ID used to request the Zend logo in phpinfo screens" ], "zend_version": [ "string zend_version(void)", "Get the version of the Zend Engine" ], "zip_close": [ "void zip_close(resource zip)", "Close a Zip archive" ], "zip_entry_close": [ "void zip_entry_close(resource zip_ent)", "Close a zip entry" ], "zip_entry_compressedsize": [ "int zip_entry_compressedsize(resource zip_entry)", "Return the compressed size of a ZZip entry" ], "zip_entry_compressionmethod": [ "string zip_entry_compressionmethod(resource zip_entry)", "Return a string containing the compression method used on a particular entry" ], "zip_entry_filesize": [ "int zip_entry_filesize(resource zip_entry)", "Return the actual filesize of a ZZip entry" ], "zip_entry_name": [ "string zip_entry_name(resource zip_entry)", "Return the name given a ZZip entry" ], "zip_entry_open": [ "bool zip_entry_open(resource zip_dp, resource zip_entry [, string mode])", "Open a Zip File, pointed by the resource entry" ], "zip_entry_read": [ "mixed zip_entry_read(resource zip_entry [, int len])", "Read from an open directory entry" ], "zip_open": [ "resource zip_open(string filename)", "Create new zip using source uri for output" ], "zip_read": [ "resource zip_read(resource zip)", "Returns the next file in the archive" ], "zlib_get_coding_type": [ "string zlib_get_coding_type(void)", "Returns the coding type used for output compression" ] }; var variableMap = { "$_COOKIE": { type: "array" }, "$_ENV": { type: "array" }, "$_FILES": { type: "array" }, "$_GET": { type: "array" }, "$_POST": { type: "array" }, "$_REQUEST": { type: "array" }, "$_SERVER": { type: "array", value: { "DOCUMENT_ROOT": 1, "GATEWAY_INTERFACE": 1, "HTTP_ACCEPT": 1, "HTTP_ACCEPT_CHARSET": 1, "HTTP_ACCEPT_ENCODING": 1 , "HTTP_ACCEPT_LANGUAGE": 1, "HTTP_CONNECTION": 1, "HTTP_HOST": 1, "HTTP_REFERER": 1, "HTTP_USER_AGENT": 1, "PATH_TRANSLATED": 1, "PHP_SELF": 1, "QUERY_STRING": 1, "REMOTE_ADDR": 1, "REMOTE_PORT": 1, "REQUEST_METHOD": 1, "REQUEST_URI": 1, "SCRIPT_FILENAME": 1, "SCRIPT_NAME": 1, "SERVER_ADMIN": 1, "SERVER_NAME": 1, "SERVER_PORT": 1, "SERVER_PROTOCOL": 1, "SERVER_SIGNATURE": 1, "SERVER_SOFTWARE": 1 } }, "$_SESSION": { type: "array" }, "$GLOBALS": { type: "array" } }; function is(token, type) { return token.type.lastIndexOf(type) > -1; } var PhpCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (token.type==='identifier') return this.getFunctionCompletions(state, session, pos, prefix); if (is(token, "variable")) return this.getVariableCompletions(state, session, pos, prefix); var line = session.getLine(pos.row).substr(0, pos.column); if (token.type==='string' && /(\$[\w]*)\[["']([^'"]*)$/i.test(line)) return this.getArrayKeyCompletions(state, session, pos, prefix); return []; }; this.getFunctionCompletions = function(state, session, pos, prefix) { var functions = Object.keys(functionMap); return functions.map(function(func){ return { caption: func, snippet: func + '($0)', meta: "php function", score: Number.MAX_VALUE, docHTML: functionMap[func][1] }; }); }; this.getVariableCompletions = function(state, session, pos, prefix) { var variables = Object.keys(variableMap); return variables.map(function(variable){ return { caption: variable, value: variable, meta: "php variable", score: Number.MAX_VALUE }; }); }; this.getArrayKeyCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var variable = line.match(/(\$[\w]*)\[["']([^'"]*)$/i)[1]; if (!variableMap[variable]) { return []; } var keys = []; if (variableMap[variable].type==='array' && variableMap[variable].value) keys = Object.keys(variableMap[variable].value); return keys.map(function(key) { return { caption: key, value: key, meta: "php array key", score: Number.MAX_VALUE }; }); }; }).call(PhpCompletions.prototype); exports.PhpCompletions = PhpCompletions; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var getWrapped = function(selection, selected, opening, closing) { var rowDiff = selection.end.row - selection.start.row; return { text: opening + selected + closing, selection: [ 0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1) ] }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '{', '}'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '(', ')'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '[', ']'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, quote, quote); } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string|escape/.test(token.type); var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssCompletions = require("./css_completions").CssCompletions; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "</" + element + ">", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { if (token.value == "/>") return; while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === "</") { return { text: "\n" + indent + "\n" + nextIndent, selection: [1, indent.length, 1, indent.length] }; } else { return { text: "\n" + indent }; } } } } }); }; oop.inherits(XmlBehaviour, Behaviour); exports.XmlBehaviour = XmlBehaviour; }); ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(defaultMode, subModes) { this.defaultMode = defaultMode; this.subModes = subModes; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.$getMode = function(state) { if (typeof state != "string") state = state[0]; for (var key in this.subModes) { if (state.indexOf(key) === 0) return this.subModes[key]; } return null; }; this.$tryMode = function(state, session, foldStyle, row) { var mode = this.$getMode(state); return (mode ? mode.getFoldWidget(session, foldStyle, row) : ""); }; this.getFoldWidget = function(session, foldStyle, row) { return ( this.$tryMode(session.getState(row-1), session, foldStyle, row) || this.$tryMode(session.getState(row), session, foldStyle, row) || this.defaultMode.getFoldWidget(session, foldStyle, row) ); }; this.getFoldWidgetRange = function(session, foldStyle, row) { var mode = this.$getMode(session.getState(row-1)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.$getMode(session.getState(row)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.defaultMode; return mode.getFoldWidgetRange(session, foldStyle, row); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var lang = require("../../lib/lang"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) { BaseFoldMode.call(this); this.voidElements = voidElements || {}; this.optionalEndTags = oop.mixin({}, this.voidElements); if (optionalEndTags) oop.mixin(this.optionalEndTags, optionalEndTags); }; oop.inherits(FoldMode, BaseFoldMode); var Tag = function() { this.tagName = ""; this.closing = false; this.selfClosing = false; this.start = {row: 0, column: 0}; this.end = {row: 0, column: 0}; }; function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; if (firstTag.start.row == firstTag.end.row) start.column = firstTag.end.column; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; if (tag.start.row == tag.end.row && tag.start.column < tag.end.column) tag.start.column = tag.end.column; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": {"manifest": 1}, "head": {}, "title": {}, "base": {"href": 1, "target": 1}, "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1}, "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1}, "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1}, "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1}, "noscript": {"href": 1}, "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1}, "section": {}, "nav": {}, "article": {"pubdate": 1}, "aside": {}, "h1": {}, "h2": {}, "h3": {}, "h4": {}, "h5": {}, "h6": {}, "header": {}, "footer": {}, "address": {}, "main": {}, "p": {}, "hr": {}, "pre": {}, "blockquote": {"cite": 1}, "ol": {"start": 1, "reversed": 1}, "ul": {}, "li": {"value": 1}, "dl": {}, "dt": {}, "dd": {}, "figure": {}, "figcaption": {}, "div": {}, "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1}, "em": {}, "strong": {}, "small": {}, "s": {}, "cite": {}, "q": {"cite": 1}, "dfn": {}, "abbr": {}, "data": {}, "time": {"datetime": 1}, "code": {}, "var": {}, "samp": {}, "kbd": {}, "sub": {}, "sup": {}, "i": {}, "b": {}, "u": {}, "mark": {}, "ruby": {}, "rt": {}, "rp": {}, "bdi": {}, "bdo": {}, "span": {}, "br": {}, "wbr": {}, "ins": {"cite": 1, "datetime": 1}, "del": {"cite": 1, "datetime": 1}, "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1}, "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}}, "embed": {"src": 1, "height": 1, "width": 1, "type": 1}, "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1}, "param": {"name": 1, "value": 1}, "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}}, "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }}, "source": {"src": 1, "type": 1, "media": 1}, "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1}, "canvas": {"width": 1, "height": 1}, "map": {"name": 1}, "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1}, "svg": {}, "math": {}, "table": {"summary": 1}, "caption": {}, "colgroup": {"span": 1}, "col": {"span": 1}, "tbody": {}, "thead": {}, "tfoot": {}, "tr": {}, "td": {"headers": 1, "rowspan": 1, "colspan": 1}, "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1}, "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}}, "fieldset": {"disabled": 1, "form": 1, "name": 1}, "legend": {}, "label": {"form": 1, "for": 1}, "input": { "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1}, "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "name": 1, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1}, "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}}, "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}}, "datalist": {}, "optgroup": {"disabled": 1, "label": 1}, "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1}, "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}}, "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1}, "output": {"for": 1, "form": 1, "name": 1}, "progress": {"value": 1, "max": 1}, "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1}, "details": {"open": 1}, "summary": {}, "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1}, "menu": {"type": 1, "label": 1}, "dialog": {"open": 1} }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } function findAttributeName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "attribute-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompletions(state, session, pos, prefix); if (is(token, "attribute-value")) return this.getAttributeValueCompletions(state, session, pos, prefix); var line = session.getLine(pos.row).substr(0, pos.column); if (/&[A-z]*$/i.test(line)) return this.getHTMLEntityCompletions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(Object.keys(attributeMap[tagName])); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; this.getAttributeValueCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); var attributeName = findAttributeName(session, pos); if (!tagName) return []; var values = []; if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") { values = Object.keys(attributeMap[tagName][attributeName]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "attribute value", score: Number.MAX_VALUE }; }); }; this.getHTMLEntityCompletions = function(state, session, pos, prefix) { var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;']; return values.map(function(value){ return { caption: value, snippet: value, meta: "html entity", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: "<!--", end: "-->"}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/php",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/php_highlight_rules","ace/mode/php_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/php_completions","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle","ace/unicode","ace/mode/html","ace/mode/javascript","ace/mode/css"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var PhpHighlightRules = require("./php_highlight_rules").PhpHighlightRules; var PhpLangHighlightRules = require("./php_highlight_rules").PhpLangHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var PhpCompletions = require("./php_completions").PhpCompletions; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var unicode = require("../unicode"); var HtmlMode = require("./html").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var PhpMode = function(opts) { this.HighlightRules = PhpLangHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.$completer = new PhpCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(PhpMode, TextMode); (function() { this.tokenRe = new RegExp("^[" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\_]+", "g" ); this.nonTokenRe = new RegExp("^(?:[^" + unicode.packages.L + unicode.packages.Mn + unicode.packages.Mc + unicode.packages.Nd + unicode.packages.Pc + "\_]|\s])+", "g" ); this.lineCommentStart = ["//", "#"]; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[\:]\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState != "doc-start") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.$id = "ace/mode/php-inline"; }).call(PhpMode.prototype); var Mode = function(opts) { if (opts && opts.inline) { var mode = new PhpMode(); mode.createWorker = this.createWorker; mode.inlinePhp = true; return mode; } HtmlMode.call(this); this.HighlightRules = PhpHighlightRules; this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode, "php-": PhpMode }); this.foldingRules.subModes["php-"] = new CStyleFoldMode(); }; oop.inherits(Mode, HtmlMode); (function() { this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/php_worker", "PhpWorker"); worker.attachToDocument(session.getDocument()); if (this.inlinePhp) worker.call("setOptions", [{inline: true}]); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/php"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-plain_text.js ================================================ ace.define("ace/mode/plain_text",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/text_highlight_rules","ace/mode/behaviour"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var Behaviour = require("./behaviour").Behaviour; var Mode = function() { this.HighlightRules = TextHighlightRules; this.$behaviour = new Behaviour(); }; oop.inherits(Mode, TextMode); (function() { this.type = "text"; this.getNextLineIndent = function(state, line, tab) { return ''; }; this.$id = "ace/mode/plain_text"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-sass.js ================================================ ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ScssHighlightRules = function() { var properties = lang.arrayToMap( (function () { var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|"); var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + "background-size|binding|border-bottom-colors|border-left-colors|" + "border-right-colors|border-top-colors|border-end|border-end-color|" + "border-end-style|border-end-width|border-image|border-start|" + "border-start-color|border-start-style|border-start-width|box-align|" + "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + "column-rule-width|column-rule-style|column-rule-color|float-edge|" + "font-feature-settings|font-language-override|force-broken-image-icon|" + "image-region|margin-end|margin-start|opacity|outline|outline-color|" + "outline-offset|outline-radius|outline-radius-bottomleft|" + "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + "tab-size|text-blink|text-decoration-color|text-decoration-line|" + "text-decoration-style|transform|transform-origin|transition|" + "transition-delay|transition-duration|transition-property|" + "transition-timing-function|user-focus|user-input|user-modify|user-select|" + "window-shadow|border-radius").split("|"); var properties = ("azimuth|background-attachment|background-color|background-image|" + "background-position|background-repeat|background|border-bottom-color|" + "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" + "border-color|border-left-color|border-left-style|border-left-width|" + "border-left|border-right-color|border-right-style|border-right-width|" + "border-right|border-spacing|border-style|border-top-color|" + "border-top-style|border-top-width|border-top|border-width|border|bottom|" + "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" + "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" + "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" + "font-stretch|font-style|font-variant|font-weight|font|height|left|" + "letter-spacing|line-height|list-style-image|list-style-position|" + "list-style-type|list-style|margin-bottom|margin-left|margin-right|" + "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" + "min-width|opacity|orphans|outline-color|" + "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" + "padding-left|padding-right|padding-top|padding|page-break-after|" + "page-break-before|page-break-inside|page|pause-after|pause-before|" + "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" + "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" + "stress|table-layout|text-align|text-decoration|text-indent|" + "text-shadow|text-transform|top|unicode-bidi|vertical-align|" + "visibility|voice-family|volume|white-space|widows|width|word-spacing|" + "z-index").split("|"); var ret = []; for (var i=0, ln=browserPrefix.length; i<ln; i++) { Array.prototype.push.apply( ret, (( browserPrefix[i] + prefixProperties.join("|" + browserPrefix[i]) ).split("|")) ); } Array.prototype.push.apply(ret, prefixProperties); Array.prototype.push.apply(ret, properties); return ret; })() ); var functions = lang.arrayToMap( ("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|" + "alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|" + "floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|" + "nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|" + "scale_color|transparentize|type_of|unit|unitless|unqoute").split("|") ); var constants = lang.arrayToMap( ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" + "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" + "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" + "decimal-leading-zero|decimal|default|disabled|disc|" + "distribute-all-lines|distribute-letter|distribute-space|" + "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" + "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" + "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" + "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" + "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" + "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" + "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" + "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" + "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" + "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" + "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" + "solid|square|static|strict|super|sw-resize|table-footer-group|" + "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" + "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" + "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" + "zero").split("|") ); var colors = lang.arrayToMap( ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" + "purple|red|silver|teal|white|yellow").split("|") ); var keywords = lang.arrayToMap( ("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare").split("|") ) var tags = lang.arrayToMap( ("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|" + "big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|" + "command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|" + "figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|" + "header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|" + "link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|" + "option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|" + "small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|" + "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|") ); var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)" }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : "constant.numeric", regex : numRe }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : function(value) { if (properties.hasOwnProperty(value.toLowerCase())) return "support.type"; if (keywords.hasOwnProperty(value)) return "keyword"; else if (constants.hasOwnProperty(value)) return "constant.language"; else if (functions.hasOwnProperty(value)) return "support.function"; else if (colors.hasOwnProperty(value.toLowerCase())) return "support.constant.color"; else if (tags.hasOwnProperty(value.toLowerCase())) return "variable.language"; else return "text"; }, regex : "\\-?[@a-z_][@a-z0-9_\\-]*" }, { token : "variable", regex : "[a-z_\\-$][a-z0-9_\\-$]*\\b" }, { token: "variable.language", regex: "#[a-z0-9-_]+" }, { token: "variable.language", regex: "\\.[a-z0-9-_]+" }, { token: "variable.language", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { token : "keyword.operator", regex : "<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; }; oop.inherits(ScssHighlightRules, TextHighlightRules); exports.ScssHighlightRules = ScssHighlightRules; }); ace.define("ace/mode/sass_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/scss_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules; var SassHighlightRules = function() { ScssHighlightRules.call(this); var start = this.$rules.start; if (start[1].token == "comment") { start.splice(1, 1, { onMatch: function(value, currentState, stack) { stack.unshift(this.next, -1, value.length - 2, currentState); return "comment"; }, regex: /^\s*\/\*/, next: "comment" }, { token: "error.invalid", regex: "/\\*|[{;}]" }, { token: "support.type", regex: /^\s*:[\w\-]+\s/ }); this.$rules.comment = [ {regex: /^\s*/, onMatch: function(value, currentState, stack) { if (stack[1] === -1) stack[1] = Math.max(stack[2], value.length - 1); if (value.length <= stack[1]) {stack.shift();stack.shift();stack.shift(); this.next = stack.shift(); return "text"; } else { this.next = ""; return "comment"; } }, next: "start"}, {defaultToken: "comment"} ] } }; oop.inherits(SassHighlightRules, ScssHighlightRules); exports.SassHighlightRules = SassHighlightRules; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/sass",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/sass_highlight_rules","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var SassHighlightRules = require("./sass_highlight_rules").SassHighlightRules; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = SassHighlightRules; this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.$id = "ace/mode/sass"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-scss.js ================================================ ace.define("ace/mode/scss_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var ScssHighlightRules = function() { var properties = lang.arrayToMap( (function () { var browserPrefix = ("-webkit-|-moz-|-o-|-ms-|-svg-|-pie-|-khtml-").split("|"); var prefixProperties = ("appearance|background-clip|background-inline-policy|background-origin|" + "background-size|binding|border-bottom-colors|border-left-colors|" + "border-right-colors|border-top-colors|border-end|border-end-color|" + "border-end-style|border-end-width|border-image|border-start|" + "border-start-color|border-start-style|border-start-width|box-align|" + "box-direction|box-flex|box-flexgroup|box-ordinal-group|box-orient|" + "box-pack|box-sizing|column-count|column-gap|column-width|column-rule|" + "column-rule-width|column-rule-style|column-rule-color|float-edge|" + "font-feature-settings|font-language-override|force-broken-image-icon|" + "image-region|margin-end|margin-start|opacity|outline|outline-color|" + "outline-offset|outline-radius|outline-radius-bottomleft|" + "outline-radius-bottomright|outline-radius-topleft|outline-radius-topright|" + "outline-style|outline-width|padding-end|padding-start|stack-sizing|" + "tab-size|text-blink|text-decoration-color|text-decoration-line|" + "text-decoration-style|transform|transform-origin|transition|" + "transition-delay|transition-duration|transition-property|" + "transition-timing-function|user-focus|user-input|user-modify|user-select|" + "window-shadow|border-radius").split("|"); var properties = ("azimuth|background-attachment|background-color|background-image|" + "background-position|background-repeat|background|border-bottom-color|" + "border-bottom-style|border-bottom-width|border-bottom|border-collapse|" + "border-color|border-left-color|border-left-style|border-left-width|" + "border-left|border-right-color|border-right-style|border-right-width|" + "border-right|border-spacing|border-style|border-top-color|" + "border-top-style|border-top-width|border-top|border-width|border|bottom|" + "box-shadow|box-sizing|caption-side|clear|clip|color|content|counter-increment|" + "counter-reset|cue-after|cue-before|cue|cursor|direction|display|" + "elevation|empty-cells|float|font-family|font-size-adjust|font-size|" + "font-stretch|font-style|font-variant|font-weight|font|height|left|" + "letter-spacing|line-height|list-style-image|list-style-position|" + "list-style-type|list-style|margin-bottom|margin-left|margin-right|" + "margin-top|marker-offset|margin|marks|max-height|max-width|min-height|" + "min-width|opacity|orphans|outline-color|" + "outline-style|outline-width|outline|overflow|overflow-x|overflow-y|padding-bottom|" + "padding-left|padding-right|padding-top|padding|page-break-after|" + "page-break-before|page-break-inside|page|pause-after|pause-before|" + "pause|pitch-range|pitch|play-during|position|quotes|richness|right|" + "size|speak-header|speak-numeral|speak-punctuation|speech-rate|speak|" + "stress|table-layout|text-align|text-decoration|text-indent|" + "text-shadow|text-transform|top|unicode-bidi|vertical-align|" + "visibility|voice-family|volume|white-space|widows|width|word-spacing|" + "z-index").split("|"); var ret = []; for (var i=0, ln=browserPrefix.length; i<ln; i++) { Array.prototype.push.apply( ret, (( browserPrefix[i] + prefixProperties.join("|" + browserPrefix[i]) ).split("|")) ); } Array.prototype.push.apply(ret, prefixProperties); Array.prototype.push.apply(ret, properties); return ret; })() ); var functions = lang.arrayToMap( ("hsl|hsla|rgb|rgba|url|attr|counter|counters|abs|adjust_color|adjust_hue|" + "alpha|join|blue|ceil|change_color|comparable|complement|darken|desaturate|" + "floor|grayscale|green|hue|if|invert|join|length|lighten|lightness|mix|" + "nth|opacify|opacity|percentage|quote|red|round|saturate|saturation|" + "scale_color|transparentize|type_of|unit|unitless|unqoute").split("|") ); var constants = lang.arrayToMap( ("absolute|all-scroll|always|armenian|auto|baseline|below|bidi-override|" + "block|bold|bolder|border-box|both|bottom|break-all|break-word|capitalize|center|" + "char|circle|cjk-ideographic|col-resize|collapse|content-box|crosshair|dashed|" + "decimal-leading-zero|decimal|default|disabled|disc|" + "distribute-all-lines|distribute-letter|distribute-space|" + "distribute|dotted|double|e-resize|ellipsis|fixed|georgian|groove|" + "hand|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|" + "ideograph-alpha|ideograph-numeric|ideograph-parenthesis|" + "ideograph-space|inactive|inherit|inline-block|inline|inset|inside|" + "inter-ideograph|inter-word|italic|justify|katakana-iroha|katakana|" + "keep-all|left|lighter|line-edge|line-through|line|list-item|loose|" + "lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|" + "medium|middle|move|n-resize|ne-resize|newspaper|no-drop|no-repeat|" + "nw-resize|none|normal|not-allowed|nowrap|oblique|outset|outside|" + "overline|pointer|progress|relative|repeat-x|repeat-y|repeat|right|" + "ridge|row-resize|rtl|s-resize|scroll|se-resize|separate|small-caps|" + "solid|square|static|strict|super|sw-resize|table-footer-group|" + "table-header-group|tb-rl|text-bottom|text-top|text|thick|thin|top|" + "transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|" + "vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|" + "zero").split("|") ); var colors = lang.arrayToMap( ("aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|" + "purple|red|silver|teal|white|yellow").split("|") ); var keywords = lang.arrayToMap( ("@mixin|@extend|@include|@import|@media|@debug|@warn|@if|@for|@each|@while|@else|@font-face|@-webkit-keyframes|if|and|!default|module|def|end|declare").split("|") ) var tags = lang.arrayToMap( ("a|abbr|acronym|address|applet|area|article|aside|audio|b|base|basefont|bdo|" + "big|blockquote|body|br|button|canvas|caption|center|cite|code|col|colgroup|" + "command|datalist|dd|del|details|dfn|dir|div|dl|dt|em|embed|fieldset|" + "figcaption|figure|font|footer|form|frame|frameset|h1|h2|h3|h4|h5|h6|head|" + "header|hgroup|hr|html|i|iframe|img|input|ins|keygen|kbd|label|legend|li|" + "link|map|mark|menu|meta|meter|nav|noframes|noscript|object|ol|optgroup|" + "option|output|p|param|pre|progress|q|rp|rt|ruby|s|samp|script|section|select|" + "small|source|span|strike|strong|style|sub|summary|sup|table|tbody|td|" + "textarea|tfoot|th|thead|time|title|tr|tt|u|ul|var|video|wbr|xmp").split("|") ); var numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; this.$rules = { "start" : [ { token : "comment", regex : "\\/\\/.*$" }, { token : "comment", // multi line comment regex : "\\/\\*", next : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '["].*\\\\$', next : "qqstring" }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "string", // multi line string start regex : "['].*\\\\$", next : "qstring" }, { token : "constant.numeric", regex : numRe + "(?:em|ex|px|cm|mm|in|pt|pc|deg|rad|grad|ms|s|hz|khz|%)" }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : "constant.numeric", regex : numRe }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : function(value) { if (properties.hasOwnProperty(value.toLowerCase())) return "support.type"; if (keywords.hasOwnProperty(value)) return "keyword"; else if (constants.hasOwnProperty(value)) return "constant.language"; else if (functions.hasOwnProperty(value)) return "support.function"; else if (colors.hasOwnProperty(value.toLowerCase())) return "support.constant.color"; else if (tags.hasOwnProperty(value.toLowerCase())) return "variable.language"; else return "text"; }, regex : "\\-?[@a-z_][@a-z0-9_\\-]*" }, { token : "variable", regex : "[a-z_\\-$][a-z0-9_\\-$]*\\b" }, { token: "variable.language", regex: "#[a-z0-9-_]+" }, { token: "variable.language", regex: "\\.[a-z0-9-_]+" }, { token: "variable.language", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { token : "keyword.operator", regex : "<|>|<=|>=|==|!=|-|%|#|\\+|\\$|\\+|\\*" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" }, { token : "text", regex : "\\s+" }, { caseInsensitive: true } ], "comment" : [ { token : "comment", // closing comment regex : ".*?\\*\\/", next : "start" }, { token : "comment", // comment spanning whole line regex : ".+" } ], "qqstring" : [ { token : "string", regex : '(?:(?:\\\\.)|(?:[^"\\\\]))*?"', next : "start" }, { token : "string", regex : '.+' } ], "qstring" : [ { token : "string", regex : "(?:(?:\\\\.)|(?:[^'\\\\]))*?'", next : "start" }, { token : "string", regex : '.+' } ] }; }; oop.inherits(ScssHighlightRules, TextHighlightRules); exports.ScssHighlightRules = ScssHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var getWrapped = function(selection, selected, opening, closing) { var rowDiff = selection.end.row - selection.start.row; return { text: opening + selected + closing, selection: [ 0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1) ] }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '{', '}'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '(', ')'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '[', ']'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, quote, quote); } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string|escape/.test(token.type); var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/scss",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/scss_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var ScssHighlightRules = require("./scss_highlight_rules").ScssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = ScssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/scss"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-twig.js ================================================ ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var DocCommentHighlightRules = function() { this.$rules = { "start" : [ { token : "comment.doc.tag", regex : "@[\\w\\d_]+" // TODO: fix email addresses }, DocCommentHighlightRules.getTagRule(), { defaultToken : "comment.doc", caseInsensitive: true }] }; }; oop.inherits(DocCommentHighlightRules, TextHighlightRules); DocCommentHighlightRules.getTagRule = function(start) { return { token : "comment.doc.tag.storage.type", regex : "\\b(?:TODO|FIXME|XXX|HACK)\\b" }; } DocCommentHighlightRules.getStartRule = function(start) { return { token : "comment.doc", // doc comment regex : "\\/\\*(?=\\*)", next : start }; }; DocCommentHighlightRules.getEndRule = function (start) { return { token : "comment.doc", // closing comment regex : "\\*\\/", next : start }; }; exports.DocCommentHighlightRules = DocCommentHighlightRules; }); ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var DocCommentHighlightRules = require("./doc_comment_highlight_rules").DocCommentHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var identifierRe = "[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*"; var JavaScriptHighlightRules = function(options) { var keywordMapper = this.createKeywordMapper({ "variable.language": "Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|" + // Constructors "Namespace|QName|XML|XMLList|" + // E4X "ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|" + "Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|" + "Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|" + // Errors "SyntaxError|TypeError|URIError|" + "decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|" + // Non-constructor functions "isNaN|parseFloat|parseInt|" + "JSON|Math|" + // Other "this|arguments|prototype|window|document" , // Pseudo "keyword": "const|yield|import|get|set|async|await|" + "break|case|catch|continue|default|delete|do|else|finally|for|function|" + "if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|" + "__parent__|__count__|escape|unescape|with|__proto__|" + "class|enum|extends|super|export|implements|private|public|interface|package|protected|static", "storage.type": "const|let|var|function", "constant.language": "null|Infinity|NaN|undefined", "support.function": "alert", "constant.language.boolean": "true|false" }, "identifier"); var kwBeforeRe = "case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void"; var escapedRe = "\\\\(?:x[0-9a-fA-F]{2}|" + // hex "u[0-9a-fA-F]{4}|" + // unicode "u{[0-9a-fA-F]{1,6}}|" + // es6 unicode "[0-2][0-7]{0,2}|" + // oct "3[0-7][0-7]?|" + // oct "[4-7][0-7]?|" + //oct ".)"; this.$rules = { "no_regex" : [ DocCommentHighlightRules.getStartRule("doc-start"), comments("no_regex"), { token : "string", regex : "'(?=.)", next : "qstring" }, { token : "string", regex : '"(?=.)', next : "qqstring" }, { token : "constant.numeric", // hex regex : /0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/ }, { token : "constant.numeric", // float regex : /[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/ }, { token : [ "storage.type", "punctuation.operator", "support.function", "punctuation.operator", "entity.name.function", "text","keyword.operator" ], regex : "(" + identifierRe + ")(\\.)(prototype)(\\.)(" + identifierRe +")(\\s*)(=)", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()", next: "function_arguments" }, { token : [ "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(function)(\\s+)(" + identifierRe + ")(\\s*)(\\()", next: "function_arguments" }, { token : [ "entity.name.function", "text", "punctuation.operator", "text", "storage.type", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\s*)(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : [ "text", "text", "storage.type", "text", "paren.lparen" ], regex : "(:)(\\s*)(function)(\\s*)(\\()", next: "function_arguments" }, { token : "keyword", regex : "(?:" + kwBeforeRe + ")\\b", next : "start" }, { token : ["support.constant"], regex : /that\b/ }, { token : ["storage.type", "punctuation.operator", "support.function.firebug"], regex : /(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/ }, { token : keywordMapper, regex : identifierRe }, { token : "punctuation.operator", regex : /[.](?![.])/, next : "property" }, { token : "keyword.operator", regex : /--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, next : "start" }, { token : "punctuation.operator", regex : /[?:,;.]/, next : "start" }, { token : "paren.lparen", regex : /[\[({]/, next : "start" }, { token : "paren.rparen", regex : /[\])}]/ }, { token: "comment", regex: /^#!.*$/ } ], property: [{ token : "text", regex : "\\s+" }, { token : [ "storage.type", "punctuation.operator", "entity.name.function", "text", "keyword.operator", "text", "storage.type", "text", "entity.name.function", "text", "paren.lparen" ], regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", next: "function_arguments" }, { token : "punctuation.operator", regex : /[.](?![.])/ }, { token : "support.function", regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ }, { token : "support.function.dom", regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ }, { token : "support.constant", regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ }, { token : "identifier", regex : identifierRe }, { regex: "", token: "empty", next: "no_regex" } ], "start": [ DocCommentHighlightRules.getStartRule("doc-start"), comments("start"), { token: "string.regexp", regex: "\\/", next: "regex" }, { token : "text", regex : "\\s+|^$", next : "start" }, { token: "empty", regex: "", next: "no_regex" } ], "regex": [ { token: "regexp.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "string.regexp", regex: "/[sxngimy]*", next: "no_regex" }, { token : "invalid", regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ }, { token : "constant.language.escape", regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ }, { token : "constant.language.delimiter", regex: /\|/ }, { token: "constant.language.escape", regex: /\[\^?/, next: "regex_character_class" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp" } ], "regex_character_class": [ { token: "regexp.charclass.keyword.operator", regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" }, { token: "constant.language.escape", regex: "]", next: "regex" }, { token: "constant.language.escape", regex: "-" }, { token: "empty", regex: "$", next: "no_regex" }, { defaultToken: "string.regexp.charachterclass" } ], "function_arguments": [ { token: "variable.parameter", regex: identifierRe }, { token: "punctuation.operator", regex: "[, ]+" }, { token: "punctuation.operator", regex: "$" }, { token: "empty", regex: "", next: "no_regex" } ], "qqstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qqstring" }, { token : "string", regex : '"|$', next : "no_regex" }, { defaultToken: "string" } ], "qstring" : [ { token : "constant.language.escape", regex : escapedRe }, { token : "string", regex : "\\\\$", next : "qstring" }, { token : "string", regex : "'|$", next : "no_regex" }, { defaultToken: "string" } ] }; if (!options || !options.noES6) { this.$rules.no_regex.unshift({ regex: "[{}]", onMatch: function(val, state, stack) { this.next = val == "{" ? this.nextState : ""; if (val == "{" && stack.length) { stack.unshift("start", state); } else if (val == "}" && stack.length) { stack.shift(); this.next = stack.shift(); if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) return "paren.quasi.end"; } return val == "{" ? "paren.lparen" : "paren.rparen"; }, nextState: "start" }, { token : "string.quasi.start", regex : /`/, push : [{ token : "constant.language.escape", regex : escapedRe }, { token : "paren.quasi.start", regex : /\${/, push : "start" }, { token : "string.quasi.end", regex : /`/, next : "pop" }, { defaultToken: "string.quasi" }] }); if (!options || !options.noJSX) JSX.call(this); } this.embedRules(DocCommentHighlightRules, "doc-", [ DocCommentHighlightRules.getEndRule("no_regex") ]); this.normalizeRules(); }; oop.inherits(JavaScriptHighlightRules, TextHighlightRules); function JSX() { var tagRegex = identifierRe.replace("\\d", "\\d\\-"); var jsxTag = { onMatch : function(val, state, stack) { var offset = val.charAt(1) == "/" ? 2 : 1; if (offset == 1) { if (state != this.nextState) stack.unshift(this.next, this.nextState, 0); else stack.unshift(this.next); stack[2]++; } else if (offset == 2) { if (state == this.nextState) { stack[1]--; if (!stack[1] || stack[1] < 0) { stack.shift(); stack.shift(); } } } return [{ type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", value: val.slice(0, offset) }, { type: "meta.tag.tag-name.xml", value: val.substr(offset) }]; }, regex : "</?" + tagRegex + "", next: "jsxAttributes", nextState: "jsx" }; this.$rules.start.unshift(jsxTag); var jsxJsRule = { regex: "{", token: "paren.quasi.start", push: "start" }; this.$rules.jsx = [ jsxJsRule, jsxTag, {include : "reference"}, {defaultToken: "string"} ]; this.$rules.jsxAttributes = [{ token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", onMatch : function(value, currentState, stack) { if (currentState == stack[0]) stack.shift(); if (value.length == 2) { if (stack[0] == this.nextState) stack[1]--; if (!stack[1] || stack[1] < 0) { stack.splice(0, 2); } } this.next = stack[0] || "start"; return [{type: this.token, value: value}]; }, nextState: "jsx" }, jsxJsRule, comments("jsxAttributes"), { token : "entity.other.attribute-name.xml", regex : tagRegex }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { token : "text.tag-whitespace.xml", regex : "\\s+" }, { token : "string.attribute-value.xml", regex : "'", stateName : "jsx_attr_q", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', stateName : "jsx_attr_qq", push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "reference"}, {defaultToken : "string.attribute-value.xml"} ] }, jsxTag ]; this.$rules.reference = [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }]; } function comments(next) { return [ { token : "comment", // multi line comment regex : /\/\*/, next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "\\*\\/", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] }, { token : "comment", regex : "\\/\\/", next: [ DocCommentHighlightRules.getTagRule(), {token : "comment", regex : "$|^", next : next || "pop"}, {defaultToken : "comment", caseInsensitive: true} ] } ]; } exports.JavaScriptHighlightRules = JavaScriptHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); var SAFE_INSERT_IN_TOKENS = ["text", "paren.rparen", "punctuation.operator"]; var SAFE_INSERT_BEFORE_TOKENS = ["text", "paren.rparen", "punctuation.operator", "comment"]; var context; var contextCache = {}; var initContext = function(editor) { var id = -1; if (editor.multiSelect) { id = editor.selection.index; if (contextCache.rangeCount != editor.multiSelect.rangeCount) contextCache = {rangeCount: editor.multiSelect.rangeCount}; } if (contextCache[id]) return context = contextCache[id]; context = contextCache[id] = { autoInsertedBrackets: 0, autoInsertedRow: -1, autoInsertedLineEnd: "", maybeInsertedBrackets: 0, maybeInsertedRow: -1, maybeInsertedLineStart: "", maybeInsertedLineEnd: "" }; }; var getWrapped = function(selection, selected, opening, closing) { var rowDiff = selection.end.row - selection.start.row; return { text: opening + selected + closing, selection: [ 0, selection.start.column + 1, rowDiff, selection.end.column + (rowDiff ? 0 : 1) ] }; }; var CstyleBehaviour = function() { this.add("braces", "insertion", function(state, action, editor, session, text) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (text == '{') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '{', '}'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { CstyleBehaviour.recordAutoInsert(editor, session, "}"); return { text: '{}', selection: [1, 1] }; } else { CstyleBehaviour.recordMaybeInsert(editor, session, "{"); return { text: '{', selection: [1, 1] }; } } } else if (text == '}') { initContext(editor); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == '}') { var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } else if (text == "\n" || text == "\r\n") { initContext(editor); var closing = ""; if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { closing = lang.stringRepeat("}", context.maybeInsertedBrackets); CstyleBehaviour.clearMaybeInsertedClosing(); } var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === '}') { var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); if (!openBracePos) return null; var next_indent = this.$getIndent(session.getLine(openBracePos.row)); } else if (closing) { var next_indent = this.$getIndent(line); } else { CstyleBehaviour.clearMaybeInsertedClosing(); return; } var indent = next_indent + session.getTabString(); return { text: '\n' + indent + '\n' + next_indent + closing, selection: [1, indent.length, 1, indent.length] }; } else { CstyleBehaviour.clearMaybeInsertedClosing(); } }); this.add("braces", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '{') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar == '}') { range.end.column++; return range; } else { context.maybeInsertedBrackets--; } } }); this.add("parens", "insertion", function(state, action, editor, session, text) { if (text == '(') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '(', ')'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, ")"); return { text: '()', selection: [1, 1] }; } } else if (text == ')') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ')') { var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("parens", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '(') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ')') { range.end.column++; return range; } } }); this.add("brackets", "insertion", function(state, action, editor, session, text) { if (text == '[') { initContext(editor); var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, '[', ']'); } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { CstyleBehaviour.recordAutoInsert(editor, session, "]"); return { text: '[]', selection: [1, 1] }; } } else if (text == ']') { initContext(editor); var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar == ']') { var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { CstyleBehaviour.popAutoInsertedClosing(); return { text: '', selection: [1, 1] }; } } } }); this.add("brackets", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected == '[') { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == ']') { range.end.column++; return range; } } }); this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { if (text == '"' || text == "'") { initContext(editor); var quote = text; var selection = editor.getSelectionRange(); var selected = session.doc.getTextRange(selection); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return getWrapped(selection, selected, quote, quote); } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); var rightChar = line.substring(cursor.column, cursor.column + 1); var token = session.getTokenAt(cursor.row, cursor.column); var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); if (leftChar == "\\" && token && /escape/.test(token.type)) return null; var stringBefore = token && /string|escape/.test(token.type); var stringAfter = !rightToken || /string|escape/.test(rightToken.type); var pair; if (rightChar == quote) { pair = stringBefore !== stringAfter; } else { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar); wordRe.lastIndex = 0; var isWordAfter = wordRe.test(leftChar); if (isWordBefore || isWordAfter) return null; // before or after alphanumeric if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) return null; // there is rightChar and it isn't closing pair = true; } return { text: pair ? quote + quote : "", selection: [1,1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { initContext(editor); var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); }; CstyleBehaviour.isSaneInsertion = function(editor, session) { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) return false; } iterator.stepForward(); return iterator.getCurrentTokenRow() !== cursor.row || this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); }; CstyleBehaviour.$matchTokenType = function(token, types) { return types.indexOf(token.type || token) > -1; }; CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) context.autoInsertedBrackets = 0; context.autoInsertedRow = cursor.row; context.autoInsertedLineEnd = bracket + line.substr(cursor.column); context.autoInsertedBrackets++; }; CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); if (!this.isMaybeInsertedClosing(cursor, line)) context.maybeInsertedBrackets = 0; context.maybeInsertedRow = cursor.row; context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; context.maybeInsertedLineEnd = line.substr(cursor.column); context.maybeInsertedBrackets++; }; CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { return context.autoInsertedBrackets > 0 && cursor.row === context.autoInsertedRow && bracket === context.autoInsertedLineEnd[0] && line.substr(cursor.column) === context.autoInsertedLineEnd; }; CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { return context.maybeInsertedBrackets > 0 && cursor.row === context.maybeInsertedRow && line.substr(cursor.column) === context.maybeInsertedLineEnd && line.substr(0, cursor.column) == context.maybeInsertedLineStart; }; CstyleBehaviour.popAutoInsertedClosing = function() { context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); context.autoInsertedBrackets--; }; CstyleBehaviour.clearMaybeInsertedClosing = function() { if (context) { context.maybeInsertedBrackets = 0; context.maybeInsertedRow = -1; } }; oop.inherits(CstyleBehaviour, Behaviour); exports.CstyleBehaviour = CstyleBehaviour; }); ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(commentRegex) { if (commentRegex) { this.foldingStartMarker = new RegExp( this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) ); this.foldingStopMarker = new RegExp( this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) ); } }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; this._getFoldWidgetBase = this.getFoldWidget; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); if (this.singleLineBlockCommentRe.test(line)) { if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) return ""; } var fw = this._getFoldWidgetBase(session, foldStyle, row); if (!fw && this.startRegionRe.test(line)) return "start"; // lineCommentRegionStart return fw; }; this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { var line = session.getLine(row); if (this.startRegionRe.test(line)) return this.getCommentRegionBlock(session, line, row); var match = line.match(this.foldingStartMarker); if (match) { var i = match.index; if (match[1]) return this.openingBracketBlock(session, match[1], row, i); var range = session.getCommentFoldRange(row, i + match[0].length, 1); if (range && !range.isMultiLine()) { if (forceMultiline) { range = this.getSectionRange(session, row); } else if (foldStyle != "all") range = null; } return range; } if (foldStyle === "markbegin") return; var match = line.match(this.foldingStopMarker); if (match) { var i = match.index + match[0].length; if (match[1]) return this.closingBracketBlock(session, match[1], row, i); return session.getCommentFoldRange(row, i, -1); } }; this.getSectionRange = function(session, row) { var line = session.getLine(row); var startIndent = line.search(/\S/); var startRow = row; var startColumn = line.length; row = row + 1; var endRow = row; var maxRow = session.getLength(); while (++row < maxRow) { line = session.getLine(row); var indent = line.search(/\S/); if (indent === -1) continue; if (startIndent > indent) break; var subRange = this.getFoldWidgetRange(session, "all", row); if (subRange) { if (subRange.start.row <= startRow) { break; } else if (subRange.isMultiLine()) { row = subRange.end.row; } else if (startIndent == indent) { break; } } endRow = row; } return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); }; this.getCommentRegionBlock = function(session, line, row) { var startColumn = line.search(/\s*$/); var maxRow = session.getLength(); var startRow = row; var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; var depth = 1; while (++row < maxRow) { line = session.getLine(row); var m = re.exec(line); if (!m) continue; if (m[1]) depth--; else depth++; if (!depth) break; } var endRow = row; if (endRow > startRow) { return new Range(startRow, startColumn, endRow, line.length); } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Range = require("../range").Range; var WorkerClient = require("../worker/worker_client").WorkerClient; var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = JavaScriptHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CstyleBehaviour(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "//"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start" || state == "no_regex") { var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); if (match) { indent += tab; } } else if (state == "doc-start") { if (endState == "start" || endState == "no_regex") { return ""; } var match = line.match(/^\s*(\/?)\*/); if (match) { if (match[1]) { indent += " "; } indent += "* "; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(results) { session.setAnnotations(results.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/javascript"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/css_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var supportType = exports.supportType = "align-content|align-items|align-self|all|animation|animation-delay|animation-direction|animation-duration|animation-fill-mode|animation-iteration-count|animation-name|animation-play-state|animation-timing-function|backface-visibility|background|background-attachment|background-blend-mode|background-clip|background-color|background-image|background-origin|background-position|background-repeat|background-size|border|border-bottom|border-bottom-color|border-bottom-left-radius|border-bottom-right-radius|border-bottom-style|border-bottom-width|border-collapse|border-color|border-image|border-image-outset|border-image-repeat|border-image-slice|border-image-source|border-image-width|border-left|border-left-color|border-left-style|border-left-width|border-radius|border-right|border-right-color|border-right-style|border-right-width|border-spacing|border-style|border-top|border-top-color|border-top-left-radius|border-top-right-radius|border-top-style|border-top-width|border-width|bottom|box-shadow|box-sizing|caption-side|clear|clip|color|column-count|column-fill|column-gap|column-rule|column-rule-color|column-rule-style|column-rule-width|column-span|column-width|columns|content|counter-increment|counter-reset|cursor|direction|display|empty-cells|filter|flex|flex-basis|flex-direction|flex-flow|flex-grow|flex-shrink|flex-wrap|float|font|font-family|font-size|font-size-adjust|font-stretch|font-style|font-variant|font-weight|hanging-punctuation|height|justify-content|left|letter-spacing|line-height|list-style|list-style-image|list-style-position|list-style-type|margin|margin-bottom|margin-left|margin-right|margin-top|max-height|max-width|min-height|min-width|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|vertical-align|visibility|white-space|width|word-break|word-spacing|word-wrap|z-index"; var supportFunction = exports.supportFunction = "rgb|rgba|url|attr|counter|counters"; var supportConstant = exports.supportConstant = "absolute|after-edge|after|all-scroll|all|alphabetic|always|antialiased|armenian|auto|avoid-column|avoid-page|avoid|balance|baseline|before-edge|before|below|bidi-override|block-line-height|block|bold|bolder|border-box|both|bottom|box|break-all|break-word|capitalize|caps-height|caption|center|central|char|circle|cjk-ideographic|clone|close-quote|col-resize|collapse|column|consider-shifts|contain|content-box|cover|crosshair|cubic-bezier|dashed|decimal-leading-zero|decimal|default|disabled|disc|disregard-shifts|distribute-all-lines|distribute-letter|distribute-space|distribute|dotted|double|e-resize|ease-in|ease-in-out|ease-out|ease|ellipsis|end|exclude-ruby|fill|fixed|georgian|glyphs|grid-height|groove|hand|hanging|hebrew|help|hidden|hiragana-iroha|hiragana|horizontal|icon|ideograph-alpha|ideograph-numeric|ideograph-parenthesis|ideograph-space|ideographic|inactive|include-ruby|inherit|initial|inline-block|inline-box|inline-line-height|inline-table|inline|inset|inside|inter-ideograph|inter-word|invert|italic|justify|katakana-iroha|katakana|keep-all|last|left|lighter|line-edge|line-through|line|linear|list-item|local|loose|lower-alpha|lower-greek|lower-latin|lower-roman|lowercase|lr-tb|ltr|mathematical|max-height|max-size|medium|menu|message-box|middle|move|n-resize|ne-resize|newspaper|no-change|no-close-quote|no-drop|no-open-quote|no-repeat|none|normal|not-allowed|nowrap|nw-resize|oblique|open-quote|outset|outside|overline|padding-box|page|pointer|pre-line|pre-wrap|pre|preserve-3d|progress|relative|repeat-x|repeat-y|repeat|replaced|reset-size|ridge|right|round|row-resize|rtl|s-resize|scroll|se-resize|separate|slice|small-caps|small-caption|solid|space|square|start|static|status-bar|step-end|step-start|steps|stretch|strict|sub|super|sw-resize|table-caption|table-cell|table-column-group|table-column|table-footer-group|table-header-group|table-row-group|table-row|table|tb-rl|text-after-edge|text-before-edge|text-bottom|text-size|text-top|text|thick|thin|transparent|underline|upper-alpha|upper-latin|upper-roman|uppercase|use-script|vertical-ideographic|vertical-text|visible|w-resize|wait|whitespace|z-index|zero"; var supportConstantColor = exports.supportConstantColor = "aqua|black|blue|fuchsia|gray|green|lime|maroon|navy|olive|orange|purple|red|silver|teal|white|yellow"; var supportConstantFonts = exports.supportConstantFonts = "arial|century|comic|courier|cursive|fantasy|garamond|georgia|helvetica|impact|lucida|symbol|system|tahoma|times|trebuchet|utopia|verdana|webdings|sans-serif|serif|monospace"; var numRe = exports.numRe = "\\-?(?:(?:[0-9]+)|(?:[0-9]*\\.[0-9]+))"; var pseudoElements = exports.pseudoElements = "(\\:+)\\b(after|before|first-letter|first-line|moz-selection|selection)\\b"; var pseudoClasses = exports.pseudoClasses = "(:)\\b(active|checked|disabled|empty|enabled|first-child|first-of-type|focus|hover|indeterminate|invalid|last-child|last-of-type|link|not|nth-child|nth-last-child|nth-last-of-type|nth-of-type|only-child|only-of-type|required|root|target|valid|visited)\\b"; var CssHighlightRules = function() { var keywordMapper = this.createKeywordMapper({ "support.function": supportFunction, "support.constant": supportConstant, "support.type": supportType, "support.constant.color": supportConstantColor, "support.constant.fonts": supportConstantFonts }, "text", true); this.$rules = { "start" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "@.*?{", push: "media" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "media" : [{ token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token: "paren.lparen", regex: "\\{", push: "ruleset" }, { token: "string", regex: "\\}", next: "pop" }, { token: "keyword", regex: "#[a-z0-9-_]+" }, { token: "variable", regex: "\\.[a-z0-9-_]+" }, { token: "string", regex: ":[a-z0-9-_]+" }, { token: "constant", regex: "[a-z0-9-_]+" }, { caseInsensitive: true }], "comment" : [{ token : "comment", regex : "\\*\\/", next : "pop" }, { defaultToken : "comment" }], "ruleset" : [ { token : "paren.rparen", regex : "\\}", next: "pop" }, { token : "comment", // multi line comment regex : "\\/\\*", push : "comment" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // single line regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : ["constant.numeric", "keyword"], regex : "(" + numRe + ")(ch|cm|deg|em|ex|fr|gd|grad|Hz|in|kHz|mm|ms|pc|pt|px|rad|rem|s|turn|vh|vm|vw|%)" }, { token : "constant.numeric", regex : numRe }, { token : "constant.numeric", // hex6 color regex : "#[a-f0-9]{6}" }, { token : "constant.numeric", // hex3 color regex : "#[a-f0-9]{3}" }, { token : ["punctuation", "entity.other.attribute-name.pseudo-element.css"], regex : pseudoElements }, { token : ["punctuation", "entity.other.attribute-name.pseudo-class.css"], regex : pseudoClasses }, { token : ["support.function", "string", "support.function"], regex : "(url\\()(.*)(\\))" }, { token : keywordMapper, regex : "\\-?[a-zA-Z_][a-zA-Z0-9_\\-]*" }, { caseInsensitive: true }] }; this.normalizeRules(); }; oop.inherits(CssHighlightRules, TextHighlightRules); exports.CssHighlightRules = CssHighlightRules; }); ace.define("ace/mode/css_completions",["require","exports","module"], function(require, exports, module) { "use strict"; var propertyMap = { "background": {"#$0": 1}, "background-color": {"#$0": 1, "transparent": 1, "fixed": 1}, "background-image": {"url('/$0')": 1}, "background-repeat": {"repeat": 1, "repeat-x": 1, "repeat-y": 1, "no-repeat": 1, "inherit": 1}, "background-position": {"bottom":2, "center":2, "left":2, "right":2, "top":2, "inherit":2}, "background-attachment": {"scroll": 1, "fixed": 1}, "background-size": {"cover": 1, "contain": 1}, "background-clip": {"border-box": 1, "padding-box": 1, "content-box": 1}, "background-origin": {"border-box": 1, "padding-box": 1, "content-box": 1}, "border": {"solid $0": 1, "dashed $0": 1, "dotted $0": 1, "#$0": 1}, "border-color": {"#$0": 1}, "border-style": {"solid":2, "dashed":2, "dotted":2, "double":2, "groove":2, "hidden":2, "inherit":2, "inset":2, "none":2, "outset":2, "ridged":2}, "border-collapse": {"collapse": 1, "separate": 1}, "bottom": {"px": 1, "em": 1, "%": 1}, "clear": {"left": 1, "right": 1, "both": 1, "none": 1}, "color": {"#$0": 1, "rgb(#$00,0,0)": 1}, "cursor": {"default": 1, "pointer": 1, "move": 1, "text": 1, "wait": 1, "help": 1, "progress": 1, "n-resize": 1, "ne-resize": 1, "e-resize": 1, "se-resize": 1, "s-resize": 1, "sw-resize": 1, "w-resize": 1, "nw-resize": 1}, "display": {"none": 1, "block": 1, "inline": 1, "inline-block": 1, "table-cell": 1}, "empty-cells": {"show": 1, "hide": 1}, "float": {"left": 1, "right": 1, "none": 1}, "font-family": {"Arial":2,"Comic Sans MS":2,"Consolas":2,"Courier New":2,"Courier":2,"Georgia":2,"Monospace":2,"Sans-Serif":2, "Segoe UI":2,"Tahoma":2,"Times New Roman":2,"Trebuchet MS":2,"Verdana": 1}, "font-size": {"px": 1, "em": 1, "%": 1}, "font-weight": {"bold": 1, "normal": 1}, "font-style": {"italic": 1, "normal": 1}, "font-variant": {"normal": 1, "small-caps": 1}, "height": {"px": 1, "em": 1, "%": 1}, "left": {"px": 1, "em": 1, "%": 1}, "letter-spacing": {"normal": 1}, "line-height": {"normal": 1}, "list-style-type": {"none": 1, "disc": 1, "circle": 1, "square": 1, "decimal": 1, "decimal-leading-zero": 1, "lower-roman": 1, "upper-roman": 1, "lower-greek": 1, "lower-latin": 1, "upper-latin": 1, "georgian": 1, "lower-alpha": 1, "upper-alpha": 1}, "margin": {"px": 1, "em": 1, "%": 1}, "margin-right": {"px": 1, "em": 1, "%": 1}, "margin-left": {"px": 1, "em": 1, "%": 1}, "margin-top": {"px": 1, "em": 1, "%": 1}, "margin-bottom": {"px": 1, "em": 1, "%": 1}, "max-height": {"px": 1, "em": 1, "%": 1}, "max-width": {"px": 1, "em": 1, "%": 1}, "min-height": {"px": 1, "em": 1, "%": 1}, "min-width": {"px": 1, "em": 1, "%": 1}, "overflow": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-x": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "overflow-y": {"hidden": 1, "visible": 1, "auto": 1, "scroll": 1}, "padding": {"px": 1, "em": 1, "%": 1}, "padding-top": {"px": 1, "em": 1, "%": 1}, "padding-right": {"px": 1, "em": 1, "%": 1}, "padding-bottom": {"px": 1, "em": 1, "%": 1}, "padding-left": {"px": 1, "em": 1, "%": 1}, "page-break-after": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "page-break-before": {"auto": 1, "always": 1, "avoid": 1, "left": 1, "right": 1}, "position": {"absolute": 1, "relative": 1, "fixed": 1, "static": 1}, "right": {"px": 1, "em": 1, "%": 1}, "table-layout": {"fixed": 1, "auto": 1}, "text-decoration": {"none": 1, "underline": 1, "line-through": 1, "blink": 1}, "text-align": {"left": 1, "right": 1, "center": 1, "justify": 1}, "text-transform": {"capitalize": 1, "uppercase": 1, "lowercase": 1, "none": 1}, "top": {"px": 1, "em": 1, "%": 1}, "vertical-align": {"top": 1, "bottom": 1}, "visibility": {"hidden": 1, "visible": 1}, "white-space": {"nowrap": 1, "normal": 1, "pre": 1, "pre-line": 1, "pre-wrap": 1}, "width": {"px": 1, "em": 1, "%": 1}, "word-spacing": {"normal": 1}, "filter": {"alpha(opacity=$0100)": 1}, "text-shadow": {"$02px 2px 2px #777": 1}, "text-overflow": {"ellipsis-word": 1, "clip": 1, "ellipsis": 1}, "-moz-border-radius": 1, "-moz-border-radius-topright": 1, "-moz-border-radius-bottomright": 1, "-moz-border-radius-topleft": 1, "-moz-border-radius-bottomleft": 1, "-webkit-border-radius": 1, "-webkit-border-top-right-radius": 1, "-webkit-border-top-left-radius": 1, "-webkit-border-bottom-right-radius": 1, "-webkit-border-bottom-left-radius": 1, "-moz-box-shadow": 1, "-webkit-box-shadow": 1, "transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-moz-transform": {"rotate($00deg)": 1, "skew($00deg)": 1}, "-webkit-transform": {"rotate($00deg)": 1, "skew($00deg)": 1 } }; var CssCompletions = function() { }; (function() { this.completionsDefined = false; this.defineCompletions = function() { if (document) { var style = document.createElement('c').style; for (var i in style) { if (typeof style[i] !== 'string') continue; var name = i.replace(/[A-Z]/g, function(x) { return '-' + x.toLowerCase(); }); if (!propertyMap.hasOwnProperty(name)) propertyMap[name] = 1; } } this.completionsDefined = true; } this.getCompletions = function(state, session, pos, prefix) { if (!this.completionsDefined) { this.defineCompletions(); } var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (state==='ruleset'){ var line = session.getLine(pos.row).substr(0, pos.column); if (/:[^;]+$/.test(line)) { /([\w\-]+):[^:]*$/.test(line); return this.getPropertyValueCompletions(state, session, pos, prefix); } else { return this.getPropertyCompletions(state, session, pos, prefix); } } return []; }; this.getPropertyCompletions = function(state, session, pos, prefix) { var properties = Object.keys(propertyMap); return properties.map(function(property){ return { caption: property, snippet: property + ': $0', meta: "property", score: Number.MAX_VALUE }; }); }; this.getPropertyValueCompletions = function(state, session, pos, prefix) { var line = session.getLine(pos.row).substr(0, pos.column); var property = (/([\w\-]+):[^:]*$/.exec(line) || {})[1]; if (!property) return []; var values = []; if (property in propertyMap && typeof propertyMap[property] === "object") { values = Object.keys(propertyMap[property]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "property value", score: Number.MAX_VALUE }; }); }; }).call(CssCompletions.prototype); exports.CssCompletions = CssCompletions; }); ace.define("ace/mode/behaviour/css",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/mode/behaviour/cstyle","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var CstyleBehaviour = require("./cstyle").CstyleBehaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var CssBehaviour = function () { this.inherit(CstyleBehaviour); this.add("colon", "insertion", function (state, action, editor, session, text) { if (text === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ':') { return { text: '', selection: [1, 1] } } if (!line.substring(cursor.column).match(/^\s*;/)) { return { text: ':;', selection: [1, 1] } } } } }); this.add("colon", "deletion", function (state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && selected === ':') { var cursor = editor.getCursorPosition(); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.value.match(/\s+/)) { token = iterator.stepBackward(); } if (token && token.type === 'support.type') { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.end.column, range.end.column + 1); if (rightChar === ';') { range.end.column ++; return range; } } } }); this.add("semicolon", "insertion", function (state, action, editor, session, text) { if (text === ';') { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); if (rightChar === ';') { return { text: '', selection: [1, 1] } } } }); } oop.inherits(CssBehaviour, CstyleBehaviour); exports.CssBehaviour = CssBehaviour; }); ace.define("ace/mode/css",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/css_highlight_rules","ace/mode/matching_brace_outdent","ace/worker/worker_client","ace/mode/css_completions","ace/mode/behaviour/css","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var WorkerClient = require("../worker/worker_client").WorkerClient; var CssCompletions = require("./css_completions").CssCompletions; var CssBehaviour = require("./behaviour/css").CssBehaviour; var CStyleFoldMode = require("./folding/cstyle").FoldMode; var Mode = function() { this.HighlightRules = CssHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.$behaviour = new CssBehaviour(); this.$completer = new CssCompletions(); this.foldingRules = new CStyleFoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.foldingRules = "cStyle"; this.blockComment = {start: "/*", end: "*/"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokens = this.getTokenizer().getLineTokens(line, state).tokens; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } var match = line.match(/^.*\{\s*$/); if (match) { indent += tab; } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { var worker = new WorkerClient(["ace"], "ace/mode/css_worker", "Worker"); worker.attachToDocument(session.getDocument()); worker.on("annotate", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/css"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/xml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var XmlHighlightRules = function(normalize) { var tagRegex = "[_:a-zA-Z\xc0-\uffff][-_:.a-zA-Z0-9\xc0-\uffff]*"; this.$rules = { start : [ {token : "string.cdata.xml", regex : "<\\!\\[CDATA\\[", next : "cdata"}, { token : ["punctuation.xml-decl.xml", "keyword.xml-decl.xml"], regex : "(<\\?)(xml)(?=[\\s])", next : "xml_decl", caseInsensitive: true }, { token : ["punctuation.instruction.xml", "keyword.instruction.xml"], regex : "(<\\?)(" + tagRegex + ")", next : "processing_instruction" }, {token : "comment.xml", regex : "<\\!--", next : "comment"}, { token : ["xml-pe.doctype.xml", "xml-pe.doctype.xml"], regex : "(<\\!)(DOCTYPE)(?=[\\s])", next : "doctype", caseInsensitive: true }, {include : "tag"}, {token : "text.end-tag-open.xml", regex: "</"}, {token : "text.tag-open.xml", regex: "<"}, {include : "reference"}, {defaultToken : "text.xml"} ], xml_decl : [{ token : "entity.other.attribute-name.decl-attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.decl-attribute-equals.xml", regex : "=" }, { include: "whitespace" }, { include: "string" }, { token : "punctuation.xml-decl.xml", regex : "\\?>", next : "start" }], processing_instruction : [ {token : "punctuation.instruction.xml", regex : "\\?>", next : "start"}, {defaultToken : "instruction.xml"} ], doctype : [ {include : "whitespace"}, {include : "string"}, {token : "xml-pe.doctype.xml", regex : ">", next : "start"}, {token : "xml-pe.xml", regex : "[-_a-zA-Z0-9:]+"}, {token : "punctuation.int-subset", regex : "\\[", push : "int_subset"} ], int_subset : [{ token : "text.xml", regex : "\\s+" }, { token: "punctuation.int-subset.xml", regex: "]", next: "pop" }, { token : ["punctuation.markup-decl.xml", "keyword.markup-decl.xml"], regex : "(<\\!)(" + tagRegex + ")", push : [{ token : "text", regex : "\\s+" }, { token : "punctuation.markup-decl.xml", regex : ">", next : "pop" }, {include : "string"}] }], cdata : [ {token : "string.cdata.xml", regex : "\\]\\]>", next : "start"}, {token : "text.xml", regex : "\\s+"}, {token : "text.xml", regex : "(?:[^\\]]|\\](?!\\]>))+"} ], comment : [ {token : "comment.xml", regex : "-->", next : "start"}, {defaultToken : "comment.xml"} ], reference : [{ token : "constant.language.escape.reference.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], attr_reference : [{ token : "constant.language.escape.reference.attribute-value.xml", regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" }], tag : [{ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag.punctuation.end-tag-open.xml", "meta.tag.tag-name.xml"], regex : "(?:(<)|(</))((?:" + tagRegex + ":)?" + tagRegex + ")", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }], tag_whitespace : [ {token : "text.tag-whitespace.xml", regex : "\\s+"} ], whitespace : [ {token : "text.whitespace.xml", regex : "\\s+"} ], string: [{ token : "string.xml", regex : "'", push : [ {token : "string.xml", regex: "'", next: "pop"}, {defaultToken : "string.xml"} ] }, { token : "string.xml", regex : '"', push : [ {token : "string.xml", regex: '"', next: "pop"}, {defaultToken : "string.xml"} ] }], attributes: [{ token : "entity.other.attribute-name.xml", regex : "(?:" + tagRegex + ":)?" + tagRegex + "" }, { token : "keyword.operator.attribute-equals.xml", regex : "=" }, { include: "tag_whitespace" }, { include: "attribute_value" }], attribute_value: [{ token : "string.attribute-value.xml", regex : "'", push : [ {token : "string.attribute-value.xml", regex: "'", next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }, { token : "string.attribute-value.xml", regex : '"', push : [ {token : "string.attribute-value.xml", regex: '"', next: "pop"}, {include : "attr_reference"}, {defaultToken : "string.attribute-value.xml"} ] }] }; if (this.constructor === XmlHighlightRules) this.normalizeRules(); }; (function() { this.embedTagRules = function(HighlightRules, prefix, tag){ this.$rules.tag.unshift({ token : ["meta.tag.punctuation.tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(<)(" + tag + "(?=\\s|>|$))", next: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : prefix + "start"} ] }); this.$rules[tag + "-end"] = [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next: "start", onMatch : function(value, currentState, stack) { stack.splice(0); return this.token; }} ] this.embedRules(HighlightRules, prefix, [{ token: ["meta.tag.punctuation.end-tag-open.xml", "meta.tag." + tag + ".tag-name.xml"], regex : "(</)(" + tag + "(?=\\s|>|$))", next: tag + "-end" }, { token: "string.cdata.xml", regex : "<\\!\\[CDATA\\[" }, { token: "string.cdata.xml", regex : "\\]\\]>" }]); }; }).call(TextHighlightRules.prototype); oop.inherits(XmlHighlightRules, TextHighlightRules); exports.XmlHighlightRules = XmlHighlightRules; }); ace.define("ace/mode/html_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/css_highlight_rules","ace/mode/javascript_highlight_rules","ace/mode/xml_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var CssHighlightRules = require("./css_highlight_rules").CssHighlightRules; var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; var XmlHighlightRules = require("./xml_highlight_rules").XmlHighlightRules; var tagMap = lang.createMap({ a : 'anchor', button : 'form', form : 'form', img : 'image', input : 'form', label : 'form', option : 'form', script : 'script', select : 'form', textarea : 'form', style : 'style', table : 'table', tbody : 'table', td : 'table', tfoot : 'table', th : 'table', tr : 'table' }); var HtmlHighlightRules = function() { XmlHighlightRules.call(this); this.addRules({ attributes: [{ include : "tag_whitespace" }, { token : "entity.other.attribute-name.xml", regex : "[-_a-zA-Z0-9:.]+" }, { token : "keyword.operator.attribute-equals.xml", regex : "=", push : [{ include: "tag_whitespace" }, { token : "string.unquoted.attribute-value.html", regex : "[^<>='\"`\\s]+", next : "pop" }, { token : "empty", regex : "", next : "pop" }] }, { include : "attribute_value" }], tag: [{ token : function(start, tag) { var group = tagMap[tag]; return ["meta.tag.punctuation." + (start == "<" ? "" : "end-") + "tag-open.xml", "meta.tag" + (group ? "." + group : "") + ".tag-name.xml"]; }, regex : "(</?)([-_a-zA-Z0-9:.]+)", next: "tag_stuff" }], tag_stuff: [ {include : "attributes"}, {token : "meta.tag.punctuation.tag-close.xml", regex : "/?>", next : "start"} ] }); this.embedTagRules(CssHighlightRules, "css-", "style"); this.embedTagRules(new JavaScriptHighlightRules({noJSX: true}).getRules(), "js-", "script"); if (this.constructor === HtmlHighlightRules) this.normalizeRules(); }; oop.inherits(HtmlHighlightRules, XmlHighlightRules); exports.HtmlHighlightRules = HtmlHighlightRules; }); ace.define("ace/mode/behaviour/xml",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var Behaviour = require("../behaviour").Behaviour; var TokenIterator = require("../../token_iterator").TokenIterator; var lang = require("../../lib/lang"); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } var XmlBehaviour = function () { this.add("string_dquotes", "insertion", function (state, action, editor, session, text) { if (text == '"' || text == "'") { var quote = text; var selected = session.doc.getTextRange(editor.getSelectionRange()); if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { return { text: quote + selected + quote, selection: false }; } var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var rightChar = line.substring(cursor.column, cursor.column + 1); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (rightChar == quote && (is(token, "attribute-value") || is(token, "string"))) { return { text: "", selection: [1, 1] }; } if (!token) token = iterator.stepBackward(); if (!token) return; while (is(token, "tag-whitespace") || is(token, "whitespace")) { token = iterator.stepBackward(); } var rightSpace = !rightChar || rightChar.match(/\s/); if (is(token, "attribute-equals") && (rightSpace || rightChar == '>') || (is(token, "decl-attribute-equals") && (rightSpace || rightChar == '?'))) { return { text: quote + quote, selection: [1, 1] }; } } }); this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { var selected = session.doc.getTextRange(range); if (!range.isMultiLine() && (selected == '"' || selected == "'")) { var line = session.doc.getLine(range.start.row); var rightChar = line.substring(range.start.column + 1, range.start.column + 2); if (rightChar == selected) { range.end.column++; return range; } } }); this.add("autoclosing", "insertion", function (state, action, editor, session, text) { if (text == '>') { var position = editor.getCursorPosition(); var iterator = new TokenIterator(session, position.row, position.column); var token = iterator.getCurrentToken() || iterator.stepBackward(); if (!token || !(is(token, "tag-name") || is(token, "tag-whitespace") || is(token, "attribute-name") || is(token, "attribute-equals") || is(token, "attribute-value"))) return; if (is(token, "reference.attribute-value")) return; if (is(token, "attribute-value")) { var firstChar = token.value.charAt(0); if (firstChar == '"' || firstChar == "'") { var lastChar = token.value.charAt(token.value.length - 1); var tokenEnd = iterator.getCurrentTokenColumn() + token.value.length; if (tokenEnd > position.column || tokenEnd == position.column && firstChar != lastChar) return; } } while (!is(token, "tag-name")) { token = iterator.stepBackward(); } var tokenRow = iterator.getCurrentTokenRow(); var tokenColumn = iterator.getCurrentTokenColumn(); if (is(iterator.stepBackward(), "end-tag-open")) return; var element = token.value; if (tokenRow == position.row) element = element.substring(0, position.column - tokenColumn); if (this.voidElements.hasOwnProperty(element.toLowerCase())) return; return { text: ">" + "</" + element + ">", selection: [1, 1] }; } }); this.add("autoindent", "insertion", function (state, action, editor, session, text) { if (text == "\n") { var cursor = editor.getCursorPosition(); var line = session.getLine(cursor.row); var iterator = new TokenIterator(session, cursor.row, cursor.column); var token = iterator.getCurrentToken(); if (token && token.type.indexOf("tag-close") !== -1) { if (token.value == "/>") return; while (token && token.type.indexOf("tag-name") === -1) { token = iterator.stepBackward(); } if (!token) { return; } var tag = token.value; var row = iterator.getCurrentTokenRow(); token = iterator.stepBackward(); if (!token || token.type.indexOf("end-tag") !== -1) { return; } if (this.voidElements && !this.voidElements[tag]) { var nextToken = session.getTokenAt(cursor.row, cursor.column+1); var line = session.getLine(row); var nextIndent = this.$getIndent(line); var indent = nextIndent + session.getTabString(); if (nextToken && nextToken.value === "</") { return { text: "\n" + indent + "\n" + nextIndent, selection: [1, indent.length, 1, indent.length] }; } else { return { text: "\n" + indent }; } } } } }); }; oop.inherits(XmlBehaviour, Behaviour); exports.XmlBehaviour = XmlBehaviour; }); ace.define("ace/mode/folding/mixed",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var FoldMode = exports.FoldMode = function(defaultMode, subModes) { this.defaultMode = defaultMode; this.subModes = subModes; }; oop.inherits(FoldMode, BaseFoldMode); (function() { this.$getMode = function(state) { if (typeof state != "string") state = state[0]; for (var key in this.subModes) { if (state.indexOf(key) === 0) return this.subModes[key]; } return null; }; this.$tryMode = function(state, session, foldStyle, row) { var mode = this.$getMode(state); return (mode ? mode.getFoldWidget(session, foldStyle, row) : ""); }; this.getFoldWidget = function(session, foldStyle, row) { return ( this.$tryMode(session.getState(row-1), session, foldStyle, row) || this.$tryMode(session.getState(row), session, foldStyle, row) || this.defaultMode.getFoldWidget(session, foldStyle, row) ); }; this.getFoldWidgetRange = function(session, foldStyle, row) { var mode = this.$getMode(session.getState(row-1)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.$getMode(session.getState(row)); if (!mode || !mode.getFoldWidget(session, foldStyle, row)) mode = this.defaultMode; return mode.getFoldWidgetRange(session, foldStyle, row); }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/xml",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/range","ace/mode/folding/fold_mode","ace/token_iterator"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var lang = require("../../lib/lang"); var Range = require("../../range").Range; var BaseFoldMode = require("./fold_mode").FoldMode; var TokenIterator = require("../../token_iterator").TokenIterator; var FoldMode = exports.FoldMode = function(voidElements, optionalEndTags) { BaseFoldMode.call(this); this.voidElements = voidElements || {}; this.optionalEndTags = oop.mixin({}, this.voidElements); if (optionalEndTags) oop.mixin(this.optionalEndTags, optionalEndTags); }; oop.inherits(FoldMode, BaseFoldMode); var Tag = function() { this.tagName = ""; this.closing = false; this.selfClosing = false; this.start = {row: 0, column: 0}; this.end = {row: 0, column: 0}; }; function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } (function() { this.getFoldWidget = function(session, foldStyle, row) { var tag = this._getFirstTagInLine(session, row); if (!tag) return ""; if (tag.closing || (!tag.tagName && tag.selfClosing)) return foldStyle == "markbeginend" ? "end" : ""; if (!tag.tagName || tag.selfClosing || this.voidElements.hasOwnProperty(tag.tagName.toLowerCase())) return ""; if (this._findEndTagInLine(session, row, tag.tagName, tag.end.column)) return ""; return "start"; }; this._getFirstTagInLine = function(session, row) { var tokens = session.getTokens(row); var tag = new Tag(); for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; if (is(token, "tag-open")) { tag.end.column = tag.start.column + token.value.length; tag.closing = is(token, "end-tag-open"); token = tokens[++i]; if (!token) return null; tag.tagName = token.value; tag.end.column += token.value.length; for (i++; i < tokens.length; i++) { token = tokens[i]; tag.end.column += token.value.length; if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; break; } } return tag; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == '/>'; return tag; } tag.start.column += token.value.length; } return null; }; this._findEndTagInLine = function(session, row, tagName, startColumn) { var tokens = session.getTokens(row); var column = 0; for (var i = 0; i < tokens.length; i++) { var token = tokens[i]; column += token.value.length; if (column < startColumn) continue; if (is(token, "end-tag-open")) { token = tokens[i + 1]; if (token && token.value == tagName) return true; } } return false; }; this._readTagForward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; iterator.stepForward(); return tag; } } while(token = iterator.stepForward()); return null; }; this._readTagBackward = function(iterator) { var token = iterator.getCurrentToken(); if (!token) return null; var tag = new Tag(); do { if (is(token, "tag-open")) { tag.closing = is(token, "end-tag-open"); tag.start.row = iterator.getCurrentTokenRow(); tag.start.column = iterator.getCurrentTokenColumn(); iterator.stepBackward(); return tag; } else if (is(token, "tag-name")) { tag.tagName = token.value; } else if (is(token, "tag-close")) { tag.selfClosing = token.value == "/>"; tag.end.row = iterator.getCurrentTokenRow(); tag.end.column = iterator.getCurrentTokenColumn() + token.value.length; } } while(token = iterator.stepBackward()); return null; }; this._pop = function(stack, tag) { while (stack.length) { var top = stack[stack.length-1]; if (!tag || top.tagName == tag.tagName) { return stack.pop(); } else if (this.optionalEndTags.hasOwnProperty(top.tagName)) { stack.pop(); continue; } else { return null; } } }; this.getFoldWidgetRange = function(session, foldStyle, row) { var firstTag = this._getFirstTagInLine(session, row); if (!firstTag) return null; var isBackward = firstTag.closing || firstTag.selfClosing; var stack = []; var tag; if (!isBackward) { var iterator = new TokenIterator(session, row, firstTag.start.column); var start = { row: row, column: firstTag.start.column + firstTag.tagName.length + 2 }; if (firstTag.start.row == firstTag.end.row) start.column = firstTag.end.column; while (tag = this._readTagForward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (tag.closing) { this._pop(stack, tag); if (stack.length == 0) return Range.fromPoints(start, tag.start); } else { stack.push(tag); } } } else { var iterator = new TokenIterator(session, row, firstTag.end.column); var end = { row: row, column: firstTag.start.column }; while (tag = this._readTagBackward(iterator)) { if (tag.selfClosing) { if (!stack.length) { tag.start.column += tag.tagName.length + 2; tag.end.column -= 2; return Range.fromPoints(tag.start, tag.end); } else continue; } if (!tag.closing) { this._pop(stack, tag); if (stack.length == 0) { tag.start.column += tag.tagName.length + 2; if (tag.start.row == tag.end.row && tag.start.column < tag.end.column) tag.start.column = tag.end.column; return Range.fromPoints(tag.start, end); } } else { stack.push(tag); } } } }; }).call(FoldMode.prototype); }); ace.define("ace/mode/folding/html",["require","exports","module","ace/lib/oop","ace/mode/folding/mixed","ace/mode/folding/xml","ace/mode/folding/cstyle"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var MixedFoldMode = require("./mixed").FoldMode; var XmlFoldMode = require("./xml").FoldMode; var CStyleFoldMode = require("./cstyle").FoldMode; var FoldMode = exports.FoldMode = function(voidElements, optionalTags) { MixedFoldMode.call(this, new XmlFoldMode(voidElements, optionalTags), { "js-": new CStyleFoldMode(), "css-": new CStyleFoldMode() }); }; oop.inherits(FoldMode, MixedFoldMode); }); ace.define("ace/mode/html_completions",["require","exports","module","ace/token_iterator"], function(require, exports, module) { "use strict"; var TokenIterator = require("../token_iterator").TokenIterator; var commonAttributes = [ "accesskey", "class", "contenteditable", "contextmenu", "dir", "draggable", "dropzone", "hidden", "id", "inert", "itemid", "itemprop", "itemref", "itemscope", "itemtype", "lang", "spellcheck", "style", "tabindex", "title", "translate" ]; var eventAttributes = [ "onabort", "onblur", "oncancel", "oncanplay", "oncanplaythrough", "onchange", "onclick", "onclose", "oncontextmenu", "oncuechange", "ondblclick", "ondrag", "ondragend", "ondragenter", "ondragleave", "ondragover", "ondragstart", "ondrop", "ondurationchange", "onemptied", "onended", "onerror", "onfocus", "oninput", "oninvalid", "onkeydown", "onkeypress", "onkeyup", "onload", "onloadeddata", "onloadedmetadata", "onloadstart", "onmousedown", "onmousemove", "onmouseout", "onmouseover", "onmouseup", "onmousewheel", "onpause", "onplay", "onplaying", "onprogress", "onratechange", "onreset", "onscroll", "onseeked", "onseeking", "onselect", "onshow", "onstalled", "onsubmit", "onsuspend", "ontimeupdate", "onvolumechange", "onwaiting" ]; var globalAttributes = commonAttributes.concat(eventAttributes); var attributeMap = { "html": {"manifest": 1}, "head": {}, "title": {}, "base": {"href": 1, "target": 1}, "link": {"href": 1, "hreflang": 1, "rel": {"stylesheet": 1, "icon": 1}, "media": {"all": 1, "screen": 1, "print": 1}, "type": {"text/css": 1, "image/png": 1, "image/jpeg": 1, "image/gif": 1}, "sizes": 1}, "meta": {"http-equiv": {"content-type": 1}, "name": {"description": 1, "keywords": 1}, "content": {"text/html; charset=UTF-8": 1}, "charset": 1}, "style": {"type": 1, "media": {"all": 1, "screen": 1, "print": 1}, "scoped": 1}, "script": {"charset": 1, "type": {"text/javascript": 1}, "src": 1, "defer": 1, "async": 1}, "noscript": {"href": 1}, "body": {"onafterprint": 1, "onbeforeprint": 1, "onbeforeunload": 1, "onhashchange": 1, "onmessage": 1, "onoffline": 1, "onpopstate": 1, "onredo": 1, "onresize": 1, "onstorage": 1, "onundo": 1, "onunload": 1}, "section": {}, "nav": {}, "article": {"pubdate": 1}, "aside": {}, "h1": {}, "h2": {}, "h3": {}, "h4": {}, "h5": {}, "h6": {}, "header": {}, "footer": {}, "address": {}, "main": {}, "p": {}, "hr": {}, "pre": {}, "blockquote": {"cite": 1}, "ol": {"start": 1, "reversed": 1}, "ul": {}, "li": {"value": 1}, "dl": {}, "dt": {}, "dd": {}, "figure": {}, "figcaption": {}, "div": {}, "a": {"href": 1, "target": {"_blank": 1, "top": 1}, "ping": 1, "rel": {"nofollow": 1, "alternate": 1, "author": 1, "bookmark": 1, "help": 1, "license": 1, "next": 1, "noreferrer": 1, "prefetch": 1, "prev": 1, "search": 1, "tag": 1}, "media": 1, "hreflang": 1, "type": 1}, "em": {}, "strong": {}, "small": {}, "s": {}, "cite": {}, "q": {"cite": 1}, "dfn": {}, "abbr": {}, "data": {}, "time": {"datetime": 1}, "code": {}, "var": {}, "samp": {}, "kbd": {}, "sub": {}, "sup": {}, "i": {}, "b": {}, "u": {}, "mark": {}, "ruby": {}, "rt": {}, "rp": {}, "bdi": {}, "bdo": {}, "span": {}, "br": {}, "wbr": {}, "ins": {"cite": 1, "datetime": 1}, "del": {"cite": 1, "datetime": 1}, "img": {"alt": 1, "src": 1, "height": 1, "width": 1, "usemap": 1, "ismap": 1}, "iframe": {"name": 1, "src": 1, "height": 1, "width": 1, "sandbox": {"allow-same-origin": 1, "allow-top-navigation": 1, "allow-forms": 1, "allow-scripts": 1}, "seamless": {"seamless": 1}}, "embed": {"src": 1, "height": 1, "width": 1, "type": 1}, "object": {"param": 1, "data": 1, "type": 1, "height" : 1, "width": 1, "usemap": 1, "name": 1, "form": 1, "classid": 1}, "param": {"name": 1, "value": 1}, "video": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "width": 1, "height": 1, "poster": 1, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1}}, "audio": {"src": 1, "autobuffer": 1, "autoplay": {"autoplay": 1}, "loop": {"loop": 1}, "controls": {"controls": 1}, "muted": {"muted": 1}, "preload": {"auto": 1, "metadata": 1, "none": 1 }}, "source": {"src": 1, "type": 1, "media": 1}, "track": {"kind": 1, "src": 1, "srclang": 1, "label": 1, "default": 1}, "canvas": {"width": 1, "height": 1}, "map": {"name": 1}, "area": {"shape": 1, "coords": 1, "href": 1, "hreflang": 1, "alt": 1, "target": 1, "media": 1, "rel": 1, "ping": 1, "type": 1}, "svg": {}, "math": {}, "table": {"summary": 1}, "caption": {}, "colgroup": {"span": 1}, "col": {"span": 1}, "tbody": {}, "thead": {}, "tfoot": {}, "tr": {}, "td": {"headers": 1, "rowspan": 1, "colspan": 1}, "th": {"headers": 1, "rowspan": 1, "colspan": 1, "scope": 1}, "form": {"accept-charset": 1, "action": 1, "autocomplete": 1, "enctype": {"multipart/form-data": 1, "application/x-www-form-urlencoded": 1}, "method": {"get": 1, "post": 1}, "name": 1, "novalidate": 1, "target": {"_blank": 1, "top": 1}}, "fieldset": {"disabled": 1, "form": 1, "name": 1}, "legend": {}, "label": {"form": 1, "for": 1}, "input": { "type": {"text": 1, "password": 1, "hidden": 1, "checkbox": 1, "submit": 1, "radio": 1, "file": 1, "button": 1, "reset": 1, "image": 31, "color": 1, "date": 1, "datetime": 1, "datetime-local": 1, "email": 1, "month": 1, "number": 1, "range": 1, "search": 1, "tel": 1, "time": 1, "url": 1, "week": 1}, "accept": 1, "alt": 1, "autocomplete": {"on": 1, "off": 1}, "autofocus": {"autofocus": 1}, "checked": {"checked": 1}, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": {"application/x-www-form-urlencoded": 1, "multipart/form-data": 1, "text/plain": 1}, "formmethod": {"get": 1, "post": 1}, "formnovalidate": {"formnovalidate": 1}, "formtarget": {"_blank": 1, "_self": 1, "_parent": 1, "_top": 1}, "height": 1, "list": 1, "max": 1, "maxlength": 1, "min": 1, "multiple": {"multiple": 1}, "name": 1, "pattern": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "size": 1, "src": 1, "step": 1, "width": 1, "files": 1, "value": 1}, "button": {"autofocus": 1, "disabled": {"disabled": 1}, "form": 1, "formaction": 1, "formenctype": 1, "formmethod": 1, "formnovalidate": 1, "formtarget": 1, "name": 1, "value": 1, "type": {"button": 1, "submit": 1}}, "select": {"autofocus": 1, "disabled": 1, "form": 1, "multiple": {"multiple": 1}, "name": 1, "size": 1, "readonly":{"readonly": 1}}, "datalist": {}, "optgroup": {"disabled": 1, "label": 1}, "option": {"disabled": 1, "selected": 1, "label": 1, "value": 1}, "textarea": {"autofocus": {"autofocus": 1}, "disabled": {"disabled": 1}, "form": 1, "maxlength": 1, "name": 1, "placeholder": 1, "readonly": {"readonly": 1}, "required": {"required": 1}, "rows": 1, "cols": 1, "wrap": {"on": 1, "off": 1, "hard": 1, "soft": 1}}, "keygen": {"autofocus": 1, "challenge": {"challenge": 1}, "disabled": {"disabled": 1}, "form": 1, "keytype": {"rsa": 1, "dsa": 1, "ec": 1}, "name": 1}, "output": {"for": 1, "form": 1, "name": 1}, "progress": {"value": 1, "max": 1}, "meter": {"value": 1, "min": 1, "max": 1, "low": 1, "high": 1, "optimum": 1}, "details": {"open": 1}, "summary": {}, "command": {"type": 1, "label": 1, "icon": 1, "disabled": 1, "checked": 1, "radiogroup": 1, "command": 1}, "menu": {"type": 1, "label": 1}, "dialog": {"open": 1} }; var elements = Object.keys(attributeMap); function is(token, type) { return token.type.lastIndexOf(type + ".xml") > -1; } function findTagName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "tag-name")){ token = iterator.stepBackward(); } if (token) return token.value; } function findAttributeName(session, pos) { var iterator = new TokenIterator(session, pos.row, pos.column); var token = iterator.getCurrentToken(); while (token && !is(token, "attribute-name")){ token = iterator.stepBackward(); } if (token) return token.value; } var HtmlCompletions = function() { }; (function() { this.getCompletions = function(state, session, pos, prefix) { var token = session.getTokenAt(pos.row, pos.column); if (!token) return []; if (is(token, "tag-name") || is(token, "tag-open") || is(token, "end-tag-open")) return this.getTagCompletions(state, session, pos, prefix); if (is(token, "tag-whitespace") || is(token, "attribute-name")) return this.getAttributeCompletions(state, session, pos, prefix); if (is(token, "attribute-value")) return this.getAttributeValueCompletions(state, session, pos, prefix); var line = session.getLine(pos.row).substr(0, pos.column); if (/&[A-z]*$/i.test(line)) return this.getHTMLEntityCompletions(state, session, pos, prefix); return []; }; this.getTagCompletions = function(state, session, pos, prefix) { return elements.map(function(element){ return { value: element, meta: "tag", score: Number.MAX_VALUE }; }); }; this.getAttributeCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); if (!tagName) return []; var attributes = globalAttributes; if (tagName in attributeMap) { attributes = attributes.concat(Object.keys(attributeMap[tagName])); } return attributes.map(function(attribute){ return { caption: attribute, snippet: attribute + '="$0"', meta: "attribute", score: Number.MAX_VALUE }; }); }; this.getAttributeValueCompletions = function(state, session, pos, prefix) { var tagName = findTagName(session, pos); var attributeName = findAttributeName(session, pos); if (!tagName) return []; var values = []; if (tagName in attributeMap && attributeName in attributeMap[tagName] && typeof attributeMap[tagName][attributeName] === "object") { values = Object.keys(attributeMap[tagName][attributeName]); } return values.map(function(value){ return { caption: value, snippet: value, meta: "attribute value", score: Number.MAX_VALUE }; }); }; this.getHTMLEntityCompletions = function(state, session, pos, prefix) { var values = ['Aacute;', 'aacute;', 'Acirc;', 'acirc;', 'acute;', 'AElig;', 'aelig;', 'Agrave;', 'agrave;', 'alefsym;', 'Alpha;', 'alpha;', 'amp;', 'and;', 'ang;', 'Aring;', 'aring;', 'asymp;', 'Atilde;', 'atilde;', 'Auml;', 'auml;', 'bdquo;', 'Beta;', 'beta;', 'brvbar;', 'bull;', 'cap;', 'Ccedil;', 'ccedil;', 'cedil;', 'cent;', 'Chi;', 'chi;', 'circ;', 'clubs;', 'cong;', 'copy;', 'crarr;', 'cup;', 'curren;', 'Dagger;', 'dagger;', 'dArr;', 'darr;', 'deg;', 'Delta;', 'delta;', 'diams;', 'divide;', 'Eacute;', 'eacute;', 'Ecirc;', 'ecirc;', 'Egrave;', 'egrave;', 'empty;', 'emsp;', 'ensp;', 'Epsilon;', 'epsilon;', 'equiv;', 'Eta;', 'eta;', 'ETH;', 'eth;', 'Euml;', 'euml;', 'euro;', 'exist;', 'fnof;', 'forall;', 'frac12;', 'frac14;', 'frac34;', 'frasl;', 'Gamma;', 'gamma;', 'ge;', 'gt;', 'hArr;', 'harr;', 'hearts;', 'hellip;', 'Iacute;', 'iacute;', 'Icirc;', 'icirc;', 'iexcl;', 'Igrave;', 'igrave;', 'image;', 'infin;', 'int;', 'Iota;', 'iota;', 'iquest;', 'isin;', 'Iuml;', 'iuml;', 'Kappa;', 'kappa;', 'Lambda;', 'lambda;', 'lang;', 'laquo;', 'lArr;', 'larr;', 'lceil;', 'ldquo;', 'le;', 'lfloor;', 'lowast;', 'loz;', 'lrm;', 'lsaquo;', 'lsquo;', 'lt;', 'macr;', 'mdash;', 'micro;', 'middot;', 'minus;', 'Mu;', 'mu;', 'nabla;', 'nbsp;', 'ndash;', 'ne;', 'ni;', 'not;', 'notin;', 'nsub;', 'Ntilde;', 'ntilde;', 'Nu;', 'nu;', 'Oacute;', 'oacute;', 'Ocirc;', 'ocirc;', 'OElig;', 'oelig;', 'Ograve;', 'ograve;', 'oline;', 'Omega;', 'omega;', 'Omicron;', 'omicron;', 'oplus;', 'or;', 'ordf;', 'ordm;', 'Oslash;', 'oslash;', 'Otilde;', 'otilde;', 'otimes;', 'Ouml;', 'ouml;', 'para;', 'part;', 'permil;', 'perp;', 'Phi;', 'phi;', 'Pi;', 'pi;', 'piv;', 'plusmn;', 'pound;', 'Prime;', 'prime;', 'prod;', 'prop;', 'Psi;', 'psi;', 'quot;', 'radic;', 'rang;', 'raquo;', 'rArr;', 'rarr;', 'rceil;', 'rdquo;', 'real;', 'reg;', 'rfloor;', 'Rho;', 'rho;', 'rlm;', 'rsaquo;', 'rsquo;', 'sbquo;', 'Scaron;', 'scaron;', 'sdot;', 'sect;', 'shy;', 'Sigma;', 'sigma;', 'sigmaf;', 'sim;', 'spades;', 'sub;', 'sube;', 'sum;', 'sup;', 'sup1;', 'sup2;', 'sup3;', 'supe;', 'szlig;', 'Tau;', 'tau;', 'there4;', 'Theta;', 'theta;', 'thetasym;', 'thinsp;', 'THORN;', 'thorn;', 'tilde;', 'times;', 'trade;', 'Uacute;', 'uacute;', 'uArr;', 'uarr;', 'Ucirc;', 'ucirc;', 'Ugrave;', 'ugrave;', 'uml;', 'upsih;', 'Upsilon;', 'upsilon;', 'Uuml;', 'uuml;', 'weierp;', 'Xi;', 'xi;', 'Yacute;', 'yacute;', 'yen;', 'Yuml;', 'yuml;', 'Zeta;', 'zeta;', 'zwj;', 'zwnj;']; return values.map(function(value){ return { caption: value, snippet: value, meta: "html entity", score: Number.MAX_VALUE }; }); }; }).call(HtmlCompletions.prototype); exports.HtmlCompletions = HtmlCompletions; }); ace.define("ace/mode/html",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/text","ace/mode/javascript","ace/mode/css","ace/mode/html_highlight_rules","ace/mode/behaviour/xml","ace/mode/folding/html","ace/mode/html_completions","ace/worker/worker_client"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var TextMode = require("./text").Mode; var JavaScriptMode = require("./javascript").Mode; var CssMode = require("./css").Mode; var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var XmlBehaviour = require("./behaviour/xml").XmlBehaviour; var HtmlFoldMode = require("./folding/html").FoldMode; var HtmlCompletions = require("./html_completions").HtmlCompletions; var WorkerClient = require("../worker/worker_client").WorkerClient; var voidElements = ["area", "base", "br", "col", "embed", "hr", "img", "input", "keygen", "link", "meta", "menuitem", "param", "source", "track", "wbr"]; var optionalEndTags = ["li", "dt", "dd", "p", "rt", "rp", "optgroup", "option", "colgroup", "td", "th"]; var Mode = function(options) { this.fragmentContext = options && options.fragmentContext; this.HighlightRules = HtmlHighlightRules; this.$behaviour = new XmlBehaviour(); this.$completer = new HtmlCompletions(); this.createModeDelegates({ "js-": JavaScriptMode, "css-": CssMode }); this.foldingRules = new HtmlFoldMode(this.voidElements, lang.arrayToMap(optionalEndTags)); }; oop.inherits(Mode, TextMode); (function() { this.blockComment = {start: "<!--", end: "-->"}; this.voidElements = lang.arrayToMap(voidElements); this.getNextLineIndent = function(state, line, tab) { return this.$getIndent(line); }; this.checkOutdent = function(state, line, input) { return false; }; this.getCompletions = function(state, session, pos, prefix) { return this.$completer.getCompletions(state, session, pos, prefix); }; this.createWorker = function(session) { if (this.constructor != Mode) return; var worker = new WorkerClient(["ace"], "ace/mode/html_worker", "Worker"); worker.attachToDocument(session.getDocument()); if (this.fragmentContext) worker.call("setOptions", [{context: this.fragmentContext}]); worker.on("error", function(e) { session.setAnnotations(e.data); }); worker.on("terminate", function() { session.clearAnnotations(); }); return worker; }; this.$id = "ace/mode/html"; }).call(Mode.prototype); exports.Mode = Mode; }); ace.define("ace/mode/twig_highlight_rules",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/mode/html_highlight_rules","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var lang = require("../lib/lang"); var HtmlHighlightRules = require("./html_highlight_rules").HtmlHighlightRules; var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var TwigHighlightRules = function() { HtmlHighlightRules.call(this); var tags = "autoescape|block|do|embed|extends|filter|flush|for|from|if|import|include|macro|sandbox|set|spaceless|use|verbatim"; tags = tags + "|end" + tags.replace(/\|/g, "|end"); var filters = "abs|batch|capitalize|convert_encoding|date|date_modify|default|e|escape|first|format|join|json_encode|keys|last|length|lower|merge|nl2br|number_format|raw|replace|reverse|slice|sort|split|striptags|title|trim|upper|url_encode"; var functions = "attribute|constant|cycle|date|dump|parent|random|range|template_from_string"; var tests = "constant|divisibleby|sameas|defined|empty|even|iterable|odd"; var constants = "null|none|true|false"; var operators = "b-and|b-xor|b-or|in|is|and|or|not" var keywordMapper = this.createKeywordMapper({ "keyword.control.twig": tags, "support.function.twig": [filters, functions, tests].join("|"), "keyword.operator.twig": operators, "constant.language.twig": constants }, "identifier"); for (var rule in this.$rules) { this.$rules[rule].unshift({ token : "variable.other.readwrite.local.twig", regex : "\\{\\{-?", push : "twig-start" }, { token : "meta.tag.twig", regex : "\\{%-?", push : "twig-start" }, { token : "comment.block.twig", regex : "\\{#-?", push : "twig-comment" }); } this.$rules["twig-comment"] = [{ token : "comment.block.twig", regex : ".*-?#\\}", next : "pop" }]; this.$rules["twig-start"] = [{ token : "variable.other.readwrite.local.twig", regex : "-?\\}\\}", next : "pop" }, { token : "meta.tag.twig", regex : "-?%\\}", next : "pop" }, { token : "string", regex : "'", next : "twig-qstring" }, { token : "string", regex : '"', next : "twig-qqstring" }, { token : "constant.numeric", // hex regex : "0[xX][0-9a-fA-F]+\\b" }, { token : "constant.numeric", // float regex : "[+-]?\\d+(?:(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)?\\b" }, { token : "constant.language.boolean", regex : "(?:true|false)\\b" }, { token : keywordMapper, regex : "[a-zA-Z_$][a-zA-Z0-9_$]*\\b" }, { token : "keyword.operator.assignment", regex : "=|~" }, { token : "keyword.operator.comparison", regex : "==|!=|<|>|>=|<=|===" }, { token : "keyword.operator.arithmetic", regex : "\\+|-|/|%|//|\\*|\\*\\*" }, { token : "keyword.operator.other", regex : "\\.\\.|\\|" }, { token : "punctuation.operator", regex : /\?|\:|\,|\;|\./ }, { token : "paren.lparen", regex : /[\[\({]/ }, { token : "paren.rparen", regex : /[\])}]/ }, { token : "text", regex : "\\s+" } ]; this.$rules["twig-qqstring"] = [{ token : "constant.language.escape", regex : /\\[\\"$#ntr]|#{[^"}]*}/ }, { token : "string", regex : '"', next : "twig-start" }, { defaultToken : "string" } ]; this.$rules["twig-qstring"] = [{ token : "constant.language.escape", regex : /\\[\\'ntr]}/ }, { token : "string", regex : "'", next : "twig-start" }, { defaultToken : "string" } ]; this.normalizeRules(); }; oop.inherits(TwigHighlightRules, TextHighlightRules); exports.TwigHighlightRules = TwigHighlightRules; }); ace.define("ace/mode/twig",["require","exports","module","ace/lib/oop","ace/mode/html","ace/mode/twig_highlight_rules","ace/mode/matching_brace_outdent"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var HtmlMode = require("./html").Mode; var TwigHighlightRules = require("./twig_highlight_rules").TwigHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var Mode = function() { HtmlMode.call(this); this.HighlightRules = TwigHighlightRules; this.$outdent = new MatchingBraceOutdent(); }; oop.inherits(Mode, HtmlMode); (function() { this.blockComment = {start: "{#", end: "#}"}; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); var tokenizedLine = this.getTokenizer().getLineTokens(line, state); var tokens = tokenizedLine.tokens; var endState = tokenizedLine.state; if (tokens.length && tokens[tokens.length-1].type == "comment") { return indent; } if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/twig"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/mode-yaml.js ================================================ ace.define("ace/mode/yaml_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; var YamlHighlightRules = function() { this.$rules = { "start" : [ { token : "comment", regex : "#.*$" }, { token : "list.markup", regex : /^(?:-{3}|\.{3})\s*(?=#|$)/ }, { token : "list.markup", regex : /^\s*[\-?](?:$|\s)/ }, { token: "constant", regex: "!![\\w//]+" }, { token: "constant.language", regex: "[&\\*][a-zA-Z0-9-_]+" }, { token: ["meta.tag", "keyword"], regex: /^(\s*\w.*?)(\:(?:\s+|$))/ },{ token: ["meta.tag", "keyword"], regex: /(\w+?)(\s*\:(?:\s+|$))/ }, { token : "keyword.operator", regex : "<<\\w*:\\w*" }, { token : "keyword.operator", regex : "-\\s*(?=[{])" }, { token : "string", // single line regex : '["](?:(?:\\\\.)|(?:[^"\\\\]))*?["]' }, { token : "string", // multi line string start regex : '[|>][-+\\d\\s]*$', next : "qqstring" }, { token : "string", // single quoted string regex : "['](?:(?:\\\\.)|(?:[^'\\\\]))*?[']" }, { token : "constant.numeric", // float regex : /(\b|[+\-\.])[\d_]+(?:(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)/ }, { token : "constant.numeric", // other number regex : /[+\-]?\.inf\b|NaN\b|0x[\dA-Fa-f_]+|0b[10_]+/ }, { token : "constant.language.boolean", regex : "(?:true|false|TRUE|FALSE|True|False|yes|no)\\b" }, { token : "paren.lparen", regex : "[[({]" }, { token : "paren.rparen", regex : "[\\])}]" } ], "qqstring" : [ { token : "string", regex : '(?=(?:(?:\\\\.)|(?:[^:]))*?:)', next : "start" }, { token : "string", regex : '.+' } ]}; }; oop.inherits(YamlHighlightRules, TextHighlightRules); exports.YamlHighlightRules = YamlHighlightRules; }); ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var MatchingBraceOutdent = function() {}; (function() { this.checkOutdent = function(line, input) { if (! /^\s+$/.test(line)) return false; return /^\s*\}/.test(input); }; this.autoOutdent = function(doc, row) { var line = doc.getLine(row); var match = line.match(/^(\s*\})/); if (!match) return 0; var column = match[1].length; var openBracePos = doc.findMatchingBracket({row: row, column: column}); if (!openBracePos || openBracePos.row == row) return 0; var indent = this.$getIndent(doc.getLine(openBracePos.row)); doc.replace(new Range(row, 0, row, column-1), indent); }; this.$getIndent = function(line) { return line.match(/^\s*/)[0]; }; }).call(MatchingBraceOutdent.prototype); exports.MatchingBraceOutdent = MatchingBraceOutdent; }); ace.define("ace/mode/folding/coffee",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode","ace/range"], function(require, exports, module) { "use strict"; var oop = require("../../lib/oop"); var BaseFoldMode = require("./fold_mode").FoldMode; var Range = require("../../range").Range; var FoldMode = exports.FoldMode = function() {}; oop.inherits(FoldMode, BaseFoldMode); (function() { this.getFoldWidgetRange = function(session, foldStyle, row) { var range = this.indentationBlock(session, row); if (range) return range; var re = /\S/; var line = session.getLine(row); var startLevel = line.search(re); if (startLevel == -1 || line[startLevel] != "#") return; var startColumn = line.length; var maxRow = session.getLength(); var startRow = row; var endRow = row; while (++row < maxRow) { line = session.getLine(row); var level = line.search(re); if (level == -1) continue; if (line[level] != "#") break; endRow = row; } if (endRow > startRow) { var endColumn = session.getLine(endRow).length; return new Range(startRow, startColumn, endRow, endColumn); } }; this.getFoldWidget = function(session, foldStyle, row) { var line = session.getLine(row); var indent = line.search(/\S/); var next = session.getLine(row + 1); var prev = session.getLine(row - 1); var prevIndent = prev.search(/\S/); var nextIndent = next.search(/\S/); if (indent == -1) { session.foldWidgets[row - 1] = prevIndent!= -1 && prevIndent < nextIndent ? "start" : ""; return ""; } if (prevIndent == -1) { if (indent == nextIndent && line[indent] == "#" && next[indent] == "#") { session.foldWidgets[row - 1] = ""; session.foldWidgets[row + 1] = ""; return "start"; } } else if (prevIndent == indent && line[indent] == "#" && prev[indent] == "#") { if (session.getLine(row - 2).search(/\S/) == -1) { session.foldWidgets[row - 1] = "start"; session.foldWidgets[row + 1] = ""; return ""; } } if (prevIndent!= -1 && prevIndent < indent) session.foldWidgets[row - 1] = "start"; else session.foldWidgets[row - 1] = ""; if (indent < nextIndent) return "start"; else return ""; }; }).call(FoldMode.prototype); }); ace.define("ace/mode/yaml",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/yaml_highlight_rules","ace/mode/matching_brace_outdent","ace/mode/folding/coffee"], function(require, exports, module) { "use strict"; var oop = require("../lib/oop"); var TextMode = require("./text").Mode; var YamlHighlightRules = require("./yaml_highlight_rules").YamlHighlightRules; var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; var FoldMode = require("./folding/coffee").FoldMode; var Mode = function() { this.HighlightRules = YamlHighlightRules; this.$outdent = new MatchingBraceOutdent(); this.foldingRules = new FoldMode(); }; oop.inherits(Mode, TextMode); (function() { this.lineCommentStart = "#"; this.getNextLineIndent = function(state, line, tab) { var indent = this.$getIndent(line); if (state == "start") { var match = line.match(/^.*[\{\(\[]\s*$/); if (match) { indent += tab; } } return indent; }; this.checkOutdent = function(state, line, input) { return this.$outdent.checkOutdent(line, input); }; this.autoOutdent = function(state, doc, row) { this.$outdent.autoOutdent(doc, row); }; this.$id = "ace/mode/yaml"; }).call(Mode.prototype); exports.Mode = Mode; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/css.js ================================================ ace.define("ace/snippets/css",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet .\n\ ${1} {\n\ ${2}\n\ }\n\ snippet !\n\ !important\n\ snippet bdi:m+\n\ -moz-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\n\ snippet bdi:m\n\ -moz-border-image: ${1};\n\ snippet bdrz:m\n\ -moz-border-radius: ${1};\n\ snippet bxsh:m+\n\ -moz-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet bxsh:m\n\ -moz-box-shadow: ${1};\n\ snippet bdi:w+\n\ -webkit-border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\n\ snippet bdi:w\n\ -webkit-border-image: ${1};\n\ snippet bdrz:w\n\ -webkit-border-radius: ${1};\n\ snippet bxsh:w+\n\ -webkit-box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet bxsh:w\n\ -webkit-box-shadow: ${1};\n\ snippet @f\n\ @font-face {\n\ font-family: ${1};\n\ src: url(${2});\n\ }\n\ snippet @i\n\ @import url(${1});\n\ snippet @m\n\ @media ${1:print} {\n\ ${2}\n\ }\n\ snippet bg+\n\ background: #${1:FFF} url(${2}) ${3:0} ${4:0} ${5:no-repeat};\n\ snippet bga\n\ background-attachment: ${1};\n\ snippet bga:f\n\ background-attachment: fixed;\n\ snippet bga:s\n\ background-attachment: scroll;\n\ snippet bgbk\n\ background-break: ${1};\n\ snippet bgbk:bb\n\ background-break: bounding-box;\n\ snippet bgbk:c\n\ background-break: continuous;\n\ snippet bgbk:eb\n\ background-break: each-box;\n\ snippet bgcp\n\ background-clip: ${1};\n\ snippet bgcp:bb\n\ background-clip: border-box;\n\ snippet bgcp:cb\n\ background-clip: content-box;\n\ snippet bgcp:nc\n\ background-clip: no-clip;\n\ snippet bgcp:pb\n\ background-clip: padding-box;\n\ snippet bgc\n\ background-color: #${1:FFF};\n\ snippet bgc:t\n\ background-color: transparent;\n\ snippet bgi\n\ background-image: url(${1});\n\ snippet bgi:n\n\ background-image: none;\n\ snippet bgo\n\ background-origin: ${1};\n\ snippet bgo:bb\n\ background-origin: border-box;\n\ snippet bgo:cb\n\ background-origin: content-box;\n\ snippet bgo:pb\n\ background-origin: padding-box;\n\ snippet bgpx\n\ background-position-x: ${1};\n\ snippet bgpy\n\ background-position-y: ${1};\n\ snippet bgp\n\ background-position: ${1:0} ${2:0};\n\ snippet bgr\n\ background-repeat: ${1};\n\ snippet bgr:n\n\ background-repeat: no-repeat;\n\ snippet bgr:x\n\ background-repeat: repeat-x;\n\ snippet bgr:y\n\ background-repeat: repeat-y;\n\ snippet bgr:r\n\ background-repeat: repeat;\n\ snippet bgz\n\ background-size: ${1};\n\ snippet bgz:a\n\ background-size: auto;\n\ snippet bgz:ct\n\ background-size: contain;\n\ snippet bgz:cv\n\ background-size: cover;\n\ snippet bg\n\ background: ${1};\n\ snippet bg:ie\n\ filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='${1}',sizingMethod='${2:crop}');\n\ snippet bg:n\n\ background: none;\n\ snippet bd+\n\ border: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdb+\n\ border-bottom: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdbc\n\ border-bottom-color: #${1:000};\n\ snippet bdbi\n\ border-bottom-image: url(${1});\n\ snippet bdbi:n\n\ border-bottom-image: none;\n\ snippet bdbli\n\ border-bottom-left-image: url(${1});\n\ snippet bdbli:c\n\ border-bottom-left-image: continue;\n\ snippet bdbli:n\n\ border-bottom-left-image: none;\n\ snippet bdblrz\n\ border-bottom-left-radius: ${1};\n\ snippet bdbri\n\ border-bottom-right-image: url(${1});\n\ snippet bdbri:c\n\ border-bottom-right-image: continue;\n\ snippet bdbri:n\n\ border-bottom-right-image: none;\n\ snippet bdbrrz\n\ border-bottom-right-radius: ${1};\n\ snippet bdbs\n\ border-bottom-style: ${1};\n\ snippet bdbs:n\n\ border-bottom-style: none;\n\ snippet bdbw\n\ border-bottom-width: ${1};\n\ snippet bdb\n\ border-bottom: ${1};\n\ snippet bdb:n\n\ border-bottom: none;\n\ snippet bdbk\n\ border-break: ${1};\n\ snippet bdbk:c\n\ border-break: close;\n\ snippet bdcl\n\ border-collapse: ${1};\n\ snippet bdcl:c\n\ border-collapse: collapse;\n\ snippet bdcl:s\n\ border-collapse: separate;\n\ snippet bdc\n\ border-color: #${1:000};\n\ snippet bdci\n\ border-corner-image: url(${1});\n\ snippet bdci:c\n\ border-corner-image: continue;\n\ snippet bdci:n\n\ border-corner-image: none;\n\ snippet bdf\n\ border-fit: ${1};\n\ snippet bdf:c\n\ border-fit: clip;\n\ snippet bdf:of\n\ border-fit: overwrite;\n\ snippet bdf:ow\n\ border-fit: overwrite;\n\ snippet bdf:r\n\ border-fit: repeat;\n\ snippet bdf:sc\n\ border-fit: scale;\n\ snippet bdf:sp\n\ border-fit: space;\n\ snippet bdf:st\n\ border-fit: stretch;\n\ snippet bdi\n\ border-image: url(${1}) ${2:0} ${3:0} ${4:0} ${5:0} ${6:stretch} ${7:stretch};\n\ snippet bdi:n\n\ border-image: none;\n\ snippet bdl+\n\ border-left: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdlc\n\ border-left-color: #${1:000};\n\ snippet bdli\n\ border-left-image: url(${1});\n\ snippet bdli:n\n\ border-left-image: none;\n\ snippet bdls\n\ border-left-style: ${1};\n\ snippet bdls:n\n\ border-left-style: none;\n\ snippet bdlw\n\ border-left-width: ${1};\n\ snippet bdl\n\ border-left: ${1};\n\ snippet bdl:n\n\ border-left: none;\n\ snippet bdlt\n\ border-length: ${1};\n\ snippet bdlt:a\n\ border-length: auto;\n\ snippet bdrz\n\ border-radius: ${1};\n\ snippet bdr+\n\ border-right: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdrc\n\ border-right-color: #${1:000};\n\ snippet bdri\n\ border-right-image: url(${1});\n\ snippet bdri:n\n\ border-right-image: none;\n\ snippet bdrs\n\ border-right-style: ${1};\n\ snippet bdrs:n\n\ border-right-style: none;\n\ snippet bdrw\n\ border-right-width: ${1};\n\ snippet bdr\n\ border-right: ${1};\n\ snippet bdr:n\n\ border-right: none;\n\ snippet bdsp\n\ border-spacing: ${1};\n\ snippet bds\n\ border-style: ${1};\n\ snippet bds:ds\n\ border-style: dashed;\n\ snippet bds:dtds\n\ border-style: dot-dash;\n\ snippet bds:dtdtds\n\ border-style: dot-dot-dash;\n\ snippet bds:dt\n\ border-style: dotted;\n\ snippet bds:db\n\ border-style: double;\n\ snippet bds:g\n\ border-style: groove;\n\ snippet bds:h\n\ border-style: hidden;\n\ snippet bds:i\n\ border-style: inset;\n\ snippet bds:n\n\ border-style: none;\n\ snippet bds:o\n\ border-style: outset;\n\ snippet bds:r\n\ border-style: ridge;\n\ snippet bds:s\n\ border-style: solid;\n\ snippet bds:w\n\ border-style: wave;\n\ snippet bdt+\n\ border-top: ${1:1px} ${2:solid} #${3:000};\n\ snippet bdtc\n\ border-top-color: #${1:000};\n\ snippet bdti\n\ border-top-image: url(${1});\n\ snippet bdti:n\n\ border-top-image: none;\n\ snippet bdtli\n\ border-top-left-image: url(${1});\n\ snippet bdtli:c\n\ border-corner-image: continue;\n\ snippet bdtli:n\n\ border-corner-image: none;\n\ snippet bdtlrz\n\ border-top-left-radius: ${1};\n\ snippet bdtri\n\ border-top-right-image: url(${1});\n\ snippet bdtri:c\n\ border-top-right-image: continue;\n\ snippet bdtri:n\n\ border-top-right-image: none;\n\ snippet bdtrrz\n\ border-top-right-radius: ${1};\n\ snippet bdts\n\ border-top-style: ${1};\n\ snippet bdts:n\n\ border-top-style: none;\n\ snippet bdtw\n\ border-top-width: ${1};\n\ snippet bdt\n\ border-top: ${1};\n\ snippet bdt:n\n\ border-top: none;\n\ snippet bdw\n\ border-width: ${1};\n\ snippet bd\n\ border: ${1};\n\ snippet bd:n\n\ border: none;\n\ snippet b\n\ bottom: ${1};\n\ snippet b:a\n\ bottom: auto;\n\ snippet bxsh+\n\ box-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet bxsh\n\ box-shadow: ${1};\n\ snippet bxsh:n\n\ box-shadow: none;\n\ snippet bxz\n\ box-sizing: ${1};\n\ snippet bxz:bb\n\ box-sizing: border-box;\n\ snippet bxz:cb\n\ box-sizing: content-box;\n\ snippet cps\n\ caption-side: ${1};\n\ snippet cps:b\n\ caption-side: bottom;\n\ snippet cps:t\n\ caption-side: top;\n\ snippet cl\n\ clear: ${1};\n\ snippet cl:b\n\ clear: both;\n\ snippet cl:l\n\ clear: left;\n\ snippet cl:n\n\ clear: none;\n\ snippet cl:r\n\ clear: right;\n\ snippet cp\n\ clip: ${1};\n\ snippet cp:a\n\ clip: auto;\n\ snippet cp:r\n\ clip: rect(${1:0} ${2:0} ${3:0} ${4:0});\n\ snippet c\n\ color: #${1:000};\n\ snippet ct\n\ content: ${1};\n\ snippet ct:a\n\ content: attr(${1});\n\ snippet ct:cq\n\ content: close-quote;\n\ snippet ct:c\n\ content: counter(${1});\n\ snippet ct:cs\n\ content: counters(${1});\n\ snippet ct:ncq\n\ content: no-close-quote;\n\ snippet ct:noq\n\ content: no-open-quote;\n\ snippet ct:n\n\ content: normal;\n\ snippet ct:oq\n\ content: open-quote;\n\ snippet coi\n\ counter-increment: ${1};\n\ snippet cor\n\ counter-reset: ${1};\n\ snippet cur\n\ cursor: ${1};\n\ snippet cur:a\n\ cursor: auto;\n\ snippet cur:c\n\ cursor: crosshair;\n\ snippet cur:d\n\ cursor: default;\n\ snippet cur:ha\n\ cursor: hand;\n\ snippet cur:he\n\ cursor: help;\n\ snippet cur:m\n\ cursor: move;\n\ snippet cur:p\n\ cursor: pointer;\n\ snippet cur:t\n\ cursor: text;\n\ snippet d\n\ display: ${1};\n\ snippet d:mib\n\ display: -moz-inline-box;\n\ snippet d:mis\n\ display: -moz-inline-stack;\n\ snippet d:b\n\ display: block;\n\ snippet d:cp\n\ display: compact;\n\ snippet d:ib\n\ display: inline-block;\n\ snippet d:itb\n\ display: inline-table;\n\ snippet d:i\n\ display: inline;\n\ snippet d:li\n\ display: list-item;\n\ snippet d:n\n\ display: none;\n\ snippet d:ri\n\ display: run-in;\n\ snippet d:tbcp\n\ display: table-caption;\n\ snippet d:tbc\n\ display: table-cell;\n\ snippet d:tbclg\n\ display: table-column-group;\n\ snippet d:tbcl\n\ display: table-column;\n\ snippet d:tbfg\n\ display: table-footer-group;\n\ snippet d:tbhg\n\ display: table-header-group;\n\ snippet d:tbrg\n\ display: table-row-group;\n\ snippet d:tbr\n\ display: table-row;\n\ snippet d:tb\n\ display: table;\n\ snippet ec\n\ empty-cells: ${1};\n\ snippet ec:h\n\ empty-cells: hide;\n\ snippet ec:s\n\ empty-cells: show;\n\ snippet exp\n\ expression()\n\ snippet fl\n\ float: ${1};\n\ snippet fl:l\n\ float: left;\n\ snippet fl:n\n\ float: none;\n\ snippet fl:r\n\ float: right;\n\ snippet f+\n\ font: ${1:1em} ${2:Arial},${3:sans-serif};\n\ snippet fef\n\ font-effect: ${1};\n\ snippet fef:eb\n\ font-effect: emboss;\n\ snippet fef:eg\n\ font-effect: engrave;\n\ snippet fef:n\n\ font-effect: none;\n\ snippet fef:o\n\ font-effect: outline;\n\ snippet femp\n\ font-emphasize-position: ${1};\n\ snippet femp:a\n\ font-emphasize-position: after;\n\ snippet femp:b\n\ font-emphasize-position: before;\n\ snippet fems\n\ font-emphasize-style: ${1};\n\ snippet fems:ac\n\ font-emphasize-style: accent;\n\ snippet fems:c\n\ font-emphasize-style: circle;\n\ snippet fems:ds\n\ font-emphasize-style: disc;\n\ snippet fems:dt\n\ font-emphasize-style: dot;\n\ snippet fems:n\n\ font-emphasize-style: none;\n\ snippet fem\n\ font-emphasize: ${1};\n\ snippet ff\n\ font-family: ${1};\n\ snippet ff:c\n\ font-family: ${1:'Monotype Corsiva','Comic Sans MS'},cursive;\n\ snippet ff:f\n\ font-family: ${1:Capitals,Impact},fantasy;\n\ snippet ff:m\n\ font-family: ${1:Monaco,'Courier New'},monospace;\n\ snippet ff:ss\n\ font-family: ${1:Helvetica,Arial},sans-serif;\n\ snippet ff:s\n\ font-family: ${1:Georgia,'Times New Roman'},serif;\n\ snippet fza\n\ font-size-adjust: ${1};\n\ snippet fza:n\n\ font-size-adjust: none;\n\ snippet fz\n\ font-size: ${1};\n\ snippet fsm\n\ font-smooth: ${1};\n\ snippet fsm:aw\n\ font-smooth: always;\n\ snippet fsm:a\n\ font-smooth: auto;\n\ snippet fsm:n\n\ font-smooth: never;\n\ snippet fst\n\ font-stretch: ${1};\n\ snippet fst:c\n\ font-stretch: condensed;\n\ snippet fst:e\n\ font-stretch: expanded;\n\ snippet fst:ec\n\ font-stretch: extra-condensed;\n\ snippet fst:ee\n\ font-stretch: extra-expanded;\n\ snippet fst:n\n\ font-stretch: normal;\n\ snippet fst:sc\n\ font-stretch: semi-condensed;\n\ snippet fst:se\n\ font-stretch: semi-expanded;\n\ snippet fst:uc\n\ font-stretch: ultra-condensed;\n\ snippet fst:ue\n\ font-stretch: ultra-expanded;\n\ snippet fs\n\ font-style: ${1};\n\ snippet fs:i\n\ font-style: italic;\n\ snippet fs:n\n\ font-style: normal;\n\ snippet fs:o\n\ font-style: oblique;\n\ snippet fv\n\ font-variant: ${1};\n\ snippet fv:n\n\ font-variant: normal;\n\ snippet fv:sc\n\ font-variant: small-caps;\n\ snippet fw\n\ font-weight: ${1};\n\ snippet fw:b\n\ font-weight: bold;\n\ snippet fw:br\n\ font-weight: bolder;\n\ snippet fw:lr\n\ font-weight: lighter;\n\ snippet fw:n\n\ font-weight: normal;\n\ snippet f\n\ font: ${1};\n\ snippet h\n\ height: ${1};\n\ snippet h:a\n\ height: auto;\n\ snippet l\n\ left: ${1};\n\ snippet l:a\n\ left: auto;\n\ snippet lts\n\ letter-spacing: ${1};\n\ snippet lh\n\ line-height: ${1};\n\ snippet lisi\n\ list-style-image: url(${1});\n\ snippet lisi:n\n\ list-style-image: none;\n\ snippet lisp\n\ list-style-position: ${1};\n\ snippet lisp:i\n\ list-style-position: inside;\n\ snippet lisp:o\n\ list-style-position: outside;\n\ snippet list\n\ list-style-type: ${1};\n\ snippet list:c\n\ list-style-type: circle;\n\ snippet list:dclz\n\ list-style-type: decimal-leading-zero;\n\ snippet list:dc\n\ list-style-type: decimal;\n\ snippet list:d\n\ list-style-type: disc;\n\ snippet list:lr\n\ list-style-type: lower-roman;\n\ snippet list:n\n\ list-style-type: none;\n\ snippet list:s\n\ list-style-type: square;\n\ snippet list:ur\n\ list-style-type: upper-roman;\n\ snippet lis\n\ list-style: ${1};\n\ snippet lis:n\n\ list-style: none;\n\ snippet mb\n\ margin-bottom: ${1};\n\ snippet mb:a\n\ margin-bottom: auto;\n\ snippet ml\n\ margin-left: ${1};\n\ snippet ml:a\n\ margin-left: auto;\n\ snippet mr\n\ margin-right: ${1};\n\ snippet mr:a\n\ margin-right: auto;\n\ snippet mt\n\ margin-top: ${1};\n\ snippet mt:a\n\ margin-top: auto;\n\ snippet m\n\ margin: ${1};\n\ snippet m:4\n\ margin: ${1:0} ${2:0} ${3:0} ${4:0};\n\ snippet m:3\n\ margin: ${1:0} ${2:0} ${3:0};\n\ snippet m:2\n\ margin: ${1:0} ${2:0};\n\ snippet m:0\n\ margin: 0;\n\ snippet m:a\n\ margin: auto;\n\ snippet mah\n\ max-height: ${1};\n\ snippet mah:n\n\ max-height: none;\n\ snippet maw\n\ max-width: ${1};\n\ snippet maw:n\n\ max-width: none;\n\ snippet mih\n\ min-height: ${1};\n\ snippet miw\n\ min-width: ${1};\n\ snippet op\n\ opacity: ${1};\n\ snippet op:ie\n\ filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100});\n\ snippet op:ms\n\ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity=${1:100})';\n\ snippet orp\n\ orphans: ${1};\n\ snippet o+\n\ outline: ${1:1px} ${2:solid} #${3:000};\n\ snippet oc\n\ outline-color: ${1:#000};\n\ snippet oc:i\n\ outline-color: invert;\n\ snippet oo\n\ outline-offset: ${1};\n\ snippet os\n\ outline-style: ${1};\n\ snippet ow\n\ outline-width: ${1};\n\ snippet o\n\ outline: ${1};\n\ snippet o:n\n\ outline: none;\n\ snippet ovs\n\ overflow-style: ${1};\n\ snippet ovs:a\n\ overflow-style: auto;\n\ snippet ovs:mq\n\ overflow-style: marquee;\n\ snippet ovs:mv\n\ overflow-style: move;\n\ snippet ovs:p\n\ overflow-style: panner;\n\ snippet ovs:s\n\ overflow-style: scrollbar;\n\ snippet ovx\n\ overflow-x: ${1};\n\ snippet ovx:a\n\ overflow-x: auto;\n\ snippet ovx:h\n\ overflow-x: hidden;\n\ snippet ovx:s\n\ overflow-x: scroll;\n\ snippet ovx:v\n\ overflow-x: visible;\n\ snippet ovy\n\ overflow-y: ${1};\n\ snippet ovy:a\n\ overflow-y: auto;\n\ snippet ovy:h\n\ overflow-y: hidden;\n\ snippet ovy:s\n\ overflow-y: scroll;\n\ snippet ovy:v\n\ overflow-y: visible;\n\ snippet ov\n\ overflow: ${1};\n\ snippet ov:a\n\ overflow: auto;\n\ snippet ov:h\n\ overflow: hidden;\n\ snippet ov:s\n\ overflow: scroll;\n\ snippet ov:v\n\ overflow: visible;\n\ snippet pb\n\ padding-bottom: ${1};\n\ snippet pl\n\ padding-left: ${1};\n\ snippet pr\n\ padding-right: ${1};\n\ snippet pt\n\ padding-top: ${1};\n\ snippet p\n\ padding: ${1};\n\ snippet p:4\n\ padding: ${1:0} ${2:0} ${3:0} ${4:0};\n\ snippet p:3\n\ padding: ${1:0} ${2:0} ${3:0};\n\ snippet p:2\n\ padding: ${1:0} ${2:0};\n\ snippet p:0\n\ padding: 0;\n\ snippet pgba\n\ page-break-after: ${1};\n\ snippet pgba:aw\n\ page-break-after: always;\n\ snippet pgba:a\n\ page-break-after: auto;\n\ snippet pgba:l\n\ page-break-after: left;\n\ snippet pgba:r\n\ page-break-after: right;\n\ snippet pgbb\n\ page-break-before: ${1};\n\ snippet pgbb:aw\n\ page-break-before: always;\n\ snippet pgbb:a\n\ page-break-before: auto;\n\ snippet pgbb:l\n\ page-break-before: left;\n\ snippet pgbb:r\n\ page-break-before: right;\n\ snippet pgbi\n\ page-break-inside: ${1};\n\ snippet pgbi:a\n\ page-break-inside: auto;\n\ snippet pgbi:av\n\ page-break-inside: avoid;\n\ snippet pos\n\ position: ${1};\n\ snippet pos:a\n\ position: absolute;\n\ snippet pos:f\n\ position: fixed;\n\ snippet pos:r\n\ position: relative;\n\ snippet pos:s\n\ position: static;\n\ snippet q\n\ quotes: ${1};\n\ snippet q:en\n\ quotes: '\\201C' '\\201D' '\\2018' '\\2019';\n\ snippet q:n\n\ quotes: none;\n\ snippet q:ru\n\ quotes: '\\00AB' '\\00BB' '\\201E' '\\201C';\n\ snippet rz\n\ resize: ${1};\n\ snippet rz:b\n\ resize: both;\n\ snippet rz:h\n\ resize: horizontal;\n\ snippet rz:n\n\ resize: none;\n\ snippet rz:v\n\ resize: vertical;\n\ snippet r\n\ right: ${1};\n\ snippet r:a\n\ right: auto;\n\ snippet tbl\n\ table-layout: ${1};\n\ snippet tbl:a\n\ table-layout: auto;\n\ snippet tbl:f\n\ table-layout: fixed;\n\ snippet tal\n\ text-align-last: ${1};\n\ snippet tal:a\n\ text-align-last: auto;\n\ snippet tal:c\n\ text-align-last: center;\n\ snippet tal:l\n\ text-align-last: left;\n\ snippet tal:r\n\ text-align-last: right;\n\ snippet ta\n\ text-align: ${1};\n\ snippet ta:c\n\ text-align: center;\n\ snippet ta:l\n\ text-align: left;\n\ snippet ta:r\n\ text-align: right;\n\ snippet td\n\ text-decoration: ${1};\n\ snippet td:l\n\ text-decoration: line-through;\n\ snippet td:n\n\ text-decoration: none;\n\ snippet td:o\n\ text-decoration: overline;\n\ snippet td:u\n\ text-decoration: underline;\n\ snippet te\n\ text-emphasis: ${1};\n\ snippet te:ac\n\ text-emphasis: accent;\n\ snippet te:a\n\ text-emphasis: after;\n\ snippet te:b\n\ text-emphasis: before;\n\ snippet te:c\n\ text-emphasis: circle;\n\ snippet te:ds\n\ text-emphasis: disc;\n\ snippet te:dt\n\ text-emphasis: dot;\n\ snippet te:n\n\ text-emphasis: none;\n\ snippet th\n\ text-height: ${1};\n\ snippet th:a\n\ text-height: auto;\n\ snippet th:f\n\ text-height: font-size;\n\ snippet th:m\n\ text-height: max-size;\n\ snippet th:t\n\ text-height: text-size;\n\ snippet ti\n\ text-indent: ${1};\n\ snippet ti:-\n\ text-indent: -9999px;\n\ snippet tj\n\ text-justify: ${1};\n\ snippet tj:a\n\ text-justify: auto;\n\ snippet tj:d\n\ text-justify: distribute;\n\ snippet tj:ic\n\ text-justify: inter-cluster;\n\ snippet tj:ii\n\ text-justify: inter-ideograph;\n\ snippet tj:iw\n\ text-justify: inter-word;\n\ snippet tj:k\n\ text-justify: kashida;\n\ snippet tj:t\n\ text-justify: tibetan;\n\ snippet to+\n\ text-outline: ${1:0} ${2:0} #${3:000};\n\ snippet to\n\ text-outline: ${1};\n\ snippet to:n\n\ text-outline: none;\n\ snippet tr\n\ text-replace: ${1};\n\ snippet tr:n\n\ text-replace: none;\n\ snippet tsh+\n\ text-shadow: ${1:0} ${2:0} ${3:0} #${4:000};\n\ snippet tsh\n\ text-shadow: ${1};\n\ snippet tsh:n\n\ text-shadow: none;\n\ snippet tt\n\ text-transform: ${1};\n\ snippet tt:c\n\ text-transform: capitalize;\n\ snippet tt:l\n\ text-transform: lowercase;\n\ snippet tt:n\n\ text-transform: none;\n\ snippet tt:u\n\ text-transform: uppercase;\n\ snippet tw\n\ text-wrap: ${1};\n\ snippet tw:no\n\ text-wrap: none;\n\ snippet tw:n\n\ text-wrap: normal;\n\ snippet tw:s\n\ text-wrap: suppress;\n\ snippet tw:u\n\ text-wrap: unrestricted;\n\ snippet t\n\ top: ${1};\n\ snippet t:a\n\ top: auto;\n\ snippet va\n\ vertical-align: ${1};\n\ snippet va:bl\n\ vertical-align: baseline;\n\ snippet va:b\n\ vertical-align: bottom;\n\ snippet va:m\n\ vertical-align: middle;\n\ snippet va:sub\n\ vertical-align: sub;\n\ snippet va:sup\n\ vertical-align: super;\n\ snippet va:tb\n\ vertical-align: text-bottom;\n\ snippet va:tt\n\ vertical-align: text-top;\n\ snippet va:t\n\ vertical-align: top;\n\ snippet v\n\ visibility: ${1};\n\ snippet v:c\n\ visibility: collapse;\n\ snippet v:h\n\ visibility: hidden;\n\ snippet v:v\n\ visibility: visible;\n\ snippet whsc\n\ white-space-collapse: ${1};\n\ snippet whsc:ba\n\ white-space-collapse: break-all;\n\ snippet whsc:bs\n\ white-space-collapse: break-strict;\n\ snippet whsc:k\n\ white-space-collapse: keep-all;\n\ snippet whsc:l\n\ white-space-collapse: loose;\n\ snippet whsc:n\n\ white-space-collapse: normal;\n\ snippet whs\n\ white-space: ${1};\n\ snippet whs:n\n\ white-space: normal;\n\ snippet whs:nw\n\ white-space: nowrap;\n\ snippet whs:pl\n\ white-space: pre-line;\n\ snippet whs:pw\n\ white-space: pre-wrap;\n\ snippet whs:p\n\ white-space: pre;\n\ snippet wid\n\ widows: ${1};\n\ snippet w\n\ width: ${1};\n\ snippet w:a\n\ width: auto;\n\ snippet wob\n\ word-break: ${1};\n\ snippet wob:ba\n\ word-break: break-all;\n\ snippet wob:bs\n\ word-break: break-strict;\n\ snippet wob:k\n\ word-break: keep-all;\n\ snippet wob:l\n\ word-break: loose;\n\ snippet wob:n\n\ word-break: normal;\n\ snippet wos\n\ word-spacing: ${1};\n\ snippet wow\n\ word-wrap: ${1};\n\ snippet wow:no\n\ word-wrap: none;\n\ snippet wow:n\n\ word-wrap: normal;\n\ snippet wow:s\n\ word-wrap: suppress;\n\ snippet wow:u\n\ word-wrap: unrestricted;\n\ snippet z\n\ z-index: ${1};\n\ snippet z:a\n\ z-index: auto;\n\ snippet zoo\n\ zoom: 1;\n\ "; exports.scope = "css"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/html.js ================================================ ace.define("ace/snippets/html",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Some useful Unicode entities\n\ # Non-Breaking Space\n\ snippet nbs\n\  \n\ # ←\n\ snippet left\n\ ←\n\ # →\n\ snippet right\n\ →\n\ # ↑\n\ snippet up\n\ ↑\n\ # ↓\n\ snippet down\n\ ↓\n\ # ↩\n\ snippet return\n\ ↩\n\ # ⇤\n\ snippet backtab\n\ ⇤\n\ # ⇥\n\ snippet tab\n\ ⇥\n\ # ⇧\n\ snippet shift\n\ ⇧\n\ # ⌃\n\ snippet ctrl\n\ ⌃\n\ # ⌅\n\ snippet enter\n\ ⌅\n\ # ⌘\n\ snippet cmd\n\ ⌘\n\ # ⌥\n\ snippet option\n\ ⌥\n\ # ⌦\n\ snippet delete\n\ ⌦\n\ # ⌫\n\ snippet backspace\n\ ⌫\n\ # ⎋\n\ snippet esc\n\ ⎋\n\ # Generic Doctype\n\ snippet doctype HTML 4.01 Strict\n\ <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n\ \"http://www.w3.org/TR/html4/strict.dtd\">\n\ snippet doctype HTML 4.01 Transitional\n\ <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\ \"http://www.w3.org/TR/html4/loose.dtd\">\n\ snippet doctype HTML 5\n\ <!DOCTYPE HTML>\n\ snippet doctype XHTML 1.0 Frameset\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\ \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n\ snippet doctype XHTML 1.0 Strict\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\ \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n\ snippet doctype XHTML 1.0 Transitional\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\ \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n\ snippet doctype XHTML 1.1\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n\ \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n\ # HTML Doctype 4.01 Strict\n\ snippet docts\n\ <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\n\ \"http://www.w3.org/TR/html4/strict.dtd\">\n\ # HTML Doctype 4.01 Transitional\n\ snippet doct\n\ <!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\"\n\ \"http://www.w3.org/TR/html4/loose.dtd\">\n\ # HTML Doctype 5\n\ snippet doct5\n\ <!DOCTYPE HTML>\n\ # XHTML Doctype 1.0 Frameset\n\ snippet docxf\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Frameset//EN\"\n\ \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd\">\n\ # XHTML Doctype 1.0 Strict\n\ snippet docxs\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n\ \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n\ # XHTML Doctype 1.0 Transitional\n\ snippet docxt\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\ \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n\ # XHTML Doctype 1.1\n\ snippet docx\n\ <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\"\n\ \"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd\">\n\ # Attributes\n\ snippet attr\n\ ${1:attribute}=\"${2:property}\"\n\ snippet attr+\n\ ${1:attribute}=\"${2:property}\" attr+${3}\n\ snippet .\n\ class=\"${1}\"${2}\n\ snippet #\n\ id=\"${1}\"${2}\n\ snippet alt\n\ alt=\"${1}\"${2}\n\ snippet charset\n\ charset=\"${1:utf-8}\"${2}\n\ snippet data\n\ data-${1}=\"${2:$1}\"${3}\n\ snippet for\n\ for=\"${1}\"${2}\n\ snippet height\n\ height=\"${1}\"${2}\n\ snippet href\n\ href=\"${1:#}\"${2}\n\ snippet lang\n\ lang=\"${1:en}\"${2}\n\ snippet media\n\ media=\"${1}\"${2}\n\ snippet name\n\ name=\"${1}\"${2}\n\ snippet rel\n\ rel=\"${1}\"${2}\n\ snippet scope\n\ scope=\"${1:row}\"${2}\n\ snippet src\n\ src=\"${1}\"${2}\n\ snippet title=\n\ title=\"${1}\"${2}\n\ snippet type\n\ type=\"${1}\"${2}\n\ snippet value\n\ value=\"${1}\"${2}\n\ snippet width\n\ width=\"${1}\"${2}\n\ # Elements\n\ snippet a\n\ <a href=\"${1:#}\">${2:$1}</a>\n\ snippet a.\n\ <a class=\"${1}\" href=\"${2:#}\">${3:$1}</a>\n\ snippet a#\n\ <a id=\"${1}\" href=\"${2:#}\">${3:$1}</a>\n\ snippet a:ext\n\ <a href=\"http://${1:example.com}\">${2:$1}</a>\n\ snippet a:mail\n\ <a href=\"mailto:${1:joe@example.com}?subject=${2:feedback}\">${3:email me}</a>\n\ snippet abbr\n\ <abbr title=\"${1}\">${2}</abbr>\n\ snippet address\n\ <address>\n\ ${1}\n\ </address>\n\ snippet area\n\ <area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\n\ snippet area+\n\ <area shape=\"${1:rect}\" coords=\"${2}\" href=\"${3}\" alt=\"${4}\" />\n\ area+${5}\n\ snippet area:c\n\ <area shape=\"circle\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\n\ snippet area:d\n\ <area shape=\"default\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\n\ snippet area:p\n\ <area shape=\"poly\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\n\ snippet area:r\n\ <area shape=\"rect\" coords=\"${1}\" href=\"${2}\" alt=\"${3}\" />\n\ snippet article\n\ <article>\n\ ${1}\n\ </article>\n\ snippet article.\n\ <article class=\"${1}\">\n\ ${2}\n\ </article>\n\ snippet article#\n\ <article id=\"${1}\">\n\ ${2}\n\ </article>\n\ snippet aside\n\ <aside>\n\ ${1}\n\ </aside>\n\ snippet aside.\n\ <aside class=\"${1}\">\n\ ${2}\n\ </aside>\n\ snippet aside#\n\ <aside id=\"${1}\">\n\ ${2}\n\ </aside>\n\ snippet audio\n\ <audio src=\"${1}>${2}</audio>\n\ snippet b\n\ <b>${1}</b>\n\ snippet base\n\ <base href=\"${1}\" target=\"${2}\" />\n\ snippet bdi\n\ <bdi>${1}</bdo>\n\ snippet bdo\n\ <bdo dir=\"${1}\">${2}</bdo>\n\ snippet bdo:l\n\ <bdo dir=\"ltr\">${1}</bdo>\n\ snippet bdo:r\n\ <bdo dir=\"rtl\">${1}</bdo>\n\ snippet blockquote\n\ <blockquote>\n\ ${1}\n\ </blockquote>\n\ snippet body\n\ <body>\n\ ${1}\n\ </body>\n\ snippet br\n\ <br />${1}\n\ snippet button\n\ <button type=\"${1:submit}\">${2}</button>\n\ snippet button.\n\ <button class=\"${1:button}\" type=\"${2:submit}\">${3}</button>\n\ snippet button#\n\ <button id=\"${1}\" type=\"${2:submit}\">${3}</button>\n\ snippet button:s\n\ <button type=\"submit\">${1}</button>\n\ snippet button:r\n\ <button type=\"reset\">${1}</button>\n\ snippet canvas\n\ <canvas>\n\ ${1}\n\ </canvas>\n\ snippet caption\n\ <caption>${1}</caption>\n\ snippet cite\n\ <cite>${1}</cite>\n\ snippet code\n\ <code>${1}</code>\n\ snippet col\n\ <col />${1}\n\ snippet col+\n\ <col />\n\ col+${1}\n\ snippet colgroup\n\ <colgroup>\n\ ${1}\n\ </colgroup>\n\ snippet colgroup+\n\ <colgroup>\n\ <col />\n\ col+${1}\n\ </colgroup>\n\ snippet command\n\ <command type=\"command\" label=\"${1}\" icon=\"${2}\" />\n\ snippet command:c\n\ <command type=\"checkbox\" label=\"${1}\" icon=\"${2}\" />\n\ snippet command:r\n\ <command type=\"radio\" radiogroup=\"${1}\" label=\"${2}\" icon=\"${3}\" />\n\ snippet datagrid\n\ <datagrid>\n\ ${1}\n\ </datagrid>\n\ snippet datalist\n\ <datalist>\n\ ${1}\n\ </datalist>\n\ snippet datatemplate\n\ <datatemplate>\n\ ${1}\n\ </datatemplate>\n\ snippet dd\n\ <dd>${1}</dd>\n\ snippet dd.\n\ <dd class=\"${1}\">${2}</dd>\n\ snippet dd#\n\ <dd id=\"${1}\">${2}</dd>\n\ snippet del\n\ <del>${1}</del>\n\ snippet details\n\ <details>${1}</details>\n\ snippet dfn\n\ <dfn>${1}</dfn>\n\ snippet dialog\n\ <dialog>\n\ ${1}\n\ </dialog>\n\ snippet div\n\ <div>\n\ ${1}\n\ </div>\n\ snippet div.\n\ <div class=\"${1}\">\n\ ${2}\n\ </div>\n\ snippet div#\n\ <div id=\"${1}\">\n\ ${2}\n\ </div>\n\ snippet dl\n\ <dl>\n\ ${1}\n\ </dl>\n\ snippet dl.\n\ <dl class=\"${1}\">\n\ ${2}\n\ </dl>\n\ snippet dl#\n\ <dl id=\"${1}\">\n\ ${2}\n\ </dl>\n\ snippet dl+\n\ <dl>\n\ <dt>${1}</dt>\n\ <dd>${2}</dd>\n\ dt+${3}\n\ </dl>\n\ snippet dt\n\ <dt>${1}</dt>\n\ snippet dt.\n\ <dt class=\"${1}\">${2}</dt>\n\ snippet dt#\n\ <dt id=\"${1}\">${2}</dt>\n\ snippet dt+\n\ <dt>${1}</dt>\n\ <dd>${2}</dd>\n\ dt+${3}\n\ snippet em\n\ <em>${1}</em>\n\ snippet embed\n\ <embed src=${1} type=\"${2} />\n\ snippet fieldset\n\ <fieldset>\n\ ${1}\n\ </fieldset>\n\ snippet fieldset.\n\ <fieldset class=\"${1}\">\n\ ${2}\n\ </fieldset>\n\ snippet fieldset#\n\ <fieldset id=\"${1}\">\n\ ${2}\n\ </fieldset>\n\ snippet fieldset+\n\ <fieldset>\n\ <legend><span>${1}</span></legend>\n\ ${2}\n\ </fieldset>\n\ fieldset+${3}\n\ snippet figcaption\n\ <figcaption>${1}</figcaption>\n\ snippet figure\n\ <figure>${1}</figure>\n\ snippet footer\n\ <footer>\n\ ${1}\n\ </footer>\n\ snippet footer.\n\ <footer class=\"${1}\">\n\ ${2}\n\ </footer>\n\ snippet footer#\n\ <footer id=\"${1}\">\n\ ${2}\n\ </footer>\n\ snippet form\n\ <form action=\"${1}\" method=\"${2:get}\" accept-charset=\"utf-8\">\n\ ${3}\n\ </form>\n\ snippet form.\n\ <form class=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\n\ ${4}\n\ </form>\n\ snippet form#\n\ <form id=\"${1}\" action=\"${2}\" method=\"${3:get}\" accept-charset=\"utf-8\">\n\ ${4}\n\ </form>\n\ snippet h1\n\ <h1>${1}</h1>\n\ snippet h1.\n\ <h1 class=\"${1}\">${2}</h1>\n\ snippet h1#\n\ <h1 id=\"${1}\">${2}</h1>\n\ snippet h2\n\ <h2>${1}</h2>\n\ snippet h2.\n\ <h2 class=\"${1}\">${2}</h2>\n\ snippet h2#\n\ <h2 id=\"${1}\">${2}</h2>\n\ snippet h3\n\ <h3>${1}</h3>\n\ snippet h3.\n\ <h3 class=\"${1}\">${2}</h3>\n\ snippet h3#\n\ <h3 id=\"${1}\">${2}</h3>\n\ snippet h4\n\ <h4>${1}</h4>\n\ snippet h4.\n\ <h4 class=\"${1}\">${2}</h4>\n\ snippet h4#\n\ <h4 id=\"${1}\">${2}</h4>\n\ snippet h5\n\ <h5>${1}</h5>\n\ snippet h5.\n\ <h5 class=\"${1}\">${2}</h5>\n\ snippet h5#\n\ <h5 id=\"${1}\">${2}</h5>\n\ snippet h6\n\ <h6>${1}</h6>\n\ snippet h6.\n\ <h6 class=\"${1}\">${2}</h6>\n\ snippet h6#\n\ <h6 id=\"${1}\">${2}</h6>\n\ snippet head\n\ <head>\n\ <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n\ \n\ <title>${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}\n\ ${2}\n\ \n\ snippet header\n\
    \n\ ${1}\n\
    \n\ snippet header.\n\
    \n\ ${2}\n\
    \n\ snippet header#\n\
    \n\ ${2}\n\
    \n\ snippet hgroup\n\
    \n\ ${1}\n\
    \n\ snippet hgroup.\n\
    \n\ ${2}\n\
    \n\ snippet hr\n\
    ${1}\n\ snippet html\n\ \n\ ${1}\n\ \n\ snippet xhtml\n\ \n\ ${1}\n\ \n\ snippet html5\n\ \n\ \n\ \n\ \n\ ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}\n\ ${2:meta}\n\ \n\ \n\ ${3:body}\n\ \n\ \n\ snippet i\n\ ${1}\n\ snippet iframe\n\ ${2}\n\ snippet iframe.\n\ ${3}\n\ snippet iframe#\n\ ${3}\n\ snippet img\n\ \"${2}\"${3}\n\ snippet img.\n\ \"${3}\"${4}\n\ snippet img#\n\ \"${3}\"${4}\n\ snippet input\n\ ${5}\n\ snippet input.\n\ ${6}\n\ snippet input:text\n\ ${4}\n\ snippet input:submit\n\ ${4}\n\ snippet input:hidden\n\ ${4}\n\ snippet input:button\n\ ${4}\n\ snippet input:image\n\ ${5}\n\ snippet input:checkbox\n\ ${3}\n\ snippet input:radio\n\ ${3}\n\ snippet input:color\n\ ${4}\n\ snippet input:date\n\ ${4}\n\ snippet input:datetime\n\ ${4}\n\ snippet input:datetime-local\n\ ${4}\n\ snippet input:email\n\ ${4}\n\ snippet input:file\n\ ${4}\n\ snippet input:month\n\ ${4}\n\ snippet input:number\n\ ${4}\n\ snippet input:password\n\ ${4}\n\ snippet input:range\n\ ${4}\n\ snippet input:reset\n\ ${4}\n\ snippet input:search\n\ ${4}\n\ snippet input:time\n\ ${4}\n\ snippet input:url\n\ ${4}\n\ snippet input:week\n\ ${4}\n\ snippet ins\n\ ${1}\n\ snippet kbd\n\ ${1}\n\ snippet keygen\n\ ${1}\n\ snippet label\n\ \n\ snippet label:i\n\ \n\ ${7}\n\ snippet label:s\n\ \n\ \n\ snippet legend\n\ ${1}\n\ snippet legend+\n\ ${1}\n\ snippet li\n\
  • ${1}
  • \n\ snippet li.\n\
  • ${2}
  • \n\ snippet li+\n\
  • ${1}
  • \n\ li+${2}\n\ snippet lia\n\
  • ${1}
  • \n\ snippet lia+\n\
  • ${1}
  • \n\ lia+${3}\n\ snippet link\n\ ${5}\n\ snippet link:atom\n\ ${2}\n\ snippet link:css\n\ ${4}\n\ snippet link:favicon\n\ ${2}\n\ snippet link:rss\n\ ${2}\n\ snippet link:touch\n\ ${2}\n\ snippet map\n\ \n\ ${2}\n\ \n\ snippet map.\n\ \n\ ${3}\n\ \n\ snippet map#\n\ \n\ ${3}\n\ \n\ snippet map+\n\ \n\ \"${5}\"${6}\n\ ${7}\n\ snippet mark\n\ ${1}\n\ snippet menu\n\ \n\ ${1}\n\ \n\ snippet menu:c\n\ \n\ ${1}\n\ \n\ snippet menu:t\n\ \n\ ${1}\n\ \n\ snippet meta\n\ ${3}\n\ snippet meta:compat\n\ ${3}\n\ snippet meta:refresh\n\ ${3}\n\ snippet meta:utf\n\ ${3}\n\ snippet meter\n\ ${1}\n\ snippet nav\n\ \n\ snippet nav.\n\ \n\ snippet nav#\n\ \n\ snippet noscript\n\ \n\ snippet object\n\ \n\ ${3}\n\ ${4}\n\ # Embed QT Movie\n\ snippet movie\n\ \n\ \n\ \n\ \n\ \n\ ${6}\n\ snippet ol\n\
      \n\ ${1}\n\
    \n\ snippet ol.\n\
      \n\ ${2}\n\
    \n\ snippet ol#\n\
      \n\ ${2}\n\
    \n\ snippet ol+\n\
      \n\
    1. ${1}
    2. \n\ li+${2}\n\
    \n\ snippet opt\n\ \n\ snippet opt+\n\ \n\ opt+${3}\n\ snippet optt\n\ \n\ snippet optgroup\n\ \n\ \n\ opt+${3}\n\ \n\ snippet output\n\ ${1}\n\ snippet p\n\

    ${1}

    \n\ snippet param\n\ ${3}\n\ snippet pre\n\
    \n\
    		${1}\n\
    	
    \n\ snippet progress\n\ ${1}\n\ snippet q\n\ ${1}\n\ snippet rp\n\ ${1}\n\ snippet rt\n\ ${1}\n\ snippet ruby\n\ \n\ ${1}\n\ \n\ snippet s\n\ ${1}\n\ snippet samp\n\ \n\ ${1}\n\ \n\ snippet script\n\ \n\ snippet scriptsrc\n\ \n\ snippet section\n\
    \n\ ${1}\n\
    \n\ snippet section.\n\
    \n\ ${2}\n\
    \n\ snippet section#\n\
    \n\ ${2}\n\
    \n\ snippet select\n\ \n\ snippet select.\n\ \n\ snippet select+\n\ \n\ snippet small\n\ ${1}\n\ snippet source\n\ \n\ snippet span\n\ ${1}\n\ snippet strong\n\ ${1}\n\ snippet style\n\ \n\ snippet sub\n\ ${1}\n\ snippet summary\n\ \n\ ${1}\n\ \n\ snippet sup\n\ ${1}\n\ snippet table\n\ \n\ ${2}\n\
    \n\ snippet table.\n\ \n\ ${3}\n\
    \n\ snippet table#\n\ \n\ ${3}\n\
    \n\ snippet tbody\n\ \n\ ${1}\n\ \n\ snippet td\n\ ${1}\n\ snippet td.\n\ ${2}\n\ snippet td#\n\ ${2}\n\ snippet td+\n\ ${1}\n\ td+${2}\n\ snippet textarea\n\ ${6}\n\ snippet tfoot\n\ \n\ ${1}\n\ \n\ snippet th\n\ ${1}\n\ snippet th.\n\ ${2}\n\ snippet th#\n\ ${2}\n\ snippet th+\n\ ${1}\n\ th+${2}\n\ snippet thead\n\ \n\ ${1}\n\ \n\ snippet time\n\ \n\ snippet title\n\ ${1:`substitute(Filename('', 'Page Title'), '^.', '\\u&', '')`}\n\ snippet tr\n\ \n\ ${1}\n\ \n\ snippet tr+\n\ \n\ ${1}\n\ td+${2}\n\ \n\ snippet track\n\ ${5}${6}\n\ snippet ul\n\
      \n\ ${1}\n\
    \n\ snippet ul.\n\
      \n\ ${2}\n\
    \n\ snippet ul#\n\
      \n\ ${2}\n\
    \n\ snippet ul+\n\
      \n\
    • ${1}
    • \n\ li+${2}\n\
    \n\ snippet var\n\ ${1}\n\ snippet video\n\ ${8}\n\ snippet wbr\n\ ${1}\n\ "; exports.scope = "html"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/javascript.js ================================================ ace.define("ace/snippets/javascript",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Prototype\n\ snippet proto\n\ ${1:class_name}.prototype.${2:method_name} = function(${3:first_argument}) {\n\ ${4:// body...}\n\ };\n\ # Function\n\ snippet fun\n\ function ${1?:function_name}(${2:argument}) {\n\ ${3:// body...}\n\ }\n\ # Anonymous Function\n\ regex /((=)\\s*|(:)\\s*|(\\()|\\b)/f/(\\))?/\n\ snippet f\n\ function${M1?: ${1:functionName}}($2) {\n\ ${0:$TM_SELECTED_TEXT}\n\ }${M2?;}${M3?,}${M4?)}\n\ # Immediate function\n\ trigger \\(?f\\(\n\ endTrigger \\)?\n\ snippet f(\n\ (function(${1}) {\n\ ${0:${TM_SELECTED_TEXT:/* code */}}\n\ }(${1}));\n\ # if\n\ snippet if\n\ if (${1:true}) {\n\ ${0}\n\ }\n\ # if ... else\n\ snippet ife\n\ if (${1:true}) {\n\ ${2}\n\ } else {\n\ ${0}\n\ }\n\ # tertiary conditional\n\ snippet ter\n\ ${1:/* condition */} ? ${2:a} : ${3:b}\n\ # switch\n\ snippet switch\n\ switch (${1:expression}) {\n\ case '${3:case}':\n\ ${4:// code}\n\ break;\n\ ${5}\n\ default:\n\ ${2:// code}\n\ }\n\ # case\n\ snippet case\n\ case '${1:case}':\n\ ${2:// code}\n\ break;\n\ ${3}\n\ \n\ # while (...) {...}\n\ snippet wh\n\ while (${1:/* condition */}) {\n\ ${0:/* code */}\n\ }\n\ # try\n\ snippet try\n\ try {\n\ ${0:/* code */}\n\ } catch (e) {}\n\ # do...while\n\ snippet do\n\ do {\n\ ${2:/* code */}\n\ } while (${1:/* condition */});\n\ # Object Method\n\ snippet :f\n\ regex /([,{[])|^\\s*/:f/\n\ ${1:method_name}: function(${2:attribute}) {\n\ ${0}\n\ }${3:,}\n\ # setTimeout function\n\ snippet setTimeout\n\ regex /\\b/st|timeout|setTimeo?u?t?/\n\ setTimeout(function() {${3:$TM_SELECTED_TEXT}}, ${1:10});\n\ # Get Elements\n\ snippet gett\n\ getElementsBy${1:TagName}('${2}')${3}\n\ # Get Element\n\ snippet get\n\ getElementBy${1:Id}('${2}')${3}\n\ # console.log (Firebug)\n\ snippet cl\n\ console.log(${1});\n\ # return\n\ snippet ret\n\ return ${1:result}\n\ # for (property in object ) { ... }\n\ snippet fori\n\ for (var ${1:prop} in ${2:Things}) {\n\ ${0:$2[$1]}\n\ }\n\ # hasOwnProperty\n\ snippet has\n\ hasOwnProperty(${1})\n\ # docstring\n\ snippet /**\n\ /**\n\ * ${1:description}\n\ *\n\ */\n\ snippet @par\n\ regex /^\\s*\\*\\s*/@(para?m?)?/\n\ @param {${1:type}} ${2:name} ${3:description}\n\ snippet @ret\n\ @return {${1:type}} ${2:description}\n\ # JSON.parse\n\ snippet jsonp\n\ JSON.parse(${1:jstr});\n\ # JSON.stringify\n\ snippet jsons\n\ JSON.stringify(${1:object});\n\ # self-defining function\n\ snippet sdf\n\ var ${1:function_name} = function(${2:argument}) {\n\ ${3:// initial code ...}\n\ \n\ $1 = function($2) {\n\ ${4:// main code}\n\ };\n\ }\n\ # singleton\n\ snippet sing\n\ function ${1:Singleton} (${2:argument}) {\n\ // the cached instance\n\ var instance;\n\ \n\ // rewrite the constructor\n\ $1 = function $1($2) {\n\ return instance;\n\ };\n\ \n\ // carry over the prototype properties\n\ $1.prototype = this;\n\ \n\ // the instance\n\ instance = new $1();\n\ \n\ // reset the constructor pointer\n\ instance.constructor = $1;\n\ \n\ ${3:// code ...}\n\ \n\ return instance;\n\ }\n\ # class\n\ snippet class\n\ regex /^\\s*/clas{0,2}/\n\ var ${1:class} = function(${20}) {\n\ $40$0\n\ };\n\ \n\ (function() {\n\ ${60:this.prop = \"\"}\n\ }).call(${1:class}.prototype);\n\ \n\ exports.${1:class} = ${1:class};\n\ # \n\ snippet for-\n\ for (var ${1:i} = ${2:Things}.length; ${1:i}--; ) {\n\ ${0:${2:Things}[${1:i}];}\n\ }\n\ # for (...) {...}\n\ snippet for\n\ for (var ${1:i} = 0; $1 < ${2:Things}.length; $1++) {\n\ ${3:$2[$1]}$0\n\ }\n\ # for (...) {...} (Improved Native For-Loop)\n\ snippet forr\n\ for (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1--) {\n\ ${3:$2[$1]}$0\n\ }\n\ \n\ \n\ #modules\n\ snippet def\n\ define(function(require, exports, module) {\n\ \"use strict\";\n\ var ${1/.*\\///} = require(\"${1}\");\n\ \n\ $TM_SELECTED_TEXT\n\ });\n\ snippet req\n\ guard ^\\s*\n\ var ${1/.*\\///} = require(\"${1}\");\n\ $0\n\ snippet requ\n\ guard ^\\s*\n\ var ${1/.*\\/(.)/\\u$1/} = require(\"${1}\").${1/.*\\/(.)/\\u$1/};\n\ $0\n\ "; exports.scope = "javascript"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/markdown.js ================================================ ace.define("ace/snippets/markdown",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "# Markdown\n\ \n\ # Includes octopress (http://octopress.org/) snippets\n\ \n\ snippet [\n\ [${1:text}](http://${2:address} \"${3:title}\")\n\ snippet [*\n\ [${1:link}](${2:`@*`} \"${3:title}\")${4}\n\ \n\ snippet [:\n\ [${1:id}]: http://${2:url} \"${3:title}\"\n\ snippet [:*\n\ [${1:id}]: ${2:`@*`} \"${3:title}\"\n\ \n\ snippet ![\n\ ![${1:alttext}](${2:/images/image.jpg} \"${3:title}\")\n\ snippet ![*\n\ ![${1:alt}](${2:`@*`} \"${3:title}\")${4}\n\ \n\ snippet ![:\n\ ![${1:id}]: ${2:url} \"${3:title}\"\n\ snippet ![:*\n\ ![${1:id}]: ${2:`@*`} \"${3:title}\"\n\ \n\ snippet ===\n\ regex /^/=+/=*//\n\ ${PREV_LINE/./=/g}\n\ \n\ ${0}\n\ snippet ---\n\ regex /^/-+/-*//\n\ ${PREV_LINE/./-/g}\n\ \n\ ${0}\n\ snippet blockquote\n\ {% blockquote %}\n\ ${1:quote}\n\ {% endblockquote %}\n\ \n\ snippet blockquote-author\n\ {% blockquote ${1:author}, ${2:title} %}\n\ ${3:quote}\n\ {% endblockquote %}\n\ \n\ snippet blockquote-link\n\ {% blockquote ${1:author} ${2:URL} ${3:link_text} %}\n\ ${4:quote}\n\ {% endblockquote %}\n\ \n\ snippet bt-codeblock-short\n\ ```\n\ ${1:code_snippet}\n\ ```\n\ \n\ snippet bt-codeblock-full\n\ ``` ${1:language} ${2:title} ${3:URL} ${4:link_text}\n\ ${5:code_snippet}\n\ ```\n\ \n\ snippet codeblock-short\n\ {% codeblock %}\n\ ${1:code_snippet}\n\ {% endcodeblock %}\n\ \n\ snippet codeblock-full\n\ {% codeblock ${1:title} lang:${2:language} ${3:URL} ${4:link_text} %}\n\ ${5:code_snippet}\n\ {% endcodeblock %}\n\ \n\ snippet gist-full\n\ {% gist ${1:gist_id} ${2:filename} %}\n\ \n\ snippet gist-short\n\ {% gist ${1:gist_id} %}\n\ \n\ snippet img\n\ {% img ${1:class} ${2:URL} ${3:width} ${4:height} ${5:title_text} ${6:alt_text} %}\n\ \n\ snippet youtube\n\ {% youtube ${1:video_id} %}\n\ \n\ # The quote should appear only once in the text. It is inherently part of it.\n\ # See http://octopress.org/docs/plugins/pullquote/ for more info.\n\ \n\ snippet pullquote\n\ {% pullquote %}\n\ ${1:text} {\" ${2:quote} \"} ${3:text}\n\ {% endpullquote %}\n\ "; exports.scope = "markdown"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/php-inline.js ================================================ ace.define("ace/snippets/php",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet \n\ # this one is for php5.4\n\ snippet \n\ snippet ns\n\ namespace ${1:Foo\\Bar\\Baz};\n\ ${2}\n\ snippet use\n\ use ${1:Foo\\Bar\\Baz};\n\ ${2}\n\ snippet c\n\ ${1:abstract }class ${2:$FILENAME}\n\ {\n\ ${3}\n\ }\n\ snippet i\n\ interface ${1:$FILENAME}\n\ {\n\ ${2}\n\ }\n\ snippet t.\n\ $this->${1}\n\ snippet f\n\ function ${1:foo}(${2:array }${3:$bar})\n\ {\n\ ${4}\n\ }\n\ # method\n\ snippet m\n\ ${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\n\ {\n\ ${7}\n\ }\n\ # setter method\n\ snippet sm \n\ /**\n\ * Sets the value of ${1:foo}\n\ *\n\ * @param ${2:$1} $$1 ${3:description}\n\ *\n\ * @return ${4:$FILENAME}\n\ */\n\ ${5:public} function set${6:$2}(${7:$2 }$$1)\n\ {\n\ $this->${8:$1} = $$1;\n\ return $this;\n\ }${9}\n\ # getter method\n\ snippet gm\n\ /**\n\ * Gets the value of ${1:foo}\n\ *\n\ * @return ${2:$1}\n\ */\n\ ${3:public} function get${4:$2}()\n\ {\n\ return $this->${5:$1};\n\ }${6}\n\ #setter\n\ snippet $s\n\ ${1:$foo}->set${2:Bar}(${3});\n\ #getter\n\ snippet $g\n\ ${1:$foo}->get${2:Bar}();\n\ \n\ # Tertiary conditional\n\ snippet =?:\n\ $${1:foo} = ${2:true} ? ${3:a} : ${4};\n\ snippet ?:\n\ ${1:true} ? ${2:a} : ${3}\n\ \n\ snippet C\n\ $_COOKIE['${1:variable}']${2}\n\ snippet E\n\ $_ENV['${1:variable}']${2}\n\ snippet F\n\ $_FILES['${1:variable}']${2}\n\ snippet G\n\ $_GET['${1:variable}']${2}\n\ snippet P\n\ $_POST['${1:variable}']${2}\n\ snippet R\n\ $_REQUEST['${1:variable}']${2}\n\ snippet S\n\ $_SERVER['${1:variable}']${2}\n\ snippet SS\n\ $_SESSION['${1:variable}']${2}\n\ \n\ # the following are old ones\n\ snippet inc\n\ include '${1:file}';${2}\n\ snippet inc1\n\ include_once '${1:file}';${2}\n\ snippet req\n\ require '${1:file}';${2}\n\ snippet req1\n\ require_once '${1:file}';${2}\n\ # Start Docblock\n\ snippet /*\n\ /**\n\ * ${1}\n\ */\n\ # Class - post doc\n\ snippet doc_cp\n\ /**\n\ * ${1:undocumented class}\n\ *\n\ * @package ${2:default}\n\ * @subpackage ${3:default}\n\ * @author ${4:`g:snips_author`}\n\ */${5}\n\ # Class Variable - post doc\n\ snippet doc_vp\n\ /**\n\ * ${1:undocumented class variable}\n\ *\n\ * @var ${2:string}\n\ */${3}\n\ # Class Variable\n\ snippet doc_v\n\ /**\n\ * ${3:undocumented class variable}\n\ *\n\ * @var ${4:string}\n\ */\n\ ${1:var} $${2};${5}\n\ # Class\n\ snippet doc_c\n\ /**\n\ * ${3:undocumented class}\n\ *\n\ * @package ${4:default}\n\ * @subpackage ${5:default}\n\ * @author ${6:`g:snips_author`}\n\ */\n\ ${1:}class ${2:}\n\ {\n\ ${7}\n\ } // END $1class $2\n\ # Constant Definition - post doc\n\ snippet doc_dp\n\ /**\n\ * ${1:undocumented constant}\n\ */${2}\n\ # Constant Definition\n\ snippet doc_d\n\ /**\n\ * ${3:undocumented constant}\n\ */\n\ define(${1}, ${2});${4}\n\ # Function - post doc\n\ snippet doc_fp\n\ /**\n\ * ${1:undocumented function}\n\ *\n\ * @return ${2:void}\n\ * @author ${3:`g:snips_author`}\n\ */${4}\n\ # Function signature\n\ snippet doc_s\n\ /**\n\ * ${4:undocumented function}\n\ *\n\ * @return ${5:void}\n\ * @author ${6:`g:snips_author`}\n\ */\n\ ${1}function ${2}(${3});${7}\n\ # Function\n\ snippet doc_f\n\ /**\n\ * ${4:undocumented function}\n\ *\n\ * @return ${5:void}\n\ * @author ${6:`g:snips_author`}\n\ */\n\ ${1}function ${2}(${3})\n\ {${7}\n\ }\n\ # Header\n\ snippet doc_h\n\ /**\n\ * ${1}\n\ *\n\ * @author ${2:`g:snips_author`}\n\ * @version ${3:$Id$}\n\ * @copyright ${4:$2}, `strftime('%d %B, %Y')`\n\ * @package ${5:default}\n\ */\n\ \n\ # Interface\n\ snippet interface\n\ /**\n\ * ${2:undocumented class}\n\ *\n\ * @package ${3:default}\n\ * @author ${4:`g:snips_author`}\n\ */\n\ interface ${1:$FILENAME}\n\ {\n\ ${5}\n\ }\n\ # class ...\n\ snippet class\n\ /**\n\ * ${1}\n\ */\n\ class ${2:$FILENAME}\n\ {\n\ ${3}\n\ /**\n\ * ${4}\n\ */\n\ ${5:public} function ${6:__construct}(${7:argument})\n\ {\n\ ${8:// code...}\n\ }\n\ }\n\ # define(...)\n\ snippet def\n\ define('${1}'${2});${3}\n\ # defined(...)\n\ snippet def?\n\ ${1}defined('${2}')${3}\n\ snippet wh\n\ while (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ # do ... while\n\ snippet do\n\ do {\n\ ${2:// code... }\n\ } while (${1:/* condition */});\n\ snippet if\n\ if (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ snippet ifil\n\ \n\ ${2:}\n\ \n\ snippet ife\n\ if (${1:/* condition */}) {\n\ ${2:// code...}\n\ } else {\n\ ${3:// code...}\n\ }\n\ ${4}\n\ snippet ifeil\n\ \n\ ${2:}\n\ \n\ ${3:}\n\ \n\ ${4}\n\ snippet else\n\ else {\n\ ${1:// code...}\n\ }\n\ snippet elseif\n\ elseif (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ snippet switch\n\ switch ($${1:variable}) {\n\ case '${2:value}':\n\ ${3:// code...}\n\ break;\n\ ${5}\n\ default:\n\ ${4:// code...}\n\ break;\n\ }\n\ snippet case\n\ case '${1:value}':\n\ ${2:// code...}\n\ break;${3}\n\ snippet for\n\ for ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\n\ ${4: // code...}\n\ }\n\ snippet foreach\n\ foreach ($${1:variable} as $${2:value}) {\n\ ${3:// code...}\n\ }\n\ snippet foreachil\n\ \n\ ${3:}\n\ \n\ snippet foreachk\n\ foreach ($${1:variable} as $${2:key} => $${3:value}) {\n\ ${4:// code...}\n\ }\n\ snippet foreachkil\n\ $${3:value}): ?>\n\ ${4:}\n\ \n\ # $... = array (...)\n\ snippet array\n\ $${1:arrayName} = array('${2}' => ${3});${4}\n\ snippet try\n\ try {\n\ ${2}\n\ } catch (${1:Exception} $e) {\n\ }\n\ # lambda with closure\n\ snippet lambda\n\ ${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\n\ ${4}\n\ };\n\ # pre_dump();\n\ snippet pd\n\ echo '
    '; var_dump(${1}); echo '
    ';\n\ # pre_dump(); die();\n\ snippet pdd\n\ echo '
    '; var_dump(${1}); echo '
    '; die(${2:});\n\ snippet vd\n\ var_dump(${1});\n\ snippet vdd\n\ var_dump(${1}); die(${2:});\n\ snippet http_redirect\n\ header (\"HTTP/1.1 301 Moved Permanently\"); \n\ header (\"Location: \".URL); \n\ exit();\n\ # Getters & Setters\n\ snippet gs\n\ /**\n\ * Gets the value of ${1:foo}\n\ *\n\ * @return ${2:$1}\n\ */\n\ public function get${3:$2}()\n\ {\n\ return $this->${4:$1};\n\ }\n\ \n\ /**\n\ * Sets the value of $1\n\ *\n\ * @param $2 $$1 ${5:description}\n\ *\n\ * @return ${6:$FILENAME}\n\ */\n\ public function set$3(${7:$2 }$$1)\n\ {\n\ $this->$4 = $$1;\n\ return $this;\n\ }${8}\n\ # anotation, get, and set, useful for doctrine\n\ snippet ags\n\ /**\n\ * ${1:description}\n\ * \n\ * @${7}\n\ */\n\ ${2:protected} $${3:foo};\n\ \n\ public function get${4:$3}()\n\ {\n\ return $this->$3;\n\ }\n\ \n\ public function set$4(${5:$4 }$${6:$3})\n\ {\n\ $this->$3 = $$6;\n\ return $this;\n\ }\n\ snippet rett\n\ return true;\n\ snippet retf\n\ return false;\n\ "; exports.scope = "php"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/php.js ================================================ ace.define("ace/snippets/php",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText = "snippet \n\ # this one is for php5.4\n\ snippet \n\ snippet ns\n\ namespace ${1:Foo\\Bar\\Baz};\n\ ${2}\n\ snippet use\n\ use ${1:Foo\\Bar\\Baz};\n\ ${2}\n\ snippet c\n\ ${1:abstract }class ${2:$FILENAME}\n\ {\n\ ${3}\n\ }\n\ snippet i\n\ interface ${1:$FILENAME}\n\ {\n\ ${2}\n\ }\n\ snippet t.\n\ $this->${1}\n\ snippet f\n\ function ${1:foo}(${2:array }${3:$bar})\n\ {\n\ ${4}\n\ }\n\ # method\n\ snippet m\n\ ${1:abstract }${2:protected}${3: static} function ${4:foo}(${5:array }${6:$bar})\n\ {\n\ ${7}\n\ }\n\ # setter method\n\ snippet sm \n\ /**\n\ * Sets the value of ${1:foo}\n\ *\n\ * @param ${2:$1} $$1 ${3:description}\n\ *\n\ * @return ${4:$FILENAME}\n\ */\n\ ${5:public} function set${6:$2}(${7:$2 }$$1)\n\ {\n\ $this->${8:$1} = $$1;\n\ return $this;\n\ }${9}\n\ # getter method\n\ snippet gm\n\ /**\n\ * Gets the value of ${1:foo}\n\ *\n\ * @return ${2:$1}\n\ */\n\ ${3:public} function get${4:$2}()\n\ {\n\ return $this->${5:$1};\n\ }${6}\n\ #setter\n\ snippet $s\n\ ${1:$foo}->set${2:Bar}(${3});\n\ #getter\n\ snippet $g\n\ ${1:$foo}->get${2:Bar}();\n\ \n\ # Tertiary conditional\n\ snippet =?:\n\ $${1:foo} = ${2:true} ? ${3:a} : ${4};\n\ snippet ?:\n\ ${1:true} ? ${2:a} : ${3}\n\ \n\ snippet C\n\ $_COOKIE['${1:variable}']${2}\n\ snippet E\n\ $_ENV['${1:variable}']${2}\n\ snippet F\n\ $_FILES['${1:variable}']${2}\n\ snippet G\n\ $_GET['${1:variable}']${2}\n\ snippet P\n\ $_POST['${1:variable}']${2}\n\ snippet R\n\ $_REQUEST['${1:variable}']${2}\n\ snippet S\n\ $_SERVER['${1:variable}']${2}\n\ snippet SS\n\ $_SESSION['${1:variable}']${2}\n\ \n\ # the following are old ones\n\ snippet inc\n\ include '${1:file}';${2}\n\ snippet inc1\n\ include_once '${1:file}';${2}\n\ snippet req\n\ require '${1:file}';${2}\n\ snippet req1\n\ require_once '${1:file}';${2}\n\ # Start Docblock\n\ snippet /*\n\ /**\n\ * ${1}\n\ */\n\ # Class - post doc\n\ snippet doc_cp\n\ /**\n\ * ${1:undocumented class}\n\ *\n\ * @package ${2:default}\n\ * @subpackage ${3:default}\n\ * @author ${4:`g:snips_author`}\n\ */${5}\n\ # Class Variable - post doc\n\ snippet doc_vp\n\ /**\n\ * ${1:undocumented class variable}\n\ *\n\ * @var ${2:string}\n\ */${3}\n\ # Class Variable\n\ snippet doc_v\n\ /**\n\ * ${3:undocumented class variable}\n\ *\n\ * @var ${4:string}\n\ */\n\ ${1:var} $${2};${5}\n\ # Class\n\ snippet doc_c\n\ /**\n\ * ${3:undocumented class}\n\ *\n\ * @package ${4:default}\n\ * @subpackage ${5:default}\n\ * @author ${6:`g:snips_author`}\n\ */\n\ ${1:}class ${2:}\n\ {\n\ ${7}\n\ } // END $1class $2\n\ # Constant Definition - post doc\n\ snippet doc_dp\n\ /**\n\ * ${1:undocumented constant}\n\ */${2}\n\ # Constant Definition\n\ snippet doc_d\n\ /**\n\ * ${3:undocumented constant}\n\ */\n\ define(${1}, ${2});${4}\n\ # Function - post doc\n\ snippet doc_fp\n\ /**\n\ * ${1:undocumented function}\n\ *\n\ * @return ${2:void}\n\ * @author ${3:`g:snips_author`}\n\ */${4}\n\ # Function signature\n\ snippet doc_s\n\ /**\n\ * ${4:undocumented function}\n\ *\n\ * @return ${5:void}\n\ * @author ${6:`g:snips_author`}\n\ */\n\ ${1}function ${2}(${3});${7}\n\ # Function\n\ snippet doc_f\n\ /**\n\ * ${4:undocumented function}\n\ *\n\ * @return ${5:void}\n\ * @author ${6:`g:snips_author`}\n\ */\n\ ${1}function ${2}(${3})\n\ {${7}\n\ }\n\ # Header\n\ snippet doc_h\n\ /**\n\ * ${1}\n\ *\n\ * @author ${2:`g:snips_author`}\n\ * @version ${3:$Id$}\n\ * @copyright ${4:$2}, `strftime('%d %B, %Y')`\n\ * @package ${5:default}\n\ */\n\ \n\ # Interface\n\ snippet interface\n\ /**\n\ * ${2:undocumented class}\n\ *\n\ * @package ${3:default}\n\ * @author ${4:`g:snips_author`}\n\ */\n\ interface ${1:$FILENAME}\n\ {\n\ ${5}\n\ }\n\ # class ...\n\ snippet class\n\ /**\n\ * ${1}\n\ */\n\ class ${2:$FILENAME}\n\ {\n\ ${3}\n\ /**\n\ * ${4}\n\ */\n\ ${5:public} function ${6:__construct}(${7:argument})\n\ {\n\ ${8:// code...}\n\ }\n\ }\n\ # define(...)\n\ snippet def\n\ define('${1}'${2});${3}\n\ # defined(...)\n\ snippet def?\n\ ${1}defined('${2}')${3}\n\ snippet wh\n\ while (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ # do ... while\n\ snippet do\n\ do {\n\ ${2:// code... }\n\ } while (${1:/* condition */});\n\ snippet if\n\ if (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ snippet ifil\n\ \n\ ${2:}\n\ \n\ snippet ife\n\ if (${1:/* condition */}) {\n\ ${2:// code...}\n\ } else {\n\ ${3:// code...}\n\ }\n\ ${4}\n\ snippet ifeil\n\ \n\ ${2:}\n\ \n\ ${3:}\n\ \n\ ${4}\n\ snippet else\n\ else {\n\ ${1:// code...}\n\ }\n\ snippet elseif\n\ elseif (${1:/* condition */}) {\n\ ${2:// code...}\n\ }\n\ snippet switch\n\ switch ($${1:variable}) {\n\ case '${2:value}':\n\ ${3:// code...}\n\ break;\n\ ${5}\n\ default:\n\ ${4:// code...}\n\ break;\n\ }\n\ snippet case\n\ case '${1:value}':\n\ ${2:// code...}\n\ break;${3}\n\ snippet for\n\ for ($${2:i} = 0; $$2 < ${1:count}; $$2${3:++}) {\n\ ${4: // code...}\n\ }\n\ snippet foreach\n\ foreach ($${1:variable} as $${2:value}) {\n\ ${3:// code...}\n\ }\n\ snippet foreachil\n\ \n\ ${3:}\n\ \n\ snippet foreachk\n\ foreach ($${1:variable} as $${2:key} => $${3:value}) {\n\ ${4:// code...}\n\ }\n\ snippet foreachkil\n\ $${3:value}): ?>\n\ ${4:}\n\ \n\ # $... = array (...)\n\ snippet array\n\ $${1:arrayName} = array('${2}' => ${3});${4}\n\ snippet try\n\ try {\n\ ${2}\n\ } catch (${1:Exception} $e) {\n\ }\n\ # lambda with closure\n\ snippet lambda\n\ ${1:static }function (${2:args}) use (${3:&$x, $y /*put vars in scope (closure) */}) {\n\ ${4}\n\ };\n\ # pre_dump();\n\ snippet pd\n\ echo '
    '; var_dump(${1}); echo '
    ';\n\ # pre_dump(); die();\n\ snippet pdd\n\ echo '
    '; var_dump(${1}); echo '
    '; die(${2:});\n\ snippet vd\n\ var_dump(${1});\n\ snippet vdd\n\ var_dump(${1}); die(${2:});\n\ snippet http_redirect\n\ header (\"HTTP/1.1 301 Moved Permanently\"); \n\ header (\"Location: \".URL); \n\ exit();\n\ # Getters & Setters\n\ snippet gs\n\ /**\n\ * Gets the value of ${1:foo}\n\ *\n\ * @return ${2:$1}\n\ */\n\ public function get${3:$2}()\n\ {\n\ return $this->${4:$1};\n\ }\n\ \n\ /**\n\ * Sets the value of $1\n\ *\n\ * @param $2 $$1 ${5:description}\n\ *\n\ * @return ${6:$FILENAME}\n\ */\n\ public function set$3(${7:$2 }$$1)\n\ {\n\ $this->$4 = $$1;\n\ return $this;\n\ }${8}\n\ # anotation, get, and set, useful for doctrine\n\ snippet ags\n\ /**\n\ * ${1:description}\n\ * \n\ * @${7}\n\ */\n\ ${2:protected} $${3:foo};\n\ \n\ public function get${4:$3}()\n\ {\n\ return $this->$3;\n\ }\n\ \n\ public function set$4(${5:$4 }$${6:$3})\n\ {\n\ $this->$3 = $$6;\n\ return $this;\n\ }\n\ snippet rett\n\ return true;\n\ snippet retf\n\ return false;\n\ "; exports.scope = "php"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/plain_text.js ================================================ ace.define("ace/snippets/plain_text",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "plain_text"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/sass.js ================================================ ace.define("ace/snippets/sass",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "sass"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/scss.js ================================================ ace.define("ace/snippets/scss",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "scss"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/text.js ================================================ ace.define("ace/snippets/text",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "text"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/twig.js ================================================ ace.define("ace/snippets/twig",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "twig"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/snippets/yaml.js ================================================ ace.define("ace/snippets/yaml",["require","exports","module"], function(require, exports, module) { "use strict"; exports.snippetText =undefined; exports.scope = "yaml"; }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-ambiance.js ================================================ ace.define("ace/theme/ambiance",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-ambiance"; exports.cssText = ".ace-ambiance .ace_gutter {\ background-color: #3d3d3d;\ background-image: -moz-linear-gradient(left, #3D3D3D, #333);\ background-image: -ms-linear-gradient(left, #3D3D3D, #333);\ background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#3D3D3D), to(#333));\ background-image: -webkit-linear-gradient(left, #3D3D3D, #333);\ background-image: -o-linear-gradient(left, #3D3D3D, #333);\ background-image: linear-gradient(left, #3D3D3D, #333);\ background-repeat: repeat-x;\ border-right: 1px solid #4d4d4d;\ text-shadow: 0px 1px 1px #4d4d4d;\ color: #222;\ }\ .ace-ambiance .ace_gutter-layer {\ background: repeat left top;\ }\ .ace-ambiance .ace_gutter-active-line {\ background-color: #3F3F3F;\ }\ .ace-ambiance .ace_fold-widget {\ text-align: center;\ }\ .ace-ambiance .ace_fold-widget:hover {\ color: #777;\ }\ .ace-ambiance .ace_fold-widget.ace_start,\ .ace-ambiance .ace_fold-widget.ace_end,\ .ace-ambiance .ace_fold-widget.ace_closed{\ background: none;\ border: none;\ box-shadow: none;\ }\ .ace-ambiance .ace_fold-widget.ace_start:after {\ content: '▾'\ }\ .ace-ambiance .ace_fold-widget.ace_end:after {\ content: '▴'\ }\ .ace-ambiance .ace_fold-widget.ace_closed:after {\ content: '‣'\ }\ .ace-ambiance .ace_print-margin {\ border-left: 1px dotted #2D2D2D;\ right: 0;\ background: #262626;\ }\ .ace-ambiance .ace_scroller {\ -webkit-box-shadow: inset 0 0 10px black;\ -moz-box-shadow: inset 0 0 10px black;\ -o-box-shadow: inset 0 0 10px black;\ box-shadow: inset 0 0 10px black;\ }\ .ace-ambiance {\ color: #E6E1DC;\ background-color: #202020;\ }\ .ace-ambiance .ace_cursor {\ border-left: 1px solid #7991E8;\ }\ .ace-ambiance .ace_overwrite-cursors .ace_cursor {\ border: 1px solid #FFE300;\ background: #766B13;\ }\ .ace-ambiance.normal-mode .ace_cursor-layer {\ z-index: 0;\ }\ .ace-ambiance .ace_marker-layer .ace_selection {\ background: rgba(221, 240, 255, 0.20);\ }\ .ace-ambiance .ace_marker-layer .ace_selected-word {\ border-radius: 4px;\ border: 8px solid #3f475d;\ box-shadow: 0 0 4px black;\ }\ .ace-ambiance .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ .ace-ambiance .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.25);\ }\ .ace-ambiance .ace_marker-layer .ace_active-line {\ background: rgba(255, 255, 255, 0.031);\ }\ .ace-ambiance .ace_invisible {\ color: #333;\ }\ .ace-ambiance .ace_paren {\ color: #24C2C7;\ }\ .ace-ambiance .ace_keyword {\ color: #cda869;\ }\ .ace-ambiance .ace_keyword.ace_operator {\ color: #fa8d6a;\ }\ .ace-ambiance .ace_punctuation.ace_operator {\ color: #fa8d6a;\ }\ .ace-ambiance .ace_identifier {\ }\ .ace-ambiance .ace-statement {\ color: #cda869;\ }\ .ace-ambiance .ace_constant {\ color: #CF7EA9;\ }\ .ace-ambiance .ace_constant.ace_language {\ color: #CF7EA9;\ }\ .ace-ambiance .ace_constant.ace_library {\ }\ .ace-ambiance .ace_constant.ace_numeric {\ color: #78CF8A;\ }\ .ace-ambiance .ace_invalid {\ text-decoration: underline;\ }\ .ace-ambiance .ace_invalid.ace_illegal {\ color:#F8F8F8;\ background-color: rgba(86, 45, 86, 0.75);\ }\ .ace-ambiance .ace_invalid,\ .ace-ambiance .ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #D2A8A1;\ }\ .ace-ambiance .ace_support {\ color: #9B859D;\ }\ .ace-ambiance .ace_support.ace_function {\ color: #DAD085;\ }\ .ace-ambiance .ace_function.ace_buildin {\ color: #9b859d;\ }\ .ace-ambiance .ace_string {\ color: #8f9d6a;\ }\ .ace-ambiance .ace_string.ace_regexp {\ color: #DAD085;\ }\ .ace-ambiance .ace_comment {\ font-style: italic;\ color: #555;\ }\ .ace-ambiance .ace_comment.ace_doc {\ }\ .ace-ambiance .ace_comment.ace_doc.ace_tag {\ color: #666;\ font-style: normal;\ }\ .ace-ambiance .ace_definition,\ .ace-ambiance .ace_type {\ color: #aac6e3;\ }\ .ace-ambiance .ace_variable {\ color: #9999cc;\ }\ .ace-ambiance .ace_variable.ace_language {\ color: #9b859d;\ }\ .ace-ambiance .ace_xml-pe {\ color: #494949;\ }\ .ace-ambiance .ace_gutter-layer,\ .ace-ambiance .ace_text-layer {\ background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\ }\ .ace-ambiance .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQUFD4z6Crq/sfAAuYAuYl+7lfAAAAAElFTkSuQmCC\") right repeat-y;\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-chaos.js ================================================ ace.define("ace/theme/chaos",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-chaos"; exports.cssText = ".ace-chaos .ace_gutter {\ background: #141414;\ color: #595959;\ border-right: 1px solid #282828;\ }\ .ace-chaos .ace_gutter-cell.ace_warning {\ background-image: none;\ background: #FC0;\ border-left: none;\ padding-left: 0;\ color: #000;\ }\ .ace-chaos .ace_gutter-cell.ace_error {\ background-position: -6px center;\ background-image: none;\ background: #F10;\ border-left: none;\ padding-left: 0;\ color: #000;\ }\ .ace-chaos .ace_print-margin {\ border-left: 1px solid #555;\ right: 0;\ background: #1D1D1D;\ }\ .ace-chaos {\ background-color: #161616;\ color: #E6E1DC;\ }\ .ace-chaos .ace_cursor {\ border-left: 2px solid #FFFFFF;\ }\ .ace-chaos .ace_cursor.ace_overwrite {\ border-left: 0px;\ border-bottom: 1px solid #FFFFFF;\ }\ .ace-chaos .ace_marker-layer .ace_selection {\ background: #494836;\ }\ .ace-chaos .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ .ace-chaos .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #FCE94F;\ }\ .ace-chaos .ace_marker-layer .ace_active-line {\ background: #333;\ }\ .ace-chaos .ace_gutter-active-line {\ background-color: #222;\ }\ .ace-chaos .ace_invisible {\ color: #404040;\ }\ .ace-chaos .ace_keyword {\ color:#00698F;\ }\ .ace-chaos .ace_keyword.ace_operator {\ color:#FF308F;\ }\ .ace-chaos .ace_constant {\ color:#1EDAFB;\ }\ .ace-chaos .ace_constant.ace_language {\ color:#FDC251;\ }\ .ace-chaos .ace_constant.ace_library {\ color:#8DFF0A;\ }\ .ace-chaos .ace_constant.ace_numeric {\ color:#58C554;\ }\ .ace-chaos .ace_invalid {\ color:#FFFFFF;\ background-color:#990000;\ }\ .ace-chaos .ace_invalid.ace_deprecated {\ color:#FFFFFF;\ background-color:#990000;\ }\ .ace-chaos .ace_support {\ color: #999;\ }\ .ace-chaos .ace_support.ace_function {\ color:#00AEEF;\ }\ .ace-chaos .ace_function {\ color:#00AEEF;\ }\ .ace-chaos .ace_string {\ color:#58C554;\ }\ .ace-chaos .ace_comment {\ color:#555;\ font-style:italic;\ padding-bottom: 0px;\ }\ .ace-chaos .ace_variable {\ color:#997744;\ }\ .ace-chaos .ace_meta.ace_tag {\ color:#BE53E6;\ }\ .ace-chaos .ace_entity.ace_other.ace_attribute-name {\ color:#FFFF89;\ }\ .ace-chaos .ace_markup.ace_underline {\ text-decoration: underline;\ }\ .ace-chaos .ace_fold-widget {\ text-align: center;\ }\ .ace-chaos .ace_fold-widget:hover {\ color: #777;\ }\ .ace-chaos .ace_fold-widget.ace_start,\ .ace-chaos .ace_fold-widget.ace_end,\ .ace-chaos .ace_fold-widget.ace_closed{\ background: none;\ border: none;\ box-shadow: none;\ }\ .ace-chaos .ace_fold-widget.ace_start:after {\ content: '▾'\ }\ .ace-chaos .ace_fold-widget.ace_end:after {\ content: '▴'\ }\ .ace-chaos .ace_fold-widget.ace_closed:after {\ content: '‣'\ }\ .ace-chaos .ace_indent-guide {\ border-right:1px dotted #333;\ margin-right:-1px;\ }\ .ace-chaos .ace_fold { \ background: #222; \ border-radius: 3px; \ color: #7AF; \ border: none; \ }\ .ace-chaos .ace_fold:hover {\ background: #CCC; \ color: #000;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-chrome.js ================================================ ace.define("ace/theme/chrome",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-chrome"; exports.cssText = ".ace-chrome .ace_gutter {\ background: #ebebeb;\ color: #333;\ overflow : hidden;\ }\ .ace-chrome .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-chrome {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-chrome .ace_cursor {\ color: black;\ }\ .ace-chrome .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-chrome .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-chrome .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-chrome .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-chrome .ace_invalid {\ background-color: rgb(153, 0, 0);\ color: white;\ }\ .ace-chrome .ace_fold {\ }\ .ace-chrome .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-chrome .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-chrome .ace_support.ace_type,\ .ace-chrome .ace_support.ace_class\ .ace-chrome .ace_support.ace_other {\ color: rgb(109, 121, 222);\ }\ .ace-chrome .ace_variable.ace_parameter {\ font-style:italic;\ color:#FD971F;\ }\ .ace-chrome .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-chrome .ace_comment {\ color: #236e24;\ }\ .ace-chrome .ace_comment.ace_doc {\ color: #236e24;\ }\ .ace-chrome .ace_comment.ace_doc.ace_tag {\ color: #236e24;\ }\ .ace-chrome .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-chrome .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-chrome .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-chrome .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-chrome .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-chrome .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-chrome .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-chrome .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-chrome .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-chrome .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-chrome .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-chrome .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-chrome .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-chrome .ace_storage,\ .ace-chrome .ace_keyword,\ .ace-chrome .ace_meta.ace_tag {\ color: rgb(147, 15, 128);\ }\ .ace-chrome .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-chrome .ace_string {\ color: #1A1AA6;\ }\ .ace-chrome .ace_entity.ace_other.ace_attribute-name {\ color: #994409;\ }\ .ace-chrome .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds.js ================================================ ace.define("ace/theme/clouds",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-clouds"; exports.cssText = ".ace-clouds .ace_gutter {\ background: #ebebeb;\ color: #333\ }\ .ace-clouds .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-clouds {\ background-color: #FFFFFF;\ color: #000000\ }\ .ace-clouds .ace_cursor {\ color: #000000\ }\ .ace-clouds .ace_marker-layer .ace_selection {\ background: #BDD5FC\ }\ .ace-clouds.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ }\ .ace-clouds .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-clouds .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #BFBFBF\ }\ .ace-clouds .ace_marker-layer .ace_active-line {\ background: #FFFBD1\ }\ .ace-clouds .ace_gutter-active-line {\ background-color : #dcdcdc\ }\ .ace-clouds .ace_marker-layer .ace_selected-word {\ border: 1px solid #BDD5FC\ }\ .ace-clouds .ace_invisible {\ color: #BFBFBF\ }\ .ace-clouds .ace_keyword,\ .ace-clouds .ace_meta,\ .ace-clouds .ace_support.ace_constant.ace_property-value {\ color: #AF956F\ }\ .ace-clouds .ace_keyword.ace_operator {\ color: #484848\ }\ .ace-clouds .ace_keyword.ace_other.ace_unit {\ color: #96DC5F\ }\ .ace-clouds .ace_constant.ace_language {\ color: #39946A\ }\ .ace-clouds .ace_constant.ace_numeric {\ color: #46A609\ }\ .ace-clouds .ace_constant.ace_character.ace_entity {\ color: #BF78CC\ }\ .ace-clouds .ace_invalid {\ background-color: #FF002A\ }\ .ace-clouds .ace_fold {\ background-color: #AF956F;\ border-color: #000000\ }\ .ace-clouds .ace_storage,\ .ace-clouds .ace_support.ace_class,\ .ace-clouds .ace_support.ace_function,\ .ace-clouds .ace_support.ace_other,\ .ace-clouds .ace_support.ace_type {\ color: #C52727\ }\ .ace-clouds .ace_string {\ color: #5D90CD\ }\ .ace-clouds .ace_comment {\ color: #BCC8BA\ }\ .ace-clouds .ace_entity.ace_name.ace_tag,\ .ace-clouds .ace_entity.ace_other.ace_attribute-name {\ color: #606060\ }\ .ace-clouds .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-clouds_midnight.js ================================================ ace.define("ace/theme/clouds_midnight",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-clouds-midnight"; exports.cssText = ".ace-clouds-midnight .ace_gutter {\ background: #232323;\ color: #929292\ }\ .ace-clouds-midnight .ace_print-margin {\ width: 1px;\ background: #232323\ }\ .ace-clouds-midnight {\ background-color: #191919;\ color: #929292\ }\ .ace-clouds-midnight .ace_cursor {\ color: #7DA5DC\ }\ .ace-clouds-midnight .ace_marker-layer .ace_selection {\ background: #000000\ }\ .ace-clouds-midnight.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #191919;\ }\ .ace-clouds-midnight .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-clouds-midnight .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #BFBFBF\ }\ .ace-clouds-midnight .ace_marker-layer .ace_active-line {\ background: rgba(215, 215, 215, 0.031)\ }\ .ace-clouds-midnight .ace_gutter-active-line {\ background-color: rgba(215, 215, 215, 0.031)\ }\ .ace-clouds-midnight .ace_marker-layer .ace_selected-word {\ border: 1px solid #000000\ }\ .ace-clouds-midnight .ace_invisible {\ color: #666\ }\ .ace-clouds-midnight .ace_keyword,\ .ace-clouds-midnight .ace_meta,\ .ace-clouds-midnight .ace_support.ace_constant.ace_property-value {\ color: #927C5D\ }\ .ace-clouds-midnight .ace_keyword.ace_operator {\ color: #4B4B4B\ }\ .ace-clouds-midnight .ace_keyword.ace_other.ace_unit {\ color: #366F1A\ }\ .ace-clouds-midnight .ace_constant.ace_language {\ color: #39946A\ }\ .ace-clouds-midnight .ace_constant.ace_numeric {\ color: #46A609\ }\ .ace-clouds-midnight .ace_constant.ace_character.ace_entity {\ color: #A165AC\ }\ .ace-clouds-midnight .ace_invalid {\ color: #FFFFFF;\ background-color: #E92E2E\ }\ .ace-clouds-midnight .ace_fold {\ background-color: #927C5D;\ border-color: #929292\ }\ .ace-clouds-midnight .ace_storage,\ .ace-clouds-midnight .ace_support.ace_class,\ .ace-clouds-midnight .ace_support.ace_function,\ .ace-clouds-midnight .ace_support.ace_other,\ .ace-clouds-midnight .ace_support.ace_type {\ color: #E92E2E\ }\ .ace-clouds-midnight .ace_string {\ color: #5D90CD\ }\ .ace-clouds-midnight .ace_comment {\ color: #3C403B\ }\ .ace-clouds-midnight .ace_entity.ace_name.ace_tag,\ .ace-clouds-midnight .ace_entity.ace_other.ace_attribute-name {\ color: #606060\ }\ .ace-clouds-midnight .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-cobalt.js ================================================ ace.define("ace/theme/cobalt",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-cobalt"; exports.cssText = ".ace-cobalt .ace_gutter {\ background: #011e3a;\ color: rgb(128,145,160)\ }\ .ace-cobalt .ace_print-margin {\ width: 1px;\ background: #555555\ }\ .ace-cobalt {\ background-color: #002240;\ color: #FFFFFF\ }\ .ace-cobalt .ace_cursor {\ color: #FFFFFF\ }\ .ace-cobalt .ace_marker-layer .ace_selection {\ background: rgba(179, 101, 57, 0.75)\ }\ .ace-cobalt.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002240;\ }\ .ace-cobalt .ace_marker-layer .ace_step {\ background: rgb(127, 111, 19)\ }\ .ace-cobalt .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.15)\ }\ .ace-cobalt .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.35)\ }\ .ace-cobalt .ace_gutter-active-line {\ background-color: rgba(0, 0, 0, 0.35)\ }\ .ace-cobalt .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(179, 101, 57, 0.75)\ }\ .ace-cobalt .ace_invisible {\ color: rgba(255, 255, 255, 0.15)\ }\ .ace-cobalt .ace_keyword,\ .ace-cobalt .ace_meta {\ color: #FF9D00\ }\ .ace-cobalt .ace_constant,\ .ace-cobalt .ace_constant.ace_character,\ .ace-cobalt .ace_constant.ace_character.ace_escape,\ .ace-cobalt .ace_constant.ace_other {\ color: #FF628C\ }\ .ace-cobalt .ace_invalid {\ color: #F8F8F8;\ background-color: #800F00\ }\ .ace-cobalt .ace_support {\ color: #80FFBB\ }\ .ace-cobalt .ace_support.ace_constant {\ color: #EB939A\ }\ .ace-cobalt .ace_fold {\ background-color: #FF9D00;\ border-color: #FFFFFF\ }\ .ace-cobalt .ace_support.ace_function {\ color: #FFB054\ }\ .ace-cobalt .ace_storage {\ color: #FFEE80\ }\ .ace-cobalt .ace_entity {\ color: #FFDD00\ }\ .ace-cobalt .ace_string {\ color: #3AD900\ }\ .ace-cobalt .ace_string.ace_regexp {\ color: #80FFC2\ }\ .ace-cobalt .ace_comment {\ font-style: italic;\ color: #0088FF\ }\ .ace-cobalt .ace_heading,\ .ace-cobalt .ace_markup.ace_heading {\ color: #C8E4FD;\ background-color: #001221\ }\ .ace-cobalt .ace_list,\ .ace-cobalt .ace_markup.ace_list {\ background-color: #130D26\ }\ .ace-cobalt .ace_variable {\ color: #CCCCCC\ }\ .ace-cobalt .ace_variable.ace_language {\ color: #FF80E1\ }\ .ace-cobalt .ace_meta.ace_tag {\ color: #9EFFFF\ }\ .ace-cobalt .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHCLSvkPAAP3AgSDTRd4AAAAAElFTkSuQmCC) right repeat-y\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-crimson_editor.js ================================================ ace.define("ace/theme/crimson_editor",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssText = ".ace-crimson-editor .ace_gutter {\ background: #ebebeb;\ color: #333;\ overflow : hidden;\ }\ .ace-crimson-editor .ace_gutter-layer {\ width: 100%;\ text-align: right;\ }\ .ace-crimson-editor .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-crimson-editor {\ background-color: #FFFFFF;\ color: rgb(64, 64, 64);\ }\ .ace-crimson-editor .ace_cursor {\ color: black;\ }\ .ace-crimson-editor .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-crimson-editor .ace_identifier {\ color: black;\ }\ .ace-crimson-editor .ace_keyword {\ color: blue;\ }\ .ace-crimson-editor .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-crimson-editor .ace_constant.ace_language {\ color: rgb(255, 156, 0);\ }\ .ace-crimson-editor .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-crimson-editor .ace_invalid {\ text-decoration: line-through;\ color: rgb(224, 0, 0);\ }\ .ace-crimson-editor .ace_fold {\ }\ .ace-crimson-editor .ace_support.ace_function {\ color: rgb(192, 0, 0);\ }\ .ace-crimson-editor .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-crimson-editor .ace_support.ace_type,\ .ace-crimson-editor .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-crimson-editor .ace_keyword.ace_operator {\ color: rgb(49, 132, 149);\ }\ .ace-crimson-editor .ace_string {\ color: rgb(128, 0, 128);\ }\ .ace-crimson-editor .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-crimson-editor .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-crimson-editor .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-crimson-editor .ace_constant.ace_numeric {\ color: rgb(0, 0, 64);\ }\ .ace-crimson-editor .ace_variable {\ color: rgb(0, 64, 128);\ }\ .ace-crimson-editor .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-crimson-editor .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-crimson-editor .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-crimson-editor .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-crimson-editor .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-crimson-editor .ace_marker-layer .ace_active-line {\ background: rgb(232, 242, 254);\ }\ .ace-crimson-editor .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-crimson-editor .ace_meta.ace_tag {\ color:rgb(28, 2, 255);\ }\ .ace-crimson-editor .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-crimson-editor .ace_string.ace_regex {\ color: rgb(192, 0, 192);\ }\ .ace-crimson-editor .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; exports.cssClass = "ace-crimson-editor"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dawn.js ================================================ ace.define("ace/theme/dawn",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-dawn"; exports.cssText = ".ace-dawn .ace_gutter {\ background: #ebebeb;\ color: #333\ }\ .ace-dawn .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-dawn {\ background-color: #F9F9F9;\ color: #080808\ }\ .ace-dawn .ace_cursor {\ color: #000000\ }\ .ace-dawn .ace_marker-layer .ace_selection {\ background: rgba(39, 95, 255, 0.30)\ }\ .ace-dawn.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #F9F9F9;\ }\ .ace-dawn .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-dawn .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(75, 75, 126, 0.50)\ }\ .ace-dawn .ace_marker-layer .ace_active-line {\ background: rgba(36, 99, 180, 0.12)\ }\ .ace-dawn .ace_gutter-active-line {\ background-color : #dcdcdc\ }\ .ace-dawn .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(39, 95, 255, 0.30)\ }\ .ace-dawn .ace_invisible {\ color: rgba(75, 75, 126, 0.50)\ }\ .ace-dawn .ace_keyword,\ .ace-dawn .ace_meta {\ color: #794938\ }\ .ace-dawn .ace_constant,\ .ace-dawn .ace_constant.ace_character,\ .ace-dawn .ace_constant.ace_character.ace_escape,\ .ace-dawn .ace_constant.ace_other {\ color: #811F24\ }\ .ace-dawn .ace_invalid.ace_illegal {\ text-decoration: underline;\ font-style: italic;\ color: #F8F8F8;\ background-color: #B52A1D\ }\ .ace-dawn .ace_invalid.ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #B52A1D\ }\ .ace-dawn .ace_support {\ color: #691C97\ }\ .ace-dawn .ace_support.ace_constant {\ color: #B4371F\ }\ .ace-dawn .ace_fold {\ background-color: #794938;\ border-color: #080808\ }\ .ace-dawn .ace_list,\ .ace-dawn .ace_markup.ace_list,\ .ace-dawn .ace_support.ace_function {\ color: #693A17\ }\ .ace-dawn .ace_storage {\ font-style: italic;\ color: #A71D5D\ }\ .ace-dawn .ace_string {\ color: #0B6125\ }\ .ace-dawn .ace_string.ace_regexp {\ color: #CF5628\ }\ .ace-dawn .ace_comment {\ font-style: italic;\ color: #5A525F\ }\ .ace-dawn .ace_heading,\ .ace-dawn .ace_markup.ace_heading {\ color: #19356D\ }\ .ace-dawn .ace_variable {\ color: #234A97\ }\ .ace-dawn .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLh/5+x/AAizA4hxNNsZAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-dreamweaver.js ================================================ ace.define("ace/theme/dreamweaver",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-dreamweaver"; exports.cssText = ".ace-dreamweaver .ace_gutter {\ background: #e8e8e8;\ color: #333;\ }\ .ace-dreamweaver .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-dreamweaver {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-dreamweaver .ace_fold {\ background-color: #757AD8;\ }\ .ace-dreamweaver .ace_cursor {\ color: black;\ }\ .ace-dreamweaver .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-dreamweaver .ace_storage,\ .ace-dreamweaver .ace_keyword {\ color: blue;\ }\ .ace-dreamweaver .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-dreamweaver .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-dreamweaver .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-dreamweaver .ace_invalid {\ background-color: rgb(153, 0, 0);\ color: white;\ }\ .ace-dreamweaver .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-dreamweaver .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-dreamweaver .ace_support.ace_type,\ .ace-dreamweaver .ace_support.ace_class {\ color: #009;\ }\ .ace-dreamweaver .ace_support.ace_php_tag {\ color: #f00;\ }\ .ace-dreamweaver .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-dreamweaver .ace_string {\ color: #00F;\ }\ .ace-dreamweaver .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-dreamweaver .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-dreamweaver .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-dreamweaver .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-dreamweaver .ace_variable {\ color: #06F\ }\ .ace-dreamweaver .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-dreamweaver .ace_entity.ace_name.ace_function {\ color: #00F;\ }\ .ace-dreamweaver .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-dreamweaver .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-dreamweaver .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-dreamweaver .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-dreamweaver .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-dreamweaver .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-dreamweaver .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-dreamweaver .ace_gutter-active-line {\ background-color : #DCDCDC;\ }\ .ace-dreamweaver .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-dreamweaver .ace_meta.ace_tag {\ color:#009;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_anchor {\ color:#060;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_form {\ color:#F90;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_image {\ color:#909;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_script {\ color:#900;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_style {\ color:#909;\ }\ .ace-dreamweaver .ace_meta.ace_tag.ace_table {\ color:#099;\ }\ .ace-dreamweaver .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-dreamweaver .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-eclipse.js ================================================ ace.define("ace/theme/eclipse",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssText = ".ace-eclipse .ace_gutter {\ background: #ebebeb;\ border-right: 1px solid rgb(159, 159, 159);\ color: rgb(136, 136, 136);\ }\ .ace-eclipse .ace_print-margin {\ width: 1px;\ background: #ebebeb;\ }\ .ace-eclipse {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-eclipse .ace_fold {\ background-color: rgb(60, 76, 114);\ }\ .ace-eclipse .ace_cursor {\ color: black;\ }\ .ace-eclipse .ace_storage,\ .ace-eclipse .ace_keyword,\ .ace-eclipse .ace_variable {\ color: rgb(127, 0, 85);\ }\ .ace-eclipse .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-eclipse .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-eclipse .ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-eclipse .ace_string {\ color: rgb(42, 0, 255);\ }\ .ace-eclipse .ace_comment {\ color: rgb(113, 150, 130);\ }\ .ace-eclipse .ace_comment.ace_doc {\ color: rgb(63, 95, 191);\ }\ .ace-eclipse .ace_comment.ace_doc.ace_tag {\ color: rgb(127, 159, 191);\ }\ .ace-eclipse .ace_constant.ace_numeric {\ color: darkblue;\ }\ .ace-eclipse .ace_tag {\ color: rgb(25, 118, 116);\ }\ .ace-eclipse .ace_type {\ color: rgb(127, 0, 127);\ }\ .ace-eclipse .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-eclipse .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-eclipse .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-eclipse .ace_meta.ace_tag {\ color:rgb(25, 118, 116);\ }\ .ace-eclipse .ace_invisible {\ color: #ddd;\ }\ .ace-eclipse .ace_entity.ace_other.ace_attribute-name {\ color:rgb(127, 0, 127);\ }\ .ace-eclipse .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0);\ }\ .ace-eclipse .ace_active-line {\ background: rgb(232, 242, 254);\ }\ .ace-eclipse .ace_gutter-active-line {\ background-color : #DADADA;\ }\ .ace-eclipse .ace_marker-layer .ace_selected-word {\ border: 1px solid rgb(181, 213, 255);\ }\ .ace-eclipse .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; exports.cssClass = "ace-eclipse"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-github.js ================================================ ace.define("ace/theme/github",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-github"; exports.cssText = "\ .ace-github .ace_gutter {\ background: #e8e8e8;\ color: #AAA;\ }\ .ace-github {\ background: #fff;\ color: #000;\ }\ .ace-github .ace_keyword {\ font-weight: bold;\ }\ .ace-github .ace_string {\ color: #D14;\ }\ .ace-github .ace_variable.ace_class {\ color: teal;\ }\ .ace-github .ace_constant.ace_numeric {\ color: #099;\ }\ .ace-github .ace_constant.ace_buildin {\ color: #0086B3;\ }\ .ace-github .ace_support.ace_function {\ color: #0086B3;\ }\ .ace-github .ace_comment {\ color: #998;\ font-style: italic;\ }\ .ace-github .ace_variable.ace_language {\ color: #0086B3;\ }\ .ace-github .ace_paren {\ font-weight: bold;\ }\ .ace-github .ace_boolean {\ font-weight: bold;\ }\ .ace-github .ace_string.ace_regexp {\ color: #009926;\ font-weight: normal;\ }\ .ace-github .ace_variable.ace_instance {\ color: teal;\ }\ .ace-github .ace_constant.ace_language {\ font-weight: bold;\ }\ .ace-github .ace_cursor {\ color: black;\ }\ .ace-github.ace_focus .ace_marker-layer .ace_active-line {\ background: rgb(255, 255, 204);\ }\ .ace-github .ace_marker-layer .ace_active-line {\ background: rgb(245, 245, 245);\ }\ .ace-github .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-github.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ }\ .ace-github.ace_nobold .ace_line > span {\ font-weight: normal !important;\ }\ .ace-github .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-github .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-github .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-github .ace_gutter-active-line {\ background-color : rgba(0, 0, 0, 0.07);\ }\ .ace-github .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-github .ace_invisible {\ color: #BFBFBF\ }\ .ace-github .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-github .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-idle_fingers.js ================================================ ace.define("ace/theme/idle_fingers",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-idle-fingers"; exports.cssText = ".ace-idle-fingers .ace_gutter {\ background: #3b3b3b;\ color: rgb(153,153,153)\ }\ .ace-idle-fingers .ace_print-margin {\ width: 1px;\ background: #3b3b3b\ }\ .ace-idle-fingers {\ background-color: #323232;\ color: #FFFFFF\ }\ .ace-idle-fingers .ace_cursor {\ color: #91FF00\ }\ .ace-idle-fingers .ace_marker-layer .ace_selection {\ background: rgba(90, 100, 126, 0.88)\ }\ .ace-idle-fingers.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #323232;\ }\ .ace-idle-fingers .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-idle-fingers .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-idle-fingers .ace_marker-layer .ace_active-line {\ background: #353637\ }\ .ace-idle-fingers .ace_gutter-active-line {\ background-color: #353637\ }\ .ace-idle-fingers .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(90, 100, 126, 0.88)\ }\ .ace-idle-fingers .ace_invisible {\ color: #404040\ }\ .ace-idle-fingers .ace_keyword,\ .ace-idle-fingers .ace_meta {\ color: #CC7833\ }\ .ace-idle-fingers .ace_constant,\ .ace-idle-fingers .ace_constant.ace_character,\ .ace-idle-fingers .ace_constant.ace_character.ace_escape,\ .ace-idle-fingers .ace_constant.ace_other,\ .ace-idle-fingers .ace_support.ace_constant {\ color: #6C99BB\ }\ .ace-idle-fingers .ace_invalid {\ color: #FFFFFF;\ background-color: #FF0000\ }\ .ace-idle-fingers .ace_fold {\ background-color: #CC7833;\ border-color: #FFFFFF\ }\ .ace-idle-fingers .ace_support.ace_function {\ color: #B83426\ }\ .ace-idle-fingers .ace_variable.ace_parameter {\ font-style: italic\ }\ .ace-idle-fingers .ace_string {\ color: #A5C261\ }\ .ace-idle-fingers .ace_string.ace_regexp {\ color: #CCCC33\ }\ .ace-idle-fingers .ace_comment {\ font-style: italic;\ color: #BC9458\ }\ .ace-idle-fingers .ace_meta.ace_tag {\ color: #FFE5BB\ }\ .ace-idle-fingers .ace_entity.ace_name {\ color: #FFC66D\ }\ .ace-idle-fingers .ace_collab.ace_user1 {\ color: #323232;\ background-color: #FFF980\ }\ .ace-idle-fingers .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMwMjLyZYiPj/8PAAreAwAI1+g0AAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-iplastic.js ================================================ ace.define("ace/theme/iplastic",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-iplastic"; exports.cssText = ".ace-iplastic .ace_gutter {\ background: #dddddd;\ color: #666666\ }\ .ace-iplastic .ace_print-margin {\ width: 1px;\ background: #bbbbbb\ }\ .ace-iplastic {\ background-color: #eeeeee;\ color: #333333\ }\ .ace-iplastic .ace_cursor {\ color: #333\ }\ .ace-iplastic .ace_marker-layer .ace_selection {\ background: #BAD6FD;\ }\ .ace-iplastic.ace_multiselect .ace_selection.ace_start {\ border-radius: 4px\ }\ .ace-iplastic .ace_marker-layer .ace_step {\ background: #444444\ }\ .ace-iplastic .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #49483E;\ background: #FFF799\ }\ .ace-iplastic .ace_marker-layer .ace_active-line {\ background: #e5e5e5\ }\ .ace-iplastic .ace_gutter-active-line {\ background-color: #eeeeee\ }\ .ace-iplastic .ace_marker-layer .ace_selected-word {\ border: 1px solid #555555;\ border-radius:4px\ }\ .ace-iplastic .ace_invisible {\ color: #999999\ }\ .ace-iplastic .ace_entity.ace_name.ace_tag,\ .ace-iplastic .ace_keyword,\ .ace-iplastic .ace_meta.ace_tag,\ .ace-iplastic .ace_storage {\ color: #0000FF\ }\ .ace-iplastic .ace_punctuation,\ .ace-iplastic .ace_punctuation.ace_tag {\ color: #000\ }\ .ace-iplastic .ace_constant {\ color: #333333;\ font-weight: 700\ }\ .ace-iplastic .ace_constant.ace_character,\ .ace-iplastic .ace_constant.ace_language,\ .ace-iplastic .ace_constant.ace_numeric,\ .ace-iplastic .ace_constant.ace_other {\ color: #0066FF;\ font-weight: 700\ }\ .ace-iplastic .ace_constant.ace_numeric{\ font-weight: 100\ }\ .ace-iplastic .ace_invalid {\ color: #F8F8F0;\ background-color: #F92672\ }\ .ace-iplastic .ace_invalid.ace_deprecated {\ color: #F8F8F0;\ background-color: #AE81FF\ }\ .ace-iplastic .ace_support.ace_constant,\ .ace-iplastic .ace_support.ace_function {\ color: #333333;\ font-weight: 700\ }\ .ace-iplastic .ace_fold {\ background-color: #464646;\ border-color: #F8F8F2\ }\ .ace-iplastic .ace_storage.ace_type,\ .ace-iplastic .ace_support.ace_class,\ .ace-iplastic .ace_support.ace_type {\ color: #3333fc;\ font-weight: 700\ }\ .ace-iplastic .ace_entity.ace_name.ace_function,\ .ace-iplastic .ace_entity.ace_other,\ .ace-iplastic .ace_entity.ace_other.ace_attribute-name,\ .ace-iplastic .ace_variable {\ color: #3366cc;\ font-style: italic\ }\ .ace-iplastic .ace_variable.ace_parameter {\ font-style: italic;\ color: #2469E0\ }\ .ace-iplastic .ace_string {\ color: #a55f03\ }\ .ace-iplastic .ace_comment {\ color: #777777;\ font-style: italic\ }\ .ace-iplastic .ace_fold-widget {\ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==);\ }\ .ace-iplastic .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAABlJREFUeNpi+P//PwMzMzPzfwAAAAD//wMAGRsECSML/RIAAAAASUVORK5CYII=) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-katzenmilch.js ================================================ ace.define("ace/theme/katzenmilch",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-katzenmilch"; exports.cssText = ".ace-katzenmilch .ace_gutter,\ .ace-katzenmilch .ace_gutter {\ background: #e8e8e8;\ color: #333\ }\ .ace-katzenmilch .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-katzenmilch {\ background-color: #f3f2f3;\ color: rgba(15, 0, 9, 1.0)\ }\ .ace-katzenmilch .ace_cursor {\ border-left: 2px solid #100011\ }\ .ace-katzenmilch .ace_overwrite-cursors .ace_cursor {\ border-left: 0px;\ border-bottom: 1px solid #100011\ }\ .ace-katzenmilch .ace_marker-layer .ace_selection {\ background: rgba(100, 5, 208, 0.27)\ }\ .ace-katzenmilch.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #f3f2f3;\ }\ .ace-katzenmilch .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174)\ }\ .ace-katzenmilch .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(0, 0, 0, 0.33);\ }\ .ace-katzenmilch .ace_marker-layer .ace_active-line {\ background: rgb(232, 242, 254)\ }\ .ace-katzenmilch .ace_gutter-active-line {\ background-color: rgb(232, 242, 254)\ }\ .ace-katzenmilch .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(100, 5, 208, 0.27)\ }\ .ace-katzenmilch .ace_invisible {\ color: #BFBFBF\ }\ .ace-katzenmilch .ace_fold {\ background-color: rgba(2, 95, 73, 0.97);\ border-color: rgba(15, 0, 9, 1.0)\ }\ .ace-katzenmilch .ace_keyword {\ color: #674Aa8;\ rbackground-color: rgba(163, 170, 216, 0.055)\ }\ .ace-katzenmilch .ace_constant.ace_language {\ color: #7D7e52;\ rbackground-color: rgba(189, 190, 130, 0.059)\ }\ .ace-katzenmilch .ace_constant.ace_numeric {\ color: rgba(79, 130, 123, 0.93);\ rbackground-color: rgba(119, 194, 187, 0.059)\ }\ .ace-katzenmilch .ace_constant.ace_character,\ .ace-katzenmilch .ace_constant.ace_other {\ color: rgba(2, 95, 105, 1.0);\ rbackground-color: rgba(127, 34, 153, 0.063)\ }\ .ace-katzenmilch .ace_support.ace_function {\ color: #9D7e62;\ rbackground-color: rgba(189, 190, 130, 0.039)\ }\ .ace-katzenmilch .ace_support.ace_class {\ color: rgba(239, 106, 167, 1.0);\ rbackground-color: rgba(239, 106, 167, 0.063)\ }\ .ace-katzenmilch .ace_storage {\ color: rgba(123, 92, 191, 1.0);\ rbackground-color: rgba(139, 93, 223, 0.051)\ }\ .ace-katzenmilch .ace_invalid {\ color: #DFDFD5;\ rbackground-color: #CC1B27\ }\ .ace-katzenmilch .ace_string {\ color: #5a5f9b;\ rbackground-color: rgba(170, 175, 219, 0.035)\ }\ .ace-katzenmilch .ace_comment {\ font-style: italic;\ color: rgba(64, 79, 80, 0.67);\ rbackground-color: rgba(95, 15, 255, 0.0078)\ }\ .ace-katzenmilch .ace_entity.ace_name.ace_function,\ .ace-katzenmilch .ace_variable {\ color: rgba(2, 95, 73, 0.97);\ rbackground-color: rgba(34, 255, 73, 0.12)\ }\ .ace-katzenmilch .ace_variable.ace_language {\ color: #316fcf;\ rbackground-color: rgba(58, 175, 255, 0.039)\ }\ .ace-katzenmilch .ace_variable.ace_parameter {\ font-style: italic;\ color: rgba(51, 150, 159, 0.87);\ rbackground-color: rgba(5, 214, 249, 0.043)\ }\ .ace-katzenmilch .ace_entity.ace_other.ace_attribute-name {\ color: rgba(73, 70, 194, 0.93);\ rbackground-color: rgba(73, 134, 194, 0.035)\ }\ .ace-katzenmilch .ace_entity.ace_name.ace_tag {\ color: #3976a2;\ rbackground-color: rgba(73, 166, 210, 0.039)\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kr_theme.js ================================================ ace.define("ace/theme/kr_theme",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-kr-theme"; exports.cssText = ".ace-kr-theme .ace_gutter {\ background: #1c1917;\ color: #FCFFE0\ }\ .ace-kr-theme .ace_print-margin {\ width: 1px;\ background: #1c1917\ }\ .ace-kr-theme {\ background-color: #0B0A09;\ color: #FCFFE0\ }\ .ace-kr-theme .ace_cursor {\ color: #FF9900\ }\ .ace-kr-theme .ace_marker-layer .ace_selection {\ background: rgba(170, 0, 255, 0.45)\ }\ .ace-kr-theme.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #0B0A09;\ }\ .ace-kr-theme .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-kr-theme .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 177, 111, 0.32)\ }\ .ace-kr-theme .ace_marker-layer .ace_active-line {\ background: #38403D\ }\ .ace-kr-theme .ace_gutter-active-line {\ background-color : #38403D\ }\ .ace-kr-theme .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(170, 0, 255, 0.45)\ }\ .ace-kr-theme .ace_invisible {\ color: rgba(255, 177, 111, 0.32)\ }\ .ace-kr-theme .ace_keyword,\ .ace-kr-theme .ace_meta {\ color: #949C8B\ }\ .ace-kr-theme .ace_constant,\ .ace-kr-theme .ace_constant.ace_character,\ .ace-kr-theme .ace_constant.ace_character.ace_escape,\ .ace-kr-theme .ace_constant.ace_other {\ color: rgba(210, 117, 24, 0.76)\ }\ .ace-kr-theme .ace_invalid {\ color: #F8F8F8;\ background-color: #A41300\ }\ .ace-kr-theme .ace_support {\ color: #9FC28A\ }\ .ace-kr-theme .ace_support.ace_constant {\ color: #C27E66\ }\ .ace-kr-theme .ace_fold {\ background-color: #949C8B;\ border-color: #FCFFE0\ }\ .ace-kr-theme .ace_support.ace_function {\ color: #85873A\ }\ .ace-kr-theme .ace_storage {\ color: #FFEE80\ }\ .ace-kr-theme .ace_string {\ color: rgba(164, 161, 181, 0.8)\ }\ .ace-kr-theme .ace_string.ace_regexp {\ color: rgba(125, 255, 192, 0.65)\ }\ .ace-kr-theme .ace_comment {\ font-style: italic;\ color: #706D5B\ }\ .ace-kr-theme .ace_variable {\ color: #D1A796\ }\ .ace-kr-theme .ace_list,\ .ace-kr-theme .ace_markup.ace_list {\ background-color: #0F0040\ }\ .ace-kr-theme .ace_variable.ace_language {\ color: #FF80E1\ }\ .ace-kr-theme .ace_meta.ace_tag {\ color: #BABD9C\ }\ .ace-kr-theme .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-kuroir.js ================================================ ace.define("ace/theme/kuroir",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-kuroir"; exports.cssText = "\ .ace-kuroir .ace_gutter {\ background: #e8e8e8;\ color: #333;\ }\ .ace-kuroir .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-kuroir {\ background-color: #E8E9E8;\ color: #363636;\ }\ .ace-kuroir .ace_cursor {\ color: #202020;\ }\ .ace-kuroir .ace_marker-layer .ace_selection {\ background: rgba(245, 170, 0, 0.57);\ }\ .ace-kuroir.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #E8E9E8;\ }\ .ace-kuroir .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174);\ }\ .ace-kuroir .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(0, 0, 0, 0.29);\ }\ .ace-kuroir .ace_marker-layer .ace_active-line {\ background: rgba(203, 220, 47, 0.22);\ }\ .ace-kuroir .ace_gutter-active-line {\ background-color: rgba(203, 220, 47, 0.22);\ }\ .ace-kuroir .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(245, 170, 0, 0.57);\ }\ .ace-kuroir .ace_invisible {\ color: #BFBFBF\ }\ .ace-kuroir .ace_fold {\ border-color: #363636;\ }\ .ace-kuroir .ace_constant{color:#CD6839;}.ace-kuroir .ace_constant.ace_numeric{color:#9A5925;}.ace-kuroir .ace_support{color:#104E8B;}.ace-kuroir .ace_support.ace_function{color:#005273;}.ace-kuroir .ace_support.ace_constant{color:#CF6A4C;}.ace-kuroir .ace_storage{color:#A52A2A;}.ace-kuroir .ace_invalid.ace_illegal{color:#FD1224;\ background-color:rgba(255, 6, 0, 0.15);}.ace-kuroir .ace_invalid.ace_deprecated{text-decoration:underline;\ font-style:italic;\ color:#FD1732;\ background-color:#E8E9E8;}.ace-kuroir .ace_string{color:#639300;}.ace-kuroir .ace_string.ace_regexp{color:#417E00;\ background-color:#C9D4BE;}.ace-kuroir .ace_comment{color:rgba(148, 148, 148, 0.91);\ background-color:rgba(220, 220, 220, 0.56);}.ace-kuroir .ace_variable{color:#009ACD;}.ace-kuroir .ace_meta.ace_tag{color:#005273;}.ace-kuroir .ace_markup.ace_heading{color:#B8012D;\ background-color:rgba(191, 97, 51, 0.051);}.ace-kuroir .ace_markup.ace_list{color:#8F5B26;}\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore.js ================================================ ace.define("ace/theme/merbivore",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-merbivore"; exports.cssText = ".ace-merbivore .ace_gutter {\ background: #202020;\ color: #E6E1DC\ }\ .ace-merbivore .ace_print-margin {\ width: 1px;\ background: #555651\ }\ .ace-merbivore {\ background-color: #161616;\ color: #E6E1DC\ }\ .ace-merbivore .ace_cursor {\ color: #FFFFFF\ }\ .ace-merbivore .ace_marker-layer .ace_selection {\ background: #454545\ }\ .ace-merbivore.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #161616;\ }\ .ace-merbivore .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-merbivore .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-merbivore .ace_marker-layer .ace_active-line {\ background: #333435\ }\ .ace-merbivore .ace_gutter-active-line {\ background-color: #333435\ }\ .ace-merbivore .ace_marker-layer .ace_selected-word {\ border: 1px solid #454545\ }\ .ace-merbivore .ace_invisible {\ color: #404040\ }\ .ace-merbivore .ace_entity.ace_name.ace_tag,\ .ace-merbivore .ace_keyword,\ .ace-merbivore .ace_meta,\ .ace-merbivore .ace_meta.ace_tag,\ .ace-merbivore .ace_storage,\ .ace-merbivore .ace_support.ace_function {\ color: #FC6F09\ }\ .ace-merbivore .ace_constant,\ .ace-merbivore .ace_constant.ace_character,\ .ace-merbivore .ace_constant.ace_character.ace_escape,\ .ace-merbivore .ace_constant.ace_other,\ .ace-merbivore .ace_support.ace_type {\ color: #1EDAFB\ }\ .ace-merbivore .ace_constant.ace_character.ace_escape {\ color: #519F50\ }\ .ace-merbivore .ace_constant.ace_language {\ color: #FDC251\ }\ .ace-merbivore .ace_constant.ace_library,\ .ace-merbivore .ace_string,\ .ace-merbivore .ace_support.ace_constant {\ color: #8DFF0A\ }\ .ace-merbivore .ace_constant.ace_numeric {\ color: #58C554\ }\ .ace-merbivore .ace_invalid {\ color: #FFFFFF;\ background-color: #990000\ }\ .ace-merbivore .ace_fold {\ background-color: #FC6F09;\ border-color: #E6E1DC\ }\ .ace-merbivore .ace_comment {\ font-style: italic;\ color: #AD2EA4\ }\ .ace-merbivore .ace_entity.ace_other.ace_attribute-name {\ color: #FFFF89\ }\ .ace-merbivore .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQFxf3ZXB1df0PAAdsAmERTkEHAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-merbivore_soft.js ================================================ ace.define("ace/theme/merbivore_soft",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-merbivore-soft"; exports.cssText = ".ace-merbivore-soft .ace_gutter {\ background: #262424;\ color: #E6E1DC\ }\ .ace-merbivore-soft .ace_print-margin {\ width: 1px;\ background: #262424\ }\ .ace-merbivore-soft {\ background-color: #1C1C1C;\ color: #E6E1DC\ }\ .ace-merbivore-soft .ace_cursor {\ color: #FFFFFF\ }\ .ace-merbivore-soft .ace_marker-layer .ace_selection {\ background: #494949\ }\ .ace-merbivore-soft.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #1C1C1C;\ }\ .ace-merbivore-soft .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-merbivore-soft .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-merbivore-soft .ace_marker-layer .ace_active-line {\ background: #333435\ }\ .ace-merbivore-soft .ace_gutter-active-line {\ background-color: #333435\ }\ .ace-merbivore-soft .ace_marker-layer .ace_selected-word {\ border: 1px solid #494949\ }\ .ace-merbivore-soft .ace_invisible {\ color: #404040\ }\ .ace-merbivore-soft .ace_entity.ace_name.ace_tag,\ .ace-merbivore-soft .ace_keyword,\ .ace-merbivore-soft .ace_meta,\ .ace-merbivore-soft .ace_meta.ace_tag,\ .ace-merbivore-soft .ace_storage {\ color: #FC803A\ }\ .ace-merbivore-soft .ace_constant,\ .ace-merbivore-soft .ace_constant.ace_character,\ .ace-merbivore-soft .ace_constant.ace_character.ace_escape,\ .ace-merbivore-soft .ace_constant.ace_other,\ .ace-merbivore-soft .ace_support.ace_type {\ color: #68C1D8\ }\ .ace-merbivore-soft .ace_constant.ace_character.ace_escape {\ color: #B3E5B4\ }\ .ace-merbivore-soft .ace_constant.ace_language {\ color: #E1C582\ }\ .ace-merbivore-soft .ace_constant.ace_library,\ .ace-merbivore-soft .ace_string,\ .ace-merbivore-soft .ace_support.ace_constant {\ color: #8EC65F\ }\ .ace-merbivore-soft .ace_constant.ace_numeric {\ color: #7FC578\ }\ .ace-merbivore-soft .ace_invalid,\ .ace-merbivore-soft .ace_invalid.ace_deprecated {\ color: #FFFFFF;\ background-color: #FE3838\ }\ .ace-merbivore-soft .ace_fold {\ background-color: #FC803A;\ border-color: #E6E1DC\ }\ .ace-merbivore-soft .ace_comment,\ .ace-merbivore-soft .ace_meta {\ font-style: italic;\ color: #AC4BB8\ }\ .ace-merbivore-soft .ace_entity.ace_other.ace_attribute-name {\ color: #EAF1A3\ }\ .ace-merbivore-soft .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWOQkpLyZfD09PwPAAfYAnaStpHRAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-mono_industrial.js ================================================ ace.define("ace/theme/mono_industrial",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-mono-industrial"; exports.cssText = ".ace-mono-industrial .ace_gutter {\ background: #1d2521;\ color: #C5C9C9\ }\ .ace-mono-industrial .ace_print-margin {\ width: 1px;\ background: #555651\ }\ .ace-mono-industrial {\ background-color: #222C28;\ color: #FFFFFF\ }\ .ace-mono-industrial .ace_cursor {\ color: #FFFFFF\ }\ .ace-mono-industrial .ace_marker-layer .ace_selection {\ background: rgba(145, 153, 148, 0.40)\ }\ .ace-mono-industrial.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #222C28;\ }\ .ace-mono-industrial .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-mono-industrial .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(102, 108, 104, 0.50)\ }\ .ace-mono-industrial .ace_marker-layer .ace_active-line {\ background: rgba(12, 13, 12, 0.25)\ }\ .ace-mono-industrial .ace_gutter-active-line {\ background-color: rgba(12, 13, 12, 0.25)\ }\ .ace-mono-industrial .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(145, 153, 148, 0.40)\ }\ .ace-mono-industrial .ace_invisible {\ color: rgba(102, 108, 104, 0.50)\ }\ .ace-mono-industrial .ace_string {\ background-color: #151C19;\ color: #FFFFFF\ }\ .ace-mono-industrial .ace_keyword,\ .ace-mono-industrial .ace_meta {\ color: #A39E64\ }\ .ace-mono-industrial .ace_constant,\ .ace-mono-industrial .ace_constant.ace_character,\ .ace-mono-industrial .ace_constant.ace_character.ace_escape,\ .ace-mono-industrial .ace_constant.ace_numeric,\ .ace-mono-industrial .ace_constant.ace_other {\ color: #E98800\ }\ .ace-mono-industrial .ace_entity.ace_name.ace_function,\ .ace-mono-industrial .ace_keyword.ace_operator,\ .ace-mono-industrial .ace_variable {\ color: #A8B3AB\ }\ .ace-mono-industrial .ace_invalid {\ color: #FFFFFF;\ background-color: rgba(153, 0, 0, 0.68)\ }\ .ace-mono-industrial .ace_support.ace_constant {\ color: #C87500\ }\ .ace-mono-industrial .ace_fold {\ background-color: #A8B3AB;\ border-color: #FFFFFF\ }\ .ace-mono-industrial .ace_support.ace_function {\ color: #588E60\ }\ .ace-mono-industrial .ace_entity.ace_name,\ .ace-mono-industrial .ace_support.ace_class,\ .ace-mono-industrial .ace_support.ace_type {\ color: #5778B6\ }\ .ace-mono-industrial .ace_storage {\ color: #C23B00\ }\ .ace-mono-industrial .ace_variable.ace_language,\ .ace-mono-industrial .ace_variable.ace_parameter {\ color: #648BD2\ }\ .ace-mono-industrial .ace_comment {\ color: #666C68;\ background-color: #151C19\ }\ .ace-mono-industrial .ace_entity.ace_other.ace_attribute-name {\ color: #909993\ }\ .ace-mono-industrial .ace_entity.ace_name.ace_tag {\ color: #A65EFF\ }\ .ace-mono-industrial .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNQ1NbwZfALD/4PAAlTArlEC4r/AAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-monokai.js ================================================ ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-monokai"; exports.cssText = ".ace-monokai .ace_gutter {\ background: #2F3129;\ color: #8F908A\ }\ .ace-monokai .ace_print-margin {\ width: 1px;\ background: #555651\ }\ .ace-monokai {\ background-color: #272822;\ color: #F8F8F2\ }\ .ace-monokai .ace_cursor {\ color: #F8F8F0\ }\ .ace-monokai .ace_marker-layer .ace_selection {\ background: #49483E\ }\ .ace-monokai.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #272822;\ }\ .ace-monokai .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-monokai .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #49483E\ }\ .ace-monokai .ace_marker-layer .ace_active-line {\ background: #202020\ }\ .ace-monokai .ace_gutter-active-line {\ background-color: #272727\ }\ .ace-monokai .ace_marker-layer .ace_selected-word {\ border: 1px solid #49483E\ }\ .ace-monokai .ace_invisible {\ color: #52524d\ }\ .ace-monokai .ace_entity.ace_name.ace_tag,\ .ace-monokai .ace_keyword,\ .ace-monokai .ace_meta.ace_tag,\ .ace-monokai .ace_storage {\ color: #F92672\ }\ .ace-monokai .ace_punctuation,\ .ace-monokai .ace_punctuation.ace_tag {\ color: #fff\ }\ .ace-monokai .ace_constant.ace_character,\ .ace-monokai .ace_constant.ace_language,\ .ace-monokai .ace_constant.ace_numeric,\ .ace-monokai .ace_constant.ace_other {\ color: #AE81FF\ }\ .ace-monokai .ace_invalid {\ color: #F8F8F0;\ background-color: #F92672\ }\ .ace-monokai .ace_invalid.ace_deprecated {\ color: #F8F8F0;\ background-color: #AE81FF\ }\ .ace-monokai .ace_support.ace_constant,\ .ace-monokai .ace_support.ace_function {\ color: #66D9EF\ }\ .ace-monokai .ace_fold {\ background-color: #A6E22E;\ border-color: #F8F8F2\ }\ .ace-monokai .ace_storage.ace_type,\ .ace-monokai .ace_support.ace_class,\ .ace-monokai .ace_support.ace_type {\ font-style: italic;\ color: #66D9EF\ }\ .ace-monokai .ace_entity.ace_name.ace_function,\ .ace-monokai .ace_entity.ace_other,\ .ace-monokai .ace_entity.ace_other.ace_attribute-name,\ .ace-monokai .ace_variable {\ color: #A6E22E\ }\ .ace-monokai .ace_variable.ace_parameter {\ font-style: italic;\ color: #FD971F\ }\ .ace-monokai .ace_string {\ color: #E6DB74\ }\ .ace-monokai .ace_comment {\ color: #75715E\ }\ .ace-monokai .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-pastel_on_dark.js ================================================ ace.define("ace/theme/pastel_on_dark",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-pastel-on-dark"; exports.cssText = ".ace-pastel-on-dark .ace_gutter {\ background: #353030;\ color: #8F938F\ }\ .ace-pastel-on-dark .ace_print-margin {\ width: 1px;\ background: #353030\ }\ .ace-pastel-on-dark {\ background-color: #2C2828;\ color: #8F938F\ }\ .ace-pastel-on-dark .ace_cursor {\ color: #A7A7A7\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_selection {\ background: rgba(221, 240, 255, 0.20)\ }\ .ace-pastel-on-dark.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #2C2828;\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.25)\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_active-line {\ background: rgba(255, 255, 255, 0.031)\ }\ .ace-pastel-on-dark .ace_gutter-active-line {\ background-color: rgba(255, 255, 255, 0.031)\ }\ .ace-pastel-on-dark .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(221, 240, 255, 0.20)\ }\ .ace-pastel-on-dark .ace_invisible {\ color: rgba(255, 255, 255, 0.25)\ }\ .ace-pastel-on-dark .ace_keyword,\ .ace-pastel-on-dark .ace_meta {\ color: #757aD8\ }\ .ace-pastel-on-dark .ace_constant,\ .ace-pastel-on-dark .ace_constant.ace_character,\ .ace-pastel-on-dark .ace_constant.ace_character.ace_escape,\ .ace-pastel-on-dark .ace_constant.ace_other {\ color: #4FB7C5\ }\ .ace-pastel-on-dark .ace_keyword.ace_operator {\ color: #797878\ }\ .ace-pastel-on-dark .ace_constant.ace_character {\ color: #AFA472\ }\ .ace-pastel-on-dark .ace_constant.ace_language {\ color: #DE8E30\ }\ .ace-pastel-on-dark .ace_constant.ace_numeric {\ color: #CCCCCC\ }\ .ace-pastel-on-dark .ace_invalid,\ .ace-pastel-on-dark .ace_invalid.ace_illegal {\ color: #F8F8F8;\ background-color: rgba(86, 45, 86, 0.75)\ }\ .ace-pastel-on-dark .ace_invalid.ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #D2A8A1\ }\ .ace-pastel-on-dark .ace_fold {\ background-color: #757aD8;\ border-color: #8F938F\ }\ .ace-pastel-on-dark .ace_support.ace_function {\ color: #AEB2F8\ }\ .ace-pastel-on-dark .ace_string {\ color: #66A968\ }\ .ace-pastel-on-dark .ace_string.ace_regexp {\ color: #E9C062\ }\ .ace-pastel-on-dark .ace_comment {\ color: #A6C6FF\ }\ .ace-pastel-on-dark .ace_variable {\ color: #BEBF55\ }\ .ace-pastel-on-dark .ace_variable.ace_language {\ color: #C1C144\ }\ .ace-pastel-on-dark .ace_xml-pe {\ color: #494949\ }\ .ace-pastel-on-dark .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYIiPj/8PAARgAh2NTMh8AAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_dark.js ================================================ ace.define("ace/theme/solarized_dark",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-solarized-dark"; exports.cssText = ".ace-solarized-dark .ace_gutter {\ background: #01313f;\ color: #d0edf7\ }\ .ace-solarized-dark .ace_print-margin {\ width: 1px;\ background: #33555E\ }\ .ace-solarized-dark {\ background-color: #002B36;\ color: #93A1A1\ }\ .ace-solarized-dark .ace_entity.ace_other.ace_attribute-name,\ .ace-solarized-dark .ace_storage {\ color: #93A1A1\ }\ .ace-solarized-dark .ace_cursor,\ .ace-solarized-dark .ace_string.ace_regexp {\ color: #D30102\ }\ .ace-solarized-dark .ace_marker-layer .ace_active-line,\ .ace-solarized-dark .ace_marker-layer .ace_selection {\ background: rgba(255, 255, 255, 0.1)\ }\ .ace-solarized-dark.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002B36;\ }\ .ace-solarized-dark .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-solarized-dark .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-dark .ace_gutter-active-line {\ background-color: #0d3440\ }\ .ace-solarized-dark .ace_marker-layer .ace_selected-word {\ border: 1px solid #073642\ }\ .ace-solarized-dark .ace_invisible {\ color: rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-dark .ace_keyword,\ .ace-solarized-dark .ace_meta,\ .ace-solarized-dark .ace_support.ace_class,\ .ace-solarized-dark .ace_support.ace_type {\ color: #859900\ }\ .ace-solarized-dark .ace_constant.ace_character,\ .ace-solarized-dark .ace_constant.ace_other {\ color: #CB4B16\ }\ .ace-solarized-dark .ace_constant.ace_language {\ color: #B58900\ }\ .ace-solarized-dark .ace_constant.ace_numeric {\ color: #D33682\ }\ .ace-solarized-dark .ace_fold {\ background-color: #268BD2;\ border-color: #93A1A1\ }\ .ace-solarized-dark .ace_entity.ace_name.ace_function,\ .ace-solarized-dark .ace_entity.ace_name.ace_tag,\ .ace-solarized-dark .ace_support.ace_function,\ .ace-solarized-dark .ace_variable,\ .ace-solarized-dark .ace_variable.ace_language {\ color: #268BD2\ }\ .ace-solarized-dark .ace_string {\ color: #2AA198\ }\ .ace-solarized-dark .ace_comment {\ font-style: italic;\ color: #657B83\ }\ .ace-solarized-dark .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNg0Db1ZVCxc/sPAAd4AlUHlLenAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-solarized_light.js ================================================ ace.define("ace/theme/solarized_light",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-solarized-light"; exports.cssText = ".ace-solarized-light .ace_gutter {\ background: #fbf1d3;\ color: #333\ }\ .ace-solarized-light .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-solarized-light {\ background-color: #FDF6E3;\ color: #586E75\ }\ .ace-solarized-light .ace_cursor {\ color: #000000\ }\ .ace-solarized-light .ace_marker-layer .ace_selection {\ background: rgba(7, 54, 67, 0.09)\ }\ .ace-solarized-light.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FDF6E3;\ }\ .ace-solarized-light .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-solarized-light .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-light .ace_marker-layer .ace_active-line {\ background: #EEE8D5\ }\ .ace-solarized-light .ace_gutter-active-line {\ background-color : #EDE5C1\ }\ .ace-solarized-light .ace_marker-layer .ace_selected-word {\ border: 1px solid #073642\ }\ .ace-solarized-light .ace_invisible {\ color: rgba(147, 161, 161, 0.50)\ }\ .ace-solarized-light .ace_keyword,\ .ace-solarized-light .ace_meta,\ .ace-solarized-light .ace_support.ace_class,\ .ace-solarized-light .ace_support.ace_type {\ color: #859900\ }\ .ace-solarized-light .ace_constant.ace_character,\ .ace-solarized-light .ace_constant.ace_other {\ color: #CB4B16\ }\ .ace-solarized-light .ace_constant.ace_language {\ color: #B58900\ }\ .ace-solarized-light .ace_constant.ace_numeric {\ color: #D33682\ }\ .ace-solarized-light .ace_fold {\ background-color: #268BD2;\ border-color: #586E75\ }\ .ace-solarized-light .ace_entity.ace_name.ace_function,\ .ace-solarized-light .ace_entity.ace_name.ace_tag,\ .ace-solarized-light .ace_support.ace_function,\ .ace-solarized-light .ace_variable,\ .ace-solarized-light .ace_variable.ace_language {\ color: #268BD2\ }\ .ace-solarized-light .ace_storage {\ color: #073642\ }\ .ace-solarized-light .ace_string {\ color: #2AA198\ }\ .ace-solarized-light .ace_string.ace_regexp {\ color: #D30102\ }\ .ace-solarized-light .ace_comment,\ .ace-solarized-light .ace_entity.ace_other.ace_attribute-name {\ color: #93A1A1\ }\ .ace-solarized-light .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHjy8NJ/AAjgA5fzQUmBAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-sqlserver.js ================================================ ace.define("ace/theme/sqlserver",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-sqlserver"; exports.cssText = ".ace-sqlserver .ace_gutter {\ background: #ebebeb;\ color: #333;\ overflow: hidden;\ }\ .ace-sqlserver .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-sqlserver {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-sqlserver .ace_identifier {\ color: black;\ }\ .ace-sqlserver .ace_keyword {\ color: #0000FF;\ }\ .ace-sqlserver .ace_numeric {\ color: black;\ }\ .ace-sqlserver .ace_storage {\ color: #11B7BE;\ }\ .ace-sqlserver .ace_keyword.ace_operator,\ .ace-sqlserver .ace_lparen,\ .ace-sqlserver .ace_rparen,\ .ace-sqlserver .ace_punctuation {\ color: #808080;\ }\ .ace-sqlserver .ace_set.ace_statement {\ color: #0000FF;\ text-decoration: underline;\ }\ .ace-sqlserver .ace_cursor {\ color: black;\ }\ .ace-sqlserver .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-sqlserver .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-sqlserver .ace_constant.ace_language {\ color: #979797;\ }\ .ace-sqlserver .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-sqlserver .ace_invalid {\ background-color: rgb(153, 0, 0);\ color: white;\ }\ .ace-sqlserver .ace_support.ace_function {\ color: #FF00FF;\ }\ .ace-sqlserver .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-sqlserver .ace_class {\ color: #008080;\ }\ .ace-sqlserver .ace_support.ace_other {\ color: #6D79DE;\ }\ .ace-sqlserver .ace_variable.ace_parameter {\ font-style: italic;\ color: #FD971F;\ }\ .ace-sqlserver .ace_comment {\ color: #008000;\ }\ .ace-sqlserver .ace_constant.ace_numeric {\ color: black;\ }\ .ace-sqlserver .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-sqlserver .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-sqlserver .ace_support.ace_storedprocedure {\ color: #800000;\ }\ .ace-sqlserver .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-sqlserver .ace_list {\ color: rgb(185, 6, 144);\ }\ .ace-sqlserver .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-sqlserver .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-sqlserver .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-sqlserver .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-sqlserver .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-sqlserver .ace_gutter-active-line {\ background-color: #dcdcdc;\ }\ .ace-sqlserver .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-sqlserver .ace_meta.ace_tag {\ color: #0000FF;\ }\ .ace-sqlserver .ace_string.ace_regex {\ color: #FF0000;\ }\ .ace-sqlserver .ace_string {\ color: #FF0000;\ }\ .ace-sqlserver .ace_entity.ace_other.ace_attribute-name {\ color: #994409;\ }\ .ace-sqlserver .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-terminal.js ================================================ ace.define("ace/theme/terminal",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-terminal-theme"; exports.cssText = ".ace-terminal-theme .ace_gutter {\ background: #1a0005;\ color: steelblue\ }\ .ace-terminal-theme .ace_print-margin {\ width: 1px;\ background: #1a1a1a\ }\ .ace-terminal-theme {\ background-color: black;\ color: #DEDEDE\ }\ .ace-terminal-theme .ace_cursor {\ color: #9F9F9F\ }\ .ace-terminal-theme .ace_marker-layer .ace_selection {\ background: #424242\ }\ .ace-terminal-theme.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px black;\ }\ .ace-terminal-theme .ace_marker-layer .ace_step {\ background: rgb(0, 0, 0)\ }\ .ace-terminal-theme .ace_marker-layer .ace_bracket {\ background: #090;\ }\ .ace-terminal-theme .ace_marker-layer .ace_bracket-start {\ background: #090;\ }\ .ace-terminal-theme .ace_marker-layer .ace_bracket-unmatched {\ margin: -1px 0 0 -1px;\ border: 1px solid #900\ }\ .ace-terminal-theme .ace_marker-layer .ace_active-line {\ background: #2A2A2A\ }\ .ace-terminal-theme .ace_gutter-active-line {\ background-color: #2A112A\ }\ .ace-terminal-theme .ace_marker-layer .ace_selected-word {\ border: 1px solid #424242\ }\ .ace-terminal-theme .ace_invisible {\ color: #343434\ }\ .ace-terminal-theme .ace_keyword,\ .ace-terminal-theme .ace_meta,\ .ace-terminal-theme .ace_storage,\ .ace-terminal-theme .ace_storage.ace_type,\ .ace-terminal-theme .ace_support.ace_type {\ color: tomato\ }\ .ace-terminal-theme .ace_keyword.ace_operator {\ color: deeppink\ }\ .ace-terminal-theme .ace_constant.ace_character,\ .ace-terminal-theme .ace_constant.ace_language,\ .ace-terminal-theme .ace_constant.ace_numeric,\ .ace-terminal-theme .ace_keyword.ace_other.ace_unit,\ .ace-terminal-theme .ace_support.ace_constant,\ .ace-terminal-theme .ace_variable.ace_parameter {\ color: #E78C45\ }\ .ace-terminal-theme .ace_constant.ace_other {\ color: gold\ }\ .ace-terminal-theme .ace_invalid {\ color: yellow;\ background-color: red\ }\ .ace-terminal-theme .ace_invalid.ace_deprecated {\ color: #CED2CF;\ background-color: #B798BF\ }\ .ace-terminal-theme .ace_fold {\ background-color: #7AA6DA;\ border-color: #DEDEDE\ }\ .ace-terminal-theme .ace_entity.ace_name.ace_function,\ .ace-terminal-theme .ace_support.ace_function,\ .ace-terminal-theme .ace_variable {\ color: #7AA6DA\ }\ .ace-terminal-theme .ace_support.ace_class,\ .ace-terminal-theme .ace_support.ace_type {\ color: #E7C547\ }\ .ace-terminal-theme .ace_heading,\ .ace-terminal-theme .ace_string {\ color: #B9CA4A\ }\ .ace-terminal-theme .ace_entity.ace_name.ace_tag,\ .ace-terminal-theme .ace_entity.ace_other.ace_attribute-name,\ .ace-terminal-theme .ace_meta.ace_tag,\ .ace-terminal-theme .ace_string.ace_regexp,\ .ace-terminal-theme .ace_variable {\ color: #D54E53\ }\ .ace-terminal-theme .ace_comment {\ color: orangered\ }\ .ace-terminal-theme .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYLBWV/8PAAK4AYnhiq+xAAAAAElFTkSuQmCC) right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-textmate.js ================================================ ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) { "use strict"; exports.isDark = false; exports.cssClass = "ace-tm"; exports.cssText = ".ace-tm .ace_gutter {\ background: #f0f0f0;\ color: #333;\ }\ .ace-tm .ace_print-margin {\ width: 1px;\ background: #e8e8e8;\ }\ .ace-tm .ace_fold {\ background-color: #6B72E6;\ }\ .ace-tm {\ background-color: #FFFFFF;\ color: black;\ }\ .ace-tm .ace_cursor {\ color: black;\ }\ .ace-tm .ace_invisible {\ color: rgb(191, 191, 191);\ }\ .ace-tm .ace_storage,\ .ace-tm .ace_keyword {\ color: blue;\ }\ .ace-tm .ace_constant {\ color: rgb(197, 6, 11);\ }\ .ace-tm .ace_constant.ace_buildin {\ color: rgb(88, 72, 246);\ }\ .ace-tm .ace_constant.ace_language {\ color: rgb(88, 92, 246);\ }\ .ace-tm .ace_constant.ace_library {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_invalid {\ background-color: rgba(255, 0, 0, 0.1);\ color: red;\ }\ .ace-tm .ace_support.ace_function {\ color: rgb(60, 76, 114);\ }\ .ace-tm .ace_support.ace_constant {\ color: rgb(6, 150, 14);\ }\ .ace-tm .ace_support.ace_type,\ .ace-tm .ace_support.ace_class {\ color: rgb(109, 121, 222);\ }\ .ace-tm .ace_keyword.ace_operator {\ color: rgb(104, 118, 135);\ }\ .ace-tm .ace_string {\ color: rgb(3, 106, 7);\ }\ .ace-tm .ace_comment {\ color: rgb(76, 136, 107);\ }\ .ace-tm .ace_comment.ace_doc {\ color: rgb(0, 102, 255);\ }\ .ace-tm .ace_comment.ace_doc.ace_tag {\ color: rgb(128, 159, 191);\ }\ .ace-tm .ace_constant.ace_numeric {\ color: rgb(0, 0, 205);\ }\ .ace-tm .ace_variable {\ color: rgb(49, 132, 149);\ }\ .ace-tm .ace_xml-pe {\ color: rgb(104, 104, 91);\ }\ .ace-tm .ace_entity.ace_name.ace_function {\ color: #0000A2;\ }\ .ace-tm .ace_heading {\ color: rgb(12, 7, 255);\ }\ .ace-tm .ace_list {\ color:rgb(185, 6, 144);\ }\ .ace-tm .ace_meta.ace_tag {\ color:rgb(0, 22, 142);\ }\ .ace-tm .ace_string.ace_regex {\ color: rgb(255, 0, 0)\ }\ .ace-tm .ace_marker-layer .ace_selection {\ background: rgb(181, 213, 255);\ }\ .ace-tm.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px white;\ }\ .ace-tm .ace_marker-layer .ace_step {\ background: rgb(252, 255, 0);\ }\ .ace-tm .ace_marker-layer .ace_stack {\ background: rgb(164, 229, 101);\ }\ .ace-tm .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgb(192, 192, 192);\ }\ .ace-tm .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.07);\ }\ .ace-tm .ace_gutter-active-line {\ background-color : #dcdcdc;\ }\ .ace-tm .ace_marker-layer .ace_selected-word {\ background: rgb(250, 250, 255);\ border: 1px solid rgb(200, 200, 250);\ }\ .ace-tm .ace_indent-guide {\ background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ }\ "; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow.js ================================================ ace.define("ace/theme/tomorrow",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-tomorrow"; exports.cssText = ".ace-tomorrow .ace_gutter {\ background: #f6f6f6;\ color: #4D4D4C\ }\ .ace-tomorrow .ace_print-margin {\ width: 1px;\ background: #f6f6f6\ }\ .ace-tomorrow {\ background-color: #FFFFFF;\ color: #4D4D4C\ }\ .ace-tomorrow .ace_cursor {\ color: #AEAFAD\ }\ .ace-tomorrow .ace_marker-layer .ace_selection {\ background: #D6D6D6\ }\ .ace-tomorrow.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ }\ .ace-tomorrow .ace_marker-layer .ace_step {\ background: rgb(255, 255, 0)\ }\ .ace-tomorrow .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #D1D1D1\ }\ .ace-tomorrow .ace_marker-layer .ace_active-line {\ background: #EFEFEF\ }\ .ace-tomorrow .ace_gutter-active-line {\ background-color : #dcdcdc\ }\ .ace-tomorrow .ace_marker-layer .ace_selected-word {\ border: 1px solid #D6D6D6\ }\ .ace-tomorrow .ace_invisible {\ color: #D1D1D1\ }\ .ace-tomorrow .ace_keyword,\ .ace-tomorrow .ace_meta,\ .ace-tomorrow .ace_storage,\ .ace-tomorrow .ace_storage.ace_type,\ .ace-tomorrow .ace_support.ace_type {\ color: #8959A8\ }\ .ace-tomorrow .ace_keyword.ace_operator {\ color: #3E999F\ }\ .ace-tomorrow .ace_constant.ace_character,\ .ace-tomorrow .ace_constant.ace_language,\ .ace-tomorrow .ace_constant.ace_numeric,\ .ace-tomorrow .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow .ace_support.ace_constant,\ .ace-tomorrow .ace_variable.ace_parameter {\ color: #F5871F\ }\ .ace-tomorrow .ace_constant.ace_other {\ color: #666969\ }\ .ace-tomorrow .ace_invalid {\ color: #FFFFFF;\ background-color: #C82829\ }\ .ace-tomorrow .ace_invalid.ace_deprecated {\ color: #FFFFFF;\ background-color: #8959A8\ }\ .ace-tomorrow .ace_fold {\ background-color: #4271AE;\ border-color: #4D4D4C\ }\ .ace-tomorrow .ace_entity.ace_name.ace_function,\ .ace-tomorrow .ace_support.ace_function,\ .ace-tomorrow .ace_variable {\ color: #4271AE\ }\ .ace-tomorrow .ace_support.ace_class,\ .ace-tomorrow .ace_support.ace_type {\ color: #C99E00\ }\ .ace-tomorrow .ace_heading,\ .ace-tomorrow .ace_markup.ace_heading,\ .ace-tomorrow .ace_string {\ color: #718C00\ }\ .ace-tomorrow .ace_entity.ace_name.ace_tag,\ .ace-tomorrow .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow .ace_meta.ace_tag,\ .ace-tomorrow .ace_string.ace_regexp,\ .ace-tomorrow .ace_variable {\ color: #C82829\ }\ .ace-tomorrow .ace_comment {\ color: #8E908C\ }\ .ace-tomorrow .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bdu3f/BwAlfgctduB85QAAAABJRU5ErkJggg==) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night.js ================================================ ace.define("ace/theme/tomorrow_night",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night"; exports.cssText = ".ace-tomorrow-night .ace_gutter {\ background: #25282c;\ color: #C5C8C6\ }\ .ace-tomorrow-night .ace_print-margin {\ width: 1px;\ background: #25282c\ }\ .ace-tomorrow-night {\ background-color: #1D1F21;\ color: #C5C8C6\ }\ .ace-tomorrow-night .ace_cursor {\ color: #AEAFAD\ }\ .ace-tomorrow-night .ace_marker-layer .ace_selection {\ background: #373B41\ }\ .ace-tomorrow-night.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #1D1F21;\ }\ .ace-tomorrow-night .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-tomorrow-night .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #4B4E55\ }\ .ace-tomorrow-night .ace_marker-layer .ace_active-line {\ background: #282A2E\ }\ .ace-tomorrow-night .ace_gutter-active-line {\ background-color: #282A2E\ }\ .ace-tomorrow-night .ace_marker-layer .ace_selected-word {\ border: 1px solid #373B41\ }\ .ace-tomorrow-night .ace_invisible {\ color: #4B4E55\ }\ .ace-tomorrow-night .ace_keyword,\ .ace-tomorrow-night .ace_meta,\ .ace-tomorrow-night .ace_storage,\ .ace-tomorrow-night .ace_storage.ace_type,\ .ace-tomorrow-night .ace_support.ace_type {\ color: #B294BB\ }\ .ace-tomorrow-night .ace_keyword.ace_operator {\ color: #8ABEB7\ }\ .ace-tomorrow-night .ace_constant.ace_character,\ .ace-tomorrow-night .ace_constant.ace_language,\ .ace-tomorrow-night .ace_constant.ace_numeric,\ .ace-tomorrow-night .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night .ace_support.ace_constant,\ .ace-tomorrow-night .ace_variable.ace_parameter {\ color: #DE935F\ }\ .ace-tomorrow-night .ace_constant.ace_other {\ color: #CED1CF\ }\ .ace-tomorrow-night .ace_invalid {\ color: #CED2CF;\ background-color: #DF5F5F\ }\ .ace-tomorrow-night .ace_invalid.ace_deprecated {\ color: #CED2CF;\ background-color: #B798BF\ }\ .ace-tomorrow-night .ace_fold {\ background-color: #81A2BE;\ border-color: #C5C8C6\ }\ .ace-tomorrow-night .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night .ace_support.ace_function,\ .ace-tomorrow-night .ace_variable {\ color: #81A2BE\ }\ .ace-tomorrow-night .ace_support.ace_class,\ .ace-tomorrow-night .ace_support.ace_type {\ color: #F0C674\ }\ .ace-tomorrow-night .ace_heading,\ .ace-tomorrow-night .ace_markup.ace_heading,\ .ace-tomorrow-night .ace_string {\ color: #B5BD68\ }\ .ace-tomorrow-night .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night .ace_meta.ace_tag,\ .ace-tomorrow-night .ace_string.ace_regexp,\ .ace-tomorrow-night .ace_variable {\ color: #CC6666\ }\ .ace-tomorrow-night .ace_comment {\ color: #969896\ }\ .ace-tomorrow-night .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYHB3d/8PAAOIAdULw8qMAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_blue.js ================================================ ace.define("ace/theme/tomorrow_night_blue",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night-blue"; exports.cssText = ".ace-tomorrow-night-blue .ace_gutter {\ background: #00204b;\ color: #7388b5\ }\ .ace-tomorrow-night-blue .ace_print-margin {\ width: 1px;\ background: #00204b\ }\ .ace-tomorrow-night-blue {\ background-color: #002451;\ color: #FFFFFF\ }\ .ace-tomorrow-night-blue .ace_constant.ace_other,\ .ace-tomorrow-night-blue .ace_cursor {\ color: #FFFFFF\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_selection {\ background: #003F8E\ }\ .ace-tomorrow-night-blue.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #002451;\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_step {\ background: rgb(127, 111, 19)\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404F7D\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_active-line {\ background: #00346E\ }\ .ace-tomorrow-night-blue .ace_gutter-active-line {\ background-color: #022040\ }\ .ace-tomorrow-night-blue .ace_marker-layer .ace_selected-word {\ border: 1px solid #003F8E\ }\ .ace-tomorrow-night-blue .ace_invisible {\ color: #404F7D\ }\ .ace-tomorrow-night-blue .ace_keyword,\ .ace-tomorrow-night-blue .ace_meta,\ .ace-tomorrow-night-blue .ace_storage,\ .ace-tomorrow-night-blue .ace_storage.ace_type,\ .ace-tomorrow-night-blue .ace_support.ace_type {\ color: #EBBBFF\ }\ .ace-tomorrow-night-blue .ace_keyword.ace_operator {\ color: #99FFFF\ }\ .ace-tomorrow-night-blue .ace_constant.ace_character,\ .ace-tomorrow-night-blue .ace_constant.ace_language,\ .ace-tomorrow-night-blue .ace_constant.ace_numeric,\ .ace-tomorrow-night-blue .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night-blue .ace_support.ace_constant,\ .ace-tomorrow-night-blue .ace_variable.ace_parameter {\ color: #FFC58F\ }\ .ace-tomorrow-night-blue .ace_invalid {\ color: #FFFFFF;\ background-color: #F99DA5\ }\ .ace-tomorrow-night-blue .ace_invalid.ace_deprecated {\ color: #FFFFFF;\ background-color: #EBBBFF\ }\ .ace-tomorrow-night-blue .ace_fold {\ background-color: #BBDAFF;\ border-color: #FFFFFF\ }\ .ace-tomorrow-night-blue .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night-blue .ace_support.ace_function,\ .ace-tomorrow-night-blue .ace_variable {\ color: #BBDAFF\ }\ .ace-tomorrow-night-blue .ace_support.ace_class,\ .ace-tomorrow-night-blue .ace_support.ace_type {\ color: #FFEEAD\ }\ .ace-tomorrow-night-blue .ace_heading,\ .ace-tomorrow-night-blue .ace_markup.ace_heading,\ .ace-tomorrow-night-blue .ace_string {\ color: #D1F1A9\ }\ .ace-tomorrow-night-blue .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night-blue .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night-blue .ace_meta.ace_tag,\ .ace-tomorrow-night-blue .ace_string.ace_regexp,\ .ace-tomorrow-night-blue .ace_variable {\ color: #FF9DA4\ }\ .ace-tomorrow-night-blue .ace_comment {\ color: #7285B7\ }\ .ace-tomorrow-night-blue .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYJDzqfwPAANXAeNsiA+ZAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_bright.js ================================================ ace.define("ace/theme/tomorrow_night_bright",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night-bright"; exports.cssText = ".ace-tomorrow-night-bright .ace_gutter {\ background: #1a1a1a;\ color: #DEDEDE\ }\ .ace-tomorrow-night-bright .ace_print-margin {\ width: 1px;\ background: #1a1a1a\ }\ .ace-tomorrow-night-bright {\ background-color: #000000;\ color: #DEDEDE\ }\ .ace-tomorrow-night-bright .ace_cursor {\ color: #9F9F9F\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_selection {\ background: #424242\ }\ .ace-tomorrow-night-bright.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #000000;\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #888888\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_highlight {\ border: 1px solid rgb(110, 119, 0);\ border-bottom: 0;\ box-shadow: inset 0 -1px rgb(110, 119, 0);\ margin: -1px 0 0 -1px;\ background: rgba(255, 235, 0, 0.1)\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_active-line {\ background: #2A2A2A\ }\ .ace-tomorrow-night-bright .ace_gutter-active-line {\ background-color: #2A2A2A\ }\ .ace-tomorrow-night-bright .ace_stack {\ background-color: rgb(66, 90, 44)\ }\ .ace-tomorrow-night-bright .ace_marker-layer .ace_selected-word {\ border: 1px solid #888888\ }\ .ace-tomorrow-night-bright .ace_invisible {\ color: #343434\ }\ .ace-tomorrow-night-bright .ace_keyword,\ .ace-tomorrow-night-bright .ace_meta,\ .ace-tomorrow-night-bright .ace_storage,\ .ace-tomorrow-night-bright .ace_storage.ace_type,\ .ace-tomorrow-night-bright .ace_support.ace_type {\ color: #C397D8\ }\ .ace-tomorrow-night-bright .ace_keyword.ace_operator {\ color: #70C0B1\ }\ .ace-tomorrow-night-bright .ace_constant.ace_character,\ .ace-tomorrow-night-bright .ace_constant.ace_language,\ .ace-tomorrow-night-bright .ace_constant.ace_numeric,\ .ace-tomorrow-night-bright .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night-bright .ace_support.ace_constant,\ .ace-tomorrow-night-bright .ace_variable.ace_parameter {\ color: #E78C45\ }\ .ace-tomorrow-night-bright .ace_constant.ace_other {\ color: #EEEEEE\ }\ .ace-tomorrow-night-bright .ace_invalid {\ color: #CED2CF;\ background-color: #DF5F5F\ }\ .ace-tomorrow-night-bright .ace_invalid.ace_deprecated {\ color: #CED2CF;\ background-color: #B798BF\ }\ .ace-tomorrow-night-bright .ace_fold {\ background-color: #7AA6DA;\ border-color: #DEDEDE\ }\ .ace-tomorrow-night-bright .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night-bright .ace_support.ace_function,\ .ace-tomorrow-night-bright .ace_variable {\ color: #7AA6DA\ }\ .ace-tomorrow-night-bright .ace_support.ace_class,\ .ace-tomorrow-night-bright .ace_support.ace_type {\ color: #E7C547\ }\ .ace-tomorrow-night-bright .ace_heading,\ .ace-tomorrow-night-bright .ace_markup.ace_heading,\ .ace-tomorrow-night-bright .ace_string {\ color: #B9CA4A\ }\ .ace-tomorrow-night-bright .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night-bright .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night-bright .ace_meta.ace_tag,\ .ace-tomorrow-night-bright .ace_string.ace_regexp,\ .ace-tomorrow-night-bright .ace_variable {\ color: #D54E53\ }\ .ace-tomorrow-night-bright .ace_comment {\ color: #969896\ }\ .ace-tomorrow-night-bright .ace_c9searchresults.ace_keyword {\ color: #C2C280\ }\ .ace-tomorrow-night-bright .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYFBXV/8PAAJoAXX4kT2EAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-tomorrow_night_eighties.js ================================================ ace.define("ace/theme/tomorrow_night_eighties",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-tomorrow-night-eighties"; exports.cssText = ".ace-tomorrow-night-eighties .ace_gutter {\ background: #272727;\ color: #CCC\ }\ .ace-tomorrow-night-eighties .ace_print-margin {\ width: 1px;\ background: #272727\ }\ .ace-tomorrow-night-eighties {\ background-color: #2D2D2D;\ color: #CCCCCC\ }\ .ace-tomorrow-night-eighties .ace_constant.ace_other,\ .ace-tomorrow-night-eighties .ace_cursor {\ color: #CCCCCC\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_selection {\ background: #515151\ }\ .ace-tomorrow-night-eighties.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #2D2D2D;\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #6A6A6A\ }\ .ace-tomorrow-night-bright .ace_stack {\ background: rgb(66, 90, 44)\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_active-line {\ background: #393939\ }\ .ace-tomorrow-night-eighties .ace_gutter-active-line {\ background-color: #393939\ }\ .ace-tomorrow-night-eighties .ace_marker-layer .ace_selected-word {\ border: 1px solid #515151\ }\ .ace-tomorrow-night-eighties .ace_invisible {\ color: #6A6A6A\ }\ .ace-tomorrow-night-eighties .ace_keyword,\ .ace-tomorrow-night-eighties .ace_meta,\ .ace-tomorrow-night-eighties .ace_storage,\ .ace-tomorrow-night-eighties .ace_storage.ace_type,\ .ace-tomorrow-night-eighties .ace_support.ace_type {\ color: #CC99CC\ }\ .ace-tomorrow-night-eighties .ace_keyword.ace_operator {\ color: #66CCCC\ }\ .ace-tomorrow-night-eighties .ace_constant.ace_character,\ .ace-tomorrow-night-eighties .ace_constant.ace_language,\ .ace-tomorrow-night-eighties .ace_constant.ace_numeric,\ .ace-tomorrow-night-eighties .ace_keyword.ace_other.ace_unit,\ .ace-tomorrow-night-eighties .ace_support.ace_constant,\ .ace-tomorrow-night-eighties .ace_variable.ace_parameter {\ color: #F99157\ }\ .ace-tomorrow-night-eighties .ace_invalid {\ color: #CDCDCD;\ background-color: #F2777A\ }\ .ace-tomorrow-night-eighties .ace_invalid.ace_deprecated {\ color: #CDCDCD;\ background-color: #CC99CC\ }\ .ace-tomorrow-night-eighties .ace_fold {\ background-color: #6699CC;\ border-color: #CCCCCC\ }\ .ace-tomorrow-night-eighties .ace_entity.ace_name.ace_function,\ .ace-tomorrow-night-eighties .ace_support.ace_function,\ .ace-tomorrow-night-eighties .ace_variable {\ color: #6699CC\ }\ .ace-tomorrow-night-eighties .ace_support.ace_class,\ .ace-tomorrow-night-eighties .ace_support.ace_type {\ color: #FFCC66\ }\ .ace-tomorrow-night-eighties .ace_heading,\ .ace-tomorrow-night-eighties .ace_markup.ace_heading,\ .ace-tomorrow-night-eighties .ace_string {\ color: #99CC99\ }\ .ace-tomorrow-night-eighties .ace_comment {\ color: #999999\ }\ .ace-tomorrow-night-eighties .ace_entity.ace_name.ace_tag,\ .ace-tomorrow-night-eighties .ace_entity.ace_other.ace_attribute-name,\ .ace-tomorrow-night-eighties .ace_meta.ace_tag,\ .ace-tomorrow-night-eighties .ace_variable {\ color: #F2777A\ }\ .ace-tomorrow-night-eighties .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ09NrYAgMjP4PAAtGAwchHMyAAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-twilight.js ================================================ ace.define("ace/theme/twilight",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-twilight"; exports.cssText = ".ace-twilight .ace_gutter {\ background: #232323;\ color: #E2E2E2\ }\ .ace-twilight .ace_print-margin {\ width: 1px;\ background: #232323\ }\ .ace-twilight {\ background-color: #141414;\ color: #F8F8F8\ }\ .ace-twilight .ace_cursor {\ color: #A7A7A7\ }\ .ace-twilight .ace_marker-layer .ace_selection {\ background: rgba(221, 240, 255, 0.20)\ }\ .ace-twilight.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #141414;\ }\ .ace-twilight .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-twilight .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid rgba(255, 255, 255, 0.25)\ }\ .ace-twilight .ace_marker-layer .ace_active-line {\ background: rgba(255, 255, 255, 0.031)\ }\ .ace-twilight .ace_gutter-active-line {\ background-color: rgba(255, 255, 255, 0.031)\ }\ .ace-twilight .ace_marker-layer .ace_selected-word {\ border: 1px solid rgba(221, 240, 255, 0.20)\ }\ .ace-twilight .ace_invisible {\ color: rgba(255, 255, 255, 0.25)\ }\ .ace-twilight .ace_keyword,\ .ace-twilight .ace_meta {\ color: #CDA869\ }\ .ace-twilight .ace_constant,\ .ace-twilight .ace_constant.ace_character,\ .ace-twilight .ace_constant.ace_character.ace_escape,\ .ace-twilight .ace_constant.ace_other,\ .ace-twilight .ace_heading,\ .ace-twilight .ace_markup.ace_heading,\ .ace-twilight .ace_support.ace_constant {\ color: #CF6A4C\ }\ .ace-twilight .ace_invalid.ace_illegal {\ color: #F8F8F8;\ background-color: rgba(86, 45, 86, 0.75)\ }\ .ace-twilight .ace_invalid.ace_deprecated {\ text-decoration: underline;\ font-style: italic;\ color: #D2A8A1\ }\ .ace-twilight .ace_support {\ color: #9B859D\ }\ .ace-twilight .ace_fold {\ background-color: #AC885B;\ border-color: #F8F8F8\ }\ .ace-twilight .ace_support.ace_function {\ color: #DAD085\ }\ .ace-twilight .ace_list,\ .ace-twilight .ace_markup.ace_list,\ .ace-twilight .ace_storage {\ color: #F9EE98\ }\ .ace-twilight .ace_entity.ace_name.ace_function,\ .ace-twilight .ace_meta.ace_tag,\ .ace-twilight .ace_variable {\ color: #AC885B\ }\ .ace-twilight .ace_string {\ color: #8F9D6A\ }\ .ace-twilight .ace_string.ace_regexp {\ color: #E9C062\ }\ .ace-twilight .ace_comment {\ font-style: italic;\ color: #5F5A60\ }\ .ace-twilight .ace_variable {\ color: #7587A6\ }\ .ace-twilight .ace_xml-pe {\ color: #494949\ }\ .ace-twilight .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWMQERFpYLC1tf0PAAgOAnPnhxyiAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-vibrant_ink.js ================================================ ace.define("ace/theme/vibrant_ink",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = true; exports.cssClass = "ace-vibrant-ink"; exports.cssText = ".ace-vibrant-ink .ace_gutter {\ background: #1a1a1a;\ color: #BEBEBE\ }\ .ace-vibrant-ink .ace_print-margin {\ width: 1px;\ background: #1a1a1a\ }\ .ace-vibrant-ink {\ background-color: #0F0F0F;\ color: #FFFFFF\ }\ .ace-vibrant-ink .ace_cursor {\ color: #FFFFFF\ }\ .ace-vibrant-ink .ace_marker-layer .ace_selection {\ background: #6699CC\ }\ .ace-vibrant-ink.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #0F0F0F;\ }\ .ace-vibrant-ink .ace_marker-layer .ace_step {\ background: rgb(102, 82, 0)\ }\ .ace-vibrant-ink .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #404040\ }\ .ace-vibrant-ink .ace_marker-layer .ace_active-line {\ background: #333333\ }\ .ace-vibrant-ink .ace_gutter-active-line {\ background-color: #333333\ }\ .ace-vibrant-ink .ace_marker-layer .ace_selected-word {\ border: 1px solid #6699CC\ }\ .ace-vibrant-ink .ace_invisible {\ color: #404040\ }\ .ace-vibrant-ink .ace_keyword,\ .ace-vibrant-ink .ace_meta {\ color: #FF6600\ }\ .ace-vibrant-ink .ace_constant,\ .ace-vibrant-ink .ace_constant.ace_character,\ .ace-vibrant-ink .ace_constant.ace_character.ace_escape,\ .ace-vibrant-ink .ace_constant.ace_other {\ color: #339999\ }\ .ace-vibrant-ink .ace_constant.ace_numeric {\ color: #99CC99\ }\ .ace-vibrant-ink .ace_invalid,\ .ace-vibrant-ink .ace_invalid.ace_deprecated {\ color: #CCFF33;\ background-color: #000000\ }\ .ace-vibrant-ink .ace_fold {\ background-color: #FFCC00;\ border-color: #FFFFFF\ }\ .ace-vibrant-ink .ace_entity.ace_name.ace_function,\ .ace-vibrant-ink .ace_support.ace_function,\ .ace-vibrant-ink .ace_variable {\ color: #FFCC00\ }\ .ace-vibrant-ink .ace_variable.ace_parameter {\ font-style: italic\ }\ .ace-vibrant-ink .ace_string {\ color: #66FF00\ }\ .ace-vibrant-ink .ace_string.ace_regexp {\ color: #44B4CC\ }\ .ace-vibrant-ink .ace_comment {\ color: #9933CC\ }\ .ace-vibrant-ink .ace_entity.ace_other.ace_attribute-name {\ font-style: italic;\ color: #99CC99\ }\ .ace-vibrant-ink .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWNgYGBgYNDTc/oPAALPAZ7hxlbYAAAAAElFTkSuQmCC) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/theme-xcode.js ================================================ ace.define("ace/theme/xcode",["require","exports","module","ace/lib/dom"], function(require, exports, module) { exports.isDark = false; exports.cssClass = "ace-xcode"; exports.cssText = "\ .ace-xcode .ace_gutter {\ background: #e8e8e8;\ color: #333\ }\ .ace-xcode .ace_print-margin {\ width: 1px;\ background: #e8e8e8\ }\ .ace-xcode {\ background-color: #FFFFFF;\ color: #000000\ }\ .ace-xcode .ace_cursor {\ color: #000000\ }\ .ace-xcode .ace_marker-layer .ace_selection {\ background: #B5D5FF\ }\ .ace-xcode.ace_multiselect .ace_selection.ace_start {\ box-shadow: 0 0 3px 0px #FFFFFF;\ }\ .ace-xcode .ace_marker-layer .ace_step {\ background: rgb(198, 219, 174)\ }\ .ace-xcode .ace_marker-layer .ace_bracket {\ margin: -1px 0 0 -1px;\ border: 1px solid #BFBFBF\ }\ .ace-xcode .ace_marker-layer .ace_active-line {\ background: rgba(0, 0, 0, 0.071)\ }\ .ace-xcode .ace_gutter-active-line {\ background-color: rgba(0, 0, 0, 0.071)\ }\ .ace-xcode .ace_marker-layer .ace_selected-word {\ border: 1px solid #B5D5FF\ }\ .ace-xcode .ace_constant.ace_language,\ .ace-xcode .ace_keyword,\ .ace-xcode .ace_meta,\ .ace-xcode .ace_variable.ace_language {\ color: #C800A4\ }\ .ace-xcode .ace_invisible {\ color: #BFBFBF\ }\ .ace-xcode .ace_constant.ace_character,\ .ace-xcode .ace_constant.ace_other {\ color: #275A5E\ }\ .ace-xcode .ace_constant.ace_numeric {\ color: #3A00DC\ }\ .ace-xcode .ace_entity.ace_other.ace_attribute-name,\ .ace-xcode .ace_support.ace_constant,\ .ace-xcode .ace_support.ace_function {\ color: #450084\ }\ .ace-xcode .ace_fold {\ background-color: #C800A4;\ border-color: #000000\ }\ .ace-xcode .ace_entity.ace_name.ace_tag,\ .ace-xcode .ace_support.ace_class,\ .ace-xcode .ace_support.ace_type {\ color: #790EAD\ }\ .ace-xcode .ace_storage {\ color: #C900A4\ }\ .ace-xcode .ace_string {\ color: #DF0002\ }\ .ace-xcode .ace_comment {\ color: #008E00\ }\ .ace-xcode .ace_indent-guide {\ background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==) right repeat-y\ }"; var dom = require("../lib/dom"); dom.importCssString(exports.cssText, exports.cssClass); }); ================================================ FILE: modules/backend/formwidgets/codeeditor/assets/vendor/ace/worker-css.js ================================================ "no use strict"; ;(function(window) { if (typeof window.window != "undefined" && window.document) return; if (window.require && window.define) return; if (!window.console) { window.console = function() { var msgs = Array.prototype.slice.call(arguments, 0); postMessage({type: "log", data: msgs}); }; window.console.error = window.console.warn = window.console.log = window.console.trace = window.console; } window.window = window; window.ace = window; window.onerror = function(message, file, line, col, err) { postMessage({type: "error", data: { message: message, data: err.data, file: file, line: line, col: col, stack: err.stack }}); }; window.normalizeModule = function(parentId, moduleName) { // normalize plugin requires if (moduleName.indexOf("!") !== -1) { var chunks = moduleName.split("!"); return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); } // normalize relative requires if (moduleName.charAt(0) == ".") { var base = parentId.split("/").slice(0, -1).join("/"); moduleName = (base ? base + "/" : "") + moduleName; while (moduleName.indexOf(".") !== -1 && previous != moduleName) { var previous = moduleName; moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); } } return moduleName; }; window.require = function require(parentId, id) { if (!id) { id = parentId; parentId = null; } if (!id.charAt) throw new Error("worker.js require() accepts only (parentId, id) as arguments"); id = window.normalizeModule(parentId, id); var module = window.require.modules[id]; if (module) { if (!module.initialized) { module.initialized = true; module.exports = module.factory().exports; } return module.exports; } if (!window.require.tlns) return console.log("unable to load " + id); var path = resolveModuleId(id, window.require.tlns); if (path.slice(-3) != ".js") path += ".js"; window.require.id = id; window.require.modules[id] = {}; // prevent infinite loop on broken modules importScripts(path); return window.require(parentId, id); }; function resolveModuleId(id, paths) { var testPath = id, tail = ""; while (testPath) { var alias = paths[testPath]; if (typeof alias == "string") { return alias + tail; } else if (alias) { return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); } else if (alias === false) { return ""; } var i = testPath.lastIndexOf("/"); if (i === -1) break; tail = testPath.substr(i) + tail; testPath = testPath.slice(0, i); } return id; } window.require.modules = {}; window.require.tlns = {}; window.define = function(id, deps, factory) { if (arguments.length == 2) { factory = deps; if (typeof id != "string") { deps = id; id = window.require.id; } } else if (arguments.length == 1) { factory = id; deps = []; id = window.require.id; } if (typeof factory != "function") { window.require.modules[id] = { exports: factory, initialized: true }; return; } if (!deps.length) // If there is no dependencies, we inject "require", "exports" and // "module" as dependencies, to provide CommonJS compatibility. deps = ["require", "exports", "module"]; var req = function(childId) { return window.require(id, childId); }; window.require.modules[id] = { exports: {}, factory: function() { var module = this; var returnExports = factory.apply(this, deps.map(function(dep) { switch (dep) { // Because "require", "exports" and "module" aren't actual // dependencies, we must handle them seperately. case "require": return req; case "exports": return module.exports; case "module": return module; // But for all other dependencies, we can just go ahead and // require them. default: return req(dep); } })); if (returnExports) module.exports = returnExports; return module; } }; }; window.define.amd = {}; require.tlns = {}; window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { for (var i in topLevelNamespaces) require.tlns[i] = topLevelNamespaces[i]; }; window.initSender = function initSender() { var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; var oop = window.require("ace/lib/oop"); var Sender = function() {}; (function() { oop.implement(this, EventEmitter); this.callback = function(data, callbackId) { postMessage({ type: "call", id: callbackId, data: data }); }; this.emit = function(name, data) { postMessage({ type: "event", name: name, data: data }); }; }).call(Sender.prototype); return new Sender(); }; var main = window.main = null; var sender = window.sender = null; window.onmessage = function(e) { var msg = e.data; if (msg.event && sender) { sender._signal(msg.event, msg.data); } else if (msg.command) { if (main[msg.command]) main[msg.command].apply(main, msg.args); else if (window[msg.command]) window[msg.command].apply(window, msg.args); else throw new Error("Unknown command:" + msg.command); } else if (msg.init) { window.initBaseUrls(msg.tlns); require("ace/lib/es5-shim"); sender = window.sender = window.initSender(); var clazz = require(msg.module)[msg.classname]; main = window.main = new clazz(sender); } }; })(this); ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { "use strict"; exports.inherits = function(ctor, superCtor) { ctor.super_ = superCtor; ctor.prototype = Object.create(superCtor.prototype, { constructor: { value: ctor, enumerable: false, writable: true, configurable: true } }); }; exports.mixin = function(obj, mixin) { for (var key in mixin) { obj[key] = mixin[key]; } return obj; }; exports.implement = function(proto, mixin) { exports.mixin(proto, mixin); }; }); ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { "use strict"; exports.last = function(a) { return a[a.length - 1]; }; exports.stringReverse = function(string) { return string.split("").reverse().join(""); }; exports.stringRepeat = function (string, count) { var result = ''; while (count > 0) { if (count & 1) result += string; if (count >>= 1) string += string; } return result; }; var trimBeginRegexp = /^\s\s*/; var trimEndRegexp = /\s\s*$/; exports.stringTrimLeft = function (string) { return string.replace(trimBeginRegexp, ''); }; exports.stringTrimRight = function (string) { return string.replace(trimEndRegexp, ''); }; exports.copyObject = function(obj) { var copy = {}; for (var key in obj) { copy[key] = obj[key]; } return copy; }; exports.copyArray = function(array){ var copy = []; for (var i=0, l=array.length; i [" + this.end.row + "/" + this.end.column + "]"); }; this.contains = function(row, column) { return this.compare(row, column) == 0; }; this.compareRange = function(range) { var cmp, end = range.end, start = range.start; cmp = this.compare(end.row, end.column); if (cmp == 1) { cmp = this.compare(start.row, start.column); if (cmp == 1) { return 2; } else if (cmp == 0) { return 1; } else { return 0; } } else if (cmp == -1) { return -2; } else { cmp = this.compare(start.row, start.column); if (cmp == -1) { return -1; } else if (cmp == 1) { return 42; } else { return 0; } } }; this.comparePoint = function(p) { return this.compare(p.row, p.column); }; this.containsRange = function(range) { return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; }; this.intersects = function(range) { var cmp = this.compareRange(range); return (cmp == -1 || cmp == 0 || cmp == 1); }; this.isEnd = function(row, column) { return this.end.row == row && this.end.column == column; }; this.isStart = function(row, column) { return this.start.row == row && this.start.column == column; }; this.setStart = function(row, column) { if (typeof row == "object") { this.start.column = row.column; this.start.row = row.row; } else { this.start.row = row; this.start.column = column; } }; this.setEnd = function(row, column) { if (typeof row == "object") { this.end.column = row.column; this.end.row = row.row; } else { this.end.row = row; this.end.column = column; } }; this.inside = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column) || this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.insideStart = function(row, column) { if (this.compare(row, column) == 0) { if (this.isEnd(row, column)) { return false; } else { return true; } } return false; }; this.insideEnd = function(row, column) { if (this.compare(row, column) == 0) { if (this.isStart(row, column)) { return false; } else { return true; } } return false; }; this.compare = function(row, column) { if (!this.isMultiLine()) { if (row === this.start.row) { return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); } } if (row < this.start.row) return -1; if (row > this.end.row) return 1; if (this.start.row === row) return column >= this.start.column ? 0 : -1; if (this.end.row === row) return column <= this.end.column ? 0 : 1; return 0; }; this.compareStart = function(row, column) { if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.compareEnd = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else { return this.compare(row, column); } }; this.compareInside = function(row, column) { if (this.end.row == row && this.end.column == column) { return 1; } else if (this.start.row == row && this.start.column == column) { return -1; } else { return this.compare(row, column); } }; this.clipRows = function(firstRow, lastRow) { if (this.end.row > lastRow) var end = {row: lastRow + 1, column: 0}; else if (this.end.row < firstRow) var end = {row: firstRow, column: 0}; if (this.start.row > lastRow) var start = {row: lastRow + 1, column: 0}; else if (this.start.row < firstRow) var start = {row: firstRow, column: 0}; return Range.fromPoints(start || this.start, end || this.end); }; this.extend = function(row, column) { var cmp = this.compare(row, column); if (cmp == 0) return this; else if (cmp == -1) var start = {row: row, column: column}; else var end = {row: row, column: column}; return Range.fromPoints(start || this.start, end || this.end); }; this.isEmpty = function() { return (this.start.row === this.end.row && this.start.column === this.end.column); }; this.isMultiLine = function() { return (this.start.row !== this.end.row); }; this.clone = function() { return Range.fromPoints(this.start, this.end); }; this.collapseRows = function() { 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) }; this.toScreenRange = function(session) { var screenPosStart = session.documentToScreenPosition(this.start); var screenPosEnd = session.documentToScreenPosition(this.end); return new Range( screenPosStart.row, screenPosStart.column, screenPosEnd.row, screenPosEnd.column ); }; this.moveBy = function(row, column) { this.start.row += row; this.start.column += column; this.end.row += row; this.end.column += column; }; }).call(Range.prototype); Range.fromPoints = function(start, end) { return new Range(start.row, start.column, end.row, end.column); }; Range.comparePoints = comparePoints; Range.comparePoints = function(p1, p2) { return p1.row - p2.row || p1.column - p2.column; }; exports.Range = Range; }); ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { "use strict"; function throwDeltaError(delta, errorText){ console.log("Invalid Delta:", delta); throw "Invalid Delta: " + errorText; } function positionInDocument(docLines, position) { return position.row >= 0 && position.row < docLines.length && position.column >= 0 && position.column <= docLines[position.row].length; } function validateDelta(docLines, delta) { if (delta.action != "insert" && delta.action != "remove") throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); if (!(delta.lines instanceof Array)) throwDeltaError(delta, "delta.lines must be an Array"); if (!delta.start || !delta.end) throwDeltaError(delta, "delta.start/end must be an present"); var start = delta.start; if (!positionInDocument(docLines, delta.start)) throwDeltaError(delta, "delta.start must be contained in document"); var end = delta.end; if (delta.action == "remove" && !positionInDocument(docLines, end)) throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); var numRangeRows = end.row - start.row; var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) throwDeltaError(delta, "delta.range must match delta lines"); } exports.applyDelta = function(docLines, delta, doNotValidate) { var row = delta.start.row; var startColumn = delta.start.column; var line = docLines[row] || ""; switch (delta.action) { case "insert": var lines = delta.lines; if (lines.length === 1) { docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); } else { var args = [row, 1].concat(delta.lines); docLines.splice.apply(docLines, args); docLines[row] = line.substring(0, startColumn) + docLines[row]; docLines[row + delta.lines.length - 1] += line.substring(startColumn); } break; case "remove": var endColumn = delta.end.column; var endRow = delta.end.row; if (row === endRow) { docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); } else { docLines.splice( row, endRow - row + 1, line.substring(0, startColumn) + docLines[endRow].substring(endColumn) ); } break; } } }); ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { "use strict"; var EventEmitter = {}; var stopPropagation = function() { this.propagationStopped = true; }; var preventDefault = function() { this.defaultPrevented = true; }; EventEmitter._emit = EventEmitter._dispatchEvent = function(eventName, e) { this._eventRegistry || (this._eventRegistry = {}); this._defaultHandlers || (this._defaultHandlers = {}); var listeners = this._eventRegistry[eventName] || []; var defaultHandler = this._defaultHandlers[eventName]; if (!listeners.length && !defaultHandler) return; if (typeof e != "object" || !e) e = {}; if (!e.type) e.type = eventName; if (!e.stopPropagation) e.stopPropagation = stopPropagation; if (!e.preventDefault) e.preventDefault = preventDefault; listeners = listeners.slice(); for (var i=0; i this.row) return; var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); this.setPosition(point.row, point.column, true); }; function $pointsInOrder(point1, point2, equalPointsInOrder) { var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); } function $getTransformedPoint(delta, point, moveIfEqual) { var deltaIsInsert = delta.action == "insert"; var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); var deltaStart = delta.start; var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. if ($pointsInOrder(point, deltaStart, moveIfEqual)) { return { row: point.row, column: point.column }; } if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { return { row: point.row + deltaRowShift, column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) }; } return { row: deltaStart.row, column: deltaStart.column }; } this.setPosition = function(row, column, noClip) { var pos; if (noClip) { pos = { row: row, column: column }; } else { pos = this.$clipPositionToDocument(row, column); } if (this.row == pos.row && this.column == pos.column) return; var old = { row: this.row, column: this.column }; this.row = pos.row; this.column = pos.column; this._signal("change", { old: old, value: pos }); }; this.detach = function() { this.document.removeEventListener("change", this.$onChange); }; this.attach = function(doc) { this.document = doc || this.document; this.document.on("change", this.$onChange); }; this.$clipPositionToDocument = function(row, column) { var pos = {}; if (row >= this.document.getLength()) { pos.row = Math.max(0, this.document.getLength() - 1); pos.column = this.document.getLine(pos.row).length; } else if (row < 0) { pos.row = 0; pos.column = 0; } else { pos.row = row; pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); } if (column < 0) pos.column = 0; return pos; }; }).call(Anchor.prototype); }); ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { "use strict"; var oop = require("./lib/oop"); var applyDelta = require("./apply_delta").applyDelta; var EventEmitter = require("./lib/event_emitter").EventEmitter; var Range = require("./range").Range; var Anchor = require("./anchor").Anchor; var Document = function(textOrLines) { this.$lines = [""]; if (textOrLines.length === 0) { this.$lines = [""]; } else if (Array.isArray(textOrLines)) { this.insertMergedLines({row: 0, column: 0}, textOrLines); } else { this.insert({row: 0, column:0}, textOrLines); } }; (function() { oop.implement(this, EventEmitter); this.setValue = function(text) { var len = this.getLength() - 1; this.remove(new Range(0, 0, len, this.getLine(len).length)); this.insert({row: 0, column: 0}, text); }; this.getValue = function() { return this.getAllLines().join(this.getNewLineCharacter()); }; this.createAnchor = function(row, column) { return new Anchor(this, row, column); }; if ("aaa".split(/a/).length === 0) { this.$split = function(text) { return text.replace(/\r\n|\r/g, "\n").split("\n"); }; } else { this.$split = function(text) { return text.split(/\r\n|\r|\n/); }; } this.$detectNewLine = function(text) { var match = text.match(/^.*?(\r\n|\r|\n)/m); this.$autoNewLine = match ? match[1] : "\n"; this._signal("changeNewLineMode"); }; this.getNewLineCharacter = function() { switch (this.$newLineMode) { case "windows": return "\r\n"; case "unix": return "\n"; default: return this.$autoNewLine || "\n"; } }; this.$autoNewLine = ""; this.$newLineMode = "auto"; this.setNewLineMode = function(newLineMode) { if (this.$newLineMode === newLineMode) return; this.$newLineMode = newLineMode; this._signal("changeNewLineMode"); }; this.getNewLineMode = function() { return this.$newLineMode; }; this.isNewLine = function(text) { return (text == "\r\n" || text == "\r" || text == "\n"); }; this.getLine = function(row) { return this.$lines[row] || ""; }; this.getLines = function(firstRow, lastRow) { return this.$lines.slice(firstRow, lastRow + 1); }; this.getAllLines = function() { return this.getLines(0, this.getLength()); }; this.getLength = function() { return this.$lines.length; }; this.getTextRange = function(range) { return this.getLinesForRange(range).join(this.getNewLineCharacter()); }; this.getLinesForRange = function(range) { var lines; if (range.start.row === range.end.row) { lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; } else { lines = this.getLines(range.start.row, range.end.row); lines[0] = (lines[0] || "").substring(range.start.column); var l = lines.length - 1; if (range.end.row - range.start.row == l) lines[l] = lines[l].substring(0, range.end.column); } return lines; }; this.insertLines = function(row, lines) { console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); return this.insertFullLines(row, lines); }; this.removeLines = function(firstRow, lastRow) { console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); return this.removeFullLines(firstRow, lastRow); }; this.insertNewLine = function(position) { console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); return this.insertMergedLines(position, ["", ""]); }; this.insert = function(position, text) { if (this.getLength() <= 1) this.$detectNewLine(text); return this.insertMergedLines(position, this.$split(text)); }; this.insertInLine = function(position, text) { var start = this.clippedPos(position.row, position.column); var end = this.pos(position.row, position.column + text.length); this.applyDelta({ start: start, end: end, action: "insert", lines: [text] }, true); return this.clonePos(end); }; this.clippedPos = function(row, column) { var length = this.getLength(); if (row === undefined) { row = length; } else if (row < 0) { row = 0; } else if (row >= length) { row = length - 1; column = undefined; } var line = this.getLine(row); if (column == undefined) column = line.length; column = Math.min(Math.max(column, 0), line.length); return {row: row, column: column}; }; this.clonePos = function(pos) { return {row: pos.row, column: pos.column}; }; this.pos = function(row, column) { return {row: row, column: column}; }; this.$clipPosition = function(position) { var length = this.getLength(); if (position.row >= length) { position.row = Math.max(0, length - 1); position.column = this.getLine(length - 1).length; } else { position.row = Math.max(0, position.row); position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); } return position; }; this.insertFullLines = function(row, lines) { row = Math.min(Math.max(row, 0), this.getLength()); var column = 0; if (row < this.getLength()) { lines = lines.concat([""]); column = 0; } else { lines = [""].concat(lines); row--; column = this.$lines[row].length; } this.insertMergedLines({row: row, column: column}, lines); }; this.insertMergedLines = function(position, lines) { var start = this.clippedPos(position.row, position.column); var end = { row: start.row + lines.length - 1, column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length }; this.applyDelta({ start: start, end: end, action: "insert", lines: lines }); return this.clonePos(end); }; this.remove = function(range) { var start = this.clippedPos(range.start.row, range.start.column); var end = this.clippedPos(range.end.row, range.end.column); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }); return this.clonePos(start); }; this.removeInLine = function(row, startColumn, endColumn) { var start = this.clippedPos(row, startColumn); var end = this.clippedPos(row, endColumn); this.applyDelta({ start: start, end: end, action: "remove", lines: this.getLinesForRange({start: start, end: end}) }, true); return this.clonePos(start); }; this.removeFullLines = function(firstRow, lastRow) { firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; var deleteLastNewLine = lastRow < this.getLength() - 1; var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); var range = new Range(startRow, startCol, endRow, endCol); var deletedLines = this.$lines.slice(firstRow, lastRow + 1); this.applyDelta({ start: range.start, end: range.end, action: "remove", lines: this.getLinesForRange(range) }); return deletedLines; }; this.removeNewLine = function(row) { if (row < this.getLength() - 1 && row >= 0) { this.applyDelta({ start: this.pos(row, this.getLine(row).length), end: this.pos(row + 1, 0), action: "remove", lines: ["", ""] }); } }; this.replace = function(range, text) { if (!(range instanceof Range)) range = Range.fromPoints(range.start, range.end); if (text.length === 0 && range.isEmpty()) return range.start; if (text == this.getTextRange(range)) return range.end; this.remove(range); var end; if (text) { end = this.insert(range.start, text); } else { end = range.start; } return end; }; this.applyDeltas = function(deltas) { for (var i=0; i=0; i--) { this.revertDelta(deltas[i]); } }; this.applyDelta = function(delta, doNotValidate) { var isInsert = delta.action == "insert"; if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] : !Range.comparePoints(delta.start, delta.end)) { return; } if (isInsert && delta.lines.length > 20000) this.$splitAndapplyLargeDelta(delta, 20000); applyDelta(this.$lines, delta, doNotValidate); this._signal("change", delta); }; this.$splitAndapplyLargeDelta = function(delta, MAX) { var lines = delta.lines; var l = lines.length; var row = delta.start.row; var column = delta.start.column; var from = 0, to = 0; do { from = to; to += MAX - 1; var chunk = lines.slice(from, to); if (to > l) { delta.lines = chunk; delta.start.row = row + from; delta.start.column = column; break; } chunk.push(""); this.applyDelta({ start: this.pos(row + from, column), end: this.pos(row + to, column = 0), action: delta.action, lines: chunk }, true); } while(true); }; this.revertDelta = function(delta) { this.applyDelta({ start: this.clonePos(delta.start), end: this.clonePos(delta.end), action: (delta.action == "insert" ? "remove" : "insert"), lines: delta.lines.slice() }); }; this.indexToPosition = function(index, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; for (var i = startRow || 0, l = lines.length; i < l; i++) { index -= lines[i].length + newlineLength; if (index < 0) return {row: i, column: index + lines[i].length + newlineLength}; } return {row: l-1, column: lines[l-1].length}; }; this.positionToIndex = function(pos, startRow) { var lines = this.$lines || this.getAllLines(); var newlineLength = this.getNewLineCharacter().length; var index = 0; var row = Math.min(pos.row, lines.length); for (var i = startRow || 0; i < row; ++i) index += lines[i].length + newlineLength; return index + pos.column; }; }).call(Document.prototype); exports.Document = Document; }); ace.define("ace/worker/mirror",["require","exports","module","ace/range","ace/document","ace/lib/lang"], function(require, exports, module) { "use strict"; var Range = require("../range").Range; var Document = require("../document").Document; var lang = require("../lib/lang"); var Mirror = exports.Mirror = function(sender) { this.sender = sender; var doc = this.doc = new Document(""); var deferredUpdate = this.deferredUpdate = lang.delayedCall(this.onUpdate.bind(this)); var _self = this; sender.on("change", function(e) { var data = e.data; if (data[0].start) { doc.applyDeltas(data); } else { for (var i = 0; i < data.length; i += 2) { if (Array.isArray(data[i+1])) { var d = {action: "insert", start: data[i], lines: data[i+1]}; } else { var d = {action: "remove", start: data[i], end: data[i+1]}; } doc.applyDelta(d, true); } } if (_self.$timeout) return deferredUpdate.schedule(_self.$timeout); _self.onUpdate(); }); }; (function() { this.$timeout = 500; this.setTimeout = function(timeout) { this.$timeout = timeout; }; this.setValue = function(value) { this.doc.setValue(value); this.deferredUpdate.schedule(this.$timeout); }; this.getValue = function(callbackId) { this.sender.callback(this.doc.getValue(), callbackId); }; this.onUpdate = function() { }; this.isPending = function() { return this.deferredUpdate.isPending(); }; }).call(Mirror.prototype); }); ace.define("ace/mode/css/csslint",["require","exports","module"], function(require, exports, module) { var parserlib = {}; (function(){ function EventTarget(){ this._listeners = {}; } EventTarget.prototype = { constructor: EventTarget, addListener: function(type, listener){ if (!this._listeners[type]){ this._listeners[type] = []; } this._listeners[type].push(listener); }, fire: function(event){ if (typeof event == "string"){ event = { type: event }; } if (typeof event.target != "undefined"){ event.target = this; } if (typeof event.type == "undefined"){ throw new Error("Event object missing 'type' property."); } if (this._listeners[event.type]){ var listeners = this._listeners[event.type].concat(); for (var i=0, len=listeners.length; i < len; i++){ listeners[i].call(this, event); } } }, removeListener: function(type, listener){ if (this._listeners[type]){ var listeners = this._listeners[type]; for (var i=0, len=listeners.length; i < len; i++){ if (listeners[i] === listener){ listeners.splice(i, 1); break; } } } } }; function StringReader(text){ this._input = text.replace(/\n\r?/g, "\n"); this._line = 1; this._col = 1; this._cursor = 0; } StringReader.prototype = { constructor: StringReader, getCol: function(){ return this._col; }, getLine: function(){ return this._line ; }, eof: function(){ return (this._cursor == this._input.length); }, peek: function(count){ var c = null; count = (typeof count == "undefined" ? 1 : count); if (this._cursor < this._input.length){ c = this._input.charAt(this._cursor + count - 1); } return c; }, read: function(){ var c = null; if (this._cursor < this._input.length){ if (this._input.charAt(this._cursor) == "\n"){ this._line++; this._col=1; } else { this._col++; } c = this._input.charAt(this._cursor++); } return c; }, mark: function(){ this._bookmark = { cursor: this._cursor, line: this._line, col: this._col }; }, reset: function(){ if (this._bookmark){ this._cursor = this._bookmark.cursor; this._line = this._bookmark.line; this._col = this._bookmark.col; delete this._bookmark; } }, readTo: function(pattern){ var buffer = "", c; while (buffer.length < pattern.length || buffer.lastIndexOf(pattern) != buffer.length - pattern.length){ c = this.read(); if (c){ buffer += c; } else { throw new Error("Expected \"" + pattern + "\" at line " + this._line + ", col " + this._col + "."); } } return buffer; }, readWhile: function(filter){ var buffer = "", c = this.read(); while(c !== null && filter(c)){ buffer += c; c = this.read(); } return buffer; }, readMatch: function(matcher){ var source = this._input.substring(this._cursor), value = null; if (typeof matcher == "string"){ if (source.indexOf(matcher) === 0){ value = this.readCount(matcher.length); } } else if (matcher instanceof RegExp){ if (matcher.test(source)){ value = this.readCount(RegExp.lastMatch.length); } } return value; }, readCount: function(count){ var buffer = ""; while(count--){ buffer += this.read(); } return buffer; } }; function SyntaxError(message, line, col){ this.col = col; this.line = line; this.message = message; } SyntaxError.prototype = new Error(); function SyntaxUnit(text, line, col, type){ this.col = col; this.line = line; this.text = text; this.type = type; } SyntaxUnit.fromToken = function(token){ return new SyntaxUnit(token.value, token.startLine, token.startCol); }; SyntaxUnit.prototype = { constructor: SyntaxUnit, valueOf: function(){ return this.text; }, toString: function(){ return this.text; } }; function TokenStreamBase(input, tokenData){ this._reader = input ? new StringReader(input.toString()) : null; this._token = null; this._tokenData = tokenData; this._lt = []; this._ltIndex = 0; this._ltIndexCache = []; } TokenStreamBase.createTokenData = function(tokens){ var nameMap = [], typeMap = {}, tokenData = tokens.concat([]), i = 0, len = tokenData.length+1; tokenData.UNKNOWN = -1; tokenData.unshift({name:"EOF"}); for (; i < len; i++){ nameMap.push(tokenData[i].name); tokenData[tokenData[i].name] = i; if (tokenData[i].text){ typeMap[tokenData[i].text] = i; } } tokenData.name = function(tt){ return nameMap[tt]; }; tokenData.type = function(c){ return typeMap[c]; }; return tokenData; }; TokenStreamBase.prototype = { constructor: TokenStreamBase, match: function(tokenTypes, channel){ if (!(tokenTypes instanceof Array)){ tokenTypes = [tokenTypes]; } var tt = this.get(channel), i = 0, len = tokenTypes.length; while(i < len){ if (tt == tokenTypes[i++]){ return true; } } this.unget(); return false; }, mustMatch: function(tokenTypes, channel){ var token; if (!(tokenTypes instanceof Array)){ tokenTypes = [tokenTypes]; } if (!this.match.apply(this, arguments)){ token = this.LT(1); throw new SyntaxError("Expected " + this._tokenData[tokenTypes[0]].name + " at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); } }, advance: function(tokenTypes, channel){ while(this.LA(0) !== 0 && !this.match(tokenTypes, channel)){ this.get(); } return this.LA(0); }, get: function(channel){ var tokenInfo = this._tokenData, reader = this._reader, value, i =0, len = tokenInfo.length, found = false, token, info; if (this._lt.length && this._ltIndex >= 0 && this._ltIndex < this._lt.length){ i++; this._token = this._lt[this._ltIndex++]; info = tokenInfo[this._token.type]; while((info.channel !== undefined && channel !== info.channel) && this._ltIndex < this._lt.length){ this._token = this._lt[this._ltIndex++]; info = tokenInfo[this._token.type]; i++; } if ((info.channel === undefined || channel === info.channel) && this._ltIndex <= this._lt.length){ this._ltIndexCache.push(i); return this._token.type; } } token = this._getToken(); if (token.type > -1 && !tokenInfo[token.type].hide){ token.channel = tokenInfo[token.type].channel; this._token = token; this._lt.push(token); this._ltIndexCache.push(this._lt.length - this._ltIndex + i); if (this._lt.length > 5){ this._lt.shift(); } if (this._ltIndexCache.length > 5){ this._ltIndexCache.shift(); } this._ltIndex = this._lt.length; } info = tokenInfo[token.type]; if (info && (info.hide || (info.channel !== undefined && channel !== info.channel))){ return this.get(channel); } else { return token.type; } }, LA: function(index){ var total = index, tt; if (index > 0){ if (index > 5){ throw new Error("Too much lookahead."); } while(total){ tt = this.get(); total--; } while(total < index){ this.unget(); total++; } } else if (index < 0){ if(this._lt[this._ltIndex+index]){ tt = this._lt[this._ltIndex+index].type; } else { throw new Error("Too much lookbehind."); } } else { tt = this._token.type; } return tt; }, LT: function(index){ this.LA(index); return this._lt[this._ltIndex+index-1]; }, peek: function(){ return this.LA(1); }, token: function(){ return this._token; }, tokenName: function(tokenType){ if (tokenType < 0 || tokenType > this._tokenData.length){ return "UNKNOWN_TOKEN"; } else { return this._tokenData[tokenType].name; } }, tokenType: function(tokenName){ return this._tokenData[tokenName] || -1; }, unget: function(){ if (this._ltIndexCache.length){ this._ltIndex -= this._ltIndexCache.pop();//--; this._token = this._lt[this._ltIndex - 1]; } else { throw new Error("Too much lookahead."); } } }; parserlib.util = { StringReader: StringReader, SyntaxError : SyntaxError, SyntaxUnit : SyntaxUnit, EventTarget : EventTarget, TokenStreamBase : TokenStreamBase }; })(); (function(){ var EventTarget = parserlib.util.EventTarget, TokenStreamBase = parserlib.util.TokenStreamBase, StringReader = parserlib.util.StringReader, SyntaxError = parserlib.util.SyntaxError, SyntaxUnit = parserlib.util.SyntaxUnit; var Colors = { aliceblue :"#f0f8ff", antiquewhite :"#faebd7", aqua :"#00ffff", aquamarine :"#7fffd4", azure :"#f0ffff", beige :"#f5f5dc", bisque :"#ffe4c4", black :"#000000", blanchedalmond :"#ffebcd", blue :"#0000ff", blueviolet :"#8a2be2", brown :"#a52a2a", burlywood :"#deb887", cadetblue :"#5f9ea0", chartreuse :"#7fff00", chocolate :"#d2691e", coral :"#ff7f50", cornflowerblue :"#6495ed", cornsilk :"#fff8dc", crimson :"#dc143c", cyan :"#00ffff", darkblue :"#00008b", darkcyan :"#008b8b", darkgoldenrod :"#b8860b", darkgray :"#a9a9a9", darkgrey :"#a9a9a9", darkgreen :"#006400", darkkhaki :"#bdb76b", darkmagenta :"#8b008b", darkolivegreen :"#556b2f", darkorange :"#ff8c00", darkorchid :"#9932cc", darkred :"#8b0000", darksalmon :"#e9967a", darkseagreen :"#8fbc8f", darkslateblue :"#483d8b", darkslategray :"#2f4f4f", darkslategrey :"#2f4f4f", darkturquoise :"#00ced1", darkviolet :"#9400d3", deeppink :"#ff1493", deepskyblue :"#00bfff", dimgray :"#696969", dimgrey :"#696969", dodgerblue :"#1e90ff", firebrick :"#b22222", floralwhite :"#fffaf0", forestgreen :"#228b22", fuchsia :"#ff00ff", gainsboro :"#dcdcdc", ghostwhite :"#f8f8ff", gold :"#ffd700", goldenrod :"#daa520", gray :"#808080", grey :"#808080", green :"#008000", greenyellow :"#adff2f", honeydew :"#f0fff0", hotpink :"#ff69b4", indianred :"#cd5c5c", indigo :"#4b0082", ivory :"#fffff0", khaki :"#f0e68c", lavender :"#e6e6fa", lavenderblush :"#fff0f5", lawngreen :"#7cfc00", lemonchiffon :"#fffacd", lightblue :"#add8e6", lightcoral :"#f08080", lightcyan :"#e0ffff", lightgoldenrodyellow :"#fafad2", lightgray :"#d3d3d3", lightgrey :"#d3d3d3", lightgreen :"#90ee90", lightpink :"#ffb6c1", lightsalmon :"#ffa07a", lightseagreen :"#20b2aa", lightskyblue :"#87cefa", lightslategray :"#778899", lightslategrey :"#778899", lightsteelblue :"#b0c4de", lightyellow :"#ffffe0", lime :"#00ff00", limegreen :"#32cd32", linen :"#faf0e6", magenta :"#ff00ff", maroon :"#800000", mediumaquamarine:"#66cdaa", mediumblue :"#0000cd", mediumorchid :"#ba55d3", mediumpurple :"#9370d8", mediumseagreen :"#3cb371", mediumslateblue :"#7b68ee", mediumspringgreen :"#00fa9a", mediumturquoise :"#48d1cc", mediumvioletred :"#c71585", midnightblue :"#191970", mintcream :"#f5fffa", mistyrose :"#ffe4e1", moccasin :"#ffe4b5", navajowhite :"#ffdead", navy :"#000080", oldlace :"#fdf5e6", olive :"#808000", olivedrab :"#6b8e23", orange :"#ffa500", orangered :"#ff4500", orchid :"#da70d6", palegoldenrod :"#eee8aa", palegreen :"#98fb98", paleturquoise :"#afeeee", palevioletred :"#d87093", papayawhip :"#ffefd5", peachpuff :"#ffdab9", peru :"#cd853f", pink :"#ffc0cb", plum :"#dda0dd", powderblue :"#b0e0e6", purple :"#800080", red :"#ff0000", rosybrown :"#bc8f8f", royalblue :"#4169e1", saddlebrown :"#8b4513", salmon :"#fa8072", sandybrown :"#f4a460", seagreen :"#2e8b57", seashell :"#fff5ee", sienna :"#a0522d", silver :"#c0c0c0", skyblue :"#87ceeb", slateblue :"#6a5acd", slategray :"#708090", slategrey :"#708090", snow :"#fffafa", springgreen :"#00ff7f", steelblue :"#4682b4", tan :"#d2b48c", teal :"#008080", thistle :"#d8bfd8", tomato :"#ff6347", turquoise :"#40e0d0", violet :"#ee82ee", wheat :"#f5deb3", white :"#ffffff", whitesmoke :"#f5f5f5", yellow :"#ffff00", yellowgreen :"#9acd32", activeBorder :"Active window border.", activecaption :"Active window caption.", appworkspace :"Background color of multiple document interface.", background :"Desktop background.", buttonface :"The face background color for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonhighlight :"The color of the border facing the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttonshadow :"The color of the border away from the light source for 3-D elements that appear 3-D due to one layer of surrounding border.", buttontext :"Text on push buttons.", captiontext :"Text in caption, size box, and scrollbar arrow box.", graytext :"Grayed (disabled) text. This color is set to #000 if the current display driver does not support a solid gray color.", greytext :"Greyed (disabled) text. This color is set to #000 if the current display driver does not support a solid grey color.", highlight :"Item(s) selected in a control.", highlighttext :"Text of item(s) selected in a control.", inactiveborder :"Inactive window border.", inactivecaption :"Inactive window caption.", inactivecaptiontext :"Color of text in an inactive caption.", infobackground :"Background color for tooltip controls.", infotext :"Text color for tooltip controls.", menu :"Menu background.", menutext :"Text in menus.", scrollbar :"Scroll bar gray area.", threeddarkshadow :"The color of the darker (generally outer) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedface :"The face background color for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedhighlight :"The color of the lighter (generally outer) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedlightshadow :"The color of the darker (generally inner) of the two borders facing the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", threedshadow :"The color of the lighter (generally inner) of the two borders away from the light source for 3-D elements that appear 3-D due to two concentric layers of surrounding border.", window :"Window background.", windowframe :"Window frame.", windowtext :"Text in windows." }; function Combinator(text, line, col){ SyntaxUnit.call(this, text, line, col, Parser.COMBINATOR_TYPE); this.type = "unknown"; if (/^\s+$/.test(text)){ this.type = "descendant"; } else if (text == ">"){ this.type = "child"; } else if (text == "+"){ this.type = "adjacent-sibling"; } else if (text == "~"){ this.type = "sibling"; } } Combinator.prototype = new SyntaxUnit(); Combinator.prototype.constructor = Combinator; function MediaFeature(name, value){ SyntaxUnit.call(this, "(" + name + (value !== null ? ":" + value : "") + ")", name.startLine, name.startCol, Parser.MEDIA_FEATURE_TYPE); this.name = name; this.value = value; } MediaFeature.prototype = new SyntaxUnit(); MediaFeature.prototype.constructor = MediaFeature; function MediaQuery(modifier, mediaType, features, line, col){ SyntaxUnit.call(this, (modifier ? modifier + " ": "") + (mediaType ? mediaType : "") + (mediaType && features.length > 0 ? " and " : "") + features.join(" and "), line, col, Parser.MEDIA_QUERY_TYPE); this.modifier = modifier; this.mediaType = mediaType; this.features = features; } MediaQuery.prototype = new SyntaxUnit(); MediaQuery.prototype.constructor = MediaQuery; function Parser(options){ EventTarget.call(this); this.options = options || {}; this._tokenStream = null; } Parser.DEFAULT_TYPE = 0; Parser.COMBINATOR_TYPE = 1; Parser.MEDIA_FEATURE_TYPE = 2; Parser.MEDIA_QUERY_TYPE = 3; Parser.PROPERTY_NAME_TYPE = 4; Parser.PROPERTY_VALUE_TYPE = 5; Parser.PROPERTY_VALUE_PART_TYPE = 6; Parser.SELECTOR_TYPE = 7; Parser.SELECTOR_PART_TYPE = 8; Parser.SELECTOR_SUB_PART_TYPE = 9; Parser.prototype = function(){ var proto = new EventTarget(), //new prototype prop, additions = { constructor: Parser, DEFAULT_TYPE : 0, COMBINATOR_TYPE : 1, MEDIA_FEATURE_TYPE : 2, MEDIA_QUERY_TYPE : 3, PROPERTY_NAME_TYPE : 4, PROPERTY_VALUE_TYPE : 5, PROPERTY_VALUE_PART_TYPE : 6, SELECTOR_TYPE : 7, SELECTOR_PART_TYPE : 8, SELECTOR_SUB_PART_TYPE : 9, _stylesheet: function(){ var tokenStream = this._tokenStream, charset = null, count, token, tt; this.fire("startstylesheet"); this._charset(); this._skipCruft(); while (tokenStream.peek() == Tokens.IMPORT_SYM){ this._import(); this._skipCruft(); } while (tokenStream.peek() == Tokens.NAMESPACE_SYM){ this._namespace(); this._skipCruft(); } tt = tokenStream.peek(); while(tt > Tokens.EOF){ try { switch(tt){ case Tokens.MEDIA_SYM: this._media(); this._skipCruft(); break; case Tokens.PAGE_SYM: this._page(); this._skipCruft(); break; case Tokens.FONT_FACE_SYM: this._font_face(); this._skipCruft(); break; case Tokens.KEYFRAMES_SYM: this._keyframes(); this._skipCruft(); break; case Tokens.VIEWPORT_SYM: this._viewport(); this._skipCruft(); break; case Tokens.UNKNOWN_SYM: //unknown @ rule tokenStream.get(); if (!this.options.strict){ this.fire({ type: "error", error: null, message: "Unknown @ rule: " + tokenStream.LT(0).value + ".", line: tokenStream.LT(0).startLine, col: tokenStream.LT(0).startCol }); count=0; while (tokenStream.advance([Tokens.LBRACE, Tokens.RBRACE]) == Tokens.LBRACE){ count++; //keep track of nesting depth } while(count){ tokenStream.advance([Tokens.RBRACE]); count--; } } else { throw new SyntaxError("Unknown @ rule.", tokenStream.LT(0).startLine, tokenStream.LT(0).startCol); } break; case Tokens.S: this._readWhitespace(); break; default: if(!this._ruleset()){ switch(tt){ case Tokens.CHARSET_SYM: token = tokenStream.LT(1); this._charset(false); throw new SyntaxError("@charset not allowed here.", token.startLine, token.startCol); case Tokens.IMPORT_SYM: token = tokenStream.LT(1); this._import(false); throw new SyntaxError("@import not allowed here.", token.startLine, token.startCol); case Tokens.NAMESPACE_SYM: token = tokenStream.LT(1); this._namespace(false); throw new SyntaxError("@namespace not allowed here.", token.startLine, token.startCol); default: tokenStream.get(); //get the last token this._unexpectedToken(tokenStream.token()); } } } } catch(ex) { if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); } else { throw ex; } } tt = tokenStream.peek(); } if (tt != Tokens.EOF){ this._unexpectedToken(tokenStream.token()); } this.fire("endstylesheet"); }, _charset: function(emit){ var tokenStream = this._tokenStream, charset, token, line, col; if (tokenStream.match(Tokens.CHARSET_SYM)){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); tokenStream.mustMatch(Tokens.STRING); token = tokenStream.token(); charset = token.value; this._readWhitespace(); tokenStream.mustMatch(Tokens.SEMICOLON); if (emit !== false){ this.fire({ type: "charset", charset:charset, line: line, col: col }); } } }, _import: function(emit){ var tokenStream = this._tokenStream, tt, uri, importToken, mediaList = []; tokenStream.mustMatch(Tokens.IMPORT_SYM); importToken = tokenStream.token(); this._readWhitespace(); tokenStream.mustMatch([Tokens.STRING, Tokens.URI]); uri = tokenStream.token().value.replace(/^(?:url\()?["']?([^"']+?)["']?\)?$/, "$1"); this._readWhitespace(); mediaList = this._media_query_list(); tokenStream.mustMatch(Tokens.SEMICOLON); this._readWhitespace(); if (emit !== false){ this.fire({ type: "import", uri: uri, media: mediaList, line: importToken.startLine, col: importToken.startCol }); } }, _namespace: function(emit){ var tokenStream = this._tokenStream, line, col, prefix, uri; tokenStream.mustMatch(Tokens.NAMESPACE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); if (tokenStream.match(Tokens.IDENT)){ prefix = tokenStream.token().value; this._readWhitespace(); } tokenStream.mustMatch([Tokens.STRING, Tokens.URI]); uri = tokenStream.token().value.replace(/(?:url\()?["']([^"']+)["']\)?/, "$1"); this._readWhitespace(); tokenStream.mustMatch(Tokens.SEMICOLON); this._readWhitespace(); if (emit !== false){ this.fire({ type: "namespace", prefix: prefix, uri: uri, line: line, col: col }); } }, _media: function(){ var tokenStream = this._tokenStream, line, col, mediaList;// = []; tokenStream.mustMatch(Tokens.MEDIA_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); mediaList = this._media_query_list(); tokenStream.mustMatch(Tokens.LBRACE); this._readWhitespace(); this.fire({ type: "startmedia", media: mediaList, line: line, col: col }); while(true) { if (tokenStream.peek() == Tokens.PAGE_SYM){ this._page(); } else if (tokenStream.peek() == Tokens.FONT_FACE_SYM){ this._font_face(); } else if (tokenStream.peek() == Tokens.VIEWPORT_SYM){ this._viewport(); } else if (!this._ruleset()){ break; } } tokenStream.mustMatch(Tokens.RBRACE); this._readWhitespace(); this.fire({ type: "endmedia", media: mediaList, line: line, col: col }); }, _media_query_list: function(){ var tokenStream = this._tokenStream, mediaList = []; this._readWhitespace(); if (tokenStream.peek() == Tokens.IDENT || tokenStream.peek() == Tokens.LPAREN){ mediaList.push(this._media_query()); } while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); mediaList.push(this._media_query()); } return mediaList; }, _media_query: function(){ var tokenStream = this._tokenStream, type = null, ident = null, token = null, expressions = []; if (tokenStream.match(Tokens.IDENT)){ ident = tokenStream.token().value.toLowerCase(); if (ident != "only" && ident != "not"){ tokenStream.unget(); ident = null; } else { token = tokenStream.token(); } } this._readWhitespace(); if (tokenStream.peek() == Tokens.IDENT){ type = this._media_type(); if (token === null){ token = tokenStream.token(); } } else if (tokenStream.peek() == Tokens.LPAREN){ if (token === null){ token = tokenStream.LT(1); } expressions.push(this._media_expression()); } if (type === null && expressions.length === 0){ return null; } else { this._readWhitespace(); while (tokenStream.match(Tokens.IDENT)){ if (tokenStream.token().value.toLowerCase() != "and"){ this._unexpectedToken(tokenStream.token()); } this._readWhitespace(); expressions.push(this._media_expression()); } } return new MediaQuery(ident, type, expressions, token.startLine, token.startCol); }, _media_type: function(){ return this._media_feature(); }, _media_expression: function(){ var tokenStream = this._tokenStream, feature = null, token, expression = null; tokenStream.mustMatch(Tokens.LPAREN); feature = this._media_feature(); this._readWhitespace(); if (tokenStream.match(Tokens.COLON)){ this._readWhitespace(); token = tokenStream.LT(1); expression = this._expression(); } tokenStream.mustMatch(Tokens.RPAREN); this._readWhitespace(); return new MediaFeature(feature, (expression ? new SyntaxUnit(expression, token.startLine, token.startCol) : null)); }, _media_feature: function(){ var tokenStream = this._tokenStream; tokenStream.mustMatch(Tokens.IDENT); return SyntaxUnit.fromToken(tokenStream.token()); }, _page: function(){ var tokenStream = this._tokenStream, line, col, identifier = null, pseudoPage = null; tokenStream.mustMatch(Tokens.PAGE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); if (tokenStream.match(Tokens.IDENT)){ identifier = tokenStream.token().value; if (identifier.toLowerCase() === "auto"){ this._unexpectedToken(tokenStream.token()); } } if (tokenStream.peek() == Tokens.COLON){ pseudoPage = this._pseudo_page(); } this._readWhitespace(); this.fire({ type: "startpage", id: identifier, pseudo: pseudoPage, line: line, col: col }); this._readDeclarations(true, true); this.fire({ type: "endpage", id: identifier, pseudo: pseudoPage, line: line, col: col }); }, _margin: function(){ var tokenStream = this._tokenStream, line, col, marginSym = this._margin_sym(); if (marginSym){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; this.fire({ type: "startpagemargin", margin: marginSym, line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endpagemargin", margin: marginSym, line: line, col: col }); return true; } else { return false; } }, _margin_sym: function(){ var tokenStream = this._tokenStream; if(tokenStream.match([Tokens.TOPLEFTCORNER_SYM, Tokens.TOPLEFT_SYM, Tokens.TOPCENTER_SYM, Tokens.TOPRIGHT_SYM, Tokens.TOPRIGHTCORNER_SYM, Tokens.BOTTOMLEFTCORNER_SYM, Tokens.BOTTOMLEFT_SYM, Tokens.BOTTOMCENTER_SYM, Tokens.BOTTOMRIGHT_SYM, Tokens.BOTTOMRIGHTCORNER_SYM, Tokens.LEFTTOP_SYM, Tokens.LEFTMIDDLE_SYM, Tokens.LEFTBOTTOM_SYM, Tokens.RIGHTTOP_SYM, Tokens.RIGHTMIDDLE_SYM, Tokens.RIGHTBOTTOM_SYM])) { return SyntaxUnit.fromToken(tokenStream.token()); } else { return null; } }, _pseudo_page: function(){ var tokenStream = this._tokenStream; tokenStream.mustMatch(Tokens.COLON); tokenStream.mustMatch(Tokens.IDENT); return tokenStream.token().value; }, _font_face: function(){ var tokenStream = this._tokenStream, line, col; tokenStream.mustMatch(Tokens.FONT_FACE_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); this.fire({ type: "startfontface", line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endfontface", line: line, col: col }); }, _viewport: function(){ var tokenStream = this._tokenStream, line, col; tokenStream.mustMatch(Tokens.VIEWPORT_SYM); line = tokenStream.token().startLine; col = tokenStream.token().startCol; this._readWhitespace(); this.fire({ type: "startviewport", line: line, col: col }); this._readDeclarations(true); this.fire({ type: "endviewport", line: line, col: col }); }, _operator: function(inFunction){ var tokenStream = this._tokenStream, token = null; if (tokenStream.match([Tokens.SLASH, Tokens.COMMA]) || (inFunction && tokenStream.match([Tokens.PLUS, Tokens.STAR, Tokens.MINUS]))){ token = tokenStream.token(); this._readWhitespace(); } return token ? PropertyValuePart.fromToken(token) : null; }, _combinator: function(){ var tokenStream = this._tokenStream, value = null, token; if(tokenStream.match([Tokens.PLUS, Tokens.GREATER, Tokens.TILDE])){ token = tokenStream.token(); value = new Combinator(token.value, token.startLine, token.startCol); this._readWhitespace(); } return value; }, _unary_operator: function(){ var tokenStream = this._tokenStream; if (tokenStream.match([Tokens.MINUS, Tokens.PLUS])){ return tokenStream.token().value; } else { return null; } }, _property: function(){ var tokenStream = this._tokenStream, value = null, hack = null, tokenValue, token, line, col; if (tokenStream.peek() == Tokens.STAR && this.options.starHack){ tokenStream.get(); token = tokenStream.token(); hack = token.value; line = token.startLine; col = token.startCol; } if(tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); tokenValue = token.value; if (tokenValue.charAt(0) == "_" && this.options.underscoreHack){ hack = "_"; tokenValue = tokenValue.substring(1); } value = new PropertyName(tokenValue, hack, (line||token.startLine), (col||token.startCol)); this._readWhitespace(); } return value; }, _ruleset: function(){ var tokenStream = this._tokenStream, tt, selectors; try { selectors = this._selectors_group(); } catch (ex){ if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); tt = tokenStream.advance([Tokens.RBRACE]); if (tt == Tokens.RBRACE){ } else { throw ex; } } else { throw ex; } return true; } if (selectors){ this.fire({ type: "startrule", selectors: selectors, line: selectors[0].line, col: selectors[0].col }); this._readDeclarations(true); this.fire({ type: "endrule", selectors: selectors, line: selectors[0].line, col: selectors[0].col }); } return selectors; }, _selectors_group: function(){ var tokenStream = this._tokenStream, selectors = [], selector; selector = this._selector(); if (selector !== null){ selectors.push(selector); while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); selector = this._selector(); if (selector !== null){ selectors.push(selector); } else { this._unexpectedToken(tokenStream.LT(1)); } } } return selectors.length ? selectors : null; }, _selector: function(){ var tokenStream = this._tokenStream, selector = [], nextSelector = null, combinator = null, ws = null; nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ return null; } selector.push(nextSelector); do { combinator = this._combinator(); if (combinator !== null){ selector.push(combinator); nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ this._unexpectedToken(tokenStream.LT(1)); } else { selector.push(nextSelector); } } else { if (this._readWhitespace()){ ws = new Combinator(tokenStream.token().value, tokenStream.token().startLine, tokenStream.token().startCol); combinator = this._combinator(); nextSelector = this._simple_selector_sequence(); if (nextSelector === null){ if (combinator !== null){ this._unexpectedToken(tokenStream.LT(1)); } } else { if (combinator !== null){ selector.push(combinator); } else { selector.push(ws); } selector.push(nextSelector); } } else { break; } } } while(true); return new Selector(selector, selector[0].line, selector[0].col); }, _simple_selector_sequence: function(){ var tokenStream = this._tokenStream, elementName = null, modifiers = [], selectorText= "", components = [ function(){ return tokenStream.match(Tokens.HASH) ? new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) : null; }, this._class, this._attrib, this._pseudo, this._negation ], i = 0, len = components.length, component = null, found = false, line, col; line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; elementName = this._type_selector(); if (!elementName){ elementName = this._universal(); } if (elementName !== null){ selectorText += elementName; } while(true){ if (tokenStream.peek() === Tokens.S){ break; } while(i < len && component === null){ component = components[i++].call(this); } if (component === null){ if (selectorText === ""){ return null; } else { break; } } else { i = 0; modifiers.push(component); selectorText += component.toString(); component = null; } } return selectorText !== "" ? new SelectorPart(elementName, modifiers, selectorText, line, col) : null; }, _type_selector: function(){ var tokenStream = this._tokenStream, ns = this._namespace_prefix(), elementName = this._element_name(); if (!elementName){ if (ns){ tokenStream.unget(); if (ns.length > 1){ tokenStream.unget(); } } return null; } else { if (ns){ elementName.text = ns + elementName.text; elementName.col -= ns.length; } return elementName; } }, _class: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.DOT)){ tokenStream.mustMatch(Tokens.IDENT); token = tokenStream.token(); return new SelectorSubPart("." + token.value, "class", token.startLine, token.startCol - 1); } else { return null; } }, _element_name: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); return new SelectorSubPart(token.value, "elementName", token.startLine, token.startCol); } else { return null; } }, _namespace_prefix: function(){ var tokenStream = this._tokenStream, value = ""; if (tokenStream.LA(1) === Tokens.PIPE || tokenStream.LA(2) === Tokens.PIPE){ if(tokenStream.match([Tokens.IDENT, Tokens.STAR])){ value += tokenStream.token().value; } tokenStream.mustMatch(Tokens.PIPE); value += "|"; } return value.length ? value : null; }, _universal: function(){ var tokenStream = this._tokenStream, value = "", ns; ns = this._namespace_prefix(); if(ns){ value += ns; } if(tokenStream.match(Tokens.STAR)){ value += "*"; } return value.length ? value : null; }, _attrib: function(){ var tokenStream = this._tokenStream, value = null, ns, token; if (tokenStream.match(Tokens.LBRACKET)){ token = tokenStream.token(); value = token.value; value += this._readWhitespace(); ns = this._namespace_prefix(); if (ns){ value += ns; } tokenStream.mustMatch(Tokens.IDENT); value += tokenStream.token().value; value += this._readWhitespace(); if(tokenStream.match([Tokens.PREFIXMATCH, Tokens.SUFFIXMATCH, Tokens.SUBSTRINGMATCH, Tokens.EQUALS, Tokens.INCLUDES, Tokens.DASHMATCH])){ value += tokenStream.token().value; value += this._readWhitespace(); tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]); value += tokenStream.token().value; value += this._readWhitespace(); } tokenStream.mustMatch(Tokens.RBRACKET); return new SelectorSubPart(value + "]", "attribute", token.startLine, token.startCol); } else { return null; } }, _pseudo: function(){ var tokenStream = this._tokenStream, pseudo = null, colons = ":", line, col; if (tokenStream.match(Tokens.COLON)){ if (tokenStream.match(Tokens.COLON)){ colons += ":"; } if (tokenStream.match(Tokens.IDENT)){ pseudo = tokenStream.token().value; line = tokenStream.token().startLine; col = tokenStream.token().startCol - colons.length; } else if (tokenStream.peek() == Tokens.FUNCTION){ line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol - colons.length; pseudo = this._functional_pseudo(); } if (pseudo){ pseudo = new SelectorSubPart(colons + pseudo, "pseudo", line, col); } } return pseudo; }, _functional_pseudo: function(){ var tokenStream = this._tokenStream, value = null; if(tokenStream.match(Tokens.FUNCTION)){ value = tokenStream.token().value; value += this._readWhitespace(); value += this._expression(); tokenStream.mustMatch(Tokens.RPAREN); value += ")"; } return value; }, _expression: function(){ var tokenStream = this._tokenStream, value = ""; while(tokenStream.match([Tokens.PLUS, Tokens.MINUS, Tokens.DIMENSION, Tokens.NUMBER, Tokens.STRING, Tokens.IDENT, Tokens.LENGTH, Tokens.FREQ, Tokens.ANGLE, Tokens.TIME, Tokens.RESOLUTION, Tokens.SLASH])){ value += tokenStream.token().value; value += this._readWhitespace(); } return value.length ? value : null; }, _negation: function(){ var tokenStream = this._tokenStream, line, col, value = "", arg, subpart = null; if (tokenStream.match(Tokens.NOT)){ value = tokenStream.token().value; line = tokenStream.token().startLine; col = tokenStream.token().startCol; value += this._readWhitespace(); arg = this._negation_arg(); value += arg; value += this._readWhitespace(); tokenStream.match(Tokens.RPAREN); value += tokenStream.token().value; subpart = new SelectorSubPart(value, "not", line, col); subpart.args.push(arg); } return subpart; }, _negation_arg: function(){ var tokenStream = this._tokenStream, args = [ this._type_selector, this._universal, function(){ return tokenStream.match(Tokens.HASH) ? new SelectorSubPart(tokenStream.token().value, "id", tokenStream.token().startLine, tokenStream.token().startCol) : null; }, this._class, this._attrib, this._pseudo ], arg = null, i = 0, len = args.length, elementName, line, col, part; line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; while(i < len && arg === null){ arg = args[i].call(this); i++; } if (arg === null){ this._unexpectedToken(tokenStream.LT(1)); } if (arg.type == "elementName"){ part = new SelectorPart(arg, [], arg.toString(), line, col); } else { part = new SelectorPart(null, [arg], arg.toString(), line, col); } return part; }, _declaration: function(){ var tokenStream = this._tokenStream, property = null, expr = null, prio = null, error = null, invalid = null, propertyName= ""; property = this._property(); if (property !== null){ tokenStream.mustMatch(Tokens.COLON); this._readWhitespace(); expr = this._expr(); if (!expr || expr.length === 0){ this._unexpectedToken(tokenStream.LT(1)); } prio = this._prio(); propertyName = property.toString(); if (this.options.starHack && property.hack == "*" || this.options.underscoreHack && property.hack == "_") { propertyName = property.text; } try { this._validateProperty(propertyName, expr); } catch (ex) { invalid = ex; } this.fire({ type: "property", property: property, value: expr, important: prio, line: property.line, col: property.col, invalid: invalid }); return true; } else { return false; } }, _prio: function(){ var tokenStream = this._tokenStream, result = tokenStream.match(Tokens.IMPORTANT_SYM); this._readWhitespace(); return result; }, _expr: function(inFunction){ var tokenStream = this._tokenStream, values = [], value = null, operator = null; value = this._term(inFunction); if (value !== null){ values.push(value); do { operator = this._operator(inFunction); if (operator){ values.push(operator); } /*else { values.push(new PropertyValue(valueParts, valueParts[0].line, valueParts[0].col)); valueParts = []; }*/ value = this._term(inFunction); if (value === null){ break; } else { values.push(value); } } while(true); } return values.length > 0 ? new PropertyValue(values, values[0].line, values[0].col) : null; }, _term: function(inFunction){ var tokenStream = this._tokenStream, unary = null, value = null, endChar = null, token, line, col; unary = this._unary_operator(); if (unary !== null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } if (tokenStream.peek() == Tokens.IE_FUNCTION && this.options.ieFilters){ value = this._ie_function(); if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } } else if (inFunction && tokenStream.match([Tokens.LPAREN, Tokens.LBRACE, Tokens.LBRACKET])){ token = tokenStream.token(); endChar = token.endChar; value = token.value + this._expr(inFunction).text; if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } tokenStream.mustMatch(Tokens.type(endChar)); value += endChar; this._readWhitespace(); } else if (tokenStream.match([Tokens.NUMBER, Tokens.PERCENTAGE, Tokens.LENGTH, Tokens.ANGLE, Tokens.TIME, Tokens.FREQ, Tokens.STRING, Tokens.IDENT, Tokens.URI, Tokens.UNICODE_RANGE])){ value = tokenStream.token().value; if (unary === null){ line = tokenStream.token().startLine; col = tokenStream.token().startCol; } this._readWhitespace(); } else { token = this._hexcolor(); if (token === null){ if (unary === null){ line = tokenStream.LT(1).startLine; col = tokenStream.LT(1).startCol; } if (value === null){ if (tokenStream.LA(3) == Tokens.EQUALS && this.options.ieFilters){ value = this._ie_function(); } else { value = this._function(); } } } else { value = token.value; if (unary === null){ line = token.startLine; col = token.startCol; } } } return value !== null ? new PropertyValuePart(unary !== null ? unary + value : value, line, col) : null; }, _function: function(){ var tokenStream = this._tokenStream, functionText = null, expr = null, lt; if (tokenStream.match(Tokens.FUNCTION)){ functionText = tokenStream.token().value; this._readWhitespace(); expr = this._expr(true); functionText += expr; if (this.options.ieFilters && tokenStream.peek() == Tokens.EQUALS){ do { if (this._readWhitespace()){ functionText += tokenStream.token().value; } if (tokenStream.LA(0) == Tokens.COMMA){ functionText += tokenStream.token().value; } tokenStream.match(Tokens.IDENT); functionText += tokenStream.token().value; tokenStream.match(Tokens.EQUALS); functionText += tokenStream.token().value; lt = tokenStream.peek(); while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){ tokenStream.get(); functionText += tokenStream.token().value; lt = tokenStream.peek(); } } while(tokenStream.match([Tokens.COMMA, Tokens.S])); } tokenStream.match(Tokens.RPAREN); functionText += ")"; this._readWhitespace(); } return functionText; }, _ie_function: function(){ var tokenStream = this._tokenStream, functionText = null, expr = null, lt; if (tokenStream.match([Tokens.IE_FUNCTION, Tokens.FUNCTION])){ functionText = tokenStream.token().value; do { if (this._readWhitespace()){ functionText += tokenStream.token().value; } if (tokenStream.LA(0) == Tokens.COMMA){ functionText += tokenStream.token().value; } tokenStream.match(Tokens.IDENT); functionText += tokenStream.token().value; tokenStream.match(Tokens.EQUALS); functionText += tokenStream.token().value; lt = tokenStream.peek(); while(lt != Tokens.COMMA && lt != Tokens.S && lt != Tokens.RPAREN){ tokenStream.get(); functionText += tokenStream.token().value; lt = tokenStream.peek(); } } while(tokenStream.match([Tokens.COMMA, Tokens.S])); tokenStream.match(Tokens.RPAREN); functionText += ")"; this._readWhitespace(); } return functionText; }, _hexcolor: function(){ var tokenStream = this._tokenStream, token = null, color; if(tokenStream.match(Tokens.HASH)){ token = tokenStream.token(); color = token.value; if (!/#[a-f0-9]{3,6}/i.test(color)){ throw new SyntaxError("Expected a hex color but found '" + color + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); } this._readWhitespace(); } return token; }, _keyframes: function(){ var tokenStream = this._tokenStream, token, tt, name, prefix = ""; tokenStream.mustMatch(Tokens.KEYFRAMES_SYM); token = tokenStream.token(); if (/^@\-([^\-]+)\-/.test(token.value)) { prefix = RegExp.$1; } this._readWhitespace(); name = this._keyframe_name(); this._readWhitespace(); tokenStream.mustMatch(Tokens.LBRACE); this.fire({ type: "startkeyframes", name: name, prefix: prefix, line: token.startLine, col: token.startCol }); this._readWhitespace(); tt = tokenStream.peek(); while(tt == Tokens.IDENT || tt == Tokens.PERCENTAGE) { this._keyframe_rule(); this._readWhitespace(); tt = tokenStream.peek(); } this.fire({ type: "endkeyframes", name: name, prefix: prefix, line: token.startLine, col: token.startCol }); this._readWhitespace(); tokenStream.mustMatch(Tokens.RBRACE); }, _keyframe_name: function(){ var tokenStream = this._tokenStream, token; tokenStream.mustMatch([Tokens.IDENT, Tokens.STRING]); return SyntaxUnit.fromToken(tokenStream.token()); }, _keyframe_rule: function(){ var tokenStream = this._tokenStream, token, keyList = this._key_list(); this.fire({ type: "startkeyframerule", keys: keyList, line: keyList[0].line, col: keyList[0].col }); this._readDeclarations(true); this.fire({ type: "endkeyframerule", keys: keyList, line: keyList[0].line, col: keyList[0].col }); }, _key_list: function(){ var tokenStream = this._tokenStream, token, key, keyList = []; keyList.push(this._key()); this._readWhitespace(); while(tokenStream.match(Tokens.COMMA)){ this._readWhitespace(); keyList.push(this._key()); this._readWhitespace(); } return keyList; }, _key: function(){ var tokenStream = this._tokenStream, token; if (tokenStream.match(Tokens.PERCENTAGE)){ return SyntaxUnit.fromToken(tokenStream.token()); } else if (tokenStream.match(Tokens.IDENT)){ token = tokenStream.token(); if (/from|to/i.test(token.value)){ return SyntaxUnit.fromToken(token); } tokenStream.unget(); } this._unexpectedToken(tokenStream.LT(1)); }, _skipCruft: function(){ while(this._tokenStream.match([Tokens.S, Tokens.CDO, Tokens.CDC])){ } }, _readDeclarations: function(checkStart, readMargins){ var tokenStream = this._tokenStream, tt; this._readWhitespace(); if (checkStart){ tokenStream.mustMatch(Tokens.LBRACE); } this._readWhitespace(); try { while(true){ if (tokenStream.match(Tokens.SEMICOLON) || (readMargins && this._margin())){ } else if (this._declaration()){ if (!tokenStream.match(Tokens.SEMICOLON)){ break; } } else { break; } this._readWhitespace(); } tokenStream.mustMatch(Tokens.RBRACE); this._readWhitespace(); } catch (ex) { if (ex instanceof SyntaxError && !this.options.strict){ this.fire({ type: "error", error: ex, message: ex.message, line: ex.line, col: ex.col }); tt = tokenStream.advance([Tokens.SEMICOLON, Tokens.RBRACE]); if (tt == Tokens.SEMICOLON){ this._readDeclarations(false, readMargins); } else if (tt != Tokens.RBRACE){ throw ex; } } else { throw ex; } } }, _readWhitespace: function(){ var tokenStream = this._tokenStream, ws = ""; while(tokenStream.match(Tokens.S)){ ws += tokenStream.token().value; } return ws; }, _unexpectedToken: function(token){ throw new SyntaxError("Unexpected token '" + token.value + "' at line " + token.startLine + ", col " + token.startCol + ".", token.startLine, token.startCol); }, _verifyEnd: function(){ if (this._tokenStream.LA(1) != Tokens.EOF){ this._unexpectedToken(this._tokenStream.LT(1)); } }, _validateProperty: function(property, value){ Validation.validate(property, value); }, parse: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._stylesheet(); }, parseStyleSheet: function(input){ return this.parse(input); }, parseMediaQuery: function(input){ this._tokenStream = new TokenStream(input, Tokens); var result = this._media_query(); this._verifyEnd(); return result; }, parsePropertyValue: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._expr(); this._readWhitespace(); this._verifyEnd(); return result; }, parseRule: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._ruleset(); this._readWhitespace(); this._verifyEnd(); return result; }, parseSelector: function(input){ this._tokenStream = new TokenStream(input, Tokens); this._readWhitespace(); var result = this._selector(); this._readWhitespace(); this._verifyEnd(); return result; }, parseStyleAttribute: function(input){ input += "}"; // for error recovery in _readDeclarations() this._tokenStream = new TokenStream(input, Tokens); this._readDeclarations(); } }; for (prop in additions){ if (additions.hasOwnProperty(prop)){ proto[prop] = additions[prop]; } } return proto; }(); var Properties = { "align-items" : "flex-start | flex-end | center | baseline | stretch", "align-content" : "flex-start | flex-end | center | space-between | space-around | stretch", "align-self" : "auto | flex-start | flex-end | center | baseline | stretch", "-webkit-align-items" : "flex-start | flex-end | center | baseline | stretch", "-webkit-align-content" : "flex-start | flex-end | center | space-between | space-around | stretch", "-webkit-align-self" : "auto | flex-start | flex-end | center | baseline | stretch", "alignment-adjust" : "auto | baseline | before-edge | text-before-edge | middle | central | after-edge | text-after-edge | ideographic | alphabetic | hanging | mathematical | | ", "alignment-baseline" : "baseline | use-script | before-edge | text-before-edge | after-edge | text-after-edge | central | middle | ideographic | alphabetic | hanging | mathematical", "animation" : 1, "animation-delay" : { multi: "
    "),m.characterMapping.getHorizontalOffset(m.characterMapping.length)}}),define(se[649],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/anchorSelect/browser/anchorSelect",e)}),define(se[650],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/bracketMatching/browser/bracketMatching",e)}),define(se[651],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/caretOperations/browser/caretOperations",e)}),define(se[652],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/caretOperations/browser/transpose",e)}),define(se[653],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/clipboard/browser/clipboard",e)}),define(se[654],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/codeAction/browser/codeAction",e)}),define(se[655],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/codeAction/browser/codeActionCommands",e)}),define(se[656],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/codeAction/browser/codeActionContributions",e)}),define(se[657],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/codeAction/browser/codeActionController",e)}),define(se[658],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/codeAction/browser/codeActionMenu",e)}),define(se[659],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/codeAction/browser/lightBulbWidget",e)}),define(se[660],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/codelens/browser/codelensController",e)}),define(se[661],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/colorPicker/browser/colorPickerWidget",e)}),define(se[662],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions",e)}),define(se[663],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/comment/browser/comment",e)}),define(se[664],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/contextmenu/browser/contextmenu",e)}),define(se[665],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/cursorUndo/browser/cursorUndo",e)}),define(se[666],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution",e)}),define(se[667],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/dropOrPasteInto/browser/copyPasteController",e)}),define(se[668],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/dropOrPasteInto/browser/defaultProviders",e)}),define(se[669],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution",e)}),define(se[670],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController",e)}),define(se[671],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/editorState/browser/keybindingCancellation",e)}),define(se[672],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/find/browser/findController",e)}),define(se[673],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/find/browser/findWidget",e)}),define(se[674],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/folding/browser/folding",e)}),define(se[675],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/folding/browser/foldingDecorations",e)}),define(se[676],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/fontZoom/browser/fontZoom",e)}),define(se[677],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/format/browser/formatActions",e)}),define(se[678],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoError/browser/gotoError",e)}),define(se[679],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoError/browser/gotoErrorWidget",e)}),define(se[680],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoSymbol/browser/goToCommands",e)}),define(se[681],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition",e)}),define(se[682],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoSymbol/browser/peek/referencesController",e)}),define(se[683],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoSymbol/browser/peek/referencesTree",e)}),define(se[684],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget",e)}),define(se[685],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoSymbol/browser/referencesModel",e)}),define(se[161],oe([1,0,12,6,170,2,53,49,11,5,685]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReferencesModel=e.FileReferences=e.FilePreview=e.OneReference=void 0;class a{constructor(u,f,c,d){this.isProviderFirst=u,this.parent=f,this.link=c,this._rangeCallback=d,this.id=y.defaultGenerator.nextId()}get uri(){return this.link.uri}get range(){var u,f;return(f=(u=this._range)!==null&&u!==void 0?u:this.link.targetSelectionRange)!==null&&f!==void 0?f:this.link.range}set range(u){this._range=u,this._rangeCallback(this)}get ariaMessage(){var u;const f=(u=this.parent.getPreview(this))===null||u===void 0?void 0:u.preview(this.range);return f?(0,b.localize)(1,null,f.value,(0,p.basename)(this.uri),this.range.startLineNumber,this.range.startColumn):(0,b.localize)(0,null,(0,p.basename)(this.uri),this.range.startLineNumber,this.range.startColumn)}}e.OneReference=a;class i{constructor(u){this._modelReference=u}dispose(){this._modelReference.dispose()}preview(u,f=8){const c=this._modelReference.object.textEditorModel;if(!c)return;const{startLineNumber:d,startColumn:s,endLineNumber:l,endColumn:o}=u,g=c.getWordUntilPosition({lineNumber:d,column:s-f}),h=new v.Range(d,g.startColumn,d,s),m=new v.Range(l,o,l,1073741824),C=c.getValueInRange(h).replace(/^\s+/,""),w=c.getValueInRange(u),D=c.getValueInRange(m).replace(/\s+$/,"");return{value:C+w+D,highlight:{start:C.length,end:C.length+w.length}}}}e.FilePreview=i;class n{constructor(u,f){this.parent=u,this.uri=f,this.children=[],this._previews=new S.ResourceMap}dispose(){(0,E.dispose)(this._previews.values()),this._previews.clear()}getPreview(u){return this._previews.get(u.uri)}get ariaMessage(){const u=this.children.length;return u===1?(0,b.localize)(2,null,(0,p.basename)(this.uri),this.uri.fsPath):(0,b.localize)(3,null,u,(0,p.basename)(this.uri),this.uri.fsPath)}async resolve(u){if(this._previews.size!==0)return this;for(const f of this.children)if(!this._previews.has(f.uri))try{const c=await u.createModelReference(f.uri);this._previews.set(f.uri,new i(c))}catch(c){(0,L.onUnexpectedError)(c)}return this}}e.FileReferences=n;class t{constructor(u,f){this.groups=[],this.references=[],this._onDidChangeReferenceRange=new k.Emitter,this.onDidChangeReferenceRange=this._onDidChangeReferenceRange.event,this._links=u,this._title=f;const[c]=u;u.sort(t._compareReferences);let d;for(const s of u)if((!d||!p.extUri.isEqual(d.uri,s.uri,!0))&&(d=new n(this,s.uri),this.groups.push(d)),d.children.length===0||t._compareReferences(s,d.children[d.children.length-1])!==0){const l=new a(c===s,d,s,o=>this._onDidChangeReferenceRange.fire(o));this.references.push(l),d.children.push(l)}}dispose(){(0,E.dispose)(this.groups),this._onDidChangeReferenceRange.dispose(),this.groups.length=0}clone(){return new t(this._links,this._title)}get title(){return this._title}get isEmpty(){return this.groups.length===0}get ariaMessage(){return this.isEmpty?(0,b.localize)(4,null):this.references.length===1?(0,b.localize)(5,null,this.references[0].uri.fsPath):this.groups.length===1?(0,b.localize)(6,null,this.references.length,this.groups[0].uri.fsPath):(0,b.localize)(7,null,this.references.length,this.groups.length)}nextOrPreviousReference(u,f){const{parent:c}=u;let d=c.children.indexOf(u);const s=c.children.length,l=c.parent.groups.length;return l===1||f&&d+10?(f?d=(d+1)%s:d=(d+s-1)%s,c.children[d]):(d=c.parent.groups.indexOf(c),f?(d=(d+1)%l,c.parent.groups[d].children[0]):(d=(d+l-1)%l,c.parent.groups[d].children[c.parent.groups[d].children.length-1]))}nearestReference(u,f){const c=this.references.map((d,s)=>({idx:s,prefixLen:_.commonPrefixLength(d.uri.toString(),u.toString()),offsetDist:Math.abs(d.range.startLineNumber-f.lineNumber)*100+Math.abs(d.range.startColumn-f.column)})).sort((d,s)=>d.prefixLen>s.prefixLen?-1:d.prefixLens.offsetDist?1:0)[0];if(c)return this.references[c.idx]}referenceAt(u,f){for(const c of this.references)if(c.uri.toString()===u.toString()&&v.Range.containsPosition(c.range,f))return c}firstReference(){for(const u of this.references)if(u.isProviderFirst)return u;return this.references[0]}static _compareReferences(u,f){return p.extUri.compare(u.uri,f.uri)||v.Range.compareRangesUsingStarts(u.range,f.range)}}e.ReferencesModel=t}),define(se[686],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/gotoSymbol/browser/symbolNavigation",e)}),define(se[687],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/hover/browser/hover",e)}),define(se[688],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/hover/browser/markdownHoverParticipant",e)}),define(se[689],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/hover/browser/markerHoverParticipant",e)}),define(se[690],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace",e)}),define(se[691],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/indentation/browser/indentation",e)}),define(se[692],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/inlayHints/browser/inlayHintsHover",e)}),define(se[693],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/inlineCompletions/browser/commands",e)}),define(se[694],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/inlineCompletions/browser/hoverParticipant",e)}),define(se[695],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys",e)}),define(se[696],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController",e)}),define(se[697],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget",e)}),define(se[698],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/lineSelection/browser/lineSelection",e)}),define(se[699],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/linesOperations/browser/linesOperations",e)}),define(se[700],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/linkedEditing/browser/linkedEditing",e)}),define(se[701],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/links/browser/links",e)}),define(se[702],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/message/browser/messageController",e)}),define(se[703],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/multicursor/browser/multicursor",e)}),define(se[704],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/parameterHints/browser/parameterHints",e)}),define(se[705],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/parameterHints/browser/parameterHintsWidget",e)}),define(se[706],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/peekView/browser/peekView",e)}),define(se[707],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess",e)}),define(se[708],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess",e)}),define(se[709],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/readOnlyMessage/browser/contribution",e)}),define(se[710],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/rename/browser/rename",e)}),define(se[711],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/rename/browser/renameInputField",e)}),define(se[712],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/smartSelect/browser/smartSelect",e)}),define(se[713],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/snippet/browser/snippetController2",e)}),define(se[714],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/snippet/browser/snippetVariables",e)}),define(se[715],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/stickyScroll/browser/stickyScrollActions",e)}),define(se[716],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/suggest/browser/suggest",e)}),define(se[717],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/suggest/browser/suggestController",e)}),define(se[718],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/suggest/browser/suggestWidget",e)}),define(se[719],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/suggest/browser/suggestWidgetDetails",e)}),define(se[720],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/suggest/browser/suggestWidgetRenderer",e)}),define(se[721],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/suggest/browser/suggestWidgetStatus",e)}),define(se[722],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/symbolIcons/browser/symbolIcons",e)}),define(se[723],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode",e)}),define(se[724],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/tokenization/browser/tokenization",e)}),define(se[725],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter",e)}),define(se[726],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators",e)}),define(se[727],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/wordHighlighter/browser/highlightDecorations",e)}),define(se[728],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/wordHighlighter/browser/wordHighlighter",e)}),define(se[729],oe([3,4]),function(te,e){return te.create("vs/editor/contrib/wordOperations/browser/wordOperations",e)}),define(se[730],oe([3,4]),function(te,e){return te.create("vs/platform/action/common/actionCommonCategories",e)}),define(se[731],oe([3,4]),function(te,e){return te.create("vs/platform/actionWidget/browser/actionList",e)}),define(se[732],oe([3,4]),function(te,e){return te.create("vs/platform/actionWidget/browser/actionWidget",e)}),define(se[733],oe([3,4]),function(te,e){return te.create("vs/platform/actions/browser/menuEntryActionViewItem",e)}),define(se[734],oe([3,4]),function(te,e){return te.create("vs/platform/actions/browser/toolbar",e)}),define(se[735],oe([3,4]),function(te,e){return te.create("vs/platform/actions/common/menuService",e)}),define(se[736],oe([3,4]),function(te,e){return te.create("vs/platform/audioCues/browser/audioCueService",e)}),define(se[737],oe([3,4]),function(te,e){return te.create("vs/platform/configuration/common/configurationRegistry",e)}),define(se[738],oe([3,4]),function(te,e){return te.create("vs/platform/contextkey/browser/contextKeyService",e)}),define(se[739],oe([3,4]),function(te,e){return te.create("vs/platform/contextkey/common/contextkey",e)}),define(se[740],oe([3,4]),function(te,e){return te.create("vs/platform/contextkey/common/contextkeys",e)}),define(se[741],oe([3,4]),function(te,e){return te.create("vs/platform/contextkey/common/scanner",e)}),define(se[742],oe([3,4]),function(te,e){return te.create("vs/platform/history/browser/contextScopedHistoryWidget",e)}),define(se[743],oe([3,4]),function(te,e){return te.create("vs/platform/keybinding/common/abstractKeybindingService",e)}),define(se[744],oe([3,4]),function(te,e){return te.create("vs/platform/list/browser/listService",e)}),define(se[745],oe([3,4]),function(te,e){return te.create("vs/platform/markers/common/markers",e)}),define(se[746],oe([3,4]),function(te,e){return te.create("vs/platform/quickinput/browser/commandsQuickAccess",e)}),define(se[747],oe([3,4]),function(te,e){return te.create("vs/platform/quickinput/browser/helpQuickAccess",e)}),define(se[748],oe([3,4]),function(te,e){return te.create("vs/platform/quickinput/browser/quickInput",e)}),define(se[749],oe([3,4]),function(te,e){return te.create("vs/platform/quickinput/browser/quickInputController",e)}),define(se[750],oe([3,4]),function(te,e){return te.create("vs/platform/quickinput/browser/quickInputList",e)}),define(se[751],oe([3,4]),function(te,e){return te.create("vs/platform/quickinput/browser/quickInputUtils",e)}),define(se[752],oe([3,4]),function(te,e){return te.create("vs/platform/theme/common/colorRegistry",e)}),define(se[753],oe([3,4]),function(te,e){return te.create("vs/platform/theme/common/iconRegistry",e)}),define(se[754],oe([3,4]),function(te,e){return te.create("vs/platform/undoRedo/common/undoRedoService",e)}),define(se[755],oe([3,4]),function(te,e){return te.create("vs/platform/workspace/common/workspace",e)}),define(se[756],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isICommandActionToggleInfo=void 0;function L(k){return k?k.condition!==void 0:!1}e.isICommandActionToggleInfo=L}),define(se[757],oe([1,0,730]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Categories=void 0,e.Categories=Object.freeze({View:(0,L.localize2)(1,"View"),Help:(0,L.localize2)(2,"Help"),Test:(0,L.localize2)(3,"Test"),File:(0,L.localize2)(4,"File"),Preferences:(0,L.localize2)(5,"Preferences"),Developer:{value:(0,L.localize)(0,null),original:"Developer"}})}),define(se[758],oe([1,0,12,741]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Scanner=void 0;function y(..._){switch(_.length){case 1:return(0,k.localize)(0,null,_[0]);case 2:return(0,k.localize)(1,null,_[0],_[1]);case 3:return(0,k.localize)(2,null,_[0],_[1],_[2]);default:return}}const E=(0,k.localize)(3,null),S=(0,k.localize)(4,null);class p{constructor(){this._input="",this._start=0,this._current=0,this._tokens=[],this._errors=[],this.stringRe=/[a-zA-Z0-9_<>\-\./\\:\*\?\+\[\]\^,#@;"%\$\p{L}-]+/uy}static getLexeme(v){switch(v.type){case 0:return"(";case 1:return")";case 2:return"!";case 3:return v.isTripleEq?"===":"==";case 4:return v.isTripleEq?"!==":"!=";case 5:return"<";case 6:return"<=";case 7:return">=";case 8:return">=";case 9:return"=~";case 10:return v.lexeme;case 11:return"true";case 12:return"false";case 13:return"in";case 14:return"not";case 15:return"&&";case 16:return"||";case 17:return v.lexeme;case 18:return v.lexeme;case 19:return v.lexeme;case 20:return"EOF";default:throw(0,L.illegalState)(`unhandled token type: ${JSON.stringify(v)}; have you forgotten to add a case?`)}}reset(v){return this._input=v,this._start=0,this._current=0,this._tokens=[],this._errors=[],this}scan(){for(;!this._isAtEnd();)switch(this._start=this._current,this._advance()){case 40:this._addToken(0);break;case 41:this._addToken(1);break;case 33:if(this._match(61)){const b=this._match(61);this._tokens.push({type:4,offset:this._start,isTripleEq:b})}else this._addToken(2);break;case 39:this._quotedString();break;case 47:this._regex();break;case 61:if(this._match(61)){const b=this._match(61);this._tokens.push({type:3,offset:this._start,isTripleEq:b})}else this._match(126)?this._addToken(9):this._error(y("==","=~"));break;case 60:this._addToken(this._match(61)?6:5);break;case 62:this._addToken(this._match(61)?8:7);break;case 38:this._match(38)?this._addToken(15):this._error(y("&&"));break;case 124:this._match(124)?this._addToken(16):this._error(y("||"));break;case 32:case 13:case 9:case 10:case 160:break;default:this._string()}return this._start=this._current,this._addToken(20),Array.from(this._tokens)}_match(v){return this._isAtEnd()||this._input.charCodeAt(this._current)!==v?!1:(this._current++,!0)}_advance(){return this._input.charCodeAt(this._current++)}_peek(){return this._isAtEnd()?0:this._input.charCodeAt(this._current)}_addToken(v){this._tokens.push({type:v,offset:this._start})}_error(v){const b=this._start,a=this._input.substring(this._start,this._current),i={type:19,offset:this._start,lexeme:a};this._errors.push({offset:b,lexeme:a,additionalInfo:v}),this._tokens.push(i)}_string(){this.stringRe.lastIndex=this._start;const v=this.stringRe.exec(this._input);if(v){this._current=this._start+v[0].length;const b=this._input.substring(this._start,this._current),a=p._keywords.get(b);a?this._addToken(a):this._tokens.push({type:17,lexeme:b,offset:this._start})}}_quotedString(){for(;this._peek()!==39&&!this._isAtEnd();)this._advance();if(this._isAtEnd()){this._error(E);return}this._advance(),this._tokens.push({type:18,lexeme:this._input.substring(this._start+1,this._current-1),offset:this._start+1})}_regex(){let v=this._current,b=!1,a=!1;for(;;){if(v>=this._input.length){this._current=v,this._error(S);return}const n=this._input.charCodeAt(v);if(b)b=!1;else if(n===47&&!a){v++;break}else n===91?a=!0:n===92?b=!0:n===93&&(a=!1);v++}for(;v=this._input.length}}e.Scanner=p,p._regexFlags=new Set(["i","g","s","m","y","u"].map(_=>_.charCodeAt(0))),p._keywords=new Map([["not",14],["in",13],["false",12],["true",11]])}),define(se[759],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorOpenSource=void 0;var L;(function(k){k[k.API=0]="API",k[k.USER=1]="USER"})(L||(e.EditorOpenSource=L={}))}),define(se[760],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ExtensionIdentifierSet=e.ExtensionIdentifier=void 0;class L{constructor(E){this.value=E,this._lower=E.toLowerCase()}static toKey(E){return typeof E=="string"?E.toLowerCase():E._lower}}e.ExtensionIdentifier=L;class k{constructor(E){if(this._set=new Set,E)for(const S of E)this.add(S)}add(E){this._set.add(L.toKey(E))}has(E){return this._set.has(L.toKey(E))}}e.ExtensionIdentifierSet=k}),define(se[341],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FileKind=void 0;var L;(function(k){k[k.FILE=0]="FILE",k[k.FOLDER=1]="FOLDER",k[k.ROOT_FOLDER=2]="ROOT_FOLDER"})(L||(e.FileKind=L={}))}),define(se[761],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.showHistoryKeybindingHint=void 0;function L(k){var y,E;return((y=k.lookupKeybinding("history.showPrevious"))===null||y===void 0?void 0:y.getElectronAccelerator())==="Up"&&((E=k.lookupKeybinding("history.showNext"))===null||E===void 0?void 0:E.getElectronAccelerator())==="Down"}e.showHistoryKeybindingHint=L}),define(se[236],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SyncDescriptor=void 0;class L{constructor(y,E=[],S=!1){this.ctor=y,this.staticArguments=E,this.supportsDelayedInstantiation=S}}e.SyncDescriptor=L}),define(se[45],oe([1,0,236]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getSingletonServiceDescriptors=e.registerSingleton=void 0;const k=[];function y(S,p,_){p instanceof L.SyncDescriptor||(p=new L.SyncDescriptor(p,[],!!_)),k.push([S,p])}e.registerSingleton=y;function E(){return k}e.getSingletonServiceDescriptors=E}),define(se[762],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Graph=e.Node=void 0;class L{constructor(E,S){this.key=E,this.data=S,this.incoming=new Map,this.outgoing=new Map}}e.Node=L;class k{constructor(E){this._hashFn=E,this._nodes=new Map}roots(){const E=[];for(const S of this._nodes.values())S.outgoing.size===0&&E.push(S);return E}insertEdge(E,S){const p=this.lookupOrInsertNode(E),_=this.lookupOrInsertNode(S);p.outgoing.set(_.key,_),_.incoming.set(p.key,p)}removeNode(E){const S=this._hashFn(E);this._nodes.delete(S);for(const p of this._nodes.values())p.outgoing.delete(S),p.incoming.delete(S)}lookupOrInsertNode(E){const S=this._hashFn(E);let p=this._nodes.get(S);return p||(p=new L(S,E),this._nodes.set(S,p)),p}isEmpty(){return this._nodes.size===0}toString(){const E=[];for(const[S,p]of this._nodes)E.push(`${S} (-> incoming)[${[...p.incoming.keys()].join(", ")}] (outgoing ->)[${[...p.outgoing.keys()].join(",")}] `);return E.join(` `)}findCycleSlow(){for(const[E,S]of this._nodes){const p=new Set([E]),_=this._findCycle(S,p);if(_)return _}}_findCycle(E,S){for(const[p,_]of E.outgoing){if(S.has(p))return[...S,p].join(" -> ");S.add(p);const v=this._findCycle(_,S);if(v)return v;S.delete(p)}}}e.Graph=k}),define(se[8],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createDecorator=e.IInstantiationService=e._util=void 0;var L;(function(E){E.serviceIds=new Map,E.DI_TARGET="$di$target",E.DI_DEPENDENCIES="$di$dependencies";function S(p){return p[E.DI_DEPENDENCIES]||[]}E.getServiceDependencies=S})(L||(e._util=L={})),e.IInstantiationService=y("instantiationService");function k(E,S,p){S[L.DI_TARGET]===S?S[L.DI_DEPENDENCIES].push({id:E,index:p}):(S[L.DI_DEPENDENCIES]=[{id:E,index:p}],S[L.DI_TARGET]=S)}function y(E){if(L.serviceIds.has(E))return L.serviceIds.get(E);const S=function(p,_,v){if(arguments.length!==3)throw new Error("@IServiceName-decorator can only be used to decorate a parameter");k(S,p,v)};return S.toString=()=>E,L.serviceIds.set(E,S),S}e.createDecorator=y}),define(se[136],oe([1,0,8,22,20]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ResourceFileEdit=e.ResourceTextEdit=e.ResourceEdit=e.IBulkEditService=void 0,e.IBulkEditService=(0,L.createDecorator)("IWorkspaceEditService");class E{constructor(v){this.metadata=v}static convert(v){return v.edits.map(b=>{if(S.is(b))return S.lift(b);if(p.is(b))return p.lift(b);throw new Error("Unsupported edit")})}}e.ResourceEdit=E;class S extends E{static is(v){return v instanceof S?!0:(0,y.isObject)(v)&&k.URI.isUri(v.resource)&&(0,y.isObject)(v.textEdit)}static lift(v){return v instanceof S?v:new S(v.resource,v.textEdit,v.versionId,v.metadata)}constructor(v,b,a=void 0,i){super(i),this.resource=v,this.textEdit=b,this.versionId=a}}e.ResourceTextEdit=S;class p extends E{static is(v){return v instanceof p?!0:(0,y.isObject)(v)&&(!!v.newResource||!!v.oldResource)}static lift(v){return v instanceof p?v:new p(v.oldResource,v.newResource,v.options,v.metadata)}constructor(v,b,a={},i){super(i),this.oldResource=v,this.newResource=b,this.options=a}}e.ResourceFileEdit=p}),define(se[33],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ICodeEditorService=void 0,e.ICodeEditorService=(0,L.createDecorator)("codeEditorService")});var ge=this&&this.__param||function(te,e){return function(L,k){e(L,k,te)}};define(se[342],oe([1,0,7,118,26,58,2,35,171,28,20,87,62,10,5,31,627,8]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){"use strict";var c;Object.defineProperty(e,"__esModule",{value:!0}),e.HideUnchangedRegionsFeature=void 0;let d=c=class extends S.Disposable{static setBreadcrumbsSourceFactory(o){this._breadcrumbsSourceFactory.set(o,void 0)}get isUpdatingHiddenAreas(){return this._isUpdatingHiddenAreas}constructor(o,g,h,m){super(),this._editors=o,this._diffModel=g,this._options=h,this._instantiationService=m,this._modifiedOutlineSource=(0,_.derivedDisposable)(this,I=>{const T=this._editors.modifiedModel.read(I),A=c._breadcrumbsSourceFactory.read(I);return!T||!A?void 0:A(T,this._instantiationService)}),this._isUpdatingHiddenAreas=!1,this._register(this._editors.original.onDidChangeCursorPosition(I=>{if(I.reason===3){const T=this._diffModel.get();(0,p.transaction)(A=>{for(const P of this._editors.original.getSelections()||[])T?.ensureOriginalLineIsVisible(P.getStartPosition().lineNumber,0,A),T?.ensureOriginalLineIsVisible(P.getEndPosition().lineNumber,0,A)})}})),this._register(this._editors.modified.onDidChangeCursorPosition(I=>{if(I.reason===3){const T=this._diffModel.get();(0,p.transaction)(A=>{for(const P of this._editors.modified.getSelections()||[])T?.ensureModifiedLineIsVisible(P.getStartPosition().lineNumber,0,A),T?.ensureModifiedLineIsVisible(P.getEndPosition().lineNumber,0,A)})}}));const C=this._diffModel.map((I,T)=>{var A,P;const N=(A=I?.unchangedRegions.read(T))!==null&&A!==void 0?A:[];return N.length===1&&N[0].modifiedLineNumber===1&&N[0].lineCount===((P=this._editors.modifiedModel.read(T))===null||P===void 0?void 0:P.getLineCount())?[]:N});this.viewZones=(0,p.derivedWithStore)(this,(I,T)=>{const A=this._modifiedOutlineSource.read(I);if(!A)return{origViewZones:[],modViewZones:[]};const P=[],N=[],M=this._options.renderSideBySide.read(I),R=C.read(I);for(const x of R)if(!x.shouldHideControls(I)){{const O=(0,p.derived)(this,W=>x.getHiddenOriginalRange(W).startLineNumber-1),B=new a.PlaceholderViewZone(O,24);P.push(B),T.add(new s(this._editors.original,B,x,x.originalUnchangedRange,!M,A,W=>this._diffModel.get().ensureModifiedLineIsVisible(W,2,void 0),this._options))}{const O=(0,p.derived)(this,W=>x.getHiddenModifiedRange(W).startLineNumber-1),B=new a.PlaceholderViewZone(O,24);N.push(B),T.add(new s(this._editors.modified,B,x,x.modifiedUnchangedRange,!1,A,W=>this._diffModel.get().ensureModifiedLineIsVisible(W,2,void 0),this._options))}}return{origViewZones:P,modViewZones:N}});const w={description:"unchanged lines",className:"diff-unchanged-lines",isWholeLine:!0},D={description:"Fold Unchanged",glyphMarginHoverMessage:new E.MarkdownString(void 0,{isTrusted:!0,supportThemeIcons:!0}).appendMarkdown((0,u.localize)(0,null)),glyphMarginClassName:"fold-unchanged "+v.ThemeIcon.asClassName(y.Codicon.fold),zIndex:10001};this._register((0,a.applyObservableDecorations)(this._editors.original,(0,p.derived)(this,I=>{const T=C.read(I),A=T.map(P=>({range:P.originalUnchangedRange.toInclusiveRange(),options:w}));for(const P of T)P.shouldHideControls(I)&&A.push({range:t.Range.fromPositions(new n.Position(P.originalLineNumber,1)),options:D});return A}))),this._register((0,a.applyObservableDecorations)(this._editors.modified,(0,p.derived)(this,I=>{const T=C.read(I),A=T.map(P=>({range:P.modifiedUnchangedRange.toInclusiveRange(),options:w}));for(const P of T)P.shouldHideControls(I)&&A.push({range:i.LineRange.ofLength(P.modifiedLineNumber,1).toInclusiveRange(),options:D});return A}))),this._register((0,p.autorun)(I=>{const T=C.read(I);this._isUpdatingHiddenAreas=!0;try{this._editors.original.setHiddenAreas(T.map(A=>A.getHiddenOriginalRange(I).toInclusiveRange()).filter(b.isDefined)),this._editors.modified.setHiddenAreas(T.map(A=>A.getHiddenModifiedRange(I).toInclusiveRange()).filter(b.isDefined))}finally{this._isUpdatingHiddenAreas=!1}})),this._register(this._editors.modified.onMouseUp(I=>{var T;if(!I.event.rightButton&&I.target.position&&(!((T=I.target.element)===null||T===void 0)&&T.className.includes("fold-unchanged"))){const A=I.target.position.lineNumber,P=this._diffModel.get();if(!P)return;const N=P.unchangedRegions.get().find(M=>M.modifiedUnchangedRange.includes(A));if(!N)return;N.collapseAll(void 0),I.event.stopPropagation(),I.event.preventDefault()}})),this._register(this._editors.original.onMouseUp(I=>{var T;if(!I.event.rightButton&&I.target.position&&(!((T=I.target.element)===null||T===void 0)&&T.className.includes("fold-unchanged"))){const A=I.target.position.lineNumber,P=this._diffModel.get();if(!P)return;const N=P.unchangedRegions.get().find(M=>M.originalUnchangedRange.includes(A));if(!N)return;N.collapseAll(void 0),I.event.stopPropagation(),I.event.preventDefault()}}))}};e.HideUnchangedRegionsFeature=d,d._breadcrumbsSourceFactory=(0,p.observableValue)("breadcrumbsSourceFactory",void 0),e.HideUnchangedRegionsFeature=d=c=ke([ge(3,f.IInstantiationService)],d);class s extends a.ViewZoneOverlayWidget{constructor(o,g,h,m,C,w,D,I){const T=(0,L.h)("div.diff-hidden-lines-widget");super(o,g,T.root),this._editor=o,this._unchangedRegion=h,this._unchangedRegionRange=m,this._hide=C,this._modifiedOutlineSource=w,this._revealModifiedHiddenLine=D,this._options=I,this._nodes=(0,L.h)("div.diff-hidden-lines",[(0,L.h)("div.top@top",{title:(0,u.localize)(1,null)}),(0,L.h)("div.center@content",{style:{display:"flex"}},[(0,L.h)("div@first",{style:{display:"flex",justifyContent:"center",alignItems:"center",flexShrink:"0"}},[(0,L.$)("a",{title:(0,u.localize)(2,null),role:"button",onclick:()=>{this._unchangedRegion.showAll(void 0)}},...(0,k.renderLabelWithIcons)("$(unfold)"))]),(0,L.h)("div@others",{style:{display:"flex",justifyContent:"center",alignItems:"center"}})]),(0,L.h)("div.bottom@bottom",{title:(0,u.localize)(3,null),role:"button"})]),T.root.appendChild(this._nodes.root);const A=(0,p.observableFromEvent)(this._editor.onDidLayoutChange,()=>this._editor.getLayoutInfo());this._hide?(0,L.reset)(this._nodes.first):this._register((0,a.applyStyle)(this._nodes.first,{width:A.map(N=>N.contentLeft)})),this._register((0,p.autorun)(N=>{const M=this._unchangedRegion.visibleLineCountTop.read(N)+this._unchangedRegion.visibleLineCountBottom.read(N)===this._unchangedRegion.lineCount;this._nodes.bottom.classList.toggle("canMoveTop",!M),this._nodes.bottom.classList.toggle("canMoveBottom",this._unchangedRegion.visibleLineCountBottom.read(N)>0),this._nodes.top.classList.toggle("canMoveTop",this._unchangedRegion.visibleLineCountTop.read(N)>0),this._nodes.top.classList.toggle("canMoveBottom",!M);const R=this._unchangedRegion.isDragged.read(N),x=this._editor.getDomNode();x&&(x.classList.toggle("draggingUnchangedRegion",!!R),R==="top"?(x.classList.toggle("canMoveTop",this._unchangedRegion.visibleLineCountTop.read(N)>0),x.classList.toggle("canMoveBottom",!M)):R==="bottom"?(x.classList.toggle("canMoveTop",!M),x.classList.toggle("canMoveBottom",this._unchangedRegion.visibleLineCountBottom.read(N)>0)):(x.classList.toggle("canMoveTop",!1),x.classList.toggle("canMoveBottom",!1)))}));const P=this._editor;this._register((0,L.addDisposableListener)(this._nodes.top,"mousedown",N=>{if(N.button!==0)return;this._nodes.top.classList.toggle("dragging",!0),this._nodes.root.classList.toggle("dragging",!0),N.preventDefault();const M=N.clientY;let R=!1;const x=this._unchangedRegion.visibleLineCountTop.get();this._unchangedRegion.isDragged.set("top",void 0);const O=(0,L.getWindow)(this._nodes.top),B=(0,L.addDisposableListener)(O,"mousemove",V=>{const F=V.clientY-M;R=R||Math.abs(F)>2;const q=Math.round(F/P.getOption(66)),ie=Math.max(0,Math.min(x+q,this._unchangedRegion.getMaxVisibleLineCountTop()));this._unchangedRegion.visibleLineCountTop.set(ie,void 0)}),W=(0,L.addDisposableListener)(O,"mouseup",V=>{R||this._unchangedRegion.showMoreAbove(this._options.hideUnchangedRegionsRevealLineCount.get(),void 0),this._nodes.top.classList.toggle("dragging",!1),this._nodes.root.classList.toggle("dragging",!1),this._unchangedRegion.isDragged.set(void 0,void 0),B.dispose(),W.dispose()})})),this._register((0,L.addDisposableListener)(this._nodes.bottom,"mousedown",N=>{if(N.button!==0)return;this._nodes.bottom.classList.toggle("dragging",!0),this._nodes.root.classList.toggle("dragging",!0),N.preventDefault();const M=N.clientY;let R=!1;const x=this._unchangedRegion.visibleLineCountBottom.get();this._unchangedRegion.isDragged.set("bottom",void 0);const O=(0,L.getWindow)(this._nodes.bottom),B=(0,L.addDisposableListener)(O,"mousemove",V=>{const F=V.clientY-M;R=R||Math.abs(F)>2;const q=Math.round(F/P.getOption(66)),ie=Math.max(0,Math.min(x-q,this._unchangedRegion.getMaxVisibleLineCountBottom())),ae=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);this._unchangedRegion.visibleLineCountBottom.set(ie,void 0);const ne=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);P.setScrollTop(P.getScrollTop()+(ne-ae))}),W=(0,L.addDisposableListener)(O,"mouseup",V=>{if(this._unchangedRegion.isDragged.set(void 0,void 0),!R){const K=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);this._unchangedRegion.showMoreBelow(this._options.hideUnchangedRegionsRevealLineCount.get(),void 0);const F=P.getTopForLineNumber(this._unchangedRegionRange.endLineNumberExclusive);P.setScrollTop(P.getScrollTop()+(F-K))}this._nodes.bottom.classList.toggle("dragging",!1),this._nodes.root.classList.toggle("dragging",!1),B.dispose(),W.dispose()})})),this._register((0,p.autorun)(N=>{const M=[];if(!this._hide){const R=h.getHiddenModifiedRange(N).length,x=(0,u.localize)(4,null,R),O=(0,L.$)("span",{title:(0,u.localize)(5,null)},x);O.addEventListener("dblclick",V=>{V.button===0&&(V.preventDefault(),this._unchangedRegion.showAll(void 0))}),M.push(O);const B=this._unchangedRegion.getHiddenModifiedRange(N),W=this._modifiedOutlineSource.getBreadcrumbItems(B,N);if(W.length>0){M.push((0,L.$)("span",void 0,"\xA0\xA0|\xA0\xA0"));for(let V=0;V{this._revealModifiedHiddenLine(K.startLineNumber)}}}}(0,L.reset)(this._nodes.others,...M)}))}}}),define(se[43],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ILanguageService=void 0,e.ILanguageService=(0,L.createDecorator)("languageService")}),define(se[121],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IEditorWorkerService=void 0,e.IEditorWorkerService=(0,L.createDecorator)("editorWorkerService")}),define(se[18],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ILanguageFeaturesService=void 0,e.ILanguageFeaturesService=(0,L.createDecorator)("ILanguageFeaturesService")}),define(se[763],oe([1,0,611,18,45]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LanguageFeaturesService=void 0;class E{constructor(){this.referenceProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.renameProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.codeActionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.definitionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.typeDefinitionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.declarationProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.implementationProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentSymbolProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.inlayHintsProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.colorProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.codeLensProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentFormattingEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentRangeFormattingEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.onTypeFormattingEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.signatureHelpProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.hoverProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentHighlightProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.multiDocumentHighlightProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.selectionRangeProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.foldingRangeProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.linkProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.inlineCompletionsProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.completionProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.linkedEditingRangeProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentRangeSemanticTokensProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentSemanticTokensProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentOnDropEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this)),this.documentPasteEditProvider=new L.LanguageFeatureRegistry(this._score.bind(this))}_score(p){var _;return(_=this._notebookTypeResolver)===null||_===void 0?void 0:_.call(this,p)}}e.LanguageFeaturesService=E,(0,y.registerSingleton)(k.ILanguageFeaturesService,E,1)}),define(se[237],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IMarkerDecorationsService=void 0,e.IMarkerDecorationsService=(0,L.createDecorator)("markerDecorationsService")}),define(se[51],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IModelService=void 0,e.IModelService=(0,L.createDecorator)("modelService")}),define(se[68],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ITextModelService=void 0,e.ITextModelService=(0,L.createDecorator)("textModelService")}),define(se[238],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ISemanticTokensStylingService=void 0,e.ISemanticTokensStylingService=(0,L.createDecorator)("semanticTokensStylingService")}),define(se[189],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ITextResourcePropertiesService=e.ITextResourceConfigurationService=void 0,e.ITextResourceConfigurationService=(0,L.createDecorator)("textResourceConfigurationService"),e.ITextResourcePropertiesService=(0,L.createDecorator)("textResourcePropertiesService")}),define(se[764],oe([1,0,45,8,295]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ITreeViewsDnDService=void 0,e.ITreeViewsDnDService=(0,k.createDecorator)("treeViewsDndService"),(0,L.registerSingleton)(e.ITreeViewsDnDService,y.TreeViewsDnDService,1)}),define(se[239],oe([1,0,136,117]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.sortEditsByYieldTo=e.createCombinedWorkspaceEdit=void 0;function y(S,p,_){var v,b,a,i;return(typeof _.insertText=="string"?_.insertText==="":_.insertText.snippet==="")?{edits:(b=(v=_.additionalEdit)===null||v===void 0?void 0:v.edits)!==null&&b!==void 0?b:[]}:{edits:[...p.map(n=>new L.ResourceTextEdit(S,{range:n,text:typeof _.insertText=="string"?k.SnippetParser.escape(_.insertText)+"$0":_.insertText.snippet,insertAsSnippet:!0})),...(i=(a=_.additionalEdit)===null||a===void 0?void 0:a.edits)!==null&&i!==void 0?i:[]]}}e.createCombinedWorkspaceEdit=y;function E(S){var p;function _(n,t){return"providerId"in n&&n.providerId===t.providerId||"mimeType"in n&&n.mimeType===t.handledMimeType}const v=new Map;for(const n of S)for(const t of(p=n.yieldTo)!==null&&p!==void 0?p:[])for(const r of S)if(r!==n&&_(t,r)){let u=v.get(n);u||(u=[],v.set(n,u)),u.push(r)}if(!v.size)return Array.from(S);const b=new Set,a=[];function i(n){if(!n.length)return[];const t=n[0];if(a.includes(t))return console.warn(`Yield to cycle detected for ${t.providerId}`),n;if(b.has(t))return i(n.slice(1));let r=[];const u=v.get(t);return u&&(a.push(t),r=i(u),a.pop()),b.add(t),[...r,t,...i(n.slice(1))]}return i(Array.from(S))}e.sortEditsByYieldTo=E}),define(se[765],oe([1,0,93,6,2,35,11,72,36,10,5,102,43,41,94,155,120,217,156,467]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GhostTextWidget=e.GHOST_TEXT_DESCRIPTION=void 0,e.GHOST_TEXT_DESCRIPTION="ghost-text";let d=class extends y.Disposable{constructor(h,m,C){super(),this.editor=h,this.model=m,this.languageService=C,this.isDisposed=(0,E.observableValue)(this,!1),this.currentTextModel=(0,E.observableFromEvent)(this.editor.onDidChangeModel,()=>this.editor.getModel()),this.uiState=(0,E.derived)(this,w=>{if(this.isDisposed.read(w))return;const D=this.currentTextModel.read(w);if(D!==this.model.targetTextModel.read(w))return;const I=this.model.ghostText.read(w);if(!I)return;const T=I instanceof f.GhostTextReplacement?I.columnRange:void 0,A=[],P=[];function N(B,W){if(P.length>0){const V=P[P.length-1];W&&V.decorations.push(new r.LineDecoration(V.content.length+1,V.content.length+1+B[0].length,W,0)),V.content+=B[0],B=B.slice(1)}for(const V of B)P.push({content:V,decorations:W?[new r.LineDecoration(1,V.length+1,W,0)]:[]})}const M=D.getLineContent(I.lineNumber);let R,x=0;for(const B of I.parts){let W=B.lines;R===void 0?(A.push({column:B.column,text:W[0],preview:B.preview}),W=W.slice(1)):N([M.substring(x,B.column-1)],void 0),W.length>0&&(N(W,e.GHOST_TEXT_DESCRIPTION),R===void 0&&B.column<=M.length&&(R=B.column)),x=B.column-1}R!==void 0&&N([M.substring(x)],void 0);const O=R!==void 0?new c.ColumnRange(R,M.length+1):void 0;return{replacedRange:T,inlineTexts:A,additionalLines:P,hiddenRange:O,lineNumber:I.lineNumber,additionalReservedLineCount:this.model.minReservedLineCount.read(w),targetTextModel:D}}),this.decorations=(0,E.derived)(this,w=>{const D=this.uiState.read(w);if(!D)return[];const I=[];D.replacedRange&&I.push({range:D.replacedRange.toRange(D.lineNumber),options:{inlineClassName:"inline-completion-text-to-replace",description:"GhostTextReplacement"}}),D.hiddenRange&&I.push({range:D.hiddenRange.toRange(D.lineNumber),options:{inlineClassName:"ghost-text-hidden",description:"ghost-text-hidden"}});for(const T of D.inlineTexts)I.push({range:b.Range.fromPositions(new v.Position(D.lineNumber,T.column)),options:{description:e.GHOST_TEXT_DESCRIPTION,after:{content:T.text,inlineClassName:T.preview?"ghost-text-decoration-preview":"ghost-text-decoration",cursorStops:n.InjectedTextCursorStops.Left},showIfCollapsed:!0}});return I}),this.additionalLinesWidget=this._register(new s(this.editor,this.languageService.languageIdCodec,(0,E.derived)(w=>{const D=this.uiState.read(w);return D?{lineNumber:D.lineNumber,additionalLines:D.additionalLines,minReservedLineCount:D.additionalReservedLineCount,targetTextModel:D.targetTextModel}:void 0}))),this._register((0,y.toDisposable)(()=>{this.isDisposed.set(!0,void 0)})),this._register((0,c.applyObservableDecorations)(this.editor,this.decorations))}ownsViewZone(h){return this.additionalLinesWidget.viewZoneId===h}};e.GhostTextWidget=d,e.GhostTextWidget=d=ke([ge(2,i.ILanguageService)],d);class s extends y.Disposable{get viewZoneId(){return this._viewZoneId}constructor(h,m,C){super(),this.editor=h,this.languageIdCodec=m,this.lines=C,this._viewZoneId=void 0,this.editorOptionsChanged=(0,E.observableSignalFromEvent)("editorOptionChanged",k.Event.filter(this.editor.onDidChangeConfiguration,w=>w.hasChanged(33)||w.hasChanged(116)||w.hasChanged(98)||w.hasChanged(93)||w.hasChanged(51)||w.hasChanged(50)||w.hasChanged(66))),this._register((0,E.autorun)(w=>{const D=this.lines.read(w);this.editorOptionsChanged.read(w),D?this.updateLines(D.lineNumber,D.additionalLines,D.minReservedLineCount):this.clear()}))}dispose(){super.dispose(),this.clear()}clear(){this.editor.changeViewZones(h=>{this._viewZoneId&&(h.removeZone(this._viewZoneId),this._viewZoneId=void 0)})}updateLines(h,m,C){const w=this.editor.getModel();if(!w)return;const{tabSize:D}=w.getOptions();this.editor.changeViewZones(I=>{this._viewZoneId&&(I.removeZone(this._viewZoneId),this._viewZoneId=void 0);const T=Math.max(m.length,C);if(T>0){const A=document.createElement("div");l(A,D,m,this.editor.getOptions(),this.languageIdCodec),this._viewZoneId=I.addZone({afterLineNumber:h,heightInLines:T,domNode:A,afterColumnAffinity:1})}})}}function l(g,h,m,C,w){const D=C.get(33),I=C.get(116),T="none",A=C.get(93),P=C.get(51),N=C.get(50),M=C.get(66),R=new a.StringBuilder(1e4);R.appendString('
    ');for(let B=0,W=m.length;B');const F=S.isBasicASCII(K),q=S.containsRTL(K),ie=t.LineTokens.createEmpty(K,w);(0,u.renderViewLine)(new u.RenderLineInput(N.isMonospace&&!D,N.canUseHalfwidthRightwardsArrow,K,!1,F,q,0,ie,V.decorations,h,0,N.spaceWidth,N.middotWidth,N.wsmiddotWidth,I,T,A,P!==_.EditorFontLigatures.OFF,null),R),R.appendString("
    ")}R.appendString("
    "),(0,p.applyFontInfo)(g,N);const x=R.build(),O=o?o.createHTML(x):x;g.innerHTML=O}const o=(0,L.createTrustedTypesPolicy)("editorGhostText",{createHTML:g=>g})}),define(se[137],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IStandaloneThemeService=void 0,e.IStandaloneThemeService=(0,L.createDecorator)("themeService")}),define(se[122],oe([1,0,8,736]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AudioCue=e.SoundSource=e.Sound=e.IAudioCueService=void 0,e.IAudioCueService=(0,L.createDecorator)("audioCue");class y{static register(_){return new y(_.fileName)}constructor(_){this.fileName=_}}e.Sound=y,y.error=y.register({fileName:"error.mp3"}),y.warning=y.register({fileName:"warning.mp3"}),y.foldedArea=y.register({fileName:"foldedAreas.mp3"}),y.break=y.register({fileName:"break.mp3"}),y.quickFixes=y.register({fileName:"quickFixes.mp3"}),y.taskCompleted=y.register({fileName:"taskCompleted.mp3"}),y.taskFailed=y.register({fileName:"taskFailed.mp3"}),y.terminalBell=y.register({fileName:"terminalBell.mp3"}),y.diffLineInserted=y.register({fileName:"diffLineInserted.mp3"}),y.diffLineDeleted=y.register({fileName:"diffLineDeleted.mp3"}),y.diffLineModified=y.register({fileName:"diffLineModified.mp3"}),y.chatRequestSent=y.register({fileName:"chatRequestSent.mp3"}),y.chatResponsePending=y.register({fileName:"chatResponsePending.mp3"}),y.chatResponseReceived1=y.register({fileName:"chatResponseReceived1.mp3"}),y.chatResponseReceived2=y.register({fileName:"chatResponseReceived2.mp3"}),y.chatResponseReceived3=y.register({fileName:"chatResponseReceived3.mp3"}),y.chatResponseReceived4=y.register({fileName:"chatResponseReceived4.mp3"}),y.clear=y.register({fileName:"clear.mp3"}),y.save=y.register({fileName:"save.mp3"}),y.format=y.register({fileName:"format.mp3"});class E{constructor(_){this.randomOneOf=_}}e.SoundSource=E;class S{static register(_){const v=new E("randomOneOf"in _.sound?_.sound.randomOneOf:[_.sound]),b=new S(v,_.name,_.settingsKey,_.alertSettingsKey,_.alertMessage);return S._audioCues.add(b),b}constructor(_,v,b,a,i){this.sound=_,this.name=v,this.settingsKey=b,this.alertSettingsKey=a,this.alertMessage=i}}e.AudioCue=S,S._audioCues=new Set,S.error=S.register({name:(0,k.localize)(0,null),sound:y.error,settingsKey:"audioCues.lineHasError",alertSettingsKey:"accessibility.alert.error",alertMessage:(0,k.localize)(1,null)}),S.warning=S.register({name:(0,k.localize)(2,null),sound:y.warning,settingsKey:"audioCues.lineHasWarning",alertSettingsKey:"accessibility.alert.warning",alertMessage:(0,k.localize)(3,null)}),S.foldedArea=S.register({name:(0,k.localize)(4,null),sound:y.foldedArea,settingsKey:"audioCues.lineHasFoldedArea",alertSettingsKey:"accessibility.alert.foldedArea",alertMessage:(0,k.localize)(5,null)}),S.break=S.register({name:(0,k.localize)(6,null),sound:y.break,settingsKey:"audioCues.lineHasBreakpoint",alertSettingsKey:"accessibility.alert.breakpoint",alertMessage:(0,k.localize)(7,null)}),S.inlineSuggestion=S.register({name:(0,k.localize)(8,null),sound:y.quickFixes,settingsKey:"audioCues.lineHasInlineSuggestion"}),S.terminalQuickFix=S.register({name:(0,k.localize)(9,null),sound:y.quickFixes,settingsKey:"audioCues.terminalQuickFix",alertSettingsKey:"accessibility.alert.terminalQuickFix",alertMessage:(0,k.localize)(10,null)}),S.onDebugBreak=S.register({name:(0,k.localize)(11,null),sound:y.break,settingsKey:"audioCues.onDebugBreak",alertSettingsKey:"accessibility.alert.onDebugBreak",alertMessage:(0,k.localize)(12,null)}),S.noInlayHints=S.register({name:(0,k.localize)(13,null),sound:y.error,settingsKey:"audioCues.noInlayHints",alertSettingsKey:"accessibility.alert.noInlayHints",alertMessage:(0,k.localize)(14,null)}),S.taskCompleted=S.register({name:(0,k.localize)(15,null),sound:y.taskCompleted,settingsKey:"audioCues.taskCompleted",alertSettingsKey:"accessibility.alert.taskCompleted",alertMessage:(0,k.localize)(16,null)}),S.taskFailed=S.register({name:(0,k.localize)(17,null),sound:y.taskFailed,settingsKey:"audioCues.taskFailed",alertSettingsKey:"accessibility.alert.taskFailed",alertMessage:(0,k.localize)(18,null)}),S.terminalCommandFailed=S.register({name:(0,k.localize)(19,null),sound:y.error,settingsKey:"audioCues.terminalCommandFailed",alertSettingsKey:"accessibility.alert.terminalCommandFailed",alertMessage:(0,k.localize)(20,null)}),S.terminalBell=S.register({name:(0,k.localize)(21,null),sound:y.terminalBell,settingsKey:"audioCues.terminalBell",alertSettingsKey:"accessibility.alert.terminalBell",alertMessage:(0,k.localize)(22,null)}),S.notebookCellCompleted=S.register({name:(0,k.localize)(23,null),sound:y.taskCompleted,settingsKey:"audioCues.notebookCellCompleted",alertSettingsKey:"accessibility.alert.notebookCellCompleted",alertMessage:(0,k.localize)(24,null)}),S.notebookCellFailed=S.register({name:(0,k.localize)(25,null),sound:y.taskFailed,settingsKey:"audioCues.notebookCellFailed",alertSettingsKey:"accessibility.alert.notebookCellFailed",alertMessage:(0,k.localize)(26,null)}),S.diffLineInserted=S.register({name:(0,k.localize)(27,null),sound:y.diffLineInserted,settingsKey:"audioCues.diffLineInserted"}),S.diffLineDeleted=S.register({name:(0,k.localize)(28,null),sound:y.diffLineDeleted,settingsKey:"audioCues.diffLineDeleted"}),S.diffLineModified=S.register({name:(0,k.localize)(29,null),sound:y.diffLineModified,settingsKey:"audioCues.diffLineModified"}),S.chatRequestSent=S.register({name:(0,k.localize)(30,null),sound:y.chatRequestSent,settingsKey:"audioCues.chatRequestSent",alertSettingsKey:"accessibility.alert.chatRequestSent",alertMessage:(0,k.localize)(31,null)}),S.chatResponseReceived=S.register({name:(0,k.localize)(32,null),settingsKey:"audioCues.chatResponseReceived",sound:{randomOneOf:[y.chatResponseReceived1,y.chatResponseReceived2,y.chatResponseReceived3,y.chatResponseReceived4]}}),S.chatResponsePending=S.register({name:(0,k.localize)(33,null),sound:y.chatResponsePending,settingsKey:"audioCues.chatResponsePending",alertSettingsKey:"accessibility.alert.chatResponsePending",alertMessage:(0,k.localize)(34,null)}),S.clear=S.register({name:(0,k.localize)(35,null),sound:y.clear,settingsKey:"audioCues.clear",alertSettingsKey:"accessibility.alert.clear",alertMessage:(0,k.localize)(36,null)}),S.save=S.register({name:(0,k.localize)(37,null),sound:y.save,settingsKey:"audioCues.save",alertSettingsKey:"accessibility.alert.save",alertMessage:(0,k.localize)(38,null)}),S.format=S.register({name:(0,k.localize)(39,null),sound:y.format,settingsKey:"audioCues.format",alertSettingsKey:"accessibility.alert.format",alertMessage:(0,k.localize)(40,null)})}),define(se[103],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IClipboardService=void 0,e.IClipboardService=(0,L.createDecorator)("clipboardService")}),define(se[25],oe([1,0,6,52,2,66,20,8]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CommandsRegistry=e.ICommandService=void 0,e.ICommandService=(0,p.createDecorator)("commandService"),e.CommandsRegistry=new class{constructor(){this._commands=new Map,this._onDidRegisterCommand=new L.Emitter,this.onDidRegisterCommand=this._onDidRegisterCommand.event}registerCommand(_,v){if(!_)throw new Error("invalid command");if(typeof _=="string"){if(!v)throw new Error("invalid command");return this.registerCommand({id:_,handler:v})}if(_.metadata&&Array.isArray(_.metadata.args)){const t=[];for(const u of _.metadata.args)t.push(u.constraint);const r=_.handler;_.handler=function(u,...f){return(0,S.validateConstraints)(f,t),r(u,...f)}}const{id:b}=_;let a=this._commands.get(b);a||(a=new E.LinkedList,this._commands.set(b,a));const i=a.unshift(_),n=(0,y.toDisposable)(()=>{i();const t=this._commands.get(b);t?.isEmpty()&&this._commands.delete(b)});return this._onDidRegisterCommand.fire(b),n}registerCommandAlias(_,v){return e.CommandsRegistry.registerCommand(_,(b,...a)=>b.get(e.ICommandService).executeCommand(v,...a))}getCommand(_){const v=this._commands.get(_);if(!(!v||v.isEmpty()))return k.Iterable.first(v)}getCommands(){const _=new Map;for(const v of this._commands.keys()){const b=this.getCommand(v);b&&_.set(v,b)}return _}},e.CommandsRegistry.registerCommand("noop",()=>{})}),define(se[343],oe([1,0,19,12,2,20,22,51,25,18]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getCodeLensModel=e.CodeLensModel=void 0;class b{constructor(){this.lenses=[],this._disposables=new y.DisposableStore}dispose(){this._disposables.dispose()}get isDisposed(){return this._disposables.isDisposed}add(n,t){this._disposables.add(n);for(const r of n.lenses)this.lenses.push({symbol:r,provider:t})}}e.CodeLensModel=b;async function a(i,n,t){const r=i.ordered(n),u=new Map,f=new b,c=r.map(async(d,s)=>{u.set(d,s);try{const l=await Promise.resolve(d.provideCodeLenses(n,t));l&&f.add(l,d)}catch(l){(0,k.onUnexpectedExternalError)(l)}});return await Promise.all(c),f.lenses=f.lenses.sort((d,s)=>d.symbol.range.startLineNumbers.symbol.range.startLineNumber?1:u.get(d.provider)u.get(s.provider)?1:d.symbol.range.startColumns.symbol.range.startColumn?1:0),f}e.getCodeLensModel=a,_.CommandsRegistry.registerCommand("_executeCodeLensProvider",function(i,...n){let[t,r]=n;(0,E.assertType)(S.URI.isUri(t)),(0,E.assertType)(typeof r=="number"||!r);const{codeLensProvider:u}=i.get(v.ILanguageFeaturesService),f=i.get(p.IModelService).getModel(t);if(!f)throw(0,k.illegalArgument)();const c=[],d=new y.DisposableStore;return a(u,f,L.CancellationToken.None).then(s=>{d.add(s);const l=[];for(const o of s.lenses)r==null||o.symbol.command?c.push(o.symbol):r-- >0&&o.provider.resolveCodeLens&&l.push(Promise.resolve(o.provider.resolveCodeLens(f,o.symbol,L.CancellationToken.None)).then(g=>c.push(g||o.symbol)));return Promise.all(l)}).then(()=>c).finally(()=>{setTimeout(()=>d.dispose(),100)})})}),define(se[766],oe([1,0,13,19,12,2,20,22,5,51,25,18]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getLinks=e.LinksList=e.Link=void 0;class i{constructor(u,f){this._link=u,this._provider=f}toJSON(){return{range:this.range,url:this.url,tooltip:this.tooltip}}get range(){return this._link.range}get url(){return this._link.url}get tooltip(){return this._link.tooltip}async resolve(u){return this._link.url?this._link.url:typeof this._provider.resolveLink=="function"?Promise.resolve(this._provider.resolveLink(this._link,u)).then(f=>(this._link=f||this._link,this._link.url?this.resolve(u):Promise.reject(new Error("missing")))):Promise.reject(new Error("missing"))}}e.Link=i;class n{constructor(u){this._disposables=new E.DisposableStore;let f=[];for(const[c,d]of u){const s=c.links.map(l=>new i(l,d));f=n._union(f,s),(0,E.isDisposable)(c)&&this._disposables.add(c)}this.links=f}dispose(){this._disposables.dispose(),this.links.length=0}static _union(u,f){const c=[];let d,s,l,o;for(d=0,l=0,s=u.length,o=f.length;dPromise.resolve(s.provideLinks(u,f)).then(o=>{o&&(c[l]=[o,s])},y.onUnexpectedExternalError));return Promise.all(d).then(()=>{const s=new n((0,L.coalesce)(c));return f.isCancellationRequested?(s.dispose(),new n([])):s})}e.getLinks=t,b.CommandsRegistry.registerCommand("_executeLinkProvider",async(r,...u)=>{let[f,c]=u;(0,S.assertType)(f instanceof p.URI),typeof c!="number"&&(c=0);const{linkProvider:d}=r.get(a.ILanguageFeaturesService),s=r.get(v.IModelService).getModel(f);if(!s)return[];const l=await t(d,s,k.CancellationToken.None);if(!l)return[];for(let g=0;g0?h[0]:[]}async function u(o,g,h,m,C){const w=r(o,g),D=await Promise.all(w.map(async I=>{let T,A=null;try{T=await I.provideDocumentSemanticTokens(g,I===h?m:null,C)}catch(P){A=P,T=null}return(!T||!a(T)&&!i(T))&&(T=null),new n(I,T,A)}));for(const I of D){if(I.error)throw I.error;if(I.tokens)return I}return D.length>0?D[0]:null}e.getDocumentSemanticTokens=u;function f(o,g){const h=o.orderedGroups(g);return h.length>0?h[0]:null}class c{constructor(g,h){this.provider=g,this.tokens=h}}function d(o,g){return o.has(g)}e.hasDocumentRangeSemanticTokensProvider=d;function s(o,g){const h=o.orderedGroups(g);return h.length>0?h[0]:[]}async function l(o,g,h,m){const C=s(o,g),w=await Promise.all(C.map(async D=>{let I;try{I=await D.provideDocumentRangeSemanticTokens(g,h,m)}catch(T){(0,k.onUnexpectedExternalError)(T),I=null}return(!I||!a(I))&&(I=null),new c(D,I)}));for(const D of w)if(D.tokens)return D;return w.length>0?w[0]:null}e.getDocumentRangeSemanticTokens=l,S.CommandsRegistry.registerCommand("_provideDocumentSemanticTokensLegend",async(o,...g)=>{const[h]=g;(0,p.assertType)(h instanceof y.URI);const m=o.get(E.IModelService).getModel(h);if(!m)return;const{documentSemanticTokensProvider:C}=o.get(b.ILanguageFeaturesService),w=f(C,m);return w?w[0].getLegend():o.get(S.ICommandService).executeCommand("_provideDocumentRangeSemanticTokensLegend",h)}),S.CommandsRegistry.registerCommand("_provideDocumentSemanticTokens",async(o,...g)=>{const[h]=g;(0,p.assertType)(h instanceof y.URI);const m=o.get(E.IModelService).getModel(h);if(!m)return;const{documentSemanticTokensProvider:C}=o.get(b.ILanguageFeaturesService);if(!t(C,m))return o.get(S.ICommandService).executeCommand("_provideDocumentRangeSemanticTokens",h,m.getFullModelRange());const w=await u(C,m,null,null,L.CancellationToken.None);if(!w)return;const{provider:D,tokens:I}=w;if(!I||!a(I))return;const T=(0,_.encodeSemanticTokensDto)({id:0,type:"full",data:I.data});return I.resultId&&D.releaseDocumentSemanticTokens(I.resultId),T}),S.CommandsRegistry.registerCommand("_provideDocumentRangeSemanticTokensLegend",async(o,...g)=>{const[h,m]=g;(0,p.assertType)(h instanceof y.URI);const C=o.get(E.IModelService).getModel(h);if(!C)return;const{documentRangeSemanticTokensProvider:w}=o.get(b.ILanguageFeaturesService),D=s(w,C);if(D.length===0)return;if(D.length===1)return D[0].getLegend();if(!m||!v.Range.isIRange(m))return console.warn("provideDocumentRangeSemanticTokensLegend might be out-of-sync with provideDocumentRangeSemanticTokens unless a range argument is passed in"),D[0].getLegend();const I=await l(w,C,v.Range.lift(m),L.CancellationToken.None);if(I)return I.provider.getLegend()}),S.CommandsRegistry.registerCommand("_provideDocumentRangeSemanticTokens",async(o,...g)=>{const[h,m]=g;(0,p.assertType)(h instanceof y.URI),(0,p.assertType)(v.Range.isIRange(m));const C=o.get(E.IModelService).getModel(h);if(!C)return;const{documentRangeSemanticTokensProvider:w}=o.get(b.ILanguageFeaturesService),D=await l(w,C,v.Range.lift(m),L.CancellationToken.None);if(!(!D||!D.tokens))return(0,_.encodeSemanticTokensDto)({id:0,type:"full",data:D.tokens.data})})}),define(se[27],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getLanguageTagSettingPlainKey=e.getConfigurationValue=e.removeFromValueTree=e.addToValueTree=e.toValuesTree=e.IConfigurationService=void 0,e.IConfigurationService=(0,L.createDecorator)("configurationService");function k(v,b){const a=Object.create(null);for(const i in v)y(a,i,v[i],b);return a}e.toValuesTree=k;function y(v,b,a,i){const n=b.split("."),t=n.pop();let r=v;for(let u=0;u"u"?a:t}e.getConfigurationValue=p;function _(v){return v.replace(/[\[\]]/g,"")}e.getLanguageTagSettingPlainKey=_}),define(se[345],oe([1,0,2,31,160,313,27]),function(te,e,L,k,y,E,S){"use strict";var p;Object.defineProperty(e,"__esModule",{value:!0}),e.MonarchTokenizer=void 0;const _=5;class v{static create(d,s){return this._INSTANCE.create(d,s)}constructor(d){this._maxCacheDepth=d,this._entries=Object.create(null)}create(d,s){if(d!==null&&d.depth>=this._maxCacheDepth)return new b(d,s);let l=b.getStackElementId(d);l.length>0&&(l+="|"),l+=s;let o=this._entries[l];return o||(o=new b(d,s),this._entries[l]=o,o)}}v._INSTANCE=new v(_);class b{constructor(d,s){this.parent=d,this.state=s,this.depth=(this.parent?this.parent.depth:0)+1}static getStackElementId(d){let s="";for(;d!==null;)s.length>0&&(s+="|"),s+=d.state,d=d.parent;return s}static _equals(d,s){for(;d!==null&&s!==null;){if(d===s)return!0;if(d.state!==s.state)return!1;d=d.parent,s=s.parent}return d===null&&s===null}equals(d){return b._equals(this,d)}push(d){return v.create(this,d)}pop(){return this.parent}popall(){let d=this;for(;d.parent;)d=d.parent;return d}switchTo(d){return v.create(this.parent,d)}}class a{constructor(d,s){this.languageId=d,this.state=s}equals(d){return this.languageId===d.languageId&&this.state.equals(d.state)}clone(){return this.state.clone()===this.state?this:new a(this.languageId,this.state)}}class i{static create(d,s){return this._INSTANCE.create(d,s)}constructor(d){this._maxCacheDepth=d,this._entries=Object.create(null)}create(d,s){if(s!==null)return new n(d,s);if(d!==null&&d.depth>=this._maxCacheDepth)return new n(d,s);const l=b.getStackElementId(d);let o=this._entries[l];return o||(o=new n(d,null),this._entries[l]=o,o)}}i._INSTANCE=new i(_);class n{constructor(d,s){this.stack=d,this.embeddedLanguageData=s}clone(){return(this.embeddedLanguageData?this.embeddedLanguageData.clone():null)===this.embeddedLanguageData?this:i.create(this.stack,this.embeddedLanguageData)}equals(d){return!(d instanceof n)||!this.stack.equals(d.stack)?!1:this.embeddedLanguageData===null&&d.embeddedLanguageData===null?!0:this.embeddedLanguageData===null||d.embeddedLanguageData===null?!1:this.embeddedLanguageData.equals(d.embeddedLanguageData)}}class t{constructor(){this._tokens=[],this._languageId=null,this._lastTokenType=null,this._lastTokenLanguage=null}enterLanguage(d){this._languageId=d}emit(d,s){this._lastTokenType===s&&this._lastTokenLanguage===this._languageId||(this._lastTokenType=s,this._lastTokenLanguage=this._languageId,this._tokens.push(new k.Token(d,s,this._languageId)))}nestedLanguageTokenize(d,s,l,o){const g=l.languageId,h=l.state,m=k.TokenizationRegistry.get(g);if(!m)return this.enterLanguage(g),this.emit(o,""),h;const C=m.tokenize(d,s,h);if(o!==0)for(const w of C.tokens)this._tokens.push(new k.Token(w.offset+o,w.type,w.language));else this._tokens=this._tokens.concat(C.tokens);return this._lastTokenType=null,this._lastTokenLanguage=null,this._languageId=null,C.endState}finalize(d){return new k.TokenizationResult(this._tokens,d)}}class r{constructor(d,s){this._languageService=d,this._theme=s,this._prependTokens=null,this._tokens=[],this._currentLanguageId=0,this._lastTokenMetadata=0}enterLanguage(d){this._currentLanguageId=this._languageService.languageIdCodec.encodeLanguageId(d)}emit(d,s){const l=this._theme.match(this._currentLanguageId,s)|1024;this._lastTokenMetadata!==l&&(this._lastTokenMetadata=l,this._tokens.push(d),this._tokens.push(l))}static _merge(d,s,l){const o=d!==null?d.length:0,g=s.length,h=l!==null?l.length:0;if(o===0&&g===0&&h===0)return new Uint32Array(0);if(o===0&&g===0)return l;if(g===0&&h===0)return d;const m=new Uint32Array(o+g+h);d!==null&&m.set(d);for(let C=0;C{if(h)return;let C=!1;for(let w=0,D=m.changedLanguages.length;w{m.affectsConfiguration("editor.maxTokenizationLineLength")&&(this._maxTokenizationLineLength=this._configurationService.getValue("editor.maxTokenizationLineLength",{overrideIdentifier:this._languageId}))}))}getLoadStatus(){const d=[];for(const s in this._embeddedLanguages){const l=k.TokenizationRegistry.get(s);if(l){if(l instanceof p){const o=l.getLoadStatus();o.loaded===!1&&d.push(o.promise)}continue}k.TokenizationRegistry.isResolved(s)||d.push(k.TokenizationRegistry.getOrCreate(s))}return d.length===0?{loaded:!0}:{loaded:!1,promise:Promise.all(d).then(s=>{})}}getInitialState(){const d=v.create(null,this._lexer.start);return i.create(d,null)}tokenize(d,s,l){if(d.length>=this._maxTokenizationLineLength)return(0,y.nullTokenize)(this._languageId,l);const o=new t,g=this._tokenize(d,s,l,o);return o.finalize(g)}tokenizeEncoded(d,s,l){if(d.length>=this._maxTokenizationLineLength)return(0,y.nullTokenizeEncoded)(this._languageService.languageIdCodec.encodeLanguageId(this._languageId),l);const o=new r(this._languageService,this._standaloneThemeService.getColorTheme().tokenTheme),g=this._tokenize(d,s,l,o);return o.finalize(g)}_tokenize(d,s,l,o){return l.embeddedLanguageData?this._nestedTokenize(d,s,l,0,o):this._myTokenize(d,s,l,0,o)}_findLeavingNestedLanguageOffset(d,s){let l=this._lexer.tokenizer[s.stack.state];if(!l&&(l=E.findRules(this._lexer,s.stack.state),!l))throw E.createError(this._lexer,"tokenizer state is not defined: "+s.stack.state);let o=-1,g=!1;for(const h of l){if(!E.isIAction(h.action)||h.action.nextEmbedded!=="@pop")continue;g=!0;let m=h.regex;const C=h.regex.source;if(C.substr(0,4)==="^(?:"&&C.substr(C.length-1,1)===")"){const D=(m.ignoreCase?"i":"")+(m.unicode?"u":"");m=new RegExp(C.substr(4,C.length-5),D)}const w=d.search(m);w===-1||w!==0&&h.matchOnlyAtLineStart||(o===-1||w0&&g.nestedLanguageTokenize(m,!1,l.embeddedLanguageData,o);const C=d.substring(h);return this._myTokenize(C,s,l,o+h,g)}_safeRuleName(d){return d?d.name:"(unknown)"}_myTokenize(d,s,l,o,g){g.enterLanguage(this._languageId);const h=d.length,m=s&&this._lexer.includeLF?d+` `:d,C=m.length;let w=l.embeddedLanguageData,D=l.stack,I=0,T=null,A=!0;for(;A||I=C)break;A=!1;let q=this._lexer.tokenizer[R];if(!q&&(q=E.findRules(this._lexer,R),!q))throw E.createError(this._lexer,"tokenizer state is not defined: "+R);const ie=m.substr(I);for(const ae of q)if((I===0||!ae.matchOnlyAtLineStart)&&(x=ie.match(ae.regex),x)){O=x[0],B=ae.action;break}}if(x||(x=[""],O=""),B||(I=this._lexer.maxStack)throw E.createError(this._lexer,"maximum tokenizer stack size reached: ["+D.state+","+D.parent.state+",...]");D=D.push(R)}else if(B.next==="@pop"){if(D.depth<=1)throw E.createError(this._lexer,"trying to pop an empty stack in rule: "+this._safeRuleName(W));D=D.pop()}else if(B.next==="@popall")D=D.popall();else{let q=E.substituteMatches(this._lexer,B.next,O,x,R);if(q[0]==="@"&&(q=q.substr(1)),E.findRules(this._lexer,q))D=D.push(q);else throw E.createError(this._lexer,"trying to set a next state '"+q+"' that is undefined in rule: "+this._safeRuleName(W))}}B.log&&typeof B.log=="string"&&E.log(this._lexer,this._lexer.languageId+": "+E.substituteMatches(this._lexer,B.log,O,x,R))}if(K===null)throw E.createError(this._lexer,"lexer rule has no well-defined action in rule: "+this._safeRuleName(W));const F=q=>{const ie=this._languageService.getLanguageIdByLanguageName(q)||this._languageService.getLanguageIdByMimeType(q)||q,ae=this._getNestedEmbeddedLanguageData(ie);if(I0)throw E.createError(this._lexer,"groups cannot be nested: "+this._safeRuleName(W));if(x.length!==K.length+1)throw E.createError(this._lexer,"matched number of groups does not match the number of actions in rule: "+this._safeRuleName(W));let q=0;for(let ie=1;iet});class b{static colorizeElement(r,u,f,c){c=c||{};const d=c.theme||"vs",s=c.mimeType||f.getAttribute("lang")||f.getAttribute("data-lang");if(!s)return console.error("Mode not detected"),Promise.resolve();const l=u.getLanguageIdByMimeType(s)||s;r.setTheme(d);const o=f.firstChild?f.firstChild.nodeValue:"";f.className+=" "+d;const g=h=>{var m;const C=(m=v?.createHTML(h))!==null&&m!==void 0?m:h;f.innerHTML=C};return this.colorize(u,o||"",l,c).then(g,h=>console.error(h))}static async colorize(r,u,f,c){const d=r.languageIdCodec;let s=4;c&&typeof c.tabSize=="number"&&(s=c.tabSize),k.startsWithUTF8BOM(u)&&(u=u.substr(1));const l=k.splitLines(u);if(!r.isRegisteredLanguageId(f))return i(l,s,d);const o=await y.TokenizationRegistry.getOrCreate(f);return o?a(l,s,o,d):i(l,s,d)}static colorizeLine(r,u,f,c,d=4){const s=p.ViewLineRenderingData.isBasicASCII(r,u),l=p.ViewLineRenderingData.containsRTL(r,s,f);return(0,S.renderViewLine2)(new S.RenderLineInput(!1,!0,r,!1,s,l,0,c,[],d,0,0,0,0,-1,"none",!1,!1,null)).html}static colorizeModelLine(r,u,f=4){const c=r.getLineContent(u);r.tokenization.forceTokenization(u);const s=r.tokenization.getLineTokens(u).inflate();return this.colorizeLine(c,r.mightContainNonBasicASCII(),r.mightContainRTL(),s,f)}}e.Colorizer=b;function a(t,r,u,f){return new Promise((c,d)=>{const s=()=>{const l=n(t,r,u,f);if(u instanceof _.MonarchTokenizer){const o=u.getLoadStatus();if(o.loaded===!1){o.promise.then(s,d);return}}c(l)};s()})}function i(t,r,u){let f=[];const d=new Uint32Array(2);d[0]=0,d[1]=33587200;for(let s=0,l=t.length;s")}return f.join("")}function n(t,r,u,f){let c=[],d=u.getInitialState();for(let s=0,l=t.length;s"),d=g.endState}return c.join("")}}),define(se[15],oe([1,0,17,11,758,8,739]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.implies=e.IContextKeyService=e.RawContextKey=e.ContextKeyOrExpr=e.ContextKeyAndExpr=e.ContextKeyNotRegexExpr=e.ContextKeyRegexExpr=e.ContextKeySmallerEqualsExpr=e.ContextKeySmallerExpr=e.ContextKeyGreaterEqualsExpr=e.ContextKeyGreaterExpr=e.ContextKeyNotExpr=e.ContextKeyNotEqualsExpr=e.ContextKeyNotInExpr=e.ContextKeyInExpr=e.ContextKeyEqualsExpr=e.ContextKeyDefinedExpr=e.ContextKeyTrueExpr=e.ContextKeyFalseExpr=e.expressionsAreEqualWithConstantSubstitution=e.ContextKeyExpr=e.Parser=void 0;const p=new Map;p.set("false",!1),p.set("true",!0),p.set("isMac",L.isMacintosh),p.set("isLinux",L.isLinux),p.set("isWindows",L.isWindows),p.set("isWeb",L.isWeb),p.set("isMacNative",L.isMacintosh&&!L.isWeb),p.set("isEdge",L.isEdge),p.set("isFirefox",L.isFirefox),p.set("isChrome",L.isChrome),p.set("isSafari",L.isSafari);const _=Object.prototype.hasOwnProperty,v={regexParsingWithErrorRecovery:!0},b=(0,S.localize)(0,null),a=(0,S.localize)(1,null),i=(0,S.localize)(2,null),n=(0,S.localize)(3,null),t=(0,S.localize)(4,null),r=(0,S.localize)(5,null),u=(0,S.localize)(6,null),f=(0,S.localize)(7,null);class c{constructor($=v){this._config=$,this._scanner=new y.Scanner,this._tokens=[],this._current=0,this._parsingErrors=[],this._flagsGYRe=/g|y/g}parse($){if($===""){this._parsingErrors.push({message:b,offset:0,lexeme:"",additionalInfo:a});return}this._tokens=this._scanner.reset($).scan(),this._current=0,this._parsingErrors=[];try{const J=this._expr();if(!this._isAtEnd()){const Q=this._peek(),re=Q.type===17?r:void 0;throw this._parsingErrors.push({message:t,offset:Q.offset,lexeme:y.Scanner.getLexeme(Q),additionalInfo:re}),c._parseError}return J}catch(J){if(J!==c._parseError)throw J;return}}_expr(){return this._or()}_or(){const $=[this._and()];for(;this._matchOne(16);){const J=this._and();$.push(J)}return $.length===1?$[0]:d.or(...$)}_and(){const $=[this._term()];for(;this._matchOne(15);){const J=this._term();$.push(J)}return $.length===1?$[0]:d.and(...$)}_term(){if(this._matchOne(2)){const $=this._peek();switch($.type){case 11:return this._advance(),o.INSTANCE;case 12:return this._advance(),g.INSTANCE;case 0:{this._advance();const J=this._expr();return this._consume(1,n),J?.negate()}case 17:return this._advance(),I.create($.lexeme);default:throw this._errExpectedButGot("KEY | true | false | '(' expression ')'",$)}}return this._primary()}_primary(){const $=this._peek();switch($.type){case 11:return this._advance(),d.true();case 12:return this._advance(),d.false();case 0:{this._advance();const J=this._expr();return this._consume(1,n),J}case 17:{const J=$.lexeme;if(this._advance(),this._matchOne(9)){const re=this._peek();if(!this._config.regexParsingWithErrorRecovery){if(this._advance(),re.type!==10)throw this._errExpectedButGot("REGEX",re);const de=re.lexeme,he=de.lastIndexOf("/"),me=he===de.length-1?void 0:this._removeFlagsGY(de.substring(he+1));let X;try{X=new RegExp(de.substring(1,he),me)}catch{throw this._errExpectedButGot("REGEX",re)}return R.create(J,X)}switch(re.type){case 10:case 19:{const de=[re.lexeme];this._advance();let he=this._peek(),me=0;for(let H=0;H=0){const U=de.slice(me+1,X),G=de[X+1]==="i"?"i":"";try{he=new RegExp(U,G)}catch{throw this._errExpectedButGot("REGEX",re)}}}if(he===null)throw this._errExpectedButGot("REGEX",re);return R.create(J,he)}default:throw this._errExpectedButGot("REGEX",this._peek())}}if(this._matchOne(14)){this._consume(13,i);const re=this._value();return d.notIn(J,re)}switch(this._peek().type){case 3:{this._advance();const re=this._value();if(this._previous().type===18)return d.equals(J,re);switch(re){case"true":return d.has(J);case"false":return d.not(J);default:return d.equals(J,re)}}case 4:{this._advance();const re=this._value();if(this._previous().type===18)return d.notEquals(J,re);switch(re){case"true":return d.not(J);case"false":return d.has(J);default:return d.notEquals(J,re)}}case 5:return this._advance(),N.create(J,this._value());case 6:return this._advance(),M.create(J,this._value());case 7:return this._advance(),A.create(J,this._value());case 8:return this._advance(),P.create(J,this._value());case 13:return this._advance(),d.in(J,this._value());default:return d.has(J)}}case 20:throw this._parsingErrors.push({message:u,offset:$.offset,lexeme:"",additionalInfo:f}),c._parseError;default:throw this._errExpectedButGot(`true | false | KEY | KEY '=~' REGEX | KEY ('==' | '!=' | '<' | '<=' | '>' | '>=' | 'in' | 'not' 'in') value`,this._peek())}}_value(){const $=this._peek();switch($.type){case 17:case 18:return this._advance(),$.lexeme;case 11:return this._advance(),"true";case 12:return this._advance(),"false";case 13:return this._advance(),"in";default:return""}}_removeFlagsGY($){return $.replaceAll(this._flagsGYRe,"")}_previous(){return this._tokens[this._current-1]}_matchOne($){return this._check($)?(this._advance(),!0):!1}_advance(){return this._isAtEnd()||this._current++,this._previous()}_consume($,J){if(this._check($))return this._advance();throw this._errExpectedButGot(J,this._peek())}_errExpectedButGot($,J,Q){const re=(0,S.localize)(8,null,$,y.Scanner.getLexeme(J)),de=J.offset,he=y.Scanner.getLexeme(J);return this._parsingErrors.push({message:re,offset:de,lexeme:he,additionalInfo:Q}),c._parseError}_check($){return this._peek().type===$}_peek(){return this._tokens[this._current]}_isAtEnd(){return this._peek().type===20}}e.Parser=c,c._parseError=new Error;class d{static false(){return o.INSTANCE}static true(){return g.INSTANCE}static has($){return h.create($)}static equals($,J){return m.create($,J)}static notEquals($,J){return D.create($,J)}static regex($,J){return R.create($,J)}static in($,J){return C.create($,J)}static notIn($,J){return w.create($,J)}static not($){return I.create($)}static and(...$){return B.create($,null,!0)}static or(...$){return W.create($,null,!0)}static deserialize($){return $==null?void 0:this._parser.parse($)}}e.ContextKeyExpr=d,d._parser=new c({regexParsingWithErrorRecovery:!1});function s(ne,$){const J=ne?ne.substituteConstants():void 0,Q=$?$.substituteConstants():void 0;return!J&&!Q?!0:!J||!Q?!1:J.equals(Q)}e.expressionsAreEqualWithConstantSubstitution=s;function l(ne,$){return ne.cmp($)}class o{constructor(){this.type=0}cmp($){return this.type-$.type}equals($){return $.type===this.type}substituteConstants(){return this}evaluate($){return!1}serialize(){return"false"}keys(){return[]}negate(){return g.INSTANCE}}e.ContextKeyFalseExpr=o,o.INSTANCE=new o;class g{constructor(){this.type=1}cmp($){return this.type-$.type}equals($){return $.type===this.type}substituteConstants(){return this}evaluate($){return!0}serialize(){return"true"}keys(){return[]}negate(){return o.INSTANCE}}e.ContextKeyTrueExpr=g,g.INSTANCE=new g;class h{static create($,J=null){const Q=p.get($);return typeof Q=="boolean"?Q?g.INSTANCE:o.INSTANCE:new h($,J)}constructor($,J){this.key=$,this.negated=J,this.type=2}cmp($){return $.type!==this.type?this.type-$.type:K(this.key,$.key)}equals($){return $.type===this.type?this.key===$.key:!1}substituteConstants(){const $=p.get(this.key);return typeof $=="boolean"?$?g.INSTANCE:o.INSTANCE:this}evaluate($){return!!$.getValue(this.key)}serialize(){return this.key}keys(){return[this.key]}negate(){return this.negated||(this.negated=I.create(this.key,this)),this.negated}}e.ContextKeyDefinedExpr=h;class m{static create($,J,Q=null){if(typeof J=="boolean")return J?h.create($,Q):I.create($,Q);const re=p.get($);return typeof re=="boolean"?J===(re?"true":"false")?g.INSTANCE:o.INSTANCE:new m($,J,Q)}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=4}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){const $=p.get(this.key);if(typeof $=="boolean"){const J=$?"true":"false";return this.value===J?g.INSTANCE:o.INSTANCE}return this}evaluate($){return $.getValue(this.key)==this.value}serialize(){return`${this.key} == '${this.value}'`}keys(){return[this.key]}negate(){return this.negated||(this.negated=D.create(this.key,this.value,this)),this.negated}}e.ContextKeyEqualsExpr=m;class C{static create($,J){return new C($,J)}constructor($,J){this.key=$,this.valueKey=J,this.type=10,this.negated=null}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.valueKey,$.key,$.valueKey)}equals($){return $.type===this.type?this.key===$.key&&this.valueKey===$.valueKey:!1}substituteConstants(){return this}evaluate($){const J=$.getValue(this.valueKey),Q=$.getValue(this.key);return Array.isArray(J)?J.includes(Q):typeof Q=="string"&&typeof J=="object"&&J!==null?_.call(J,Q):!1}serialize(){return`${this.key} in '${this.valueKey}'`}keys(){return[this.key,this.valueKey]}negate(){return this.negated||(this.negated=w.create(this.key,this.valueKey)),this.negated}}e.ContextKeyInExpr=C;class w{static create($,J){return new w($,J)}constructor($,J){this.key=$,this.valueKey=J,this.type=11,this._negated=C.create($,J)}cmp($){return $.type!==this.type?this.type-$.type:this._negated.cmp($._negated)}equals($){return $.type===this.type?this._negated.equals($._negated):!1}substituteConstants(){return this}evaluate($){return!this._negated.evaluate($)}serialize(){return`${this.key} not in '${this.valueKey}'`}keys(){return this._negated.keys()}negate(){return this._negated}}e.ContextKeyNotInExpr=w;class D{static create($,J,Q=null){if(typeof J=="boolean")return J?I.create($,Q):h.create($,Q);const re=p.get($);return typeof re=="boolean"?J===(re?"true":"false")?o.INSTANCE:g.INSTANCE:new D($,J,Q)}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=5}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){const $=p.get(this.key);if(typeof $=="boolean"){const J=$?"true":"false";return this.value===J?o.INSTANCE:g.INSTANCE}return this}evaluate($){return $.getValue(this.key)!=this.value}serialize(){return`${this.key} != '${this.value}'`}keys(){return[this.key]}negate(){return this.negated||(this.negated=m.create(this.key,this.value,this)),this.negated}}e.ContextKeyNotEqualsExpr=D;class I{static create($,J=null){const Q=p.get($);return typeof Q=="boolean"?Q?o.INSTANCE:g.INSTANCE:new I($,J)}constructor($,J){this.key=$,this.negated=J,this.type=3}cmp($){return $.type!==this.type?this.type-$.type:K(this.key,$.key)}equals($){return $.type===this.type?this.key===$.key:!1}substituteConstants(){const $=p.get(this.key);return typeof $=="boolean"?$?o.INSTANCE:g.INSTANCE:this}evaluate($){return!$.getValue(this.key)}serialize(){return`!${this.key}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=h.create(this.key,this)),this.negated}}e.ContextKeyNotExpr=I;function T(ne,$){if(typeof ne=="string"){const J=parseFloat(ne);isNaN(J)||(ne=J)}return typeof ne=="string"||typeof ne=="number"?$(ne):o.INSTANCE}class A{static create($,J,Q=null){return T(J,re=>new A($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=12}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value=="string"?!1:parseFloat($.getValue(this.key))>this.value}serialize(){return`${this.key} > ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=M.create(this.key,this.value,this)),this.negated}}e.ContextKeyGreaterExpr=A;class P{static create($,J,Q=null){return T(J,re=>new P($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=13}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value=="string"?!1:parseFloat($.getValue(this.key))>=this.value}serialize(){return`${this.key} >= ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=N.create(this.key,this.value,this)),this.negated}}e.ContextKeyGreaterEqualsExpr=P;class N{static create($,J,Q=null){return T(J,re=>new N($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=14}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value=="string"?!1:parseFloat($.getValue(this.key))new M($,re,Q))}constructor($,J,Q){this.key=$,this.value=J,this.negated=Q,this.type=15}cmp($){return $.type!==this.type?this.type-$.type:F(this.key,this.value,$.key,$.value)}equals($){return $.type===this.type?this.key===$.key&&this.value===$.value:!1}substituteConstants(){return this}evaluate($){return typeof this.value=="string"?!1:parseFloat($.getValue(this.key))<=this.value}serialize(){return`${this.key} <= ${this.value}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=A.create(this.key,this.value,this)),this.negated}}e.ContextKeySmallerEqualsExpr=M;class R{static create($,J){return new R($,J)}constructor($,J){this.key=$,this.regexp=J,this.type=7,this.negated=null}cmp($){if($.type!==this.type)return this.type-$.type;if(this.key<$.key)return-1;if(this.key>$.key)return 1;const J=this.regexp?this.regexp.source:"",Q=$.regexp?$.regexp.source:"";return JQ?1:0}equals($){if($.type===this.type){const J=this.regexp?this.regexp.source:"",Q=$.regexp?$.regexp.source:"";return this.key===$.key&&J===Q}return!1}substituteConstants(){return this}evaluate($){const J=$.getValue(this.key);return this.regexp?this.regexp.test(J):!1}serialize(){const $=this.regexp?`/${this.regexp.source}/${this.regexp.flags}`:"/invalid/";return`${this.key} =~ ${$}`}keys(){return[this.key]}negate(){return this.negated||(this.negated=x.create(this)),this.negated}}e.ContextKeyRegexExpr=R;class x{static create($){return new x($)}constructor($){this._actual=$,this.type=8}cmp($){return $.type!==this.type?this.type-$.type:this._actual.cmp($._actual)}equals($){return $.type===this.type?this._actual.equals($._actual):!1}substituteConstants(){return this}evaluate($){return!this._actual.evaluate($)}serialize(){return`!(${this._actual.serialize()})`}keys(){return this._actual.keys()}negate(){return this._actual}}e.ContextKeyNotRegexExpr=x;function O(ne){let $=null;for(let J=0,Q=ne.length;J$.expr.length)return 1;for(let J=0,Q=this.expr.length;J1;){const he=re[re.length-1];if(he.type!==9)break;re.pop();const me=re.pop(),X=re.length===0,U=W.create(he.expr.map(G=>B.create([G,me],null,Q)),null,X);U&&(re.push(U),re.sort(l))}if(re.length===1)return re[0];if(Q){for(let he=0;he$.serialize()).join(" && ")}keys(){const $=[];for(const J of this.expr)$.push(...J.keys());return $}negate(){if(!this.negated){const $=[];for(const J of this.expr)$.push(J.negate());this.negated=W.create($,this,!0)}return this.negated}}e.ContextKeyAndExpr=B;class W{static create($,J,Q){return W._normalizeArr($,J,Q)}constructor($,J){this.expr=$,this.negated=J,this.type=9}cmp($){if($.type!==this.type)return this.type-$.type;if(this.expr.length<$.expr.length)return-1;if(this.expr.length>$.expr.length)return 1;for(let J=0,Q=this.expr.length;J$.serialize()).join(" || ")}keys(){const $=[];for(const J of this.expr)$.push(...J.keys());return $}negate(){if(!this.negated){const $=[];for(const J of this.expr)$.push(J.negate());for(;$.length>1;){const J=$.shift(),Q=$.shift(),re=[];for(const de of ae(J))for(const he of ae(Q))re.push(B.create([de,he],null,!1));$.unshift(W.create(re,null,!1))}this.negated=W.create($,this,!0)}return this.negated}}e.ContextKeyOrExpr=W;class V extends h{static all(){return V._info.values()}constructor($,J,Q){super($,null),this._defaultValue=J,typeof Q=="object"?V._info.push({...Q,key:$}):Q!==!0&&V._info.push({key:$,description:Q,type:J!=null?typeof J:void 0})}bindTo($){return $.createKey(this.key,this._defaultValue)}getValue($){return $.getContextKeyValue(this.key)}toNegated(){return this.negate()}isEqualTo($){return m.create(this.key,$)}}e.RawContextKey=V,V._info=[],e.IContextKeyService=(0,E.createDecorator)("contextKeyService");function K(ne,$){return ne<$?-1:ne>$?1:0}function F(ne,$,J,Q){return neJ?1:$Q?1:0}function q(ne,$){if(ne.type===0||$.type===1)return!0;if(ne.type===9)return $.type===9?ie(ne.expr,$.expr):!1;if($.type===9){for(const J of $.expr)if(q(ne,J))return!0;return!1}if(ne.type===6){if($.type===6)return ie($.expr,ne.expr);for(const J of ne.expr)if(q(J,$))return!0;return!1}return ne.equals($)}e.implies=q;function ie(ne,$){let J=0,Q=0;for(;J{const n=this.model.read(i),t=n?.state.read(i),r=!!t?.inlineCompletion&&t?.ghostText!==void 0&&!t?.ghostText.isEmpty();this.inlineCompletionVisible.set(r),t?.ghostText&&t?.inlineCompletion&&this.suppressSuggestions.set(t.inlineCompletion.inlineCompletion.source.inlineCompletions.suppressSuggestions)})),this._register((0,L.autorun)(i=>{const n=this.model.read(i);let t=!1,r=!0;const u=n?.ghostText.read(i);if(n?.selectedSuggestItem&&u&&u.parts.length>0){const{column:f,lines:c}=u.parts[0],d=c[0],s=n.textModel.getLineIndentColumn(u.lineNumber);if(f<=s){let o=(0,k.firstNonWhitespaceIndex)(d);o===-1&&(o=d.length-1),t=o>0;const g=n.textModel.getOptions().tabSize;r=y.CursorColumns.visibleColumnFromColumn(d,o+1,g){const[r,u,f]=t;(0,y.assertType)(E.URI.isUri(r)),(0,y.assertType)(S.Position.isIPosition(u)),(0,y.assertType)(typeof f=="string"||!f);const c=n.get(_.ILanguageFeaturesService),d=await n.get(v.ITextModelService).createModelReference(r);try{const s=await i(c.signatureHelpProvider,d.object.textEditorModel,S.Position.lift(u),{triggerKind:p.SignatureHelpTriggerKind.Invoke,isRetrigger:!1,triggerCharacter:f},L.CancellationToken.None);return s?(setTimeout(()=>s.dispose(),0),s.value):void 0}finally{d.dispose()}})}),define(se[768],oe([1,0,14,12,6,2,128,31,241]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ParameterHintsModel=void 0;var v;(function(i){i.Default={type:0};class n{constructor(u,f){this.request=u,this.previouslyActiveHints=f,this.type=2}}i.Pending=n;class t{constructor(u){this.hints=u,this.type=1}}i.Active=t})(v||(v={}));class b extends E.Disposable{constructor(n,t,r=b.DEFAULT_DELAY){super(),this._onChangedHints=this._register(new y.Emitter),this.onChangedHints=this._onChangedHints.event,this.triggerOnType=!1,this._state=v.Default,this._pendingTriggers=[],this._lastSignatureHelpResult=this._register(new E.MutableDisposable),this.triggerChars=new S.CharacterSet,this.retriggerChars=new S.CharacterSet,this.triggerId=0,this.editor=n,this.providers=t,this.throttledDelayer=new L.Delayer(r),this._register(this.editor.onDidBlurEditorWidget(()=>this.cancel())),this._register(this.editor.onDidChangeConfiguration(()=>this.onEditorConfigurationChange())),this._register(this.editor.onDidChangeModel(u=>this.onModelChanged())),this._register(this.editor.onDidChangeModelLanguage(u=>this.onModelChanged())),this._register(this.editor.onDidChangeCursorSelection(u=>this.onCursorChange(u))),this._register(this.editor.onDidChangeModelContent(u=>this.onModelContentChange())),this._register(this.providers.onDidChange(this.onModelChanged,this)),this._register(this.editor.onDidType(u=>this.onDidType(u))),this.onEditorConfigurationChange(),this.onModelChanged()}get state(){return this._state}set state(n){this._state.type===2&&this._state.request.cancel(),this._state=n}cancel(n=!1){this.state=v.Default,this.throttledDelayer.cancel(),n||this._onChangedHints.fire(void 0)}trigger(n,t){const r=this.editor.getModel();if(!r||!this.providers.has(r))return;const u=++this.triggerId;this._pendingTriggers.push(n),this.throttledDelayer.trigger(()=>this.doTrigger(u),t).catch(k.onUnexpectedError)}next(){if(this.state.type!==1)return;const n=this.state.hints.signatures.length,t=this.state.hints.activeSignature,r=t%n===n-1,u=this.editor.getOption(85).cycle;if((n<2||r)&&!u){this.cancel();return}this.updateActiveSignature(r&&u?0:t+1)}previous(){if(this.state.type!==1)return;const n=this.state.hints.signatures.length,t=this.state.hints.activeSignature,r=t===0,u=this.editor.getOption(85).cycle;if((n<2||r)&&!u){this.cancel();return}this.updateActiveSignature(r&&u?n-1:t-1)}updateActiveSignature(n){this.state.type===1&&(this.state=new v.Active({...this.state.hints,activeSignature:n}),this._onChangedHints.fire(this.state.hints))}async doTrigger(n){const t=this.state.type===1||this.state.type===2,r=this.getLastActiveHints();if(this.cancel(!0),this._pendingTriggers.length===0)return!1;const u=this._pendingTriggers.reduce(a);this._pendingTriggers=[];const f={triggerKind:u.triggerKind,triggerCharacter:u.triggerCharacter,isRetrigger:t,activeSignatureHelp:r};if(!this.editor.hasModel())return!1;const c=this.editor.getModel(),d=this.editor.getPosition();this.state=new v.Pending((0,L.createCancelablePromise)(s=>(0,_.provideSignatureHelp)(this.providers,c,d,f,s)),r);try{const s=await this.state.request;return n!==this.triggerId?(s?.dispose(),!1):!s||!s.value.signatures||s.value.signatures.length===0?(s?.dispose(),this._lastSignatureHelpResult.clear(),this.cancel(),!1):(this.state=new v.Active(s.value),this._lastSignatureHelpResult.value=s,this._onChangedHints.fire(this.state.hints),!0)}catch(s){return n===this.triggerId&&(this.state=v.Default),(0,k.onUnexpectedError)(s),!1}}getLastActiveHints(){switch(this.state.type){case 1:return this.state.hints;case 2:return this.state.previouslyActiveHints;default:return}}get isTriggered(){return this.state.type===1||this.state.type===2||this.throttledDelayer.isTriggered()}onModelChanged(){this.cancel(),this.triggerChars.clear(),this.retriggerChars.clear();const n=this.editor.getModel();if(n)for(const t of this.providers.ordered(n)){for(const r of t.signatureHelpTriggerCharacters||[])if(r.length){const u=r.charCodeAt(0);this.triggerChars.add(u),this.retriggerChars.add(u)}for(const r of t.signatureHelpRetriggerCharacters||[])r.length&&this.retriggerChars.add(r.charCodeAt(0))}}onDidType(n){if(!this.triggerOnType)return;const t=n.length-1,r=n.charCodeAt(t);(this.triggerChars.has(r)||this.isTriggered&&this.retriggerChars.has(r))&&this.trigger({triggerKind:p.SignatureHelpTriggerKind.TriggerCharacter,triggerCharacter:n.charAt(t)})}onCursorChange(n){n.source==="mouse"?this.cancel():this.isTriggered&&this.trigger({triggerKind:p.SignatureHelpTriggerKind.ContentChange})}onModelContentChange(){this.isTriggered&&this.trigger({triggerKind:p.SignatureHelpTriggerKind.ContentChange})}onEditorConfigurationChange(){this.triggerOnType=this.editor.getOption(85).enabled,this.triggerOnType||this.cancel()}dispose(){this.cancel(!0),super.dispose()}}e.ParameterHintsModel=b,b.DEFAULT_DELAY=120;function a(i,n){switch(n.triggerKind){case p.SignatureHelpTriggerKind.Invoke:return n;case p.SignatureHelpTriggerKind.ContentChange:return i;case p.SignatureHelpTriggerKind.TriggerCharacter:default:return n}}}),define(se[769],oe([1,0,15]),function(te,e,L){"use strict";var k;Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestAlternatives=void 0;let y=k=class{constructor(S,p){this._editor=S,this._index=0,this._ckOtherSuggestions=k.OtherSuggestions.bindTo(p)}dispose(){this.reset()}reset(){var S;this._ckOtherSuggestions.reset(),(S=this._listener)===null||S===void 0||S.dispose(),this._model=void 0,this._acceptNext=void 0,this._ignore=!1}set({model:S,index:p},_){if(S.items.length===0){this.reset();return}if(k._moveIndex(!0,S,p)===p){this.reset();return}this._acceptNext=_,this._model=S,this._index=p,this._listener=this._editor.onDidChangeCursorPosition(()=>{this._ignore||this.reset()}),this._ckOtherSuggestions.set(!0)}static _moveIndex(S,p,_){let v=_;for(let b=p.items.length;b>0&&(v=(v+p.items.length+(S?1:-1))%p.items.length,!(v===_||!p.items[v].completion.additionalTextEdits));b--);return v}next(){this._move(!0)}prev(){this._move(!1)}_move(S){if(this._model)try{this._ignore=!0,this._index=k._moveIndex(S,this._model,this._index),this._acceptNext({index:this._index,item:this._model.items[this._index],model:this._model})}finally{this._ignore=!1}}};e.SuggestAlternatives=y,y.OtherSuggestions=new L.RawContextKey("hasOtherSuggestions",!1),e.SuggestAlternatives=y=k=ke([ge(1,L.IContextKeyService)],y)}),define(se[770],oe([1,0,15]),function(te,e,L){"use strict";var k;Object.defineProperty(e,"__esModule",{value:!0}),e.WordContextKey=void 0;let y=k=class{constructor(S,p){this._editor=S,this._enabled=!1,this._ckAtEnd=k.AtEnd.bindTo(p),this._configListener=this._editor.onDidChangeConfiguration(_=>_.hasChanged(122)&&this._update()),this._update()}dispose(){var S;this._configListener.dispose(),(S=this._selectionListener)===null||S===void 0||S.dispose(),this._ckAtEnd.reset()}_update(){const S=this._editor.getOption(122)==="on";if(this._enabled!==S)if(this._enabled=S,this._enabled){const p=()=>{if(!this._editor.hasModel()){this._ckAtEnd.set(!1);return}const _=this._editor.getModel(),v=this._editor.getSelection(),b=_.getWordAtPosition(v.getStartPosition());if(!b){this._ckAtEnd.set(!1);return}this._ckAtEnd.set(b.endColumn===v.getStartPosition().column)};this._selectionListener=this._editor.onDidChangeCursorSelection(p),p()}else this._selectionListener&&(this._ckAtEnd.reset(),this._selectionListener.dispose(),this._selectionListener=void 0)}};e.WordContextKey=y,y.AtEnd=new L.RawContextKey("atEndOfWord",!1),e.WordContextKey=y=k=ke([ge(1,L.IContextKeyService)],y)}),define(se[69],oe([1,0,15,8]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CONTEXT_ACCESSIBILITY_MODE_ENABLED=e.IAccessibilityService=void 0,e.IAccessibilityService=(0,k.createDecorator)("accessibilityService"),e.CONTEXT_ACCESSIBILITY_MODE_ENABLED=new L.RawContextKey("accessibilityModeEnabled",!1)}),define(se[771],oe([1,0,54,13,6,2,55,17,328,335,492,202,36,149,235,69]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ComputedEditorOptions=e.EditorConfiguration=void 0;let u=class extends E.Disposable{constructor(h,m,C,w){super(),this._accessibilityService=w,this._onDidChange=this._register(new y.Emitter),this.onDidChange=this._onDidChange.event,this._onDidChangeFast=this._register(new y.Emitter),this.onDidChangeFast=this._onDidChangeFast.event,this._isDominatedByLongLines=!1,this._viewLineCount=1,this._lineNumbersDigitCount=1,this._reservedHeight=0,this._glyphMarginDecorationLaneCount=1,this._computeOptionsMemory=new i.ComputeOptionsMemory,this.isSimpleWidget=h,this._containerObserver=this._register(new _.ElementSizeObserver(C,m.dimension)),this._rawOptions=o(m),this._validatedOptions=l.validateOptions(this._rawOptions),this.options=this._computeOptions(),this.options.get(13)&&this._containerObserver.startObserving(),this._register(n.EditorZoom.onDidChangeZoomLevel(()=>this._recomputeOptions())),this._register(a.TabFocus.onDidChangeTabFocus(()=>this._recomputeOptions())),this._register(this._containerObserver.onDidChange(()=>this._recomputeOptions())),this._register(v.FontMeasurements.onDidChange(()=>this._recomputeOptions())),this._register(L.PixelRatio.onDidChange(()=>this._recomputeOptions())),this._register(this._accessibilityService.onDidChangeScreenReaderOptimized(()=>this._recomputeOptions()))}_recomputeOptions(){const h=this._computeOptions(),m=l.checkEquals(this.options,h);m!==null&&(this.options=h,this._onDidChangeFast.fire(m),this._onDidChange.fire(m))}_computeOptions(){const h=this._readEnvConfiguration(),m=t.BareFontInfo.createFromValidatedSettings(this._validatedOptions,h.pixelRatio,this.isSimpleWidget),C=this._readFontInfo(m),w={memory:this._computeOptionsMemory,outerWidth:h.outerWidth,outerHeight:h.outerHeight-this._reservedHeight,fontInfo:C,extraEditorClassName:h.extraEditorClassName,isDominatedByLongLines:this._isDominatedByLongLines,viewLineCount:this._viewLineCount,lineNumbersDigitCount:this._lineNumbersDigitCount,emptySelectionClipboard:h.emptySelectionClipboard,pixelRatio:h.pixelRatio,tabFocusMode:a.TabFocus.getTabFocusMode(),accessibilitySupport:h.accessibilitySupport,glyphMarginDecorationLaneCount:this._glyphMarginDecorationLaneCount};return l.computeOptions(this._validatedOptions,w)}_readEnvConfiguration(){return{extraEditorClassName:c(),outerWidth:this._containerObserver.getWidth(),outerHeight:this._containerObserver.getHeight(),emptySelectionClipboard:L.isWebKit||L.isFirefox,pixelRatio:L.PixelRatio.value,accessibilitySupport:this._accessibilityService.isScreenReaderOptimized()?2:this._accessibilityService.getAccessibilitySupport()}}_readFontInfo(h){return v.FontMeasurements.readFontInfo(h)}getRawOptions(){return this._rawOptions}updateOptions(h){const m=o(h);l.applyUpdate(this._rawOptions,m)&&(this._validatedOptions=l.validateOptions(this._rawOptions),this._recomputeOptions())}observeContainer(h){this._containerObserver.observe(h)}setIsDominatedByLongLines(h){this._isDominatedByLongLines!==h&&(this._isDominatedByLongLines=h,this._recomputeOptions())}setModelLineCount(h){const m=f(h);this._lineNumbersDigitCount!==m&&(this._lineNumbersDigitCount=m,this._recomputeOptions())}setViewLineCount(h){this._viewLineCount!==h&&(this._viewLineCount=h,this._recomputeOptions())}setReservedHeight(h){this._reservedHeight!==h&&(this._reservedHeight=h,this._recomputeOptions())}setGlyphMarginDecorationLaneCount(h){this._glyphMarginDecorationLaneCount!==h&&(this._glyphMarginDecorationLaneCount=h,this._recomputeOptions())}};e.EditorConfiguration=u,e.EditorConfiguration=u=ke([ge(3,r.IAccessibilityService)],u);function f(g){let h=0;for(;g;)g=Math.floor(g/10),h++;return h||1}function c(){let g="";return!L.isSafari&&!L.isWebkitWebView&&(g+="no-user-select "),L.isSafari&&(g+="no-minimap-shadow ",g+="enable-user-select "),p.isMacintosh&&(g+="mac "),g}class d{constructor(){this._values=[]}_read(h){return this._values[h]}get(h){return this._values[h]}_write(h,m){this._values[h]=m}}class s{constructor(){this._values=[]}_read(h){if(h>=this._values.length)throw new Error("Cannot read uninitialized value");return this._values[h]}get(h){return this._read(h)}_write(h,m){this._values[h]=m}}e.ComputedEditorOptions=s;class l{static validateOptions(h){const m=new d;for(const C of i.editorOptionsRegistry){const w=C.name==="_never_"?void 0:h[C.name];m._write(C.id,C.validate(w))}return m}static computeOptions(h,m){const C=new s;for(const w of i.editorOptionsRegistry)C._write(w.id,w.compute(m,C,h._read(w.id)));return C}static _deepEquals(h,m){if(typeof h!="object"||typeof m!="object"||!h||!m)return h===m;if(Array.isArray(h)||Array.isArray(m))return Array.isArray(h)&&Array.isArray(m)?k.equals(h,m):!1;if(Object.keys(h).length!==Object.keys(m).length)return!1;for(const C in h)if(!l._deepEquals(h[C],m[C]))return!1;return!0}static checkEquals(h,m){const C=[];let w=!1;for(const D of i.editorOptionsRegistry){const I=!l._deepEquals(h._read(D.id),m._read(D.id));C[D.id]=I,I&&(w=!0)}return w?new i.ConfigurationChangedEvent(C):null}static applyUpdate(h,m){let C=!1;for(const w of i.editorOptionsRegistry)if(m.hasOwnProperty(w.name)){const D=w.applyUpdate(h[w.name],m[w.name]);h[w.name]=D.newValue,C=C||D.didChange}return C}}function o(g){const h=S.deepClone(g);return(0,b.migrateOptions)(h),h}}),define(se[772],oe([1,0,6,52,2,55,199,22,738,25,27,15]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setContext=e.ContextKeyService=e.AbstractContextKeyService=e.Context=void 0;const i="data-keybinding-context";class n{constructor(D,I){this._id=D,this._parent=I,this._value=Object.create(null),this._value._contextId=D}get value(){return{...this._value}}setValue(D,I){return this._value[D]!==I?(this._value[D]=I,!0):!1}removeValue(D){return D in this._value?(delete this._value[D],!0):!1}getValue(D){const I=this._value[D];return typeof I>"u"&&this._parent?this._parent.getValue(D):I}}e.Context=n;class t extends n{constructor(){super(-1,null)}setValue(D,I){return!1}removeValue(D){return!1}getValue(D){}}t.INSTANCE=new t;class r extends n{constructor(D,I,T){super(D,null),this._configurationService=I,this._values=S.TernarySearchTree.forConfigKeys(),this._listener=this._configurationService.onDidChangeConfiguration(A=>{if(A.source===7){const P=Array.from(this._values,([N])=>N);this._values.clear(),T.fire(new c(P))}else{const P=[];for(const N of A.affectedKeys){const M=`config.${N}`,R=this._values.findSuperstr(M);R!==void 0&&(P.push(...k.Iterable.map(R,([x])=>x)),this._values.deleteSuperstr(M)),this._values.has(M)&&(P.push(M),this._values.delete(M))}T.fire(new c(P))}})}dispose(){this._listener.dispose()}getValue(D){if(D.indexOf(r._keyPrefix)!==0)return super.getValue(D);if(this._values.has(D))return this._values.get(D);const I=D.substr(r._keyPrefix.length),T=this._configurationService.getValue(I);let A;switch(typeof T){case"number":case"boolean":case"string":A=T;break;default:Array.isArray(T)?A=JSON.stringify(T):A=T}return this._values.set(D,A),A}setValue(D,I){return super.setValue(D,I)}removeValue(D){return super.removeValue(D)}}r._keyPrefix="config.";class u{constructor(D,I,T){this._service=D,this._key=I,this._defaultValue=T,this.reset()}set(D){this._service.setContext(this._key,D)}reset(){typeof this._defaultValue>"u"?this._service.removeContext(this._key):this._service.setContext(this._key,this._defaultValue)}get(){return this._service.getContextKeyValue(this._key)}}class f{constructor(D){this.key=D}affectsSome(D){return D.has(this.key)}allKeysContainedIn(D){return this.affectsSome(D)}}class c{constructor(D){this.keys=D}affectsSome(D){for(const I of this.keys)if(D.has(I))return!0;return!1}allKeysContainedIn(D){return this.keys.every(I=>D.has(I))}}class d{constructor(D){this.events=D}affectsSome(D){for(const I of this.events)if(I.affectsSome(D))return!0;return!1}allKeysContainedIn(D){return this.events.every(I=>I.allKeysContainedIn(D))}}function s(w,D){return w.allKeysContainedIn(new Set(Object.keys(D)))}class l extends y.Disposable{constructor(D){super(),this._onDidChangeContext=this._register(new L.PauseableEmitter({merge:I=>new d(I)})),this.onDidChangeContext=this._onDidChangeContext.event,this._isDisposed=!1,this._myContextId=D}createKey(D,I){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new u(this,D,I)}bufferChangeEvents(D){this._onDidChangeContext.pause();try{D()}finally{this._onDidChangeContext.resume()}}createScoped(D){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");return new g(this,D)}contextMatchesRules(D){if(this._isDisposed)throw new Error("AbstractContextKeyService has been disposed");const I=this.getContextValuesContainer(this._myContextId);return D?D.evaluate(I):!0}getContextKeyValue(D){if(!this._isDisposed)return this.getContextValuesContainer(this._myContextId).getValue(D)}setContext(D,I){if(this._isDisposed)return;const T=this.getContextValuesContainer(this._myContextId);T&&T.setValue(D,I)&&this._onDidChangeContext.fire(new f(D))}removeContext(D){this._isDisposed||this.getContextValuesContainer(this._myContextId).removeValue(D)&&this._onDidChangeContext.fire(new f(D))}getContext(D){return this._isDisposed?t.INSTANCE:this.getContextValuesContainer(h(D))}dispose(){super.dispose(),this._isDisposed=!0}}e.AbstractContextKeyService=l;let o=class extends l{constructor(D){super(0),this._contexts=new Map,this._lastContextId=0;const I=this._register(new r(this._myContextId,D,this._onDidChangeContext));this._contexts.set(this._myContextId,I)}getContextValuesContainer(D){return this._isDisposed?t.INSTANCE:this._contexts.get(D)||t.INSTANCE}createChildContext(D=this._myContextId){if(this._isDisposed)throw new Error("ContextKeyService has been disposed");const I=++this._lastContextId;return this._contexts.set(I,new n(I,this.getContextValuesContainer(D))),I}disposeContext(D){this._isDisposed||this._contexts.delete(D)}};e.ContextKeyService=o,e.ContextKeyService=o=ke([ge(0,b.IConfigurationService)],o);class g extends l{constructor(D,I){if(super(D.createChildContext()),this._parentChangeListener=this._register(new y.MutableDisposable),this._parent=D,this._updateParentChangeListener(),this._domNode=I,this._domNode.hasAttribute(i)){let T="";this._domNode.classList&&(T=Array.from(this._domNode.classList.values()).join(", ")),console.error(`Element already has context attribute${T?": "+T:""}`)}this._domNode.setAttribute(i,String(this._myContextId))}_updateParentChangeListener(){this._parentChangeListener.value=this._parent.onDidChangeContext(D=>{const T=this._parent.getContextValuesContainer(this._myContextId).value;s(D,T)||this._onDidChangeContext.fire(D)})}dispose(){this._isDisposed||(this._parent.disposeContext(this._myContextId),this._domNode.removeAttribute(i),super.dispose())}getContextValuesContainer(D){return this._isDisposed?t.INSTANCE:this._parent.getContextValuesContainer(D)}createChildContext(D=this._myContextId){if(this._isDisposed)throw new Error("ScopedContextKeyService has been disposed");return this._parent.createChildContext(D)}disposeContext(D){this._isDisposed||this._parent.disposeContext(D)}}function h(w){for(;w;){if(w.hasAttribute(i)){const D=w.getAttribute(i);return D?parseInt(D,10):NaN}w=w.parentElement}return 0}function m(w,D,I){w.get(a.IContextKeyService).createKey(String(D),C(I))}e.setContext=m;function C(w){return(0,E.cloneAndChange)(w,D=>{if(typeof D=="object"&&D.$mid===1)return p.URI.revive(D).toString();if(D instanceof p.URI)return D.toString()})}v.CommandsRegistry.registerCommand("_setContext",m),v.CommandsRegistry.registerCommand({id:"getContextKeyInfo",handler(){return[...a.RawContextKey.all()].sort((w,D)=>w.key.localeCompare(D.key))},metadata:{description:(0,_.localize)(0,null),args:[]}}),v.CommandsRegistry.registerCommand("_generateContextKeyInfo",function(){const w=[],D=new Set;for(const I of a.RawContextKey.all())D.has(I.key)||(D.add(I.key),w.push(I));w.sort((I,T)=>I.key.localeCompare(T.key)),console.log(JSON.stringify(w,void 0,2))})}),define(se[242],oe([1,0,17,740,15]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InputFocusedContext=e.InputFocusedContextKey=e.ProductQualityContext=e.IsDevelopmentContext=e.IsMobileContext=e.IsIOSContext=e.IsMacNativeContext=e.IsWebContext=e.IsWindowsContext=e.IsLinuxContext=e.IsMacContext=void 0,e.IsMacContext=new y.RawContextKey("isMac",L.isMacintosh,(0,k.localize)(0,null)),e.IsLinuxContext=new y.RawContextKey("isLinux",L.isLinux,(0,k.localize)(1,null)),e.IsWindowsContext=new y.RawContextKey("isWindows",L.isWindows,(0,k.localize)(2,null)),e.IsWebContext=new y.RawContextKey("isWeb",L.isWeb,(0,k.localize)(3,null)),e.IsMacNativeContext=new y.RawContextKey("isMacNative",L.isMacintosh&&!L.isWeb,(0,k.localize)(4,null)),e.IsIOSContext=new y.RawContextKey("isIOS",L.isIOS,(0,k.localize)(5,null)),e.IsMobileContext=new y.RawContextKey("isMobile",L.isMobile,(0,k.localize)(6,null)),e.IsDevelopmentContext=new y.RawContextKey("isDevelopment",!1,!0),e.ProductQualityContext=new y.RawContextKey("productQualityType","",(0,k.localize)(7,null)),e.InputFocusedContextKey="inputFocus",e.InputFocusedContext=new y.RawContextKey(e.InputFocusedContextKey,!1,(0,k.localize)(8,null))}),define(se[59],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IContextMenuService=e.IContextViewService=void 0,e.IContextViewService=(0,L.createDecorator)("contextViewService"),e.IContextMenuService=(0,L.createDecorator)("contextMenuService")}),define(se[162],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IDialogService=void 0,e.IDialogService=(0,L.createDecorator)("dialogService")}),define(se[243],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IEnvironmentService=void 0,e.IEnvironmentService=(0,L.createDecorator)("environmentService")}),define(se[244],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IHoverService=void 0,e.IHoverService=(0,L.createDecorator)("hoverService")}),define(se[163],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ServiceCollection=void 0;class L{constructor(...y){this._entries=new Map;for(const[E,S]of y)this.set(E,S)}set(y,E){const S=this._entries.get(y);return this._entries.set(y,E),S}get(y){return this._entries.get(y)}}e.ServiceCollection=L}),define(se[773],oe([1,0,14,12,2,236,762,8,163,66]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Trace=e.InstantiationService=void 0;const b=!1;class a extends Error{constructor(r){var u;super("cyclic dependency between services"),this.message=(u=r.findCycleSlow())!==null&&u!==void 0?u:`UNABLE to detect cycle, dumping graph: ${r.toString()}`}}class i{constructor(r=new _.ServiceCollection,u=!1,f,c=b){var d;this._services=r,this._strict=u,this._parent=f,this._enableTracing=c,this._activeInstantiations=new Set,this._services.set(p.IInstantiationService,this),this._globalGraph=c?(d=f?._globalGraph)!==null&&d!==void 0?d:new S.Graph(s=>s):void 0}createChild(r){return new i(r,this._strict,this,this._enableTracing)}invokeFunction(r,...u){const f=n.traceInvocation(this._enableTracing,r);let c=!1;try{return r({get:s=>{if(c)throw(0,k.illegalState)("service accessor is only valid during the invocation of its target method");const l=this._getOrCreateServiceInstance(s,f);if(!l)throw new Error(`[invokeFunction] unknown service '${s}'`);return l}},...u)}finally{c=!0,f.stop()}}createInstance(r,...u){let f,c;return r instanceof E.SyncDescriptor?(f=n.traceCreation(this._enableTracing,r.ctor),c=this._createInstance(r.ctor,r.staticArguments.concat(u),f)):(f=n.traceCreation(this._enableTracing,r),c=this._createInstance(r,u,f)),f.stop(),c}_createInstance(r,u=[],f){const c=p._util.getServiceDependencies(r).sort((l,o)=>l.index-o.index),d=[];for(const l of c){const o=this._getOrCreateServiceInstance(l.id,f);o||this._throwIfStrict(`[createInstance] ${r.name} depends on UNKNOWN service ${l.id}.`,!1),d.push(o)}const s=c.length>0?c[0].index:u.length;if(u.length!==s){console.trace(`[createInstance] First service dependency of ${r.name} at position ${s+1} conflicts with ${u.length} static arguments`);const l=s-u.length;l>0?u=u.concat(new Array(l)):u=u.slice(0,s)}return Reflect.construct(r,u.concat(d))}_setServiceInstance(r,u){if(this._services.get(r)instanceof E.SyncDescriptor)this._services.set(r,u);else if(this._parent)this._parent._setServiceInstance(r,u);else throw new Error("illegalState - setting UNKNOWN service instance")}_getServiceInstanceOrDescriptor(r){const u=this._services.get(r);return!u&&this._parent?this._parent._getServiceInstanceOrDescriptor(r):u}_getOrCreateServiceInstance(r,u){this._globalGraph&&this._globalGraphImplicitDependency&&this._globalGraph.insertEdge(this._globalGraphImplicitDependency,String(r));const f=this._getServiceInstanceOrDescriptor(r);return f instanceof E.SyncDescriptor?this._safeCreateAndCacheServiceInstance(r,f,u.branch(r,!0)):(u.branch(r,!1),f)}_safeCreateAndCacheServiceInstance(r,u,f){if(this._activeInstantiations.has(r))throw new Error(`illegal state - RECURSIVELY instantiating service '${r}'`);this._activeInstantiations.add(r);try{return this._createAndCacheServiceInstance(r,u,f)}finally{this._activeInstantiations.delete(r)}}_createAndCacheServiceInstance(r,u,f){var c;const d=new S.Graph(o=>o.id.toString());let s=0;const l=[{id:r,desc:u,_trace:f}];for(;l.length;){const o=l.pop();if(d.lookupOrInsertNode(o),s++>1e3)throw new a(d);for(const g of p._util.getServiceDependencies(o.desc.ctor)){const h=this._getServiceInstanceOrDescriptor(g.id);if(h||this._throwIfStrict(`[createInstance] ${r} depends on ${g.id} which is NOT registered.`,!0),(c=this._globalGraph)===null||c===void 0||c.insertEdge(String(o.id),String(g.id)),h instanceof E.SyncDescriptor){const m={id:g.id,desc:h,_trace:o._trace.branch(g.id,!0)};d.insertEdge(o,m),l.push(m)}}}for(;;){const o=d.roots();if(o.length===0){if(!d.isEmpty())throw new a(d);break}for(const{data:g}of o){if(this._getServiceInstanceOrDescriptor(g.id)instanceof E.SyncDescriptor){const m=this._createServiceInstanceWithOwner(g.id,g.desc.ctor,g.desc.staticArguments,g.desc.supportsDelayedInstantiation,g._trace);this._setServiceInstance(g.id,m)}d.removeNode(g)}}return this._getServiceInstanceOrDescriptor(r)}_createServiceInstanceWithOwner(r,u,f=[],c,d){if(this._services.get(r)instanceof E.SyncDescriptor)return this._createServiceInstance(r,u,f,c,d);if(this._parent)return this._parent._createServiceInstanceWithOwner(r,u,f,c,d);throw new Error(`illegalState - creating UNKNOWN service instance ${u.name}`)}_createServiceInstance(r,u,f=[],c,d){if(c){const s=new i(void 0,this._strict,this,this._enableTracing);s._globalGraphImplicitDependency=String(r);const l=new Map,o=new L.GlobalIdleValue(()=>{const g=s._createInstance(u,f,d);for(const[h,m]of l){const C=g[h];if(typeof C=="function")for(const w of m)w.disposable=C.apply(g,w.listener)}return l.clear(),g});return new Proxy(Object.create(null),{get(g,h){if(!o.isInitialized&&typeof h=="string"&&(h.startsWith("onDid")||h.startsWith("onWill"))){let w=l.get(h);return w||(w=new v.LinkedList,l.set(h,w)),(I,T,A)=>{if(o.isInitialized)return o.value[h](I,T,A);{const P={listener:[I,T,A],disposable:void 0},N=w.push(P);return(0,y.toDisposable)(()=>{var R;N(),(R=P.disposable)===null||R===void 0||R.dispose()})}}}if(h in g)return g[h];const m=o.value;let C=m[h];return typeof C!="function"||(C=C.bind(m),g[h]=C),C},set(g,h,m){return o.value[h]=m,!0},getPrototypeOf(g){return u.prototype}})}else return this._createInstance(u,f,d)}_throwIfStrict(r,u){if(u&&console.warn(r),this._strict)throw new Error(r)}}e.InstantiationService=i;class n{static traceInvocation(r,u){return r?new n(2,u.name||new Error().stack.split(` `).slice(3,4).join(` `)):n._None}static traceCreation(r,u){return r?new n(1,u.name):n._None}constructor(r,u){this.type=r,this.name=u,this._start=Date.now(),this._dep=[]}branch(r,u){const f=new n(3,r.toString());return this._dep.push([r,u,f]),f}stop(){const r=Date.now()-this._start;n._totals+=r;let u=!1;function f(d,s){const l=[],o=new Array(d+1).join(" ");for(const[g,h,m]of s._dep)if(h&&m){u=!0,l.push(`${o}CREATES -> ${g}`);const C=f(d+1,m);C&&l.push(C)}else l.push(`${o}uses -> ${g}`);return l.join(` `)}const c=[`${this.type===1?"CREATE":"CALL"} ${this.name}`,`${f(1,this)}`,`DONE, took ${r.toFixed(2)}ms (grand total ${n._totals.toFixed(2)}ms)`];(r>2||u)&&n.all.add(c.join(` `))}}e.Trace=n,n.all=new Set,n._None=new class extends n{constructor(){super(0,null)}stop(){}branch(){return this}},n._totals=0}),define(se[774],oe([1,0,12,218,125]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BaseResolvedKeybinding=void 0;class E extends y.ResolvedKeybinding{constructor(p,_){if(super(),_.length===0)throw(0,L.illegalArgument)("chords");this._os=p,this._chords=_}getLabel(){return k.UILabelProvider.toLabel(this._os,this._chords,p=>this._getLabel(p))}getAriaLabel(){return k.AriaLabelProvider.toLabel(this._os,this._chords,p=>this._getAriaLabel(p))}getElectronAccelerator(){return this._chords.length>1||this._chords[0].isDuplicateModifierCase()?null:k.ElectronAcceleratorLabelProvider.toLabel(this._os,this._chords,p=>this._getElectronAccelerator(p))}getUserSettingsLabel(){return k.UserSettingsLabelProvider.toLabel(this._os,this._chords,p=>this._getUserSettingsLabel(p))}hasMultipleChords(){return this._chords.length>1}getChords(){return this._chords.map(p=>this._getChord(p))}_getChord(p){return new y.ResolvedChord(p.ctrlKey,p.shiftKey,p.altKey,p.metaKey,this._getLabel(p),this._getAriaLabel(p))}getDispatchChords(){return this._chords.map(p=>this._getChordDispatch(p))}getSingleModifierDispatchChords(){return this._chords.map(p=>this._getSingleModifierChordDispatch(p))}}e.BaseResolvedKeybinding=E}),define(se[34],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IKeybindingService=void 0,e.IKeybindingService=(0,L.createDecorator)("keybindingService")}),define(se[346],oe([1,0,7,229,42,6,2,136,239,15,59,8,34,458]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.PostEditWidgetManager=void 0;let t=n=class extends S.Disposable{constructor(f,c,d,s,l,o,g,h,m,C){super(),this.typeId=f,this.editor=c,this.showCommand=s,this.range=l,this.edits=o,this.onSelectNewEdit=g,this._contextMenuService=h,this._keybindingService=C,this.allowEditorOverflow=!0,this.suppressMouseDown=!0,this.create(),this.visibleContext=d.bindTo(m),this.visibleContext.set(!0),this._register((0,S.toDisposable)(()=>this.visibleContext.reset())),this.editor.addContentWidget(this),this.editor.layoutContentWidget(this),this._register((0,S.toDisposable)(()=>this.editor.removeContentWidget(this))),this._register(this.editor.onDidChangeCursorPosition(w=>{l.containsPosition(w.position)||this.dispose()})),this._register(E.Event.runAndSubscribe(C.onDidUpdateKeybindings,()=>{this._updateButtonTitle()}))}_updateButtonTitle(){var f;const c=(f=this._keybindingService.lookupKeybinding(this.showCommand.id))===null||f===void 0?void 0:f.getLabel();this.button.element.title=this.showCommand.label+(c?` (${c})`:"")}create(){this.domNode=L.$(".post-edit-widget"),this.button=this._register(new k.Button(this.domNode,{supportIcons:!0})),this.button.label="$(insert)",this._register(L.addDisposableListener(this.domNode,L.EventType.CLICK,()=>this.showSelector()))}getId(){return n.baseId+"."+this.typeId}getDomNode(){return this.domNode}getPosition(){return{position:this.range.getEndPosition(),preference:[2]}}showSelector(){this._contextMenuService.showContextMenu({getAnchor:()=>{const f=L.getDomNodePagePosition(this.button.element);return{x:f.left+f.width,y:f.top+f.height}},getActions:()=>this.edits.allEdits.map((f,c)=>(0,y.toAction)({id:"",label:f.label,checked:c===this.edits.activeEditIndex,run:()=>{if(c!==this.edits.activeEditIndex)return this.onSelectNewEdit(c)}}))})}};t.baseId="editor.widget.postEditWidget",t=n=ke([ge(7,b.IContextMenuService),ge(8,v.IContextKeyService),ge(9,i.IKeybindingService)],t);let r=class extends S.Disposable{constructor(f,c,d,s,l,o){super(),this._id=f,this._editor=c,this._visibleContext=d,this._showCommand=s,this._instantiationService=l,this._bulkEditService=o,this._currentWidget=this._register(new S.MutableDisposable),this._register(E.Event.any(c.onDidChangeModel,c.onDidChangeModelContent)(()=>this.clear()))}async applyEditAndShowIfNeeded(f,c,d,s){const l=this._editor.getModel();if(!l||!f.length)return;const o=c.allEdits[c.activeEditIndex];if(!o)return;const g=(0,_.createCombinedWorkspaceEdit)(l.uri,f,o),h=f[0],m=l.deltaDecorations([],[{range:h,options:{description:"paste-line-suffix",stickiness:0}}]);let C,w;try{C=await this._bulkEditService.apply(g,{editor:this._editor,token:s}),w=l.getDecorationRange(m[0])}finally{l.deltaDecorations(m,[])}d&&C.isApplied&&c.allEdits.length>1&&this.show(w??h,c,async D=>{const I=this._editor.getModel();I&&(await I.undo(),this.applyEditAndShowIfNeeded(f,{activeEditIndex:D,allEdits:c.allEdits},d,s))})}show(f,c,d){this.clear(),this._editor.hasModel()&&(this._currentWidget.value=this._instantiationService.createInstance(t,this._id,this._editor,this._visibleContext,this._showCommand,f,c,d))}clear(){this._currentWidget.clear()}tryShowSelector(){var f;(f=this._currentWidget.value)===null||f===void 0||f.showSelector()}};e.PostEditWidgetManager=r,e.PostEditWidgetManager=r=ke([ge(4,a.IInstantiationService),ge(5,p.IBulkEditService)],r)}),define(se[347],oe([1,0,15]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.KeybindingResolver=e.NoMatchingKb=void 0,e.NoMatchingKb={kind:0};const k={kind:1};function y(_,v,b){return{kind:2,commandId:_,commandArgs:v,isBubble:b}}class E{constructor(v,b,a){var i;this._log=a,this._defaultKeybindings=v,this._defaultBoundCommands=new Map;for(const n of v){const t=n.command;t&&t.charAt(0)!=="-"&&this._defaultBoundCommands.set(t,!0)}this._map=new Map,this._lookupMap=new Map,this._keybindings=E.handleRemovals([].concat(v).concat(b));for(let n=0,t=this._keybindings.length;n"u"){this._map.set(v,[b]),this._addToLookupMap(b);return}for(let i=a.length-1;i>=0;i--){const n=a[i];if(n.command===b.command)continue;let t=!0;for(let r=1;r"u"?(b=[v],this._lookupMap.set(v.command,b)):b.push(v)}_removeFromLookupMap(v){if(!v.command)return;const b=this._lookupMap.get(v.command);if(!(typeof b>"u")){for(let a=0,i=b.length;a"u"||a.length===0)return null;if(a.length===1)return a[0];for(let i=a.length-1;i>=0;i--){const n=a[i];if(b.contextMatchesRules(n.when))return n}return a[a.length-1]}resolve(v,b,a){const i=[...b,a];this._log(`| Resolving ${i}`);const n=this._map.get(i[0]);if(n===void 0)return this._log("\\ No keybinding entries."),e.NoMatchingKb;let t=null;if(i.length<2)t=n;else{t=[];for(let u=0,f=n.length;uc.chords.length)continue;let d=!0;for(let s=1;s=0;a--){const i=b[a];if(E._contextMatchesRules(v,i.when))return i}return null}static _contextMatchesRules(v,b){return b?b.evaluate(v):!0}}e.KeybindingResolver=E;function S(_){return _?`${_.serialize()}`:"no when condition"}function p(_){return _.extensionId?_.isBuiltinExtension?`built-in extension ${_.extensionId}`:`user extension ${_.extensionId}`:_.isDefault?"built-in":"user"}}),define(se[775],oe([1,0,14,12,6,270,2,743,347]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractKeybindingService=void 0;const v=/^(cursor|delete|undo|redo|tab|editor\.action\.clipboard)/;class b extends S.Disposable{get onDidUpdateKeybindings(){return this._onDidUpdateKeybindings?this._onDidUpdateKeybindings.event:y.Event.None}get inChordMode(){return this._currentChords.length>0}constructor(n,t,r,u,f){super(),this._contextKeyService=n,this._commandService=t,this._telemetryService=r,this._notificationService=u,this._logService=f,this._onDidUpdateKeybindings=this._register(new y.Emitter),this._currentChords=[],this._currentChordChecker=new L.IntervalTimer,this._currentChordStatusMessage=null,this._ignoreSingleModifiers=a.EMPTY,this._currentSingleModifier=null,this._currentSingleModifierClearTimeout=new L.TimeoutTimer,this._currentlyDispatchingCommandId=null,this._logging=!1}dispose(){super.dispose()}_log(n){this._logging&&this._logService.info(`[KeybindingService]: ${n}`)}getKeybindings(){return this._getResolver().getKeybindings()}lookupKeybinding(n,t){const r=this._getResolver().lookupPrimaryKeybinding(n,t||this._contextKeyService);if(r)return r.resolvedKeybinding}dispatchEvent(n,t){return this._dispatch(n,t)}softDispatch(n,t){this._log("/ Soft dispatching keyboard event");const r=this.resolveKeyboardEvent(n);if(r.hasMultipleChords())return console.warn("keyboard event should not be mapped to multiple chords"),_.NoMatchingKb;const[u]=r.getDispatchChords();if(u===null)return this._log("\\ Keyboard event cannot be dispatched"),_.NoMatchingKb;const f=this._contextKeyService.getContext(t),c=this._currentChords.map(({keypress:d})=>d);return this._getResolver().resolve(f,c,u)}_scheduleLeaveChordMode(){const n=Date.now();this._currentChordChecker.cancelAndSet(()=>{if(!this._documentHasFocus()){this._leaveChordMode();return}Date.now()-n>5e3&&this._leaveChordMode()},500)}_expectAnotherChord(n,t){switch(this._currentChords.push({keypress:n,label:t}),this._currentChords.length){case 0:throw(0,k.illegalState)("impossible");case 1:this._currentChordStatusMessage=this._notificationService.status(p.localize(0,null,t));break;default:{const r=this._currentChords.map(({label:u})=>u).join(", ");this._currentChordStatusMessage=this._notificationService.status(p.localize(1,null,r))}}this._scheduleLeaveChordMode(),E.IME.enabled&&E.IME.disable()}_leaveChordMode(){this._currentChordStatusMessage&&(this._currentChordStatusMessage.dispose(),this._currentChordStatusMessage=null),this._currentChordChecker.cancel(),this._currentChords=[],E.IME.enable()}_dispatch(n,t){return this._doDispatch(this.resolveKeyboardEvent(n),t,!1)}_singleModifierDispatch(n,t){const r=this.resolveKeyboardEvent(n),[u]=r.getSingleModifierDispatchChords();if(u)return this._ignoreSingleModifiers.has(u)?(this._log(`+ Ignoring single modifier ${u} due to it being pressed together with other keys.`),this._ignoreSingleModifiers=a.EMPTY,this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1):(this._ignoreSingleModifiers=a.EMPTY,this._currentSingleModifier===null?(this._log(`+ Storing single modifier for possible chord ${u}.`),this._currentSingleModifier=u,this._currentSingleModifierClearTimeout.cancelAndSet(()=>{this._log("+ Clearing single modifier due to 300ms elapsed."),this._currentSingleModifier=null},300),!1):u===this._currentSingleModifier?(this._log(`/ Dispatching single modifier chord ${u} ${u}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,this._doDispatch(r,t,!0)):(this._log(`+ Clearing single modifier due to modifier mismatch: ${this._currentSingleModifier} ${u}`),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1));const[f]=r.getChords();return this._ignoreSingleModifiers=new a(f),this._currentSingleModifier!==null&&this._log("+ Clearing single modifier due to other key up."),this._currentSingleModifierClearTimeout.cancel(),this._currentSingleModifier=null,!1}_doDispatch(n,t,r=!1){var u;let f=!1;if(n.hasMultipleChords())return console.warn("Unexpected keyboard event mapped to multiple chords"),!1;let c=null,d=null;if(r){const[g]=n.getSingleModifierDispatchChords();c=g,d=g?[g]:[]}else[c]=n.getDispatchChords(),d=this._currentChords.map(({keypress:g})=>g);if(c===null)return this._log("\\ Keyboard event cannot be dispatched in keydown phase."),f;const s=this._contextKeyService.getContext(t),l=n.getLabel(),o=this._getResolver().resolve(s,d,c);switch(o.kind){case 0:{if(this._logService.trace("KeybindingService#dispatch",l,"[ No matching keybinding ]"),this.inChordMode){const g=this._currentChords.map(({label:h})=>h).join(", ");this._log(`+ Leaving multi-chord mode: Nothing bound to "${g}, ${l}".`),this._notificationService.status(p.localize(2,null,g,l),{hideAfter:10*1e3}),this._leaveChordMode(),f=!0}return f}case 1:return this._logService.trace("KeybindingService#dispatch",l,"[ Several keybindings match - more chords needed ]"),f=!0,this._expectAnotherChord(c,l),this._log(this._currentChords.length===1?"+ Entering multi-chord mode...":"+ Continuing multi-chord mode..."),f;case 2:{if(this._logService.trace("KeybindingService#dispatch",l,`[ Will dispatch command ${o.commandId} ]`),o.commandId===null||o.commandId===""){if(this.inChordMode){const g=this._currentChords.map(({label:h})=>h).join(", ");this._log(`+ Leaving chord mode: Nothing bound to "${g}, ${l}".`),this._notificationService.status(p.localize(3,null,g,l),{hideAfter:10*1e3}),this._leaveChordMode(),f=!0}}else{this.inChordMode&&this._leaveChordMode(),o.isBubble||(f=!0),this._log(`+ Invoking command ${o.commandId}.`),this._currentlyDispatchingCommandId=o.commandId;try{typeof o.commandArgs>"u"?this._commandService.executeCommand(o.commandId).then(void 0,g=>this._notificationService.warn(g)):this._commandService.executeCommand(o.commandId,o.commandArgs).then(void 0,g=>this._notificationService.warn(g))}finally{this._currentlyDispatchingCommandId=null}v.test(o.commandId)||this._telemetryService.publicLog2("workbenchActionExecuted",{id:o.commandId,from:"keybinding",detail:(u=n.getUserSettingsLabel())!==null&&u!==void 0?u:void 0})}return f}}}mightProducePrintableCharacter(n){return n.ctrlKey||n.metaKey?!1:n.keyCode>=31&&n.keyCode<=56||n.keyCode>=21&&n.keyCode<=30}}e.AbstractKeybindingService=b;class a{constructor(n){this._ctrlKey=n?n.ctrlKey:!1,this._shiftKey=n?n.shiftKey:!1,this._altKey=n?n.altKey:!1,this._metaKey=n?n.metaKey:!1}has(n){switch(n){case"ctrl":return this._ctrlKey;case"shift":return this._shiftKey;case"alt":return this._altKey;case"meta":return this._metaKey}}}a.EMPTY=new a(null)}),define(se[348],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.toEmptyArrayIfContainsNull=e.ResolvedKeybindingItem=void 0;class L{constructor(E,S,p,_,v,b,a){this._resolvedKeybindingItemBrand=void 0,this.resolvedKeybinding=E,this.chords=E?k(E.getDispatchChords()):[],E&&this.chords.length===0&&(this.chords=k(E.getSingleModifierDispatchChords())),this.bubble=S?S.charCodeAt(0)===94:!1,this.command=this.bubble?S.substr(1):S,this.commandArgs=p,this.when=_,this.isDefault=v,this.extensionId=b,this.isBuiltinExtension=a}}e.ResolvedKeybindingItem=L;function k(y){const E=[];for(let S=0,p=y.length;Sthis._toKeyCodeChord(a)));return b.length>0?[new S(b,v)]:[]}}e.USLayoutResolvedKeybinding=S}),define(se[164],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ILabelService=void 0,e.ILabelService=(0,L.createDecorator)("labelService")}),define(se[123],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ILayoutService=void 0,e.ILayoutService=(0,L.createDecorator)("layoutService")}),define(se[349],oe([1,0,7,44,13,6,33,45,123]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorScopedLayoutService=void 0;let v=class{get mainContainer(){var i,n;return(n=(i=(0,y.firstOrDefault)(this._codeEditorService.listCodeEditors()))===null||i===void 0?void 0:i.getContainerDomNode())!==null&&n!==void 0?n:k.mainWindow.document.body}get activeContainer(){var i,n;const t=(i=this._codeEditorService.getFocusedCodeEditor())!==null&&i!==void 0?i:this._codeEditorService.getActiveCodeEditor();return(n=t?.getContainerDomNode())!==null&&n!==void 0?n:this.mainContainer}get mainContainerDimension(){return L.getClientArea(this.mainContainer)}get activeContainerDimension(){return L.getClientArea(this.activeContainer)}get containers(){return(0,y.coalesce)(this._codeEditorService.listCodeEditors().map(i=>i.getContainerDomNode()))}getContainer(){return this.activeContainer}focus(){var i;(i=this._codeEditorService.getFocusedCodeEditor())===null||i===void 0||i.focus()}constructor(i){this._codeEditorService=i,this.onDidLayoutMainContainer=E.Event.None,this.onDidLayoutActiveContainer=E.Event.None,this.onDidLayoutContainer=E.Event.None,this.onDidChangeActiveContainer=E.Event.None,this.onDidAddContainer=E.Event.None,this.whenActiveContainerStylesLoaded=Promise.resolve(),this.mainContainerOffset={top:0,quickPickTop:0},this.activeContainerOffset={top:0,quickPickTop:0}}};v=ke([ge(0,S.ICodeEditorService)],v);let b=class extends v{get mainContainer(){return this._container}constructor(i,n){super(n),this._container=i}};e.EditorScopedLayoutService=b,e.EditorScopedLayoutService=b=ke([ge(1,S.ICodeEditorService)],b),(0,p.registerSingleton)(_.ILayoutService,v,1)}),define(se[777],oe([1,0,7,44,6,2,69,27,15,123]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessibilityService=void 0;let b=class extends E.Disposable{constructor(i,n,t){super(),this._contextKeyService=i,this._layoutService=n,this._configurationService=t,this._accessibilitySupport=0,this._onDidChangeScreenReaderOptimized=new y.Emitter,this._onDidChangeReducedMotion=new y.Emitter,this._accessibilityModeEnabledContext=S.CONTEXT_ACCESSIBILITY_MODE_ENABLED.bindTo(this._contextKeyService);const r=()=>this._accessibilityModeEnabledContext.set(this.isScreenReaderOptimized());this._register(this._configurationService.onDidChangeConfiguration(f=>{f.affectsConfiguration("editor.accessibilitySupport")&&(r(),this._onDidChangeScreenReaderOptimized.fire()),f.affectsConfiguration("workbench.reduceMotion")&&(this._configMotionReduced=this._configurationService.getValue("workbench.reduceMotion"),this._onDidChangeReducedMotion.fire())})),r(),this._register(this.onDidChangeScreenReaderOptimized(()=>r()));const u=k.mainWindow.matchMedia("(prefers-reduced-motion: reduce)");this._systemMotionReduced=u.matches,this._configMotionReduced=this._configurationService.getValue("workbench.reduceMotion"),this.initReducedMotionListeners(u)}initReducedMotionListeners(i){this._register((0,L.addDisposableListener)(i,"change",()=>{this._systemMotionReduced=i.matches,this._configMotionReduced==="auto"&&this._onDidChangeReducedMotion.fire()}));const n=()=>{const t=this.isMotionReduced();this._layoutService.mainContainer.classList.toggle("reduce-motion",t),this._layoutService.mainContainer.classList.toggle("enable-motion",!t)};n(),this._register(this.onDidChangeReducedMotion(()=>n()))}get onDidChangeScreenReaderOptimized(){return this._onDidChangeScreenReaderOptimized.event}isScreenReaderOptimized(){const i=this._configurationService.getValue("editor.accessibilitySupport");return i==="on"||i==="auto"&&this._accessibilitySupport===2}get onDidChangeReducedMotion(){return this._onDidChangeReducedMotion.event}isMotionReduced(){const i=this._configMotionReduced;return i==="on"||i==="auto"&&this._systemMotionReduced}getAccessibilitySupport(){return this._accessibilitySupport}};e.AccessibilityService=b,e.AccessibilityService=b=ke([ge(0,_.IContextKeyService),ge(1,v.ILayoutService),ge(2,p.IConfigurationService)],b)}),define(se[778],oe([1,0,318,2,123,7]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextViewService=void 0;let S=class extends k.Disposable{constructor(_){super(),this.layoutService=_,this.currentViewDisposable=k.Disposable.None,this.contextView=this._register(new L.ContextView(this.layoutService.mainContainer,1)),this.layout(),this._register(_.onDidLayoutContainer(()=>this.layout()))}showContextView(_,v,b){let a;v?v===this.layoutService.getContainer((0,E.getWindow)(v))?a=1:b?a=3:a=2:a=1,this.contextView.setContainer(v??this.layoutService.activeContainer,a),this.contextView.show(_);const i=(0,k.toDisposable)(()=>{this.currentViewDisposable===i&&this.hideContextView()});return this.currentViewDisposable=i,i}getContextViewElement(){return this.contextView.getViewElement()}layout(){this.contextView.layout()}hideContextView(_){this.contextView.hide(_)}dispose(){super.dispose(),this.currentViewDisposable.dispose(),this.currentViewDisposable=k.Disposable.None}};e.ContextViewService=S,e.ContextViewService=S=ke([ge(0,y.ILayoutService)],S)}),define(se[64],oe([1,0,6,2,15,8]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CONTEXT_LOG_LEVEL=e.LogLevelToString=e.MultiplexLogger=e.ConsoleLogger=e.AbstractLogger=e.DEFAULT_LOG_LEVEL=e.LogLevel=e.ILogService=void 0,e.ILogService=(0,E.createDecorator)("logService");var S;(function(a){a[a.Off=0]="Off",a[a.Trace=1]="Trace",a[a.Debug=2]="Debug",a[a.Info=3]="Info",a[a.Warning=4]="Warning",a[a.Error=5]="Error"})(S||(e.LogLevel=S={})),e.DEFAULT_LOG_LEVEL=S.Info;class p extends k.Disposable{constructor(){super(...arguments),this.level=e.DEFAULT_LOG_LEVEL,this._onDidChangeLogLevel=this._register(new L.Emitter),this.onDidChangeLogLevel=this._onDidChangeLogLevel.event}setLevel(i){this.level!==i&&(this.level=i,this._onDidChangeLogLevel.fire(this.level))}getLevel(){return this.level}checkLogLevel(i){return this.level!==S.Off&&this.level<=i}}e.AbstractLogger=p;class _ extends p{constructor(i=e.DEFAULT_LOG_LEVEL,n=!0){super(),this.useColors=n,this.setLevel(i)}trace(i,...n){this.checkLogLevel(S.Trace)&&(this.useColors?console.log("%cTRACE","color: #888",i,...n):console.log(i,...n))}debug(i,...n){this.checkLogLevel(S.Debug)&&(this.useColors?console.log("%cDEBUG","background: #eee; color: #888",i,...n):console.log(i,...n))}info(i,...n){this.checkLogLevel(S.Info)&&(this.useColors?console.log("%c INFO","color: #33f",i,...n):console.log(i,...n))}warn(i,...n){this.checkLogLevel(S.Warning)&&(this.useColors?console.log("%c WARN","color: #993",i,...n):console.log(i,...n))}error(i,...n){this.checkLogLevel(S.Error)&&(this.useColors?console.log("%c ERR","color: #f33",i,...n):console.error(i,...n))}}e.ConsoleLogger=_;class v extends p{constructor(i){super(),this.loggers=i,i.length&&this.setLevel(i[0].getLevel())}setLevel(i){for(const n of this.loggers)n.setLevel(i);super.setLevel(i)}trace(i,...n){for(const t of this.loggers)t.trace(i,...n)}debug(i,...n){for(const t of this.loggers)t.debug(i,...n)}info(i,...n){for(const t of this.loggers)t.info(i,...n)}warn(i,...n){for(const t of this.loggers)t.warn(i,...n)}error(i,...n){for(const t of this.loggers)t.error(i,...n)}dispose(){for(const i of this.loggers)i.dispose();super.dispose()}}e.MultiplexLogger=v;function b(a){switch(a){case S.Trace:return"trace";case S.Debug:return"debug";case S.Info:return"info";case S.Warning:return"warn";case S.Error:return"error";case S.Off:return"off"}}e.LogLevelToString=b,e.CONTEXT_LOG_LEVEL=new y.RawContextKey("logLevel",b(S.Info))}),define(se[190],oe([1,0,54,7,84,46,266,14,6,2,109,11,280,24,69,64]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TextAreaWrapper=e.ClipboardEventUtils=e.TextAreaInput=e.InMemoryClipboardMetadataManager=e.CopyOptions=e.TextAreaSyntethicEvents=void 0;var u;(function(l){l.Tap="-monaco-textarea-synthetic-tap"})(u||(e.TextAreaSyntethicEvents=u={})),e.CopyOptions={forceCopyWithSyntaxHighlighting:!1};class f{constructor(){this._lastState=null}set(o,g){this._lastState={lastCopiedValue:o,data:g}}get(o){return this._lastState&&this._lastState.lastCopiedValue===o?this._lastState.data:(this._lastState=null,null)}}e.InMemoryClipboardMetadataManager=f,f.INSTANCE=new f;class c{constructor(){this._lastTypeTextLength=0}handleCompositionUpdate(o){o=o||"";const g={text:o,replacePrevCharCnt:this._lastTypeTextLength,replaceNextCharCnt:0,positionDelta:0};return this._lastTypeTextLength=o.length,g}}let d=class extends v.Disposable{get textAreaState(){return this._textAreaState}constructor(o,g,h,m,C,w){super(),this._host=o,this._textArea=g,this._OS=h,this._browser=m,this._accessibilityService=C,this._logService=w,this._onFocus=this._register(new _.Emitter),this.onFocus=this._onFocus.event,this._onBlur=this._register(new _.Emitter),this.onBlur=this._onBlur.event,this._onKeyDown=this._register(new _.Emitter),this.onKeyDown=this._onKeyDown.event,this._onKeyUp=this._register(new _.Emitter),this.onKeyUp=this._onKeyUp.event,this._onCut=this._register(new _.Emitter),this.onCut=this._onCut.event,this._onPaste=this._register(new _.Emitter),this.onPaste=this._onPaste.event,this._onType=this._register(new _.Emitter),this.onType=this._onType.event,this._onCompositionStart=this._register(new _.Emitter),this.onCompositionStart=this._onCompositionStart.event,this._onCompositionUpdate=this._register(new _.Emitter),this.onCompositionUpdate=this._onCompositionUpdate.event,this._onCompositionEnd=this._register(new _.Emitter),this.onCompositionEnd=this._onCompositionEnd.event,this._onSelectionChangeRequest=this._register(new _.Emitter),this.onSelectionChangeRequest=this._onSelectionChangeRequest.event,this._asyncFocusGainWriteScreenReaderContent=this._register(new v.MutableDisposable),this._asyncTriggerCut=this._register(new p.RunOnceScheduler(()=>this._onCut.fire(),0)),this._textAreaState=i.TextAreaState.EMPTY,this._selectionChangeListener=null,this._accessibilityService.isScreenReaderOptimized()&&this.writeNativeTextAreaContent("ctor"),this._register(_.Event.runAndSubscribe(this._accessibilityService.onDidChangeScreenReaderOptimized,()=>{this._accessibilityService.isScreenReaderOptimized()&&!this._asyncFocusGainWriteScreenReaderContent.value?this._asyncFocusGainWriteScreenReaderContent.value=this._register(new p.RunOnceScheduler(()=>this.writeNativeTextAreaContent("asyncFocusGain"),0)):this._asyncFocusGainWriteScreenReaderContent.clear()})),this._hasFocus=!1,this._currentComposition=null;let D=null;this._register(this._textArea.onKeyDown(I=>{const T=new E.StandardKeyboardEvent(I);(T.keyCode===114||this._currentComposition&&T.keyCode===1)&&T.stopPropagation(),T.equals(9)&&T.preventDefault(),D=T,this._onKeyDown.fire(T)})),this._register(this._textArea.onKeyUp(I=>{const T=new E.StandardKeyboardEvent(I);this._onKeyUp.fire(T)})),this._register(this._textArea.onCompositionStart(I=>{i._debugComposition&&console.log("[compositionstart]",I);const T=new c;if(this._currentComposition){this._currentComposition=T;return}if(this._currentComposition=T,this._OS===2&&D&&D.equals(114)&&this._textAreaState.selectionStart===this._textAreaState.selectionEnd&&this._textAreaState.selectionStart>0&&this._textAreaState.value.substr(this._textAreaState.selectionStart-1,1)===I.data&&(D.code==="ArrowRight"||D.code==="ArrowLeft")){i._debugComposition&&console.log("[compositionstart] Handling long press case on macOS + arrow key",I),T.handleCompositionUpdate("x"),this._onCompositionStart.fire({data:I.data});return}if(this._browser.isAndroid){this._onCompositionStart.fire({data:I.data});return}this._onCompositionStart.fire({data:I.data})})),this._register(this._textArea.onCompositionUpdate(I=>{i._debugComposition&&console.log("[compositionupdate]",I);const T=this._currentComposition;if(!T)return;if(this._browser.isAndroid){const P=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),N=i.TextAreaState.deduceAndroidCompositionInput(this._textAreaState,P);this._textAreaState=P,this._onType.fire(N),this._onCompositionUpdate.fire(I);return}const A=T.handleCompositionUpdate(I.data);this._textAreaState=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),this._onType.fire(A),this._onCompositionUpdate.fire(I)})),this._register(this._textArea.onCompositionEnd(I=>{i._debugComposition&&console.log("[compositionend]",I);const T=this._currentComposition;if(!T)return;if(this._currentComposition=null,this._browser.isAndroid){const P=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),N=i.TextAreaState.deduceAndroidCompositionInput(this._textAreaState,P);this._textAreaState=P,this._onType.fire(N),this._onCompositionEnd.fire();return}const A=T.handleCompositionUpdate(I.data);this._textAreaState=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),this._onType.fire(A),this._onCompositionEnd.fire()})),this._register(this._textArea.onInput(I=>{if(i._debugComposition&&console.log("[input]",I),this._textArea.setIgnoreSelectionChangeTime("received input event"),this._currentComposition)return;const T=i.TextAreaState.readFromTextArea(this._textArea,this._textAreaState),A=i.TextAreaState.deduceInput(this._textAreaState,T,this._OS===2);A.replacePrevCharCnt===0&&A.text.length===1&&(a.isHighSurrogate(A.text.charCodeAt(0))||A.text.charCodeAt(0)===127)||(this._textAreaState=T,(A.text!==""||A.replacePrevCharCnt!==0||A.replaceNextCharCnt!==0||A.positionDelta!==0)&&this._onType.fire(A))})),this._register(this._textArea.onCut(I=>{this._textArea.setIgnoreSelectionChangeTime("received cut event"),this._ensureClipboardGetsEditorSelection(I),this._asyncTriggerCut.schedule()})),this._register(this._textArea.onCopy(I=>{this._ensureClipboardGetsEditorSelection(I)})),this._register(this._textArea.onPaste(I=>{if(this._textArea.setIgnoreSelectionChangeTime("received paste event"),I.preventDefault(),!I.clipboardData)return;let[T,A]=e.ClipboardEventUtils.getTextData(I.clipboardData);T&&(A=A||f.INSTANCE.get(T),this._onPaste.fire({text:T,metadata:A}))})),this._register(this._textArea.onFocus(()=>{const I=this._hasFocus;this._setHasFocus(!0),this._accessibilityService.isScreenReaderOptimized()&&this._browser.isSafari&&!I&&this._hasFocus&&(this._asyncFocusGainWriteScreenReaderContent.value||(this._asyncFocusGainWriteScreenReaderContent.value=new p.RunOnceScheduler(()=>this.writeNativeTextAreaContent("asyncFocusGain"),0)),this._asyncFocusGainWriteScreenReaderContent.value.schedule())})),this._register(this._textArea.onBlur(()=>{this._currentComposition&&(this._currentComposition=null,this.writeNativeTextAreaContent("blurWithoutCompositionEnd"),this._onCompositionEnd.fire()),this._setHasFocus(!1)})),this._register(this._textArea.onSyntheticTap(()=>{this._browser.isAndroid&&this._currentComposition&&(this._currentComposition=null,this.writeNativeTextAreaContent("tapWithoutCompositionEnd"),this._onCompositionEnd.fire())}))}_installSelectionChangeListener(){let o=0;return k.addDisposableListener(this._textArea.ownerDocument,"selectionchange",g=>{if(S.inputLatency.onSelectionChange(),!this._hasFocus||this._currentComposition||!this._browser.isChrome)return;const h=Date.now(),m=h-o;if(o=h,m<5)return;const C=h-this._textArea.getIgnoreSelectionChangeTime();if(this._textArea.resetSelectionChangeTime(),C<100||!this._textAreaState.selection)return;const w=this._textArea.getValue();if(this._textAreaState.value!==w)return;const D=this._textArea.getSelectionStart(),I=this._textArea.getSelectionEnd();if(this._textAreaState.selectionStart===D&&this._textAreaState.selectionEnd===I)return;const T=this._textAreaState.deduceEditorPosition(D),A=this._host.deduceModelPosition(T[0],T[1],T[2]),P=this._textAreaState.deduceEditorPosition(I),N=this._host.deduceModelPosition(P[0],P[1],P[2]),M=new n.Selection(A.lineNumber,A.column,N.lineNumber,N.column);this._onSelectionChangeRequest.fire(M)})}dispose(){super.dispose(),this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null)}focusTextArea(){this._setHasFocus(!0),this.refreshFocusState()}isFocused(){return this._hasFocus}refreshFocusState(){this._setHasFocus(this._textArea.hasFocus())}_setHasFocus(o){this._hasFocus!==o&&(this._hasFocus=o,this._selectionChangeListener&&(this._selectionChangeListener.dispose(),this._selectionChangeListener=null),this._hasFocus&&(this._selectionChangeListener=this._installSelectionChangeListener()),this._hasFocus&&this.writeNativeTextAreaContent("focusgain"),this._hasFocus?this._onFocus.fire():this._onBlur.fire())}_setAndWriteTextAreaState(o,g){this._hasFocus||(g=g.collapseSelection()),g.writeToTextArea(o,this._textArea,this._hasFocus),this._textAreaState=g}writeNativeTextAreaContent(o){!this._accessibilityService.isScreenReaderOptimized()&&o==="render"||this._currentComposition||(this._logService.trace(`writeTextAreaState(reason: ${o})`),this._setAndWriteTextAreaState(o,this._host.getScreenReaderContent()))}_ensureClipboardGetsEditorSelection(o){const g=this._host.getDataToCopy(),h={version:1,isFromEmptySelection:g.isFromEmptySelection,multicursorText:g.multicursorText,mode:g.mode};f.INSTANCE.set(this._browser.isFirefox?g.text.replace(/\r\n/g,` `):g.text,h),o.preventDefault(),o.clipboardData&&e.ClipboardEventUtils.setTextData(o.clipboardData,g.text,g.html,h)}};e.TextAreaInput=d,e.TextAreaInput=d=ke([ge(4,t.IAccessibilityService),ge(5,r.ILogService)],d),e.ClipboardEventUtils={getTextData(l){const o=l.getData(b.Mimes.text);let g=null;const h=l.getData("vscode-editor-data");if(typeof h=="string")try{g=JSON.parse(h),g.version!==1&&(g=null)}catch{}return o.length===0&&g===null&&l.files.length>0?[Array.prototype.slice.call(l.files,0).map(C=>C.name).join(` `),null]:[o,g]},setTextData(l,o,g,h){l.setData(b.Mimes.text,o),typeof g=="string"&&l.setData("text/html",g),l.setData("vscode-editor-data",JSON.stringify(h))}};class s extends v.Disposable{get ownerDocument(){return this._actual.ownerDocument}constructor(o){super(),this._actual=o,this.onKeyDown=this._register(new y.DomEmitter(this._actual,"keydown")).event,this.onKeyUp=this._register(new y.DomEmitter(this._actual,"keyup")).event,this.onCompositionStart=this._register(new y.DomEmitter(this._actual,"compositionstart")).event,this.onCompositionUpdate=this._register(new y.DomEmitter(this._actual,"compositionupdate")).event,this.onCompositionEnd=this._register(new y.DomEmitter(this._actual,"compositionend")).event,this.onBeforeInput=this._register(new y.DomEmitter(this._actual,"beforeinput")).event,this.onInput=this._register(new y.DomEmitter(this._actual,"input")).event,this.onCut=this._register(new y.DomEmitter(this._actual,"cut")).event,this.onCopy=this._register(new y.DomEmitter(this._actual,"copy")).event,this.onPaste=this._register(new y.DomEmitter(this._actual,"paste")).event,this.onFocus=this._register(new y.DomEmitter(this._actual,"focus")).event,this.onBlur=this._register(new y.DomEmitter(this._actual,"blur")).event,this._onSyntheticTap=this._register(new _.Emitter),this.onSyntheticTap=this._onSyntheticTap.event,this._ignoreSelectionChangeTime=0,this._register(this.onKeyDown(()=>S.inputLatency.onKeyDown())),this._register(this.onBeforeInput(()=>S.inputLatency.onBeforeInput())),this._register(this.onInput(()=>S.inputLatency.onInput())),this._register(this.onKeyUp(()=>S.inputLatency.onKeyUp())),this._register(k.addDisposableListener(this._actual,u.Tap,()=>this._onSyntheticTap.fire()))}hasFocus(){const o=k.getShadowRoot(this._actual);return o?o.activeElement===this._actual:this._actual.isConnected?k.getActiveElement()===this._actual:!1}setIgnoreSelectionChangeTime(o){this._ignoreSelectionChangeTime=Date.now()}getIgnoreSelectionChangeTime(){return this._ignoreSelectionChangeTime}resetSelectionChangeTime(){this._ignoreSelectionChangeTime=0}getValue(){return this._actual.value}setValue(o,g){const h=this._actual;h.value!==g&&(this.setIgnoreSelectionChangeTime("setValue"),h.value=g)}getSelectionStart(){return this._actual.selectionDirection==="backward"?this._actual.selectionEnd:this._actual.selectionStart}getSelectionEnd(){return this._actual.selectionDirection==="backward"?this._actual.selectionStart:this._actual.selectionEnd}setSelectionRange(o,g,h){const m=this._actual;let C=null;const w=k.getShadowRoot(m);w?C=w.activeElement:C=k.getActiveElement();const D=k.getWindow(C),I=C===m,T=m.selectionStart,A=m.selectionEnd;if(I&&T===g&&A===h){L.isFirefox&&D.parent!==D&&m.focus();return}if(I){this.setIgnoreSelectionChangeTime("setSelectionRange"),m.setSelectionRange(g,h),L.isFirefox&&D.parent!==D&&m.focus();return}try{const P=k.saveParentsScrollTop(m);this.setIgnoreSelectionChangeTime("setSelectionRange"),m.focus(),m.setSelectionRange(g,h),k.restoreParentsScrollTop(m,P)}catch{}}}e.TextAreaWrapper=s}),define(se[79],oe([1,0,111,53,145,243,45,8,64,47]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LanguageFeatureDebounceService=e.ILanguageFeatureDebounceService=void 0,e.ILanguageFeatureDebounceService=(0,p.createDecorator)("ILanguageFeatureDebounceService");var b;(function(t){const r=new WeakMap;let u=0;function f(c){let d=r.get(c);return d===void 0&&(d=++u,r.set(c,d)),d}t.of=f})(b||(b={}));class a{constructor(r){this._default=r}get(r){return this._default}update(r,u){return this._default}default(){return this._default}}class i{constructor(r,u,f,c,d,s){this._logService=r,this._name=u,this._registry=f,this._default=c,this._min=d,this._max=s,this._cache=new k.LRUCache(50,.7)}_key(r){return r.id+this._registry.all(r).reduce((u,f)=>(0,L.doHash)(b.of(f),u),0)}get(r){const u=this._key(r),f=this._cache.get(u);return f?(0,y.clamp)(f.value,this._min,this._max):this.default()}update(r,u){const f=this._key(r);let c=this._cache.get(f);c||(c=new y.SlidingWindowAverage(6),this._cache.set(f,c));const d=(0,y.clamp)(c.update(u),this._min,this._max);return(0,v.matchesScheme)(r.uri,"output")||this._logService.trace(`[DEBOUNCE: ${this._name}] for ${r.uri.toString()} is ${d}ms`),d}_overall(){const r=new y.MovingAverage;for(const[,u]of this._cache)r.update(u.value);return r.value}default(){const r=this._overall()|0||this._default;return(0,y.clamp)(r,this._min,this._max)}}let n=class{constructor(r,u){this._logService=r,this._data=new Map,this._isDev=u.isExtensionDevelopment||!u.isBuilt}for(r,u,f){var c,d,s;const l=(c=f?.min)!==null&&c!==void 0?c:50,o=(d=f?.max)!==null&&d!==void 0?d:l**2,g=(s=f?.key)!==null&&s!==void 0?s:void 0,h=`${b.of(r)},${l}${g?","+g:""}`;let m=this._data.get(h);return m||(this._isDev?m=new i(this._logService,u,r,this._overallAverage()|0||l*1.5,l,o):(this._logService.debug(`[DEBOUNCE: ${u}] is disabled in developed mode`),m=new a(l*1.5)),this._data.set(h,m)),m}_overallAverage(){const r=new y.MovingAverage;for(const u of this._data.values())r.update(u.default());return r.value}};e.LanguageFeatureDebounceService=n,e.LanguageFeatureDebounceService=n=ke([ge(0,_.ILogService),ge(1,E.IEnvironmentService)],n),(0,S.registerSingleton)(e.ILanguageFeatureDebounceService,n,1)}),define(se[165],oe([1,0,13,19,12,52,53,10,5,79,8,45,51,2,18]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OutlineModelService=e.IOutlineModelService=e.OutlineModel=e.OutlineGroup=e.OutlineElement=e.TreeElement=void 0;class r{remove(){var l;(l=this.parent)===null||l===void 0||l.children.delete(this.id)}static findId(l,o){let g;typeof l=="string"?g=`${o.id}/${l}`:(g=`${o.id}/${l.name}`,o.children.get(g)!==void 0&&(g=`${o.id}/${l.name}_${l.range.startLineNumber}_${l.range.startColumn}`));let h=g;for(let m=0;o.children.get(h)!==void 0;m++)h=`${g}_${m}`;return h}static empty(l){return l.children.size===0}}e.TreeElement=r;class u extends r{constructor(l,o,g){super(),this.id=l,this.parent=o,this.symbol=g,this.children=new Map}}e.OutlineElement=u;class f extends r{constructor(l,o,g,h){super(),this.id=l,this.parent=o,this.label=g,this.order=h,this.children=new Map}}e.OutlineGroup=f;class c extends r{static create(l,o,g){const h=new k.CancellationTokenSource(g),m=new c(o.uri),C=l.ordered(o),w=C.map((I,T)=>{var A;const P=r.findId(`provider_${T}`,m),N=new f(P,m,(A=I.displayName)!==null&&A!==void 0?A:"Unknown Outline Provider",T);return Promise.resolve(I.provideDocumentSymbols(o,h.token)).then(M=>{for(const R of M||[])c._makeOutlineElement(R,N);return N},M=>((0,y.onUnexpectedExternalError)(M),N)).then(M=>{r.empty(M)?M.remove():m._groups.set(P,M)})}),D=l.onDidChange(()=>{const I=l.ordered(o);(0,L.equals)(I,C)||h.cancel()});return Promise.all(w).then(()=>h.token.isCancellationRequested&&!g.isCancellationRequested?c.create(l,o,g):m._compact()).finally(()=>{h.dispose(),D.dispose(),h.dispose()})}static _makeOutlineElement(l,o){const g=r.findId(l,o),h=new u(g,o,l);if(l.children)for(const m of l.children)c._makeOutlineElement(m,h);o.children.set(h.id,h)}constructor(l){super(),this.uri=l,this.id="root",this.parent=void 0,this._groups=new Map,this.children=new Map,this.id="root",this.parent=void 0}_compact(){let l=0;for(const[o,g]of this._groups)g.children.size===0?this._groups.delete(o):l+=1;if(l!==1)this.children=this._groups;else{const o=E.Iterable.first(this._groups.values());for(const[,g]of o.children)g.parent=this,this.children.set(g.id,g)}return this}getTopLevelSymbols(){const l=[];for(const o of this.children.values())o instanceof u?l.push(o.symbol):l.push(...E.Iterable.map(o.children.values(),g=>g.symbol));return l.sort((o,g)=>_.Range.compareRangesUsingStarts(o.range,g.range))}asListOfDocumentSymbols(){const l=this.getTopLevelSymbols(),o=[];return c._flattenDocumentSymbols(o,l,""),o.sort((g,h)=>p.Position.compare(_.Range.getStartPosition(g.range),_.Range.getStartPosition(h.range))||p.Position.compare(_.Range.getEndPosition(h.range),_.Range.getEndPosition(g.range)))}static _flattenDocumentSymbols(l,o,g){for(const h of o)l.push({kind:h.kind,tags:h.tags,name:h.name,detail:h.detail,containerName:h.containerName||g,range:h.range,selectionRange:h.selectionRange,children:void 0}),h.children&&c._flattenDocumentSymbols(l,h.children,h.name)}}e.OutlineModel=c,e.IOutlineModelService=(0,b.createDecorator)("IOutlineModelService");let d=class{constructor(l,o,g){this._languageFeaturesService=l,this._disposables=new n.DisposableStore,this._cache=new S.LRUCache(10,.7),this._debounceInformation=o.for(l.documentSymbolProvider,"DocumentSymbols",{min:350}),this._disposables.add(g.onModelRemoved(h=>{this._cache.delete(h.id)}))}dispose(){this._disposables.dispose()}async getOrCreate(l,o){const g=this._languageFeaturesService.documentSymbolProvider,h=g.ordered(l);let m=this._cache.get(l.id);if(!m||m.versionId!==l.getVersionId()||!(0,L.equals)(m.provider,h)){const w=new k.CancellationTokenSource;m={versionId:l.getVersionId(),provider:h,promiseCnt:0,source:w,promise:c.create(g,l,w.token),model:void 0},this._cache.set(l.id,m);const D=Date.now();m.promise.then(I=>{m.model=I,this._debounceInformation.update(l,Date.now()-D)}).catch(I=>{this._cache.delete(l.id)})}if(m.model)return m.model;m.promiseCnt+=1;const C=o.onCancellationRequested(()=>{--m.promiseCnt===0&&(m.source.cancel(),this._cache.delete(l.id))});try{return await m.promise}finally{C.dispose()}}};e.OutlineModelService=d,e.OutlineModelService=d=ke([ge(0,t.ILanguageFeaturesService),ge(1,v.ILanguageFeatureDebounceService),ge(2,i.IModelService)],d),(0,a.registerSingleton)(e.IOutlineModelService,d,1)}),define(se[779],oe([1,0,13,35,342,87,18,165,2,6]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0});let b=class extends _.Disposable{constructor(i,n,t){super(),this._textModel=i,this._languageFeaturesService=n,this._outlineModelService=t,this._currentModel=(0,k.observableValue)(this,void 0);const r=(0,k.observableSignalFromEvent)("documentSymbolProvider.onDidChange",this._languageFeaturesService.documentSymbolProvider.onDidChange),u=(0,k.observableSignalFromEvent)("_textModel.onDidChangeContent",v.Event.debounce(f=>this._textModel.onDidChangeContent(f),()=>{},100));this._register((0,k.autorunWithStore)(async(f,c)=>{r.read(f),u.read(f);const d=c.add(new E.DisposableCancellationTokenSource),s=await this._outlineModelService.getOrCreate(this._textModel,d.token);c.isDisposed||this._currentModel.set(s,void 0)}))}getBreadcrumbItems(i,n){const t=this._currentModel.read(n);if(!t)return[];const r=t.asListOfDocumentSymbols().filter(u=>i.contains(u.range.startLineNumber)&&!i.contains(u.range.endLineNumber));return r.sort((0,L.reverseOrder)((0,L.compareBy)(u=>u.range.endLineNumber-u.range.startLineNumber,L.numberComparator))),r.map(u=>({name:u.name,kind:u.kind,startLineNumber:u.range.startLineNumber}))}};b=ke([ge(1,S.ILanguageFeaturesService),ge(2,p.IOutlineModelService)],b),y.HideUnchangedRegionsFeature.setBreadcrumbsSourceFactory((a,i)=>i.createInstance(b,a))}),define(se[780],oe([1,0,19,20,22,68,165,25]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),p.CommandsRegistry.registerCommand("_executeDocumentSymbolProvider",async function(_,...v){const[b]=v;(0,k.assertType)(y.URI.isUri(b));const a=_.get(S.IOutlineModelService),n=await _.get(E.ITextModelService).createModelReference(b);try{return(await a.getOrCreate(n.object.textEditorModel,L.CancellationToken.None)).getTopLevelSymbols()}finally{n.dispose()}})}),define(se[781],oe([1,0,54,7,44,14,6,111,2,123,64]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";var a;Object.defineProperty(e,"__esModule",{value:!0}),e.BrowserClipboardService=void 0;let i=a=class extends _.Disposable{constructor(t,r){super(),this.layoutService=t,this.logService=r,this.mapTextToType=new Map,this.findText="",this.resources=[],this.resourcesStateHash=void 0,(L.isSafari||L.isWebkitWebView)&&this.installWebKitWriteTextWorkaround(),this._register(S.Event.runAndSubscribe(k.onDidRegisterWindow,({window:u,disposables:f})=>{f.add((0,k.addDisposableListener)(u.document,"copy",()=>this.clearResources()))},{window:y.mainWindow,disposables:this._store}))}installWebKitWriteTextWorkaround(){const t=()=>{const r=new E.DeferredPromise;this.webKitPendingClipboardWritePromise&&!this.webKitPendingClipboardWritePromise.isSettled&&this.webKitPendingClipboardWritePromise.cancel(),this.webKitPendingClipboardWritePromise=r,navigator.clipboard.write([new ClipboardItem({"text/plain":r.p})]).catch(async u=>{(!(u instanceof Error)||u.name!=="NotAllowedError"||!r.isRejected)&&this.logService.error(u)})};this._register(S.Event.runAndSubscribe(this.layoutService.onDidAddContainer,({container:r,disposables:u})=>{u.add((0,k.addDisposableListener)(r,"click",t)),u.add((0,k.addDisposableListener)(r,"keydown",t))},{container:this.layoutService.mainContainer,disposables:this._store}))}async writeText(t,r){if(this.writeResources([]),r){this.mapTextToType.set(r,t);return}if(this.webKitPendingClipboardWritePromise)return this.webKitPendingClipboardWritePromise.complete(t);try{return await navigator.clipboard.writeText(t)}catch(u){console.error(u)}this.fallbackWriteText(t)}fallbackWriteText(t){const r=(0,k.getActiveDocument)(),u=r.activeElement,f=r.body.appendChild((0,k.$)("textarea",{"aria-hidden":!0}));f.style.height="1px",f.style.width="1px",f.style.position="absolute",f.value=t,f.focus(),f.select(),r.execCommand("copy"),u instanceof HTMLElement&&u.focus(),r.body.removeChild(f)}async readText(t){if(t)return this.mapTextToType.get(t)||"";try{return await navigator.clipboard.readText()}catch(r){console.error(r)}return""}async readFindText(){return this.findText}async writeFindText(t){this.findText=t}async writeResources(t){t.length===0?this.clearResources():(this.resources=t,this.resourcesStateHash=await this.computeResourcesStateHash())}async readResources(){const t=await this.computeResourcesStateHash();return this.resourcesStateHash!==t&&this.clearResources(),this.resources}async computeResourcesStateHash(){if(this.resources.length===0)return;const t=await this.readText();return(0,p.hash)(t.substring(0,a.MAX_RESOURCE_STATE_SOURCE_LENGTH))}clearResources(){this.resources=[],this.resourcesStateHash=void 0}};e.BrowserClipboardService=i,i.MAX_RESOURCE_STATE_SOURCE_LENGTH=1e3,e.BrowserClipboardService=i=a=ke([ge(0,v.ILayoutService),ge(1,b.ILogService)],i)}),define(se[782],oe([1,0,2,64]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LogService=void 0;class y extends L.Disposable{constructor(S,p=[]){super(),this.logger=new k.MultiplexLogger([S,...p]),this._register(S.onDidChangeLogLevel(_=>this.setLevel(_)))}get onDidChangeLogLevel(){return this.logger.onDidChangeLogLevel}setLevel(S){this.logger.setLevel(S)}getLevel(){return this.logger.getLevel()}trace(S,...p){this.logger.trace(S,...p)}debug(S,...p){this.logger.debug(S,...p)}info(S,...p){this.logger.info(S,...p)}warn(S,...p){this.logger.warn(S,...p)}error(S,...p){this.logger.error(S,...p)}}e.LogService=y}),define(se[97],oe([1,0,100,745,8]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IMarkerService=e.IMarkerData=e.MarkerSeverity=void 0;var E;(function(p){p[p.Hint=1]="Hint",p[p.Info=2]="Info",p[p.Warning=4]="Warning",p[p.Error=8]="Error"})(E||(e.MarkerSeverity=E={})),function(p){function _(n,t){return t-n}p.compare=_;const v=Object.create(null);v[p.Error]=(0,k.localize)(0,null),v[p.Warning]=(0,k.localize)(1,null),v[p.Info]=(0,k.localize)(2,null);function b(n){return v[n]||""}p.toString=b;function a(n){switch(n){case L.default.Error:return p.Error;case L.default.Warning:return p.Warning;case L.default.Info:return p.Info;case L.default.Ignore:return p.Hint}}p.fromSeverity=a;function i(n){switch(n){case p.Error:return L.default.Error;case p.Warning:return L.default.Warning;case p.Info:return L.default.Info;case p.Hint:return L.default.Ignore}}p.toSeverity=i}(E||(e.MarkerSeverity=E={}));var S;(function(p){const _="";function v(a){return b(a,!0)}p.makeKey=v;function b(a,i){const n=[_];return a.source?n.push(a.source.replace("\xA6","\\\xA6")):n.push(_),a.code?typeof a.code=="string"?n.push(a.code.replace("\xA6","\\\xA6")):n.push(a.code.value.replace("\xA6","\\\xA6")):n.push(_),a.severity!==void 0&&a.severity!==null?n.push(E.toString(a.severity)):n.push(_),a.message&&i?n.push(a.message.replace("\xA6","\\\xA6")):n.push(_),a.startLineNumber!==void 0&&a.startLineNumber!==null?n.push(a.startLineNumber.toString()):n.push(_),a.startColumn!==void 0&&a.startColumn!==null?n.push(a.startColumn.toString()):n.push(_),a.endLineNumber!==void 0&&a.endLineNumber!==null?n.push(a.endLineNumber.toString()):n.push(_),a.endColumn!==void 0&&a.endColumn!==null?n.push(a.endColumn.toString()):n.push(_),n.push(_),n.join("\xA6")}p.makeKeyOptionalMessage=b})(S||(e.IMarkerData=S={})),e.IMarkerService=(0,y.createDecorator)("markerService")}),define(se[783],oe([1,0,13,6,2,66,11,22,5,45,8,97,27]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IMarkerNavigationService=e.MarkerList=e.MarkerCoordinate=void 0;class n{constructor(f,c,d){this.marker=f,this.index=c,this.total=d}}e.MarkerCoordinate=n;let t=class{constructor(f,c,d){this._markerService=c,this._configService=d,this._onDidChange=new k.Emitter,this.onDidChange=this._onDidChange.event,this._dispoables=new y.DisposableStore,this._markers=[],this._nextIdx=-1,p.URI.isUri(f)?this._resourceFilter=g=>g.toString()===f.toString():f&&(this._resourceFilter=f);const s=this._configService.getValue("problems.sortOrder"),l=(g,h)=>{let m=(0,S.compare)(g.resource.toString(),h.resource.toString());return m===0&&(s==="position"?m=_.Range.compareRangesUsingStarts(g,h)||a.MarkerSeverity.compare(g.severity,h.severity):m=a.MarkerSeverity.compare(g.severity,h.severity)||_.Range.compareRangesUsingStarts(g,h)),m},o=()=>{this._markers=this._markerService.read({resource:p.URI.isUri(f)?f:void 0,severities:a.MarkerSeverity.Error|a.MarkerSeverity.Warning|a.MarkerSeverity.Info}),typeof f=="function"&&(this._markers=this._markers.filter(g=>this._resourceFilter(g.resource))),this._markers.sort(l)};o(),this._dispoables.add(c.onMarkerChanged(g=>{(!this._resourceFilter||g.some(h=>this._resourceFilter(h)))&&(o(),this._nextIdx=-1,this._onDidChange.fire())}))}dispose(){this._dispoables.dispose(),this._onDidChange.dispose()}matches(f){return!this._resourceFilter&&!f?!0:!this._resourceFilter||!f?!1:this._resourceFilter(f)}get selected(){const f=this._markers[this._nextIdx];return f&&new n(f,this._nextIdx+1,this._markers.length)}_initIdx(f,c,d){let s=!1,l=this._markers.findIndex(o=>o.resource.toString()===f.uri.toString());l<0&&(l=(0,L.binarySearch)(this._markers,{resource:f.uri},(o,g)=>(0,S.compare)(o.resource.toString(),g.resource.toString())),l<0&&(l=~l));for(let o=l;os.resource.toString()===f.toString());if(!(d<0)){for(;dc[1])}}class b{constructor(n){this.errors=0,this.infos=0,this.warnings=0,this.unknowns=0,this._data=new E.ResourceMap,this._service=n,this._subscription=n.onMarkerChanged(this._update,this)}dispose(){this._subscription.dispose()}_update(n){for(const t of n){const r=this._data.get(t);r&&this._substract(r);const u=this._resourceStats(t);this._add(u),this._data.set(t,u)}}_resourceStats(n){const t={errors:0,warnings:0,infos:0,unknowns:0};if(e.unsupportedSchemas.has(n.scheme))return t;for(const{severity:r}of this._service.read({resource:n}))r===_.MarkerSeverity.Error?t.errors+=1:r===_.MarkerSeverity.Warning?t.warnings+=1:r===_.MarkerSeverity.Info?t.infos+=1:t.unknowns+=1;return t}_substract(n){this.errors-=n.errors,this.warnings-=n.warnings,this.infos-=n.infos,this.unknowns-=n.unknowns}_add(n){this.errors+=n.errors,this.warnings+=n.warnings,this.infos+=n.infos,this.unknowns+=n.unknowns}}class a{constructor(){this._onMarkerChanged=new k.DebounceEmitter({delay:0,merge:a._merge}),this.onMarkerChanged=this._onMarkerChanged.event,this._data=new v,this._stats=new b(this)}dispose(){this._stats.dispose(),this._onMarkerChanged.dispose()}remove(n,t){for(const r of t||[])this.changeOne(n,r,[])}changeOne(n,t,r){if((0,L.isFalsyOrEmpty)(r))this._data.delete(t,n)&&this._onMarkerChanged.fire([t]);else{const u=[];for(const f of r){const c=a._toMarker(n,t,f);c&&u.push(c)}this._data.set(t,n,u),this._onMarkerChanged.fire([t])}}static _toMarker(n,t,r){let{code:u,severity:f,message:c,source:d,startLineNumber:s,startColumn:l,endLineNumber:o,endColumn:g,relatedInformation:h,tags:m}=r;if(c)return s=s>0?s:1,l=l>0?l:1,o=o>=s?o:s,g=g>0?g:l,{resource:t,owner:n,code:u,severity:f,message:c,source:d,startLineNumber:s,startColumn:l,endLineNumber:o,endColumn:g,relatedInformation:h,tags:m}}changeAll(n,t){const r=[],u=this._data.values(n);if(u)for(const f of u){const c=y.Iterable.first(f);c&&(r.push(c.resource),this._data.delete(c.resource,n))}if((0,L.isNonEmptyArray)(t)){const f=new E.ResourceMap;for(const{resource:c,marker:d}of t){const s=a._toMarker(n,c,d);if(!s)continue;const l=f.get(c);l?l.push(s):(f.set(c,[s]),r.push(c))}for(const[c,d]of f)this._data.set(c,n,d)}r.length>0&&this._onMarkerChanged.fire(r)}read(n=Object.create(null)){let{owner:t,resource:r,severities:u,take:f}=n;if((!f||f<0)&&(f=-1),t&&r){const c=this._data.get(r,t);if(c){const d=[];for(const s of c)if(a._accept(s,u)){const l=d.push(s);if(f>0&&l===f)break}return d}else return[]}else if(!t&&!r){const c=[];for(const d of this._data.values())for(const s of d)if(a._accept(s,u)){const l=c.push(s);if(f>0&&l===f)return c}return c}else{const c=this._data.values(r??t),d=[];for(const s of c)for(const l of s)if(a._accept(l,u)){const o=d.push(l);if(f>0&&o===f)return d}return d}}static _accept(n,t){return t===void 0||(t&n.severity)===n.severity}static _merge(n){const t=new E.ResourceMap;for(const r of n)for(const u of r)t.set(u,!0);return Array.from(t.keys())}}e.MarkerService=a}),define(se[50],oe([1,0,100,8]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.NoOpNotification=e.INotificationService=e.Severity=void 0,e.Severity=L.default,e.INotificationService=(0,k.createDecorator)("notificationService");class y{}e.NoOpNotification=y}),define(se[57],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.extractSelection=e.IOpenerService=void 0,e.IOpenerService=(0,L.createDecorator)("openerService");function k(y){let E;const S=/^L?(\d+)(?:,(\d+))?(-L?(\d+)(?:,(\d+))?)?/.exec(y.fragment);return S&&(E={startLineNumber:parseInt(S[1]),startColumn:S[2]?parseInt(S[2]):1,endLineNumber:S[4]?parseInt(S[4]):void 0,endColumn:S[4]?S[5]?parseInt(S[5]):1:void 0},y=y.with({fragment:""})),{selection:E,uri:y}}e.extractSelection=k}),define(se[785],oe([1,0,7,44,19,66,53,223,47,49,22,33,25,759,57]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.OpenerService=void 0;let r=class{constructor(d){this._commandService=d}async open(d,s){if(!(0,_.matchesScheme)(d,_.Schemas.command))return!1;if(!s?.allowCommands||(typeof d=="string"&&(d=b.URI.parse(d)),Array.isArray(s.allowCommands)&&!s.allowCommands.includes(d.path)))return!0;let l=[];try{l=(0,p.parse)(decodeURIComponent(d.query))}catch{try{l=(0,p.parse)(d.query)}catch{}}return Array.isArray(l)||(l=[l]),await this._commandService.executeCommand(d.path,...l),!0}};r=ke([ge(0,i.ICommandService)],r);let u=class{constructor(d){this._editorService=d}async open(d,s){typeof d=="string"&&(d=b.URI.parse(d));const{selection:l,uri:o}=(0,t.extractSelection)(d);return d=o,d.scheme===_.Schemas.file&&(d=(0,v.normalizePath)(d)),await this._editorService.openCodeEditor({resource:d,options:{selection:l,source:s?.fromUserGesture?n.EditorOpenSource.USER:n.EditorOpenSource.API,...s?.editorOptions}},this._editorService.getFocusedCodeEditor(),s?.openToSide),!0}};u=ke([ge(0,a.ICodeEditorService)],u);let f=class{constructor(d,s){this._openers=new E.LinkedList,this._validators=new E.LinkedList,this._resolvers=new E.LinkedList,this._resolvedUriTargets=new S.ResourceMap(l=>l.with({path:null,fragment:null,query:null}).toString()),this._externalOpeners=new E.LinkedList,this._defaultExternalOpener={openExternal:async l=>((0,_.matchesSomeScheme)(l,_.Schemas.http,_.Schemas.https)?L.windowOpenNoOpener(l):k.mainWindow.location.href=l,!0)},this._openers.push({open:async(l,o)=>o?.openExternal||(0,_.matchesSomeScheme)(l,_.Schemas.mailto,_.Schemas.http,_.Schemas.https,_.Schemas.vsls)?(await this._doOpenExternal(l,o),!0):!1}),this._openers.push(new r(s)),this._openers.push(new u(d))}registerOpener(d){return{dispose:this._openers.unshift(d)}}async open(d,s){var l;const o=typeof d=="string"?b.URI.parse(d):d,g=(l=this._resolvedUriTargets.get(o))!==null&&l!==void 0?l:d;for(const h of this._validators)if(!await h.shouldOpen(g,s))return!1;for(const h of this._openers)if(await h.open(d,s))return!0;return!1}async resolveExternalUri(d,s){for(const l of this._resolvers)try{const o=await l.resolveExternalUri(d,s);if(o)return this._resolvedUriTargets.has(o.resolved)||this._resolvedUriTargets.set(o.resolved,d),o}catch{}throw new Error("Could not resolve external URI: "+d.toString())}async _doOpenExternal(d,s){const l=typeof d=="string"?b.URI.parse(d):d;let o;try{o=(await this.resolveExternalUri(l,s)).resolved}catch{o=l}let g;if(typeof d=="string"&&l.toString()===o.toString()?g=d:g=encodeURI(o.toString(!0)),s?.allowContributedOpeners){const h=typeof s?.allowContributedOpeners=="string"?s?.allowContributedOpeners:void 0;for(const m of this._externalOpeners)if(await m.openExternal(g,{sourceUri:l,preferredOpenerId:h},y.CancellationToken.None))return!0}return this._defaultExternalOpener.openExternal(g,{sourceUri:l},y.CancellationToken.None)}dispose(){this._validators.clear()}};e.OpenerService=f,e.OpenerService=f=ke([ge(0,a.ICodeEditorService),ge(1,i.ICommandService)],f)}),define(se[786],oe([1,0,7,84,46,63,6,2,57,489]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Link=void 0;let v=class extends p.Disposable{get enabled(){return this._enabled}set enabled(a){a?(this.el.setAttribute("aria-disabled","false"),this.el.tabIndex=0,this.el.style.pointerEvents="auto",this.el.style.opacity="1",this.el.style.cursor="pointer",this._enabled=!1):(this.el.setAttribute("aria-disabled","true"),this.el.tabIndex=-1,this.el.style.pointerEvents="none",this.el.style.opacity="0.4",this.el.style.cursor="default",this._enabled=!0),this._enabled=a}constructor(a,i,n={},t){var r;super(),this._link=i,this._enabled=!0,this.el=(0,L.append)(a,(0,L.$)("a.monaco-link",{tabIndex:(r=i.tabIndex)!==null&&r!==void 0?r:0,href:i.href,title:i.title},i.label)),this.el.setAttribute("role","button");const u=this._register(new k.DomEmitter(this.el,"click")),f=this._register(new k.DomEmitter(this.el,"keypress")),c=S.Event.chain(f.event,l=>l.map(o=>new y.StandardKeyboardEvent(o)).filter(o=>o.keyCode===3)),d=this._register(new k.DomEmitter(this.el,E.EventType.Tap)).event;this._register(E.Gesture.addTarget(this.el));const s=S.Event.any(u.event,c,d);this._register(s(l=>{this.enabled&&(L.EventHelper.stop(l,!0),n?.opener?n.opener(this._link.href):t.open(this._link.href,{allowCommands:!0}))})),this.enabled=!0}};e.Link=v,e.Link=v=ke([ge(3,_.IOpenerService)],v)}),define(se[88],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IEditorProgressService=e.Progress=e.emptyProgressRunner=e.IProgressService=void 0,e.IProgressService=(0,L.createDecorator)("progressService"),e.emptyProgressRunner=Object.freeze({total(){},worked(){},done(){}});class k{constructor(E){this.callback=E}report(E){this._value=E,this.callback(this._value)}}e.Progress=k,k.None=Object.freeze({report(){}}),e.IEditorProgressService=(0,L.createDecorator)("editorProgressService")}),define(se[787],oe([1,0,14,19,2,20]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PickerQuickAccessProvider=e.TriggerAction=void 0;var S;(function(b){b[b.NO_ACTION=0]="NO_ACTION",b[b.CLOSE_PICKER=1]="CLOSE_PICKER",b[b.REFRESH_PICKER=2]="REFRESH_PICKER",b[b.REMOVE_ITEM=3]="REMOVE_ITEM"})(S||(e.TriggerAction=S={}));function p(b){const a=b;return Array.isArray(a.items)}function _(b){const a=b;return!!a.picks&&a.additionalPicks instanceof Promise}class v extends y.Disposable{constructor(a,i){super(),this.prefix=a,this.options=i}provide(a,i,n){var t;const r=new y.DisposableStore;a.canAcceptInBackground=!!(!((t=this.options)===null||t===void 0)&&t.canAcceptInBackground),a.matchOnLabel=a.matchOnDescription=a.matchOnDetail=a.sortByLabel=!1;let u;const f=r.add(new y.MutableDisposable),c=async()=>{var d;const s=f.value=new y.DisposableStore;u?.dispose(!0),a.busy=!1,u=new k.CancellationTokenSource(i);const l=u.token;let o=a.value.substring(this.prefix.length);!((d=this.options)===null||d===void 0)&&d.shouldSkipTrimPickFilter||(o=o.trim());const g=this._getPicks(o,s,l,n),h=(C,w)=>{var D;let I,T;if(p(C)?(I=C.items,T=C.active):I=C,I.length===0){if(w)return!1;(o.length>0||a.hideInput)&&(!((D=this.options)===null||D===void 0)&&D.noResultsPick)&&((0,E.isFunction)(this.options.noResultsPick)?I=[this.options.noResultsPick(o)]:I=[this.options.noResultsPick])}return a.items=I,T&&(a.activeItems=[T]),!0},m=async C=>{let w=!1,D=!1;await Promise.all([(async()=>{typeof C.mergeDelay=="number"&&(await(0,L.timeout)(C.mergeDelay),l.isCancellationRequested)||D||(w=h(C.picks,!0))})(),(async()=>{a.busy=!0;try{const I=await C.additionalPicks;if(l.isCancellationRequested)return;let T,A;p(C.picks)?(T=C.picks.items,A=C.picks.active):T=C.picks;let P,N;if(p(I)?(P=I.items,N=I.active):P=I,P.length>0||!w){let M;if(!A&&!N){const R=a.activeItems[0];R&&T.indexOf(R)!==-1&&(M=R)}h({items:[...T,...P],active:A||N||M})}}finally{l.isCancellationRequested||(a.busy=!1),D=!0}})()])};if(g!==null)if(_(g))await m(g);else if(!(g instanceof Promise))h(g);else{a.busy=!0;try{const C=await g;if(l.isCancellationRequested)return;_(C)?await m(C):h(C)}finally{l.isCancellationRequested||(a.busy=!1)}}};return r.add(a.onDidChangeValue(()=>c())),c(),r.add(a.onDidAccept(d=>{const[s]=a.selectedItems;typeof s?.accept=="function"&&(d.inBackground||a.hide(),s.accept(a.keyMods,d))})),r.add(a.onDidTriggerItemButton(async({button:d,item:s})=>{var l,o;if(typeof s.trigger=="function"){const g=(o=(l=s.buttons)===null||l===void 0?void 0:l.indexOf(d))!==null&&o!==void 0?o:-1;if(g>=0){const h=s.trigger(g,a.keyMods),m=typeof h=="number"?h:await h;if(i.isCancellationRequested)return;switch(m){case S.NO_ACTION:break;case S.CLOSE_PICKER:a.hide();break;case S.REFRESH_PICKER:c();break;case S.REMOVE_ITEM:{const C=a.items.indexOf(s);if(C!==-1){const w=a.items.slice(),D=w.splice(C,1),I=a.activeItems.filter(A=>A!==D[0]),T=a.keepScrollPosition;a.keepScrollPosition=!0,a.items=w,I&&(a.activeItems=I),a.keepScrollPosition=T}break}}}}})),r}}e.PickerQuickAccessProvider=v}),define(se[788],oe([1,0,7,232,2,100,178]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputBox=void 0;const S=L.$;class p extends y.Disposable{constructor(v,b,a){super(),this.parent=v,this.onKeyDown=n=>L.addStandardDisposableListener(this.findInput.inputBox.inputElement,L.EventType.KEY_DOWN,n),this.onDidChange=n=>this.findInput.onDidChange(n),this.container=L.append(this.parent,S(".quick-input-box")),this.findInput=this._register(new k.FindInput(this.container,void 0,{label:"",inputBoxStyles:b,toggleStyles:a}));const i=this.findInput.inputBox.inputElement;i.role="combobox",i.ariaHasPopup="menu",i.ariaAutoComplete="list",i.ariaExpanded="true"}get value(){return this.findInput.getValue()}set value(v){this.findInput.setValue(v)}select(v=null){this.findInput.inputBox.select(v)}isSelectionAtEnd(){return this.findInput.inputBox.isSelectionAtEnd()}get placeholder(){return this.findInput.inputBox.inputElement.getAttribute("placeholder")||""}set placeholder(v){this.findInput.inputBox.setPlaceHolder(v)}get password(){return this.findInput.inputBox.inputElement.type==="password"}set password(v){this.findInput.inputBox.inputElement.type=v?"password":"text"}set enabled(v){this.findInput.inputBox.inputElement.toggleAttribute("readonly",!v)}set toggles(v){this.findInput.setAdditionalToggles(v)}setAttribute(v,b){this.findInput.inputBox.inputElement.setAttribute(v,b)}showDecoration(v){v===E.default.Ignore?this.findInput.clearMessage():this.findInput.showMessage({type:v===E.default.Info?1:v===E.default.Warning?2:3,content:""})}stylesForType(v){return this.findInput.inputBox.stylesForType(v===E.default.Info?1:v===E.default.Warning?2:3)}setFocus(){this.findInput.focus()}layout(){this.findInput.inputBox.layout()}}e.QuickInputBox=p}),define(se[350],oe([1,0,7,84,6,46,63,118,170,399,751,178]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.renderQuickInputDescription=e.quickInputButtonToAction=void 0;const a={},i=new _.IdGenerator("quick-input-button-icon-");function n(u){if(!u)return;let f;const c=u.dark.toString();return a[c]?f=a[c]:(f=i.nextId(),L.createCSSRule(`.${f}, .hc-light .${f}`,`background-image: ${L.asCSSUrl(u.light||u.dark)}`),L.createCSSRule(`.vs-dark .${f}, .hc-black .${f}`,`background-image: ${L.asCSSUrl(u.dark)}`),a[c]=f),f}function t(u,f,c){let d=u.iconClass||n(u.iconPath);return u.alwaysVisible&&(d=d?`${d} always-visible`:"always-visible"),{id:f,label:"",tooltip:u.tooltip||"",class:d,enabled:!0,run:c}}e.quickInputButtonToAction=t;function r(u,f,c){L.reset(f);const d=(0,v.parseLinkedText)(u);let s=0;for(const l of d.nodes)if(typeof l=="string")f.append(...(0,p.renderLabelWithIcons)(l));else{let o=l.title;!o&&l.href.startsWith("command:")?o=(0,b.localize)(0,null,l.href.substring(8)):o||(o=l.href);const g=L.$("a",{href:l.href,title:o,tabIndex:s++},l.label);g.style.textDecoration="underline";const h=I=>{L.isEventLike(I)&&L.EventHelper.stop(I,!0),c.callback(l.href)},m=c.disposables.add(new k.DomEmitter(g,L.EventType.CLICK)).event,C=c.disposables.add(new k.DomEmitter(g,L.EventType.KEY_DOWN)).event,w=y.Event.chain(C,I=>I.filter(T=>{const A=new E.StandardKeyboardEvent(T);return A.equals(10)||A.equals(3)}));c.disposables.add(S.Gesture.addTarget(g));const D=c.disposables.add(new k.DomEmitter(g,S.EventType.Tap)).event;y.Event.any(m,D,w)(h,null,c.disposables),f.appendChild(g)}}e.renderQuickInputDescription=r}),define(se[70],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IQuickInputService=e.quickPickItemScorerAccessor=e.QuickPickItemScorerAccessor=e.ItemActivation=e.QuickInputHideReason=e.NO_KEY_MODS=void 0,e.NO_KEY_MODS={ctrlCmd:!1,alt:!1};var k;(function(S){S[S.Blur=1]="Blur",S[S.Gesture=2]="Gesture",S[S.Other=3]="Other"})(k||(e.QuickInputHideReason=k={}));var y;(function(S){S[S.NONE=0]="NONE",S[S.FIRST=1]="FIRST",S[S.SECOND=2]="SECOND",S[S.LAST=3]="LAST"})(y||(e.ItemActivation=y={}));class E{constructor(p){this.options=p}}e.QuickPickItemScorerAccessor=E,e.quickPickItemScorerAccessor=new E,e.IQuickInputService=(0,L.createDecorator)("quickInputService")}),define(se[37],oe([1,0,90,20]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Registry=void 0;class y{constructor(){this.data=new Map}add(S,p){L.ok(k.isString(S)),L.ok(k.isObject(p)),L.ok(!this.data.has(S),"There is already an extension with this id"),this.data.set(S,p)}as(S){return this.data.get(S)||null}}e.Registry=new y}),define(se[351],oe([1,0,37]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LocalSelectionTransfer=e.Extensions=e.CodeDataTransfers=void 0,e.CodeDataTransfers={EDITORS:"CodeEditors",FILES:"CodeFiles"};class k{}e.Extensions={DragAndDropContribution:"workbench.contributions.dragAndDrop"},L.Registry.add(e.Extensions.DragAndDropContribution,new k);class y{constructor(){}static getInstance(){return y.INSTANCE}hasData(S){return S&&S===this.proto}getData(S){if(this.hasData(S))return this.data}}e.LocalSelectionTransfer=y,y.INSTANCE=new y}),define(se[352],oe([1,0,198,176,109,22,351]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.toExternalVSDataTransfer=e.toVSDataTransfer=void 0;function p(a){const i=new k.VSDataTransfer;for(const n of a.items){const t=n.type;if(n.kind==="string"){const r=new Promise(u=>n.getAsString(u));i.append(t,(0,k.createStringDataTransferItem)(r))}else if(n.kind==="file"){const r=n.getAsFile();r&&i.append(t,_(r))}}return i}e.toVSDataTransfer=p;function _(a){const i=a.path?E.URI.parse(a.path):void 0;return(0,k.createFileDataTransferItem)(a.name,i,async()=>new Uint8Array(await a.arrayBuffer()))}const v=Object.freeze([S.CodeDataTransfers.EDITORS,S.CodeDataTransfers.FILES,L.DataTransfers.RESOURCES,L.DataTransfers.INTERNAL_URI_LIST]);function b(a,i=!1){const n=p(a),t=n.get(L.DataTransfers.INTERNAL_URI_LIST);if(t)n.replace(y.Mimes.uriList,t);else if(i||!n.has(y.Mimes.uriList)){const r=[];for(const u of a.items){const f=u.getAsFile();if(f){const c=f.path;try{c?r.push(E.URI.file(c).toString()):r.push(E.URI.parse(f.name,!0).toString())}catch{}}}r.length&&n.replace(y.Mimes.uriList,(0,k.createStringDataTransferItem)(k.UriList.create(r)))}for(const r of v)n.delete(r);return n}e.toExternalVSDataTransfer=b}),define(se[245],oe([1,0,6,37]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Extensions=void 0,e.Extensions={JSONContribution:"base.contributions.json"};function y(p){return p.length>0&&p.charAt(p.length-1)==="#"?p.substring(0,p.length-1):p}class E{constructor(){this._onDidChangeSchema=new L.Emitter,this.schemasById={}}registerSchema(_,v){this.schemasById[y(_)]=v,this._onDidChangeSchema.fire(_)}notifySchemaChanged(_){this._onDidChangeSchema.fire(_)}}const S=new E;k.Registry.add(e.Extensions.JSONContribution,S)}),define(se[98],oe([1,0,13,6,20,737,27,245,37]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.validateProperty=e.getDefaultValue=e.overrideIdentifiersFromKey=e.OVERRIDE_PROPERTY_REGEX=e.OVERRIDE_PROPERTY_PATTERN=e.resourceLanguageSettingsSchemaId=e.resourceSettings=e.windowSettings=e.machineOverridableSettings=e.machineSettings=e.applicationSettings=e.allSettings=e.Extensions=void 0,e.Extensions={Configuration:"base.contributions.configuration"},e.allSettings={properties:{},patternProperties:{}},e.applicationSettings={properties:{},patternProperties:{}},e.machineSettings={properties:{},patternProperties:{}},e.machineOverridableSettings={properties:{},patternProperties:{}},e.windowSettings={properties:{},patternProperties:{}},e.resourceSettings={properties:{},patternProperties:{}},e.resourceLanguageSettingsSchemaId="vscode://schemas/settings/resourceLanguage";const v=_.Registry.as(p.Extensions.JSONContribution);class b{constructor(){this.overrideIdentifiers=new Set,this._onDidSchemaChange=new k.Emitter,this._onDidUpdateConfiguration=new k.Emitter,this.configurationDefaultsOverrides=new Map,this.defaultLanguageConfigurationOverridesNode={id:"defaultOverrides",title:E.localize(0,null),properties:{}},this.configurationContributors=[this.defaultLanguageConfigurationOverridesNode],this.resourceLanguageSettingsSchema={properties:{},patternProperties:{},additionalProperties:!0,allowTrailingCommas:!0,allowComments:!0},this.configurationProperties={},this.policyConfigurations=new Map,this.excludedConfigurationProperties={},v.registerSchema(e.resourceLanguageSettingsSchemaId,this.resourceLanguageSettingsSchema),this.registerOverridePropertyPatternKey()}registerConfiguration(c,d=!0){this.registerConfigurations([c],d)}registerConfigurations(c,d=!0){const s=new Set;this.doRegisterConfigurations(c,d,s),v.registerSchema(e.resourceLanguageSettingsSchemaId,this.resourceLanguageSettingsSchema),this._onDidSchemaChange.fire(),this._onDidUpdateConfiguration.fire({properties:s})}registerDefaultConfigurations(c){const d=new Set;this.doRegisterDefaultConfigurations(c,d),this._onDidSchemaChange.fire(),this._onDidUpdateConfiguration.fire({properties:d,defaultsOverrides:!0})}doRegisterDefaultConfigurations(c,d){var s;const l=[];for(const{overrides:o,source:g}of c)for(const h in o)if(d.add(h),e.OVERRIDE_PROPERTY_REGEX.test(h)){const m=this.configurationDefaultsOverrides.get(h),C=(s=m?.valuesSources)!==null&&s!==void 0?s:new Map;if(g)for(const T of Object.keys(o[h]))C.set(T,g);const w={...m?.value||{},...o[h]};this.configurationDefaultsOverrides.set(h,{source:g,value:w,valuesSources:C});const D=(0,S.getLanguageTagSettingPlainKey)(h),I={type:"object",default:w,description:E.localize(1,null,D),$ref:e.resourceLanguageSettingsSchemaId,defaultDefaultValue:w,source:y.isString(g)?void 0:g,defaultValueSource:g};l.push(...n(h)),this.configurationProperties[h]=I,this.defaultLanguageConfigurationOverridesNode.properties[h]=I}else{this.configurationDefaultsOverrides.set(h,{value:o[h],source:g});const m=this.configurationProperties[h];m&&(this.updatePropertyDefaultValue(h,m),this.updateSchema(h,m))}this.doRegisterOverrideIdentifiers(l)}registerOverrideIdentifiers(c){this.doRegisterOverrideIdentifiers(c),this._onDidSchemaChange.fire()}doRegisterOverrideIdentifiers(c){for(const d of c)this.overrideIdentifiers.add(d);this.updateOverridePropertyPatternKey()}doRegisterConfigurations(c,d,s){c.forEach(l=>{this.validateAndRegisterProperties(l,d,l.extensionInfo,l.restrictedProperties,void 0,s),this.configurationContributors.push(l),this.registerJSONConfiguration(l)})}validateAndRegisterProperties(c,d=!0,s,l,o=3,g){var h;o=y.isUndefinedOrNull(c.scope)?o:c.scope;const m=c.properties;if(m)for(const w in m){const D=m[w];if(d&&u(w,D)){delete m[w];continue}if(D.source=s,D.defaultDefaultValue=m[w].default,this.updatePropertyDefaultValue(w,D),e.OVERRIDE_PROPERTY_REGEX.test(w)?D.scope=void 0:(D.scope=y.isUndefinedOrNull(D.scope)?o:D.scope,D.restricted=y.isUndefinedOrNull(D.restricted)?!!l?.includes(w):D.restricted),m[w].hasOwnProperty("included")&&!m[w].included){this.excludedConfigurationProperties[w]=m[w],delete m[w];continue}else this.configurationProperties[w]=m[w],!((h=m[w].policy)===null||h===void 0)&&h.name&&this.policyConfigurations.set(m[w].policy.name,w);!m[w].deprecationMessage&&m[w].markdownDeprecationMessage&&(m[w].deprecationMessage=m[w].markdownDeprecationMessage),g.add(w)}const C=c.allOf;if(C)for(const w of C)this.validateAndRegisterProperties(w,d,s,l,o,g)}getConfigurationProperties(){return this.configurationProperties}getPolicyConfigurations(){return this.policyConfigurations}registerJSONConfiguration(c){const d=s=>{const l=s.properties;if(l)for(const g in l)this.updateSchema(g,l[g]);const o=s.allOf;o?.forEach(d)};d(c)}updateSchema(c,d){switch(e.allSettings.properties[c]=d,d.scope){case 1:e.applicationSettings.properties[c]=d;break;case 2:e.machineSettings.properties[c]=d;break;case 6:e.machineOverridableSettings.properties[c]=d;break;case 3:e.windowSettings.properties[c]=d;break;case 4:e.resourceSettings.properties[c]=d;break;case 5:e.resourceSettings.properties[c]=d,this.resourceLanguageSettingsSchema.properties[c]=d;break}}updateOverridePropertyPatternKey(){for(const c of this.overrideIdentifiers.values()){const d=`[${c}]`,s={type:"object",description:E.localize(2,null),errorMessage:E.localize(3,null),$ref:e.resourceLanguageSettingsSchemaId};this.updatePropertyDefaultValue(d,s),e.allSettings.properties[d]=s,e.applicationSettings.properties[d]=s,e.machineSettings.properties[d]=s,e.machineOverridableSettings.properties[d]=s,e.windowSettings.properties[d]=s,e.resourceSettings.properties[d]=s}}registerOverridePropertyPatternKey(){const c={type:"object",description:E.localize(4,null),errorMessage:E.localize(5,null),$ref:e.resourceLanguageSettingsSchemaId};e.allSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.applicationSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.machineSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.machineOverridableSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.windowSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,e.resourceSettings.patternProperties[e.OVERRIDE_PROPERTY_PATTERN]=c,this._onDidSchemaChange.fire()}updatePropertyDefaultValue(c,d){const s=this.configurationDefaultsOverrides.get(c);let l=s?.value,o=s?.source;y.isUndefined(l)&&(l=d.defaultDefaultValue,o=void 0),y.isUndefined(l)&&(l=t(d.type)),d.default=l,d.defaultValueSource=o}}const a="\\[([^\\]]+)\\]",i=new RegExp(a,"g");e.OVERRIDE_PROPERTY_PATTERN=`^(${a})+$`,e.OVERRIDE_PROPERTY_REGEX=new RegExp(e.OVERRIDE_PROPERTY_PATTERN);function n(f){const c=[];if(e.OVERRIDE_PROPERTY_REGEX.test(f)){let d=i.exec(f);for(;d?.length;){const s=d[1].trim();s&&c.push(s),d=i.exec(f)}}return(0,L.distinct)(c)}e.overrideIdentifiersFromKey=n;function t(f){switch(Array.isArray(f)?f[0]:f){case"boolean":return!1;case"integer":case"number":return 0;case"string":return"";case"array":return[];case"object":return{};default:return null}}e.getDefaultValue=t;const r=new b;_.Registry.add(e.Extensions.Configuration,r);function u(f,c){var d,s,l,o;return f.trim()?e.OVERRIDE_PROPERTY_REGEX.test(f)?E.localize(7,null,f):r.getConfigurationProperties()[f]!==void 0?E.localize(8,null,f):!((d=c.policy)===null||d===void 0)&&d.name&&r.getPolicyConfigurations().get((s=c.policy)===null||s===void 0?void 0:s.name)!==void 0?E.localize(9,null,f,(l=c.policy)===null||l===void 0?void 0:l.name,r.getPolicyConfigurations().get((o=c.policy)===null||o===void 0?void 0:o.name)):null:E.localize(6,null)}e.validateProperty=u}),define(se[246],oe([1,0,278,36,179,634,98,37]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isDiffEditorConfigurationKey=e.isEditorConfigurationKey=e.editorConfigurationBaseNode=void 0,e.editorConfigurationBaseNode=Object.freeze({id:"editor",order:5,type:"object",title:E.localize(0,null),scope:5});const _={...e.editorConfigurationBaseNode,properties:{"editor.tabSize":{type:"number",default:y.EDITOR_MODEL_DEFAULTS.tabSize,minimum:1,markdownDescription:E.localize(1,null,"`#editor.detectIndentation#`")},"editor.indentSize":{anyOf:[{type:"string",enum:["tabSize"]},{type:"number",minimum:1}],default:"tabSize",markdownDescription:E.localize(2,null)},"editor.insertSpaces":{type:"boolean",default:y.EDITOR_MODEL_DEFAULTS.insertSpaces,markdownDescription:E.localize(3,null,"`#editor.detectIndentation#`")},"editor.detectIndentation":{type:"boolean",default:y.EDITOR_MODEL_DEFAULTS.detectIndentation,markdownDescription:E.localize(4,null,"`#editor.tabSize#`","`#editor.insertSpaces#`")},"editor.trimAutoWhitespace":{type:"boolean",default:y.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,description:E.localize(5,null)},"editor.largeFileOptimizations":{type:"boolean",default:y.EDITOR_MODEL_DEFAULTS.largeFileOptimizations,description:E.localize(6,null)},"editor.wordBasedSuggestions":{enum:["off","currentDocument","matchingDocuments","allDocuments"],default:"matchingDocuments",enumDescriptions:[E.localize(7,null),E.localize(8,null),E.localize(9,null),E.localize(10,null)],description:E.localize(11,null)},"editor.semanticHighlighting.enabled":{enum:[!0,!1,"configuredByTheme"],enumDescriptions:[E.localize(12,null),E.localize(13,null),E.localize(14,null)],default:"configuredByTheme",description:E.localize(15,null)},"editor.stablePeek":{type:"boolean",default:!1,markdownDescription:E.localize(16,null)},"editor.maxTokenizationLineLength":{type:"integer",default:2e4,description:E.localize(17,null)},"editor.experimental.asyncTokenization":{type:"boolean",default:!1,description:E.localize(18,null),tags:["experimental"]},"editor.experimental.asyncTokenizationLogging":{type:"boolean",default:!1,description:E.localize(19,null)},"editor.experimental.asyncTokenizationVerification":{type:"boolean",default:!1,description:E.localize(20,null),tags:["experimental"]},"editor.language.brackets":{type:["array","null"],default:null,description:E.localize(21,null),items:{type:"array",items:[{type:"string",description:E.localize(22,null)},{type:"string",description:E.localize(23,null)}]}},"editor.language.colorizedBracketPairs":{type:["array","null"],default:null,description:E.localize(24,null),items:{type:"array",items:[{type:"string",description:E.localize(25,null)},{type:"string",description:E.localize(26,null)}]}},"diffEditor.maxComputationTime":{type:"number",default:L.diffEditorDefaultOptions.maxComputationTime,description:E.localize(27,null)},"diffEditor.maxFileSize":{type:"number",default:L.diffEditorDefaultOptions.maxFileSize,description:E.localize(28,null)},"diffEditor.renderSideBySide":{type:"boolean",default:L.diffEditorDefaultOptions.renderSideBySide,description:E.localize(29,null)},"diffEditor.renderSideBySideInlineBreakpoint":{type:"number",default:L.diffEditorDefaultOptions.renderSideBySideInlineBreakpoint,description:E.localize(30,null)},"diffEditor.useInlineViewWhenSpaceIsLimited":{type:"boolean",default:L.diffEditorDefaultOptions.useInlineViewWhenSpaceIsLimited,description:E.localize(31,null)},"diffEditor.renderMarginRevertIcon":{type:"boolean",default:L.diffEditorDefaultOptions.renderMarginRevertIcon,description:E.localize(32,null)},"diffEditor.ignoreTrimWhitespace":{type:"boolean",default:L.diffEditorDefaultOptions.ignoreTrimWhitespace,description:E.localize(33,null)},"diffEditor.renderIndicators":{type:"boolean",default:L.diffEditorDefaultOptions.renderIndicators,description:E.localize(34,null)},"diffEditor.codeLens":{type:"boolean",default:L.diffEditorDefaultOptions.diffCodeLens,description:E.localize(35,null)},"diffEditor.wordWrap":{type:"string",enum:["off","on","inherit"],default:L.diffEditorDefaultOptions.diffWordWrap,markdownEnumDescriptions:[E.localize(36,null),E.localize(37,null),E.localize(38,null,"`#editor.wordWrap#`")]},"diffEditor.diffAlgorithm":{type:"string",enum:["legacy","advanced"],default:L.diffEditorDefaultOptions.diffAlgorithm,markdownEnumDescriptions:[E.localize(39,null),E.localize(40,null)],tags:["experimental"]},"diffEditor.hideUnchangedRegions.enabled":{type:"boolean",default:L.diffEditorDefaultOptions.hideUnchangedRegions.enabled,markdownDescription:E.localize(41,null)},"diffEditor.hideUnchangedRegions.revealLineCount":{type:"integer",default:L.diffEditorDefaultOptions.hideUnchangedRegions.revealLineCount,markdownDescription:E.localize(42,null),minimum:1},"diffEditor.hideUnchangedRegions.minimumLineCount":{type:"integer",default:L.diffEditorDefaultOptions.hideUnchangedRegions.minimumLineCount,markdownDescription:E.localize(43,null),minimum:1},"diffEditor.hideUnchangedRegions.contextLineCount":{type:"integer",default:L.diffEditorDefaultOptions.hideUnchangedRegions.contextLineCount,markdownDescription:E.localize(44,null),minimum:1},"diffEditor.experimental.showMoves":{type:"boolean",default:L.diffEditorDefaultOptions.experimental.showMoves,markdownDescription:E.localize(45,null)},"diffEditor.experimental.showEmptyDecorations":{type:"boolean",default:L.diffEditorDefaultOptions.experimental.showEmptyDecorations,description:E.localize(46,null)}}};function v(r){return typeof r.type<"u"||typeof r.anyOf<"u"}for(const r of k.editorOptionsRegistry){const u=r.schema;if(typeof u<"u")if(v(u))_.properties[`editor.${r.name}`]=u;else for(const f in u)Object.hasOwnProperty.call(u,f)&&(_.properties[f]=u[f])}let b=null;function a(){return b===null&&(b=Object.create(null),Object.keys(_.properties).forEach(r=>{b[r]=!0})),b}function i(r){return a()[`editor.${r}`]||!1}e.isEditorConfigurationKey=i;function n(r){return a()[`diffEditor.${r}`]||!1}e.isDiffEditorConfigurationKey=n,p.Registry.as(S.Extensions.Configuration).registerConfiguration(_)}),define(se[80],oe([1,0,644,6,37,109,98]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PLAINTEXT_EXTENSION=e.PLAINTEXT_LANGUAGE_ID=e.ModesRegistry=e.EditorModesRegistry=e.Extensions=void 0,e.Extensions={ModesRegistry:"editor.modesRegistry"};class p{constructor(){this._onDidChangeLanguages=new k.Emitter,this.onDidChangeLanguages=this._onDidChangeLanguages.event,this._languages=[]}registerLanguage(v){return this._languages.push(v),this._onDidChangeLanguages.fire(void 0),{dispose:()=>{for(let b=0,a=this._languages.length;b{}};const s=new S.DisposableStore,l=s.add((0,L.renderMarkdown)(f,{...this._getRenderOptions(f,s),...c},d));return l.element.classList.add("rendered-markdown"),{element:l.element,dispose:()=>s.dispose()}}_getRenderOptions(f,c){return{codeBlockRenderer:async(d,s)=>{var l,o,g;let h;d?h=this._languageService.getLanguageIdByLanguageName(d):this._options.editor&&(h=(l=this._options.editor.getModel())===null||l===void 0?void 0:l.getLanguageId()),h||(h=v.PLAINTEXT_LANGUAGE_ID);const m=await(0,b.tokenizeToString)(this._languageService,s,h),C=document.createElement("span");if(C.innerHTML=(g=(o=i._ttpTokenizer)===null||o===void 0?void 0:o.createHTML(m))!==null&&g!==void 0?g:m,this._options.editor){const w=this._options.editor.getOption(50);(0,p.applyFontInfo)(C,w)}else this._options.codeBlockFontFamily&&(C.style.fontFamily=this._options.codeBlockFontFamily);return this._options.codeBlockFontSize!==void 0&&(C.style.fontSize=this._options.codeBlockFontSize),C},asyncRenderCallback:()=>this._onDidRenderAsync.fire(),actionHandler:{callback:d=>t(this._openerService,d,f.isTrusted),disposables:c}}}};e.MarkdownRenderer=n,n._ttpTokenizer=(0,k.createTrustedTypesPolicy)("tokenizeToString",{createHTML(u){return u}}),e.MarkdownRenderer=n=i=ke([ge(1,_.ILanguageService),ge(2,a.IOpenerService)],n);async function t(u,f,c){try{return await u.open(f,{fromUserGesture:!0,allowContributedOpeners:!0,allowCommands:r(c)})}catch(d){return(0,y.onUnexpectedError)(d),!1}}e.openLinkFromMarkdown=t;function r(u){return u===!0?!0:u&&Array.isArray(u.enabledCommands)?u.enabledCommands:!1}}),define(se[789],oe([1,0,2,6,7,34,27,36,227,76,57,8,104,58,632,17,69,48,449]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HoverWidget=void 0;const c=y.$;let d=class extends v.Widget{get _targetWindow(){return y.getWindow(this._target.targetElements[0])}get _targetDocumentElement(){return y.getWindow(this._target.targetElements[0]).document.documentElement}get isDisposed(){return this._isDisposed}get isMouseIn(){return this._lockMouseTracker.isMouseIn}get domNode(){return this._hover.containerDomNode}get onDispose(){return this._onDispose.event}get onRequestLayout(){return this._onRequestLayout.event}get anchor(){return this._hoverPosition===2?0:1}get x(){return this._x}get y(){return this._y}get isLocked(){return this._isLocked}set isLocked(g){this._isLocked!==g&&(this._isLocked=g,this._hoverContainer.classList.toggle("locked",this._isLocked))}constructor(g,h,m,C,w,D){var I,T,A,P,N,M,R,x;super(),this._keybindingService=h,this._configurationService=m,this._openerService=C,this._instantiationService=w,this._accessibilityService=D,this._messageListeners=new L.DisposableStore,this._isDisposed=!1,this._forcePosition=!1,this._x=0,this._y=0,this._isLocked=!1,this._enableFocusTraps=!1,this._addedFocusTrap=!1,this._onDispose=this._register(new k.Emitter),this._onRequestLayout=this._register(new k.Emitter),this._linkHandler=g.linkHandler||(F=>(0,i.openLinkFromMarkdown)(this._openerService,F,(0,n.isMarkdownString)(g.content)?g.content.isTrusted:void 0)),this._target="targetElements"in g.target?g.target:new l(g.target),this._hoverPointer=!((I=g.appearance)===null||I===void 0)&&I.showPointer?c("div.workbench-hover-pointer"):void 0,this._hover=this._register(new _.HoverWidget),this._hover.containerDomNode.classList.add("workbench-hover","fadeIn"),!((T=g.appearance)===null||T===void 0)&&T.compact&&this._hover.containerDomNode.classList.add("workbench-hover","compact"),!((A=g.appearance)===null||A===void 0)&&A.skipFadeInAnimation&&this._hover.containerDomNode.classList.add("skip-fade-in"),g.additionalClasses&&this._hover.containerDomNode.classList.add(...g.additionalClasses),!((P=g.position)===null||P===void 0)&&P.forcePosition&&(this._forcePosition=!0),g.trapFocus&&(this._enableFocusTraps=!0),this._hoverPosition=(M=(N=g.position)===null||N===void 0?void 0:N.hoverPosition)!==null&&M!==void 0?M:3,this.onmousedown(this._hover.containerDomNode,F=>F.stopPropagation()),this.onkeydown(this._hover.containerDomNode,F=>{F.equals(9)&&this.dispose()}),this._register(y.addDisposableListener(this._targetWindow,"blur",()=>this.dispose()));const O=c("div.hover-row.markdown-hover"),B=c("div.hover-contents");if(typeof g.content=="string")B.textContent=g.content,B.style.whiteSpace="pre-wrap";else if(g.content instanceof HTMLElement)B.appendChild(g.content),B.classList.add("html-hover-contents");else{const F=g.content,q=this._instantiationService.createInstance(i.MarkdownRenderer,{codeBlockFontFamily:this._configurationService.getValue("editor").fontFamily||p.EDITOR_FONT_DEFAULTS.fontFamily}),{element:ie}=q.render(F,{actionHandler:{callback:ae=>this._linkHandler(ae),disposables:this._messageListeners},asyncRenderCallback:()=>{B.classList.add("code-hover-contents"),this.layout(),this._onRequestLayout.fire()}});B.appendChild(ie)}if(O.appendChild(B),this._hover.contentsDomNode.appendChild(O),g.actions&&g.actions.length>0){const F=c("div.hover-row.status-bar"),q=c("div.actions");g.actions.forEach(ie=>{const ae=this._keybindingService.lookupKeybinding(ie.commandId),ne=ae?ae.getLabel():null;_.HoverAction.render(q,{label:ie.label,commandId:ie.commandId,run:$=>{ie.run($),this.dispose()},iconClass:ie.iconClass},ne)}),F.appendChild(q),this._hover.containerDomNode.appendChild(F)}this._hoverContainer=c("div.workbench-hover-container"),this._hoverPointer&&this._hoverContainer.appendChild(this._hoverPointer),this._hoverContainer.appendChild(this._hover.containerDomNode);let W;if(g.actions&&g.actions.length>0?W=!1:((R=g.persistence)===null||R===void 0?void 0:R.hideOnHover)===void 0?W=typeof g.content=="string"||(0,n.isMarkdownString)(g.content)&&!g.content.value.includes("](")&&!g.content.value.includes(""):W=g.persistence.hideOnHover,W&&(!((x=g.appearance)===null||x===void 0)&&x.showHoverHint)){const F=c("div.hover-row.status-bar"),q=c("div.info");q.textContent=(0,t.localize)(0,null,r.isMacintosh?"Option":"Alt"),F.appendChild(q),this._hover.containerDomNode.appendChild(F)}const V=[...this._target.targetElements];W||V.push(this._hoverContainer);const K=this._register(new s(V));if(this._register(K.onMouseOut(()=>{this._isLocked||this.dispose()})),W){const F=[...this._target.targetElements,this._hoverContainer];this._lockMouseTracker=this._register(new s(F)),this._register(this._lockMouseTracker.onMouseOut(()=>{this._isLocked||this.dispose()}))}else this._lockMouseTracker=K}addFocusTrap(){if(!this._enableFocusTraps||this._addedFocusTrap)return;this._addedFocusTrap=!0;const g=this._hover.containerDomNode,h=this.findLastFocusableChild(this._hover.containerDomNode);if(h){const m=y.prepend(this._hoverContainer,c("div")),C=y.append(this._hoverContainer,c("div"));m.tabIndex=0,C.tabIndex=0,this._register(y.addDisposableListener(C,"focus",w=>{g.focus(),w.preventDefault()})),this._register(y.addDisposableListener(m,"focus",w=>{h.focus(),w.preventDefault()}))}}findLastFocusableChild(g){if(g.hasChildNodes())for(let h=0;h=0)return w}const C=this.findLastFocusableChild(m);if(C)return C}}render(g){var h;g.appendChild(this._hoverContainer);const C=this._hoverContainer.contains(this._hoverContainer.ownerDocument.activeElement)&&(0,_.getHoverAccessibleViewHint)(this._configurationService.getValue("accessibility.verbosity.hover")===!0&&this._accessibilityService.isScreenReaderOptimized(),(h=this._keybindingService.lookupKeybinding("editor.action.accessibleView"))===null||h===void 0?void 0:h.getAriaLabel());C&&(0,f.status)(C),this.layout(),this.addFocusTrap()}layout(){this._hover.containerDomNode.classList.remove("right-aligned"),this._hover.contentsDomNode.style.maxHeight="";const g=P=>{const N=y.getDomNodeZoomLevel(P),M=P.getBoundingClientRect();return{top:M.top*N,bottom:M.bottom*N,right:M.right*N,left:M.left*N}},h=this._target.targetElements.map(P=>g(P)),m=Math.min(...h.map(P=>P.top)),C=Math.max(...h.map(P=>P.right)),w=Math.max(...h.map(P=>P.bottom)),D=Math.min(...h.map(P=>P.left)),I=C-D,T=w-m,A={top:m,right:C,bottom:w,left:D,width:I,height:T,center:{x:D+I/2,y:m+T/2}};if(this.adjustHorizontalHoverPosition(A),this.adjustVerticalHoverPosition(A),this.adjustHoverMaxHeight(A),this._hoverContainer.style.padding="",this._hoverContainer.style.margin="",this._hoverPointer){switch(this._hoverPosition){case 1:A.left+=3,A.right+=3,this._hoverContainer.style.paddingLeft="3px",this._hoverContainer.style.marginLeft="-3px";break;case 0:A.left-=3,A.right-=3,this._hoverContainer.style.paddingRight="3px",this._hoverContainer.style.marginRight="-3px";break;case 2:A.top+=3,A.bottom+=3,this._hoverContainer.style.paddingTop="3px",this._hoverContainer.style.marginTop="-3px";break;case 3:A.top-=3,A.bottom-=3,this._hoverContainer.style.paddingBottom="3px",this._hoverContainer.style.marginBottom="-3px";break}A.center.x=A.left+I/2,A.center.y=A.top+T/2}this.computeXCordinate(A),this.computeYCordinate(A),this._hoverPointer&&(this._hoverPointer.classList.remove("top"),this._hoverPointer.classList.remove("left"),this._hoverPointer.classList.remove("right"),this._hoverPointer.classList.remove("bottom"),this.setHoverPointerPosition(A)),this._hover.onContentsChanged()}computeXCordinate(g){const h=this._hover.containerDomNode.clientWidth+2;this._target.x!==void 0?this._x=this._target.x:this._hoverPosition===1?this._x=g.right:this._hoverPosition===0?this._x=g.left-h:(this._hoverPointer?this._x=g.center.x-this._hover.containerDomNode.clientWidth/2:this._x=g.left,this._x+h>=this._targetDocumentElement.clientWidth&&(this._hover.containerDomNode.classList.add("right-aligned"),this._x=Math.max(this._targetDocumentElement.clientWidth-h-2,this._targetDocumentElement.clientLeft))),this._xthis._targetWindow.innerHeight&&(this._y=g.bottom)}adjustHorizontalHoverPosition(g){if(this._target.x===void 0){if(this._forcePosition){const h=(this._hoverPointer?3:0)+2;this._hoverPosition===1?this._hover.containerDomNode.style.maxWidth=`${this._targetDocumentElement.clientWidth-g.right-h}px`:this._hoverPosition===0&&(this._hover.containerDomNode.style.maxWidth=`${g.left-h}px`);return}this._hoverPosition===1?this._targetDocumentElement.clientWidth-g.right=this._hover.containerDomNode.clientWidth?this._hoverPosition=0:this._hoverPosition=2):this._hoverPosition===0&&(g.left=this._hover.containerDomNode.clientWidth?this._hoverPosition=1:this._hoverPosition=2),g.left-this._hover.containerDomNode.clientWidth<=this._targetDocumentElement.clientLeft&&(this._hoverPosition=1))}}adjustVerticalHoverPosition(g){this._target.y!==void 0||this._forcePosition||(this._hoverPosition===3?g.top-this._hover.containerDomNode.clientHeight<0&&(this._hoverPosition=2):this._hoverPosition===2&&g.bottom+this._hover.containerDomNode.clientHeight>this._targetWindow.innerHeight&&(this._hoverPosition=3))}adjustHoverMaxHeight(g){let h=this._targetWindow.innerHeight/2;if(this._forcePosition){const m=(this._hoverPointer?3:0)+2;this._hoverPosition===3?h=Math.min(h,g.top-m):this._hoverPosition===2&&(h=Math.min(h,this._targetWindow.innerHeight-g.bottom-m))}if(this._hover.containerDomNode.style.maxHeight=`${h}px`,this._hover.contentsDomNode.clientHeightg.height?this._hoverPointer.style.top=`${g.center.y-(this._y-h)-3}px`:this._hoverPointer.style.top=`${Math.round(h/2)-3}px`;break}case 3:case 2:{this._hoverPointer.classList.add(this._hoverPosition===3?"bottom":"top");const h=this._hover.containerDomNode.clientWidth;let m=Math.round(h/2)-3;const C=this._x+m;(Cg.right)&&(m=g.center.x-this._x-3),this._hoverPointer.style.left=`${m}px`;break}}}focus(){this._hover.containerDomNode.focus()}dispose(){this._isDisposed||(this._onDispose.fire(),this._hoverContainer.remove(),this._messageListeners.dispose(),this._target.dispose(),super.dispose()),this._isDisposed=!0}};e.HoverWidget=d,e.HoverWidget=d=ke([ge(1,E.IKeybindingService),ge(2,S.IConfigurationService),ge(3,b.IOpenerService),ge(4,a.IInstantiationService),ge(5,u.IAccessibilityService)],d);class s extends v.Widget{get onMouseOut(){return this._onMouseOut.event}get isMouseIn(){return this._isMouseIn}constructor(g){super(),this._elements=g,this._isMouseIn=!0,this._onMouseOut=this._register(new k.Emitter),this._elements.forEach(h=>this.onmouseover(h,()=>this._onTargetMouseOver(h))),this._elements.forEach(h=>this.onmouseleave(h,()=>this._onTargetMouseLeave(h)))}_onTargetMouseOver(g){this._isMouseIn=!0,this._clearEvaluateMouseStateTimeout(g)}_onTargetMouseLeave(g){this._isMouseIn=!1,this._evaluateMouseState(g)}_evaluateMouseState(g){this._clearEvaluateMouseStateTimeout(g),this._mouseTimeout=y.getWindow(g).setTimeout(()=>this._fireIfMouseOutside(),0)}_clearEvaluateMouseStateTimeout(g){this._mouseTimeout&&(y.getWindow(g).clearTimeout(this._mouseTimeout),this._mouseTimeout=void 0)}_fireIfMouseOutside(){this._isMouseIn||this._onMouseOut.fire()}}class l{constructor(g){this._element=g,this.targetElements=[this._element]}dispose(){}}}),define(se[32],oe([1,0,6,2,11,151,113,133,514,612,515,518,234,8,27,43,45,80,517]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ResolvedLanguageConfiguration=e.LanguageConfigurationRegistry=e.LanguageConfigurationChangeEvent=e.getScopedLineTokens=e.getIndentationAtPosition=e.LanguageConfigurationService=e.ILanguageConfigurationService=e.LanguageConfigurationServiceChangeEvent=void 0;class d{constructor(M){this.languageId=M}affects(M){return this.languageId?this.languageId===M:!0}}e.LanguageConfigurationServiceChangeEvent=d,e.ILanguageConfigurationService=(0,n.createDecorator)("languageConfigurationService");let s=class extends k.Disposable{constructor(M,R){super(),this.configurationService=M,this.languageService=R,this._registry=this._register(new A),this.onDidChangeEmitter=this._register(new L.Emitter),this.onDidChange=this.onDidChangeEmitter.event,this.configurations=new Map;const x=new Set(Object.values(o));this._register(this.configurationService.onDidChangeConfiguration(O=>{const B=O.change.keys.some(V=>x.has(V)),W=O.change.overrides.filter(([V,K])=>K.some(F=>x.has(F))).map(([V])=>V);if(B)this.configurations.clear(),this.onDidChangeEmitter.fire(new d(void 0));else for(const V of W)this.languageService.isRegisteredLanguageId(V)&&(this.configurations.delete(V),this.onDidChangeEmitter.fire(new d(V)))})),this._register(this._registry.onDidChange(O=>{this.configurations.delete(O.languageId),this.onDidChangeEmitter.fire(new d(O.languageId))}))}register(M,R,x){return this._registry.register(M,R,x)}getLanguageConfiguration(M){let R=this.configurations.get(M);return R||(R=l(M,this._registry,this.configurationService,this.languageService),this.configurations.set(M,R)),R}};e.LanguageConfigurationService=s,e.LanguageConfigurationService=s=ke([ge(0,t.IConfigurationService),ge(1,r.ILanguageService)],s);function l(N,M,R,x){let O=M.getLanguageConfiguration(N);if(!O){if(!x.isRegisteredLanguageId(N))return new P(N,{});O=new P(N,{})}const B=g(O.languageId,R),W=D([O.underlyingConfig,B]);return new P(O.languageId,W)}const o={brackets:"editor.language.brackets",colorizedBracketPairs:"editor.language.colorizedBracketPairs"};function g(N,M){const R=M.getValue(o.brackets,{overrideIdentifier:N}),x=M.getValue(o.colorizedBracketPairs,{overrideIdentifier:N});return{brackets:h(R),colorizedBracketPairs:h(x)}}function h(N){if(Array.isArray(N))return N.map(M=>{if(!(!Array.isArray(M)||M.length!==2))return[M[0],M[1]]}).filter(M=>!!M)}function m(N,M,R){const x=N.getLineContent(M);let O=y.getLeadingWhitespace(x);return O.length>R-1&&(O=O.substring(0,R-1)),O}e.getIndentationAtPosition=m;function C(N,M,R){N.tokenization.forceTokenization(M);const x=N.tokenization.getLineTokens(M),O=typeof R>"u"?N.getLineMaxColumn(M)-1:R-1;return(0,p.createScopedLineTokens)(x,O)}e.getScopedLineTokens=C;class w{constructor(M){this.languageId=M,this._resolved=null,this._entries=[],this._order=0,this._resolved=null}register(M,R){const x=new I(M,R,++this._order);return this._entries.push(x),this._resolved=null,(0,k.toDisposable)(()=>{for(let O=0;OM.configuration)))}}function D(N){let M={comments:void 0,brackets:void 0,wordPattern:void 0,indentationRules:void 0,onEnterRules:void 0,autoClosingPairs:void 0,surroundingPairs:void 0,autoCloseBefore:void 0,folding:void 0,colorizedBracketPairs:void 0,__electricCharacterSupport:void 0};for(const R of N)M={comments:R.comments||M.comments,brackets:R.brackets||M.brackets,wordPattern:R.wordPattern||M.wordPattern,indentationRules:R.indentationRules||M.indentationRules,onEnterRules:R.onEnterRules||M.onEnterRules,autoClosingPairs:R.autoClosingPairs||M.autoClosingPairs,surroundingPairs:R.surroundingPairs||M.surroundingPairs,autoCloseBefore:R.autoCloseBefore||M.autoCloseBefore,folding:R.folding||M.folding,colorizedBracketPairs:R.colorizedBracketPairs||M.colorizedBracketPairs,__electricCharacterSupport:R.__electricCharacterSupport||M.__electricCharacterSupport};return M}class I{constructor(M,R,x){this.configuration=M,this.priority=R,this.order=x}static cmp(M,R){return M.priority===R.priority?M.order-R.order:M.priority-R.priority}}class T{constructor(M){this.languageId=M}}e.LanguageConfigurationChangeEvent=T;class A extends k.Disposable{constructor(){super(),this._entries=new Map,this._onDidChange=this._register(new L.Emitter),this.onDidChange=this._onDidChange.event,this._register(this.register(f.PLAINTEXT_LANGUAGE_ID,{brackets:[["(",")"],["[","]"],["{","}"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"`",close:"`"}],colorizedBracketPairs:[],folding:{offSide:!0}},0))}register(M,R,x=0){let O=this._entries.get(M);O||(O=new w(M),this._entries.set(M,O));const B=O.register(R,x);return this._onDidChange.fire(new T(M)),(0,k.toDisposable)(()=>{B.dispose(),this._onDidChange.fire(new T(M))})}getLanguageConfiguration(M){const R=this._entries.get(M);return R?.getResolvedConfiguration()||null}}e.LanguageConfigurationRegistry=A;class P{constructor(M,R){this.languageId=M,this.underlyingConfig=R,this._brackets=null,this._electricCharacter=null,this._onEnterSupport=this.underlyingConfig.brackets||this.underlyingConfig.indentationRules||this.underlyingConfig.onEnterRules?new a.OnEnterSupport(this.underlyingConfig):null,this.comments=P._handleComments(this.underlyingConfig),this.characterPair=new _.CharacterPairSupport(this.underlyingConfig),this.wordDefinition=this.underlyingConfig.wordPattern||E.DEFAULT_WORD_REGEXP,this.indentationRules=this.underlyingConfig.indentationRules,this.underlyingConfig.indentationRules?this.indentRulesSupport=new b.IndentRulesSupport(this.underlyingConfig.indentationRules):this.indentRulesSupport=null,this.foldingRules=this.underlyingConfig.folding||{},this.bracketsNew=new c.LanguageBracketsConfiguration(M,this.underlyingConfig)}getWordDefinition(){return(0,E.ensureValidWordDefinition)(this.wordDefinition)}get brackets(){return!this._brackets&&this.underlyingConfig.brackets&&(this._brackets=new i.RichEditBrackets(this.languageId,this.underlyingConfig.brackets)),this._brackets}get electricCharacter(){return this._electricCharacter||(this._electricCharacter=new v.BracketElectricCharacterSupport(this.brackets)),this._electricCharacter}onEnter(M,R,x,O){return this._onEnterSupport?this._onEnterSupport.onEnter(M,R,x,O):null}getAutoClosingPairs(){return new S.AutoClosingPairs(this.characterPair.getAutoClosingPairs())}getAutoCloseBeforeSet(M){return this.characterPair.getAutoCloseBeforeSet(M)}getSurroundingPairs(){return this.characterPair.getSurroundingPairs()}static _handleComments(M){const R=M.comments;if(!R)return null;const x={};if(R.lineComment&&(x.lineCommentToken=R.lineComment),R.blockComment){const[O,B]=R.blockComment;x.blockCommentStartToken=O,x.blockCommentEndToken=B}return x}}e.ResolvedLanguageConfiguration=P,(0,u.registerSingleton)(e.ILanguageConfigurationService,s,1)}),define(se[247],oe([1,0,14,2,327,603,5,32,643,51,189,13,64,61,12,18,205,112,62,44,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorWorkerClient=e.EditorWorkerHost=e.EditorWorkerService=void 0;const l=60*1e3,o=5*60*1e3;function g(A,P){const N=A.getModel(P);return!(!N||N.isTooLargeForSyncing())}let h=class extends k.Disposable{constructor(P,N,M,R,x){super(),this._modelService=P,this._workerManager=this._register(new C(this._modelService,R)),this._logService=M,this._register(x.linkProvider.register({language:"*",hasAccessToAllModels:!0},{provideLinks:(O,B)=>g(this._modelService,O.uri)?this._workerManager.withWorker().then(W=>W.computeLinks(O.uri)).then(W=>W&&{links:W}):Promise.resolve({links:[]})})),this._register(x.completionProvider.register("*",new m(this._workerManager,N,this._modelService,R)))}dispose(){super.dispose()}canComputeUnicodeHighlights(P){return g(this._modelService,P)}computedUnicodeHighlights(P,N,M){return this._workerManager.withWorker().then(R=>R.computedUnicodeHighlights(P,N,M))}async computeDiff(P,N,M,R){const x=await this._workerManager.withWorker().then(W=>W.computeDiff(P,N,M,R));if(!x)return null;return{identical:x.identical,quitEarly:x.quitEarly,changes:B(x.changes),moves:x.moves.map(W=>new u.MovedText(new f.LineRangeMapping(new c.LineRange(W[0],W[1]),new c.LineRange(W[2],W[3])),B(W[4])))};function B(W){return W.map(V=>{var K;return new f.DetailedLineRangeMapping(new c.LineRange(V[0],V[1]),new c.LineRange(V[2],V[3]),(K=V[4])===null||K===void 0?void 0:K.map(F=>new f.RangeMapping(new S.Range(F[0],F[1],F[2],F[3]),new S.Range(F[4],F[5],F[6],F[7]))))})}}computeMoreMinimalEdits(P,N,M=!1){if((0,a.isNonEmptyArray)(N)){if(!g(this._modelService,P))return Promise.resolve(N);const R=n.StopWatch.create(),x=this._workerManager.withWorker().then(O=>O.computeMoreMinimalEdits(P,N,M));return x.finally(()=>this._logService.trace("FORMAT#computeMoreMinimalEdits",P.toString(!0),R.elapsed())),Promise.race([x,(0,L.timeout)(1e3).then(()=>N)])}else return Promise.resolve(void 0)}canNavigateValueSet(P){return g(this._modelService,P)}navigateValueSet(P,N,M){return this._workerManager.withWorker().then(R=>R.navigateValueSet(P,N,M))}canComputeWordRanges(P){return g(this._modelService,P)}computeWordRanges(P,N){return this._workerManager.withWorker().then(M=>M.computeWordRanges(P,N))}};e.EditorWorkerService=h,e.EditorWorkerService=h=ke([ge(0,v.IModelService),ge(1,b.ITextResourceConfigurationService),ge(2,i.ILogService),ge(3,p.ILanguageConfigurationService),ge(4,r.ILanguageFeaturesService)],h);class m{constructor(P,N,M,R){this.languageConfigurationService=R,this._debugDisplayName="wordbasedCompletions",this._workerManager=P,this._configurationService=N,this._modelService=M}async provideCompletionItems(P,N){const M=this._configurationService.getValue(P.uri,N,"editor");if(M.wordBasedSuggestions==="off")return;const R=[];if(M.wordBasedSuggestions==="currentDocument")g(this._modelService,P.uri)&&R.push(P.uri);else for(const F of this._modelService.getModels())g(this._modelService,F.uri)&&(F===P?R.unshift(F.uri):(M.wordBasedSuggestions==="allDocuments"||F.getLanguageId()===P.getLanguageId())&&R.push(F.uri));if(R.length===0)return;const x=this.languageConfigurationService.getLanguageConfiguration(P.getLanguageId()).getWordDefinition(),O=P.getWordAtPosition(N),B=O?new S.Range(N.lineNumber,O.startColumn,N.lineNumber,O.endColumn):S.Range.fromPositions(N),W=B.setEndPosition(N.lineNumber,N.column),K=await(await this._workerManager.withWorker()).textualSuggest(R,O?.word,x);if(K)return{duration:K.duration,suggestions:K.words.map(F=>({kind:18,label:F,insertText:F,range:{insert:W,replace:B}}))}}}class C extends k.Disposable{constructor(P,N){super(),this.languageConfigurationService=N,this._modelService=P,this._editorWorkerClient=null,this._lastWorkerUsedTime=new Date().getTime(),this._register(new s.WindowIntervalTimer).cancelAndSet(()=>this._checkStopIdleWorker(),Math.round(o/2),d.$window),this._register(this._modelService.onModelRemoved(R=>this._checkStopEmptyWorker()))}dispose(){this._editorWorkerClient&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null),super.dispose()}_checkStopEmptyWorker(){if(!this._editorWorkerClient)return;this._modelService.getModels().length===0&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}_checkStopIdleWorker(){if(!this._editorWorkerClient)return;new Date().getTime()-this._lastWorkerUsedTime>o&&(this._editorWorkerClient.dispose(),this._editorWorkerClient=null)}withWorker(){return this._lastWorkerUsedTime=new Date().getTime(),this._editorWorkerClient||(this._editorWorkerClient=new T(this._modelService,!1,"editorWorkerService",this.languageConfigurationService)),Promise.resolve(this._editorWorkerClient)}}class w extends k.Disposable{constructor(P,N,M){if(super(),this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),this._proxy=P,this._modelService=N,!M){const R=new L.IntervalTimer;R.cancelAndSet(()=>this._checkStopModelSync(),Math.round(l/2)),this._register(R)}}dispose(){for(const P in this._syncedModels)(0,k.dispose)(this._syncedModels[P]);this._syncedModels=Object.create(null),this._syncedModelsLastUsedTime=Object.create(null),super.dispose()}ensureSyncedResources(P,N){for(const M of P){const R=M.toString();this._syncedModels[R]||this._beginModelSync(M,N),this._syncedModels[R]&&(this._syncedModelsLastUsedTime[R]=new Date().getTime())}}_checkStopModelSync(){const P=new Date().getTime(),N=[];for(const M in this._syncedModelsLastUsedTime)P-this._syncedModelsLastUsedTime[M]>l&&N.push(M);for(const M of N)this._stopModelSync(M)}_beginModelSync(P,N){const M=this._modelService.getModel(P);if(!M||!N&&M.isTooLargeForSyncing())return;const R=P.toString();this._proxy.acceptNewModel({url:M.uri.toString(),lines:M.getLinesContent(),EOL:M.getEOL(),versionId:M.getVersionId()});const x=new k.DisposableStore;x.add(M.onDidChangeContent(O=>{this._proxy.acceptModelChanged(R.toString(),O)})),x.add(M.onWillDispose(()=>{this._stopModelSync(R)})),x.add((0,k.toDisposable)(()=>{this._proxy.acceptRemovedModel(R)})),this._syncedModels[R]=x}_stopModelSync(P){const N=this._syncedModels[P];delete this._syncedModels[P],delete this._syncedModelsLastUsedTime[P],(0,k.dispose)(N)}}class D{constructor(P){this._instance=P,this._proxyObj=Promise.resolve(this._instance)}dispose(){this._instance.dispose()}getProxyObject(){return this._proxyObj}}class I{constructor(P){this._workerClient=P}fhr(P,N){return this._workerClient.fhr(P,N)}}e.EditorWorkerHost=I;class T extends k.Disposable{constructor(P,N,M,R){super(),this.languageConfigurationService=R,this._disposed=!1,this._modelService=P,this._keepIdleModels=N,this._workerFactory=new E.DefaultWorkerFactory(M),this._worker=null,this._modelManager=null}fhr(P,N){throw new Error("Not implemented!")}_getOrCreateWorker(){if(!this._worker)try{this._worker=this._register(new y.SimpleWorkerClient(this._workerFactory,"vs/editor/common/services/editorSimpleWorker",new I(this)))}catch(P){(0,y.logOnceWebWorkerWarning)(P),this._worker=new D(new _.EditorSimpleWorker(new I(this),null))}return this._worker}_getProxy(){return this._getOrCreateWorker().getProxyObject().then(void 0,P=>((0,y.logOnceWebWorkerWarning)(P),this._worker=new D(new _.EditorSimpleWorker(new I(this),null)),this._getOrCreateWorker().getProxyObject()))}_getOrCreateModelManager(P){return this._modelManager||(this._modelManager=this._register(new w(P,this._modelService,this._keepIdleModels))),this._modelManager}async _withSyncedResources(P,N=!1){return this._disposed?Promise.reject((0,t.canceled)()):this._getProxy().then(M=>(this._getOrCreateModelManager(M).ensureSyncedResources(P,N),M))}computedUnicodeHighlights(P,N,M){return this._withSyncedResources([P]).then(R=>R.computeUnicodeHighlights(P.toString(),N,M))}computeDiff(P,N,M,R){return this._withSyncedResources([P,N],!0).then(x=>x.computeDiff(P.toString(),N.toString(),M,R))}computeMoreMinimalEdits(P,N,M){return this._withSyncedResources([P]).then(R=>R.computeMoreMinimalEdits(P.toString(),N,M))}computeLinks(P){return this._withSyncedResources([P]).then(N=>N.computeLinks(P.toString()))}computeDefaultDocumentColors(P){return this._withSyncedResources([P]).then(N=>N.computeDefaultDocumentColors(P.toString()))}async textualSuggest(P,N,M){const R=await this._withSyncedResources(P),x=M.source,O=M.flags;return R.textualSuggest(P.map(B=>B.toString()),N,x,O)}computeWordRanges(P,N){return this._withSyncedResources([P]).then(M=>{const R=this._modelService.getModel(P);if(!R)return Promise.resolve(null);const x=this.languageConfigurationService.getLanguageConfiguration(R.getLanguageId()).getWordDefinition(),O=x.source,B=x.flags;return M.computeWordRanges(P.toString(),N,O,B)})}navigateValueSet(P,N,M){return this._withSyncedResources([P]).then(R=>{const x=this._modelService.getModel(P);if(!x)return null;const O=this.languageConfigurationService.getLanguageConfiguration(x.getLanguageId()).getWordDefinition(),B=O.source,W=O.flags;return R.navigateValueSet(P.toString(),N,M,B,W)})}dispose(){super.dispose(),this._disposed=!0}}e.EditorWorkerClient=T}),define(se[790],oe([1,0,55,247]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createWebWorker=void 0;function y(S,p,_){return new E(S,p,_)}e.createWebWorker=y;class E extends k.EditorWorkerClient{constructor(p,_,v){super(p,v.keepIdleModels||!1,v.label,_),this._foreignModuleId=v.moduleId,this._foreignModuleCreateData=v.createData||null,this._foreignModuleHost=v.host||null,this._foreignProxy=null}fhr(p,_){if(!this._foreignModuleHost||typeof this._foreignModuleHost[p]!="function")return Promise.reject(new Error("Missing method "+p+" or missing main thread foreign host."));try{return Promise.resolve(this._foreignModuleHost[p].apply(this._foreignModuleHost,_))}catch(v){return Promise.reject(v)}}_getForeignProxy(){return this._foreignProxy||(this._foreignProxy=this._getProxy().then(p=>{const _=this._foreignModuleHost?(0,L.getAllMethodNames)(this._foreignModuleHost):[];return p.loadForeignModule(this._foreignModuleId,this._foreignModuleCreateData,_).then(v=>{this._foreignModuleCreateData=null;const b=(n,t)=>p.fmr(n,t),a=(n,t)=>function(){const r=Array.prototype.slice.call(arguments,0);return t(n,r)},i={};for(const n of v)i[n]=a(n,b);return i})})),this._foreignProxy}getProxy(){return this._getForeignProxy()}withSyncedResources(p){return this._withSyncedResources(p).then(_=>this.getProxy())}}}),define(se[248],oe([1,0,11,113,133,32]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getIndentMetadata=e.getIndentActionForType=e.getIndentForEnter=e.getGoodIndentForLine=e.getInheritIndentForLine=void 0;function S(i,n,t){const r=i.tokenization.getLanguageIdAtPosition(n,0);if(n>1){let u,f=-1;for(u=n-1;u>=1;u--){if(i.tokenization.getLanguageIdAtPosition(u,0)!==r)return f;const c=i.getLineContent(u);if(t.shouldIgnore(c)||/^\s+$/.test(c)||c===""){f=u;continue}return u}}return-1}function p(i,n,t,r=!0,u){if(i<4)return null;const f=u.getLanguageConfiguration(n.tokenization.getLanguageId()).indentRulesSupport;if(!f)return null;if(t<=1)return{indentation:"",action:null};for(let s=t-1;s>0&&n.getLineContent(s)==="";s--)if(s===1)return{indentation:"",action:null};const c=S(n,t,f);if(c<0)return null;if(c<1)return{indentation:"",action:null};const d=n.getLineContent(c);if(f.shouldIncrease(d)||f.shouldIndentNextLine(d))return{indentation:L.getLeadingWhitespace(d),action:k.IndentAction.Indent,line:c};if(f.shouldDecrease(d))return{indentation:L.getLeadingWhitespace(d),action:null,line:c};{if(c===1)return{indentation:L.getLeadingWhitespace(n.getLineContent(c)),action:null,line:c};const s=c-1,l=f.getIndentMetadata(n.getLineContent(s));if(!(l&3)&&l&4){let o=0;for(let g=s-1;g>0;g--)if(!f.shouldIndentNextLine(n.getLineContent(g))){o=g;break}return{indentation:L.getLeadingWhitespace(n.getLineContent(o+1)),action:null,line:o+1}}if(r)return{indentation:L.getLeadingWhitespace(n.getLineContent(c)),action:null,line:c};for(let o=c;o>0;o--){const g=n.getLineContent(o);if(f.shouldIncrease(g))return{indentation:L.getLeadingWhitespace(g),action:k.IndentAction.Indent,line:o};if(f.shouldIndentNextLine(g)){let h=0;for(let m=o-1;m>0;m--)if(!f.shouldIndentNextLine(n.getLineContent(o))){h=m;break}return{indentation:L.getLeadingWhitespace(n.getLineContent(h+1)),action:null,line:h+1}}else if(f.shouldDecrease(g))return{indentation:L.getLeadingWhitespace(g),action:null,line:o}}return{indentation:L.getLeadingWhitespace(n.getLineContent(1)),action:null,line:1}}}e.getInheritIndentForLine=p;function _(i,n,t,r,u,f){if(i<4)return null;const c=f.getLanguageConfiguration(t);if(!c)return null;const d=f.getLanguageConfiguration(t).indentRulesSupport;if(!d)return null;const s=p(i,n,r,void 0,f),l=n.getLineContent(r);if(s){const o=s.line;if(o!==void 0){let g=!0;for(let h=o;h0&&f.getLanguageId(0)!==c.languageId?(s=!0,l=d.substr(0,t.startColumn-1-c.firstCharOffset)):l=f.getLineContent().substring(0,t.startColumn-1);let o;t.isEmpty()?o=d.substr(t.startColumn-1-c.firstCharOffset):o=(0,E.getScopedLineTokens)(n,t.endLineNumber,t.endColumn).getLineContent().substr(t.endColumn-1-c.firstCharOffset);const g=u.getLanguageConfiguration(c.languageId).indentRulesSupport;if(!g)return null;const h=l,m=L.getLeadingWhitespace(l),C={tokenization:{getLineTokens:T=>n.tokenization.getLineTokens(T),getLanguageId:()=>n.getLanguageId(),getLanguageIdAtPosition:(T,A)=>n.getLanguageIdAtPosition(T,A)},getLineContent:T=>T===t.startLineNumber?h:n.getLineContent(T)},w=L.getLeadingWhitespace(f.getLineContent()),D=p(i,C,t.startLineNumber+1,void 0,u);if(!D){const T=s?w:m;return{beforeEnter:T,afterEnter:T}}let I=s?w:D.indentation;return D.action===k.IndentAction.Indent&&(I=r.shiftIndent(I)),g.shouldDecrease(o)&&(I=r.unshiftIndent(I)),{beforeEnter:s?w:m,afterEnter:I}}e.getIndentForEnter=v;function b(i,n,t,r,u,f){if(i<4)return null;const c=(0,E.getScopedLineTokens)(n,t.startLineNumber,t.startColumn);if(c.firstCharOffset)return null;const d=f.getLanguageConfiguration(c.languageId).indentRulesSupport;if(!d)return null;const s=c.getLineContent(),l=s.substr(0,t.startColumn-1-c.firstCharOffset);let o;if(t.isEmpty()?o=s.substr(t.startColumn-1-c.firstCharOffset):o=(0,E.getScopedLineTokens)(n,t.endLineNumber,t.endColumn).getLineContent().substr(t.endColumn-1-c.firstCharOffset),!d.shouldDecrease(l+o)&&d.shouldDecrease(l+r+o)){const g=p(i,n,t.startLineNumber,!1,f);if(!g)return null;let h=g.indentation;return g.action!==k.IndentAction.Indent&&(h=u.unshiftIndent(h)),h}return null}e.getIndentActionForType=b;function a(i,n,t){const r=t.getLanguageConfiguration(i.getLanguageId()).indentRulesSupport;return!r||n<1||n>i.getLineCount()?null:r.getIndentMetadata(i.getLineContent(n))}e.getIndentMetadata=a}),define(se[249],oe([1,0,113,32]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getEnterAction=void 0;function y(E,S,p,_){const v=(0,k.getScopedLineTokens)(S,p.startLineNumber,p.startColumn),b=_.getLanguageConfiguration(v.languageId);if(!b)return null;const a=v.getLineContent(),i=a.substr(0,p.startColumn-1-v.firstCharOffset);let n;p.isEmpty()?n=a.substr(p.startColumn-1-v.firstCharOffset):n=(0,k.getScopedLineTokens)(S,p.endLineNumber,p.endColumn).getLineContent().substr(p.endColumn-1-v.firstCharOffset);let t="";if(p.startLineNumber>1&&v.firstCharOffset===0){const s=(0,k.getScopedLineTokens)(S,p.startLineNumber-1);s.languageId===v.languageId&&(t=s.getLineContent())}const r=b.onEnter(E,t,i,n);if(!r)return null;const u=r.indentAction;let f=r.appendText;const c=r.removeText||0;f?u===L.IndentAction.Indent&&(f=" "+f):u===L.IndentAction.Indent||u===L.IndentAction.IndentOutdent?f=" ":f="";let d=(0,k.getIndentationAtPosition)(S,p.startLineNumber,p.startColumn);return c&&(d=d.substring(0,d.length-c)),{indentAction:u,appendText:f,removeText:c,indentation:d}}e.getEnterAction=y}),define(se[250],oe([1,0,11,85,5,24,249,32]),function(te,e,L,k,y,E,S,p){"use strict";var _;Object.defineProperty(e,"__esModule",{value:!0}),e.ShiftCommand=void 0;const v=Object.create(null);function b(i,n){if(n<=0)return"";v[i]||(v[i]=["",i]);const t=v[i];for(let r=t.length;r<=n;r++)t[r]=t[r-1]+i;return t[n]}let a=_=class{static unshiftIndent(n,t,r,u,f){const c=k.CursorColumns.visibleColumnFromColumn(n,t,r);if(f){const d=b(" ",u),l=k.CursorColumns.prevIndentTabStop(c,u)/u;return b(d,l)}else{const d=" ",l=k.CursorColumns.prevRenderTabStop(c,r)/r;return b(d,l)}}static shiftIndent(n,t,r,u,f){const c=k.CursorColumns.visibleColumnFromColumn(n,t,r);if(f){const d=b(" ",u),l=k.CursorColumns.nextIndentTabStop(c,u)/u;return b(d,l)}else{const d=" ",l=k.CursorColumns.nextRenderTabStop(c,r)/r;return b(d,l)}}constructor(n,t,r){this._languageConfigurationService=r,this._opts=t,this._selection=n,this._selectionId=null,this._useLastEditRangeForCursorEndPosition=!1,this._selectionStartColumnStaysPut=!1}_addEditOperation(n,t,r){this._useLastEditRangeForCursorEndPosition?n.addTrackedEditOperation(t,r):n.addEditOperation(t,r)}getEditOperations(n,t){const r=this._selection.startLineNumber;let u=this._selection.endLineNumber;this._selection.endColumn===1&&r!==u&&(u=u-1);const{tabSize:f,indentSize:c,insertSpaces:d}=this._opts,s=r===u;if(this._opts.useTabStops){this._selection.isEmpty()&&/^\s*$/.test(n.getLineContent(r))&&(this._useLastEditRangeForCursorEndPosition=!0);let l=0,o=0;for(let g=r;g<=u;g++,l=o){o=0;const h=n.getLineContent(g);let m=L.firstNonWhitespaceIndex(h);if(this._opts.isUnshift&&(h.length===0||m===0)||!s&&!this._opts.isUnshift&&h.length===0)continue;if(m===-1&&(m=h.length),g>1&&k.CursorColumns.visibleColumnFromColumn(h,m+1,f)%c!==0&&n.tokenization.isCheapToTokenize(g-1)){const D=(0,S.getEnterAction)(this._opts.autoIndent,n,new y.Range(g-1,n.getLineMaxColumn(g-1),g-1,n.getLineMaxColumn(g-1)),this._languageConfigurationService);if(D){if(o=l,D.appendText)for(let I=0,T=D.appendText.length;I1){let T;for(T=C-1;T>=1;T--){const N=m.getLineContent(T);if(k.lastNonWhitespaceIndex(N)>=0)break}if(T<1)return null;const A=m.getLineMaxColumn(T),P=(0,r.getEnterAction)(h.autoIndent,m,new v.Range(T,A,T,A),h.languageConfigurationService);P&&(D=P.indentation+P.appendText)}return w&&(w===a.IndentAction.Indent&&(D=u.shiftIndent(h,D)),w===a.IndentAction.Outdent&&(D=u.unshiftIndent(h,D)),D=h.normalizeIndentation(D)),D||null}static _replaceJumpToNextIndent(h,m,C,w){let D="";const I=C.getStartPosition();if(h.insertSpaces){const T=h.visibleColumnFromColumn(m,I),A=h.indentSize,P=A-T%A;for(let N=0;Nthis._compositionType(C,N,D,I,T,A));return new p.EditOperationResult(4,P,{shouldPushStackElementBefore:s(h,4),shouldPushStackElementAfter:!1})}static _compositionType(h,m,C,w,D,I){if(!m.isEmpty())return null;const T=m.getPosition(),A=Math.max(1,T.column-w),P=Math.min(h.getLineMaxColumn(T.lineNumber),T.column+D),N=new v.Range(T.lineNumber,A,T.lineNumber,P);return h.getValueInRange(N)===C&&I===0?null:new y.ReplaceCommandWithOffsetCursorState(N,C,0,I)}static _typeCommand(h,m,C){return C?new y.ReplaceCommandWithoutChangingPosition(h,m,!0):new y.ReplaceCommand(h,m,!0)}static _enter(h,m,C,w){if(h.autoIndent===0)return u._typeCommand(w,` `,C);if(!m.tokenization.isCheapToTokenize(w.getStartPosition().lineNumber)||h.autoIndent===1){const A=m.getLineContent(w.startLineNumber),P=k.getLeadingWhitespace(A).substring(0,w.startColumn-1);return u._typeCommand(w,` `+h.normalizeIndentation(P),C)}const D=(0,r.getEnterAction)(h.autoIndent,m,w,h.languageConfigurationService);if(D){if(D.indentAction===a.IndentAction.None)return u._typeCommand(w,` `+h.normalizeIndentation(D.indentation+D.appendText),C);if(D.indentAction===a.IndentAction.Indent)return u._typeCommand(w,` `+h.normalizeIndentation(D.indentation+D.appendText),C);if(D.indentAction===a.IndentAction.IndentOutdent){const A=h.normalizeIndentation(D.indentation),P=h.normalizeIndentation(D.indentation+D.appendText),N=` `+P+` `+A;return C?new y.ReplaceCommandWithoutChangingPosition(w,N,!0):new y.ReplaceCommandWithOffsetCursorState(w,N,-1,P.length-A.length,!0)}else if(D.indentAction===a.IndentAction.Outdent){const A=u.unshiftIndent(h,D.indentation);return u._typeCommand(w,` `+h.normalizeIndentation(A+D.appendText),C)}}const I=m.getLineContent(w.startLineNumber),T=k.getLeadingWhitespace(I).substring(0,w.startColumn-1);if(h.autoIndent>=4){const A=(0,t.getIndentForEnter)(h.autoIndent,m,w,{unshiftIndent:P=>u.unshiftIndent(h,P),shiftIndent:P=>u.shiftIndent(h,P),normalizeIndentation:P=>h.normalizeIndentation(P)},h.languageConfigurationService);if(A){let P=h.visibleColumnFromColumn(m,w.getEndPosition());const N=w.endColumn,M=m.getLineContent(w.endLineNumber),R=k.firstNonWhitespaceIndex(M);if(R>=0?w=w.setEndPosition(w.endLineNumber,Math.max(w.endColumn,R+1)):w=w.setEndPosition(w.endLineNumber,m.getLineMaxColumn(w.endLineNumber)),C)return new y.ReplaceCommandWithoutChangingPosition(w,` `+h.normalizeIndentation(A.afterEnter),!0);{let x=0;return N<=R+1&&(h.insertSpaces||(P=Math.ceil(P/h.indentSize)),x=Math.min(P+1-h.normalizeIndentation(A.afterEnter).length-1,0)),new y.ReplaceCommandWithOffsetCursorState(w,` `+h.normalizeIndentation(A.afterEnter),0,x,!0)}}}return u._typeCommand(w,` `+h.normalizeIndentation(T),C)}static _isAutoIndentType(h,m,C){if(h.autoIndent<4)return!1;for(let w=0,D=C.length;wu.shiftIndent(h,T),unshiftIndent:T=>u.unshiftIndent(h,T)},h.languageConfigurationService);if(I===null)return null;if(I!==h.normalizeIndentation(D)){const T=m.getLineFirstNonWhitespaceColumn(C.startLineNumber);return T===0?u._typeCommand(new v.Range(C.startLineNumber,1,C.endLineNumber,C.endColumn),h.normalizeIndentation(I)+w,!1):u._typeCommand(new v.Range(C.startLineNumber,1,C.endLineNumber,C.endColumn),h.normalizeIndentation(I)+m.getLineContent(C.startLineNumber).substring(T-1,C.startColumn-1)+w,!1)}return null}static _isAutoClosingOvertype(h,m,C,w,D){if(h.autoClosingOvertype==="never"||!h.autoClosingPairs.autoClosingPairsCloseSingleChar.has(D))return!1;for(let I=0,T=C.length;I2?N.charCodeAt(P.column-2):0)===92&&R)return!1;if(h.autoClosingOvertype==="auto"){let O=!1;for(let B=0,W=w.length;Bm.startsWith(A.open)),T=D.some(A=>m.startsWith(A.close));return!I&&T}static _findAutoClosingPairOpen(h,m,C,w){const D=h.autoClosingPairs.autoClosingPairsOpenByEnd.get(w);if(!D)return null;let I=null;for(const T of D)if(I===null||T.open.length>I.open.length){let A=!0;for(const P of C)if(m.getValueInRange(new v.Range(P.lineNumber,P.column-T.open.length+1,P.lineNumber,P.column))+w!==T.open){A=!1;break}A&&(I=T)}return I}static _findContainedAutoClosingPair(h,m){if(m.open.length<=1)return null;const C=m.close.charAt(m.close.length-1),w=h.autoClosingPairs.autoClosingPairsCloseByEnd.get(C)||[];let D=null;for(const I of w)I.open!==m.open&&m.open.includes(I.open)&&m.close.endsWith(I.close)&&(!D||I.open.length>D.open.length)&&(D=I);return D}static _getAutoClosingPairClose(h,m,C,w,D){for(const O of C)if(!O.isEmpty())return null;const I=C.map(O=>{const B=O.getPosition();return D?{lineNumber:B.lineNumber,beforeColumn:B.column-w.length,afterColumn:B.column}:{lineNumber:B.lineNumber,beforeColumn:B.column,afterColumn:B.column}}),T=this._findAutoClosingPairOpen(h,m,I.map(O=>new b.Position(O.lineNumber,O.beforeColumn)),w);if(!T)return null;let A,P;if((0,p.isQuote)(w)?(A=h.autoClosingQuotes,P=h.shouldAutoCloseBefore.quote):(h.blockCommentStartToken?T.open.includes(h.blockCommentStartToken):!1)?(A=h.autoClosingComments,P=h.shouldAutoCloseBefore.comment):(A=h.autoClosingBrackets,P=h.shouldAutoCloseBefore.bracket),A==="never")return null;const M=this._findContainedAutoClosingPair(h,T),R=M?M.close:"";let x=!0;for(const O of I){const{lineNumber:B,beforeColumn:W,afterColumn:V}=O,K=m.getLineContent(B),F=K.substring(0,W-1),q=K.substring(V-1);if(q.startsWith(R)||(x=!1),q.length>0){const $=q.charAt(0);if(!u._isBeforeClosingBrace(h,q)&&!P($))return null}if(T.open.length===1&&(w==="'"||w==='"')&&A!=="always"){const $=(0,_.getMapForWordSeparators)(h.wordSeparators);if(F.length>0){const J=F.charCodeAt(F.length-1);if($.get(J)===0)return null}}if(!m.tokenization.isCheapToTokenize(B))return null;m.tokenization.forceTokenization(B);const ie=m.tokenization.getLineTokens(B),ae=(0,n.createScopedLineTokens)(ie,W-1);if(!T.shouldAutoClose(ae,W-ae.firstCharOffset))return null;const ne=T.findNeutralCharacter();if(ne){const $=m.tokenization.getTokenTypeIfInsertingCharacter(B,W,ne);if(!T.isOK($))return null}}return x?T.close.substring(0,T.close.length-R.length):T.close}static _runAutoClosingOpenCharType(h,m,C,w,D,I,T){const A=[];for(let P=0,N=w.length;Pnew y.ReplaceCommand(new v.Range(R.positionLineNumber,R.positionColumn,R.positionLineNumber,R.positionColumn+1),"",!1));return new p.EditOperationResult(4,M,{shouldPushStackElementBefore:!0,shouldPushStackElementAfter:!1})}const N=this._getAutoClosingPairClose(m,C,D,A,!0);return N!==null?this._runAutoClosingOpenCharType(h,m,C,D,A,!0,N):null}static typeWithInterceptors(h,m,C,w,D,I,T){if(!h&&T===` `){const N=[];for(let M=0,R=D.length;M0){const o=this._cursors.getSelections();for(let g=0;gw&&(m=m.slice(0,w),C=!0);const D=u.from(this._model,this);return this._cursors.setStates(m),this._cursors.normalize(),this._columnSelectData=null,this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(o,g,h,D,C)}setCursorColumnSelectData(o){this._columnSelectData=o}revealPrimary(o,g,h,m,C,w){const D=this._cursors.getViewPositions();let I=null,T=null;D.length>1?T=this._cursors.getViewSelections():I=v.Range.fromPositions(D[0],D[0]),o.emitViewEvent(new i.ViewRevealRangeRequestEvent(g,h,I,T,m,C,w))}saveState(){const o=[],g=this._cursors.getSelections();for(let h=0,m=g.length;h0){const C=E.CursorState.fromModelSelections(h.resultingSelection);this.setStates(o,"modelChange",h.isUndoing?5:h.isRedoing?6:2,C)&&this.revealPrimary(o,"modelChange",!1,0,!0,0)}else{const C=this._cursors.readSelectionFromMarkers();this.setStates(o,"modelChange",2,E.CursorState.fromModelSelections(C))}}}getSelection(){return this._cursors.getPrimaryCursor().modelState.selection}getTopMostViewPosition(){return this._cursors.getTopMostViewPosition()}getBottomMostViewPosition(){return this._cursors.getBottomMostViewPosition()}getCursorColumnSelectData(){if(this._columnSelectData)return this._columnSelectData;const o=this._cursors.getPrimaryCursor(),g=o.viewState.selectionStart.getStartPosition(),h=o.viewState.position;return{isReal:!1,fromViewLineNumber:g.lineNumber,fromViewVisualColumn:this.context.cursorConfig.visibleColumnFromColumn(this._viewModel,g),toViewLineNumber:h.lineNumber,toViewVisualColumn:this.context.cursorConfig.visibleColumnFromColumn(this._viewModel,h)}}getSelections(){return this._cursors.getSelections()}setSelections(o,g,h,m){this.setStates(o,g,m,E.CursorState.fromModelSelections(h))}getPrevEditOperationType(){return this._prevEditOperationType}setPrevEditOperationType(o){this._prevEditOperationType=o}_pushAutoClosedAction(o,g){const h=[],m=[];for(let D=0,I=o.length;D0&&this._pushAutoClosedAction(h,m),this._prevEditOperationType=o.type}o.shouldPushStackElementAfter&&this._model.pushStackElement()}_interpretCommandResult(o){(!o||o.length===0)&&(o=this._cursors.readSelectionFromMarkers()),this._columnSelectData=null,this._cursors.setSelections(o),this._cursors.normalize()}_emitStateChangedIfNecessary(o,g,h,m,C){const w=u.from(this._model,this);if(w.equals(m))return!1;const D=this._cursors.getSelections(),I=this._cursors.getViewSelections();if(o.emitViewEvent(new i.ViewCursorStateChangedEvent(I,D,h)),!m||m.cursorState.length!==w.cursorState.length||w.cursorState.some((T,A)=>!T.modelState.equals(m.cursorState[A].modelState))){const T=m?m.cursorState.map(P=>P.modelState.selection):null,A=m?m.modelVersionId:0;o.emitOutgoingEvent(new t.CursorStateChangedEvent(T,D,A,w.modelVersionId,g||"keyboard",h,C))}return!0}_findAutoClosingPairs(o){if(!o.length)return null;const g=[];for(let h=0,m=o.length;h=0)return null;const w=C.text.match(/([)\]}>'"`])([^)\]}>'"`]*)$/);if(!w)return null;const D=w[1],I=this.context.cursorConfig.autoClosingPairs.autoClosingPairsCloseSingleChar.get(D);if(!I||I.length!==1)return null;const T=I[0].open,A=C.text.length-w[2].length-1,P=C.text.lastIndexOf(T,A-1);if(P===-1)return null;g.push([P,A])}return g}executeEdits(o,g,h,m){let C=null;g==="snippet"&&(C=this._findAutoClosingPairs(h)),C&&(h[0]._isTracked=!0);const w=[],D=[],I=this._model.pushEditOperations(this.getSelections(),h,T=>{if(C)for(let P=0,N=C.length;P0&&this._pushAutoClosedAction(w,D)}_executeEdit(o,g,h,m=0){if(this.context.cursorConfig.readOnly)return;const C=u.from(this._model,this);this._cursors.stopTrackingSelections(),this._isHandling=!0;try{this._cursors.ensureValidState(),o()}catch(w){(0,L.onUnexpectedError)(w)}this._isHandling=!1,this._cursors.startTrackingSelections(),this._validateAutoClosedActions(),this._emitStateChangedIfNecessary(g,h,m,C,!1)&&this.revealPrimary(g,h,!1,0,!0,0)}getAutoClosedCharacters(){return f.getAllAutoClosedCharacters(this._autoClosedActions)}startComposition(o){this._compositionState=new s(this._model,this.getSelections())}endComposition(o,g){const h=this._compositionState?this._compositionState.deduceOutcome(this._model,this.getSelections()):null;this._compositionState=null,this._executeEdit(()=>{g==="keyboard"&&this._executeEditOperation(_.TypeOperations.compositionEndWithInterceptors(this._prevEditOperationType,this.context.cursorConfig,this._model,h,this.getSelections(),this.getAutoClosedCharacters()))},o,g)}type(o,g,h){this._executeEdit(()=>{if(h==="keyboard"){const m=g.length;let C=0;for(;C{const T=I.getPosition();return new b.Selection(T.lineNumber,T.column+C,T.lineNumber,T.column+C)});this.setSelections(o,w,D,0)}return}this._executeEdit(()=>{this._executeEditOperation(_.TypeOperations.compositionType(this._prevEditOperationType,this.context.cursorConfig,this._model,this.getSelections(),g,h,m,C))},o,w)}paste(o,g,h,m,C){this._executeEdit(()=>{this._executeEditOperation(_.TypeOperations.paste(this.context.cursorConfig,this._model,this.getSelections(),g,h,m||[]))},o,C,4)}cut(o,g){this._executeEdit(()=>{this._executeEditOperation(p.DeleteOperations.cut(this.context.cursorConfig,this._model,this.getSelections()))},o,g)}executeCommand(o,g,h){this._executeEdit(()=>{this._cursors.killSecondaryCursors(),this._executeEditOperation(new E.EditOperationResult(0,[g],{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},o,h)}executeCommands(o,g,h){this._executeEdit(()=>{this._executeEditOperation(new E.EditOperationResult(0,g,{shouldPushStackElementBefore:!1,shouldPushStackElementAfter:!1}))},o,h)}}e.CursorsController=r;class u{static from(o,g){return new u(o.getVersionId(),g.getCursorStates())}constructor(o,g){this.modelVersionId=o,this.cursorState=g}equals(o){if(!o||this.modelVersionId!==o.modelVersionId||this.cursorState.length!==o.cursorState.length)return!1;for(let g=0,h=this.cursorState.length;g=g.length||!g[h].strictContainsRange(o[h]))return!1;return!0}}class c{static executeCommands(o,g,h){const m={model:o,selectionsBefore:g,trackedRanges:[],trackedRangesDirection:[]},C=this._innerExecuteCommands(m,h);for(let w=0,D=m.trackedRanges.length;w0&&(w[0]._isTracked=!0);let D=o.model.pushEditOperations(o.selectionsBefore,w,T=>{const A=[];for(let M=0;MM.identifier.minor-R.identifier.minor,N=[];for(let M=0;M0?(A[M].sort(P),N[M]=g[M].computeCursorState(o.model,{getInverseEditOperations:()=>A[M],getTrackedSelection:R=>{const x=parseInt(R,10),O=o.model._getTrackedRange(o.trackedRanges[x]);return o.trackedRangesDirection[x]===0?new b.Selection(O.startLineNumber,O.startColumn,O.endLineNumber,O.endColumn):new b.Selection(O.endLineNumber,O.endColumn,O.startLineNumber,O.startColumn)}})):N[M]=o.selectionsBefore[M];return N});D||(D=o.selectionsBefore);const I=[];for(const T in C)C.hasOwnProperty(T)&&I.push(parseInt(T,10));I.sort((T,A)=>A-T);for(const T of I)D.splice(T,1);return D}static _arrayIsEmpty(o){for(let g=0,h=o.length;g{v.Range.isEmpty(P)&&N===""||m.push({identifier:{major:g,minor:C++},range:P,text:N,forceMoveMarkers:M,isAutoWhitespaceEdit:h.insertsAutoWhitespace})};let D=!1;const A={addEditOperation:w,addTrackedEditOperation:(P,N,M)=>{D=!0,w(P,N,M)},trackSelection:(P,N)=>{const M=b.Selection.liftSelection(P);let R;if(M.isEmpty())if(typeof N=="boolean")N?R=2:R=3;else{const B=o.model.getLineMaxColumn(M.startLineNumber);M.startColumn===B?R=2:R=3}else R=1;const x=o.trackedRanges.length,O=o.model._setTrackedRange(null,M,R);return o.trackedRanges[x]=O,o.trackedRangesDirection[x]=M.getDirection(),x.toString()}};try{h.getEditOperations(o.model,A)}catch(P){return(0,L.onUnexpectedError)(P),{operations:[],hadTrackedEditOperation:!1}}return{operations:m,hadTrackedEditOperation:D}}static _getLoserCursorMap(o){o=o.slice(0),o.sort((h,m)=>-v.Range.compareRangesUsingEnds(h.range,m.range));const g={};for(let h=1;hC.identifier.major?w=m.identifier.major:w=C.identifier.major,g[w.toString()]=!0;for(let D=0;D0&&h--}}return g}}class d{constructor(o,g,h){this.text=o,this.startSelection=g,this.endSelection=h}}class s{static _capture(o,g){const h=[];for(const m of g){if(m.startLineNumber!==m.endLineNumber)return null;h.push(new d(o.getLineContent(m.startLineNumber),m.startColumn-1,m.endColumn-1))}return h}constructor(o,g){this._original=s._capture(o,g)}deduceOutcome(o,g){if(!this._original)return null;const h=s._capture(o,g);if(!h||this._original.length!==h.length)return null;const m=[];for(let C=0,w=this._original.length;C{h.mime===g.mime||h.userConfigured||(g.extension&&h.extension===g.extension&&console.warn(`Overwriting extension <<${g.extension}>> to now point to mime <<${g.mime}>>`),g.filename&&h.filename===g.filename&&console.warn(`Overwriting filename <<${g.filename}>> to now point to mime <<${g.mime}>>`),g.filepattern&&h.filepattern===g.filepattern&&console.warn(`Overwriting filepattern <<${g.filepattern}>> to now point to mime <<${g.mime}>>`),g.firstline&&h.firstline===g.firstline&&console.warn(`Overwriting firstline <<${g.firstline}>> to now point to mime <<${g.mime}>>`))})}function t(s,l){return{id:s.id,mime:s.mime,filename:s.filename,extension:s.extension,filepattern:s.filepattern,firstline:s.firstline,userConfigured:l,filenameLowercase:s.filename?s.filename.toLowerCase():void 0,extensionLowercase:s.extension?s.extension.toLowerCase():void 0,filepatternLowercase:s.filepattern?(0,L.parse)(s.filepattern.toLowerCase()):void 0,filepatternOnPath:s.filepattern?s.filepattern.indexOf(E.posix.sep)>=0:!1}}function r(){v=v.filter(s=>s.userConfigured),b=[]}e.clearPlatformLanguageAssociations=r;function u(s,l){return f(s,l).map(o=>o.id)}e.getLanguageIds=u;function f(s,l){let o;if(s)switch(s.scheme){case y.Schemas.file:o=s.fsPath;break;case y.Schemas.data:{o=S.DataUri.parseMetaData(s).get(S.DataUri.META_DATA_LABEL);break}case y.Schemas.vscodeNotebookCell:o=void 0;break;default:o=s.path}if(!o)return[{id:"unknown",mime:k.Mimes.unknown}];o=o.toLowerCase();const g=(0,E.basename)(o),h=c(o,g,a);if(h)return[h,{id:_.PLAINTEXT_LANGUAGE_ID,mime:k.Mimes.text}];const m=c(o,g,b);if(m)return[m,{id:_.PLAINTEXT_LANGUAGE_ID,mime:k.Mimes.text}];if(l){const C=d(l);if(C)return[C,{id:_.PLAINTEXT_LANGUAGE_ID,mime:k.Mimes.text}]}return[{id:"unknown",mime:k.Mimes.unknown}]}function c(s,l,o){var g;let h,m,C;for(let w=o.length-1;w>=0;w--){const D=o[w];if(l===D.filenameLowercase){h=D;break}if(D.filepattern&&(!m||D.filepattern.length>m.filepattern.length)){const I=D.filepatternOnPath?s:l;!((g=D.filepatternLowercase)===null||g===void 0)&&g.call(D,I)&&(m=D)}D.extension&&(!C||D.extension.length>C.extension.length)&&l.endsWith(D.extensionLowercase)&&(C=D)}if(h)return h;if(m)return m;if(C)return C}function d(s){if((0,p.startsWithUTF8BOM)(s)&&(s=s.substr(1)),s.length>0)for(let l=v.length-1;l>=0;l--){const o=v[l];if(!o.firstline)continue;const g=s.match(o.firstline);if(g&&g.length>0)return o}}}),define(se[794],oe([1,0,6,2,11,793,80,98,37]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LanguagesRegistry=e.LanguageIdCodec=void 0;const v=Object.prototype.hasOwnProperty,b="vs.editor.nullLanguage";class a{constructor(){this._languageIdToLanguage=[],this._languageToLanguageId=new Map,this._register(b,0),this._register(S.PLAINTEXT_LANGUAGE_ID,1),this._nextLanguageId=2}_register(t,r){this._languageIdToLanguage[r]=t,this._languageToLanguageId.set(t,r)}register(t){if(this._languageToLanguageId.has(t))return;const r=this._nextLanguageId++;this._register(t,r)}encodeLanguageId(t){return this._languageToLanguageId.get(t)||0}decodeLanguageId(t){return this._languageIdToLanguage[t]||b}}e.LanguageIdCodec=a;class i extends k.Disposable{constructor(t=!0,r=!1){super(),this._onDidChange=this._register(new L.Emitter),this.onDidChange=this._onDidChange.event,i.instanceCount++,this._warnOnOverwrite=r,this.languageIdCodec=new a,this._dynamicLanguages=[],this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},t&&(this._initializeFromRegistry(),this._register(S.ModesRegistry.onDidChangeLanguages(u=>{this._initializeFromRegistry()})))}dispose(){i.instanceCount--,super.dispose()}_initializeFromRegistry(){this._languages={},this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},(0,E.clearPlatformLanguageAssociations)();const t=[].concat(S.ModesRegistry.getLanguages()).concat(this._dynamicLanguages);this._registerLanguages(t)}_registerLanguages(t){for(const r of t)this._registerLanguage(r);this._mimeTypesMap={},this._nameMap={},this._lowercaseNameMap={},Object.keys(this._languages).forEach(r=>{const u=this._languages[r];u.name&&(this._nameMap[u.name]=u.identifier),u.aliases.forEach(f=>{this._lowercaseNameMap[f.toLowerCase()]=u.identifier}),u.mimetypes.forEach(f=>{this._mimeTypesMap[f]=u.identifier})}),_.Registry.as(p.Extensions.Configuration).registerOverrideIdentifiers(this.getRegisteredLanguageIds()),this._onDidChange.fire()}_registerLanguage(t){const r=t.id;let u;v.call(this._languages,r)?u=this._languages[r]:(this.languageIdCodec.register(r),u={identifier:r,name:null,mimetypes:[],aliases:[],extensions:[],filenames:[],configurationFiles:[],icons:[]},this._languages[r]=u),this._mergeLanguage(u,t)}_mergeLanguage(t,r){const u=r.id;let f=null;if(Array.isArray(r.mimetypes)&&r.mimetypes.length>0&&(t.mimetypes.push(...r.mimetypes),f=r.mimetypes[0]),f||(f=`text/x-${u}`,t.mimetypes.push(f)),Array.isArray(r.extensions)){r.configuration?t.extensions=r.extensions.concat(t.extensions):t.extensions=t.extensions.concat(r.extensions);for(const s of r.extensions)(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,extension:s},this._warnOnOverwrite)}if(Array.isArray(r.filenames))for(const s of r.filenames)(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,filename:s},this._warnOnOverwrite),t.filenames.push(s);if(Array.isArray(r.filenamePatterns))for(const s of r.filenamePatterns)(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,filepattern:s},this._warnOnOverwrite);if(typeof r.firstLine=="string"&&r.firstLine.length>0){let s=r.firstLine;s.charAt(0)!=="^"&&(s="^"+s);try{const l=new RegExp(s);(0,y.regExpLeadsToEndlessLoop)(l)||(0,E.registerPlatformLanguageAssociation)({id:u,mime:f,firstline:l},this._warnOnOverwrite)}catch(l){console.warn(`[${r.id}]: Invalid regular expression \`${s}\`: `,l)}}t.aliases.push(u);let c=null;if(typeof r.aliases<"u"&&Array.isArray(r.aliases)&&(r.aliases.length===0?c=[null]:c=r.aliases),c!==null)for(const s of c)!s||s.length===0||t.aliases.push(s);const d=c!==null&&c.length>0;if(!(d&&c[0]===null)){const s=(d?c[0]:null)||u;(d||!t.name)&&(t.name=s)}r.configuration&&t.configurationFiles.push(r.configuration),r.icon&&t.icons.push(r.icon)}isRegisteredLanguageId(t){return t?v.call(this._languages,t):!1}getRegisteredLanguageIds(){return Object.keys(this._languages)}getLanguageIdByLanguageName(t){const r=t.toLowerCase();return v.call(this._lowercaseNameMap,r)?this._lowercaseNameMap[r]:null}getLanguageIdByMimeType(t){return t&&v.call(this._mimeTypesMap,t)?this._mimeTypesMap[t]:null}guessLanguageIdByFilepathOrFirstLine(t,r){return!t&&!r?[]:(0,E.getLanguageIds)(t,r)}}e.LanguagesRegistry=i,i.instanceCount=0}),define(se[795],oe([1,0,6,2,794,13,31,80]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LanguageService=void 0;class _ extends k.Disposable{constructor(a=!1){super(),this._onDidRequestBasicLanguageFeatures=this._register(new L.Emitter),this.onDidRequestBasicLanguageFeatures=this._onDidRequestBasicLanguageFeatures.event,this._onDidRequestRichLanguageFeatures=this._register(new L.Emitter),this.onDidRequestRichLanguageFeatures=this._onDidRequestRichLanguageFeatures.event,this._onDidChange=this._register(new L.Emitter({leakWarningThreshold:200})),this.onDidChange=this._onDidChange.event,this._requestedBasicLanguages=new Set,this._requestedRichLanguages=new Set,_.instanceCount++,this._registry=this._register(new y.LanguagesRegistry(!0,a)),this.languageIdCodec=this._registry.languageIdCodec,this._register(this._registry.onDidChange(()=>this._onDidChange.fire()))}dispose(){_.instanceCount--,super.dispose()}isRegisteredLanguageId(a){return this._registry.isRegisteredLanguageId(a)}getLanguageIdByLanguageName(a){return this._registry.getLanguageIdByLanguageName(a)}getLanguageIdByMimeType(a){return this._registry.getLanguageIdByMimeType(a)}guessLanguageIdByFilepathOrFirstLine(a,i){const n=this._registry.guessLanguageIdByFilepathOrFirstLine(a,i);return(0,E.firstOrDefault)(n,null)}createById(a){return new v(this.onDidChange,()=>this._createAndGetLanguageIdentifier(a))}createByFilepathOrFirstLine(a,i){return new v(this.onDidChange,()=>{const n=this.guessLanguageIdByFilepathOrFirstLine(a,i);return this._createAndGetLanguageIdentifier(n)})}_createAndGetLanguageIdentifier(a){return(!a||!this.isRegisteredLanguageId(a))&&(a=p.PLAINTEXT_LANGUAGE_ID),a}requestBasicLanguageFeatures(a){this._requestedBasicLanguages.has(a)||(this._requestedBasicLanguages.add(a),this._onDidRequestBasicLanguageFeatures.fire(a))}requestRichLanguageFeatures(a){this._requestedRichLanguages.has(a)||(this._requestedRichLanguages.add(a),this.requestBasicLanguageFeatures(a),S.TokenizationRegistry.getOrCreate(a),this._onDidRequestRichLanguageFeatures.fire(a))}}e.LanguageService=_,_.instanceCount=0;class v{constructor(a,i){this._onDidChangeLanguages=a,this._selector=i,this._listener=null,this._emitter=null,this.languageId=this._selector()}_dispose(){this._listener&&(this._listener.dispose(),this._listener=null),this._emitter&&(this._emitter.dispose(),this._emitter=null)}get onDidChange(){return this._listener||(this._listener=this._onDidChangeLanguages(()=>this._evaluate())),this._emitter||(this._emitter=new L.Emitter({onDidRemoveLastListener:()=>{this._dispose()}})),this._emitter.event}_evaluate(){var a;const i=this._selector();i!==this.languageId&&(this.languageId=i,(a=this._emitter)===null||a===void 0||a.fire(this.languageId))}}}),define(se[353],oe([1,0,39,247,51,32,2,18,131]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DefaultDocumentColorProvider=void 0;class v{constructor(i,n){this._editorWorkerClient=new k.EditorWorkerClient(i,!1,"editorWorkerService",n)}async provideDocumentColors(i,n){return this._editorWorkerClient.computeDefaultDocumentColors(i.uri)}provideColorPresentations(i,n,t){const r=n.range,u=n.color,f=u.alpha,c=new L.Color(new L.RGBA(Math.round(255*u.red),Math.round(255*u.green),Math.round(255*u.blue),f)),d=f?L.Color.Format.CSS.formatRGB(c):L.Color.Format.CSS.formatRGBA(c),s=f?L.Color.Format.CSS.formatHSL(c):L.Color.Format.CSS.formatHSLA(c),l=f?L.Color.Format.CSS.formatHex(c):L.Color.Format.CSS.formatHexA(c),o=[];return o.push({label:d,textEdit:{range:r,text:d}}),o.push({label:s,textEdit:{range:r,text:s}}),o.push({label:l,textEdit:{range:r,text:l}}),o}}e.DefaultDocumentColorProvider=v;let b=class extends S.Disposable{constructor(i,n,t){super(),this._register(t.colorProvider.register("*",new v(i,n)))}};b=ke([ge(0,y.IModelService),ge(1,E.ILanguageConfigurationService),ge(2,p.ILanguageFeaturesService)],b),(0,_.registerEditorFeature)(b)}),define(se[354],oe([1,0,19,12,22,5,51,25,18,353,27]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getColorPresentations=e.getColors=void 0;async function a(c,d,s,l=!0){return u(new n,c,d,s,l)}e.getColors=a;function i(c,d,s,l){return Promise.resolve(s.provideColorPresentations(c,d,l))}e.getColorPresentations=i;class n{constructor(){}async compute(d,s,l,o){const g=await d.provideDocumentColors(s,l);if(Array.isArray(g))for(const h of g)o.push({colorInfo:h,provider:d});return Array.isArray(g)}}class t{constructor(){}async compute(d,s,l,o){const g=await d.provideDocumentColors(s,l);if(Array.isArray(g))for(const h of g)o.push({range:h.range,color:[h.color.red,h.color.green,h.color.blue,h.color.alpha]});return Array.isArray(g)}}class r{constructor(d){this.colorInfo=d}async compute(d,s,l,o){const g=await d.provideColorPresentations(s,this.colorInfo,L.CancellationToken.None);return Array.isArray(g)&&o.push(...g),Array.isArray(g)}}async function u(c,d,s,l,o){let g=!1,h;const m=[],C=d.ordered(s);for(let w=C.length-1;w>=0;w--){const D=C[w];if(D instanceof v.DefaultDocumentColorProvider)h=D;else try{await c.compute(D,s,l,m)&&(g=!0)}catch(I){(0,k.onUnexpectedExternalError)(I)}}return g?m:h&&o?(await c.compute(h,s,l,m),m):[]}function f(c,d){const{colorProvider:s}=c.get(_.ILanguageFeaturesService),l=c.get(S.IModelService).getModel(d);if(!l)throw(0,k.illegalArgument)();const o=c.get(b.IConfigurationService).getValue("editor.defaultColorDecorators",{resource:d});return{model:l,colorProviderRegistry:s,isDefaultColorDecoratorsEnabled:o}}p.CommandsRegistry.registerCommand("_executeDocumentColorProvider",function(c,...d){const[s]=d;if(!(s instanceof y.URI))throw(0,k.illegalArgument)();const{model:l,colorProviderRegistry:o,isDefaultColorDecoratorsEnabled:g}=f(c,s);return u(new t,o,l,L.CancellationToken.None,g)}),p.CommandsRegistry.registerCommand("_executeColorPresentationProvider",function(c,...d){const[s,l]=d,{uri:o,range:g}=l;if(!(o instanceof y.URI)||!Array.isArray(s)||s.length!==4||!E.Range.isIRange(g))throw(0,k.illegalArgument)();const{model:h,colorProviderRegistry:m,isDefaultColorDecoratorsEnabled:C}=f(c,o),[w,D,I,T]=s;return u(new r({range:g,color:{red:w,green:D,blue:I,alpha:T}}),m,h,L.CancellationToken.None,C)})}),define(se[796],oe([1,0,7,13,58,2,104,332,227,41]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarginHoverWidget=void 0;const b=L.$;class a extends E.Disposable{constructor(t,r,u){super(),this._renderDisposeables=this._register(new E.DisposableStore),this._editor=t,this._isVisible=!1,this._messages=[],this._hover=this._register(new _.HoverWidget),this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible),this._markdownRenderer=this._register(new S.MarkdownRenderer({editor:this._editor},r,u)),this._computer=new i(this._editor),this._hoverOperation=this._register(new p.HoverOperation(this._editor,this._computer)),this._register(this._hoverOperation.onResult(f=>{this._withResult(f.value)})),this._register(this._editor.onDidChangeModelDecorations(()=>this._onModelDecorationsChanged())),this._register(this._editor.onDidChangeConfiguration(f=>{f.hasChanged(50)&&this._updateFont()})),this._editor.addOverlayWidget(this)}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return a.ID}getDomNode(){return this._hover.containerDomNode}getPosition(){return null}_updateFont(){Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName("code")).forEach(r=>this._editor.applyFontInfo(r))}_onModelDecorationsChanged(){this._isVisible&&(this._hoverOperation.cancel(),this._hoverOperation.start(0))}startShowingAt(t,r){this._computer.lineNumber===t&&this._computer.lane===r||(this._hoverOperation.cancel(),this.hide(),this._computer.lineNumber=t,this._computer.lane=r,this._hoverOperation.start(0))}hide(){this._computer.lineNumber=-1,this._hoverOperation.cancel(),this._isVisible&&(this._isVisible=!1,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible))}_withResult(t){this._messages=t,this._messages.length>0?this._renderMessages(this._computer.lineNumber,this._messages):this.hide()}_renderMessages(t,r){this._renderDisposeables.clear();const u=document.createDocumentFragment();for(const f of r){const c=b("div.hover-row.markdown-hover"),d=L.append(c,b("div.hover-contents")),s=this._renderDisposeables.add(this._markdownRenderer.render(f.value));d.appendChild(s.element),u.appendChild(c)}this._updateContents(u),this._showAt(t)}_updateContents(t){this._hover.contentsDomNode.textContent="",this._hover.contentsDomNode.appendChild(t),this._updateFont()}_showAt(t){this._isVisible||(this._isVisible=!0,this._hover.containerDomNode.classList.toggle("hidden",!this._isVisible));const r=this._editor.getLayoutInfo(),u=this._editor.getTopForLineNumber(t),f=this._editor.getScrollTop(),c=this._editor.getOption(66),d=this._hover.containerDomNode.clientHeight,s=u-f-(d-c)/2,l=r.glyphMarginLeft+r.glyphMarginWidth+(this._computer.lane==="lineNo"?r.lineNumbersWidth:0);this._hover.containerDomNode.style.left=`${l}px`,this._hover.containerDomNode.style.top=`${Math.max(Math.round(s),0)}px`}}e.MarginHoverWidget=a,a.ID="editor.contrib.modesGlyphHoverWidget";class i{get lineNumber(){return this._lineNumber}set lineNumber(t){this._lineNumber=t}get lane(){return this._laneOrLine}set lane(t){this._laneOrLine=t}constructor(t){this._editor=t,this._lineNumber=-1,this._laneOrLine=v.GlyphMarginLane.Center}computeSync(){var t,r;const u=s=>({value:s}),f=this._editor.getLineDecorations(this._lineNumber),c=[],d=this._laneOrLine==="lineNo";if(!f)return c;for(const s of f){const l=(r=(t=s.options.glyphMargin)===null||t===void 0?void 0:t.position)!==null&&r!==void 0?r:v.GlyphMarginLane.Center;if(!d&&l!==this._laneOrLine)continue;const o=d?s.options.lineNumberHoverMessage:s.options.glyphMarginHoverMessage;!o||(0,y.isEmptyMarkdownString)(o)||c.push(...(0,k.asArray)(o).map(u))}return c}}}),define(se[797],oe([1,0,19,71,2,35,10,31,32,18,617,307]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlineCompletionWithUpdatedRange=e.UpToDateInlineCompletions=e.InlineCompletionsSource=void 0;let i=class extends y.Disposable{constructor(l,o,g,h,m){super(),this.textModel=l,this.versionId=o,this._debounceValue=g,this.languageFeaturesService=h,this.languageConfigurationService=m,this._updateOperation=this._register(new y.MutableDisposable),this.inlineCompletions=(0,E.disposableObservableValue)("inlineCompletions",void 0),this.suggestWidgetInlineCompletions=(0,E.disposableObservableValue)("suggestWidgetInlineCompletions",void 0),this._register(this.textModel.onDidChangeContent(()=>{this._updateOperation.clear()}))}fetch(l,o,g){var h,m;const C=new t(l,o,this.textModel.getVersionId()),w=o.selectedSuggestionInfo?this.suggestWidgetInlineCompletions:this.inlineCompletions;if(!((h=this._updateOperation.value)===null||h===void 0)&&h.request.satisfies(C))return this._updateOperation.value.promise;if(!((m=w.get())===null||m===void 0)&&m.request.satisfies(C))return Promise.resolve(!0);const D=!!this._updateOperation.value;this._updateOperation.clear();const I=new L.CancellationTokenSource,T=(async()=>{if((D||o.triggerKind===p.InlineCompletionTriggerKind.Automatic)&&await n(this._debounceValue.get(this.textModel)),I.token.isCancellationRequested||this.textModel.getVersionId()!==C.versionId)return!1;const N=new Date,M=await(0,b.provideInlineCompletions)(this.languageFeaturesService.inlineCompletionsProvider,l,this.textModel,o,I.token,this.languageConfigurationService);if(I.token.isCancellationRequested||this.textModel.getVersionId()!==C.versionId)return!1;const R=new Date;this._debounceValue.update(this.textModel,R.getTime()-N.getTime());const x=new f(M,C,this.textModel,this.versionId);if(g){const O=g.toInlineCompletion(void 0);g.canBeReused(this.textModel,l)&&!M.has(O)&&x.prepend(g.inlineCompletion,O.range,!0)}return this._updateOperation.clear(),(0,E.transaction)(O=>{w.set(x,O)}),!0})(),A=new u(C,I,T);return this._updateOperation.value=A,T}clear(l){this._updateOperation.clear(),this.inlineCompletions.set(void 0,l),this.suggestWidgetInlineCompletions.set(void 0,l)}clearSuggestWidgetInlineCompletions(l){var o;!((o=this._updateOperation.value)===null||o===void 0)&&o.request.context.selectedSuggestionInfo&&this._updateOperation.clear(),this.suggestWidgetInlineCompletions.set(void 0,l)}cancelUpdate(){this._updateOperation.clear()}};e.InlineCompletionsSource=i,e.InlineCompletionsSource=i=ke([ge(3,v.ILanguageFeaturesService),ge(4,_.ILanguageConfigurationService)],i);function n(s,l){return new Promise(o=>{let g;const h=setTimeout(()=>{g&&g.dispose(),o()},s);l&&(g=l.onCancellationRequested(()=>{clearTimeout(h),g&&g.dispose(),o()}))})}class t{constructor(l,o,g){this.position=l,this.context=o,this.versionId=g}satisfies(l){return this.position.equals(l.position)&&r(this.context.selectedSuggestionInfo,l.context.selectedSuggestionInfo,(o,g)=>o.equals(g))&&(l.context.triggerKind===p.InlineCompletionTriggerKind.Automatic||this.context.triggerKind===p.InlineCompletionTriggerKind.Explicit)&&this.versionId===l.versionId}}function r(s,l,o){return!s||!l?s===l:o(s,l)}class u{constructor(l,o,g){this.request=l,this.cancellationTokenSource=o,this.promise=g}dispose(){this.cancellationTokenSource.cancel()}}class f{get inlineCompletions(){return this._inlineCompletions}constructor(l,o,g,h){this.inlineCompletionProviderResult=l,this.request=o,this.textModel=g,this.versionId=h,this._refCount=1,this._prependedInlineCompletionItems=[],this._rangeVersionIdValue=0,this._rangeVersionId=(0,E.derived)(this,C=>{this.versionId.read(C);let w=!1;for(const D of this._inlineCompletions)w=w||D._updateRange(this.textModel);return w&&this._rangeVersionIdValue++,this._rangeVersionIdValue});const m=g.deltaDecorations([],l.completions.map(C=>({range:C.range,options:{description:"inline-completion-tracking-range"}})));this._inlineCompletions=l.completions.map((C,w)=>new c(C,m[w],this._rangeVersionId))}clone(){return this._refCount++,this}dispose(){if(this._refCount--,this._refCount===0){setTimeout(()=>{this.textModel.isDisposed()||this.textModel.deltaDecorations(this._inlineCompletions.map(l=>l.decorationId),[])},0),this.inlineCompletionProviderResult.dispose();for(const l of this._prependedInlineCompletionItems)l.source.removeRef()}}prepend(l,o,g){g&&l.source.addRef();const h=this.textModel.deltaDecorations([],[{range:o,options:{description:"inline-completion-tracking-range"}}])[0];this._inlineCompletions.unshift(new c(l,h,this._rangeVersionId,o)),this._prependedInlineCompletionItems.push(l)}}e.UpToDateInlineCompletions=f;class c{get forwardStable(){var l;return(l=this.inlineCompletion.source.inlineCompletions.enableForwardStability)!==null&&l!==void 0?l:!1}constructor(l,o,g,h){this.inlineCompletion=l,this.decorationId=o,this.rangeVersion=g,this.semanticId=JSON.stringify([this.inlineCompletion.filterText,this.inlineCompletion.insertText,this.inlineCompletion.range.getStartPosition().toString()]),this._isValid=!0,this._updatedRange=h??l.range}toInlineCompletion(l){return this.inlineCompletion.withRange(this._getUpdatedRange(l))}toSingleTextEdit(l){return new a.SingleTextEdit(this._getUpdatedRange(l),this.inlineCompletion.insertText)}isVisible(l,o,g){const h=this._toFilterTextReplacement(g).removeCommonPrefix(l);if(!this._isValid||!this.inlineCompletion.range.getStartPosition().equals(this._getUpdatedRange(g).getStartPosition())||o.lineNumber!==h.range.startLineNumber)return!1;const m=l.getValueInRange(h.range,1),C=h.text,w=Math.max(0,o.column-h.range.startColumn);let D=C.substring(0,w),I=C.substring(w),T=m.substring(0,w),A=m.substring(w);const P=l.getLineIndentColumn(h.range.startLineNumber);return h.range.startColumn<=P&&(T=T.trimStart(),T.length===0&&(A=A.trimStart()),D=D.trimStart(),D.length===0&&(I=I.trimStart())),D.startsWith(T)&&!!(0,k.matchesSubString)(A,I)}canBeReused(l,o){return this._isValid&&this._getUpdatedRange(void 0).containsPosition(o)&&this.isVisible(l,o,void 0)&&!this._isSmallerThanOriginal(void 0)}_toFilterTextReplacement(l){return new a.SingleTextEdit(this._getUpdatedRange(l),this.inlineCompletion.filterText)}_isSmallerThanOriginal(l){return d(this._getUpdatedRange(l)).isBefore(d(this.inlineCompletion.range))}_getUpdatedRange(l){return this.rangeVersion.read(l),this._updatedRange}_updateRange(l){const o=l.getDecorationRange(this.decorationId);return o?this._updatedRange.equalsRange(o)?!1:(this._updatedRange=o,!0):(this._isValid=!1,!0)}}e.InlineCompletionWithUpdatedRange=c;function d(s){return s.startLineNumber===s.endLineNumber?new S.Position(1,1+s.endColumn-s.startColumn):new S.Position(1+s.endLineNumber-s.startLineNumber,s.endColumn)}}),define(se[798],oe([1,0,11,250,5,24,113,32,306,248,249]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MoveLinesCommand=void 0;let a=class{constructor(n,t,r,u){this._languageConfigurationService=u,this._selection=n,this._isMovingDown=t,this._autoIndent=r,this._selectionId=null,this._moveEndLineSelectionShrink=!1}getEditOperations(n,t){const r=n.getLineCount();if(this._isMovingDown&&this._selection.endLineNumber===r){this._selectionId=t.trackSelection(this._selection);return}if(!this._isMovingDown&&this._selection.startLineNumber===1){this._selectionId=t.trackSelection(this._selection);return}this._moveEndPositionDown=!1;let u=this._selection;u.startLineNumbern.tokenization.getLineTokens(o),getLanguageId:()=>n.getLanguageId(),getLanguageIdAtPosition:(o,g)=>n.getLanguageIdAtPosition(o,g)},getLineContent:null};if(u.startLineNumber===u.endLineNumber&&n.getLineMaxColumn(u.startLineNumber)===1){const o=u.startLineNumber,g=this._isMovingDown?o+1:o-1;n.getLineMaxColumn(g)===1?t.addEditOperation(new y.Range(1,1,1,1),null):(t.addEditOperation(new y.Range(o,1,o,1),n.getLineContent(g)),t.addEditOperation(new y.Range(g,1,g,n.getLineMaxColumn(g)),null)),u=new E.Selection(g,1,g,1)}else{let o,g;if(this._isMovingDown){o=u.endLineNumber+1,g=n.getLineContent(o),t.addEditOperation(new y.Range(o-1,n.getLineMaxColumn(o-1),o,n.getLineMaxColumn(o)),null);let h=g;if(this.shouldAutoIndent(n,u)){const m=this.matchEnterRule(n,s,f,o,u.startLineNumber-1);if(m!==null){const w=L.getLeadingWhitespace(n.getLineContent(o)),D=m+_.getSpaceCnt(w,f);h=_.generateIndent(D,f,d)+this.trimStart(g)}else{l.getLineContent=D=>D===u.startLineNumber?n.getLineContent(o):n.getLineContent(D);const w=(0,v.getGoodIndentForLine)(this._autoIndent,l,n.getLanguageIdAtPosition(o,1),u.startLineNumber,s,this._languageConfigurationService);if(w!==null){const D=L.getLeadingWhitespace(n.getLineContent(o)),I=_.getSpaceCnt(w,f),T=_.getSpaceCnt(D,f);I!==T&&(h=_.generateIndent(I,f,d)+this.trimStart(g))}}t.addEditOperation(new y.Range(u.startLineNumber,1,u.startLineNumber,1),h+` `);const C=this.matchEnterRuleMovingDown(n,s,f,u.startLineNumber,o,h);if(C!==null)C!==0&&this.getIndentEditsOfMovingBlock(n,t,u,f,d,C);else{l.getLineContent=D=>D===u.startLineNumber?h:D>=u.startLineNumber+1&&D<=u.endLineNumber+1?n.getLineContent(D-1):n.getLineContent(D);const w=(0,v.getGoodIndentForLine)(this._autoIndent,l,n.getLanguageIdAtPosition(o,1),u.startLineNumber+1,s,this._languageConfigurationService);if(w!==null){const D=L.getLeadingWhitespace(n.getLineContent(u.startLineNumber)),I=_.getSpaceCnt(w,f),T=_.getSpaceCnt(D,f);if(I!==T){const A=I-T;this.getIndentEditsOfMovingBlock(n,t,u,f,d,A)}}}}else t.addEditOperation(new y.Range(u.startLineNumber,1,u.startLineNumber,1),h+` `)}else if(o=u.startLineNumber-1,g=n.getLineContent(o),t.addEditOperation(new y.Range(o,1,o+1,1),null),t.addEditOperation(new y.Range(u.endLineNumber,n.getLineMaxColumn(u.endLineNumber),u.endLineNumber,n.getLineMaxColumn(u.endLineNumber)),` `+g),this.shouldAutoIndent(n,u)){l.getLineContent=m=>m===o?n.getLineContent(u.startLineNumber):n.getLineContent(m);const h=this.matchEnterRule(n,s,f,u.startLineNumber,u.startLineNumber-2);if(h!==null)h!==0&&this.getIndentEditsOfMovingBlock(n,t,u,f,d,h);else{const m=(0,v.getGoodIndentForLine)(this._autoIndent,l,n.getLanguageIdAtPosition(u.startLineNumber,1),o,s,this._languageConfigurationService);if(m!==null){const C=L.getLeadingWhitespace(n.getLineContent(u.startLineNumber)),w=_.getSpaceCnt(m,f),D=_.getSpaceCnt(C,f);if(w!==D){const I=w-D;this.getIndentEditsOfMovingBlock(n,t,u,f,d,I)}}}}}this._selectionId=t.trackSelection(u)}buildIndentConverter(n,t,r){return{shiftIndent:u=>k.ShiftCommand.shiftIndent(u,u.length+1,n,t,r),unshiftIndent:u=>k.ShiftCommand.unshiftIndent(u,u.length+1,n,t,r)}}parseEnterResult(n,t,r,u,f){if(f){let c=f.indentation;f.indentAction===S.IndentAction.None||f.indentAction===S.IndentAction.Indent?c=f.indentation+f.appendText:f.indentAction===S.IndentAction.IndentOutdent?c=f.indentation:f.indentAction===S.IndentAction.Outdent&&(c=t.unshiftIndent(f.indentation)+f.appendText);const d=n.getLineContent(u);if(this.trimStart(d).indexOf(this.trimStart(c))>=0){const s=L.getLeadingWhitespace(n.getLineContent(u));let l=L.getLeadingWhitespace(c);const o=(0,v.getIndentMetadata)(n,u,this._languageConfigurationService);o!==null&&o&2&&(l=t.unshiftIndent(l));const g=_.getSpaceCnt(l,r),h=_.getSpaceCnt(s,r);return g-h}}return null}matchEnterRuleMovingDown(n,t,r,u,f,c){if(L.lastNonWhitespaceIndex(c)>=0){const d=n.getLineMaxColumn(f),s=(0,b.getEnterAction)(this._autoIndent,n,new y.Range(f,d,f,d),this._languageConfigurationService);return this.parseEnterResult(n,t,r,u,s)}else{let d=u-1;for(;d>=1;){const o=n.getLineContent(d);if(L.lastNonWhitespaceIndex(o)>=0)break;d--}if(d<1||u>n.getLineCount())return null;const s=n.getLineMaxColumn(d),l=(0,b.getEnterAction)(this._autoIndent,n,new y.Range(d,s,d,s),this._languageConfigurationService);return this.parseEnterResult(n,t,r,u,l)}}matchEnterRule(n,t,r,u,f,c){let d=f;for(;d>=1;){let o;if(d===f&&c!==void 0?o=c:o=n.getLineContent(d),L.lastNonWhitespaceIndex(o)>=0)break;d--}if(d<1||u>n.getLineCount())return null;const s=n.getLineMaxColumn(d),l=(0,b.getEnterAction)(this._autoIndent,n,new y.Range(d,s,d,s),this._languageConfigurationService);return this.parseEnterResult(n,t,r,u,l)}trimStart(n){return n.replace(/^\s+/,"")}shouldAutoIndent(n,t){if(this._autoIndent<4||!n.tokenization.isCheapToTokenize(t.startLineNumber))return!1;const r=n.getLanguageIdAtPosition(t.startLineNumber,1),u=n.getLanguageIdAtPosition(t.endLineNumber,1);return!(r!==u||this._languageConfigurationService.getLanguageConfiguration(r).indentRulesSupport===null)}getIndentEditsOfMovingBlock(n,t,r,u,f,c){for(let d=r.startLineNumber;d<=r.endLineNumber;d++){const s=n.getLineContent(d),l=L.getLeadingWhitespace(s),g=_.getSpaceCnt(l,u)+c,h=_.generateIndent(g,u,f);h!==l&&(t.addEditOperation(new y.Range(d,1,d,l.length+1),h),d===r.endLineNumber&&r.endColumn<=l.length+1&&h===""&&(this._moveEndLineSelectionShrink=!0))}}computeCursorState(n,t){let r=t.getTrackedSelection(this._selectionId);return this._moveEndPositionDown&&(r=r.setEndPosition(r.endLineNumber+1,1)),this._moveEndLineSelectionShrink&&r.startLineNumber{d.hasChanged(50)&&this._configureFont()}))}dispose(){this._disposables.dispose(),this._renderDisposeable.dispose()}_configureFont(){const f=this._editor.getOptions(),c=f.get(50),d=c.getMassagedFontFamily(),s=f.get(118)||c.fontSize,l=f.get(119)||c.lineHeight,o=c.fontWeight,g=`${s}px`,h=`${l}px`;this.domNode.style.fontSize=g,this.domNode.style.lineHeight=`${l/s}`,this.domNode.style.fontWeight=o,this.domNode.style.fontFeatureSettings=c.fontFeatureSettings,this._type.style.fontFamily=d,this._close.style.height=h,this._close.style.width=h}getLayoutInfo(){const f=this._editor.getOption(119)||this._editor.getOption(50).lineHeight,c=this._borderWidth,d=c*2;return{lineHeight:f,borderWidth:c,borderHeight:d,verticalPadding:22,horizontalPadding:14}}renderLoading(){this._type.textContent=a.localize(1,null),this._docs.textContent="",this.domNode.classList.remove("no-docs","no-type"),this.layout(this.size.width,this.getLayoutInfo().lineHeight*2),this._onDidChangeContents.fire(this)}renderItem(f,c){var d,s;this._renderDisposeable.clear();let{detail:l,documentation:o}=f.completion;if(c){let g="";g+=`score: ${f.score[0]} `,g+=`prefix: ${(d=f.word)!==null&&d!==void 0?d:"(no prefix)"} `,g+=`word: ${f.completion.filterText?f.completion.filterText+" (filterText)":f.textLabel} `,g+=`distance: ${f.distance} (localityBonus-setting) `,g+=`index: ${f.idx}, based on ${f.completion.sortText&&`sortText: "${f.completion.sortText}"`||"label"} `,g+=`commit_chars: ${(s=f.completion.commitCharacters)===null||s===void 0?void 0:s.join("")} `,o=new p.MarkdownString().appendCodeblock("empty",g),l=`Provider: ${f.provider._debugDisplayName}`}if(!c&&!n(f)){this.clearContents();return}if(this.domNode.classList.remove("no-docs","no-type"),l){const g=l.length>1e5?`${l.substr(0,1e5)}\u2026`:l;this._type.textContent=g,this._type.title=g,L.show(this._type),this._type.classList.toggle("auto-wrap",!/\r?\n^\s+/gmi.test(g))}else L.clearNode(this._type),this._type.title="",L.hide(this._type),this.domNode.classList.add("no-type");if(L.clearNode(this._docs),typeof o=="string")this._docs.classList.remove("markdown-docs"),this._docs.textContent=o;else if(o){this._docs.classList.add("markdown-docs"),L.clearNode(this._docs);const g=this._markdownRenderer.render(o);this._docs.appendChild(g.element),this._renderDisposeable.add(g),this._renderDisposeable.add(this._markdownRenderer.onDidRenderAsync(()=>{this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}))}this.domNode.style.userSelect="text",this.domNode.tabIndex=-1,this._close.onmousedown=g=>{g.preventDefault(),g.stopPropagation()},this._close.onclick=g=>{g.preventDefault(),g.stopPropagation(),this._onDidClose.fire()},this._body.scrollTop=0,this.layout(this._size.width,this._type.clientHeight+this._docs.clientHeight),this._onDidChangeContents.fire(this)}clearContents(){this.domNode.classList.add("no-docs"),this._type.textContent="",this._docs.textContent=""}get isEmpty(){return this.domNode.classList.contains("no-docs")}get size(){return this._size}layout(f,c){const d=new L.Dimension(f,c);L.Dimension.equals(d,this._size)||(this._size=d,L.size(this.domNode,f,c)),this._scrollbar.scanDomNode()}scrollDown(f=8){this._body.scrollTop+=f}scrollUp(f=8){this._body.scrollTop-=f}scrollTop(){this._body.scrollTop=0}scrollBottom(){this._body.scrollTop=this._body.scrollHeight}pageDown(){this.scrollDown(80)}pageUp(){this.scrollUp(80)}set borderWidth(f){this._borderWidth=f}get borderWidth(){return this._borderWidth}};e.SuggestDetailsWidget=t,e.SuggestDetailsWidget=t=ke([ge(1,i.IInstantiationService)],t);class r{constructor(f,c){this.widget=f,this._editor=c,this.allowEditorOverflow=!0,this._disposables=new _.DisposableStore,this._added=!1,this._preferAlignAtTop=!0,this._resizable=new b.ResizableHTMLElement,this._resizable.domNode.classList.add("suggest-details-container"),this._resizable.domNode.appendChild(f.domNode),this._resizable.enableSashes(!1,!0,!0,!1);let d,s,l=0,o=0;this._disposables.add(this._resizable.onDidWillResize(()=>{d=this._topLeft,s=this._resizable.size})),this._disposables.add(this._resizable.onDidResize(g=>{if(d&&s){this.widget.layout(g.dimension.width,g.dimension.height);let h=!1;g.west&&(o=s.width-g.dimension.width,h=!0),g.north&&(l=s.height-g.dimension.height,h=!0),h&&this._applyTopLeft({top:d.top+l,left:d.left+o})}g.done&&(d=void 0,s=void 0,l=0,o=0,this._userSize=g.dimension)})),this._disposables.add(this.widget.onDidChangeContents(()=>{var g;this._anchorBox&&this._placeAtAnchor(this._anchorBox,(g=this._userSize)!==null&&g!==void 0?g:this.widget.size,this._preferAlignAtTop)}))}dispose(){this._resizable.dispose(),this._disposables.dispose(),this.hide()}getId(){return"suggest.details"}getDomNode(){return this._resizable.domNode}getPosition(){return this._topLeft?{preference:this._topLeft}:null}show(){this._added||(this._editor.addOverlayWidget(this),this._added=!0)}hide(f=!1){this._resizable.clearSashHoverState(),this._added&&(this._editor.removeOverlayWidget(this),this._added=!1,this._anchorBox=void 0,this._topLeft=void 0),f&&(this._userSize=void 0,this.widget.clearContents())}placeAtAnchor(f,c){var d;const s=f.getBoundingClientRect();this._anchorBox=s,this._preferAlignAtTop=c,this._placeAtAnchor(this._anchorBox,(d=this._userSize)!==null&&d!==void 0?d:this.widget.size,c)}_placeAtAnchor(f,c,d){var s;const l=L.getClientArea(this.getDomNode().ownerDocument.body),o=this.widget.getLayoutInfo(),g=new L.Dimension(220,2*o.lineHeight),h=f.top,m=function(){const B=l.width-(f.left+f.width+o.borderWidth+o.horizontalPadding),W=-o.borderWidth+f.left+f.width,V=new L.Dimension(B,l.height-f.top-o.borderHeight-o.verticalPadding),K=V.with(void 0,f.top+f.height-o.borderHeight-o.verticalPadding);return{top:h,left:W,fit:B-c.width,maxSizeTop:V,maxSizeBottom:K,minSize:g.with(Math.min(B,g.width))}}(),C=function(){const B=f.left-o.borderWidth-o.horizontalPadding,W=Math.max(o.horizontalPadding,f.left-c.width-o.borderWidth),V=new L.Dimension(B,l.height-f.top-o.borderHeight-o.verticalPadding),K=V.with(void 0,f.top+f.height-o.borderHeight-o.verticalPadding);return{top:h,left:W,fit:B-c.width,maxSizeTop:V,maxSizeBottom:K,minSize:g.with(Math.min(B,g.width))}}(),w=function(){const B=f.left,W=-o.borderWidth+f.top+f.height,V=new L.Dimension(f.width-o.borderHeight,l.height-f.top-f.height-o.verticalPadding);return{top:W,left:B,fit:V.height-c.height,maxSizeBottom:V,maxSizeTop:V,minSize:g.with(V.width)}}(),D=[m,C,w],I=(s=D.find(B=>B.fit>=0))!==null&&s!==void 0?s:D.sort((B,W)=>W.fit-B.fit)[0],T=f.top+f.height-o.borderHeight;let A,P=c.height;const N=Math.max(I.maxSizeTop.height,I.maxSizeBottom.height);P>N&&(P=N);let M;d?P<=I.maxSizeTop.height?(A=!0,M=I.maxSizeTop):(A=!1,M=I.maxSizeBottom):P<=I.maxSizeBottom.height?(A=!1,M=I.maxSizeBottom):(A=!0,M=I.maxSizeTop);let{top:R,left:x}=I;!A&&P>f.height&&(R=T-P);const O=this._editor.getDomNode();if(O){const B=O.getBoundingClientRect();R-=B.top,x-=B.left}this._applyTopLeft({left:x,top:R}),this._resizable.enableSashes(!A,I===m,A,I!==m),this._resizable.minSize=I.minSize,this._resizable.maxSize=M,this._resizable.layout(P,Math.min(M.width,c.width)),this.widget.layout(this._resizable.size.width,this._resizable.size.height)}_applyTopLeft(f){this._topLeft=f,this._editor.layoutOverlayWidget(this)}}e.SuggestDetailsOverlay=r}),define(se[356],oe([1,0,13,53,55,20,22,27,98,37]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ConfigurationChangeEvent=e.Configuration=e.ConfigurationModelParser=e.ConfigurationModel=void 0;function b(u){return Object.isFrozen(u)?u:y.deepFreeze(u)}class a{constructor(f={},c=[],d=[],s){this._contents=f,this._keys=c,this._overrides=d,this.raw=s,this.overrideConfigurations=new Map}get rawConfiguration(){var f;if(!this._rawConfiguration)if(!((f=this.raw)===null||f===void 0)&&f.length){const c=this.raw.map(d=>{if(d instanceof a)return d;const s=new i("");return s.parseRaw(d),s.configurationModel});this._rawConfiguration=c.reduce((d,s)=>s===d?s:d.merge(s),c[0])}else this._rawConfiguration=this;return this._rawConfiguration}get contents(){return this._contents}get overrides(){return this._overrides}get keys(){return this._keys}isEmpty(){return this._keys.length===0&&Object.keys(this._contents).length===0&&this._overrides.length===0}getValue(f){return f?(0,p.getConfigurationValue)(this.contents,f):this.contents}inspect(f,c){const d=this.rawConfiguration.getValue(f),s=c?this.rawConfiguration.getOverrideValue(f,c):void 0,l=c?this.rawConfiguration.override(c).getValue(f):d;return{value:d,override:s,merged:l}}getOverrideValue(f,c){const d=this.getContentsForOverrideIdentifer(c);return d?f?(0,p.getConfigurationValue)(d,f):d:void 0}override(f){let c=this.overrideConfigurations.get(f);return c||(c=this.createOverrideConfigurationModel(f),this.overrideConfigurations.set(f,c)),c}merge(...f){var c,d;const s=y.deepClone(this.contents),l=y.deepClone(this.overrides),o=[...this.keys],g=!((c=this.raw)===null||c===void 0)&&c.length?[...this.raw]:[this];for(const h of f)if(g.push(...!((d=h.raw)===null||d===void 0)&&d.length?h.raw:[h]),!h.isEmpty()){this.mergeContents(s,h.contents);for(const m of h.overrides){const[C]=l.filter(w=>L.equals(w.identifiers,m.identifiers));C?(this.mergeContents(C.contents,m.contents),C.keys.push(...m.keys),C.keys=L.distinct(C.keys)):l.push(y.deepClone(m))}for(const m of h.keys)o.indexOf(m)===-1&&o.push(m)}return new a(s,o,l,g.every(h=>h instanceof a)?void 0:g)}createOverrideConfigurationModel(f){const c=this.getContentsForOverrideIdentifer(f);if(!c||typeof c!="object"||!Object.keys(c).length)return this;const d={};for(const s of L.distinct([...Object.keys(this.contents),...Object.keys(c)])){let l=this.contents[s];const o=c[s];o&&(typeof l=="object"&&typeof o=="object"?(l=y.deepClone(l),this.mergeContents(l,o)):l=o),d[s]=l}return new a(d,this.keys,this.overrides)}mergeContents(f,c){for(const d of Object.keys(c)){if(d in f&&E.isObject(f[d])&&E.isObject(c[d])){this.mergeContents(f[d],c[d]);continue}f[d]=y.deepClone(c[d])}}getContentsForOverrideIdentifer(f){let c=null,d=null;const s=l=>{l&&(d?this.mergeContents(d,l):d=y.deepClone(l))};for(const l of this.overrides)l.identifiers.length===1&&l.identifiers[0]===f?c=l.contents:l.identifiers.includes(f)&&s(l.contents);return s(c),d}toJSON(){return{contents:this.contents,overrides:this.overrides,keys:this.keys}}addValue(f,c){this.updateValue(f,c,!0)}setValue(f,c){this.updateValue(f,c,!1)}removeValue(f){const c=this.keys.indexOf(f);c!==-1&&(this.keys.splice(c,1),(0,p.removeFromValueTree)(this.contents,f),_.OVERRIDE_PROPERTY_REGEX.test(f)&&this.overrides.splice(this.overrides.findIndex(d=>L.equals(d.identifiers,(0,_.overrideIdentifiersFromKey)(f))),1))}updateValue(f,c,d){(0,p.addToValueTree)(this.contents,f,c,s=>console.error(s)),d=d||this.keys.indexOf(f)===-1,d&&this.keys.push(f),_.OVERRIDE_PROPERTY_REGEX.test(f)&&this.overrides.push({identifiers:(0,_.overrideIdentifiersFromKey)(f),keys:Object.keys(this.contents[f]),contents:(0,p.toValuesTree)(this.contents[f],s=>console.error(s))})}}e.ConfigurationModel=a;class i{constructor(f){this._name=f,this._raw=null,this._configurationModel=null,this._restrictedConfigurations=[]}get configurationModel(){return this._configurationModel||new a}parseRaw(f,c){this._raw=f;const{contents:d,keys:s,overrides:l,restricted:o,hasExcludedProperties:g}=this.doParseRaw(f,c);this._configurationModel=new a(d,s,l,g?[f]:void 0),this._restrictedConfigurations=o||[]}doParseRaw(f,c){const d=v.Registry.as(_.Extensions.Configuration).getConfigurationProperties(),s=this.filter(f,d,!0,c);f=s.raw;const l=(0,p.toValuesTree)(f,h=>console.error(`Conflict in settings file ${this._name}: ${h}`)),o=Object.keys(f),g=this.toOverrides(f,h=>console.error(`Conflict in settings file ${this._name}: ${h}`));return{contents:l,keys:o,overrides:g,restricted:s.restricted,hasExcludedProperties:s.hasExcludedProperties}}filter(f,c,d,s){var l,o,g;let h=!1;if(!s?.scopes&&!s?.skipRestricted&&!(!((l=s?.exclude)===null||l===void 0)&&l.length))return{raw:f,restricted:[],hasExcludedProperties:h};const m={},C=[];for(const w in f)if(_.OVERRIDE_PROPERTY_REGEX.test(w)&&d){const D=this.filter(f[w],c,!1,s);m[w]=D.raw,h=h||D.hasExcludedProperties,C.push(...D.restricted)}else{const D=c[w],I=D?typeof D.scope<"u"?D.scope:3:void 0;D?.restricted&&C.push(w),!(!((o=s.exclude)===null||o===void 0)&&o.includes(w))&&(!((g=s.include)===null||g===void 0)&&g.includes(w)||(I===void 0||s.scopes===void 0||s.scopes.includes(I))&&!(s.skipRestricted&&D?.restricted))?m[w]=f[w]:h=!0}return{raw:m,restricted:C,hasExcludedProperties:h}}toOverrides(f,c){const d=[];for(const s of Object.keys(f))if(_.OVERRIDE_PROPERTY_REGEX.test(s)){const l={};for(const o in f[s])l[o]=f[s][o];d.push({identifiers:(0,_.overrideIdentifiersFromKey)(s),keys:Object.keys(l),contents:(0,p.toValuesTree)(l,c)})}return d}}e.ConfigurationModelParser=i;class n{constructor(f,c,d,s,l,o,g,h,m,C,w,D,I){this.key=f,this.overrides=c,this._value=d,this.overrideIdentifiers=s,this.defaultConfiguration=l,this.policyConfiguration=o,this.applicationConfiguration=g,this.userConfiguration=h,this.localUserConfiguration=m,this.remoteUserConfiguration=C,this.workspaceConfiguration=w,this.folderConfigurationModel=D,this.memoryConfigurationModel=I}inspect(f,c,d){const s=f.inspect(c,d);return{get value(){return b(s.value)},get override(){return b(s.override)},get merged(){return b(s.merged)}}}get userInspectValue(){return this._userInspectValue||(this._userInspectValue=this.inspect(this.userConfiguration,this.key,this.overrides.overrideIdentifier)),this._userInspectValue}get user(){return this.userInspectValue.value!==void 0||this.userInspectValue.override!==void 0?{value:this.userInspectValue.value,override:this.userInspectValue.override}:void 0}}class t{constructor(f,c,d,s,l=new a,o=new a,g=new k.ResourceMap,h=new a,m=new k.ResourceMap){this._defaultConfiguration=f,this._policyConfiguration=c,this._applicationConfiguration=d,this._localUserConfiguration=s,this._remoteUserConfiguration=l,this._workspaceConfiguration=o,this._folderConfigurations=g,this._memoryConfiguration=h,this._memoryConfigurationByResource=m,this._workspaceConsolidatedConfiguration=null,this._foldersConsolidatedConfigurations=new k.ResourceMap,this._userConfiguration=null}getValue(f,c,d){return this.getConsolidatedConfigurationModel(f,c,d).getValue(f)}updateValue(f,c,d={}){let s;d.resource?(s=this._memoryConfigurationByResource.get(d.resource),s||(s=new a,this._memoryConfigurationByResource.set(d.resource,s))):s=this._memoryConfiguration,c===void 0?s.removeValue(f):s.setValue(f,c),d.resource||(this._workspaceConsolidatedConfiguration=null)}inspect(f,c,d){const s=this.getConsolidatedConfigurationModel(f,c,d),l=this.getFolderConfigurationModelForResource(c.resource,d),o=c.resource?this._memoryConfigurationByResource.get(c.resource)||this._memoryConfiguration:this._memoryConfiguration,g=new Set;for(const h of s.overrides)for(const m of h.identifiers)s.getOverrideValue(f,m)!==void 0&&g.add(m);return new n(f,c,s.getValue(f),g.size?[...g]:void 0,this._defaultConfiguration,this._policyConfiguration.isEmpty()?void 0:this._policyConfiguration,this.applicationConfiguration.isEmpty()?void 0:this.applicationConfiguration,this.userConfiguration,this.localUserConfiguration,this.remoteUserConfiguration,d?this._workspaceConfiguration:void 0,l||void 0,o)}get applicationConfiguration(){return this._applicationConfiguration}get userConfiguration(){return this._userConfiguration||(this._userConfiguration=this._remoteUserConfiguration.isEmpty()?this._localUserConfiguration:this._localUserConfiguration.merge(this._remoteUserConfiguration)),this._userConfiguration}get localUserConfiguration(){return this._localUserConfiguration}get remoteUserConfiguration(){return this._remoteUserConfiguration}getConsolidatedConfigurationModel(f,c,d){let s=this.getConsolidatedConfigurationModelForResource(c,d);return c.overrideIdentifier&&(s=s.override(c.overrideIdentifier)),!this._policyConfiguration.isEmpty()&&this._policyConfiguration.getValue(f)!==void 0&&(s=s.merge(this._policyConfiguration)),s}getConsolidatedConfigurationModelForResource({resource:f},c){let d=this.getWorkspaceConsolidatedConfiguration();if(c&&f){const s=c.getFolder(f);s&&(d=this.getFolderConsolidatedConfiguration(s.uri)||d);const l=this._memoryConfigurationByResource.get(f);l&&(d=d.merge(l))}return d}getWorkspaceConsolidatedConfiguration(){return this._workspaceConsolidatedConfiguration||(this._workspaceConsolidatedConfiguration=this._defaultConfiguration.merge(this.applicationConfiguration,this.userConfiguration,this._workspaceConfiguration,this._memoryConfiguration)),this._workspaceConsolidatedConfiguration}getFolderConsolidatedConfiguration(f){let c=this._foldersConsolidatedConfigurations.get(f);if(!c){const d=this.getWorkspaceConsolidatedConfiguration(),s=this._folderConfigurations.get(f);s?(c=d.merge(s),this._foldersConsolidatedConfigurations.set(f,c)):c=d}return c}getFolderConfigurationModelForResource(f,c){if(c&&f){const d=c.getFolder(f);if(d)return this._folderConfigurations.get(d.uri)}}toData(){return{defaults:{contents:this._defaultConfiguration.contents,overrides:this._defaultConfiguration.overrides,keys:this._defaultConfiguration.keys},policy:{contents:this._policyConfiguration.contents,overrides:this._policyConfiguration.overrides,keys:this._policyConfiguration.keys},application:{contents:this.applicationConfiguration.contents,overrides:this.applicationConfiguration.overrides,keys:this.applicationConfiguration.keys},user:{contents:this.userConfiguration.contents,overrides:this.userConfiguration.overrides,keys:this.userConfiguration.keys},workspace:{contents:this._workspaceConfiguration.contents,overrides:this._workspaceConfiguration.overrides,keys:this._workspaceConfiguration.keys},folders:[...this._folderConfigurations.keys()].reduce((f,c)=>{const{contents:d,overrides:s,keys:l}=this._folderConfigurations.get(c);return f.push([c,{contents:d,overrides:s,keys:l}]),f},[])}}static parse(f){const c=this.parseConfigurationModel(f.defaults),d=this.parseConfigurationModel(f.policy),s=this.parseConfigurationModel(f.application),l=this.parseConfigurationModel(f.user),o=this.parseConfigurationModel(f.workspace),g=f.folders.reduce((h,m)=>(h.set(S.URI.revive(m[0]),this.parseConfigurationModel(m[1])),h),new k.ResourceMap);return new t(c,d,s,l,new a,o,g,new a,new k.ResourceMap)}static parseConfigurationModel(f){return new a(f.contents,f.keys,f.overrides)}}e.Configuration=t;class r{constructor(f,c,d,s){this.change=f,this.previous=c,this.currentConfiguraiton=d,this.currentWorkspace=s,this._marker=` `,this._markerCode1=this._marker.charCodeAt(0),this._markerCode2=".".charCodeAt(0),this.affectedKeys=new Set,this._previousConfiguration=void 0;for(const l of f.keys)this.affectedKeys.add(l);for(const[,l]of f.overrides)for(const o of l)this.affectedKeys.add(o);this._affectsConfigStr=this._marker;for(const l of this.affectedKeys)this._affectsConfigStr+=l+this._marker}get previousConfiguration(){return!this._previousConfiguration&&this.previous&&(this._previousConfiguration=t.parse(this.previous.data)),this._previousConfiguration}affectsConfiguration(f,c){var d;const s=this._marker+f,l=this._affectsConfigStr.indexOf(s);if(l<0)return!1;const o=l+s.length;if(o>=this._affectsConfigStr.length)return!1;const g=this._affectsConfigStr.charCodeAt(o);if(g!==this._markerCode1&&g!==this._markerCode2)return!1;if(c){const h=this.previousConfiguration?this.previousConfiguration.getValue(f,c,(d=this.previous)===null||d===void 0?void 0:d.workspace):void 0,m=this.currentConfiguraiton.getValue(f,c,this.currentWorkspace);return!y.equals(h,m)}return!0}}e.ConfigurationChangeEvent=r}),define(se[799],oe([1,0,2,356,98,37]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DefaultConfiguration=void 0;class S extends L.Disposable{constructor(){super(...arguments),this._configurationModel=new k.ConfigurationModel}get configurationModel(){return this._configurationModel}reload(){return this.resetConfigurationModel(),this.configurationModel}getConfigurationDefaultOverrides(){return{}}resetConfigurationModel(){this._configurationModel=new k.ConfigurationModel;const _=E.Registry.as(y.Extensions.Configuration).getConfigurationProperties();this.updateConfigurationModel(Object.keys(_),_)}updateConfigurationModel(_,v){const b=this.getConfigurationDefaultOverrides();for(const a of _){const i=b[a],n=v[a];i!==void 0?this._configurationModel.addValue(a,i):n?this._configurationModel.addValue(a,n.default):this._configurationModel.removeValue(a)}}}e.DefaultConfiguration=S}),define(se[124],oe([1,0,125,17,25,37,2,66]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Extensions=e.KeybindingsRegistry=void 0;class _{constructor(){this._coreKeybindings=new p.LinkedList,this._extensionKeybindings=[],this._cachedMergedKeybindings=null}static bindToCurrentPlatform(a){if(k.OS===1){if(a&&a.win)return a.win}else if(k.OS===2){if(a&&a.mac)return a.mac}else if(a&&a.linux)return a.linux;return a}registerKeybindingRule(a){const i=_.bindToCurrentPlatform(a),n=new S.DisposableStore;if(i&&i.primary){const t=(0,L.decodeKeybinding)(i.primary,k.OS);t&&n.add(this._registerDefaultKeybinding(t,a.id,a.args,a.weight,0,a.when))}if(i&&Array.isArray(i.secondary))for(let t=0,r=i.secondary.length;t{f(),this._cachedMergedKeybindings=null})}getDefaultKeybindings(){return this._cachedMergedKeybindings||(this._cachedMergedKeybindings=Array.from(this._coreKeybindings).concat(this._extensionKeybindings),this._cachedMergedKeybindings.sort(v)),this._cachedMergedKeybindings.slice(0)}}e.KeybindingsRegistry=new _,e.Extensions={EditorModes:"platform.keybindingsRegistry"},E.Registry.add(e.Extensions.EditorModes,e.KeybindingsRegistry);function v(b,a){if(b.weight1!==a.weight1)return b.weight1-a.weight1;if(b.command&&a.command){if(b.commanda.command)return 1}return b.weight2-a.weight2}}),define(se[30],oe([1,0,42,28,6,2,66,25,15,8,124]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";var a;Object.defineProperty(e,"__esModule",{value:!0}),e.registerAction2=e.Action2=e.MenuItemAction=e.SubmenuItemAction=e.MenuRegistry=e.IMenuService=e.MenuId=e.isISubmenuItem=e.isIMenuItem=void 0;function i(s){return s.command!==void 0}e.isIMenuItem=i;function n(s){return s.submenu!==void 0}e.isISubmenuItem=n;class t{constructor(l){if(t._instances.has(l))throw new TypeError(`MenuId with identifier '${l}' already exists. Use MenuId.for(ident) or a unique identifier`);t._instances.set(l,this),this.id=l}}e.MenuId=t,t._instances=new Map,t.CommandPalette=new t("CommandPalette"),t.DebugBreakpointsContext=new t("DebugBreakpointsContext"),t.DebugCallStackContext=new t("DebugCallStackContext"),t.DebugConsoleContext=new t("DebugConsoleContext"),t.DebugVariablesContext=new t("DebugVariablesContext"),t.DebugHoverContext=new t("DebugHoverContext"),t.DebugWatchContext=new t("DebugWatchContext"),t.DebugToolBar=new t("DebugToolBar"),t.DebugToolBarStop=new t("DebugToolBarStop"),t.EditorContext=new t("EditorContext"),t.SimpleEditorContext=new t("SimpleEditorContext"),t.EditorContent=new t("EditorContent"),t.EditorLineNumberContext=new t("EditorLineNumberContext"),t.EditorContextCopy=new t("EditorContextCopy"),t.EditorContextPeek=new t("EditorContextPeek"),t.EditorContextShare=new t("EditorContextShare"),t.EditorTitle=new t("EditorTitle"),t.EditorTitleRun=new t("EditorTitleRun"),t.EditorTitleContext=new t("EditorTitleContext"),t.EditorTitleContextShare=new t("EditorTitleContextShare"),t.EmptyEditorGroup=new t("EmptyEditorGroup"),t.EmptyEditorGroupContext=new t("EmptyEditorGroupContext"),t.EditorTabsBarContext=new t("EditorTabsBarContext"),t.EditorTabsBarShowTabsSubmenu=new t("EditorTabsBarShowTabsSubmenu"),t.EditorTabsBarShowTabsZenModeSubmenu=new t("EditorTabsBarShowTabsZenModeSubmenu"),t.EditorActionsPositionSubmenu=new t("EditorActionsPositionSubmenu"),t.ExplorerContext=new t("ExplorerContext"),t.ExplorerContextShare=new t("ExplorerContextShare"),t.ExtensionContext=new t("ExtensionContext"),t.GlobalActivity=new t("GlobalActivity"),t.CommandCenter=new t("CommandCenter"),t.CommandCenterCenter=new t("CommandCenterCenter"),t.LayoutControlMenuSubmenu=new t("LayoutControlMenuSubmenu"),t.LayoutControlMenu=new t("LayoutControlMenu"),t.MenubarMainMenu=new t("MenubarMainMenu"),t.MenubarAppearanceMenu=new t("MenubarAppearanceMenu"),t.MenubarDebugMenu=new t("MenubarDebugMenu"),t.MenubarEditMenu=new t("MenubarEditMenu"),t.MenubarCopy=new t("MenubarCopy"),t.MenubarFileMenu=new t("MenubarFileMenu"),t.MenubarGoMenu=new t("MenubarGoMenu"),t.MenubarHelpMenu=new t("MenubarHelpMenu"),t.MenubarLayoutMenu=new t("MenubarLayoutMenu"),t.MenubarNewBreakpointMenu=new t("MenubarNewBreakpointMenu"),t.PanelAlignmentMenu=new t("PanelAlignmentMenu"),t.PanelPositionMenu=new t("PanelPositionMenu"),t.ActivityBarPositionMenu=new t("ActivityBarPositionMenu"),t.MenubarPreferencesMenu=new t("MenubarPreferencesMenu"),t.MenubarRecentMenu=new t("MenubarRecentMenu"),t.MenubarSelectionMenu=new t("MenubarSelectionMenu"),t.MenubarShare=new t("MenubarShare"),t.MenubarSwitchEditorMenu=new t("MenubarSwitchEditorMenu"),t.MenubarSwitchGroupMenu=new t("MenubarSwitchGroupMenu"),t.MenubarTerminalMenu=new t("MenubarTerminalMenu"),t.MenubarViewMenu=new t("MenubarViewMenu"),t.MenubarHomeMenu=new t("MenubarHomeMenu"),t.OpenEditorsContext=new t("OpenEditorsContext"),t.OpenEditorsContextShare=new t("OpenEditorsContextShare"),t.ProblemsPanelContext=new t("ProblemsPanelContext"),t.SCMInputBox=new t("SCMInputBox"),t.SCMIncomingChanges=new t("SCMIncomingChanges"),t.SCMOutgoingChanges=new t("SCMOutgoingChanges"),t.SCMIncomingChangesAllChangesContext=new t("SCMIncomingChangesAllChangesContext"),t.SCMIncomingChangesHistoryItemContext=new t("SCMIncomingChangesHistoryItemContext"),t.SCMOutgoingChangesAllChangesContext=new t("SCMOutgoingChangesAllChangesContext"),t.SCMOutgoingChangesHistoryItemContext=new t("SCMOutgoingChangesHistoryItemContext"),t.SCMChangeContext=new t("SCMChangeContext"),t.SCMResourceContext=new t("SCMResourceContext"),t.SCMResourceContextShare=new t("SCMResourceContextShare"),t.SCMResourceFolderContext=new t("SCMResourceFolderContext"),t.SCMResourceGroupContext=new t("SCMResourceGroupContext"),t.SCMSourceControl=new t("SCMSourceControl"),t.SCMSourceControlInline=new t("SCMSourceControlInline"),t.SCMTitle=new t("SCMTitle"),t.SearchContext=new t("SearchContext"),t.SearchActionMenu=new t("SearchActionContext"),t.StatusBarWindowIndicatorMenu=new t("StatusBarWindowIndicatorMenu"),t.StatusBarRemoteIndicatorMenu=new t("StatusBarRemoteIndicatorMenu"),t.StickyScrollContext=new t("StickyScrollContext"),t.TestItem=new t("TestItem"),t.TestItemGutter=new t("TestItemGutter"),t.TestMessageContext=new t("TestMessageContext"),t.TestMessageContent=new t("TestMessageContent"),t.TestPeekElement=new t("TestPeekElement"),t.TestPeekTitle=new t("TestPeekTitle"),t.TouchBarContext=new t("TouchBarContext"),t.TitleBarContext=new t("TitleBarContext"),t.TitleBarTitleContext=new t("TitleBarTitleContext"),t.TunnelContext=new t("TunnelContext"),t.TunnelPrivacy=new t("TunnelPrivacy"),t.TunnelProtocol=new t("TunnelProtocol"),t.TunnelPortInline=new t("TunnelInline"),t.TunnelTitle=new t("TunnelTitle"),t.TunnelLocalAddressInline=new t("TunnelLocalAddressInline"),t.TunnelOriginInline=new t("TunnelOriginInline"),t.ViewItemContext=new t("ViewItemContext"),t.ViewContainerTitle=new t("ViewContainerTitle"),t.ViewContainerTitleContext=new t("ViewContainerTitleContext"),t.ViewTitle=new t("ViewTitle"),t.ViewTitleContext=new t("ViewTitleContext"),t.CommentEditorActions=new t("CommentEditorActions"),t.CommentThreadTitle=new t("CommentThreadTitle"),t.CommentThreadActions=new t("CommentThreadActions"),t.CommentThreadAdditionalActions=new t("CommentThreadAdditionalActions"),t.CommentThreadTitleContext=new t("CommentThreadTitleContext"),t.CommentThreadCommentContext=new t("CommentThreadCommentContext"),t.CommentTitle=new t("CommentTitle"),t.CommentActions=new t("CommentActions"),t.InteractiveToolbar=new t("InteractiveToolbar"),t.InteractiveCellTitle=new t("InteractiveCellTitle"),t.InteractiveCellDelete=new t("InteractiveCellDelete"),t.InteractiveCellExecute=new t("InteractiveCellExecute"),t.InteractiveInputExecute=new t("InteractiveInputExecute"),t.NotebookToolbar=new t("NotebookToolbar"),t.NotebookStickyScrollContext=new t("NotebookStickyScrollContext"),t.NotebookCellTitle=new t("NotebookCellTitle"),t.NotebookCellDelete=new t("NotebookCellDelete"),t.NotebookCellInsert=new t("NotebookCellInsert"),t.NotebookCellBetween=new t("NotebookCellBetween"),t.NotebookCellListTop=new t("NotebookCellTop"),t.NotebookCellExecute=new t("NotebookCellExecute"),t.NotebookCellExecutePrimary=new t("NotebookCellExecutePrimary"),t.NotebookDiffCellInputTitle=new t("NotebookDiffCellInputTitle"),t.NotebookDiffCellMetadataTitle=new t("NotebookDiffCellMetadataTitle"),t.NotebookDiffCellOutputsTitle=new t("NotebookDiffCellOutputsTitle"),t.NotebookOutputToolbar=new t("NotebookOutputToolbar"),t.NotebookEditorLayoutConfigure=new t("NotebookEditorLayoutConfigure"),t.NotebookKernelSource=new t("NotebookKernelSource"),t.BulkEditTitle=new t("BulkEditTitle"),t.BulkEditContext=new t("BulkEditContext"),t.TimelineItemContext=new t("TimelineItemContext"),t.TimelineTitle=new t("TimelineTitle"),t.TimelineTitleContext=new t("TimelineTitleContext"),t.TimelineFilterSubMenu=new t("TimelineFilterSubMenu"),t.AccountsContext=new t("AccountsContext"),t.SidebarTitle=new t("SidebarTitle"),t.PanelTitle=new t("PanelTitle"),t.AuxiliaryBarTitle=new t("AuxiliaryBarTitle"),t.TerminalInstanceContext=new t("TerminalInstanceContext"),t.TerminalEditorInstanceContext=new t("TerminalEditorInstanceContext"),t.TerminalNewDropdownContext=new t("TerminalNewDropdownContext"),t.TerminalTabContext=new t("TerminalTabContext"),t.TerminalTabEmptyAreaContext=new t("TerminalTabEmptyAreaContext"),t.TerminalStickyScrollContext=new t("TerminalStickyScrollContext"),t.WebviewContext=new t("WebviewContext"),t.InlineCompletionsActions=new t("InlineCompletionsActions"),t.NewFile=new t("NewFile"),t.MergeInput1Toolbar=new t("MergeToolbar1Toolbar"),t.MergeInput2Toolbar=new t("MergeToolbar2Toolbar"),t.MergeBaseToolbar=new t("MergeBaseToolbar"),t.MergeInputResultToolbar=new t("MergeToolbarResultToolbar"),t.InlineSuggestionToolbar=new t("InlineSuggestionToolbar"),t.ChatContext=new t("ChatContext"),t.ChatCodeBlock=new t("ChatCodeblock"),t.ChatMessageTitle=new t("ChatMessageTitle"),t.ChatExecute=new t("ChatExecute"),t.ChatInputSide=new t("ChatInputSide"),t.AccessibleView=new t("AccessibleView"),t.MultiDiffEditorFileToolbar=new t("MultiDiffEditorFileToolbar"),e.IMenuService=(0,v.createDecorator)("menuService");class r{static for(l){let o=this._all.get(l);return o||(o=new r(l),this._all.set(l,o)),o}static merge(l){const o=new Set;for(const g of l)g instanceof r&&o.add(g.id);return o}constructor(l){this.id=l,this.has=o=>o===l}}r._all=new Map,e.MenuRegistry=new class{constructor(){this._commands=new Map,this._menuItems=new Map,this._onDidChangeMenu=new y.MicrotaskEmitter({merge:r.merge}),this.onDidChangeMenu=this._onDidChangeMenu.event}addCommand(s){return this._commands.set(s.id,s),this._onDidChangeMenu.fire(r.for(t.CommandPalette)),(0,E.toDisposable)(()=>{this._commands.delete(s.id)&&this._onDidChangeMenu.fire(r.for(t.CommandPalette))})}getCommand(s){return this._commands.get(s)}getCommands(){const s=new Map;return this._commands.forEach((l,o)=>s.set(o,l)),s}appendMenuItem(s,l){let o=this._menuItems.get(s);o||(o=new S.LinkedList,this._menuItems.set(s,o));const g=o.push(l);return this._onDidChangeMenu.fire(r.for(s)),(0,E.toDisposable)(()=>{g(),this._onDidChangeMenu.fire(r.for(s))})}appendMenuItems(s){const l=new E.DisposableStore;for(const{id:o,item:g}of s)l.add(this.appendMenuItem(o,g));return l}getMenuItems(s){let l;return this._menuItems.has(s)?l=[...this._menuItems.get(s)]:l=[],s===t.CommandPalette&&this._appendImplicitItems(l),l}_appendImplicitItems(s){const l=new Set;for(const o of s)i(o)&&(l.add(o.command.id),o.alt&&l.add(o.alt.id));this._commands.forEach((o,g)=>{l.has(g)||s.push({command:o})})}};class u extends L.SubmenuAction{constructor(l,o,g){super(`submenuitem.${l.submenu.id}`,typeof l.title=="string"?l.title:l.title.value,g,"submenu"),this.item=l,this.hideActions=o}}e.SubmenuItemAction=u;let f=a=class{static label(l,o){return o?.renderShortTitle&&l.shortTitle?typeof l.shortTitle=="string"?l.shortTitle:l.shortTitle.value:typeof l.title=="string"?l.title:l.title.value}constructor(l,o,g,h,m,C){var w,D;this.hideActions=h,this._commandService=C,this.id=l.id,this.label=a.label(l,g),this.tooltip=(D=typeof l.tooltip=="string"?l.tooltip:(w=l.tooltip)===null||w===void 0?void 0:w.value)!==null&&D!==void 0?D:"",this.enabled=!l.precondition||m.contextMatchesRules(l.precondition),this.checked=void 0;let I;if(l.toggled){const T=l.toggled.condition?l.toggled:{condition:l.toggled};this.checked=m.contextMatchesRules(T.condition),this.checked&&T.tooltip&&(this.tooltip=typeof T.tooltip=="string"?T.tooltip:T.tooltip.value),this.checked&&k.ThemeIcon.isThemeIcon(T.icon)&&(I=T.icon),this.checked&&T.title&&(this.label=typeof T.title=="string"?T.title:T.title.value)}I||(I=k.ThemeIcon.isThemeIcon(l.icon)?l.icon:void 0),this.item=l,this.alt=o?new a(o,void 0,g,h,m,C):void 0,this._options=g,this.class=I&&k.ThemeIcon.asClassName(I)}run(...l){var o,g;let h=[];return!((o=this._options)===null||o===void 0)&&o.arg&&(h=[...h,this._options.arg]),!((g=this._options)===null||g===void 0)&&g.shouldForwardArgs&&(h=[...h,...l]),this._commandService.executeCommand(this.id,...h)}};e.MenuItemAction=f,e.MenuItemAction=f=a=ke([ge(4,_.IContextKeyService),ge(5,p.ICommandService)],f);class c{constructor(l){this.desc=l}}e.Action2=c;function d(s){const l=new E.DisposableStore,o=new s,{f1:g,menu:h,keybinding:m,...C}=o.desc;if(p.CommandsRegistry.getCommand(C.id))throw new Error(`Cannot register two commands with the same id: ${C.id}`);if(l.add(p.CommandsRegistry.registerCommand({id:C.id,handler:(w,...D)=>o.run(w,...D),metadata:C.metadata})),Array.isArray(h))for(const w of h)l.add(e.MenuRegistry.appendMenuItem(w.id,{command:{...C,precondition:w.precondition===null?void 0:C.precondition},...w}));else h&&l.add(e.MenuRegistry.appendMenuItem(h.id,{command:{...C,precondition:h.precondition===null?void 0:C.precondition},...h}));if(g&&(l.add(e.MenuRegistry.appendMenuItem(t.CommandPalette,{command:C,when:C.precondition})),l.add(e.MenuRegistry.addCommand(C))),Array.isArray(m))for(const w of m)l.add(b.KeybindingsRegistry.registerKeybindingRule({...w,id:C.id,when:C.precondition?_.ContextKeyExpr.and(C.precondition,w.when):w.when}));else m&&l.add(b.KeybindingsRegistry.registerKeybindingRule({...m,id:C.id,when:C.precondition?_.ContextKeyExpr.and(C.precondition,m.when):m.when}));return l}e.registerAction2=d}),define(se[800],oe([1,0,48,202,723,30]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ToggleTabFocusModeAction=void 0;class S extends E.Action2{constructor(){super({id:S.ID,title:{value:y.localize(0,null),original:"Toggle Tab Key Moves Focus"},precondition:void 0,keybinding:{primary:2091,mac:{primary:1323},weight:100},f1:!0})}run(){const v=!k.TabFocus.getTabFocusMode();k.TabFocus.setTabFocusMode(v),v?(0,L.alert)(y.localize(1,null)):(0,L.alert)(y.localize(2,null))}}e.ToggleTabFocusModeAction=S,S.ID="editor.action.toggleTabFocusMode",(0,E.registerAction2)(S)}),define(se[357],oe([1,0,232,598,15,124,742,2,7]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextScopedReplaceInput=e.ContextScopedFindInput=e.registerAndCreateHistoryNavigationContext=e.historyNavigationVisible=void 0,e.historyNavigationVisible=new y.RawContextKey("suggestWidgetVisible",!1,(0,S.localize)(0,null));const v="historyNavigationWidgetFocus",b="historyNavigationForwardsEnabled",a="historyNavigationBackwardsEnabled";let i;const n=[];function t(f,c){if(n.includes(c))throw new Error("Cannot register the same widget multiple times");n.push(c);const d=new p.DisposableStore,s=new y.RawContextKey(v,!1).bindTo(f),l=new y.RawContextKey(b,!0).bindTo(f),o=new y.RawContextKey(a,!0).bindTo(f),g=()=>{s.set(!0),i=c},h=()=>{s.set(!1),i===c&&(i=void 0)};return(0,_.isActiveElement)(c.element)&&g(),d.add(c.onDidFocus(()=>g())),d.add(c.onDidBlur(()=>h())),d.add((0,p.toDisposable)(()=>{n.splice(n.indexOf(c),1),h()})),{historyNavigationForwardsEnablement:l,historyNavigationBackwardsEnablement:o,dispose(){d.dispose()}}}e.registerAndCreateHistoryNavigationContext=t;let r=class extends L.FindInput{constructor(c,d,s,l){super(c,d,s);const o=this._register(l.createScoped(this.inputBox.element));this._register(t(o,this.inputBox))}};e.ContextScopedFindInput=r,e.ContextScopedFindInput=r=ke([ge(3,y.IContextKeyService)],r);let u=class extends k.ReplaceInput{constructor(c,d,s,l,o=!1){super(c,d,o,s);const g=this._register(l.createScoped(this.inputBox.element));this._register(t(g,this.inputBox))}};e.ContextScopedReplaceInput=u,e.ContextScopedReplaceInput=u=ke([ge(3,y.IContextKeyService)],u),E.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"history.showPrevious",weight:200,when:y.ContextKeyExpr.and(y.ContextKeyExpr.has(v),y.ContextKeyExpr.equals(a,!0),y.ContextKeyExpr.not("isComposing"),e.historyNavigationVisible.isEqualTo(!1)),primary:16,secondary:[528],handler:f=>{i?.showPreviousValue()}}),E.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"history.showNext",weight:200,when:y.ContextKeyExpr.and(y.ContextKeyExpr.has(v),y.ContextKeyExpr.equals(b,!0),y.ContextKeyExpr.not("isComposing"),e.historyNavigationVisible.isEqualTo(!1)),primary:18,secondary:[530],handler:f=>{i?.showNextValue()}})}),define(se[138],oe([1,0,19,12,71,2,61,20,22,10,5,68,117,716,30,25,15,18,357]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickSuggestionsOptions=e.showSimpleSuggestions=e.getSuggestionComparator=e.provideSuggestionItems=e.CompletionItemModel=e.getSnippetSuggestSupport=e.CompletionOptions=e.CompletionItem=e.suggestWidgetStatusbarMenu=e.Context=void 0,e.Context={Visible:c.historyNavigationVisible,HasFocusedSuggestion:new u.RawContextKey("suggestWidgetHasFocusedSuggestion",!1,(0,n.localize)(0,null)),DetailsVisible:new u.RawContextKey("suggestWidgetDetailsVisible",!1,(0,n.localize)(1,null)),MultipleSuggestions:new u.RawContextKey("suggestWidgetMultipleSuggestions",!1,(0,n.localize)(2,null)),MakesTextEdit:new u.RawContextKey("suggestionMakesTextEdit",!0,(0,n.localize)(3,null)),AcceptSuggestionsOnEnter:new u.RawContextKey("acceptSuggestionOnEnter",!0,(0,n.localize)(4,null)),HasInsertAndReplaceRange:new u.RawContextKey("suggestionHasInsertAndReplaceRange",!1,(0,n.localize)(5,null)),InsertMode:new u.RawContextKey("suggestionInsertMode",void 0,{type:"string",description:(0,n.localize)(6,null)}),CanResolve:new u.RawContextKey("suggestionCanResolve",!1,(0,n.localize)(7,null))},e.suggestWidgetStatusbarMenu=new t.MenuId("suggestWidgetStatusBar");class d{constructor(N,M,R,x){var O;this.position=N,this.completion=M,this.container=R,this.provider=x,this.isInvalid=!1,this.score=y.FuzzyScore.Default,this.distance=0,this.textLabel=typeof M.label=="string"?M.label:(O=M.label)===null||O===void 0?void 0:O.label,this.labelLow=this.textLabel.toLowerCase(),this.isInvalid=!this.textLabel,this.sortTextLow=M.sortText&&M.sortText.toLowerCase(),this.filterTextLow=M.filterText&&M.filterText.toLowerCase(),this.extensionId=M.extensionId,b.Range.isIRange(M.range)?(this.editStart=new v.Position(M.range.startLineNumber,M.range.startColumn),this.editInsertEnd=new v.Position(M.range.endLineNumber,M.range.endColumn),this.editReplaceEnd=new v.Position(M.range.endLineNumber,M.range.endColumn),this.isInvalid=this.isInvalid||b.Range.spansMultipleLines(M.range)||M.range.startLineNumber!==N.lineNumber):(this.editStart=new v.Position(M.range.insert.startLineNumber,M.range.insert.startColumn),this.editInsertEnd=new v.Position(M.range.insert.endLineNumber,M.range.insert.endColumn),this.editReplaceEnd=new v.Position(M.range.replace.endLineNumber,M.range.replace.endColumn),this.isInvalid=this.isInvalid||b.Range.spansMultipleLines(M.range.insert)||b.Range.spansMultipleLines(M.range.replace)||M.range.insert.startLineNumber!==N.lineNumber||M.range.replace.startLineNumber!==N.lineNumber||M.range.insert.startColumn!==M.range.replace.startColumn),typeof x.resolveCompletionItem!="function"&&(this._resolveCache=Promise.resolve(),this._resolveDuration=0)}get isResolved(){return this._resolveDuration!==void 0}get resolveDuration(){return this._resolveDuration!==void 0?this._resolveDuration:-1}async resolve(N){if(!this._resolveCache){const M=N.onCancellationRequested(()=>{this._resolveCache=void 0,this._resolveDuration=void 0}),R=new S.StopWatch(!0);this._resolveCache=Promise.resolve(this.provider.resolveCompletionItem(this.completion,N)).then(x=>{Object.assign(this.completion,x),this._resolveDuration=R.elapsed()},x=>{(0,k.isCancellationError)(x)&&(this._resolveCache=void 0,this._resolveDuration=void 0)}).finally(()=>{M.dispose()})}return this._resolveCache}}e.CompletionItem=d;class s{constructor(N=2,M=new Set,R=new Set,x=new Map,O=!0){this.snippetSortOrder=N,this.kindFilter=M,this.providerFilter=R,this.providerItemsToReuse=x,this.showDeprecated=O}}e.CompletionOptions=s,s.default=new s;let l;function o(){return l}e.getSnippetSuggestSupport=o;class g{constructor(N,M,R,x){this.items=N,this.needsClipboard=M,this.durations=R,this.disposable=x}}e.CompletionItemModel=g;async function h(P,N,M,R=s.default,x={triggerKind:0},O=L.CancellationToken.None){const B=new S.StopWatch;M=M.clone();const W=N.getWordAtPosition(M),V=W?new b.Range(M.lineNumber,W.startColumn,M.lineNumber,W.endColumn):b.Range.fromPositions(M),K={replace:V,insert:V.setEndPosition(M.lineNumber,M.column)},F=[],q=new E.DisposableStore,ie=[];let ae=!1;const ne=(J,Q,re)=>{var de,he,me;let X=!1;if(!Q)return X;for(const U of Q.suggestions)if(!R.kindFilter.has(U.kind)){if(!R.showDeprecated&&(!((de=U?.tags)===null||de===void 0)&&de.includes(1)))continue;U.range||(U.range=K),U.sortText||(U.sortText=typeof U.label=="string"?U.label:U.label.label),!ae&&U.insertTextRules&&U.insertTextRules&4&&(ae=i.SnippetParser.guessNeedsClipboard(U.insertText)),F.push(new d(M,U,Q,J)),X=!0}return(0,E.isDisposable)(Q)&&q.add(Q),ie.push({providerName:(he=J._debugDisplayName)!==null&&he!==void 0?he:"unknown_provider",elapsedProvider:(me=Q.duration)!==null&&me!==void 0?me:-1,elapsedOverall:re.elapsed()}),X},$=(async()=>{if(!l||R.kindFilter.has(27))return;const J=R.providerItemsToReuse.get(l);if(J){J.forEach(de=>F.push(de));return}if(R.providerFilter.size>0&&!R.providerFilter.has(l))return;const Q=new S.StopWatch,re=await l.provideCompletionItems(N,M,x,O);ne(l,re,Q)})();for(const J of P.orderedGroups(N)){let Q=!1;if(await Promise.all(J.map(async re=>{if(R.providerItemsToReuse.has(re)){const de=R.providerItemsToReuse.get(re);de.forEach(he=>F.push(he)),Q=Q||de.length>0;return}if(!(R.providerFilter.size>0&&!R.providerFilter.has(re)))try{const de=new S.StopWatch,he=await re.provideCompletionItems(N,M,x,O);Q=ne(re,he,de)||Q}catch(de){(0,k.onUnexpectedExternalError)(de)}})),Q||O.isCancellationRequested)break}return await $,O.isCancellationRequested?(q.dispose(),Promise.reject(new k.CancellationError)):new g(F.sort(I(R.snippetSortOrder)),ae,{entries:ie,elapsed:B.elapsed()},q)}e.provideSuggestionItems=h;function m(P,N){if(P.sortTextLow&&N.sortTextLow){if(P.sortTextLowN.sortTextLow)return 1}return P.textLabelN.textLabel?1:P.completion.kind-N.completion.kind}function C(P,N){if(P.completion.kind!==N.completion.kind){if(P.completion.kind===27)return-1;if(N.completion.kind===27)return 1}return m(P,N)}function w(P,N){if(P.completion.kind!==N.completion.kind){if(P.completion.kind===27)return 1;if(N.completion.kind===27)return-1}return m(P,N)}const D=new Map;D.set(0,C),D.set(2,w),D.set(1,m);function I(P){return D.get(P)}e.getSuggestionComparator=I,r.CommandsRegistry.registerCommand("_executeCompletionItemProvider",async(P,...N)=>{const[M,R,x,O]=N;(0,p.assertType)(_.URI.isUri(M)),(0,p.assertType)(v.Position.isIPosition(R)),(0,p.assertType)(typeof x=="string"||!x),(0,p.assertType)(typeof O=="number"||!O);const{completionProvider:B}=P.get(f.ILanguageFeaturesService),W=await P.get(a.ITextModelService).createModelReference(M);try{const V={incomplete:!1,suggestions:[]},K=[],F=W.object.textEditorModel.validatePosition(R),q=await h(B,W.object.textEditorModel,F,void 0,{triggerCharacter:x??void 0,triggerKind:x?1:0});for(const ie of q.items)K.length<(O??0)&&K.push(ie.resolve(L.CancellationToken.None)),V.incomplete=V.incomplete||ie.container.incomplete,V.suggestions.push(ie.completion);try{return await Promise.all(K),V}finally{setTimeout(()=>q.disposable.dispose(),100)}}finally{W.dispose()}});function T(P,N){var M;(M=P.getContribution("editor.contrib.suggestController"))===null||M===void 0||M.triggerSuggest(new Set().add(N),void 0,!0)}e.showSimpleSuggestions=T;class A{static isAllOff(N){return N.other==="off"&&N.comments==="off"&&N.strings==="off"}static isAllOn(N){return N.other==="on"&&N.comments==="on"&&N.strings==="on"}static valueFor(N,M){switch(M){case 1:return N.comments;case 2:return N.strings;default:return N.other}}}e.QuickSuggestionsOptions=A}),define(se[139],oe([1,0,13,2,37]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickAccessRegistry=e.Extensions=e.DefaultQuickAccessFilterValue=void 0;var E;(function(p){p[p.PRESERVE=0]="PRESERVE",p[p.LAST=1]="LAST"})(E||(e.DefaultQuickAccessFilterValue=E={})),e.Extensions={Quickaccess:"workbench.contributions.quickaccess"};class S{constructor(){this.providers=[],this.defaultProvider=void 0}registerQuickAccessProvider(_){return _.prefix.length===0?this.defaultProvider=_:this.providers.push(_),this.providers.sort((v,b)=>b.prefix.length-v.prefix.length),(0,k.toDisposable)(()=>{this.providers.splice(this.providers.indexOf(_),1),this.defaultProvider===_&&(this.defaultProvider=void 0)})}getQuickAccessProviders(){return(0,L.coalesce)([this.defaultProvider,...this.providers])}getQuickAccessProvider(_){return _&&this.providers.find(b=>_.startsWith(b.prefix))||void 0||this.defaultProvider}}e.QuickAccessRegistry=S,y.Registry.add(e.Extensions.Quickaccess,new S)}),define(se[801],oe([1,0,747,37,2,34,139,70]),function(te,e,L,k,y,E,S,p){"use strict";var _;Object.defineProperty(e,"__esModule",{value:!0}),e.HelpQuickAccessProvider=void 0;let v=_=class{constructor(a,i){this.quickInputService=a,this.keybindingService=i,this.registry=k.Registry.as(S.Extensions.Quickaccess)}provide(a){const i=new y.DisposableStore;return i.add(a.onDidAccept(()=>{const[n]=a.selectedItems;n&&this.quickInputService.quickAccess.show(n.prefix,{preserveValue:!0})})),i.add(a.onDidChangeValue(n=>{const t=this.registry.getQuickAccessProvider(n.substr(_.PREFIX.length));t&&t.prefix&&t.prefix!==_.PREFIX&&this.quickInputService.quickAccess.show(t.prefix,{preserveValue:!0})})),a.items=this.getQuickAccessProviders().filter(n=>n.prefix!==_.PREFIX),i}getQuickAccessProviders(){return this.registry.getQuickAccessProviders().sort((i,n)=>i.prefix.localeCompare(n.prefix)).flatMap(i=>this.createPicks(i))}createPicks(a){return a.helpEntries.map(i=>{const n=i.prefix||a.prefix,t=n||"\u2026";return{prefix:n,label:t,keybinding:i.commandId?this.keybindingService.lookupKeybinding(i.commandId):void 0,ariaLabel:(0,L.localize)(0,null,t,i.description),description:i.description}})}};e.HelpQuickAccessProvider=v,v.PREFIX="?",e.HelpQuickAccessProvider=v=_=ke([ge(0,p.IQuickInputService),ge(1,E.IKeybindingService)],v)}),define(se[802],oe([1,0,37,139,96,801]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),L.Registry.as(k.Extensions.Quickaccess).registerQuickAccessProvider({ctor:E.HelpQuickAccessProvider,prefix:"",helpEntries:[{description:y.QuickHelpNLS.helpQuickAccessActionLabel}]})}),define(se[803],oe([1,0,14,19,6,2,8,139,70,37]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickAccessController=void 0;let b=class extends E.Disposable{constructor(i,n){super(),this.quickInputService=i,this.instantiationService=n,this.registry=v.Registry.as(p.Extensions.Quickaccess),this.mapProviderToDescriptor=new Map,this.lastAcceptedPickerValues=new Map,this.visibleQuickAccess=void 0}show(i="",n){this.doShowOrPick(i,!1,n)}doShowOrPick(i,n,t){var r;const[u,f]=this.getOrInstantiateProvider(i),c=this.visibleQuickAccess,d=c?.descriptor;if(c&&f&&d===f){i!==f.prefix&&!t?.preserveValue&&(c.picker.value=i),this.adjustValueSelection(c.picker,f,t);return}if(f&&!t?.preserveValue){let h;if(c&&d&&d!==f){const m=c.value.substr(d.prefix.length);m&&(h=`${f.prefix}${m}`)}if(!h){const m=u?.defaultFilterValue;m===p.DefaultQuickAccessFilterValue.LAST?h=this.lastAcceptedPickerValues.get(f):typeof m=="string"&&(h=`${f.prefix}${m}`)}typeof h=="string"&&(i=h)}const s=new E.DisposableStore,l=s.add(this.quickInputService.createQuickPick());l.value=i,this.adjustValueSelection(l,f,t),l.placeholder=f?.placeholder,l.quickNavigate=t?.quickNavigateConfiguration,l.hideInput=!!l.quickNavigate&&!c,(typeof t?.itemActivation=="number"||t?.quickNavigateConfiguration)&&(l.itemActivation=(r=t?.itemActivation)!==null&&r!==void 0?r:_.ItemActivation.SECOND),l.contextKey=f?.contextKey,l.filterValue=h=>h.substring(f?f.prefix.length:0);let o;n&&(o=new L.DeferredPromise,s.add(y.Event.once(l.onWillAccept)(h=>{h.veto(),l.hide()}))),s.add(this.registerPickerListeners(l,u,f,i,t?.providerOptions));const g=s.add(new k.CancellationTokenSource);if(u&&s.add(u.provide(l,g.token,t?.providerOptions)),y.Event.once(l.onDidHide)(()=>{l.selectedItems.length===0&&g.cancel(),s.dispose(),o?.complete(l.selectedItems.slice(0))}),l.show(),n)return o?.p}adjustValueSelection(i,n,t){var r;let u;t?.preserveValue?u=[i.value.length,i.value.length]:u=[(r=n?.prefix.length)!==null&&r!==void 0?r:0,i.value.length],i.valueSelection=u}registerPickerListeners(i,n,t,r,u){const f=new E.DisposableStore,c=this.visibleQuickAccess={picker:i,descriptor:t,value:r};return f.add((0,E.toDisposable)(()=>{c===this.visibleQuickAccess&&(this.visibleQuickAccess=void 0)})),f.add(i.onDidChangeValue(d=>{const[s]=this.getOrInstantiateProvider(d);s!==n?this.show(d,{preserveValue:!0,providerOptions:u}):c.value=d})),t&&f.add(i.onDidAccept(()=>{this.lastAcceptedPickerValues.set(t,i.value)})),f}getOrInstantiateProvider(i){const n=this.registry.getQuickAccessProvider(i);if(!n)return[void 0,void 0];let t=this.mapProviderToDescriptor.get(n);return t||(t=this.instantiationService.createInstance(n.ctor),this.mapProviderToDescriptor.set(n,t)),[t,n]}};e.QuickAccessController=b,e.QuickAccessController=b=ke([ge(0,_.IQuickInputService),ge(1,S.IInstantiationService)],b)}),define(se[804],oe([1,0,26,28,100,490]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SeverityIcon=void 0;var E;(function(S){function p(_){switch(_){case y.default.Ignore:return"severity-ignore "+k.ThemeIcon.asClassName(L.Codicon.info);case y.default.Info:return k.ThemeIcon.asClassName(L.Codicon.info);case y.default.Warning:return k.ThemeIcon.asClassName(L.Codicon.warning);case y.default.Error:return k.ThemeIcon.asClassName(L.Codicon.error);default:return""}}S.className=p})(E||(e.SeverityIcon=E={}))}),define(se[92],oe([1,0,6,2,20,604,8]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InMemoryStorageService=e.AbstractStorageService=e.loadKeyTargets=e.WillSaveStateReason=e.IStorageService=e.TARGET_KEY=void 0,e.TARGET_KEY="__$__targetStorageMarker",e.IStorageService=(0,S.createDecorator)("storageService");var p;(function(a){a[a.NONE=0]="NONE",a[a.SHUTDOWN=1]="SHUTDOWN"})(p||(e.WillSaveStateReason=p={}));function _(a){const i=a.get(e.TARGET_KEY);if(i)try{return JSON.parse(i)}catch{}return Object.create(null)}e.loadKeyTargets=_;class v extends k.Disposable{constructor(i={flushInterval:v.DEFAULT_FLUSH_INTERVAL}){super(),this.options=i,this._onDidChangeValue=this._register(new L.PauseableEmitter),this._onDidChangeTarget=this._register(new L.PauseableEmitter),this._onWillSaveState=this._register(new L.Emitter),this.onWillSaveState=this._onWillSaveState.event,this._workspaceKeyTargets=void 0,this._profileKeyTargets=void 0,this._applicationKeyTargets=void 0}onDidChangeValue(i,n,t){return L.Event.filter(this._onDidChangeValue.event,r=>r.scope===i&&(n===void 0||r.key===n),t)}emitDidChangeValue(i,n){const{key:t,external:r}=n;if(t===e.TARGET_KEY){switch(i){case-1:this._applicationKeyTargets=void 0;break;case 0:this._profileKeyTargets=void 0;break;case 1:this._workspaceKeyTargets=void 0;break}this._onDidChangeTarget.fire({scope:i})}else this._onDidChangeValue.fire({scope:i,key:t,target:this.getKeyTargets(i)[t],external:r})}get(i,n,t){var r;return(r=this.getStorage(n))===null||r===void 0?void 0:r.get(i,t)}getBoolean(i,n,t){var r;return(r=this.getStorage(n))===null||r===void 0?void 0:r.getBoolean(i,t)}getNumber(i,n,t){var r;return(r=this.getStorage(n))===null||r===void 0?void 0:r.getNumber(i,t)}store(i,n,t,r,u=!1){if((0,y.isUndefinedOrNull)(n)){this.remove(i,t,u);return}this.withPausedEmitters(()=>{var f;this.updateKeyTarget(i,t,r),(f=this.getStorage(t))===null||f===void 0||f.set(i,n,u)})}remove(i,n,t=!1){this.withPausedEmitters(()=>{var r;this.updateKeyTarget(i,n,void 0),(r=this.getStorage(n))===null||r===void 0||r.delete(i,t)})}withPausedEmitters(i){this._onDidChangeValue.pause(),this._onDidChangeTarget.pause();try{i()}finally{this._onDidChangeValue.resume(),this._onDidChangeTarget.resume()}}updateKeyTarget(i,n,t,r=!1){var u,f;const c=this.getKeyTargets(n);typeof t=="number"?c[i]!==t&&(c[i]=t,(u=this.getStorage(n))===null||u===void 0||u.set(e.TARGET_KEY,JSON.stringify(c),r)):typeof c[i]=="number"&&(delete c[i],(f=this.getStorage(n))===null||f===void 0||f.set(e.TARGET_KEY,JSON.stringify(c),r))}get workspaceKeyTargets(){return this._workspaceKeyTargets||(this._workspaceKeyTargets=this.loadKeyTargets(1)),this._workspaceKeyTargets}get profileKeyTargets(){return this._profileKeyTargets||(this._profileKeyTargets=this.loadKeyTargets(0)),this._profileKeyTargets}get applicationKeyTargets(){return this._applicationKeyTargets||(this._applicationKeyTargets=this.loadKeyTargets(-1)),this._applicationKeyTargets}getKeyTargets(i){switch(i){case-1:return this.applicationKeyTargets;case 0:return this.profileKeyTargets;default:return this.workspaceKeyTargets}}loadKeyTargets(i){const n=this.getStorage(i);return n?_(n):Object.create(null)}}e.AbstractStorageService=v,v.DEFAULT_FLUSH_INTERVAL=60*1e3;class b extends v{constructor(){super(),this.applicationStorage=this._register(new E.Storage(new E.InMemoryStorageDatabase,{hint:E.StorageHint.STORAGE_IN_MEMORY})),this.profileStorage=this._register(new E.Storage(new E.InMemoryStorageDatabase,{hint:E.StorageHint.STORAGE_IN_MEMORY})),this.workspaceStorage=this._register(new E.Storage(new E.InMemoryStorageDatabase,{hint:E.StorageHint.STORAGE_IN_MEMORY})),this._register(this.workspaceStorage.onDidChangeStorage(i=>this.emitDidChangeValue(1,i))),this._register(this.profileStorage.onDidChangeStorage(i=>this.emitDidChangeValue(0,i))),this._register(this.applicationStorage.onDidChangeStorage(i=>this.emitDidChangeValue(-1,i)))}getStorage(i){switch(i){case-1:return this.applicationStorage;case 0:return this.profileStorage;default:return this.workspaceStorage}}}e.InMemoryStorageService=b}),define(se[805],oe([1,0,6,53,5,343,45,8,92,44,7]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeLensCache=e.ICodeLensCache=void 0,e.ICodeLensCache=(0,p.createDecorator)("ICodeLensCache");class a{constructor(t,r){this.lineCount=t,this.data=r}}let i=class{constructor(t){this._fakeProvider=new class{provideCodeLenses(){throw new Error("not supported")}},this._cache=new k.LRUCache(20,.75);const r="codelens/cache";(0,b.runWhenWindowIdle)(v.mainWindow,()=>t.remove(r,1));const u="codelens/cache2",f=t.get(u,1,"{}");this._deserialize(f),L.Event.once(t.onWillSaveState)(c=>{c.reason===_.WillSaveStateReason.SHUTDOWN&&t.store(u,this._serialize(),1,1)})}put(t,r){const u=r.lenses.map(d=>{var s;return{range:d.symbol.range,command:d.symbol.command&&{id:"",title:(s=d.symbol.command)===null||s===void 0?void 0:s.title}}}),f=new E.CodeLensModel;f.add({lenses:u,dispose:()=>{}},this._fakeProvider);const c=new a(t.getLineCount(),f);this._cache.set(t.uri.toString(),c)}get(t){const r=this._cache.get(t.uri.toString());return r&&r.lineCount===t.getLineCount()?r.data:void 0}delete(t){this._cache.delete(t.uri.toString())}_serialize(){const t=Object.create(null);for(const[r,u]of this._cache){const f=new Set;for(const c of u.data.lenses)f.add(c.symbol.range.startLineNumber);t[r]={lineCount:u.lineCount,lines:[...f.values()]}}return JSON.stringify(t)}_deserialize(t){try{const r=JSON.parse(t);for(const u in r){const f=r[u],c=[];for(const s of f.lines)c.push({range:new y.Range(s,1,s,11)});const d=new E.CodeLensModel;d.add({lenses:c,dispose(){}},this._fakeProvider),this._cache.set(u,new a(f.lineCount,d))}}catch{}}};e.CodeLensCache=i,e.CodeLensCache=i=ke([ge(0,_.IStorageService)],i),(0,S.registerSingleton)(e.ICodeLensCache,i,1)}),define(se[358],oe([1,0,14,2,53,199,31,27,45,8,92]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";var a;Object.defineProperty(e,"__esModule",{value:!0}),e.ISuggestMemoryService=e.SuggestMemoryService=e.PrefixMemory=e.LRUMemory=e.NoMemory=e.Memory=void 0;class i{constructor(c){this.name=c}select(c,d,s){if(s.length===0)return 0;const l=s[0].score[0];for(let o=0;om&&D.type===s[C].completion.kind&&D.insertText===s[C].completion.insertText&&(m=D.touch,h=C),s[C].completion.preselect&&g===-1)return g=C}return h!==-1?h:g!==-1?g:0}toJSON(){return this._cache.toJSON()}fromJSON(c){this._cache.clear();const d=0;for(const[s,l]of c)l.touch=d,l.type=typeof l.type=="number"?l.type:S.CompletionItemKinds.fromString(l.type),this._cache.set(s,l);this._seq=this._cache.size}}e.LRUMemory=t;class r extends i{constructor(){super("recentlyUsedByPrefix"),this._trie=E.TernarySearchTree.forStrings(),this._seq=0}memorize(c,d,s){const{word:l}=c.getWordUntilPosition(d),o=`${c.getLanguageId()}/${l}`;this._trie.set(o,{type:s.completion.kind,insertText:s.completion.insertText,touch:this._seq++})}select(c,d,s){const{word:l}=c.getWordUntilPosition(d);if(!l)return super.select(c,d,s);const o=`${c.getLanguageId()}/${l}`;let g=this._trie.get(o);if(g||(g=this._trie.findSubstr(o)),g)for(let h=0;hc.push([s,d])),c.sort((d,s)=>-(d[1].touch-s[1].touch)).forEach((d,s)=>d[1].touch=s),c.slice(0,200)}fromJSON(c){if(this._trie.clear(),c.length>0){this._seq=c[0][1].touch+1;for(const[d,s]of c)s.type=typeof s.type=="number"?s.type:S.CompletionItemKinds.fromString(s.type),this._trie.set(d,s)}}}e.PrefixMemory=r;let u=a=class{constructor(c,d){this._storageService=c,this._configService=d,this._disposables=new k.DisposableStore,this._persistSoon=new L.RunOnceScheduler(()=>this._saveState(),500),this._disposables.add(c.onWillSaveState(s=>{s.reason===b.WillSaveStateReason.SHUTDOWN&&this._saveState()}))}dispose(){this._disposables.dispose(),this._persistSoon.dispose()}memorize(c,d,s){this._withStrategy(c,d).memorize(c,d,s),this._persistSoon.schedule()}select(c,d,s){return this._withStrategy(c,d).select(c,d,s)}_withStrategy(c,d){var s;const l=this._configService.getValue("editor.suggestSelection",{overrideIdentifier:c.getLanguageIdAtPosition(d.lineNumber,d.column),resource:c.uri});if(((s=this._strategy)===null||s===void 0?void 0:s.name)!==l){this._saveState();const o=a._strategyCtors.get(l)||n;this._strategy=new o;try{const h=this._configService.getValue("editor.suggest.shareSuggestSelections")?0:1,m=this._storageService.get(`${a._storagePrefix}/${l}`,h);m&&this._strategy.fromJSON(JSON.parse(m))}catch{}}return this._strategy}_saveState(){if(this._strategy){const d=this._configService.getValue("editor.suggest.shareSuggestSelections")?0:1,s=JSON.stringify(this._strategy);this._storageService.store(`${a._storagePrefix}/${this._strategy.name}`,s,d,1)}}};e.SuggestMemoryService=u,u._strategyCtors=new Map([["recentlyUsedByPrefix",r],["recentlyUsed",t],["first",n]]),u._storagePrefix="suggest/memories",e.SuggestMemoryService=u=a=ke([ge(0,b.IStorageService),ge(1,p.IConfigurationService)],u),e.ISuggestMemoryService=(0,v.createDecorator)("ISuggestMemories"),(0,_.registerSingleton)(e.ISuggestMemoryService,u,1)}),define(se[806],oe([1,0,14,6,2,30,25,15,42,92,13,735]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";var i,n;Object.defineProperty(e,"__esModule",{value:!0}),e.MenuService=void 0;let t=class{constructor(s,l){this._commandService=s,this._hiddenStates=new r(l)}createMenu(s,l,o){return new f(s,this._hiddenStates,{emitEventsForSubmenuChanges:!1,eventDebounceDelay:50,...o},this._commandService,l)}resetHiddenStates(s){this._hiddenStates.reset(s)}};e.MenuService=t,e.MenuService=t=ke([ge(0,S.ICommandService),ge(1,v.IStorageService)],t);let r=i=class{constructor(s){this._storageService=s,this._disposables=new y.DisposableStore,this._onDidChange=new k.Emitter,this.onDidChange=this._onDidChange.event,this._ignoreChangeEvent=!1,this._hiddenByDefaultCache=new Map;try{const l=s.get(i._key,0,"{}");this._data=JSON.parse(l)}catch{this._data=Object.create(null)}this._disposables.add(s.onDidChangeValue(0,i._key,this._disposables)(()=>{if(!this._ignoreChangeEvent)try{const l=s.get(i._key,0,"{}");this._data=JSON.parse(l)}catch(l){console.log("FAILED to read storage after UPDATE",l)}this._onDidChange.fire()}))}dispose(){this._onDidChange.dispose(),this._disposables.dispose()}_isHiddenByDefault(s,l){var o;return(o=this._hiddenByDefaultCache.get(`${s.id}/${l}`))!==null&&o!==void 0?o:!1}setDefaultState(s,l,o){this._hiddenByDefaultCache.set(`${s.id}/${l}`,o)}isHidden(s,l){var o,g;const h=this._isHiddenByDefault(s,l),m=(g=(o=this._data[s.id])===null||o===void 0?void 0:o.includes(l))!==null&&g!==void 0?g:!1;return h?!m:m}updateHidden(s,l,o){this._isHiddenByDefault(s,l)&&(o=!o);const h=this._data[s.id];if(o)h?h.indexOf(l)<0&&h.push(l):this._data[s.id]=[l];else if(h){const m=h.indexOf(l);m>=0&&(0,b.removeFastWithoutKeepingOrder)(h,m),h.length===0&&delete this._data[s.id]}this._persist()}reset(s){if(s===void 0)this._data=Object.create(null),this._persist();else{for(const{id:l}of s)this._data[l]&&delete this._data[l];this._persist()}}_persist(){try{this._ignoreChangeEvent=!0;const s=JSON.stringify(this._data);this._storageService.store(i._key,s,0,0)}finally{this._ignoreChangeEvent=!1}}};r._key="menu.hiddenCommands",r=i=ke([ge(0,v.IStorageService)],r);let u=n=class{constructor(s,l,o,g,h){this._id=s,this._hiddenStates=l,this._collectContextKeysForSubmenus=o,this._commandService=g,this._contextKeyService=h,this._menuGroups=[],this._structureContextKeys=new Set,this._preconditionContextKeys=new Set,this._toggledContextKeys=new Set,this.refresh()}get structureContextKeys(){return this._structureContextKeys}get preconditionContextKeys(){return this._preconditionContextKeys}get toggledContextKeys(){return this._toggledContextKeys}refresh(){this._menuGroups.length=0,this._structureContextKeys.clear(),this._preconditionContextKeys.clear(),this._toggledContextKeys.clear();const s=E.MenuRegistry.getMenuItems(this._id);let l;s.sort(n._compareMenuItems);for(const o of s){const g=o.group||"";(!l||l[0]!==g)&&(l=[g,[]],this._menuGroups.push(l)),l[1].push(o),this._collectContextKeys(o)}}_collectContextKeys(s){if(n._fillInKbExprKeys(s.when,this._structureContextKeys),(0,E.isIMenuItem)(s)){if(s.command.precondition&&n._fillInKbExprKeys(s.command.precondition,this._preconditionContextKeys),s.command.toggled){const l=s.command.toggled.condition||s.command.toggled;n._fillInKbExprKeys(l,this._toggledContextKeys)}}else this._collectContextKeysForSubmenus&&E.MenuRegistry.getMenuItems(s.submenu).forEach(this._collectContextKeys,this)}createActionGroups(s){const l=[];for(const o of this._menuGroups){const[g,h]=o,m=[];for(const C of h)if(this._contextKeyService.contextMatchesRules(C.when)){const w=(0,E.isIMenuItem)(C);w&&this._hiddenStates.setDefaultState(this._id,C.command.id,!!C.isHiddenByDefault);const D=c(this._id,w?C.command:C,this._hiddenStates);if(w)m.push(new E.MenuItemAction(C.command,C.alt,s,D,this._contextKeyService,this._commandService));else{const I=new n(C.submenu,this._hiddenStates,this._collectContextKeysForSubmenus,this._commandService,this._contextKeyService).createActionGroups(s),T=_.Separator.join(...I.map(A=>A[1]));T.length>0&&m.push(new E.SubmenuItemAction(C,D,T))}}m.length>0&&l.push([g,m])}return l}static _fillInKbExprKeys(s,l){if(s)for(const o of s.keys())l.add(o)}static _compareMenuItems(s,l){const o=s.group,g=l.group;if(o!==g){if(o){if(!g)return-1}else return 1;if(o==="navigation")return-1;if(g==="navigation")return 1;const C=o.localeCompare(g);if(C!==0)return C}const h=s.order||0,m=l.order||0;return hm?1:n._compareTitles((0,E.isIMenuItem)(s)?s.command.title:s.title,(0,E.isIMenuItem)(l)?l.command.title:l.title)}static _compareTitles(s,l){const o=typeof s=="string"?s:s.original,g=typeof l=="string"?l:l.original;return o.localeCompare(g)}};u=n=ke([ge(3,S.ICommandService),ge(4,p.IContextKeyService)],u);let f=class{constructor(s,l,o,g,h){this._disposables=new y.DisposableStore,this._menuInfo=new u(s,l,o.emitEventsForSubmenuChanges,g,h);const m=new L.RunOnceScheduler(()=>{this._menuInfo.refresh(),this._onDidChange.fire({menu:this,isStructuralChange:!0,isEnablementChange:!0,isToggleChange:!0})},o.eventDebounceDelay);this._disposables.add(m),this._disposables.add(E.MenuRegistry.onDidChangeMenu(I=>{I.has(s)&&m.schedule()}));const C=this._disposables.add(new y.DisposableStore),w=I=>{let T=!1,A=!1,P=!1;for(const N of I)if(T=T||N.isStructuralChange,A=A||N.isEnablementChange,P=P||N.isToggleChange,T&&A&&P)break;return{menu:this,isStructuralChange:T,isEnablementChange:A,isToggleChange:P}},D=()=>{C.add(h.onDidChangeContext(I=>{const T=I.affectsSome(this._menuInfo.structureContextKeys),A=I.affectsSome(this._menuInfo.preconditionContextKeys),P=I.affectsSome(this._menuInfo.toggledContextKeys);(T||A||P)&&this._onDidChange.fire({menu:this,isStructuralChange:T,isEnablementChange:A,isToggleChange:P})})),C.add(l.onDidChange(I=>{this._onDidChange.fire({menu:this,isStructuralChange:!0,isEnablementChange:!1,isToggleChange:!1})}))};this._onDidChange=new k.DebounceEmitter({onWillAddFirstListener:D,onDidRemoveLastListener:C.clear.bind(C),delay:o.eventDebounceDelay,merge:w}),this.onDidChange=this._onDidChange.event}getActions(s){return this._menuInfo.createActionGroups(s)}dispose(){this._disposables.dispose(),this._onDidChange.dispose()}};f=ke([ge(3,S.ICommandService),ge(4,p.IContextKeyService)],f);function c(d,s,l){const o=(0,E.isISubmenuItem)(s)?s.submenu.id:s.id,g=typeof s.title=="string"?s.title:s.title.value,h=(0,_.toAction)({id:`hide/${d.id}/${o}`,label:(0,a.localize)(0,null,g),run(){l.updateHidden(d,o,!0)}}),m=(0,_.toAction)({id:`toggle/${d.id}/${o}`,label:g,get checked(){return!l.isHidden(d,o)},run(){l.updateHidden(d,o,!!this.checked)}});return{hide:h,toggle:m,get isHidden(){return!m.checked}}}}),define(se[81],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ITelemetryService=void 0,e.ITelemetryService=(0,L.createDecorator)("telemetryService")}),define(se[16],oe([1,0,620,22,33,10,51,68,30,25,15,8,124,37,81,20,64,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectAllCommand=e.RedoCommand=e.UndoCommand=e.EditorExtensionsRegistry=e.registerEditorContribution=e.registerInstantiatedEditorAction=e.registerMultiEditorAction=e.registerEditorAction=e.registerEditorCommand=e.registerModelAndPositionCommand=e.EditorAction2=e.MultiEditorAction=e.EditorAction=e.EditorCommand=e.ProxyCommand=e.MultiCommand=e.Command=void 0;class c{constructor(x){this.id=x.id,this.precondition=x.precondition,this._kbOpts=x.kbOpts,this._menuOpts=x.menuOpts,this.metadata=x.metadata}register(){if(Array.isArray(this._menuOpts)?this._menuOpts.forEach(this._registerMenuItem,this):this._menuOpts&&this._registerMenuItem(this._menuOpts),this._kbOpts){const x=Array.isArray(this._kbOpts)?this._kbOpts:[this._kbOpts];for(const O of x){let B=O.kbExpr;this.precondition&&(B?B=b.ContextKeyExpr.and(B,this.precondition):B=this.precondition);const W={id:this.id,weight:O.weight,args:O.args,when:B,primary:O.primary,secondary:O.secondary,win:O.win,linux:O.linux,mac:O.mac};i.KeybindingsRegistry.registerKeybindingRule(W)}}v.CommandsRegistry.registerCommand({id:this.id,handler:(x,O)=>this.runCommand(x,O),metadata:this.metadata})}_registerMenuItem(x){_.MenuRegistry.appendMenuItem(x.menuId,{group:x.group,command:{id:this.id,title:x.title,icon:x.icon,precondition:this.precondition},when:x.when,order:x.order})}}e.Command=c;class d extends c{constructor(){super(...arguments),this._implementations=[]}addImplementation(x,O,B,W){return this._implementations.push({priority:x,name:O,implementation:B,when:W}),this._implementations.sort((V,K)=>K.priority-V.priority),{dispose:()=>{for(let V=0;V{if(F.get(b.IContextKeyService).contextMatchesRules(B??void 0))return W(F,K,O)})}runCommand(x,O){return l.runEditorCommand(x,O,this.precondition,(B,W,V)=>this.runEditorCommand(B,W,V))}}e.EditorCommand=l;class o extends l{static convertOptions(x){let O;Array.isArray(x.menuOpts)?O=x.menuOpts:x.menuOpts?O=[x.menuOpts]:O=[];function B(W){return W.menuId||(W.menuId=_.MenuId.EditorContext),W.title||(W.title=x.label),W.when=b.ContextKeyExpr.and(x.precondition,W.when),W}return Array.isArray(x.contextMenuOpts)?O.push(...x.contextMenuOpts.map(B)):x.contextMenuOpts&&O.push(B(x.contextMenuOpts)),x.menuOpts=O,x}constructor(x){super(o.convertOptions(x)),this.label=x.label,this.alias=x.alias}runEditorCommand(x,O,B){return this.reportTelemetry(x,O),this.run(x,O,B||{})}reportTelemetry(x,O){x.get(t.ITelemetryService).publicLog2("editorActionInvoked",{name:this.label,id:this.id})}}e.EditorAction=o;class g extends o{constructor(){super(...arguments),this._implementations=[]}addImplementation(x,O){return this._implementations.push([x,O]),this._implementations.sort((B,W)=>W[0]-B[0]),{dispose:()=>{for(let B=0;B{var K,F;const q=V.get(b.IContextKeyService),ie=V.get(u.ILogService);if(!q.contextMatchesRules((K=this.desc.precondition)!==null&&K!==void 0?K:void 0)){ie.debug("[EditorAction2] NOT running command because its precondition is FALSE",this.desc.id,(F=this.desc.precondition)===null||F===void 0?void 0:F.serialize());return}return this.runEditorCommand(V,W,...O)})}}e.EditorAction2=h;function m(R,x){v.CommandsRegistry.registerCommand(R,function(O,...B){const W=O.get(a.IInstantiationService),[V,K]=B;(0,r.assertType)(k.URI.isUri(V)),(0,r.assertType)(E.Position.isIPosition(K));const F=O.get(S.IModelService).getModel(V);if(F){const q=E.Position.lift(K);return W.invokeFunction(x,F,q,...B.slice(2))}return O.get(p.ITextModelService).createModelReference(V).then(q=>new Promise((ie,ae)=>{try{const ne=W.invokeFunction(x,q.object.textEditorModel,E.Position.lift(K),B.slice(2));ie(ne)}catch(ne){ae(ne)}}).finally(()=>{q.dispose()}))})}e.registerModelAndPositionCommand=m;function C(R){return N.INSTANCE.registerEditorCommand(R),R}e.registerEditorCommand=C;function w(R){const x=new R;return N.INSTANCE.registerEditorAction(x),x}e.registerEditorAction=w;function D(R){return N.INSTANCE.registerEditorAction(R),R}e.registerMultiEditorAction=D;function I(R){N.INSTANCE.registerEditorAction(R)}e.registerInstantiatedEditorAction=I;function T(R,x,O){N.INSTANCE.registerEditorContribution(R,x,O)}e.registerEditorContribution=T;var A;(function(R){function x(K){return N.INSTANCE.getEditorCommand(K)}R.getEditorCommand=x;function O(){return N.INSTANCE.getEditorActions()}R.getEditorActions=O;function B(){return N.INSTANCE.getEditorContributions()}R.getEditorContributions=B;function W(K){return N.INSTANCE.getEditorContributions().filter(F=>K.indexOf(F.id)>=0)}R.getSomeEditorContributions=W;function V(){return N.INSTANCE.getDiffEditorContributions()}R.getDiffEditorContributions=V})(A||(e.EditorExtensionsRegistry=A={}));const P={EditorCommonContributions:"editor.contributions"};class N{constructor(){this.editorContributions=[],this.diffEditorContributions=[],this.editorActions=[],this.editorCommands=Object.create(null)}registerEditorContribution(x,O,B){this.editorContributions.push({id:x,ctor:O,instantiation:B})}getEditorContributions(){return this.editorContributions.slice(0)}getDiffEditorContributions(){return this.diffEditorContributions.slice(0)}registerEditorAction(x){x.register(),this.editorActions.push(x)}getEditorActions(){return this.editorActions}registerEditorCommand(x){x.register(),this.editorCommands[x.id]=x}getEditorCommand(x){return this.editorCommands[x]||null}}N.INSTANCE=new N,n.Registry.add(P.EditorCommonContributions,N.INSTANCE);function M(R){return R.register(),R}e.UndoCommand=M(new d({id:"undo",precondition:void 0,kbOpts:{weight:0,primary:2104},menuOpts:[{menuId:_.MenuId.MenubarEditMenu,group:"1_do",title:L.localize(0,null),order:1},{menuId:_.MenuId.CommandPalette,group:"",title:L.localize(1,null),order:1}]})),M(new s(e.UndoCommand,{id:"default:undo",precondition:void 0})),e.RedoCommand=M(new d({id:"redo",precondition:void 0,kbOpts:{weight:0,primary:2103,secondary:[3128],mac:{primary:3128}},menuOpts:[{menuId:_.MenuId.MenubarEditMenu,group:"1_do",title:L.localize(2,null),order:2},{menuId:_.MenuId.CommandPalette,group:"",title:L.localize(3,null),order:1}]})),M(new s(e.RedoCommand,{id:"default:redo",precondition:void 0})),e.SelectAllCommand=M(new d({id:"editor.action.selectAll",precondition:void 0,kbOpts:{weight:0,kbExpr:null,primary:2079},menuOpts:[{menuId:_.MenuId.MenubarSelectionMenu,group:"1_basic",title:L.localize(4,null),order:1},{menuId:_.MenuId.CommandPalette,group:"",title:L.localize(5,null),order:1}]}))}),define(se[191],oe([1,0,619,54,20,48,16,33,511,75,207,208,251,10,5,21,15,124,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CoreEditingCommands=e.CoreNavigationCommands=e.RevealLine_=e.EditorScroll_=e.CoreEditorCommand=void 0;const d=0;class s extends S.EditorCommand{runEditorCommand(P,N,M){const R=N._getViewModel();R&&this.runCoreEditorCommand(R,M||{})}}e.CoreEditorCommand=s;var l;(function(A){const P=function(M){if(!y.isObject(M))return!1;const R=M;return!(!y.isString(R.to)||!y.isUndefined(R.by)&&!y.isString(R.by)||!y.isUndefined(R.value)&&!y.isNumber(R.value)||!y.isUndefined(R.revealCursor)&&!y.isBoolean(R.revealCursor))};A.metadata={description:"Scroll editor in the given direction",args:[{name:"Editor scroll argument object",description:"Property-value pairs that can be passed through this argument:\n * 'to': A mandatory direction value.\n ```\n 'up', 'down'\n ```\n * 'by': Unit to move. Default is computed based on 'to' value.\n ```\n 'line', 'wrappedLine', 'page', 'halfPage', 'editor'\n ```\n * 'value': Number of units to move. Default is '1'.\n * 'revealCursor': If 'true' reveals the cursor if it is outside view port.\n ",constraint:P,schema:{type:"object",required:["to"],properties:{to:{type:"string",enum:["up","down"]},by:{type:"string",enum:["line","wrappedLine","page","halfPage","editor"]},value:{type:"number",default:1},revealCursor:{type:"boolean"}}}}]},A.RawDirection={Up:"up",Right:"right",Down:"down",Left:"left"},A.RawUnit={Line:"line",WrappedLine:"wrappedLine",Page:"page",HalfPage:"halfPage",Editor:"editor",Column:"column"};function N(M){let R;switch(M.to){case A.RawDirection.Up:R=1;break;case A.RawDirection.Right:R=2;break;case A.RawDirection.Down:R=3;break;case A.RawDirection.Left:R=4;break;default:return null}let x;switch(M.by){case A.RawUnit.Line:x=1;break;case A.RawUnit.WrappedLine:x=2;break;case A.RawUnit.Page:x=3;break;case A.RawUnit.HalfPage:x=4;break;case A.RawUnit.Editor:x=5;break;case A.RawUnit.Column:x=6;break;default:x=2}const O=Math.floor(M.value||1),B=!!M.revealCursor;return{direction:R,unit:x,value:O,revealCursor:B,select:!!M.select}}A.parse=N})(l||(e.EditorScroll_=l={}));var o;(function(A){const P=function(N){if(!y.isObject(N))return!1;const M=N;return!(!y.isNumber(M.lineNumber)&&!y.isString(M.lineNumber)||!y.isUndefined(M.at)&&!y.isString(M.at))};A.metadata={description:"Reveal the given line at the given logical position",args:[{name:"Reveal line argument object",description:"Property-value pairs that can be passed through this argument:\n * 'lineNumber': A mandatory line number value.\n * 'at': Logical position at which line has to be revealed.\n ```\n 'top', 'center', 'bottom'\n ```\n ",constraint:P,schema:{type:"object",required:["lineNumber"],properties:{lineNumber:{type:["number","string"]},at:{type:"string",enum:["top","center","bottom"]}}}}]},A.RawAtArgument={Top:"top",Center:"center",Bottom:"bottom"}})(o||(e.RevealLine_=o={}));class g{constructor(P){P.addImplementation(1e4,"code-editor",(N,M)=>{const R=N.get(p.ICodeEditorService).getFocusedCodeEditor();return R&&R.hasTextFocus()?this._runEditorCommand(N,R,M):!1}),P.addImplementation(1e3,"generic-dom-input-textarea",(N,M)=>{const R=(0,c.getActiveElement)();return R&&["input","textarea"].indexOf(R.tagName.toLowerCase())>=0?(this.runDOMCommand(R),!0):!1}),P.addImplementation(0,"generic-dom",(N,M)=>{const R=N.get(p.ICodeEditorService).getActiveCodeEditor();return R?(R.focus(),this._runEditorCommand(N,R,M)):!1})}_runEditorCommand(P,N,M){const R=this.runEditorCommand(P,N,M);return R||!0}}var h;(function(A){class P extends s{constructor(Q){super(Q),this._inSelectionMode=Q.inSelectionMode}runCoreEditorCommand(Q,re){if(!re.position)return;Q.model.pushStackElement(),Q.setCursorStates(re.source,3,[a.CursorMoveCommands.moveTo(Q,Q.getPrimaryCursorState(),this._inSelectionMode,re.position,re.viewPosition)])&&re.revealType!==2&&Q.revealPrimaryCursor(re.source,!0,!0)}}A.MoveTo=(0,S.registerEditorCommand)(new P({id:"_moveTo",inSelectionMode:!1,precondition:void 0})),A.MoveToSelect=(0,S.registerEditorCommand)(new P({id:"_moveToSelect",inSelectionMode:!0,precondition:void 0}));class N extends s{runCoreEditorCommand(Q,re){Q.model.pushStackElement();const de=this._getColumnSelectResult(Q,Q.getPrimaryCursorState(),Q.getCursorColumnSelectData(),re);de!==null&&(Q.setCursorStates(re.source,3,de.viewStates.map(he=>v.CursorState.fromViewState(he))),Q.setCursorColumnSelectData({isReal:!0,fromViewLineNumber:de.fromLineNumber,fromViewVisualColumn:de.fromVisualColumn,toViewLineNumber:de.toLineNumber,toViewVisualColumn:de.toVisualColumn}),de.reversed?Q.revealTopMostCursor(re.source):Q.revealBottomMostCursor(re.source))}}A.ColumnSelect=(0,S.registerEditorCommand)(new class extends N{constructor(){super({id:"columnSelect",precondition:void 0})}_getColumnSelectResult(J,Q,re,de){if(typeof de.position>"u"||typeof de.viewPosition>"u"||typeof de.mouseColumn>"u")return null;const he=J.model.validatePosition(de.position),me=J.coordinatesConverter.validateViewPosition(new n.Position(de.viewPosition.lineNumber,de.viewPosition.column),he),X=de.doColumnSelect?re.fromViewLineNumber:me.lineNumber,U=de.doColumnSelect?re.fromViewVisualColumn:de.mouseColumn-1;return _.ColumnSelection.columnSelect(J.cursorConfig,J,X,U,me.lineNumber,de.mouseColumn-1)}}),A.CursorColumnSelectLeft=(0,S.registerEditorCommand)(new class extends N{constructor(){super({id:"cursorColumnSelectLeft",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3599,linux:{primary:0}}})}_getColumnSelectResult(J,Q,re,de){return _.ColumnSelection.columnSelectLeft(J.cursorConfig,J,re)}}),A.CursorColumnSelectRight=(0,S.registerEditorCommand)(new class extends N{constructor(){super({id:"cursorColumnSelectRight",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3601,linux:{primary:0}}})}_getColumnSelectResult(J,Q,re,de){return _.ColumnSelection.columnSelectRight(J.cursorConfig,J,re)}});class M extends N{constructor(Q){super(Q),this._isPaged=Q.isPaged}_getColumnSelectResult(Q,re,de,he){return _.ColumnSelection.columnSelectUp(Q.cursorConfig,Q,de,this._isPaged)}}A.CursorColumnSelectUp=(0,S.registerEditorCommand)(new M({isPaged:!1,id:"cursorColumnSelectUp",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3600,linux:{primary:0}}})),A.CursorColumnSelectPageUp=(0,S.registerEditorCommand)(new M({isPaged:!0,id:"cursorColumnSelectPageUp",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3595,linux:{primary:0}}}));class R extends N{constructor(Q){super(Q),this._isPaged=Q.isPaged}_getColumnSelectResult(Q,re,de,he){return _.ColumnSelection.columnSelectDown(Q.cursorConfig,Q,de,this._isPaged)}}A.CursorColumnSelectDown=(0,S.registerEditorCommand)(new R({isPaged:!1,id:"cursorColumnSelectDown",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3602,linux:{primary:0}}})),A.CursorColumnSelectPageDown=(0,S.registerEditorCommand)(new R({isPaged:!0,id:"cursorColumnSelectPageDown",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:3596,linux:{primary:0}}}));class x extends s{constructor(){super({id:"cursorMove",precondition:void 0,metadata:a.CursorMove.metadata})}runCoreEditorCommand(Q,re){const de=a.CursorMove.parse(re);de&&this._runCursorMove(Q,re.source,de)}_runCursorMove(Q,re,de){Q.model.pushStackElement(),Q.setCursorStates(re,3,x._move(Q,Q.getCursorStates(),de)),Q.revealPrimaryCursor(re,!0)}static _move(Q,re,de){const he=de.select,me=de.value;switch(de.direction){case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:case 10:return a.CursorMoveCommands.simpleMove(Q,re,de.direction,he,me,de.unit);case 11:case 13:case 12:case 14:return a.CursorMoveCommands.viewportMove(Q,re,de.direction,he,me);default:return null}}}A.CursorMoveImpl=x,A.CursorMove=(0,S.registerEditorCommand)(new x);class O extends s{constructor(Q){super(Q),this._staticArgs=Q.args}runCoreEditorCommand(Q,re){let de=this._staticArgs;this._staticArgs.value===-1&&(de={direction:this._staticArgs.direction,unit:this._staticArgs.unit,select:this._staticArgs.select,value:re.pageSize||Q.cursorConfig.pageSize}),Q.model.pushStackElement(),Q.setCursorStates(re.source,3,a.CursorMoveCommands.simpleMove(Q,Q.getCursorStates(),de.direction,de.select,de.value,de.unit)),Q.revealPrimaryCursor(re.source,!0)}}A.CursorLeft=(0,S.registerEditorCommand)(new O({args:{direction:0,unit:0,select:!1,value:1},id:"cursorLeft",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:15,mac:{primary:15,secondary:[288]}}})),A.CursorLeftSelect=(0,S.registerEditorCommand)(new O({args:{direction:0,unit:0,select:!0,value:1},id:"cursorLeftSelect",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1039}})),A.CursorRight=(0,S.registerEditorCommand)(new O({args:{direction:1,unit:0,select:!1,value:1},id:"cursorRight",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:17,mac:{primary:17,secondary:[292]}}})),A.CursorRightSelect=(0,S.registerEditorCommand)(new O({args:{direction:1,unit:0,select:!0,value:1},id:"cursorRightSelect",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1041}})),A.CursorUp=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!1,value:1},id:"cursorUp",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:16,mac:{primary:16,secondary:[302]}}})),A.CursorUpSelect=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!0,value:1},id:"cursorUpSelect",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1040,secondary:[3088],mac:{primary:1040},linux:{primary:1040}}})),A.CursorPageUp=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!1,value:-1},id:"cursorPageUp",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:11}})),A.CursorPageUpSelect=(0,S.registerEditorCommand)(new O({args:{direction:2,unit:2,select:!0,value:-1},id:"cursorPageUpSelect",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1035}})),A.CursorDown=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!1,value:1},id:"cursorDown",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:18,mac:{primary:18,secondary:[300]}}})),A.CursorDownSelect=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!0,value:1},id:"cursorDownSelect",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1042,secondary:[3090],mac:{primary:1042},linux:{primary:1042}}})),A.CursorPageDown=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!1,value:-1},id:"cursorPageDown",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:12}})),A.CursorPageDownSelect=(0,S.registerEditorCommand)(new O({args:{direction:3,unit:2,select:!0,value:-1},id:"cursorPageDownSelect",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1036}})),A.CreateCursor=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:"createCursor",precondition:void 0})}runCoreEditorCommand(J,Q){if(!Q.position)return;let re;Q.wholeLine?re=a.CursorMoveCommands.line(J,J.getPrimaryCursorState(),!1,Q.position,Q.viewPosition):re=a.CursorMoveCommands.moveTo(J,J.getPrimaryCursorState(),!1,Q.position,Q.viewPosition);const de=J.getCursorStates();if(de.length>1){const he=re.modelState?re.modelState.position:null,me=re.viewState?re.viewState.position:null;for(let X=0,U=de.length;Xme&&(he=me);const X=new t.Range(he,1,he,J.model.getLineMaxColumn(he));let U=0;if(re.at)switch(re.at){case o.RawAtArgument.Top:U=3;break;case o.RawAtArgument.Center:U=1;break;case o.RawAtArgument.Bottom:U=4;break;default:break}const G=J.coordinatesConverter.convertModelRangeToViewRange(X);J.revealRange(Q.source,!1,G,U,0)}}),A.SelectAll=new class extends g{constructor(){super(S.SelectAllCommand)}runDOMCommand(J){k.isFirefox&&(J.focus(),J.select()),J.ownerDocument.execCommand("selectAll")}runEditorCommand(J,Q,re){const de=Q._getViewModel();de&&this.runCoreEditorCommand(de,re)}runCoreEditorCommand(J,Q){J.model.pushStackElement(),J.setCursorStates("keyboard",3,[a.CursorMoveCommands.selectAll(J,J.getPrimaryCursorState())])}},A.SetSelection=(0,S.registerEditorCommand)(new class extends s{constructor(){super({id:"setSelection",precondition:void 0})}runCoreEditorCommand(J,Q){Q.selection&&(J.model.pushStackElement(),J.setCursorStates(Q.source,3,[v.CursorState.fromModelSelection(Q.selection)]))}})})(h||(e.CoreNavigationCommands=h={}));const m=u.ContextKeyExpr.and(r.EditorContextKeys.textInputFocus,r.EditorContextKeys.columnSelection);function C(A,P){f.KeybindingsRegistry.registerKeybindingRule({id:A,primary:P,when:m,weight:d+1})}C(h.CursorColumnSelectLeft.id,1039),C(h.CursorColumnSelectRight.id,1041),C(h.CursorColumnSelectUp.id,1040),C(h.CursorColumnSelectPageUp.id,1035),C(h.CursorColumnSelectDown.id,1042),C(h.CursorColumnSelectPageDown.id,1036);function w(A){return A.register(),A}var D;(function(A){class P extends S.EditorCommand{runEditorCommand(M,R,x){const O=R._getViewModel();O&&this.runCoreEditingCommand(R,O,x||{})}}A.CoreEditingCommand=P,A.LineBreakInsert=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:"lineBreakInsert",precondition:r.EditorContextKeys.writable,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:0,mac:{primary:301}}})}runCoreEditingCommand(N,M,R){N.pushUndoStop(),N.executeCommands(this.id,i.TypeOperations.lineBreakInsert(M.cursorConfig,M.model,M.getCursorStates().map(x=>x.modelState.selection)))}}),A.Outdent=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:"outdent",precondition:r.EditorContextKeys.writable,kbOpts:{weight:d,kbExpr:u.ContextKeyExpr.and(r.EditorContextKeys.editorTextFocus,r.EditorContextKeys.tabDoesNotMoveFocus),primary:1026}})}runCoreEditingCommand(N,M,R){N.pushUndoStop(),N.executeCommands(this.id,i.TypeOperations.outdent(M.cursorConfig,M.model,M.getCursorStates().map(x=>x.modelState.selection))),N.pushUndoStop()}}),A.Tab=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:"tab",precondition:r.EditorContextKeys.writable,kbOpts:{weight:d,kbExpr:u.ContextKeyExpr.and(r.EditorContextKeys.editorTextFocus,r.EditorContextKeys.tabDoesNotMoveFocus),primary:2}})}runCoreEditingCommand(N,M,R){N.pushUndoStop(),N.executeCommands(this.id,i.TypeOperations.tab(M.cursorConfig,M.model,M.getCursorStates().map(x=>x.modelState.selection))),N.pushUndoStop()}}),A.DeleteLeft=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:"deleteLeft",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:1,secondary:[1025],mac:{primary:1,secondary:[1025,294,257]}}})}runCoreEditingCommand(N,M,R){const[x,O]=b.DeleteOperations.deleteLeft(M.getPrevEditOperationType(),M.cursorConfig,M.model,M.getCursorStates().map(B=>B.modelState.selection),M.getCursorAutoClosedCharacters());x&&N.pushUndoStop(),N.executeCommands(this.id,O),M.setPrevEditOperationType(2)}}),A.DeleteRight=(0,S.registerEditorCommand)(new class extends P{constructor(){super({id:"deleteRight",precondition:void 0,kbOpts:{weight:d,kbExpr:r.EditorContextKeys.textInputFocus,primary:20,mac:{primary:20,secondary:[290,276]}}})}runCoreEditingCommand(N,M,R){const[x,O]=b.DeleteOperations.deleteRight(M.getPrevEditOperationType(),M.cursorConfig,M.model,M.getCursorStates().map(B=>B.modelState.selection));x&&N.pushUndoStop(),N.executeCommands(this.id,O),M.setPrevEditOperationType(3)}}),A.Undo=new class extends g{constructor(){super(S.UndoCommand)}runDOMCommand(N){N.ownerDocument.execCommand("undo")}runEditorCommand(N,M,R){if(!(!M.hasModel()||M.getOption(90)===!0))return M.getModel().undo()}},A.Redo=new class extends g{constructor(){super(S.RedoCommand)}runDOMCommand(N){N.ownerDocument.execCommand("redo")}runEditorCommand(N,M,R){if(!(!M.hasModel()||M.getOption(90)===!0))return M.getModel().redo()}}})(D||(e.CoreEditingCommands=D={}));class I extends S.Command{constructor(P,N,M){super({id:P,precondition:void 0,metadata:M}),this._handlerId=N}runCommand(P,N){const M=P.get(p.ICodeEditorService).getFocusedCodeEditor();M&&M.trigger("keyboard",this._handlerId,N)}}function T(A,P){w(new I("default:"+A,A)),w(new I(A,A,P))}T("type",{description:"Type",args:[{name:"args",schema:{type:"object",required:["text"],properties:{text:{type:"string"}}}}]}),T("replacePreviousChar"),T("compositionType"),T("compositionStart"),T("compositionEnd"),T("paste"),T("cut")}),define(se[807],oe([1,0,237,16]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkerDecorationsContribution=void 0;let y=class{constructor(S,p){}dispose(){}};e.MarkerDecorationsContribution=y,y.ID="editor.contrib.markerDecorations",e.MarkerDecorationsContribution=y=ke([ge(1,L.IMarkerDecorationsService)],y),(0,k.registerEditorContribution)(y.ID,y,0)}),define(se[808],oe([1,0,191,10,17]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewController=void 0;class E{constructor(p,_,v,b){this.configuration=p,this.viewModel=_,this.userInputEvents=v,this.commandDelegate=b}paste(p,_,v,b){this.commandDelegate.paste(p,_,v,b)}type(p){this.commandDelegate.type(p)}compositionType(p,_,v,b){this.commandDelegate.compositionType(p,_,v,b)}compositionStart(){this.commandDelegate.startComposition()}compositionEnd(){this.commandDelegate.endComposition()}cut(){this.commandDelegate.cut()}setSelection(p){L.CoreNavigationCommands.SetSelection.runCoreEditorCommand(this.viewModel,{source:"keyboard",selection:p})}_validateViewColumn(p){const _=this.viewModel.getLineMinColumn(p.lineNumber);return p.column<_?new k.Position(p.lineNumber,_):p}_hasMulticursorModifier(p){switch(this.configuration.options.get(77)){case"altKey":return p.altKey;case"ctrlKey":return p.ctrlKey;case"metaKey":return p.metaKey;default:return!1}}_hasNonMulticursorModifier(p){switch(this.configuration.options.get(77)){case"altKey":return p.ctrlKey||p.metaKey;case"ctrlKey":return p.altKey||p.metaKey;case"metaKey":return p.ctrlKey||p.altKey;default:return!1}}dispatchMouse(p){const _=this.configuration.options,v=y.isLinux&&_.get(106),b=_.get(22);p.middleButton&&!v?this._columnSelect(p.position,p.mouseColumn,p.inSelectionMode):p.startedOnLineNumbers?this._hasMulticursorModifier(p)?p.inSelectionMode?this._lastCursorLineSelect(p.position,p.revealType):this._createCursor(p.position,!0):p.inSelectionMode?this._lineSelectDrag(p.position,p.revealType):this._lineSelect(p.position,p.revealType):p.mouseDownCount>=4?this._selectAll():p.mouseDownCount===3?this._hasMulticursorModifier(p)?p.inSelectionMode?this._lastCursorLineSelectDrag(p.position,p.revealType):this._lastCursorLineSelect(p.position,p.revealType):p.inSelectionMode?this._lineSelectDrag(p.position,p.revealType):this._lineSelect(p.position,p.revealType):p.mouseDownCount===2?p.onInjectedText||(this._hasMulticursorModifier(p)?this._lastCursorWordSelect(p.position,p.revealType):p.inSelectionMode?this._wordSelectDrag(p.position,p.revealType):this._wordSelect(p.position,p.revealType)):this._hasMulticursorModifier(p)?this._hasNonMulticursorModifier(p)||(p.shiftKey?this._columnSelect(p.position,p.mouseColumn,!0):p.inSelectionMode?this._lastCursorMoveToSelect(p.position,p.revealType):this._createCursor(p.position,!1)):p.inSelectionMode?p.altKey?this._columnSelect(p.position,p.mouseColumn,!0):b?this._columnSelect(p.position,p.mouseColumn,!0):this._moveToSelect(p.position,p.revealType):this.moveTo(p.position,p.revealType)}_usualArgs(p,_){return p=this._validateViewColumn(p),{source:"mouse",position:this._convertViewToModelPosition(p),viewPosition:p,revealType:_}}moveTo(p,_){L.CoreNavigationCommands.MoveTo.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_moveToSelect(p,_){L.CoreNavigationCommands.MoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_columnSelect(p,_,v){p=this._validateViewColumn(p),L.CoreNavigationCommands.ColumnSelect.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(p),viewPosition:p,mouseColumn:_,doColumnSelect:v})}_createCursor(p,_){p=this._validateViewColumn(p),L.CoreNavigationCommands.CreateCursor.runCoreEditorCommand(this.viewModel,{source:"mouse",position:this._convertViewToModelPosition(p),viewPosition:p,wholeLine:_})}_lastCursorMoveToSelect(p,_){L.CoreNavigationCommands.LastCursorMoveToSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_wordSelect(p,_){L.CoreNavigationCommands.WordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_wordSelectDrag(p,_){L.CoreNavigationCommands.WordSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lastCursorWordSelect(p,_){L.CoreNavigationCommands.LastCursorWordSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lineSelect(p,_){L.CoreNavigationCommands.LineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lineSelectDrag(p,_){L.CoreNavigationCommands.LineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lastCursorLineSelect(p,_){L.CoreNavigationCommands.LastCursorLineSelect.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_lastCursorLineSelectDrag(p,_){L.CoreNavigationCommands.LastCursorLineSelectDrag.runCoreEditorCommand(this.viewModel,this._usualArgs(p,_))}_selectAll(){L.CoreNavigationCommands.SelectAll.runCoreEditorCommand(this.viewModel,{source:"mouse"})}_convertViewToModelPosition(p){return this.viewModel.coordinatesConverter.convertViewPositionToModelPosition(p)}emitKeyDown(p){this.userInputEvents.emitKeyDown(p)}emitKeyUp(p){this.userInputEvents.emitKeyUp(p)}emitContextMenu(p){this.userInputEvents.emitContextMenu(p)}emitMouseMove(p){this.userInputEvents.emitMouseMove(p)}emitMouseLeave(p){this.userInputEvents.emitMouseLeave(p)}emitMouseUp(p){this.userInputEvents.emitMouseUp(p)}emitMouseDown(p){this.userInputEvents.emitMouseDown(p)}emitMouseDrag(p){this.userInputEvents.emitMouseDrag(p)}emitMouseDrop(p){this.userInputEvents.emitMouseDrop(p)}emitMouseDropCanceled(){this.userInputEvents.emitMouseDropCanceled()}emitMouseWheel(p){this.userInputEvents.emitMouseWheel(p)}}e.ViewController=E}),define(se[809],oe([1,0,45,8,6,61,62,112,121,81]),function(te,e,L,k,y,E,S,p,_,v){"use strict";var b;Object.defineProperty(e,"__esModule",{value:!0}),e.WorkerBasedDocumentDiffProvider=e.WorkerBasedDiffProviderFactoryService=e.IDiffProviderFactoryService=void 0,e.IDiffProviderFactoryService=(0,k.createDecorator)("diffProviderFactoryService");let a=class{constructor(t){this.instantiationService=t}createDiffProvider(t){return this.instantiationService.createInstance(i,t)}};e.WorkerBasedDiffProviderFactoryService=a,e.WorkerBasedDiffProviderFactoryService=a=ke([ge(0,k.IInstantiationService)],a),(0,L.registerSingleton)(e.IDiffProviderFactoryService,a,1);let i=b=class{constructor(t,r,u){this.editorWorkerService=r,this.telemetryService=u,this.onDidChangeEventEmitter=new y.Emitter,this.onDidChange=this.onDidChangeEventEmitter.event,this.diffAlgorithm="advanced",this.diffAlgorithmOnDidChangeSubscription=void 0,this.setOptions(t)}dispose(){var t;(t=this.diffAlgorithmOnDidChangeSubscription)===null||t===void 0||t.dispose()}async computeDiff(t,r,u,f){var c,d;if(typeof this.diffAlgorithm!="string")return this.diffAlgorithm.computeDiff(t,r,u,f);if(t.getLineCount()===1&&t.getLineMaxColumn(1)===1)return r.getLineCount()===1&&r.getLineMaxColumn(1)===1?{changes:[],identical:!0,quitEarly:!1,moves:[]}:{changes:[new p.DetailedLineRangeMapping(new S.LineRange(1,2),new S.LineRange(1,r.getLineCount()+1),[new p.RangeMapping(t.getFullModelRange(),r.getFullModelRange())])],identical:!1,quitEarly:!1,moves:[]};const s=JSON.stringify([t.uri.toString(),r.uri.toString()]),l=JSON.stringify([t.id,r.id,t.getAlternativeVersionId(),r.getAlternativeVersionId(),JSON.stringify(u)]),o=b.diffCache.get(s);if(o&&o.context===l)return o.result;const g=E.StopWatch.create(),h=await this.editorWorkerService.computeDiff(t.uri,r.uri,u,this.diffAlgorithm),m=g.elapsed();if(this.telemetryService.publicLog2("diffEditor.computeDiff",{timeMs:m,timedOut:(c=h?.quitEarly)!==null&&c!==void 0?c:!0,detectedMoves:u.computeMoves?(d=h?.moves.length)!==null&&d!==void 0?d:0:-1}),f.isCancellationRequested)return{changes:[],identical:!1,quitEarly:!0,moves:[]};if(!h)throw new Error("no diff result available");return b.diffCache.size>10&&b.diffCache.delete(b.diffCache.keys().next().value),b.diffCache.set(s,{result:h,context:l}),h}setOptions(t){var r;let u=!1;t.diffAlgorithm&&this.diffAlgorithm!==t.diffAlgorithm&&((r=this.diffAlgorithmOnDidChangeSubscription)===null||r===void 0||r.dispose(),this.diffAlgorithmOnDidChangeSubscription=void 0,this.diffAlgorithm=t.diffAlgorithm,typeof t.diffAlgorithm!="string"&&(this.diffAlgorithmOnDidChangeSubscription=t.diffAlgorithm.onDidChange(()=>this.onDidChangeEventEmitter.fire())),u=!0),u&&this.onDidChangeEventEmitter.fire()}};e.WorkerBasedDocumentDiffProvider=i,i.diffCache=new Map,e.WorkerBasedDocumentDiffProvider=i=b=ke([ge(1,_.IEditorWorkerService),ge(2,v.ITelemetryService)],i)}),define(se[359],oe([1,0,14,19,2,35,809,87,62,286,112,182,288,284,20,13,90]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UnchangedRegion=e.DiffMapping=e.DiffState=e.DiffEditorViewModel=void 0;let f=class extends y.Disposable{setActiveMovedText(C){this._activeMovedText.set(C,void 0)}constructor(C,w,D){super(),this.model=C,this._options=w,this._diffProviderFactoryService=D,this._isDiffUpToDate=(0,E.observableValue)(this,!1),this.isDiffUpToDate=this._isDiffUpToDate,this._diff=(0,E.observableValue)(this,void 0),this.diff=this._diff,this._unchangedRegions=(0,E.observableValue)(this,void 0),this.unchangedRegions=(0,E.derived)(this,P=>{var N,M;return this._options.hideUnchangedRegions.read(P)?(M=(N=this._unchangedRegions.read(P))===null||N===void 0?void 0:N.regions)!==null&&M!==void 0?M:[]:((0,E.transaction)(R=>{var x;for(const O of((x=this._unchangedRegions.get())===null||x===void 0?void 0:x.regions)||[])O.collapseAll(R)}),[])}),this.movedTextToCompare=(0,E.observableValue)(this,void 0),this._activeMovedText=(0,E.observableValue)(this,void 0),this._hoveredMovedText=(0,E.observableValue)(this,void 0),this.activeMovedText=(0,E.derived)(this,P=>{var N,M;return(M=(N=this.movedTextToCompare.read(P))!==null&&N!==void 0?N:this._hoveredMovedText.read(P))!==null&&M!==void 0?M:this._activeMovedText.read(P)}),this._cancellationTokenSource=new k.CancellationTokenSource,this._diffProvider=(0,E.derived)(this,P=>{const N=this._diffProviderFactoryService.createDiffProvider({diffAlgorithm:this._options.diffAlgorithm.read(P)}),M=(0,E.observableSignalFromEvent)("onDidChange",N.onDidChange);return{diffProvider:N,onChangeSignal:M}}),this._register((0,y.toDisposable)(()=>this._cancellationTokenSource.cancel()));const I=(0,E.observableSignal)("contentChangedSignal"),T=this._register(new L.RunOnceScheduler(()=>I.trigger(void 0),200));this._register((0,E.autorun)(P=>{const N=this._unchangedRegions.read(P);if(!N||N.regions.some(W=>W.isDragged.read(P)))return;const M=N.originalDecorationIds.map(W=>C.original.getDecorationRange(W)).map(W=>W?_.LineRange.fromRangeInclusive(W):void 0),R=N.modifiedDecorationIds.map(W=>C.modified.getDecorationRange(W)).map(W=>W?_.LineRange.fromRangeInclusive(W):void 0),x=N.regions.map((W,V)=>!M[V]||!R[V]?void 0:new o(M[V].startLineNumber,R[V].startLineNumber,M[V].length,W.visibleLineCountTop.read(P),W.visibleLineCountBottom.read(P))).filter(t.isDefined),O=[];let B=!1;for(const W of(0,r.groupAdjacentBy)(x,(V,K)=>V.getHiddenModifiedRange(P).endLineNumberExclusive===K.getHiddenModifiedRange(P).startLineNumber))if(W.length>1){B=!0;const V=W.reduce((F,q)=>F+q.lineCount,0),K=new o(W[0].originalLineNumber,W[0].modifiedLineNumber,V,W[0].visibleLineCountTop.get(),W[W.length-1].visibleLineCountBottom.get());O.push(K)}else O.push(W[0]);if(B){const W=C.original.deltaDecorations(N.originalDecorationIds,O.map(K=>({range:K.originalUnchangedRange.toInclusiveRange(),options:{description:"unchanged"}}))),V=C.modified.deltaDecorations(N.modifiedDecorationIds,O.map(K=>({range:K.modifiedUnchangedRange.toInclusiveRange(),options:{description:"unchanged"}})));(0,E.transaction)(K=>{this._unchangedRegions.set({regions:O,originalDecorationIds:W,modifiedDecorationIds:V},K)})}}));const A=(P,N,M)=>{const R=o.fromDiffs(P.changes,C.original.getLineCount(),C.modified.getLineCount(),this._options.hideUnchangedRegionsMinimumLineCount.read(M),this._options.hideUnchangedRegionsContextLineCount.read(M));let x;const O=this._unchangedRegions.get();if(O){const K=O.originalDecorationIds.map(ae=>C.original.getDecorationRange(ae)).map(ae=>ae?_.LineRange.fromRangeInclusive(ae):void 0),F=O.modifiedDecorationIds.map(ae=>C.modified.getDecorationRange(ae)).map(ae=>ae?_.LineRange.fromRangeInclusive(ae):void 0);let ie=(0,p.filterWithPrevious)(O.regions.map((ae,ne)=>{if(!K[ne]||!F[ne])return;const $=K[ne].length;return new o(K[ne].startLineNumber,F[ne].startLineNumber,$,Math.min(ae.visibleLineCountTop.get(),$),Math.min(ae.visibleLineCountBottom.get(),$-ae.visibleLineCountTop.get()))}).filter(t.isDefined),(ae,ne)=>!ne||ae.modifiedLineNumber>=ne.modifiedLineNumber+ne.lineCount&&ae.originalLineNumber>=ne.originalLineNumber+ne.lineCount).map(ae=>new b.LineRangeMapping(ae.getHiddenOriginalRange(M),ae.getHiddenModifiedRange(M)));ie=b.LineRangeMapping.clip(ie,_.LineRange.ofLength(1,C.original.getLineCount()),_.LineRange.ofLength(1,C.modified.getLineCount())),x=b.LineRangeMapping.inverse(ie,C.original.getLineCount(),C.modified.getLineCount())}const B=[];if(x)for(const K of R){const F=x.filter(q=>q.original.intersectsStrict(K.originalUnchangedRange)&&q.modified.intersectsStrict(K.modifiedUnchangedRange));B.push(...K.setVisibleRanges(F,N))}else B.push(...R);const W=C.original.deltaDecorations(O?.originalDecorationIds||[],B.map(K=>({range:K.originalUnchangedRange.toInclusiveRange(),options:{description:"unchanged"}}))),V=C.modified.deltaDecorations(O?.modifiedDecorationIds||[],B.map(K=>({range:K.modifiedUnchangedRange.toInclusiveRange(),options:{description:"unchanged"}})));this._unchangedRegions.set({regions:B,originalDecorationIds:W,modifiedDecorationIds:V},N)};this._register(C.modified.onDidChangeContent(P=>{if(this._diff.get()){const M=a.TextEditInfo.fromModelContentChanges(P.changes),R=(this._lastDiff,C.original,C.modified,void 0);R&&(this._lastDiff=R,(0,E.transaction)(x=>{this._diff.set(s.fromDiffResult(this._lastDiff),x),A(R,x);const O=this.movedTextToCompare.get();this.movedTextToCompare.set(O?this._lastDiff.moves.find(B=>B.lineRangeMapping.modified.intersect(O.lineRangeMapping.modified)):void 0,x)}))}this._isDiffUpToDate.set(!1,void 0),T.schedule()})),this._register(C.original.onDidChangeContent(P=>{if(this._diff.get()){const M=a.TextEditInfo.fromModelContentChanges(P.changes),R=(this._lastDiff,C.original,C.modified,void 0);R&&(this._lastDiff=R,(0,E.transaction)(x=>{this._diff.set(s.fromDiffResult(this._lastDiff),x),A(R,x);const O=this.movedTextToCompare.get();this.movedTextToCompare.set(O?this._lastDiff.moves.find(B=>B.lineRangeMapping.modified.intersect(O.lineRangeMapping.modified)):void 0,x)}))}this._isDiffUpToDate.set(!1,void 0),T.schedule()})),this._register((0,E.autorunWithStore)(async(P,N)=>{var M,R;this._options.hideUnchangedRegionsMinimumLineCount.read(P),this._options.hideUnchangedRegionsContextLineCount.read(P),T.cancel(),I.read(P);const x=this._diffProvider.read(P);x.onChangeSignal.read(P),(0,p.readHotReloadableExport)(v.DefaultLinesDiffComputer,P),(0,p.readHotReloadableExport)(n.optimizeSequenceDiffs,P),this._isDiffUpToDate.set(!1,void 0);let O=[];N.add(C.original.onDidChangeContent(V=>{const K=a.TextEditInfo.fromModelContentChanges(V.changes);O=(0,i.combineTextEditInfos)(O,K)}));let B=[];N.add(C.modified.onDidChangeContent(V=>{const K=a.TextEditInfo.fromModelContentChanges(V.changes);B=(0,i.combineTextEditInfos)(B,K)}));let W=await x.diffProvider.computeDiff(C.original,C.modified,{ignoreTrimWhitespace:this._options.ignoreTrimWhitespace.read(P),maxComputationTimeMs:this._options.maxComputationTimeMs.read(P),computeMoves:this._options.showMoves.read(P)},this._cancellationTokenSource.token);this._cancellationTokenSource.token.isCancellationRequested||(W=c(W,C.original,C.modified),W=(M=(C.original,C.modified,void 0))!==null&&M!==void 0?M:W,W=(R=(C.original,C.modified,void 0))!==null&&R!==void 0?R:W,(0,E.transaction)(V=>{A(W,V),this._lastDiff=W;const K=s.fromDiffResult(W);this._diff.set(K,V),this._isDiffUpToDate.set(!0,V);const F=this.movedTextToCompare.get();this.movedTextToCompare.set(F?this._lastDiff.moves.find(q=>q.lineRangeMapping.modified.intersect(F.lineRangeMapping.modified)):void 0,V)}))}))}ensureModifiedLineIsVisible(C,w,D){var I,T;if(((I=this.diff.get())===null||I===void 0?void 0:I.mappings.length)===0)return;const A=((T=this._unchangedRegions.get())===null||T===void 0?void 0:T.regions)||[];for(const P of A)if(P.getHiddenModifiedRange(void 0).contains(C)){P.showModifiedLine(C,w,D);return}}ensureOriginalLineIsVisible(C,w,D){var I,T;if(((I=this.diff.get())===null||I===void 0?void 0:I.mappings.length)===0)return;const A=((T=this._unchangedRegions.get())===null||T===void 0?void 0:T.regions)||[];for(const P of A)if(P.getHiddenOriginalRange(void 0).contains(C)){P.showOriginalLine(C,w,D);return}}async waitForDiff(){await(0,E.waitForState)(this.isDiffUpToDate,C=>C)}serializeState(){const C=this._unchangedRegions.get();return{collapsedRegions:C?.regions.map(w=>({range:w.getHiddenModifiedRange(void 0).serialize()}))}}restoreSerializedState(C){var w;const D=(w=C.collapsedRegions)===null||w===void 0?void 0:w.map(T=>_.LineRange.deserialize(T.range)),I=this._unchangedRegions.get();!I||!D||(0,E.transaction)(T=>{for(const A of I.regions)for(const P of D)if(A.modifiedUnchangedRange.intersect(P)){A.setHiddenModifiedRange(P,T);break}})}};e.DiffEditorViewModel=f,e.DiffEditorViewModel=f=ke([ge(2,S.IDiffProviderFactoryService)],f);function c(m,C,w){return{changes:m.changes.map(D=>new b.DetailedLineRangeMapping(D.original,D.modified,D.innerChanges?D.innerChanges.map(I=>d(I,C,w)):void 0)),moves:m.moves,identical:m.identical,quitEarly:m.quitEarly}}function d(m,C,w){let D=m.originalRange,I=m.modifiedRange;return(D.endColumn!==1||I.endColumn!==1)&&D.endColumn===C.getLineMaxColumn(D.endLineNumber)&&I.endColumn===w.getLineMaxColumn(I.endLineNumber)&&D.endLineNumbernew l(w)),C.moves||[],C.identical,C.quitEarly)}constructor(C,w,D,I){this.mappings=C,this.movedTexts=w,this.identical=D,this.quitEarly=I}}e.DiffState=s;class l{constructor(C){this.lineRangeMapping=C}}e.DiffMapping=l;class o{static fromDiffs(C,w,D,I,T){const A=b.DetailedLineRangeMapping.inverse(C,w,D),P=[];for(const N of A){let M=N.original.startLineNumber,R=N.modified.startLineNumber,x=N.original.length;const O=M===1&&R===1,B=M+x===w+1&&R+x===D+1;(O||B)&&x>=T+I?(O&&!B&&(x-=T),B&&!O&&(M+=T,R+=T,x-=T),P.push(new o(M,R,x,0,0))):x>=T*2+I&&(M+=T,R+=T,x-=T*2,P.push(new o(M,R,x,0,0)))}return P}get originalUnchangedRange(){return _.LineRange.ofLength(this.originalLineNumber,this.lineCount)}get modifiedUnchangedRange(){return _.LineRange.ofLength(this.modifiedLineNumber,this.lineCount)}constructor(C,w,D,I,T){this.originalLineNumber=C,this.modifiedLineNumber=w,this.lineCount=D,this._visibleLineCountTop=(0,E.observableValue)(this,0),this.visibleLineCountTop=this._visibleLineCountTop,this._visibleLineCountBottom=(0,E.observableValue)(this,0),this.visibleLineCountBottom=this._visibleLineCountBottom,this._shouldHideControls=(0,E.derived)(this,N=>this.visibleLineCountTop.read(N)+this.visibleLineCountBottom.read(N)===this.lineCount&&!this.isDragged.read(N)),this.isDragged=(0,E.observableValue)(this,void 0);const A=Math.max(Math.min(I,this.lineCount),0),P=Math.max(Math.min(T,this.lineCount-I),0);(0,u.softAssert)(I===A),(0,u.softAssert)(T===P),this._visibleLineCountTop.set(A,void 0),this._visibleLineCountBottom.set(P,void 0)}setVisibleRanges(C,w){const D=[],I=new _.LineRangeSet(C.map(N=>N.modified)).subtractFrom(this.modifiedUnchangedRange);let T=this.originalLineNumber,A=this.modifiedLineNumber;const P=this.modifiedLineNumber+this.lineCount;if(I.ranges.length===0)this.showAll(w),D.push(this);else{let N=0;for(const M of I.ranges){const R=N===I.ranges.length-1;N++;const x=(R?P:M.endLineNumberExclusive)-A,O=new o(T,A,x,0,0);O.setHiddenModifiedRange(M,w),D.push(O),T=O.originalUnchangedRange.endLineNumberExclusive,A=O.modifiedUnchangedRange.endLineNumberExclusive}}return D}shouldHideControls(C){return this._shouldHideControls.read(C)}getHiddenOriginalRange(C){return _.LineRange.ofLength(this.originalLineNumber+this._visibleLineCountTop.read(C),this.lineCount-this._visibleLineCountTop.read(C)-this._visibleLineCountBottom.read(C))}getHiddenModifiedRange(C){return _.LineRange.ofLength(this.modifiedLineNumber+this._visibleLineCountTop.read(C),this.lineCount-this._visibleLineCountTop.read(C)-this._visibleLineCountBottom.read(C))}setHiddenModifiedRange(C,w){const D=C.startLineNumber-this.modifiedLineNumber,I=this.modifiedLineNumber+this.lineCount-C.endLineNumberExclusive;this.setState(D,I,w)}getMaxVisibleLineCountTop(){return this.lineCount-this._visibleLineCountBottom.get()}getMaxVisibleLineCountBottom(){return this.lineCount-this._visibleLineCountTop.get()}showMoreAbove(C=10,w){const D=this.getMaxVisibleLineCountTop();this._visibleLineCountTop.set(Math.min(this._visibleLineCountTop.get()+C,D),w)}showMoreBelow(C=10,w){const D=this.lineCount-this._visibleLineCountTop.get();this._visibleLineCountBottom.set(Math.min(this._visibleLineCountBottom.get()+C,D),w)}showAll(C){this._visibleLineCountBottom.set(this.lineCount-this._visibleLineCountTop.get(),C)}showModifiedLine(C,w,D){const I=C+1-(this.modifiedLineNumber+this._visibleLineCountTop.get()),T=this.modifiedLineNumber-this._visibleLineCountBottom.get()+this.lineCount-C;w===0&&Ithis.selectionAnchorSetContextKey.reset())}setSelectionAnchor(){if(this.editor.hasModel()){const f=this.editor.getPosition();this.editor.changeDecorations(c=>{this.decorationId&&c.removeDecoration(this.decorationId),this.decorationId=c.addDecoration(S.Selection.fromPositions(f,f),{description:"selection-anchor",stickiness:1,hoverMessage:new k.MarkdownString().appendText((0,_.localize)(0,null)),className:"selection-anchor"})}),this.selectionAnchorSetContextKey.set(!!this.decorationId),(0,L.alert)((0,_.localize)(1,null,f.lineNumber,f.column))}}goToSelectionAnchor(){if(this.editor.hasModel()&&this.decorationId){const f=this.editor.getModel().getDecorationRange(this.decorationId);f&&this.editor.setPosition(f.getStartPosition())}}selectFromAnchorToCursor(){if(this.editor.hasModel()&&this.decorationId){const f=this.editor.getModel().getDecorationRange(this.decorationId);if(f){const c=this.editor.getPosition();this.editor.setSelection(S.Selection.fromPositions(f.getStartPosition(),c)),this.cancelSelectionAnchor()}}}cancelSelectionAnchor(){if(this.decorationId){const f=this.decorationId;this.editor.changeDecorations(c=>{c.removeDecoration(f),this.decorationId=void 0}),this.selectionAnchorSetContextKey.set(!1)}}dispose(){this.cancelSelectionAnchor(),this.modelChangeListener.dispose()}};a.ID="editor.contrib.selectionAnchorController",a=b=ke([ge(1,v.IContextKeyService)],a);class i extends E.EditorAction{constructor(){super({id:"editor.action.setSelectionAnchor",label:(0,_.localize)(2,null),alias:"Set Selection Anchor",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:(0,y.KeyChord)(2089,2080),weight:100}})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.setSelectionAnchor()}}class n extends E.EditorAction{constructor(){super({id:"editor.action.goToSelectionAnchor",label:(0,_.localize)(3,null),alias:"Go to Selection Anchor",precondition:e.SelectionAnchorSet})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.goToSelectionAnchor()}}class t extends E.EditorAction{constructor(){super({id:"editor.action.selectFromAnchorToCursor",label:(0,_.localize)(4,null),alias:"Select from Anchor to Cursor",precondition:e.SelectionAnchorSet,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:(0,y.KeyChord)(2089,2089),weight:100}})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.selectFromAnchorToCursor()}}class r extends E.EditorAction{constructor(){super({id:"editor.action.cancelSelectionAnchor",label:(0,_.localize)(5,null),alias:"Cancel Selection Anchor",precondition:e.SelectionAnchorSet,kbOpts:{kbExpr:p.EditorContextKeys.editorTextFocus,primary:9,weight:100}})}async run(f,c){var d;(d=a.get(c))===null||d===void 0||d.cancelSelectionAnchor()}}(0,E.registerEditorContribution)(a.ID,a,4),(0,E.registerEditorAction)(i),(0,E.registerEditorAction)(n),(0,E.registerEditorAction)(t),(0,E.registerEditorAction)(r)}),define(se[811],oe([1,0,16,21,552,651]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class S extends L.EditorAction{constructor(b,a){super(a),this.left=b}run(b,a){if(!a.hasModel())return;const i=[],n=a.getSelections();for(const t of n)i.push(new y.MoveCaretCommand(t,this.left));a.pushUndoStop(),a.executeCommands(this.id,i),a.pushUndoStop()}}class p extends S{constructor(){super(!0,{id:"editor.action.moveCarretLeftAction",label:E.localize(0,null),alias:"Move Selected Text Left",precondition:k.EditorContextKeys.writable})}}class _ extends S{constructor(){super(!1,{id:"editor.action.moveCarretRightAction",label:E.localize(1,null),alias:"Move Selected Text Right",precondition:k.EditorContextKeys.writable})}}(0,L.registerEditorAction)(p),(0,L.registerEditorAction)(_)}),define(se[812],oe([1,0,16,130,206,5,21,652]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class _ extends L.EditorAction{constructor(){super({id:"editor.action.transposeLetters",label:p.localize(0,null),alias:"Transpose Letters",precondition:S.EditorContextKeys.writable,kbOpts:{kbExpr:S.EditorContextKeys.textInputFocus,primary:0,mac:{primary:306},weight:100}})}run(b,a){if(!a.hasModel())return;const i=a.getModel(),n=[],t=a.getSelections();for(const r of t){if(!r.isEmpty())continue;const u=r.startLineNumber,f=r.startColumn,c=i.getLineMaxColumn(u);if(u===1&&(f===1||f===2&&c===2))continue;const d=f===c?r.getPosition():y.MoveOperations.rightPosition(i,r.getPosition().lineNumber,r.getPosition().column),s=y.MoveOperations.leftPosition(i,d),l=y.MoveOperations.leftPosition(i,s),o=i.getValueInRange(E.Range.fromPositions(l,s)),g=i.getValueInRange(E.Range.fromPositions(s,d)),h=E.Range.fromPositions(l,d);n.push(new k.ReplaceCommand(h,g+o))}n.length>0&&(a.pushUndoStop(),a.executeCommands(this.id,n),a.pushUndoStop())}}(0,L.registerEditorAction)(_)}),define(se[813],oe([1,0,65,16,5,21,32,301,554,663,30]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class a extends k.EditorAction{constructor(f,c){super(c),this._type=f}run(f,c){const d=f.get(S.ILanguageConfigurationService);if(!c.hasModel())return;const s=c.getModel(),l=[],o=s.getOptions(),g=c.getOption(23),h=c.getSelections().map((C,w)=>({selection:C,index:w,ignoreFirstLine:!1}));h.sort((C,w)=>y.Range.compareRangesUsingStarts(C.selection,w.selection));let m=h[0];for(let C=1;C{this._undoStack=[],this._redoStack=[]})),this._register(i.onDidChangeModelContent(n=>{this._undoStack=[],this._redoStack=[]})),this._register(i.onDidChangeCursorSelection(n=>{if(this._isCursorUndoRedo||!n.oldSelections||n.oldModelVersionId!==n.modelVersionId)return;const t=new S(n.oldSelections);this._undoStack.length>0&&this._undoStack[this._undoStack.length-1].cursorState.equals(t)||(this._undoStack.push(new p(t,i.getScrollTop(),i.getScrollLeft())),this._redoStack=[],this._undoStack.length>50&&this._undoStack.shift())}))}cursorUndo(){!this._editor.hasModel()||this._undoStack.length===0||(this._redoStack.push(new p(new S(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._undoStack.pop()))}cursorRedo(){!this._editor.hasModel()||this._redoStack.length===0||(this._undoStack.push(new p(new S(this._editor.getSelections()),this._editor.getScrollTop(),this._editor.getScrollLeft())),this._applyState(this._redoStack.pop()))}_applyState(i){this._isCursorUndoRedo=!0,this._editor.setSelections(i.cursorState.selections),this._editor.setScrollPosition({scrollTop:i.scrollTop,scrollLeft:i.scrollLeft}),this._isCursorUndoRedo=!1}}e.CursorUndoRedoController=_,_.ID="editor.contrib.cursorUndoRedoController";class v extends k.EditorAction{constructor(){super({id:"cursorUndo",label:E.localize(0,null),alias:"Cursor Undo",precondition:void 0,kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:2099,weight:100}})}run(i,n,t){var r;(r=_.get(n))===null||r===void 0||r.cursorUndo()}}e.CursorUndo=v;class b extends k.EditorAction{constructor(){super({id:"cursorRedo",label:E.localize(1,null),alias:"Cursor Redo",precondition:void 0})}run(i,n,t){var r;(r=_.get(n))===null||r===void 0||r.cursorRedo()}}e.CursorRedo=b,(0,k.registerEditorContribution)(_.ID,_,0),(0,k.registerEditorAction)(v),(0,k.registerEditorAction)(b)}),define(se[815],oe([1,0,16,15,19,66,8,45,671]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorKeybindingCancellationTokenSource=void 0;const v=(0,S.createDecorator)("IEditorCancelService"),b=new k.RawContextKey("cancellableOperation",!1,(0,_.localize)(0,null));(0,p.registerSingleton)(v,class{constructor(){this._tokens=new WeakMap}add(i,n){let t=this._tokens.get(i);t||(t=i.invokeWithinContext(u=>{const f=b.bindTo(u.get(k.IContextKeyService)),c=new E.LinkedList;return{key:f,tokens:c}}),this._tokens.set(i,t));let r;return t.key.set(!0),r=t.tokens.push(n),()=>{r&&(r(),t.key.set(!t.tokens.isEmpty()),r=void 0)}}cancel(i){const n=this._tokens.get(i);if(!n)return;const t=n.tokens.pop();t&&(t.cancel(),n.key.set(!n.tokens.isEmpty()))}},1);class a extends y.CancellationTokenSource{constructor(n,t){super(t),this.editor=n,this._unregister=n.invokeWithinContext(r=>r.get(v).add(n,this))}dispose(){this._unregister(),super.dispose()}}e.EditorKeybindingCancellationTokenSource=a,(0,L.registerEditorCommand)(new class extends L.EditorCommand{constructor(){super({id:"editor.cancelOperation",kbOpts:{weight:100,primary:9},precondition:b})}runEditorCommand(i,n){i.get(v).cancel(n)}})}),define(se[105],oe([1,0,11,5,19,2,815]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TextModelCancellationTokenSource=e.EditorStateCancellationTokenSource=e.EditorState=void 0;class p{constructor(a,i){if(this.flags=i,this.flags&1){const n=a.getModel();this.modelVersionId=n?L.format("{0}#{1}",n.uri.toString(),n.getVersionId()):null}else this.modelVersionId=null;this.flags&4?this.position=a.getPosition():this.position=null,this.flags&2?this.selection=a.getSelection():this.selection=null,this.flags&8?(this.scrollLeft=a.getScrollLeft(),this.scrollTop=a.getScrollTop()):(this.scrollLeft=-1,this.scrollTop=-1)}_equals(a){if(!(a instanceof p))return!1;const i=a;return!(this.modelVersionId!==i.modelVersionId||this.scrollLeft!==i.scrollLeft||this.scrollTop!==i.scrollTop||!this.position&&i.position||this.position&&!i.position||this.position&&i.position&&!this.position.equals(i.position)||!this.selection&&i.selection||this.selection&&!i.selection||this.selection&&i.selection&&!this.selection.equalsRange(i.selection))}validate(a){return this._equals(new p(a,this.flags))}}e.EditorState=p;class _ extends S.EditorKeybindingCancellationTokenSource{constructor(a,i,n,t){super(a,t),this._listener=new E.DisposableStore,i&4&&this._listener.add(a.onDidChangeCursorPosition(r=>{(!n||!k.Range.containsPosition(n,r.position))&&this.cancel()})),i&2&&this._listener.add(a.onDidChangeCursorSelection(r=>{(!n||!k.Range.containsRange(n,r.selection))&&this.cancel()})),i&8&&this._listener.add(a.onDidScrollChange(r=>this.cancel())),i&1&&(this._listener.add(a.onDidChangeModel(r=>this.cancel())),this._listener.add(a.onDidChangeModelContent(r=>this.cancel())))}dispose(){this._listener.dispose(),super.dispose()}}e.EditorStateCancellationTokenSource=_;class v extends y.CancellationTokenSource{constructor(a,i){super(i),this._listener=a.onDidChangeContent(()=>this.cancel())}dispose(){this._listener.dispose(),super.dispose()}}e.TextModelCancellationTokenSource=v}),define(se[140],oe([1,0,13,19,12,2,22,136,5,24,18,51,105,654,25,50,88,81,116]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.applyCodeAction=e.ApplyCodeActionReason=e.getCodeActions=e.fixAllCommandId=e.organizeImportsCommandId=e.sourceActionCommandId=e.refactorCommandId=e.autoFixCommandId=e.quickFixCommandId=e.codeActionCommandId=void 0,e.codeActionCommandId="editor.action.codeAction",e.quickFixCommandId="editor.action.quickFix",e.autoFixCommandId="editor.action.autoFix",e.refactorCommandId="editor.action.refactor",e.sourceActionCommandId="editor.action.sourceAction",e.organizeImportsCommandId="editor.action.organizeImports",e.fixAllCommandId="editor.action.fixAll";class d extends E.Disposable{static codeActionsPreferredComparator(I,T){return I.isPreferred&&!T.isPreferred?-1:!I.isPreferred&&T.isPreferred?1:0}static codeActionsComparator({action:I},{action:T}){return I.isAI&&!T.isAI?1:!I.isAI&&T.isAI?-1:(0,L.isNonEmptyArray)(I.diagnostics)?(0,L.isNonEmptyArray)(T.diagnostics)?d.codeActionsPreferredComparator(I,T):-1:(0,L.isNonEmptyArray)(T.diagnostics)?1:d.codeActionsPreferredComparator(I,T)}constructor(I,T,A){super(),this.documentation=T,this._register(A),this.allActions=[...I].sort(d.codeActionsComparator),this.validActions=this.allActions.filter(({action:P})=>!P.disabled)}get hasAutoFix(){return this.validActions.some(({action:I})=>!!I.kind&&c.CodeActionKind.QuickFix.contains(new c.CodeActionKind(I.kind))&&!!I.isPreferred)}get hasAIFix(){return this.validActions.some(({action:I})=>!!I.isAI)}get allAIFixes(){return this.validActions.every(({action:I})=>!!I.isAI)}}const s={actions:[],documentation:void 0};async function l(D,I,T,A,P,N){var M;const R=A.filter||{},x={...R,excludes:[...R.excludes||[],c.CodeActionKind.Notebook]},O={only:(M=R.include)===null||M===void 0?void 0:M.value,trigger:A.type},B=new i.TextModelCancellationTokenSource(I,N),W=A.type===2,V=o(D,I,W?x:R),K=new E.DisposableStore,F=V.map(async ie=>{try{P.report(ie);const ae=await ie.provideCodeActions(I,T,O,B.token);if(ae&&K.add(ae),B.token.isCancellationRequested)return s;const ne=(ae?.actions||[]).filter(J=>J&&(0,c.filtersAction)(R,J)),$=h(ie,ne,R.include);return{actions:ne.map(J=>new c.CodeActionItem(J,ie)),documentation:$}}catch(ae){if((0,y.isCancellationError)(ae))throw ae;return(0,y.onUnexpectedExternalError)(ae),s}}),q=D.onDidChange(()=>{const ie=D.all(I);(0,L.equals)(ie,V)||B.cancel()});try{const ie=await Promise.all(F),ae=ie.map($=>$.actions).flat(),ne=[...(0,L.coalesce)(ie.map($=>$.documentation)),...g(D,I,A,ae)];return new d(ae,ne,K)}finally{q.dispose(),B.dispose()}}e.getCodeActions=l;function o(D,I,T){return D.all(I).filter(A=>A.providedCodeActionKinds?A.providedCodeActionKinds.some(P=>(0,c.mayIncludeActionsOfKind)(T,new c.CodeActionKind(P))):!0)}function*g(D,I,T,A){var P,N,M;if(I&&A.length)for(const R of D.all(I))R._getAdditionalMenuItems&&(yield*(P=R._getAdditionalMenuItems)===null||P===void 0?void 0:P.call(R,{trigger:T.type,only:(M=(N=T.filter)===null||N===void 0?void 0:N.include)===null||M===void 0?void 0:M.value},A.map(x=>x.action)))}function h(D,I,T){if(!D.documentation)return;const A=D.documentation.map(P=>({kind:new c.CodeActionKind(P.kind),command:P.command}));if(T){let P;for(const N of A)N.kind.contains(T)&&(P?P.kind.contains(N.kind)&&(P=N):P=N);if(P)return P?.command}for(const P of I)if(P.kind){for(const N of A)if(N.kind.contains(new c.CodeActionKind(P.kind)))return N.command}}var m;(function(D){D.OnSave="onSave",D.FromProblemsView="fromProblemsView",D.FromCodeActions="fromCodeActions",D.FromAILightbulb="fromAILightbulb"})(m||(e.ApplyCodeActionReason=m={}));async function C(D,I,T,A,P=k.CancellationToken.None){var N;const M=D.get(p.IBulkEditService),R=D.get(t.ICommandService),x=D.get(f.ITelemetryService),O=D.get(r.INotificationService);if(x.publicLog2("codeAction.applyCodeAction",{codeActionTitle:I.action.title,codeActionKind:I.action.kind,codeActionIsPreferred:!!I.action.isPreferred,reason:T}),await I.resolve(P),!P.isCancellationRequested&&!(!((N=I.action.edit)===null||N===void 0)&&N.edits.length&&!(await M.apply(I.action.edit,{editor:A?.editor,label:I.action.title,quotableLabel:I.action.title,code:"undoredo.codeAction",respectAutoSaveConfig:T!==m.OnSave,showPreview:A?.preview})).isApplied)&&I.action.command)try{await R.executeCommand(I.action.command.id,...I.action.command.arguments||[])}catch(B){const W=w(B);O.error(typeof W=="string"?W:n.localize(0,null))}}e.applyCodeAction=C;function w(D){return typeof D=="string"?D:D instanceof Error&&typeof D.message=="string"?D.message:void 0}t.CommandsRegistry.registerCommand("_executeCodeActionProvider",async function(D,I,T,A,P){if(!(I instanceof S.URI))throw(0,y.illegalArgument)();const{codeActionProvider:N}=D.get(b.ILanguageFeaturesService),M=D.get(a.IModelService).getModel(I);if(!M)throw(0,y.illegalArgument)();const R=v.Selection.isISelection(T)?v.Selection.liftSelection(T):_.Range.isIRange(T)?M.validateRange(T):void 0;if(!R)throw(0,y.illegalArgument)();const x=typeof A=="string"?new c.CodeActionKind(A):void 0,O=await l(N,M,R,{type:1,triggerAction:c.CodeActionTriggerSource.Default,filter:{includeSourceActions:!0,include:x}},u.Progress.None,k.CancellationToken.None),B=[],W=Math.min(O.validActions.length,typeof P=="number"?P:0);for(let V=0;VV.action)}finally{setTimeout(()=>O.dispose(),100)}})}),define(se[816],oe([1,0,99,140,116,34]),function(te,e,L,k,y,E){"use strict";var S;Object.defineProperty(e,"__esModule",{value:!0}),e.CodeActionKeybindingResolver=void 0;let p=S=class{constructor(v){this.keybindingService=v}getResolver(){const v=new L.Lazy(()=>this.keybindingService.getKeybindings().filter(b=>S.codeActionCommands.indexOf(b.command)>=0).filter(b=>b.resolvedKeybinding).map(b=>{let a=b.commandArgs;return b.command===k.organizeImportsCommandId?a={kind:y.CodeActionKind.SourceOrganizeImports.value}:b.command===k.fixAllCommandId&&(a={kind:y.CodeActionKind.SourceFixAll.value}),{resolvedKeybinding:b.resolvedKeybinding,...y.CodeActionCommandArgs.fromUser(a,{kind:y.CodeActionKind.None,apply:"never"})}}));return b=>{if(b.kind){const a=this.bestKeybindingForCodeAction(b,v.value);return a?.resolvedKeybinding}}}bestKeybindingForCodeAction(v,b){if(!v.kind)return;const a=new y.CodeActionKind(v.kind);return b.filter(i=>i.kind.contains(a)).filter(i=>i.preferred?v.isPreferred:!0).reduceRight((i,n)=>i?i.kind.contains(n.kind)?n:i:n,void 0)}};e.CodeActionKeybindingResolver=p,p.codeActionCommands=[k.refactorCommandId,k.codeActionCommandId,k.sourceActionCommandId,k.organizeImportsCommandId,k.fixAllCommandId],e.CodeActionKeybindingResolver=p=S=ke([ge(0,E.IKeybindingService)],p)}),define(se[360],oe([1,0,14,12,6,2,49,36,10,24,15,88,116,140]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeActionModel=e.CodeActionsState=e.APPLY_FIX_ALL_COMMAND_ID=e.SUPPORTED_CODE_ACTIONS=void 0,e.SUPPORTED_CODE_ACTIONS=new b.RawContextKey("supportedCodeAction",""),e.APPLY_FIX_ALL_COMMAND_ID="_typescript.applyFixAllCodeAction";class t extends E.Disposable{constructor(d,s,l,o=250){super(),this._editor=d,this._markerService=s,this._signalChange=l,this._delay=o,this._autoTriggerTimer=this._register(new L.TimeoutTimer),this._register(this._markerService.onMarkerChanged(g=>this._onMarkerChanges(g))),this._register(this._editor.onDidChangeCursorPosition(()=>this._tryAutoTrigger()))}trigger(d){const s=this._getRangeOfSelectionUnlessWhitespaceEnclosed(d);this._signalChange(s?{trigger:d,selection:s}:void 0)}_onMarkerChanges(d){const s=this._editor.getModel();s&&d.some(l=>(0,S.isEqual)(l,s.uri))&&this._tryAutoTrigger()}_tryAutoTrigger(){this._autoTriggerTimer.cancelAndSet(()=>{this.trigger({type:2,triggerAction:i.CodeActionTriggerSource.Default})},this._delay)}_getRangeOfSelectionUnlessWhitespaceEnclosed(d){if(!this._editor.hasModel())return;const s=this._editor.getSelection();if(d.type===1)return s;const l=this._editor.getOption(64).enabled;if(l!==p.ShowLightbulbIconMode.Off){{if(l===p.ShowLightbulbIconMode.On)return s;if(l===p.ShowLightbulbIconMode.OnCode){if(!s.isEmpty())return s;const g=this._editor.getModel(),{lineNumber:h,column:m}=s.getPosition(),C=g.getLineContent(h);if(C.length===0)return;if(m===1){if(/\s/.test(C[0]))return}else if(m===g.getLineMaxColumn(h)){if(/\s/.test(C[C.length-1]))return}else if(/\s/.test(C[m-2])&&/\s/.test(C[m-1]))return}}return s}}}var r;(function(c){c.Empty={type:0};class d{constructor(l,o,g){this.trigger=l,this.position=o,this._cancellablePromise=g,this.type=1,this.actions=g.catch(h=>{if((0,k.isCancellationError)(h))return u;throw h})}cancel(){this._cancellablePromise.cancel()}}c.Triggered=d})(r||(e.CodeActionsState=r={}));const u=Object.freeze({allActions:[],validActions:[],dispose:()=>{},documentation:[],hasAutoFix:!1,hasAIFix:!1,allAIFixes:!1});class f extends E.Disposable{constructor(d,s,l,o,g,h){super(),this._editor=d,this._registry=s,this._markerService=l,this._progressService=g,this._configurationService=h,this._codeActionOracle=this._register(new E.MutableDisposable),this._state=r.Empty,this._onDidChangeState=this._register(new y.Emitter),this.onDidChangeState=this._onDidChangeState.event,this._disposed=!1,this._supportedCodeActions=e.SUPPORTED_CODE_ACTIONS.bindTo(o),this._register(this._editor.onDidChangeModel(()=>this._update())),this._register(this._editor.onDidChangeModelLanguage(()=>this._update())),this._register(this._registry.onDidChange(()=>this._update())),this._register(this._editor.onDidChangeConfiguration(m=>{m.hasChanged(64)&&this._update()})),this._update()}dispose(){this._disposed||(this._disposed=!0,super.dispose(),this.setState(r.Empty,!0))}_settingEnabledNearbyQuickfixes(){var d;const s=(d=this._editor)===null||d===void 0?void 0:d.getModel();return this._configurationService?this._configurationService.getValue("editor.codeActionWidget.includeNearbyQuickFixes",{resource:s?.uri}):!1}_update(){if(this._disposed)return;this._codeActionOracle.value=void 0,this.setState(r.Empty);const d=this._editor.getModel();if(d&&this._registry.has(d)&&!this._editor.getOption(90)){const s=this._registry.all(d).flatMap(l=>{var o;return(o=l.providedCodeActionKinds)!==null&&o!==void 0?o:[]});this._supportedCodeActions.set(s.join(" ")),this._codeActionOracle.value=new t(this._editor,this._markerService,l=>{var o;if(!l){this.setState(r.Empty);return}const g=l.selection.getStartPosition(),h=(0,L.createCancelablePromise)(async m=>{var C,w,D,I,T,A,P,N,M,R;if(this._settingEnabledNearbyQuickfixes()&&l.trigger.type===1&&(l.trigger.triggerAction===i.CodeActionTriggerSource.QuickFix||!((w=(C=l.trigger.filter)===null||C===void 0?void 0:C.include)===null||w===void 0)&&w.contains(i.CodeActionKind.QuickFix))){const x=await(0,n.getCodeActions)(this._registry,d,l.selection,l.trigger,a.Progress.None,m),O=[...x.allActions];if(m.isCancellationRequested)return u;const B=(D=x.validActions)===null||D===void 0?void 0:D.some(V=>V.action.kind?i.CodeActionKind.QuickFix.contains(new i.CodeActionKind(V.action.kind)):!1),W=this._markerService.read({resource:d.uri});if(B){for(const V of x.validActions)!((T=(I=V.action.command)===null||I===void 0?void 0:I.arguments)===null||T===void 0)&&T.some(K=>typeof K=="string"&&K.includes(e.APPLY_FIX_ALL_COMMAND_ID))&&(V.action.diagnostics=[...W.filter(K=>K.relatedInformation)]);return{validActions:x.validActions,allActions:O,documentation:x.documentation,hasAutoFix:x.hasAutoFix,hasAIFix:x.hasAIFix,allAIFixes:x.allAIFixes,dispose:()=>{x.dispose()}}}else if(!B&&W.length>0){const V=l.selection.getPosition();let K=V,F=Number.MAX_VALUE;const q=[...x.validActions];for(const ae of W){const ne=ae.endColumn,$=ae.endLineNumber,J=ae.startLineNumber;if($===V.lineNumber||J===V.lineNumber){K=new _.Position($,ne);const Q={type:l.trigger.type,triggerAction:l.trigger.triggerAction,filter:{include:!((A=l.trigger.filter)===null||A===void 0)&&A.include?(P=l.trigger.filter)===null||P===void 0?void 0:P.include:i.CodeActionKind.QuickFix},autoApply:l.trigger.autoApply,context:{notAvailableMessage:((N=l.trigger.context)===null||N===void 0?void 0:N.notAvailableMessage)||"",position:K}},re=new v.Selection(K.lineNumber,K.column,K.lineNumber,K.column),de=await(0,n.getCodeActions)(this._registry,d,re,Q,a.Progress.None,m);if(de.validActions.length!==0){for(const he of de.validActions)!((R=(M=he.action.command)===null||M===void 0?void 0:M.arguments)===null||R===void 0)&&R.some(me=>typeof me=="string"&&me.includes(e.APPLY_FIX_ALL_COMMAND_ID))&&(he.action.diagnostics=[...W.filter(me=>me.relatedInformation)]);x.allActions.length===0&&O.push(...de.allActions),Math.abs(V.column-ne)$.findIndex(J=>J.action.title===ae.action.title)===ne);return ie.sort((ae,ne)=>ae.action.isPreferred&&!ne.action.isPreferred?-1:!ae.action.isPreferred&&ne.action.isPreferred||ae.action.isAI&&!ne.action.isAI?1:!ae.action.isAI&&ne.action.isAI?-1:0),{validActions:ie,allActions:O,documentation:x.documentation,hasAutoFix:x.hasAutoFix,hasAIFix:x.hasAIFix,allAIFixes:x.allAIFixes,dispose:()=>{x.dispose()}}}}return(0,n.getCodeActions)(this._registry,d,l.selection,l.trigger,a.Progress.None,m)});l.trigger.type===1&&((o=this._progressService)===null||o===void 0||o.showWhile(h,250)),this.setState(new r.Triggered(l.trigger,g,h))},void 0),this._codeActionOracle.value.trigger({type:2,triggerAction:i.CodeActionTriggerSource.Default})}else this._supportedCodeActions.reset()}trigger(d){var s;(s=this._codeActionOracle.value)===null||s===void 0||s.trigger(d)}setState(d,s){d!==this._state&&(this._state.type===1&&this._state.cancel(),this._state=d,!s&&!this._disposed&&this._onDidChangeState.fire(d))}}e.CodeActionModel=f}),define(se[361],oe([1,0,7,63,26,6,2,28,210,140,659,25,34,455]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0}),e.LightBulbWidget=void 0;var t;(function(u){u.Hidden={type:0};class f{constructor(d,s,l,o){this.actions=d,this.trigger=s,this.editorPosition=l,this.widgetPosition=o,this.type=1}}u.Showing=f})(t||(t={}));let r=n=class extends S.Disposable{constructor(f,c,d){super(),this._editor=f,this._keybindingService=c,this._onClick=this._register(new E.Emitter),this.onClick=this._onClick.event,this._state=t.Hidden,this._iconClasses=[],this._domNode=L.$("div.lightBulbWidget"),this._register(k.Gesture.ignoreTarget(this._domNode)),this._editor.addContentWidget(this),this._register(this._editor.onDidChangeModelContent(s=>{const l=this._editor.getModel();(this.state.type!==1||!l||this.state.editorPosition.lineNumber>=l.getLineCount())&&this.hide()})),this._register(L.addStandardDisposableGenericMouseDownListener(this._domNode,s=>{if(this.state.type!==1)return;this._editor.focus(),s.preventDefault();const{top:l,height:o}=L.getDomNodePagePosition(this._domNode),g=this._editor.getOption(66);let h=Math.floor(g/3);this.state.widgetPosition.position!==null&&this.state.widgetPosition.position.lineNumber{(s.buttons&1)===1&&this.hide()})),this._register(E.Event.runAndSubscribe(this._keybindingService.onDidUpdateKeybindings,()=>{var s,l,o,g;this._preferredKbLabel=(l=(s=this._keybindingService.lookupKeybinding(v.autoFixCommandId))===null||s===void 0?void 0:s.getLabel())!==null&&l!==void 0?l:void 0,this._quickFixKbLabel=(g=(o=this._keybindingService.lookupKeybinding(v.quickFixCommandId))===null||o===void 0?void 0:o.getLabel())!==null&&g!==void 0?g:void 0,this._updateLightBulbTitleAndIcon()}))}dispose(){super.dispose(),this._editor.removeContentWidget(this)}getId(){return"LightBulbWidget"}getDomNode(){return this._domNode}getPosition(){return this._state.type===1?this._state.widgetPosition:null}update(f,c,d){if(f.validActions.length<=0)return this.hide();if(!this._editor.getOptions().get(64).enabled)return this.hide();const l=this._editor.getModel();if(!l)return this.hide();const{lineNumber:o,column:g}=l.validatePosition(d),h=l.getOptions().tabSize,m=this._editor.getOptions().get(50),C=l.getLineContent(o),w=(0,_.computeIndentLevel)(C,h),D=m.spaceWidth*w>22,I=P=>P>2&&this._editor.getTopForLineNumber(P)===this._editor.getTopForLineNumber(P-1);let T=o,A=1;if(!D){if(o>1&&!I(o-1))T-=1;else if(o0&&i.Range.areIntersectingOrTouching(ae[ne-1],de)?ae[ne-1]=i.Range.fromPositions(ae[ne-1].getStartPosition(),de.getEndPosition()):ne=ae.push(de);const $=async de=>{var he,me;K.trace("[format][provideDocumentRangeFormattingEdits] (request)",(he=N.extensionId)===null||he===void 0?void 0:he.value,de);const X=await N.provideDocumentRangeFormattingEdits(q,de,q.getFormattingOptions(),ie.token)||[];return K.trace("[format][provideDocumentRangeFormattingEdits] (response)",(me=N.extensionId)===null||me===void 0?void 0:me.value,X),X},J=(de,he)=>{if(!de.length||!he.length)return!1;const me=de.reduce((X,U)=>i.Range.plusRange(X,U.range),de[0].range);if(!he.some(X=>i.Range.intersectRanges(me,X.range)))return!1;for(const X of de)for(const U of he)if(i.Range.intersectRanges(X.range,U.range))return!0;return!1},Q=[],re=[];try{if(typeof N.provideDocumentRangesFormattingEdits=="function"){K.trace("[format][provideDocumentRangeFormattingEdits] (request)",(B=N.extensionId)===null||B===void 0?void 0:B.value,ae);const de=await N.provideDocumentRangesFormattingEdits(q,ae,q.getFormattingOptions(),ie.token)||[];K.trace("[format][provideDocumentRangeFormattingEdits] (response)",(W=N.extensionId)===null||W===void 0?void 0:W.value,de),re.push(de)}else{for(const de of ae){if(ie.token.isCancellationRequested)return!0;re.push(await $(de))}for(let de=0;de({text:me.text,range:i.Range.lift(me.range),forceMoveMarkers:!0})),me=>{for(const{range:X}of me)if(i.Range.areIntersectingOrTouching(X,he))return[new n.Selection(X.startLineNumber,X.startColumn,X.endLineNumber,X.endColumn)];return null})}return F.playAudioCue(o.AudioCue.format,{userGesture:O}),!0}e.formatDocumentRangesWithProvider=C;async function w(P,N,M,R,x,O){const B=P.get(d.IInstantiationService),W=P.get(s.ILanguageFeaturesService),V=(0,b.isCodeEditor)(N)?N.getModel():N,K=g(W.documentFormattingEditProvider,W.documentRangeFormattingEditProvider,V),F=await h.select(K,V,M,1);F&&(R.report(F),await B.invokeFunction(D,F,N,M,x,O))}e.formatDocumentWithSelectedProvider=w;async function D(P,N,M,R,x,O){const B=P.get(t.IEditorWorkerService),W=P.get(o.IAudioCueService);let V,K;(0,b.isCodeEditor)(M)?(V=M.getModel(),K=new v.EditorStateCancellationTokenSource(M,5,void 0,x)):(V=M,K=new v.TextModelCancellationTokenSource(M,x));let F;try{const q=await N.provideDocumentFormattingEdits(V,V.getFormattingOptions(),K.token);if(F=await B.computeMoreMinimalEdits(V.uri,q),K.token.isCancellationRequested)return!0}finally{K.dispose()}if(!F||F.length===0)return!1;if((0,b.isCodeEditor)(M))u.FormattingEdit.execute(M,F,R!==2),R!==2&&M.revealPositionInCenterIfOutsideViewport(M.getPosition(),1);else{const[{range:q}]=F,ie=new n.Selection(q.startLineNumber,q.startColumn,q.endLineNumber,q.endColumn);V.pushEditOperations([ie],F.map(ae=>({text:ae.text,range:i.Range.lift(ae.range),forceMoveMarkers:!0})),ae=>{for(const{range:ne}of ae)if(i.Range.areIntersectingOrTouching(ne,ie))return[new n.Selection(ne.startLineNumber,ne.startColumn,ne.endLineNumber,ne.endColumn)];return null})}return W.playAudioCue(o.AudioCue.format,{userGesture:O}),!0}e.formatDocumentWithProvider=D;async function I(P,N,M,R,x,O){const B=N.documentRangeFormattingEditProvider.ordered(M);for(const W of B){const V=await Promise.resolve(W.provideDocumentRangeFormattingEdits(M,R,x,O)).catch(y.onUnexpectedExternalError);if((0,L.isNonEmptyArray)(V))return await P.computeMoreMinimalEdits(M.uri,V)}}e.getDocumentRangeFormattingEditsUntilResult=I;async function T(P,N,M,R,x){const O=g(N.documentFormattingEditProvider,N.documentRangeFormattingEditProvider,M);for(const B of O){const W=await Promise.resolve(B.provideDocumentFormattingEdits(M,R,x)).catch(y.onUnexpectedExternalError);if((0,L.isNonEmptyArray)(W))return await P.computeMoreMinimalEdits(M.uri,W)}}e.getDocumentFormattingEditsUntilResult=T;function A(P,N,M,R,x,O,B){const W=N.onTypeFormattingEditProvider.ordered(M);return W.length===0||W[0].autoFormatTriggerCharacters.indexOf(x)<0?Promise.resolve(void 0):Promise.resolve(W[0].provideOnTypeFormattingEdits(M,R,x,O,B)).catch(y.onUnexpectedExternalError).then(V=>P.computeMoreMinimalEdits(M.uri,V))}e.getOnTypeFormattingEdits=A,f.CommandsRegistry.registerCommand("_executeFormatRangeProvider",async function(P,...N){const[M,R,x]=N;(0,p.assertType)(_.URI.isUri(M)),(0,p.assertType)(i.Range.isIRange(R));const O=P.get(r.ITextModelService),B=P.get(t.IEditorWorkerService),W=P.get(s.ILanguageFeaturesService),V=await O.createModelReference(M);try{return I(B,W,V.object.textEditorModel,i.Range.lift(R),x,k.CancellationToken.None)}finally{V.dispose()}}),f.CommandsRegistry.registerCommand("_executeFormatDocumentProvider",async function(P,...N){const[M,R]=N;(0,p.assertType)(_.URI.isUri(M));const x=P.get(r.ITextModelService),O=P.get(t.IEditorWorkerService),B=P.get(s.ILanguageFeaturesService),W=await x.createModelReference(M);try{return T(O,B,W.object.textEditorModel,R,k.CancellationToken.None)}finally{W.dispose()}}),f.CommandsRegistry.registerCommand("_executeFormatOnTypeProvider",async function(P,...N){const[M,R,x,O]=N;(0,p.assertType)(_.URI.isUri(M)),(0,p.assertType)(a.Position.isIPosition(R)),(0,p.assertType)(typeof x=="string");const B=P.get(r.ITextModelService),W=P.get(t.IEditorWorkerService),V=P.get(s.ILanguageFeaturesService),K=await B.createModelReference(M);try{return A(W,V,K.object.textEditorModel,a.Position.lift(R),x,O,k.CancellationToken.None)}finally{K.dispose()}})}),define(se[818],oe([1,0,13,19,12,65,2,16,33,128,5,21,121,18,362,305,677,122,25,15,8,88]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FormatOnType=void 0;let o=class{constructor(w,D,I,T){this._editor=w,this._languageFeaturesService=D,this._workerService=I,this._audioCueService=T,this._disposables=new S.DisposableStore,this._sessionDisposables=new S.DisposableStore,this._disposables.add(D.onTypeFormattingEditProvider.onDidChange(this._update,this)),this._disposables.add(w.onDidChangeModel(()=>this._update())),this._disposables.add(w.onDidChangeModelLanguage(()=>this._update())),this._disposables.add(w.onDidChangeConfiguration(A=>{A.hasChanged(56)&&this._update()})),this._update()}dispose(){this._disposables.dispose(),this._sessionDisposables.dispose()}_update(){if(this._sessionDisposables.clear(),!this._editor.getOption(56)||!this._editor.hasModel())return;const w=this._editor.getModel(),[D]=this._languageFeaturesService.onTypeFormattingEditProvider.ordered(w);if(!D||!D.autoFormatTriggerCharacters)return;const I=new v.CharacterSet;for(const T of D.autoFormatTriggerCharacters)I.add(T.charCodeAt(0));this._sessionDisposables.add(this._editor.onDidType(T=>{const A=T.charCodeAt(T.length-1);I.has(A)&&this._trigger(String.fromCharCode(A))}))}_trigger(w){if(!this._editor.hasModel()||this._editor.getSelections().length>1||!this._editor.getSelection().isEmpty())return;const D=this._editor.getModel(),I=this._editor.getPosition(),T=new k.CancellationTokenSource,A=this._editor.onDidChangeModelContent(P=>{if(P.isFlush){T.cancel(),A.dispose();return}for(let N=0,M=P.changes.length;N{T.token.isCancellationRequested||(0,L.isNonEmptyArray)(P)&&(this._audioCueService.playAudioCue(f.AudioCue.format,{userGesture:!1}),r.FormattingEdit.execute(this._editor,P,!0))}).finally(()=>{A.dispose()})}};e.FormatOnType=o,o.ID="editor.contrib.autoFormat",e.FormatOnType=o=ke([ge(1,n.ILanguageFeaturesService),ge(2,i.IEditorWorkerService),ge(3,f.IAudioCueService)],o);let g=class{constructor(w,D,I){this.editor=w,this._languageFeaturesService=D,this._instantiationService=I,this._callOnDispose=new S.DisposableStore,this._callOnModel=new S.DisposableStore,this._callOnDispose.add(w.onDidChangeConfiguration(()=>this._update())),this._callOnDispose.add(w.onDidChangeModel(()=>this._update())),this._callOnDispose.add(w.onDidChangeModelLanguage(()=>this._update())),this._callOnDispose.add(D.documentRangeFormattingEditProvider.onDidChange(this._update,this))}dispose(){this._callOnDispose.dispose(),this._callOnModel.dispose()}_update(){this._callOnModel.clear(),this.editor.getOption(55)&&this.editor.hasModel()&&this._languageFeaturesService.documentRangeFormattingEditProvider.has(this.editor.getModel())&&this._callOnModel.add(this.editor.onDidPaste(({range:w})=>this._trigger(w)))}_trigger(w){this.editor.hasModel()&&(this.editor.getSelections().length>1||this._instantiationService.invokeFunction(t.formatDocumentRangesWithSelectedProvider,this.editor,w,2,l.Progress.None,k.CancellationToken.None,!1).catch(y.onUnexpectedError))}};g.ID="editor.contrib.formatOnPaste",g=ke([ge(1,n.ILanguageFeaturesService),ge(2,s.IInstantiationService)],g);class h extends p.EditorAction{constructor(){super({id:"editor.action.formatDocument",label:u.localize(0,null),alias:"Format Document",precondition:d.ContextKeyExpr.and(a.EditorContextKeys.notInCompositeEditor,a.EditorContextKeys.writable,a.EditorContextKeys.hasDocumentFormattingProvider),kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:1572,linux:{primary:3111},weight:100},contextMenuOpts:{group:"1_modification",order:1.3}})}async run(w,D){if(D.hasModel()){const I=w.get(s.IInstantiationService);await w.get(l.IEditorProgressService).showWhile(I.invokeFunction(t.formatDocumentWithSelectedProvider,D,1,l.Progress.None,k.CancellationToken.None,!0),250)}}}class m extends p.EditorAction{constructor(){super({id:"editor.action.formatSelection",label:u.localize(1,null),alias:"Format Selection",precondition:d.ContextKeyExpr.and(a.EditorContextKeys.writable,a.EditorContextKeys.hasDocumentSelectionFormattingProvider),kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2084),weight:100},contextMenuOpts:{when:a.EditorContextKeys.hasNonEmptySelection,group:"1_modification",order:1.31}})}async run(w,D){if(!D.hasModel())return;const I=w.get(s.IInstantiationService),T=D.getModel(),A=D.getSelections().map(N=>N.isEmpty()?new b.Range(N.startLineNumber,1,N.startLineNumber,T.getLineMaxColumn(N.startLineNumber)):N);await w.get(l.IEditorProgressService).showWhile(I.invokeFunction(t.formatDocumentRangesWithSelectedProvider,D,A,1,l.Progress.None,k.CancellationToken.None,!0),250)}}(0,p.registerEditorContribution)(o.ID,o,2),(0,p.registerEditorContribution)(g.ID,g,2),(0,p.registerEditorAction)(h),(0,p.registerEditorAction)(m),c.CommandsRegistry.registerCommand("editor.action.format",async C=>{const w=C.get(_.ICodeEditorService).getFocusedCodeEditor();if(!w||!w.hasModel())return;const D=C.get(c.ICommandService);w.getSelection().isEmpty()?await D.executeCommand("editor.action.formatDocument"):await D.executeCommand("editor.action.formatSelection")})}),define(se[252],oe([1,0,13,19,12,16,18,161]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getReferencesAtPosition=e.getTypeDefinitionsAtPosition=e.getImplementationsAtPosition=e.getDeclarationsAtPosition=e.getDefinitionsAtPosition=void 0;async function _(r,u,f,c){const s=f.ordered(r).map(o=>Promise.resolve(c(o,r,u)).then(void 0,g=>{(0,y.onUnexpectedExternalError)(g)})),l=await Promise.all(s);return(0,L.coalesce)(l.flat())}function v(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideDefinition(s,l,c))}e.getDefinitionsAtPosition=v;function b(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideDeclaration(s,l,c))}e.getDeclarationsAtPosition=b;function a(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideImplementation(s,l,c))}e.getImplementationsAtPosition=a;function i(r,u,f,c){return _(u,f,r,(d,s,l)=>d.provideTypeDefinition(s,l,c))}e.getTypeDefinitionsAtPosition=i;function n(r,u,f,c,d){return _(u,f,r,async(s,l,o)=>{const g=await s.provideReferences(l,o,{includeDeclaration:!0},d);if(!c||!g||g.length!==2)return g;const h=await s.provideReferences(l,o,{includeDeclaration:!1},d);return h&&h.length===1?h:g})}e.getReferencesAtPosition=n;async function t(r){const u=await r(),f=new p.ReferencesModel(u,""),c=f.references.map(d=>d.link);return f.dispose(),c}(0,E.registerModelAndPositionCommand)("_executeDefinitionProvider",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=v(c.definitionProvider,u,f,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)("_executeTypeDefinitionProvider",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=i(c.typeDefinitionProvider,u,f,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)("_executeDeclarationProvider",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=b(c.declarationProvider,u,f,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)("_executeReferenceProvider",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=n(c.referenceProvider,u,f,!1,k.CancellationToken.None);return t(()=>d)}),(0,E.registerModelAndPositionCommand)("_executeImplementationProvider",(r,u,f)=>{const c=r.get(S.ILanguageFeaturesService),d=a(c.implementationProvider,u,f,k.CancellationToken.None);return t(()=>d)})}),define(se[819],oe([1,0,6,2,49,16,33,5,686,15,45,8,34,124,50]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ISymbolNavigationService=e.ctxHasSymbols=void 0,e.ctxHasSymbols=new v.RawContextKey("hasSymbols",!1,(0,_.localize)(0,null)),e.ISymbolNavigationService=(0,a.createDecorator)("ISymbolNavigationService");let r=class{constructor(c,d,s,l){this._editorService=d,this._notificationService=s,this._keybindingService=l,this._currentModel=void 0,this._currentIdx=-1,this._ignoreEditorChange=!1,this._ctxHasSymbols=e.ctxHasSymbols.bindTo(c)}reset(){var c,d;this._ctxHasSymbols.reset(),(c=this._currentState)===null||c===void 0||c.dispose(),(d=this._currentMessage)===null||d===void 0||d.dispose(),this._currentModel=void 0,this._currentIdx=-1}put(c){const d=c.parent.parent;if(d.references.length<=1){this.reset();return}this._currentModel=d,this._currentIdx=d.references.indexOf(c),this._ctxHasSymbols.set(!0),this._showMessage();const s=new u(this._editorService),l=s.onDidChange(o=>{if(this._ignoreEditorChange)return;const g=this._editorService.getActiveCodeEditor();if(!g)return;const h=g.getModel(),m=g.getPosition();if(!h||!m)return;let C=!1,w=!1;for(const D of d.references)if((0,y.isEqual)(D.uri,h.uri))C=!0,w=w||p.Range.containsPosition(D.range,m);else if(C)break;(!C||!w)&&this.reset()});this._currentState=(0,k.combinedDisposable)(s,l)}revealNext(c){if(!this._currentModel)return Promise.resolve();this._currentIdx+=1,this._currentIdx%=this._currentModel.references.length;const d=this._currentModel.references[this._currentIdx];return this._showMessage(),this._ignoreEditorChange=!0,this._editorService.openCodeEditor({resource:d.uri,options:{selection:p.Range.collapseToStart(d.range),selectionRevealType:3}},c).finally(()=>{this._ignoreEditorChange=!1})}_showMessage(){var c;(c=this._currentMessage)===null||c===void 0||c.dispose();const d=this._keybindingService.lookupKeybinding("editor.gotoNextSymbolFromResult"),s=d?(0,_.localize)(1,null,this._currentIdx+1,this._currentModel.references.length,d.getLabel()):(0,_.localize)(2,null,this._currentIdx+1,this._currentModel.references.length);this._currentMessage=this._notificationService.status(s)}};r=ke([ge(0,v.IContextKeyService),ge(1,S.ICodeEditorService),ge(2,t.INotificationService),ge(3,i.IKeybindingService)],r),(0,b.registerSingleton)(e.ISymbolNavigationService,r,1),(0,E.registerEditorCommand)(new class extends E.EditorCommand{constructor(){super({id:"editor.gotoNextSymbolFromResult",precondition:e.ctxHasSymbols,kbOpts:{weight:100,primary:70}})}runEditorCommand(f,c){return f.get(e.ISymbolNavigationService).revealNext(c)}}),n.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"editor.gotoNextSymbolFromResult.cancel",weight:100,when:e.ctxHasSymbols,primary:9,handler(f){f.get(e.ISymbolNavigationService).reset()}});let u=class{constructor(c){this._listener=new Map,this._disposables=new k.DisposableStore,this._onDidChange=new L.Emitter,this.onDidChange=this._onDidChange.event,this._disposables.add(c.onCodeEditorRemove(this._onDidRemoveEditor,this)),this._disposables.add(c.onCodeEditorAdd(this._onDidAddEditor,this)),c.listCodeEditors().forEach(this._onDidAddEditor,this)}dispose(){this._disposables.dispose(),this._onDidChange.dispose(),(0,k.dispose)(this._listener.values())}_onDidAddEditor(c){this._listener.set(c,(0,k.combinedDisposable)(c.onDidChangeCursorPosition(d=>this._onDidChange.fire({editor:c})),c.onDidChangeModelContent(d=>this._onDidChange.fire({editor:c}))))}_onDidRemoveEditor(c){var d;(d=this._listener.get(c))===null||d===void 0||d.dispose(),this._listener.delete(c)}};u=ke([ge(0,S.ICodeEditorService)],u)}),define(se[363],oe([1,0,14,19,12,16,18]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getHoverPromise=e.getHover=e.HoverProviderResult=void 0;class p{constructor(n,t,r){this.provider=n,this.hover=t,this.ordinal=r}}e.HoverProviderResult=p;async function _(i,n,t,r,u){try{const f=await Promise.resolve(i.provideHover(t,r,u));if(f&&a(f))return new p(i,f,n)}catch(f){(0,y.onUnexpectedExternalError)(f)}}function v(i,n,t,r){const f=i.ordered(n).map((c,d)=>_(c,d,n,t,r));return L.AsyncIterableObject.fromPromises(f).coalesce()}e.getHover=v;function b(i,n,t,r){return v(i,n,t,r).map(u=>u.hover).toPromise()}e.getHoverPromise=b,(0,E.registerModelAndPositionCommand)("_executeHoverProvider",(i,n,t)=>{const r=i.get(S.ILanguageFeaturesService);return b(r.hoverProvider,n,t,k.CancellationToken.None)});function a(i){const n=typeof i.range<"u",t=typeof i.contents<"u"&&i.contents&&i.contents.length>0;return n&&t}}),define(se[253],oe([1,0,7,13,14,58,2,104,10,5,43,363,688,27,57,18]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.renderMarkdownHovers=e.MarkdownHoverParticipant=e.MarkdownHover=void 0;const u=L.$;class f{constructor(l,o,g,h,m){this.owner=l,this.range=o,this.contents=g,this.isBeforeContent=h,this.ordinal=m}isValidForHoverAnchor(l){return l.type===1&&this.range.startColumn<=l.range.startColumn&&this.range.endColumn>=l.range.endColumn}}e.MarkdownHover=f;let c=class{constructor(l,o,g,h,m){this._editor=l,this._languageService=o,this._openerService=g,this._configurationService=h,this._languageFeaturesService=m,this.hoverOrdinal=3}createLoadingMessage(l){return new f(this,l.range,[new E.MarkdownString().appendText(i.localize(0,null))],!1,2e3)}computeSync(l,o){if(!this._editor.hasModel()||l.type!==1)return[];const g=this._editor.getModel(),h=l.range.startLineNumber,m=g.getLineMaxColumn(h),C=[];let w=1e3;const D=g.getLineLength(h),I=g.getLanguageIdAtPosition(l.range.startLineNumber,l.range.startColumn),T=this._editor.getOption(116),A=this._configurationService.getValue("editor.maxTokenizationLineLength",{overrideIdentifier:I});let P=!1;T>=0&&D>T&&l.range.startColumn>=T&&(P=!0,C.push(new f(this,l.range,[{value:i.localize(1,null)}],!1,w++))),!P&&typeof A=="number"&&D>=A&&C.push(new f(this,l.range,[{value:i.localize(2,null)}],!1,w++));let N=!1;for(const M of o){const R=M.range.startLineNumber===h?M.range.startColumn:1,x=M.range.endLineNumber===h?M.range.endColumn:m,O=M.options.hoverMessage;if(!O||(0,E.isEmptyMarkdownString)(O))continue;M.options.beforeContentClassName&&(N=!0);const B=new v.Range(l.range.startLineNumber,R,l.range.startLineNumber,x);C.push(new f(this,B,(0,k.asArray)(O),N,w++))}return C}computeAsync(l,o,g){if(!this._editor.hasModel()||l.type!==1)return y.AsyncIterableObject.EMPTY;const h=this._editor.getModel();if(!this._languageFeaturesService.hoverProvider.has(h))return y.AsyncIterableObject.EMPTY;const m=new _.Position(l.range.startLineNumber,l.range.startColumn);return(0,a.getHover)(this._languageFeaturesService.hoverProvider,h,m,g).filter(C=>!(0,E.isEmptyMarkdownString)(C.hover.contents)).map(C=>{const w=C.hover.range?v.Range.lift(C.hover.range):l.range;return new f(this,w,C.hover.contents,!1,C.ordinal)})}renderHoverParts(l,o){return d(l,o,this._editor,this._languageService,this._openerService)}};e.MarkdownHoverParticipant=c,e.MarkdownHoverParticipant=c=ke([ge(1,b.ILanguageService),ge(2,t.IOpenerService),ge(3,n.IConfigurationService),ge(4,r.ILanguageFeaturesService)],c);function d(s,l,o,g,h){l.sort((C,w)=>C.ordinal-w.ordinal);const m=new S.DisposableStore;for(const C of l)for(const w of C.contents){if((0,E.isEmptyMarkdownString)(w))continue;const D=u("div.hover-row.markdown-hover"),I=L.append(D,u("div.hover-contents")),T=m.add(new p.MarkdownRenderer({editor:o},g,h));m.add(T.onDidRenderAsync(()=>{I.className="hover-contents code-hover-contents",s.onContentsChanged()}));const A=m.add(T.render(w));I.appendChild(A.element),s.fragment.appendChild(D)}return m}e.renderMarkdownHovers=d}),define(se[820],oe([1,0,2,11,16,250,74,5,24,21,32,51,306,691,70,203,248]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IndentationToTabsCommand=e.IndentationToSpacesCommand=e.AutoIndentOnPaste=e.AutoIndentOnPasteCommand=e.ReindentSelectedLinesAction=e.ReindentLinesAction=e.DetectIndentation=e.ChangeTabDisplaySize=e.IndentUsingSpaces=e.IndentUsingTabs=e.ChangeIndentationSizeAction=e.IndentationToTabsAction=e.IndentationToSpacesAction=e.getReindentEditOperations=void 0;function f(P,N,M,R,x){if(P.getLineCount()===1&&P.getLineMaxColumn(1)===1)return[];const O=N.getLanguageConfiguration(P.getLanguageId()).indentationRules;if(!O)return[];for(R=Math.min(R,P.getLineCount());M<=R&&O.unIndentedLinePattern;){const J=P.getLineContent(M);if(!O.unIndentedLinePattern.test(J))break;M++}if(M>R-1)return[];const{tabSize:B,indentSize:W,insertSpaces:V}=P.getOptions(),K=(J,Q)=>(Q=Q||1,E.ShiftCommand.shiftIndent(J,J.length+Q,B,W,V)),F=(J,Q)=>(Q=Q||1,E.ShiftCommand.unshiftIndent(J,J.length+Q,B,W,V)),q=[];let ie;const ae=P.getLineContent(M);let ne=ae;if(x!=null){ie=x;const J=k.getLeadingWhitespace(ae);ne=ie+ae.substring(J.length),O.decreaseIndentPattern&&O.decreaseIndentPattern.test(ne)&&(ie=F(ie),ne=ie+ae.substring(J.length)),ae!==ne&&q.push(S.EditOperation.replaceMove(new _.Selection(M,1,M,J.length+1),(0,r.normalizeIndentation)(ie,W,V)))}else ie=k.getLeadingWhitespace(ae);let $=ie;O.increaseIndentPattern&&O.increaseIndentPattern.test(ne)?($=K($),ie=K(ie)):O.indentNextLinePattern&&O.indentNextLinePattern.test(ne)&&($=K($)),M++;for(let J=M;J<=R;J++){const Q=P.getLineContent(J),re=k.getLeadingWhitespace(Q),de=$+Q.substring(re.length);O.decreaseIndentPattern&&O.decreaseIndentPattern.test(de)&&($=F($),ie=F(ie)),re!==$&&q.push(S.EditOperation.replaceMove(new _.Selection(J,1,J,re.length+1),(0,r.normalizeIndentation)($,W,V))),!(O.unIndentedLinePattern&&O.unIndentedLinePattern.test(Q))&&(O.increaseIndentPattern&&O.increaseIndentPattern.test(de)?(ie=K(ie),$=ie):O.indentNextLinePattern&&O.indentNextLinePattern.test(de)?$=K($):$=ie)}return q}e.getReindentEditOperations=f;class c extends y.EditorAction{constructor(){super({id:c.ID,label:n.localize(0,null),alias:"Convert Indentation to Spaces",precondition:v.EditorContextKeys.writable})}run(N,M){const R=M.getModel();if(!R)return;const x=R.getOptions(),O=M.getSelection();if(!O)return;const B=new T(O,x.tabSize);M.pushUndoStop(),M.executeCommands(this.id,[B]),M.pushUndoStop(),R.updateOptions({insertSpaces:!0})}}e.IndentationToSpacesAction=c,c.ID="editor.action.indentationToSpaces";class d extends y.EditorAction{constructor(){super({id:d.ID,label:n.localize(1,null),alias:"Convert Indentation to Tabs",precondition:v.EditorContextKeys.writable})}run(N,M){const R=M.getModel();if(!R)return;const x=R.getOptions(),O=M.getSelection();if(!O)return;const B=new A(O,x.tabSize);M.pushUndoStop(),M.executeCommands(this.id,[B]),M.pushUndoStop(),R.updateOptions({insertSpaces:!1})}}e.IndentationToTabsAction=d,d.ID="editor.action.indentationToTabs";class s extends y.EditorAction{constructor(N,M,R){super(R),this.insertSpaces=N,this.displaySizeOnly=M}run(N,M){const R=N.get(t.IQuickInputService),x=N.get(a.IModelService),O=M.getModel();if(!O)return;const B=x.getCreationOptions(O.getLanguageId(),O.uri,O.isForSimpleWidget),W=O.getOptions(),V=[1,2,3,4,5,6,7,8].map(F=>({id:F.toString(),label:F.toString(),description:F===B.tabSize&&F===W.tabSize?n.localize(2,null):F===B.tabSize?n.localize(3,null):F===W.tabSize?n.localize(4,null):void 0})),K=Math.min(O.getOptions().tabSize-1,7);setTimeout(()=>{R.pick(V,{placeHolder:n.localize(5,null),activeItem:V[K]}).then(F=>{if(F&&O&&!O.isDisposed()){const q=parseInt(F.label,10);this.displaySizeOnly?O.updateOptions({tabSize:q}):O.updateOptions({tabSize:q,indentSize:q,insertSpaces:this.insertSpaces})}})},50)}}e.ChangeIndentationSizeAction=s;class l extends s{constructor(){super(!1,!1,{id:l.ID,label:n.localize(6,null),alias:"Indent Using Tabs",precondition:void 0})}}e.IndentUsingTabs=l,l.ID="editor.action.indentUsingTabs";class o extends s{constructor(){super(!0,!1,{id:o.ID,label:n.localize(7,null),alias:"Indent Using Spaces",precondition:void 0})}}e.IndentUsingSpaces=o,o.ID="editor.action.indentUsingSpaces";class g extends s{constructor(){super(!0,!0,{id:g.ID,label:n.localize(8,null),alias:"Change Tab Display Size",precondition:void 0})}}e.ChangeTabDisplaySize=g,g.ID="editor.action.changeTabDisplaySize";class h extends y.EditorAction{constructor(){super({id:h.ID,label:n.localize(9,null),alias:"Detect Indentation from Content",precondition:void 0})}run(N,M){const R=N.get(a.IModelService),x=M.getModel();if(!x)return;const O=R.getCreationOptions(x.getLanguageId(),x.uri,x.isForSimpleWidget);x.detectIndentation(O.insertSpaces,O.tabSize)}}e.DetectIndentation=h,h.ID="editor.action.detectIndentation";class m extends y.EditorAction{constructor(){super({id:"editor.action.reindentlines",label:n.localize(10,null),alias:"Reindent Lines",precondition:v.EditorContextKeys.writable})}run(N,M){const R=N.get(b.ILanguageConfigurationService),x=M.getModel();if(!x)return;const O=f(x,R,1,x.getLineCount());O.length>0&&(M.pushUndoStop(),M.executeEdits(this.id,O),M.pushUndoStop())}}e.ReindentLinesAction=m;class C extends y.EditorAction{constructor(){super({id:"editor.action.reindentselectedlines",label:n.localize(11,null),alias:"Reindent Selected Lines",precondition:v.EditorContextKeys.writable})}run(N,M){const R=N.get(b.ILanguageConfigurationService),x=M.getModel();if(!x)return;const O=M.getSelections();if(O===null)return;const B=[];for(const W of O){let V=W.startLineNumber,K=W.endLineNumber;if(V!==K&&W.endColumn===1&&K--,V===1){if(V===K)continue}else V--;const F=f(x,R,V,K);B.push(...F)}B.length>0&&(M.pushUndoStop(),M.executeEdits(this.id,B),M.pushUndoStop())}}e.ReindentSelectedLinesAction=C;class w{constructor(N,M){this._initialSelection=M,this._edits=[],this._selectionId=null;for(const R of N)R.range&&typeof R.text=="string"&&this._edits.push(R)}getEditOperations(N,M){for(const x of this._edits)M.addEditOperation(p.Range.lift(x.range),x.text);let R=!1;Array.isArray(this._edits)&&this._edits.length===1&&this._initialSelection.isEmpty()&&(this._edits[0].range.startColumn===this._initialSelection.endColumn&&this._edits[0].range.startLineNumber===this._initialSelection.endLineNumber?(R=!0,this._selectionId=M.trackSelection(this._initialSelection,!0)):this._edits[0].range.endColumn===this._initialSelection.startColumn&&this._edits[0].range.endLineNumber===this._initialSelection.startLineNumber&&(R=!0,this._selectionId=M.trackSelection(this._initialSelection,!1))),R||(this._selectionId=M.trackSelection(this._initialSelection))}computeCursorState(N,M){return M.getTrackedSelection(this._selectionId)}}e.AutoIndentOnPasteCommand=w;let D=class{constructor(N,M){this.editor=N,this._languageConfigurationService=M,this.callOnDispose=new L.DisposableStore,this.callOnModel=new L.DisposableStore,this.callOnDispose.add(N.onDidChangeConfiguration(()=>this.update())),this.callOnDispose.add(N.onDidChangeModel(()=>this.update())),this.callOnDispose.add(N.onDidChangeModelLanguage(()=>this.update()))}update(){this.callOnModel.clear(),!(this.editor.getOption(12)<4||this.editor.getOption(55))&&this.editor.hasModel()&&this.callOnModel.add(this.editor.onDidPaste(({range:N})=>{this.trigger(N)}))}trigger(N){const M=this.editor.getSelections();if(M===null||M.length>1)return;const R=this.editor.getModel();if(!R||!R.tokenization.isCheapToTokenize(N.getStartPosition().lineNumber))return;const x=this.editor.getOption(12),{tabSize:O,indentSize:B,insertSpaces:W}=R.getOptions(),V=[],K={shiftIndent:ae=>E.ShiftCommand.shiftIndent(ae,ae.length+1,O,B,W),unshiftIndent:ae=>E.ShiftCommand.unshiftIndent(ae,ae.length+1,O,B,W)};let F=N.startLineNumber;for(;F<=N.endLineNumber;){if(this.shouldIgnoreLine(R,F)){F++;continue}break}if(F>N.endLineNumber)return;let q=R.getLineContent(F);if(!/\S/.test(q.substring(0,N.startColumn-1))){const ae=(0,u.getGoodIndentForLine)(x,R,R.getLanguageId(),F,K,this._languageConfigurationService);if(ae!==null){const ne=k.getLeadingWhitespace(q),$=i.getSpaceCnt(ae,O),J=i.getSpaceCnt(ne,O);if($!==J){const Q=i.generateIndent($,O,W);V.push({range:new p.Range(F,1,F,ne.length+1),text:Q}),q=Q+q.substr(ne.length)}else{const Q=(0,u.getIndentMetadata)(R,F,this._languageConfigurationService);if(Q===0||Q===8)return}}}const ie=F;for(;FR.tokenization.getLineTokens($),getLanguageId:()=>R.getLanguageId(),getLanguageIdAtPosition:($,J)=>R.getLanguageIdAtPosition($,J)},getLineContent:$=>$===ie?q:R.getLineContent($)},ne=(0,u.getGoodIndentForLine)(x,ae,R.getLanguageId(),F+1,K,this._languageConfigurationService);if(ne!==null){const $=i.getSpaceCnt(ne,O),J=i.getSpaceCnt(k.getLeadingWhitespace(R.getLineContent(F+1)),O);if($!==J){const Q=$-J;for(let re=F+1;re<=N.endLineNumber;re++){const de=R.getLineContent(re),he=k.getLeadingWhitespace(de),X=i.getSpaceCnt(he,O)+Q,U=i.generateIndent(X,O,W);U!==he&&V.push({range:new p.Range(re,1,re,he.length+1),text:U})}}}}if(V.length>0){this.editor.pushUndoStop();const ae=new w(V,this.editor.getSelection());this.editor.executeCommand("autoIndentOnPaste",ae),this.editor.pushUndoStop()}}shouldIgnoreLine(N,M){N.tokenization.forceTokenization(M);const R=N.getLineFirstNonWhitespaceColumn(M);if(R===0)return!0;const x=N.tokenization.getLineTokens(M);if(x.getCount()>0){const O=x.findTokenIndexAtOffset(R);if(O>=0&&x.getStandardTokenType(O)===1)return!0}return!1}dispose(){this.callOnDispose.dispose(),this.callOnModel.dispose()}};e.AutoIndentOnPaste=D,D.ID="editor.contrib.autoIndentOnPaste",e.AutoIndentOnPaste=D=ke([ge(1,b.ILanguageConfigurationService)],D);function I(P,N,M,R){if(P.getLineCount()===1&&P.getLineMaxColumn(1)===1)return;let x="";for(let B=0;B({selection:U,index:G,ignore:!1}));he.sort((U,G)=>b.Range.compareRangesUsingStarts(U.selection,G.selection));let me=he[0];for(let U=1;Unew v.Position(G.positionLineNumber,G.positionColumn)));const X=de.getSelection();if(X===null)return;const U=new S.TrimTrailingWhitespaceCommand(X,me);de.pushUndoStop(),de.executeCommands(this.id,[U]),de.pushUndoStop()}}e.TrimTrailingWhitespaceAction=T,T.ID="editor.action.trimTrailingWhitespace";class A extends y.EditorAction{constructor(){super({id:"editor.action.deleteLines",label:u.localize(14,null),alias:"Delete Line",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.textInputFocus,primary:3113,weight:100}})}run(re,de){if(!de.hasModel())return;const he=this._getLinesToRemove(de),me=de.getModel();if(me.getLineCount()===1&&me.getLineMaxColumn(1)===1)return;let X=0;const U=[],G=[];for(let z=0,H=he.length;z1&&(j-=1,ee=me.getLineMaxColumn(j)),U.push(_.EditOperation.replace(new a.Selection(j,ee,Z,le),"")),G.push(new a.Selection(j-X,Y.positionColumn,j-X,Y.positionColumn)),X+=Y.endLineNumber-Y.startLineNumber+1}de.pushUndoStop(),de.executeEdits(this.id,U,G),de.pushUndoStop()}_getLinesToRemove(re){const de=re.getSelections().map(X=>{let U=X.endLineNumber;return X.startLineNumberX.startLineNumber===U.startLineNumber?X.endLineNumber-U.endLineNumber:X.startLineNumber-U.startLineNumber);const he=[];let me=de[0];for(let X=1;X=de[X].startLineNumber?me.endLineNumber=de[X].endLineNumber:(he.push(me),me=de[X]);return he.push(me),he}}e.DeleteLinesAction=A;class P extends y.EditorAction{constructor(){super({id:"editor.action.indentLines",label:u.localize(15,null),alias:"Indent Line",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:2142,weight:100}})}run(re,de){const he=de._getViewModel();he&&(de.pushUndoStop(),de.executeCommands(this.id,p.TypeOperations.indent(he.cursorConfig,de.getModel(),de.getSelections())),de.pushUndoStop())}}e.IndentLinesAction=P;class N extends y.EditorAction{constructor(){super({id:"editor.action.outdentLines",label:u.localize(16,null),alias:"Outdent Line",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:2140,weight:100}})}run(re,de){k.CoreEditingCommands.Outdent.runEditorCommand(re,de,null)}}class M extends y.EditorAction{constructor(){super({id:"editor.action.insertLineBefore",label:u.localize(17,null),alias:"Insert Line Above",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:3075,weight:100}})}run(re,de){const he=de._getViewModel();he&&(de.pushUndoStop(),de.executeCommands(this.id,p.TypeOperations.lineInsertBefore(he.cursorConfig,de.getModel(),de.getSelections())))}}e.InsertLineBeforeAction=M;class R extends y.EditorAction{constructor(){super({id:"editor.action.insertLineAfter",label:u.localize(18,null),alias:"Insert Line Below",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:2051,weight:100}})}run(re,de){const he=de._getViewModel();he&&(de.pushUndoStop(),de.executeCommands(this.id,p.TypeOperations.lineInsertAfter(he.cursorConfig,de.getModel(),de.getSelections())))}}e.InsertLineAfterAction=R;class x extends y.EditorAction{run(re,de){if(!de.hasModel())return;const he=de.getSelection(),me=this._getRangesToDelete(de),X=[];for(let z=0,H=me.length-1;z_.EditOperation.replace(z,""));de.pushUndoStop(),de.executeEdits(this.id,G,U),de.pushUndoStop()}}e.AbstractDeleteAllToBoundaryAction=x;class O extends x{constructor(){super({id:"deleteAllLeft",label:u.localize(19,null),alias:"Delete All Left",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.textInputFocus,primary:0,mac:{primary:2049},weight:100}})}_getEndCursorState(re,de){let he=null;const me=[];let X=0;return de.forEach(U=>{let G;if(U.endColumn===1&&X>0){const z=U.startLineNumber-X;G=new a.Selection(z,U.startColumn,z,U.startColumn)}else G=new a.Selection(U.startLineNumber,U.startColumn,U.startLineNumber,U.startColumn);X+=U.endLineNumber-U.startLineNumber,U.intersectRanges(re)?he=G:me.push(G)}),he&&me.unshift(he),me}_getRangesToDelete(re){const de=re.getSelections();if(de===null)return[];let he=de;const me=re.getModel();return me===null?[]:(he.sort(b.Range.compareRangesUsingStarts),he=he.map(X=>{if(X.isEmpty())if(X.startColumn===1){const U=Math.max(1,X.startLineNumber-1),G=X.startLineNumber===1?1:me.getLineLength(U)+1;return new b.Range(U,G,X.startLineNumber,1)}else return new b.Range(X.startLineNumber,1,X.startLineNumber,X.startColumn);else return new b.Range(X.startLineNumber,1,X.endLineNumber,X.endColumn)}),he)}}e.DeleteAllLeftAction=O;class B extends x{constructor(){super({id:"deleteAllRight",label:u.localize(20,null),alias:"Delete All Right",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.textInputFocus,primary:0,mac:{primary:297,secondary:[2068]},weight:100}})}_getEndCursorState(re,de){let he=null;const me=[];for(let X=0,U=de.length,G=0;X{if(X.isEmpty()){const U=de.getLineMaxColumn(X.startLineNumber);return X.startColumn===U?new b.Range(X.startLineNumber,X.startColumn,X.startLineNumber+1,1):new b.Range(X.startLineNumber,X.startColumn,X.startLineNumber,U)}return X});return me.sort(b.Range.compareRangesUsingStarts),me}}e.DeleteAllRightAction=B;class W extends y.EditorAction{constructor(){super({id:"editor.action.joinLines",label:u.localize(21,null),alias:"Join Lines",precondition:i.EditorContextKeys.writable,kbOpts:{kbExpr:i.EditorContextKeys.editorTextFocus,primary:0,mac:{primary:296},weight:100}})}run(re,de){const he=de.getSelections();if(he===null)return;let me=de.getSelection();if(me===null)return;he.sort(b.Range.compareRangesUsingStarts);const X=[],U=he.reduce((Z,ee)=>Z.isEmpty()?Z.endLineNumber===ee.startLineNumber?(me.equalsSelection(Z)&&(me=ee),ee):ee.startLineNumber>Z.endLineNumber+1?(X.push(Z),ee):new a.Selection(Z.startLineNumber,Z.startColumn,ee.endLineNumber,ee.endColumn):ee.startLineNumber>Z.endLineNumber?(X.push(Z),ee):new a.Selection(Z.startLineNumber,Z.startColumn,ee.endLineNumber,ee.endColumn));X.push(U);const G=de.getModel();if(G===null)return;const z=[],H=[];let Y=me,j=0;for(let Z=0,ee=X.length;Z=1){let De=!0;_e===""&&(De=!1),De&&(_e.charAt(_e.length-1)===" "||_e.charAt(_e.length-1)===" ")&&(De=!1,_e=_e.replace(/[\s\uFEFF\xA0]+$/g," "));const Ie=xe.substr(Be-1);_e+=(De?" ":"")+Ie,De?pe=Ie.length+1:pe=Ie.length}else pe=0}const Ee=new b.Range(ue,ce,ve,Ce);if(!Ee.isEmpty()){let Ae;le.isEmpty()?(z.push(_.EditOperation.replace(Ee,_e)),Ae=new a.Selection(Ee.startLineNumber-j,_e.length-pe+1,ue-j,_e.length-pe+1)):le.startLineNumber===le.endLineNumber?(z.push(_.EditOperation.replace(Ee,_e)),Ae=new a.Selection(le.startLineNumber-j,le.startColumn,le.endLineNumber-j,le.endColumn)):(z.push(_.EditOperation.replace(Ee,_e)),Ae=new a.Selection(le.startLineNumber-j,le.startColumn,le.startLineNumber-j,_e.length-Se)),b.Range.intersectRanges(Ee,me)!==null?Y=Ae:H.push(Ae)}j+=Ee.endLineNumber-Ee.startLineNumber}H.unshift(Y),de.pushUndoStop(),de.executeEdits(this.id,z,H),de.pushUndoStop()}}e.JoinLinesAction=W;class V extends y.EditorAction{constructor(){super({id:"editor.action.transpose",label:u.localize(22,null),alias:"Transpose Characters around the Cursor",precondition:i.EditorContextKeys.writable})}run(re,de){const he=de.getSelections();if(he===null)return;const me=de.getModel();if(me===null)return;const X=[];for(let U=0,G=he.length;U=Y){if(H.lineNumber===me.getLineCount())continue;const j=new b.Range(H.lineNumber,Math.max(1,H.column-1),H.lineNumber+1,1),Z=me.getValueInRange(j).split("").reverse().join("");X.push(new E.ReplaceCommand(new a.Selection(H.lineNumber,Math.max(1,H.column-1),H.lineNumber+1,1),Z))}else{const j=new b.Range(H.lineNumber,Math.max(1,H.column-1),H.lineNumber,H.column+1),Z=me.getValueInRange(j).split("").reverse().join("");X.push(new E.ReplaceCommandThatPreservesSelection(j,Z,new a.Selection(H.lineNumber,H.column+1,H.lineNumber,H.column+1)))}}de.pushUndoStop(),de.executeCommands(this.id,X),de.pushUndoStop()}}e.TransposeAction=V;class K extends y.EditorAction{run(re,de){const he=de.getSelections();if(he===null)return;const me=de.getModel();if(me===null)return;const X=de.getOption(129),U=[];for(const G of he)if(G.isEmpty()){const z=G.getStartPosition(),H=de.getConfiguredWordAtPosition(z);if(!H)continue;const Y=new b.Range(z.lineNumber,H.startColumn,z.lineNumber,H.endColumn),j=me.getValueInRange(Y);U.push(_.EditOperation.replace(Y,this._modifyText(j,X)))}else{const z=me.getValueInRange(G);U.push(_.EditOperation.replace(G,this._modifyText(z,X)))}de.pushUndoStop(),de.executeEdits(this.id,U),de.pushUndoStop()}}e.AbstractCaseAction=K;class F extends K{constructor(){super({id:"editor.action.transformToUppercase",label:u.localize(23,null),alias:"Transform to Uppercase",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){return re.toLocaleUpperCase()}}e.UpperCaseAction=F;class q extends K{constructor(){super({id:"editor.action.transformToLowercase",label:u.localize(24,null),alias:"Transform to Lowercase",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){return re.toLocaleLowerCase()}}e.LowerCaseAction=q;class ie{constructor(re,de){this._pattern=re,this._flags=de,this._actual=null,this._evaluated=!1}get(){if(!this._evaluated){this._evaluated=!0;try{this._actual=new RegExp(this._pattern,this._flags)}catch{}}return this._actual}isSupported(){return this.get()!==null}}class ae extends K{constructor(){super({id:"editor.action.transformToTitlecase",label:u.localize(25,null),alias:"Transform to Title Case",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=ae.titleBoundary.get();return he?re.toLocaleLowerCase().replace(he,me=>me.toLocaleUpperCase()):re}}e.TitleCaseAction=ae,ae.titleBoundary=new ie("(^|[^\\p{L}\\p{N}']|((^|\\P{L})'))\\p{L}","gmu");class ne extends K{constructor(){super({id:"editor.action.transformToSnakecase",label:u.localize(26,null),alias:"Transform to Snake Case",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=ne.caseBoundary.get(),me=ne.singleLetters.get();return!he||!me?re:re.replace(he,"$1_$2").replace(me,"$1_$2$3").toLocaleLowerCase()}}e.SnakeCaseAction=ne,ne.caseBoundary=new ie("(\\p{Ll})(\\p{Lu})","gmu"),ne.singleLetters=new ie("(\\p{Lu}|\\p{N})(\\p{Lu})(\\p{Ll})","gmu");class $ extends K{constructor(){super({id:"editor.action.transformToCamelcase",label:u.localize(27,null),alias:"Transform to Camel Case",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=$.wordBoundary.get();if(!he)return re;const me=re.split(he);return me.shift()+me.map(U=>U.substring(0,1).toLocaleUpperCase()+U.substring(1)).join("")}}e.CamelCaseAction=$,$.wordBoundary=new ie("[_\\s-]","gm");class J extends K{static isSupported(){return[this.caseBoundary,this.singleLetters,this.underscoreBoundary].every(de=>de.isSupported())}constructor(){super({id:"editor.action.transformToKebabcase",label:u.localize(28,null),alias:"Transform to Kebab Case",precondition:i.EditorContextKeys.writable})}_modifyText(re,de){const he=J.caseBoundary.get(),me=J.singleLetters.get(),X=J.underscoreBoundary.get();return!he||!me||!X?re:re.replace(X,"$1-$3").replace(he,"$1-$2").replace(me,"$1-$2").toLocaleLowerCase()}}e.KebabCaseAction=J,J.caseBoundary=new ie("(\\p{Ll})(\\p{Lu})","gmu"),J.singleLetters=new ie("(\\p{Lu}|\\p{N})(\\p{Lu}\\p{Ll})","gmu"),J.underscoreBoundary=new ie("(\\S)(_)(\\S)","gm"),(0,y.registerEditorAction)(s),(0,y.registerEditorAction)(l),(0,y.registerEditorAction)(o),(0,y.registerEditorAction)(h),(0,y.registerEditorAction)(m),(0,y.registerEditorAction)(w),(0,y.registerEditorAction)(D),(0,y.registerEditorAction)(I),(0,y.registerEditorAction)(T),(0,y.registerEditorAction)(A),(0,y.registerEditorAction)(P),(0,y.registerEditorAction)(N),(0,y.registerEditorAction)(M),(0,y.registerEditorAction)(R),(0,y.registerEditorAction)(O),(0,y.registerEditorAction)(B),(0,y.registerEditorAction)(W),(0,y.registerEditorAction)(V),(0,y.registerEditorAction)(F),(0,y.registerEditorAction)(q),ne.caseBoundary.isSupported()&&ne.singleLetters.isSupported()&&(0,y.registerEditorAction)(ne),$.wordBoundary.isSupported()&&(0,y.registerEditorAction)($),ae.titleBoundary.isSupported()&&(0,y.registerEditorAction)(ae),J.isSupported()&&(0,y.registerEditorAction)(J)}),define(se[823],oe([1,0,2,16]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class y extends L.Disposable{constructor(S){super(),this._editor=S,this._register(this._editor.onMouseDown(p=>{const _=this._editor.getOption(116);_>=0&&p.target.type===6&&p.target.position.column>=_&&this._editor.updateOptions({stopRenderingLineAfter:-1})}))}}y.ID="editor.contrib.longLinesHelper",(0,k.registerEditorContribution)(y.ID,y,2)}),define(se[166],oe([1,0,186,48,6,58,2,16,5,104,702,15,57,7,472]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";var t;Object.defineProperty(e,"__esModule",{value:!0}),e.MessageController=void 0;let r=t=class{static get(d){return d.getContribution(t.ID)}constructor(d,s,l){this._openerService=l,this._messageWidget=new S.MutableDisposable,this._messageListeners=new S.DisposableStore,this._mouseOverMessage=!1,this._editor=d,this._visible=t.MESSAGE_VISIBLE.bindTo(s)}dispose(){var d;(d=this._message)===null||d===void 0||d.dispose(),this._messageListeners.dispose(),this._messageWidget.dispose(),this._visible.reset()}showMessage(d,s){(0,k.alert)((0,E.isMarkdownString)(d)?d.value:d),this._visible.set(!0),this._messageWidget.clear(),this._messageListeners.clear(),this._message=(0,E.isMarkdownString)(d)?(0,L.renderMarkdown)(d,{actionHandler:{callback:o=>{this.closeMessage(),(0,v.openLinkFromMarkdown)(this._openerService,o,(0,E.isMarkdownString)(d)?d.isTrusted:void 0)},disposables:this._messageListeners}}):void 0,this._messageWidget.value=new f(this._editor,s,typeof d=="string"?d:this._message.element),this._messageListeners.add(y.Event.debounce(this._editor.onDidBlurEditorText,(o,g)=>g,0)(()=>{this._mouseOverMessage||this._messageWidget.value&&n.isAncestor(n.getActiveElement(),this._messageWidget.value.getDomNode())||this.closeMessage()})),this._messageListeners.add(this._editor.onDidChangeCursorPosition(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidDispose(()=>this.closeMessage())),this._messageListeners.add(this._editor.onDidChangeModel(()=>this.closeMessage())),this._messageListeners.add(n.addDisposableListener(this._messageWidget.value.getDomNode(),n.EventType.MOUSE_ENTER,()=>this._mouseOverMessage=!0,!0)),this._messageListeners.add(n.addDisposableListener(this._messageWidget.value.getDomNode(),n.EventType.MOUSE_LEAVE,()=>this._mouseOverMessage=!1,!0));let l;this._messageListeners.add(this._editor.onMouseMove(o=>{o.target.position&&(l?l.containsPosition(o.target.position)||this.closeMessage():l=new _.Range(s.lineNumber-3,1,o.target.position.lineNumber+3,1))}))}closeMessage(){this._visible.reset(),this._messageListeners.clear(),this._messageWidget.value&&this._messageListeners.add(f.fadeOut(this._messageWidget.value))}};e.MessageController=r,r.ID="editor.contrib.messageController",r.MESSAGE_VISIBLE=new a.RawContextKey("messageVisible",!1,b.localize(0,null)),e.MessageController=r=t=ke([ge(1,a.IContextKeyService),ge(2,i.IOpenerService)],r);const u=p.EditorCommand.bindToContribution(r.get);(0,p.registerEditorCommand)(new u({id:"leaveEditorMessage",precondition:r.MESSAGE_VISIBLE,handler:c=>c.closeMessage(),kbOpts:{weight:100+30,primary:9}}));class f{static fadeOut(d){const s=()=>{d.dispose(),clearTimeout(l),d.getDomNode().removeEventListener("animationend",s)},l=setTimeout(s,110);return d.getDomNode().addEventListener("animationend",s),d.getDomNode().classList.add("fadeOut"),{dispose:s}}constructor(d,{lineNumber:s,column:l},o){this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._editor=d,this._editor.revealLinesInCenterIfOutsideViewport(s,s,0),this._position={lineNumber:s,column:l},this._domNode=document.createElement("div"),this._domNode.classList.add("monaco-editor-overlaymessage"),this._domNode.style.marginLeft="-6px";const g=document.createElement("div");g.classList.add("anchor","top"),this._domNode.appendChild(g);const h=document.createElement("div");typeof o=="string"?(h.classList.add("message"),h.textContent=o):(o.classList.add("message"),h.appendChild(o)),this._domNode.appendChild(h);const m=document.createElement("div");m.classList.add("anchor","below"),this._domNode.appendChild(m),this._editor.addContentWidget(this),this._domNode.classList.add("fadeIn")}dispose(){this._editor.removeContentWidget(this)}getId(){return"messageoverlay"}getDomNode(){return this._domNode}getPosition(){return{position:this._position,preference:[1,2],positionAffinity:1}}afterRender(d){this._domNode.classList.toggle("below",d===2)}}(0,p.registerEditorContribution)(r.ID,r,4)}),define(se[824],oe([1,0,58,2,16,166,709]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReadOnlyMessageController=void 0;class p extends k.Disposable{constructor(v){super(),this.editor=v,this._register(this.editor.onDidAttemptReadOnlyEdit(()=>this._onDidAttemptReadOnlyEdit()))}_onDidAttemptReadOnlyEdit(){const v=E.MessageController.get(this.editor);if(v&&this.editor.hasModel()){let b=this.editor.getOptions().get(91);b||(this.editor.isSimpleWidget?b=new L.MarkdownString(S.localize(0,null)):b=new L.MarkdownString(S.localize(1,null))),v.showMessage(b,this.editor.getPosition())}}}e.ReadOnlyMessageController=p,p.ID="editor.contrib.readOnlyMessageController",(0,y.registerEditorContribution)(p.ID,p,2)}),define(se[825],oe([1,0,13,19,12,16,10,5,24,21,309,562,712,30,25,18,68,20,22]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";var d;Object.defineProperty(e,"__esModule",{value:!0}),e.provideSelectionRanges=e.SmartSelectController=void 0;class s{constructor(w,D){this.index=w,this.ranges=D}mov(w){const D=this.index+(w?1:-1);if(D<0||D>=this.ranges.length)return this;const I=new s(D,this.ranges);return I.ranges[D].equalsRange(this.ranges[this.index])?I.mov(w):I}}let l=d=class{static get(w){return w.getContribution(d.ID)}constructor(w,D){this._editor=w,this._languageFeaturesService=D,this._ignoreSelection=!1}dispose(){var w;(w=this._selectionListener)===null||w===void 0||w.dispose()}async run(w){if(!this._editor.hasModel())return;const D=this._editor.getSelections(),I=this._editor.getModel();if(this._state||await m(this._languageFeaturesService.selectionRangeProvider,I,D.map(A=>A.getPosition()),this._editor.getOption(112),k.CancellationToken.None).then(A=>{var P;if(!(!L.isNonEmptyArray(A)||A.length!==D.length)&&!(!this._editor.hasModel()||!L.equals(this._editor.getSelections(),D,(N,M)=>N.equalsSelection(M)))){for(let N=0;NM.containsPosition(D[N].getStartPosition())&&M.containsPosition(D[N].getEndPosition())),A[N].unshift(D[N]);this._state=A.map(N=>new s(0,N)),(P=this._selectionListener)===null||P===void 0||P.dispose(),this._selectionListener=this._editor.onDidChangeCursorPosition(()=>{var N;this._ignoreSelection||((N=this._selectionListener)===null||N===void 0||N.dispose(),this._state=void 0)})}}),!this._state)return;this._state=this._state.map(A=>A.mov(w));const T=this._state.map(A=>_.Selection.fromPositions(A.ranges[A.index].getStartPosition(),A.ranges[A.index].getEndPosition()));this._ignoreSelection=!0;try{this._editor.setSelections(T)}finally{this._ignoreSelection=!1}}};e.SmartSelectController=l,l.ID="editor.contrib.smartSelectController",e.SmartSelectController=l=d=ke([ge(1,r.ILanguageFeaturesService)],l);class o extends E.EditorAction{constructor(w,D){super(D),this._forward=w}async run(w,D){const I=l.get(D);I&&await I.run(this._forward)}}class g extends o{constructor(){super(!0,{id:"editor.action.smartSelect.expand",label:i.localize(0,null),alias:"Expand Selection",precondition:void 0,kbOpts:{kbExpr:v.EditorContextKeys.editorTextFocus,primary:1553,mac:{primary:3345,secondary:[1297]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"1_basic",title:i.localize(1,null),order:2}})}}t.CommandsRegistry.registerCommandAlias("editor.action.smartSelect.grow","editor.action.smartSelect.expand");class h extends o{constructor(){super(!1,{id:"editor.action.smartSelect.shrink",label:i.localize(2,null),alias:"Shrink Selection",precondition:void 0,kbOpts:{kbExpr:v.EditorContextKeys.editorTextFocus,primary:1551,mac:{primary:3343,secondary:[1295]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"1_basic",title:i.localize(3,null),order:3}})}}(0,E.registerEditorContribution)(l.ID,l,4),(0,E.registerEditorAction)(g),(0,E.registerEditorAction)(h);async function m(C,w,D,I,T){const A=C.all(w).concat(new a.WordSelectionRangeProvider(I.selectSubwords));A.length===1&&A.unshift(new b.BracketSelectionRangeProvider);const P=[],N=[];for(const M of A)P.push(Promise.resolve(M.provideSelectionRanges(w,D,T)).then(R=>{if(L.isNonEmptyArray(R)&&R.length===D.length)for(let x=0;x{if(M.length===0)return[];M.sort((B,W)=>S.Position.isBefore(B.getStartPosition(),W.getStartPosition())?1:S.Position.isBefore(W.getStartPosition(),B.getStartPosition())||S.Position.isBefore(B.getEndPosition(),W.getEndPosition())?-1:S.Position.isBefore(W.getEndPosition(),B.getEndPosition())?1:0);const R=[];let x;for(const B of M)(!x||p.Range.containsRange(B,x)&&!p.Range.equalsRange(B,x))&&(R.push(B),x=B);if(!I.selectLeadingAndTrailingWhitespace)return R;const O=[R[0]];for(let B=1;B{u.hasChanged(125)&&(this._config=this._editor.getOption(125),this._checkForUnusualLineTerminators())})),this._register(this._editor.onDidChangeModel(()=>{this._checkForUnusualLineTerminators()})),this._register(this._editor.onDidChangeModelContent(u=>{u.isUndoing||this._checkForUnusualLineTerminators()})),this._checkForUnusualLineTerminators()}async _checkForUnusualLineTerminators(){if(this._config==="off"||!this._editor.hasModel())return;const n=this._editor.getModel();if(!n.mightContainUnusualLineTerminators()||b(this._codeEditorService,n)===!0||this._editor.getOption(90))return;if(this._config==="auto"){n.removeUnusualLineTerminators(this._editor.getSelections());return}if(this._isPresentingDialog)return;let r;try{this._isPresentingDialog=!0,r=await this._dialogService.confirm({title:S.localize(0,null),message:S.localize(1,null),detail:S.localize(2,null,(0,k.basename)(n.uri)),primaryButton:S.localize(3,null),cancelButton:S.localize(4,null)})}finally{this._isPresentingDialog=!1}if(!r.confirmed){v(this._codeEditorService,n,!0);return}n.removeUnusualLineTerminators(this._editor.getSelections())}};e.UnusualLineTerminatorsDetector=a,a.ID="editor.contrib.unusualLineTerminatorsDetector",e.UnusualLineTerminatorsDetector=a=ke([ge(1,p.IDialogService),ge(2,E.ICodeEditorService)],a),(0,y.registerEditorContribution)(a.ID,a,1)}),define(se[364],oe([1,0,16,130,36,75,181,150,10,5,24,21,32,729,69,15,242]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DeleteInsideWord=e.DeleteWordRight=e.DeleteWordEndRight=e.DeleteWordStartRight=e.DeleteWordLeft=e.DeleteWordEndLeft=e.DeleteWordStartLeft=e.DeleteWordRightCommand=e.DeleteWordLeftCommand=e.DeleteWordCommand=e.CursorWordAccessibilityRightSelect=e.CursorWordAccessibilityRight=e.CursorWordRightSelect=e.CursorWordEndRightSelect=e.CursorWordStartRightSelect=e.CursorWordRight=e.CursorWordEndRight=e.CursorWordStartRight=e.CursorWordAccessibilityLeftSelect=e.CursorWordAccessibilityLeft=e.CursorWordLeftSelect=e.CursorWordEndLeftSelect=e.CursorWordStartLeftSelect=e.CursorWordLeft=e.CursorWordEndLeft=e.CursorWordStartLeft=e.WordRightCommand=e.WordLeftCommand=e.MoveWordCommand=void 0;class f extends L.EditorCommand{constructor($){super($),this._inSelectionMode=$.inSelectionMode,this._wordNavigationType=$.wordNavigationType}runEditorCommand($,J,Q){if(!J.hasModel())return;const re=(0,p.getMapForWordSeparators)(J.getOption(129)),de=J.getModel(),me=J.getSelections().map(X=>{const U=new _.Position(X.positionLineNumber,X.positionColumn),G=this._move(re,de,U,this._wordNavigationType);return this._moveTo(X,G,this._inSelectionMode)});if(de.pushStackElement(),J._getViewModel().setCursorStates("moveWordCommand",3,me.map(X=>E.CursorState.fromModelSelection(X))),me.length===1){const X=new _.Position(me[0].positionLineNumber,me[0].positionColumn);J.revealPosition(X,0)}}_moveTo($,J,Q){return Q?new b.Selection($.selectionStartLineNumber,$.selectionStartColumn,J.lineNumber,J.column):new b.Selection(J.lineNumber,J.column,J.lineNumber,J.column)}}e.MoveWordCommand=f;class c extends f{_move($,J,Q,re){return S.WordOperations.moveWordLeft($,J,Q,re)}}e.WordLeftCommand=c;class d extends f{_move($,J,Q,re){return S.WordOperations.moveWordRight($,J,Q,re)}}e.WordRightCommand=d;class s extends c{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartLeft",precondition:void 0})}}e.CursorWordStartLeft=s;class l extends c{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndLeft",precondition:void 0})}}e.CursorWordEndLeft=l;class o extends c{constructor(){var $;super({inSelectionMode:!1,wordNavigationType:1,id:"cursorWordLeft",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:2063,mac:{primary:527},weight:100}})}}e.CursorWordLeft=o;class g extends c{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartLeftSelect",precondition:void 0})}}e.CursorWordStartLeftSelect=g;class h extends c{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndLeftSelect",precondition:void 0})}}e.CursorWordEndLeftSelect=h;class m extends c{constructor(){var $;super({inSelectionMode:!0,wordNavigationType:1,id:"cursorWordLeftSelect",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:3087,mac:{primary:1551},weight:100}})}}e.CursorWordLeftSelect=m;class C extends c{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityLeft",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityLeft=C;class w extends c{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityLeftSelect",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityLeftSelect=w;class D extends d{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordStartRight",precondition:void 0})}}e.CursorWordStartRight=D;class I extends d{constructor(){var $;super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordEndRight",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:2065,mac:{primary:529},weight:100}})}}e.CursorWordEndRight=I;class T extends d{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordRight",precondition:void 0})}}e.CursorWordRight=T;class A extends d{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordStartRightSelect",precondition:void 0})}}e.CursorWordStartRightSelect=A;class P extends d{constructor(){var $;super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordEndRightSelect",precondition:void 0,kbOpts:{kbExpr:r.ContextKeyExpr.and(a.EditorContextKeys.textInputFocus,($=r.ContextKeyExpr.and(t.CONTEXT_ACCESSIBILITY_MODE_ENABLED,u.IsWindowsContext))===null||$===void 0?void 0:$.negate()),primary:3089,mac:{primary:1553},weight:100}})}}e.CursorWordEndRightSelect=P;class N extends d{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordRightSelect",precondition:void 0})}}e.CursorWordRightSelect=N;class M extends d{constructor(){super({inSelectionMode:!1,wordNavigationType:3,id:"cursorWordAccessibilityRight",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityRight=M;class R extends d{constructor(){super({inSelectionMode:!0,wordNavigationType:3,id:"cursorWordAccessibilityRightSelect",precondition:void 0})}_move($,J,Q,re){return super._move((0,p.getMapForWordSeparators)(y.EditorOptions.wordSeparators.defaultValue),J,Q,re)}}e.CursorWordAccessibilityRightSelect=R;class x extends L.EditorCommand{constructor($){super($),this._whitespaceHeuristics=$.whitespaceHeuristics,this._wordNavigationType=$.wordNavigationType}runEditorCommand($,J,Q){const re=$.get(i.ILanguageConfigurationService);if(!J.hasModel())return;const de=(0,p.getMapForWordSeparators)(J.getOption(129)),he=J.getModel(),me=J.getSelections(),X=J.getOption(6),U=J.getOption(11),G=re.getLanguageConfiguration(he.getLanguageId()).getAutoClosingPairs(),z=J._getViewModel(),H=me.map(Y=>{const j=this._delete({wordSeparators:de,model:he,selection:Y,whitespaceHeuristics:this._whitespaceHeuristics,autoClosingDelete:J.getOption(9),autoClosingBrackets:X,autoClosingQuotes:U,autoClosingPairs:G,autoClosedCharacters:z.getCursorAutoClosedCharacters()},this._wordNavigationType);return new k.ReplaceCommand(j,"")});J.pushUndoStop(),J.executeCommands(this.id,H),J.pushUndoStop()}}e.DeleteWordCommand=x;class O extends x{_delete($,J){const Q=S.WordOperations.deleteWordLeft($,J);return Q||new v.Range(1,1,1,1)}}e.DeleteWordLeftCommand=O;class B extends x{_delete($,J){const Q=S.WordOperations.deleteWordRight($,J);if(Q)return Q;const re=$.model.getLineCount(),de=$.model.getLineMaxColumn(re);return new v.Range(re,de,re,de)}}e.DeleteWordRightCommand=B;class W extends O{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartLeft",precondition:a.EditorContextKeys.writable})}}e.DeleteWordStartLeft=W;class V extends O{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndLeft",precondition:a.EditorContextKeys.writable})}}e.DeleteWordEndLeft=V;class K extends O{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:"deleteWordLeft",precondition:a.EditorContextKeys.writable,kbOpts:{kbExpr:a.EditorContextKeys.textInputFocus,primary:2049,mac:{primary:513},weight:100}})}}e.DeleteWordLeft=K;class F extends B{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:0,id:"deleteWordStartRight",precondition:a.EditorContextKeys.writable})}}e.DeleteWordStartRight=F;class q extends B{constructor(){super({whitespaceHeuristics:!1,wordNavigationType:2,id:"deleteWordEndRight",precondition:a.EditorContextKeys.writable})}}e.DeleteWordEndRight=q;class ie extends B{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:"deleteWordRight",precondition:a.EditorContextKeys.writable,kbOpts:{kbExpr:a.EditorContextKeys.textInputFocus,primary:2068,mac:{primary:532},weight:100}})}}e.DeleteWordRight=ie;class ae extends L.EditorAction{constructor(){super({id:"deleteInsideWord",precondition:a.EditorContextKeys.writable,label:n.localize(0,null),alias:"Delete Word"})}run($,J,Q){if(!J.hasModel())return;const re=(0,p.getMapForWordSeparators)(J.getOption(129)),de=J.getModel(),me=J.getSelections().map(X=>{const U=S.WordOperations.deleteInsideWord(re,de,X);return new k.ReplaceCommand(U,"")});J.pushUndoStop(),J.executeCommands(this.id,me),J.pushUndoStop()}}e.DeleteInsideWord=ae,(0,L.registerEditorCommand)(new s),(0,L.registerEditorCommand)(new l),(0,L.registerEditorCommand)(new o),(0,L.registerEditorCommand)(new g),(0,L.registerEditorCommand)(new h),(0,L.registerEditorCommand)(new m),(0,L.registerEditorCommand)(new D),(0,L.registerEditorCommand)(new I),(0,L.registerEditorCommand)(new T),(0,L.registerEditorCommand)(new A),(0,L.registerEditorCommand)(new P),(0,L.registerEditorCommand)(new N),(0,L.registerEditorCommand)(new C),(0,L.registerEditorCommand)(new w),(0,L.registerEditorCommand)(new M),(0,L.registerEditorCommand)(new R),(0,L.registerEditorCommand)(new W),(0,L.registerEditorCommand)(new V),(0,L.registerEditorCommand)(new K),(0,L.registerEditorCommand)(new F),(0,L.registerEditorCommand)(new q),(0,L.registerEditorCommand)(new ie),(0,L.registerEditorAction)(ae)}),define(se[828],oe([1,0,16,181,5,21,364,25]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CursorWordPartRightSelect=e.CursorWordPartRight=e.WordPartRightCommand=e.CursorWordPartLeftSelect=e.CursorWordPartLeft=e.WordPartLeftCommand=e.DeleteWordPartRight=e.DeleteWordPartLeft=void 0;class _ extends S.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:0,id:"deleteWordPartLeft",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:769},weight:100}})}_delete(f,c){const d=k.WordPartOperations.deleteWordPartLeft(f);return d||new y.Range(1,1,1,1)}}e.DeleteWordPartLeft=_;class v extends S.DeleteWordCommand{constructor(){super({whitespaceHeuristics:!0,wordNavigationType:2,id:"deleteWordPartRight",precondition:E.EditorContextKeys.writable,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:788},weight:100}})}_delete(f,c){const d=k.WordPartOperations.deleteWordPartRight(f);if(d)return d;const s=f.model.getLineCount(),l=f.model.getLineMaxColumn(s);return new y.Range(s,l,s,l)}}e.DeleteWordPartRight=v;class b extends S.MoveWordCommand{_move(f,c,d,s){return k.WordPartOperations.moveWordPartLeft(f,c,d)}}e.WordPartLeftCommand=b;class a extends b{constructor(){super({inSelectionMode:!1,wordNavigationType:0,id:"cursorWordPartLeft",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:783},weight:100}})}}e.CursorWordPartLeft=a,p.CommandsRegistry.registerCommandAlias("cursorWordPartStartLeft","cursorWordPartLeft");class i extends b{constructor(){super({inSelectionMode:!0,wordNavigationType:0,id:"cursorWordPartLeftSelect",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:1807},weight:100}})}}e.CursorWordPartLeftSelect=i,p.CommandsRegistry.registerCommandAlias("cursorWordPartStartLeftSelect","cursorWordPartLeftSelect");class n extends S.MoveWordCommand{_move(f,c,d,s){return k.WordPartOperations.moveWordPartRight(f,c,d)}}e.WordPartRightCommand=n;class t extends n{constructor(){super({inSelectionMode:!1,wordNavigationType:2,id:"cursorWordPartRight",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:785},weight:100}})}}e.CursorWordPartRight=t;class r extends n{constructor(){super({inSelectionMode:!0,wordNavigationType:2,id:"cursorWordPartRightSelect",precondition:void 0,kbOpts:{kbExpr:E.EditorContextKeys.textInputFocus,primary:0,mac:{primary:1809},weight:100}})}}e.CursorWordPartRightSelect=r,(0,L.registerEditorCommand)(new _),(0,L.registerEditorCommand)(new v),(0,L.registerEditorCommand)(new a),(0,L.registerEditorCommand)(new i),(0,L.registerEditorCommand)(new t),(0,L.registerEditorCommand)(new r)}),define(se[829],oe([1,0,7,2,16,17,484]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IPadShowKeyboard=void 0;class S extends k.Disposable{constructor(v){super(),this.editor=v,this.widget=null,E.isIOS&&(this._register(v.onDidChangeConfiguration(()=>this.update())),this.update())}update(){const v=!this.editor.getOption(90);!this.widget&&v?this.widget=new p(this.editor):this.widget&&!v&&(this.widget.dispose(),this.widget=null)}dispose(){super.dispose(),this.widget&&(this.widget.dispose(),this.widget=null)}}e.IPadShowKeyboard=S,S.ID="editor.contrib.iPadShowKeyboard";class p extends k.Disposable{constructor(v){super(),this.editor=v,this._domNode=document.createElement("textarea"),this._domNode.className="iPadShowKeyboard",this._register(L.addDisposableListener(this._domNode,"touchstart",b=>{this.editor.focus()})),this._register(L.addDisposableListener(this._domNode,"focus",b=>{this.editor.focus()})),this.editor.addOverlayWidget(this)}dispose(){this.editor.removeOverlayWidget(this),super.dispose()}getId(){return p.ID}getDomNode(){return this._domNode}getPosition(){return{preference:1}}}p.ID="editor.contrib.ShowKeyboardWidget",(0,y.registerEditorContribution)(S.ID,S,3)}),define(se[830],oe([1,0,7,39,2,16,31,132,160,43,137,96,485]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";var i;Object.defineProperty(e,"__esModule",{value:!0});let n=i=class extends y.Disposable{static get(d){return d.getContribution(i.ID)}constructor(d,s,l){super(),this._editor=d,this._languageService=l,this._widget=null,this._register(this._editor.onDidChangeModel(o=>this.stop())),this._register(this._editor.onDidChangeModelLanguage(o=>this.stop())),this._register(S.TokenizationRegistry.onDidChange(o=>this.stop())),this._register(this._editor.onKeyUp(o=>o.keyCode===9&&this.stop()))}dispose(){this.stop(),super.dispose()}launch(){this._widget||this._editor.hasModel()&&(this._widget=new f(this._editor,this._languageService))}stop(){this._widget&&(this._widget.dispose(),this._widget=null)}};n.ID="editor.contrib.inspectTokens",n=i=ke([ge(1,b.IStandaloneThemeService),ge(2,v.ILanguageService)],n);class t extends E.EditorAction{constructor(){super({id:"editor.action.inspectTokens",label:a.InspectTokensNLS.inspectTokensAction,alias:"Developer: Inspect Tokens",precondition:void 0})}run(d,s){const l=n.get(s);l?.launch()}}function r(c){let d="";for(let s=0,l=c.length;s_.NullState,tokenize:(o,g,h)=>(0,_.nullTokenize)(d,h),tokenizeEncoded:(o,g,h)=>(0,_.nullTokenizeEncoded)(l,h)}}class f extends y.Disposable{constructor(d,s){super(),this.allowEditorOverflow=!0,this._editor=d,this._languageService=s,this._model=this._editor.getModel(),this._domNode=document.createElement("div"),this._domNode.className="tokens-inspect-widget",this._tokenizationSupport=u(this._languageService.languageIdCodec,this._model.getLanguageId()),this._compute(this._editor.getPosition()),this._register(this._editor.onDidChangeCursorPosition(l=>this._compute(this._editor.getPosition()))),this._editor.addContentWidget(this)}dispose(){this._editor.removeContentWidget(this),super.dispose()}getId(){return f._ID}_compute(d){const s=this._getTokensAtLine(d.lineNumber);let l=0;for(let C=s.tokens1.length-1;C>=0;C--){const w=s.tokens1[C];if(d.column-1>=w.offset){l=C;break}}let o=0;for(let C=s.tokens2.length>>>1;C>=0;C--)if(d.column-1>=s.tokens2[C<<1]){o=C;break}const g=this._model.getLineContent(d.lineNumber);let h="";if(l{const W=new _.TfIdfCalculator;W.updateDocuments(A.map(K=>({key:K.commandId,textChunks:[this.getTfIdfChunk(K)]})));const V=W.calculateScores(g,m);return(0,_.normalizeTfIdfScores)(V).filter(K=>K.score>c.TFIDF_THRESHOLD).slice(0,c.TFIDF_MAX_RESULTS)}),N=[];for(const W of A){const V=(w=c.WORD_FILTER(g,W.label))!==null&&w!==void 0?w:void 0,K=W.commandAlias&&(D=c.WORD_FILTER(g,W.commandAlias))!==null&&D!==void 0?D:void 0;if(V||K)W.highlights={label:V,detail:this.options.showAlias?K:void 0},N.push(W);else if(g===W.commandId)N.push(W);else if(g.length>=3){const F=P();if(m.isCancellationRequested)return[];const q=F.find(ie=>ie.key===W.commandId);q&&(W.tfIdfScore=q.score,N.push(W))}}const M=new Map;for(const W of N){const V=M.get(W.label);V?(W.description=W.commandId,V.description=V.commandId):M.set(W.label,W)}N.sort((W,V)=>{if(W.tfIdfScore&&V.tfIdfScore)return W.tfIdfScore===V.tfIdfScore?W.label.localeCompare(V.label):V.tfIdfScore-W.tfIdfScore;if(W.tfIdfScore)return 1;if(V.tfIdfScore)return-1;const K=this.commandsHistory.peek(W.commandId),F=this.commandsHistory.peek(V.commandId);if(K&&F)return K>F?-1:1;if(K)return-1;if(F)return 1;if(this.options.suggestedCommandIds){const q=this.options.suggestedCommandIds.has(W.commandId),ie=this.options.suggestedCommandIds.has(V.commandId);if(q&&ie)return 0;if(q)return-1;if(ie)return 1}return W.label.localeCompare(V.label)});const R=[];let x=!1,O=!0,B=!!this.options.suggestedCommandIds;for(let W=0;W{var W;const V=await this.getAdditionalCommandPicks(A,N,g,m);if(m.isCancellationRequested)return[];const K=V.map(F=>this.toCommandPick(F,C));return O&&((W=K[0])===null||W===void 0?void 0:W.type)!=="separator"&&K.unshift({type:"separator",label:(0,v.localize)(4,null)}),K})()}:R}toCommandPick(g,h){if(g.type==="separator")return g;const m=this.keybindingService.lookupKeybinding(g.commandId),C=m?(0,v.localize)(5,null,g.label,m.getAriaLabel()):g.label;return{...g,ariaLabel:C,detail:this.options.showAlias&&g.commandAlias!==g.label?g.commandAlias:void 0,keybinding:m,accept:async()=>{var w,D;this.commandsHistory.push(g.commandId),this.telemetryService.publicLog2("workbenchActionExecuted",{id:g.commandId,from:(w=h?.from)!==null&&w!==void 0?w:"quick open"});try{!((D=g.args)===null||D===void 0)&&D.length?await this.commandService.executeCommand(g.commandId,...g.args):await this.commandService.executeCommand(g.commandId)}catch(I){(0,k.isCancellationError)(I)||this.dialogService.error((0,v.localize)(6,null,g.label),(0,L.toErrorMessage)(I))}}}}getTfIdfChunk({label:g,commandAlias:h,commandDescription:m}){let C=g;return h&&h!==g&&(C+=` - ${h}`),m&&m.value!==g&&(C+=` - ${m.value===m.original?m.value:`${m.value} (${m.original})`}`),C}};e.AbstractCommandsQuickAccessProvider=s,s.PREFIX=">",s.TFIDF_THRESHOLD=.5,s.TFIDF_MAX_RESULTS=5,s.WORD_FILTER=(0,y.or)(y.matchesPrefix,y.matchesWords,y.matchesContiguousSubString),e.AbstractCommandsQuickAccessProvider=s=c=ke([ge(1,n.IInstantiationService),ge(2,t.IKeybindingService),ge(3,b.ICommandService),ge(4,f.ITelemetryService),ge(5,i.IDialogService)],s);let l=d=class extends S.Disposable{constructor(g,h){super(),this.storageService=g,this.configurationService=h,this.configuredCommandsHistoryLength=0,this.updateConfiguration(),this.load(),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration(g=>this.updateConfiguration(g))),this._register(this.storageService.onWillSaveState(g=>{g.reason===u.WillSaveStateReason.SHUTDOWN&&this.saveState()}))}updateConfiguration(g){g&&!g.affectsConfiguration("workbench.commandPalette.history")||(this.configuredCommandsHistoryLength=d.getConfiguredCommandHistoryLength(this.configurationService),d.cache&&d.cache.limit!==this.configuredCommandsHistoryLength&&(d.cache.limit=this.configuredCommandsHistoryLength,d.hasChanges=!0))}load(){const g=this.storageService.get(d.PREF_KEY_CACHE,0);let h;if(g)try{h=JSON.parse(g)}catch{}const m=d.cache=new p.LRUCache(this.configuredCommandsHistoryLength,1);if(h){let C;h.usesLRU?C=h.entries:C=h.entries.sort((w,D)=>w.value-D.value),C.forEach(w=>m.set(w.key,w.value))}d.counter=this.storageService.getNumber(d.PREF_KEY_COUNTER,0,d.counter)}push(g){d.cache&&(d.cache.set(g,d.counter++),d.hasChanges=!0)}peek(g){var h;return(h=d.cache)===null||h===void 0?void 0:h.peek(g)}saveState(){if(!d.cache||!d.hasChanges)return;const g={usesLRU:!0,entries:[]};d.cache.forEach((h,m)=>g.entries.push({key:m,value:h})),this.storageService.store(d.PREF_KEY_CACHE,JSON.stringify(g),0,0),this.storageService.store(d.PREF_KEY_COUNTER,d.counter,0,0),d.hasChanges=!1}static getConfiguredCommandHistoryLength(g){var h,m;const w=(m=(h=g.getValue().workbench)===null||h===void 0?void 0:h.commandPalette)===null||m===void 0?void 0:m.history;return typeof w=="number"?w:d.DEFAULT_COMMANDS_HISTORY_LENGTH}};e.CommandsHistory=l,l.DEFAULT_COMMANDS_HISTORY_LENGTH=50,l.PREF_KEY_CACHE="commandPalette.mru.cache",l.PREF_KEY_COUNTER="commandPalette.mru.counter",l.counter=1,l.hasChanges=!1,e.CommandsHistory=l=d=ke([ge(0,u.IStorageService),ge(1,a.IConfigurationService)],l)}),define(se[832],oe([1,0,126,831]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEditorCommandsQuickAccessProvider=void 0;class y extends k.AbstractCommandsQuickAccessProvider{constructor(S,p,_,v,b,a){super(S,p,_,v,b,a)}getCodeEditorCommandPicks(){const S=this.activeTextEditorControl;if(!S)return[];const p=[];for(const _ of S.getSupportedActions())p.push({commandId:_.id,commandAlias:_.alias,label:(0,L.stripIcons)(_.label)||_.id});return p}}e.AbstractEditorCommandsQuickAccessProvider=y}),define(se[833],oe([1,0,37,139,96,33,832,8,34,25,81,162,16,21,70]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GotoLineAction=e.StandaloneCommandsQuickAccessProvider=void 0;let r=class extends S.AbstractEditorCommandsQuickAccessProvider{get activeTextEditorControl(){var c;return(c=this.codeEditorService.getFocusedCodeEditor())!==null&&c!==void 0?c:void 0}constructor(c,d,s,l,o,g){super({showAlias:!1},c,s,l,o,g),this.codeEditorService=d}async getCommandPicks(){return this.getCodeEditorCommandPicks()}hasAdditionalCommandPicks(){return!1}async getAdditionalCommandPicks(){return[]}};e.StandaloneCommandsQuickAccessProvider=r,e.StandaloneCommandsQuickAccessProvider=r=ke([ge(0,p.IInstantiationService),ge(1,E.ICodeEditorService),ge(2,_.IKeybindingService),ge(3,v.ICommandService),ge(4,b.ITelemetryService),ge(5,a.IDialogService)],r);class u extends i.EditorAction{constructor(){super({id:u.ID,label:y.QuickCommandNLS.quickCommandActionLabel,alias:"Command Palette",precondition:void 0,kbOpts:{kbExpr:n.EditorContextKeys.focus,primary:59,weight:100},contextMenuOpts:{group:"z_commands",order:1}})}run(c){c.get(t.IQuickInputService).quickAccess.show(r.PREFIX)}}e.GotoLineAction=u,u.ID="editor.action.quickCommand",(0,i.registerEditorAction)(u),L.Registry.as(k.Extensions.Quickaccess).registerQuickAccessProvider({ctor:r,prefix:r.PREFIX,helpEntries:[{description:y.QuickCommandNLS.quickCommandHelp,commandId:u.ID}]})}),define(se[29],oe([1,0,90,14,39,6,752,245,37]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.workbenchColorsSchemaId=e.resolveColorValue=e.ifDefinedThenElse=e.oneOf=e.transparent=e.lighten=e.darken=e.executeTransform=e.chartsPurple=e.chartsGreen=e.chartsOrange=e.chartsYellow=e.chartsBlue=e.chartsRed=e.chartsLines=e.chartsForeground=e.problemsInfoIconForeground=e.problemsWarningIconForeground=e.problemsErrorIconForeground=e.minimapSliderActiveBackground=e.minimapSliderHoverBackground=e.minimapSliderBackground=e.minimapForegroundOpacity=e.minimapBackground=e.minimapError=e.minimapWarning=e.minimapInfo=e.minimapSelection=e.minimapSelectionOccurrenceHighlight=e.minimapFindMatch=e.overviewRulerSelectionHighlightForeground=e.overviewRulerFindMatchForeground=e.overviewRulerCommonContentForeground=e.overviewRulerIncomingContentForeground=e.overviewRulerCurrentContentForeground=e.mergeBorder=e.mergeCommonContentBackground=e.mergeCommonHeaderBackground=e.mergeIncomingContentBackground=e.mergeIncomingHeaderBackground=e.mergeCurrentContentBackground=e.mergeCurrentHeaderBackground=e.breadcrumbsPickerBackground=e.breadcrumbsActiveSelectionForeground=e.breadcrumbsFocusForeground=e.breadcrumbsBackground=e.breadcrumbsForeground=e.snippetFinalTabstopHighlightBorder=e.snippetFinalTabstopHighlightBackground=e.snippetTabstopHighlightBorder=e.snippetTabstopHighlightBackground=e.toolbarActiveBackground=e.toolbarHoverOutline=e.toolbarHoverBackground=e.menuSeparatorBackground=e.menuSelectionBorder=e.menuSelectionBackground=e.menuSelectionForeground=e.menuBackground=e.menuForeground=e.menuBorder=e.quickInputListFocusBackground=e.quickInputListFocusIconForeground=e.quickInputListFocusForeground=e._deprecatedQuickInputListFocusBackground=e.checkboxSelectBorder=e.checkboxBorder=e.checkboxForeground=e.checkboxSelectBackground=e.checkboxBackground=e.listDeemphasizedForeground=e.tableOddRowsBackgroundColor=e.tableColumnsBorder=e.treeInactiveIndentGuidesStroke=e.treeIndentGuidesStroke=e.listFilterMatchHighlightBorder=e.listFilterMatchHighlight=e.listFilterWidgetShadow=e.listFilterWidgetNoMatchesOutline=e.listFilterWidgetOutline=e.listFilterWidgetBackground=e.listWarningForeground=e.listErrorForeground=e.listInvalidItemForeground=e.listFocusHighlightForeground=e.listHighlightForeground=e.listDropBetweenBackground=e.listDropOverBackground=e.listHoverForeground=e.listHoverBackground=e.listInactiveFocusOutline=e.listInactiveFocusBackground=e.listInactiveSelectionIconForeground=e.listInactiveSelectionForeground=e.listInactiveSelectionBackground=e.listActiveSelectionIconForeground=e.listActiveSelectionForeground=e.listActiveSelectionBackground=e.listFocusAndSelectionOutline=e.listFocusOutline=e.listFocusForeground=e.listFocusBackground=e.diffUnchangedTextBackground=e.diffUnchangedRegionForeground=e.diffUnchangedRegionBackground=e.diffDiagonalFill=e.diffBorder=e.diffRemovedOutline=e.diffInsertedOutline=e.diffOverviewRulerRemoved=e.diffOverviewRulerInserted=e.diffRemovedLineGutter=e.diffInsertedLineGutter=e.diffRemovedLine=e.diffInsertedLine=e.diffRemoved=e.diffInserted=e.defaultRemoveColor=e.defaultInsertColor=e.editorLightBulbAiForeground=e.editorLightBulbAutoFixForeground=e.editorLightBulbForeground=e.editorInlayHintParameterBackground=e.editorInlayHintParameterForeground=e.editorInlayHintTypeBackground=e.editorInlayHintTypeForeground=e.editorInlayHintBackground=e.editorInlayHintForeground=e.editorActiveLinkForeground=e.editorHoverStatusBarBackground=e.editorHoverBorder=e.editorHoverForeground=e.editorHoverBackground=e.editorHoverHighlight=e.searchResultsInfoForeground=e.searchEditorFindMatchBorder=e.searchEditorFindMatch=e.editorFindRangeHighlightBorder=e.editorFindMatchHighlightBorder=e.editorFindMatchBorder=e.editorFindRangeHighlight=e.editorFindMatchHighlight=e.editorFindMatch=e.editorSelectionHighlightBorder=e.editorSelectionHighlight=e.editorInactiveSelection=e.editorSelectionForeground=e.editorSelectionBackground=e.keybindingLabelBottomBorder=e.keybindingLabelBorder=e.keybindingLabelForeground=e.keybindingLabelBackground=e.pickerGroupBorder=e.pickerGroupForeground=e.quickInputTitleBackground=e.quickInputForeground=e.quickInputBackground=e.editorWidgetResizeBorder=e.editorWidgetBorder=e.editorWidgetForeground=e.editorWidgetBackground=e.editorStickyScrollShadow=e.editorStickyScrollBorder=e.editorStickyScrollHoverBackground=e.editorStickyScrollBackground=e.editorForeground=e.editorBackground=e.sashHoverBorder=e.editorHintBorder=e.editorHintForeground=e.editorInfoBorder=e.editorInfoForeground=e.editorInfoBackground=e.editorWarningBorder=e.editorWarningForeground=e.editorWarningBackground=e.editorErrorBorder=e.editorErrorForeground=e.editorErrorBackground=e.progressBarBackground=e.scrollbarSliderActiveBackground=e.scrollbarSliderHoverBackground=e.scrollbarSliderBackground=e.scrollbarShadow=e.badgeForeground=e.badgeBackground=e.buttonSecondaryHoverBackground=e.buttonSecondaryBackground=e.buttonSecondaryForeground=e.buttonBorder=e.buttonHoverBackground=e.buttonBackground=e.buttonSeparator=e.buttonForeground=e.selectBorder=e.selectForeground=e.selectListBackground=e.selectBackground=e.inputValidationErrorBorder=e.inputValidationErrorForeground=e.inputValidationErrorBackground=e.inputValidationWarningBorder=e.inputValidationWarningForeground=e.inputValidationWarningBackground=e.inputValidationInfoBorder=e.inputValidationInfoForeground=e.inputValidationInfoBackground=e.inputPlaceholderForeground=e.inputActiveOptionForeground=e.inputActiveOptionBackground=e.inputActiveOptionHoverBackground=e.inputActiveOptionBorder=e.inputBorder=e.inputForeground=e.inputBackground=e.widgetBorder=e.widgetShadow=e.textCodeBlockBackground=e.textBlockQuoteBorder=e.textBlockQuoteBackground=e.textPreformatBackground=e.textPreformatForeground=e.textLinkActiveForeground=e.textLinkForeground=e.textSeparatorForeground=e.selectionBackground=e.activeContrastBorder=e.contrastBorder=e.focusBorder=e.iconForeground=e.descriptionForeground=e.errorForeground=e.disabledForeground=e.foreground=e.registerColor=e.Extensions=e.asCssVariableWithDefault=e.asCssVariable=e.asCssVariableName=void 0;function v(A){return`--vscode-${A.replace(/\./g,"-")}`}e.asCssVariableName=v;function b(A){return`var(${v(A)})`}e.asCssVariable=b;function a(A,P){return`var(${v(A)}, ${P})`}e.asCssVariableWithDefault=a,e.Extensions={ColorContribution:"base.contributions.colors"};class i{constructor(){this._onDidChangeSchema=new E.Emitter,this.onDidChangeSchema=this._onDidChangeSchema.event,this.colorSchema={type:"object",properties:{}},this.colorReferenceSchema={type:"string",enum:[],enumDescriptions:[]},this.colorsById={}}registerColor(P,N,M,R=!1,x){const O={id:P,description:M,defaults:N,needsTransparency:R,deprecationMessage:x};this.colorsById[P]=O;const B={type:"string",description:M,format:"color-hex",defaultSnippets:[{body:"${1:#ff0000}"}]};return x&&(B.deprecationMessage=x),R&&(B.pattern="^#(?:(?[0-9a-fA-f]{3}[0-9a-eA-E])|(?:[0-9a-fA-F]{6}(?:(?![fF]{2})(?:[0-9a-fA-F]{2}))))?$",B.patternErrorMessage="This color must be transparent or it will obscure content"),this.colorSchema.properties[P]=B,this.colorReferenceSchema.enum.push(P),this.colorReferenceSchema.enumDescriptions.push(M),this._onDidChangeSchema.fire(),P}getColors(){return Object.keys(this.colorsById).map(P=>this.colorsById[P])}resolveDefaultColor(P,N){const M=this.colorsById[P];if(M&&M.defaults){const R=M.defaults[N.type];return D(R,N)}}getColorSchema(){return this.colorSchema}toString(){const P=(N,M)=>{const R=N.indexOf(".")===-1?0:1,x=M.indexOf(".")===-1?0:1;return R!==x?R-x:N.localeCompare(M)};return Object.keys(this.colorsById).sort(P).map(N=>`- \`${N}\`: ${this.colorsById[N].description}`).join(` `)}}const n=new i;_.Registry.add(e.Extensions.ColorContribution,n);function t(A,P,N,M,R){return n.registerColor(A,P,N,M,R)}e.registerColor=t,e.foreground=t("foreground",{dark:"#CCCCCC",light:"#616161",hcDark:"#FFFFFF",hcLight:"#292929"},S.localize(0,null)),e.disabledForeground=t("disabledForeground",{dark:"#CCCCCC80",light:"#61616180",hcDark:"#A5A5A5",hcLight:"#7F7F7F"},S.localize(1,null)),e.errorForeground=t("errorForeground",{dark:"#F48771",light:"#A1260D",hcDark:"#F48771",hcLight:"#B5200D"},S.localize(2,null)),e.descriptionForeground=t("descriptionForeground",{light:"#717171",dark:h(e.foreground,.7),hcDark:h(e.foreground,.7),hcLight:h(e.foreground,.7)},S.localize(3,null)),e.iconForeground=t("icon.foreground",{dark:"#C5C5C5",light:"#424242",hcDark:"#FFFFFF",hcLight:"#292929"},S.localize(4,null)),e.focusBorder=t("focusBorder",{dark:"#007FD4",light:"#0090F1",hcDark:"#F38518",hcLight:"#006BBD"},S.localize(5,null)),e.contrastBorder=t("contrastBorder",{light:null,dark:null,hcDark:"#6FC3DF",hcLight:"#0F4A85"},S.localize(6,null)),e.activeContrastBorder=t("contrastActiveBorder",{light:null,dark:null,hcDark:e.focusBorder,hcLight:e.focusBorder},S.localize(7,null)),e.selectionBackground=t("selection.background",{light:null,dark:null,hcDark:null,hcLight:null},S.localize(8,null)),e.textSeparatorForeground=t("textSeparator.foreground",{light:"#0000002e",dark:"#ffffff2e",hcDark:y.Color.black,hcLight:"#292929"},S.localize(9,null)),e.textLinkForeground=t("textLink.foreground",{light:"#006AB1",dark:"#3794FF",hcDark:"#3794FF",hcLight:"#0F4A85"},S.localize(10,null)),e.textLinkActiveForeground=t("textLink.activeForeground",{light:"#006AB1",dark:"#3794FF",hcDark:"#3794FF",hcLight:"#0F4A85"},S.localize(11,null)),e.textPreformatForeground=t("textPreformat.foreground",{light:"#A31515",dark:"#D7BA7D",hcDark:"#000000",hcLight:"#FFFFFF"},S.localize(12,null)),e.textPreformatBackground=t("textPreformat.background",{light:"#0000001A",dark:"#FFFFFF1A",hcDark:"#FFFFFF",hcLight:"#09345f"},S.localize(13,null)),e.textBlockQuoteBackground=t("textBlockQuote.background",{light:"#f2f2f2",dark:"#222222",hcDark:null,hcLight:"#F2F2F2"},S.localize(14,null)),e.textBlockQuoteBorder=t("textBlockQuote.border",{light:"#007acc80",dark:"#007acc80",hcDark:y.Color.white,hcLight:"#292929"},S.localize(15,null)),e.textCodeBlockBackground=t("textCodeBlock.background",{light:"#dcdcdc66",dark:"#0a0a0a66",hcDark:y.Color.black,hcLight:"#F2F2F2"},S.localize(16,null)),e.widgetShadow=t("widget.shadow",{dark:h(y.Color.black,.36),light:h(y.Color.black,.16),hcDark:null,hcLight:null},S.localize(17,null)),e.widgetBorder=t("widget.border",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(18,null)),e.inputBackground=t("input.background",{dark:"#3C3C3C",light:y.Color.white,hcDark:y.Color.black,hcLight:y.Color.white},S.localize(19,null)),e.inputForeground=t("input.foreground",{dark:e.foreground,light:e.foreground,hcDark:e.foreground,hcLight:e.foreground},S.localize(20,null)),e.inputBorder=t("input.border",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(21,null)),e.inputActiveOptionBorder=t("inputOption.activeBorder",{dark:"#007ACC",light:"#007ACC",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(22,null)),e.inputActiveOptionHoverBackground=t("inputOption.hoverBackground",{dark:"#5a5d5e80",light:"#b8b8b850",hcDark:null,hcLight:null},S.localize(23,null)),e.inputActiveOptionBackground=t("inputOption.activeBackground",{dark:h(e.focusBorder,.4),light:h(e.focusBorder,.2),hcDark:y.Color.transparent,hcLight:y.Color.transparent},S.localize(24,null)),e.inputActiveOptionForeground=t("inputOption.activeForeground",{dark:y.Color.white,light:y.Color.black,hcDark:e.foreground,hcLight:e.foreground},S.localize(25,null)),e.inputPlaceholderForeground=t("input.placeholderForeground",{light:h(e.foreground,.5),dark:h(e.foreground,.5),hcDark:h(e.foreground,.7),hcLight:h(e.foreground,.7)},S.localize(26,null)),e.inputValidationInfoBackground=t("inputValidation.infoBackground",{dark:"#063B49",light:"#D6ECF2",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(27,null)),e.inputValidationInfoForeground=t("inputValidation.infoForeground",{dark:null,light:null,hcDark:null,hcLight:e.foreground},S.localize(28,null)),e.inputValidationInfoBorder=t("inputValidation.infoBorder",{dark:"#007acc",light:"#007acc",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(29,null)),e.inputValidationWarningBackground=t("inputValidation.warningBackground",{dark:"#352A05",light:"#F6F5D2",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(30,null)),e.inputValidationWarningForeground=t("inputValidation.warningForeground",{dark:null,light:null,hcDark:null,hcLight:e.foreground},S.localize(31,null)),e.inputValidationWarningBorder=t("inputValidation.warningBorder",{dark:"#B89500",light:"#B89500",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(32,null)),e.inputValidationErrorBackground=t("inputValidation.errorBackground",{dark:"#5A1D1D",light:"#F2DEDE",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(33,null)),e.inputValidationErrorForeground=t("inputValidation.errorForeground",{dark:null,light:null,hcDark:null,hcLight:e.foreground},S.localize(34,null)),e.inputValidationErrorBorder=t("inputValidation.errorBorder",{dark:"#BE1100",light:"#BE1100",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(35,null)),e.selectBackground=t("dropdown.background",{dark:"#3C3C3C",light:y.Color.white,hcDark:y.Color.black,hcLight:y.Color.white},S.localize(36,null)),e.selectListBackground=t("dropdown.listBackground",{dark:null,light:null,hcDark:y.Color.black,hcLight:y.Color.white},S.localize(37,null)),e.selectForeground=t("dropdown.foreground",{dark:"#F0F0F0",light:e.foreground,hcDark:y.Color.white,hcLight:e.foreground},S.localize(38,null)),e.selectBorder=t("dropdown.border",{dark:e.selectBackground,light:"#CECECE",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(39,null)),e.buttonForeground=t("button.foreground",{dark:y.Color.white,light:y.Color.white,hcDark:y.Color.white,hcLight:y.Color.white},S.localize(40,null)),e.buttonSeparator=t("button.separator",{dark:h(e.buttonForeground,.4),light:h(e.buttonForeground,.4),hcDark:h(e.buttonForeground,.4),hcLight:h(e.buttonForeground,.4)},S.localize(41,null)),e.buttonBackground=t("button.background",{dark:"#0E639C",light:"#007ACC",hcDark:null,hcLight:"#0F4A85"},S.localize(42,null)),e.buttonHoverBackground=t("button.hoverBackground",{dark:g(e.buttonBackground,.2),light:o(e.buttonBackground,.2),hcDark:e.buttonBackground,hcLight:e.buttonBackground},S.localize(43,null)),e.buttonBorder=t("button.border",{dark:e.contrastBorder,light:e.contrastBorder,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(44,null)),e.buttonSecondaryForeground=t("button.secondaryForeground",{dark:y.Color.white,light:y.Color.white,hcDark:y.Color.white,hcLight:e.foreground},S.localize(45,null)),e.buttonSecondaryBackground=t("button.secondaryBackground",{dark:"#3A3D41",light:"#5F6A79",hcDark:null,hcLight:y.Color.white},S.localize(46,null)),e.buttonSecondaryHoverBackground=t("button.secondaryHoverBackground",{dark:g(e.buttonSecondaryBackground,.2),light:o(e.buttonSecondaryBackground,.2),hcDark:null,hcLight:null},S.localize(47,null)),e.badgeBackground=t("badge.background",{dark:"#4D4D4D",light:"#C4C4C4",hcDark:y.Color.black,hcLight:"#0F4A85"},S.localize(48,null)),e.badgeForeground=t("badge.foreground",{dark:y.Color.white,light:"#333",hcDark:y.Color.white,hcLight:y.Color.white},S.localize(49,null)),e.scrollbarShadow=t("scrollbar.shadow",{dark:"#000000",light:"#DDDDDD",hcDark:null,hcLight:null},S.localize(50,null)),e.scrollbarSliderBackground=t("scrollbarSlider.background",{dark:y.Color.fromHex("#797979").transparent(.4),light:y.Color.fromHex("#646464").transparent(.4),hcDark:h(e.contrastBorder,.6),hcLight:h(e.contrastBorder,.4)},S.localize(51,null)),e.scrollbarSliderHoverBackground=t("scrollbarSlider.hoverBackground",{dark:y.Color.fromHex("#646464").transparent(.7),light:y.Color.fromHex("#646464").transparent(.7),hcDark:h(e.contrastBorder,.8),hcLight:h(e.contrastBorder,.8)},S.localize(52,null)),e.scrollbarSliderActiveBackground=t("scrollbarSlider.activeBackground",{dark:y.Color.fromHex("#BFBFBF").transparent(.4),light:y.Color.fromHex("#000000").transparent(.6),hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(53,null)),e.progressBarBackground=t("progressBar.background",{dark:y.Color.fromHex("#0E70C0"),light:y.Color.fromHex("#0E70C0"),hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(54,null)),e.editorErrorBackground=t("editorError.background",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(55,null),!0),e.editorErrorForeground=t("editorError.foreground",{dark:"#F14C4C",light:"#E51400",hcDark:"#F48771",hcLight:"#B5200D"},S.localize(56,null)),e.editorErrorBorder=t("editorError.border",{dark:null,light:null,hcDark:y.Color.fromHex("#E47777").transparent(.8),hcLight:"#B5200D"},S.localize(57,null)),e.editorWarningBackground=t("editorWarning.background",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(58,null),!0),e.editorWarningForeground=t("editorWarning.foreground",{dark:"#CCA700",light:"#BF8803",hcDark:"#FFD370",hcLight:"#895503"},S.localize(59,null)),e.editorWarningBorder=t("editorWarning.border",{dark:null,light:null,hcDark:y.Color.fromHex("#FFCC00").transparent(.8),hcLight:y.Color.fromHex("#FFCC00").transparent(.8)},S.localize(60,null)),e.editorInfoBackground=t("editorInfo.background",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(61,null),!0),e.editorInfoForeground=t("editorInfo.foreground",{dark:"#3794FF",light:"#1a85ff",hcDark:"#3794FF",hcLight:"#1a85ff"},S.localize(62,null)),e.editorInfoBorder=t("editorInfo.border",{dark:null,light:null,hcDark:y.Color.fromHex("#3794FF").transparent(.8),hcLight:"#292929"},S.localize(63,null)),e.editorHintForeground=t("editorHint.foreground",{dark:y.Color.fromHex("#eeeeee").transparent(.7),light:"#6c6c6c",hcDark:null,hcLight:null},S.localize(64,null)),e.editorHintBorder=t("editorHint.border",{dark:null,light:null,hcDark:y.Color.fromHex("#eeeeee").transparent(.8),hcLight:"#292929"},S.localize(65,null)),e.sashHoverBorder=t("sash.hoverBorder",{dark:e.focusBorder,light:e.focusBorder,hcDark:e.focusBorder,hcLight:e.focusBorder},S.localize(66,null)),e.editorBackground=t("editor.background",{light:"#ffffff",dark:"#1E1E1E",hcDark:y.Color.black,hcLight:y.Color.white},S.localize(67,null)),e.editorForeground=t("editor.foreground",{light:"#333333",dark:"#BBBBBB",hcDark:y.Color.white,hcLight:e.foreground},S.localize(68,null)),e.editorStickyScrollBackground=t("editorStickyScroll.background",{light:e.editorBackground,dark:e.editorBackground,hcDark:e.editorBackground,hcLight:e.editorBackground},S.localize(69,null)),e.editorStickyScrollHoverBackground=t("editorStickyScrollHover.background",{dark:"#2A2D2E",light:"#F0F0F0",hcDark:null,hcLight:y.Color.fromHex("#0F4A85").transparent(.1)},S.localize(70,null)),e.editorStickyScrollBorder=t("editorStickyScroll.border",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(71,null)),e.editorStickyScrollShadow=t("editorStickyScroll.shadow",{dark:e.scrollbarShadow,light:e.scrollbarShadow,hcDark:e.scrollbarShadow,hcLight:e.scrollbarShadow},S.localize(72,null)),e.editorWidgetBackground=t("editorWidget.background",{dark:"#252526",light:"#F3F3F3",hcDark:"#0C141F",hcLight:y.Color.white},S.localize(73,null)),e.editorWidgetForeground=t("editorWidget.foreground",{dark:e.foreground,light:e.foreground,hcDark:e.foreground,hcLight:e.foreground},S.localize(74,null)),e.editorWidgetBorder=t("editorWidget.border",{dark:"#454545",light:"#C8C8C8",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(75,null)),e.editorWidgetResizeBorder=t("editorWidget.resizeBorder",{light:null,dark:null,hcDark:null,hcLight:null},S.localize(76,null)),e.quickInputBackground=t("quickInput.background",{dark:e.editorWidgetBackground,light:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(77,null)),e.quickInputForeground=t("quickInput.foreground",{dark:e.editorWidgetForeground,light:e.editorWidgetForeground,hcDark:e.editorWidgetForeground,hcLight:e.editorWidgetForeground},S.localize(78,null)),e.quickInputTitleBackground=t("quickInputTitle.background",{dark:new y.Color(new y.RGBA(255,255,255,.105)),light:new y.Color(new y.RGBA(0,0,0,.06)),hcDark:"#000000",hcLight:y.Color.white},S.localize(79,null)),e.pickerGroupForeground=t("pickerGroup.foreground",{dark:"#3794FF",light:"#0066BF",hcDark:y.Color.white,hcLight:"#0F4A85"},S.localize(80,null)),e.pickerGroupBorder=t("pickerGroup.border",{dark:"#3F3F46",light:"#CCCEDB",hcDark:y.Color.white,hcLight:"#0F4A85"},S.localize(81,null)),e.keybindingLabelBackground=t("keybindingLabel.background",{dark:new y.Color(new y.RGBA(128,128,128,.17)),light:new y.Color(new y.RGBA(221,221,221,.4)),hcDark:y.Color.transparent,hcLight:y.Color.transparent},S.localize(82,null)),e.keybindingLabelForeground=t("keybindingLabel.foreground",{dark:y.Color.fromHex("#CCCCCC"),light:y.Color.fromHex("#555555"),hcDark:y.Color.white,hcLight:e.foreground},S.localize(83,null)),e.keybindingLabelBorder=t("keybindingLabel.border",{dark:new y.Color(new y.RGBA(51,51,51,.6)),light:new y.Color(new y.RGBA(204,204,204,.4)),hcDark:new y.Color(new y.RGBA(111,195,223)),hcLight:e.contrastBorder},S.localize(84,null)),e.keybindingLabelBottomBorder=t("keybindingLabel.bottomBorder",{dark:new y.Color(new y.RGBA(68,68,68,.6)),light:new y.Color(new y.RGBA(187,187,187,.4)),hcDark:new y.Color(new y.RGBA(111,195,223)),hcLight:e.foreground},S.localize(85,null)),e.editorSelectionBackground=t("editor.selectionBackground",{light:"#ADD6FF",dark:"#264F78",hcDark:"#f3f518",hcLight:"#0F4A85"},S.localize(86,null)),e.editorSelectionForeground=t("editor.selectionForeground",{light:null,dark:null,hcDark:"#000000",hcLight:y.Color.white},S.localize(87,null)),e.editorInactiveSelection=t("editor.inactiveSelectionBackground",{light:h(e.editorSelectionBackground,.5),dark:h(e.editorSelectionBackground,.5),hcDark:h(e.editorSelectionBackground,.7),hcLight:h(e.editorSelectionBackground,.5)},S.localize(88,null),!0),e.editorSelectionHighlight=t("editor.selectionHighlightBackground",{light:w(e.editorSelectionBackground,e.editorBackground,.3,.6),dark:w(e.editorSelectionBackground,e.editorBackground,.3,.6),hcDark:null,hcLight:null},S.localize(89,null),!0),e.editorSelectionHighlightBorder=t("editor.selectionHighlightBorder",{light:null,dark:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(90,null)),e.editorFindMatch=t("editor.findMatchBackground",{light:"#A8AC94",dark:"#515C6A",hcDark:null,hcLight:null},S.localize(91,null)),e.editorFindMatchHighlight=t("editor.findMatchHighlightBackground",{light:"#EA5C0055",dark:"#EA5C0055",hcDark:null,hcLight:null},S.localize(92,null),!0),e.editorFindRangeHighlight=t("editor.findRangeHighlightBackground",{dark:"#3a3d4166",light:"#b4b4b44d",hcDark:null,hcLight:null},S.localize(93,null),!0),e.editorFindMatchBorder=t("editor.findMatchBorder",{light:null,dark:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(94,null)),e.editorFindMatchHighlightBorder=t("editor.findMatchHighlightBorder",{light:null,dark:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(95,null)),e.editorFindRangeHighlightBorder=t("editor.findRangeHighlightBorder",{dark:null,light:null,hcDark:h(e.activeContrastBorder,.4),hcLight:h(e.activeContrastBorder,.4)},S.localize(96,null),!0),e.searchEditorFindMatch=t("searchEditor.findMatchBackground",{light:h(e.editorFindMatchHighlight,.66),dark:h(e.editorFindMatchHighlight,.66),hcDark:e.editorFindMatchHighlight,hcLight:e.editorFindMatchHighlight},S.localize(97,null)),e.searchEditorFindMatchBorder=t("searchEditor.findMatchBorder",{light:h(e.editorFindMatchHighlightBorder,.66),dark:h(e.editorFindMatchHighlightBorder,.66),hcDark:e.editorFindMatchHighlightBorder,hcLight:e.editorFindMatchHighlightBorder},S.localize(98,null)),e.searchResultsInfoForeground=t("search.resultsInfoForeground",{light:e.foreground,dark:h(e.foreground,.65),hcDark:e.foreground,hcLight:e.foreground},S.localize(99,null)),e.editorHoverHighlight=t("editor.hoverHighlightBackground",{light:"#ADD6FF26",dark:"#264f7840",hcDark:"#ADD6FF26",hcLight:null},S.localize(100,null),!0),e.editorHoverBackground=t("editorHoverWidget.background",{light:e.editorWidgetBackground,dark:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(101,null)),e.editorHoverForeground=t("editorHoverWidget.foreground",{light:e.editorWidgetForeground,dark:e.editorWidgetForeground,hcDark:e.editorWidgetForeground,hcLight:e.editorWidgetForeground},S.localize(102,null)),e.editorHoverBorder=t("editorHoverWidget.border",{light:e.editorWidgetBorder,dark:e.editorWidgetBorder,hcDark:e.editorWidgetBorder,hcLight:e.editorWidgetBorder},S.localize(103,null)),e.editorHoverStatusBarBackground=t("editorHoverWidget.statusBarBackground",{dark:g(e.editorHoverBackground,.2),light:o(e.editorHoverBackground,.05),hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(104,null)),e.editorActiveLinkForeground=t("editorLink.activeForeground",{dark:"#4E94CE",light:y.Color.blue,hcDark:y.Color.cyan,hcLight:"#292929"},S.localize(105,null)),e.editorInlayHintForeground=t("editorInlayHint.foreground",{dark:"#969696",light:"#969696",hcDark:y.Color.white,hcLight:y.Color.black},S.localize(106,null)),e.editorInlayHintBackground=t("editorInlayHint.background",{dark:h(e.badgeBackground,.1),light:h(e.badgeBackground,.1),hcDark:h(y.Color.white,.1),hcLight:h(e.badgeBackground,.1)},S.localize(107,null)),e.editorInlayHintTypeForeground=t("editorInlayHint.typeForeground",{dark:e.editorInlayHintForeground,light:e.editorInlayHintForeground,hcDark:e.editorInlayHintForeground,hcLight:e.editorInlayHintForeground},S.localize(108,null)),e.editorInlayHintTypeBackground=t("editorInlayHint.typeBackground",{dark:e.editorInlayHintBackground,light:e.editorInlayHintBackground,hcDark:e.editorInlayHintBackground,hcLight:e.editorInlayHintBackground},S.localize(109,null)),e.editorInlayHintParameterForeground=t("editorInlayHint.parameterForeground",{dark:e.editorInlayHintForeground,light:e.editorInlayHintForeground,hcDark:e.editorInlayHintForeground,hcLight:e.editorInlayHintForeground},S.localize(110,null)),e.editorInlayHintParameterBackground=t("editorInlayHint.parameterBackground",{dark:e.editorInlayHintBackground,light:e.editorInlayHintBackground,hcDark:e.editorInlayHintBackground,hcLight:e.editorInlayHintBackground},S.localize(111,null)),e.editorLightBulbForeground=t("editorLightBulb.foreground",{dark:"#FFCC00",light:"#DDB100",hcDark:"#FFCC00",hcLight:"#007ACC"},S.localize(112,null)),e.editorLightBulbAutoFixForeground=t("editorLightBulbAutoFix.foreground",{dark:"#75BEFF",light:"#007ACC",hcDark:"#75BEFF",hcLight:"#007ACC"},S.localize(113,null)),e.editorLightBulbAiForeground=t("editorLightBulbAi.foreground",{dark:e.editorLightBulbForeground,light:e.editorLightBulbForeground,hcDark:e.editorLightBulbForeground,hcLight:e.editorLightBulbForeground},S.localize(114,null)),e.defaultInsertColor=new y.Color(new y.RGBA(155,185,85,.2)),e.defaultRemoveColor=new y.Color(new y.RGBA(255,0,0,.2)),e.diffInserted=t("diffEditor.insertedTextBackground",{dark:"#9ccc2c33",light:"#9ccc2c40",hcDark:null,hcLight:null},S.localize(115,null),!0),e.diffRemoved=t("diffEditor.removedTextBackground",{dark:"#ff000033",light:"#ff000033",hcDark:null,hcLight:null},S.localize(116,null),!0),e.diffInsertedLine=t("diffEditor.insertedLineBackground",{dark:e.defaultInsertColor,light:e.defaultInsertColor,hcDark:null,hcLight:null},S.localize(117,null),!0),e.diffRemovedLine=t("diffEditor.removedLineBackground",{dark:e.defaultRemoveColor,light:e.defaultRemoveColor,hcDark:null,hcLight:null},S.localize(118,null),!0),e.diffInsertedLineGutter=t("diffEditorGutter.insertedLineBackground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(119,null)),e.diffRemovedLineGutter=t("diffEditorGutter.removedLineBackground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(120,null)),e.diffOverviewRulerInserted=t("diffEditorOverview.insertedForeground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(121,null)),e.diffOverviewRulerRemoved=t("diffEditorOverview.removedForeground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(122,null)),e.diffInsertedOutline=t("diffEditor.insertedTextBorder",{dark:null,light:null,hcDark:"#33ff2eff",hcLight:"#374E06"},S.localize(123,null)),e.diffRemovedOutline=t("diffEditor.removedTextBorder",{dark:null,light:null,hcDark:"#FF008F",hcLight:"#AD0707"},S.localize(124,null)),e.diffBorder=t("diffEditor.border",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(125,null)),e.diffDiagonalFill=t("diffEditor.diagonalFill",{dark:"#cccccc33",light:"#22222233",hcDark:null,hcLight:null},S.localize(126,null)),e.diffUnchangedRegionBackground=t("diffEditor.unchangedRegionBackground",{dark:"sideBar.background",light:"sideBar.background",hcDark:"sideBar.background",hcLight:"sideBar.background"},S.localize(127,null)),e.diffUnchangedRegionForeground=t("diffEditor.unchangedRegionForeground",{dark:"foreground",light:"foreground",hcDark:"foreground",hcLight:"foreground"},S.localize(128,null)),e.diffUnchangedTextBackground=t("diffEditor.unchangedCodeBackground",{dark:"#74747429",light:"#b8b8b829",hcDark:null,hcLight:null},S.localize(129,null)),e.listFocusBackground=t("list.focusBackground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(130,null)),e.listFocusForeground=t("list.focusForeground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(131,null)),e.listFocusOutline=t("list.focusOutline",{dark:e.focusBorder,light:e.focusBorder,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(132,null)),e.listFocusAndSelectionOutline=t("list.focusAndSelectionOutline",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(133,null)),e.listActiveSelectionBackground=t("list.activeSelectionBackground",{dark:"#04395E",light:"#0060C0",hcDark:null,hcLight:y.Color.fromHex("#0F4A85").transparent(.1)},S.localize(134,null)),e.listActiveSelectionForeground=t("list.activeSelectionForeground",{dark:y.Color.white,light:y.Color.white,hcDark:null,hcLight:null},S.localize(135,null)),e.listActiveSelectionIconForeground=t("list.activeSelectionIconForeground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(136,null)),e.listInactiveSelectionBackground=t("list.inactiveSelectionBackground",{dark:"#37373D",light:"#E4E6F1",hcDark:null,hcLight:y.Color.fromHex("#0F4A85").transparent(.1)},S.localize(137,null)),e.listInactiveSelectionForeground=t("list.inactiveSelectionForeground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(138,null)),e.listInactiveSelectionIconForeground=t("list.inactiveSelectionIconForeground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(139,null)),e.listInactiveFocusBackground=t("list.inactiveFocusBackground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(140,null)),e.listInactiveFocusOutline=t("list.inactiveFocusOutline",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(141,null)),e.listHoverBackground=t("list.hoverBackground",{dark:"#2A2D2E",light:"#F0F0F0",hcDark:y.Color.white.transparent(.1),hcLight:y.Color.fromHex("#0F4A85").transparent(.1)},S.localize(142,null)),e.listHoverForeground=t("list.hoverForeground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(143,null)),e.listDropOverBackground=t("list.dropBackground",{dark:"#062F4A",light:"#D6EBFF",hcDark:null,hcLight:null},S.localize(144,null)),e.listDropBetweenBackground=t("list.dropBetweenBackground",{dark:e.iconForeground,light:e.iconForeground,hcDark:null,hcLight:null},S.localize(145,null)),e.listHighlightForeground=t("list.highlightForeground",{dark:"#2AAAFF",light:"#0066BF",hcDark:e.focusBorder,hcLight:e.focusBorder},S.localize(146,null)),e.listFocusHighlightForeground=t("list.focusHighlightForeground",{dark:e.listHighlightForeground,light:C(e.listActiveSelectionBackground,e.listHighlightForeground,"#BBE7FF"),hcDark:e.listHighlightForeground,hcLight:e.listHighlightForeground},S.localize(147,null)),e.listInvalidItemForeground=t("list.invalidItemForeground",{dark:"#B89500",light:"#B89500",hcDark:"#B89500",hcLight:"#B5200D"},S.localize(148,null)),e.listErrorForeground=t("list.errorForeground",{dark:"#F88070",light:"#B01011",hcDark:null,hcLight:null},S.localize(149,null)),e.listWarningForeground=t("list.warningForeground",{dark:"#CCA700",light:"#855F00",hcDark:null,hcLight:null},S.localize(150,null)),e.listFilterWidgetBackground=t("listFilterWidget.background",{light:o(e.editorWidgetBackground,0),dark:g(e.editorWidgetBackground,0),hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(151,null)),e.listFilterWidgetOutline=t("listFilterWidget.outline",{dark:y.Color.transparent,light:y.Color.transparent,hcDark:"#f38518",hcLight:"#007ACC"},S.localize(152,null)),e.listFilterWidgetNoMatchesOutline=t("listFilterWidget.noMatchesOutline",{dark:"#BE1100",light:"#BE1100",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(153,null)),e.listFilterWidgetShadow=t("listFilterWidget.shadow",{dark:e.widgetShadow,light:e.widgetShadow,hcDark:e.widgetShadow,hcLight:e.widgetShadow},S.localize(154,null)),e.listFilterMatchHighlight=t("list.filterMatchBackground",{dark:e.editorFindMatchHighlight,light:e.editorFindMatchHighlight,hcDark:null,hcLight:null},S.localize(155,null)),e.listFilterMatchHighlightBorder=t("list.filterMatchBorder",{dark:e.editorFindMatchHighlightBorder,light:e.editorFindMatchHighlightBorder,hcDark:e.contrastBorder,hcLight:e.activeContrastBorder},S.localize(156,null)),e.treeIndentGuidesStroke=t("tree.indentGuidesStroke",{dark:"#585858",light:"#a9a9a9",hcDark:"#a9a9a9",hcLight:"#a5a5a5"},S.localize(157,null)),e.treeInactiveIndentGuidesStroke=t("tree.inactiveIndentGuidesStroke",{dark:h(e.treeIndentGuidesStroke,.4),light:h(e.treeIndentGuidesStroke,.4),hcDark:h(e.treeIndentGuidesStroke,.4),hcLight:h(e.treeIndentGuidesStroke,.4)},S.localize(158,null)),e.tableColumnsBorder=t("tree.tableColumnsBorder",{dark:"#CCCCCC20",light:"#61616120",hcDark:null,hcLight:null},S.localize(159,null)),e.tableOddRowsBackgroundColor=t("tree.tableOddRowsBackground",{dark:h(e.foreground,.04),light:h(e.foreground,.04),hcDark:null,hcLight:null},S.localize(160,null)),e.listDeemphasizedForeground=t("list.deemphasizedForeground",{dark:"#8C8C8C",light:"#8E8E90",hcDark:"#A7A8A9",hcLight:"#666666"},S.localize(161,null)),e.checkboxBackground=t("checkbox.background",{dark:e.selectBackground,light:e.selectBackground,hcDark:e.selectBackground,hcLight:e.selectBackground},S.localize(162,null)),e.checkboxSelectBackground=t("checkbox.selectBackground",{dark:e.editorWidgetBackground,light:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(163,null)),e.checkboxForeground=t("checkbox.foreground",{dark:e.selectForeground,light:e.selectForeground,hcDark:e.selectForeground,hcLight:e.selectForeground},S.localize(164,null)),e.checkboxBorder=t("checkbox.border",{dark:e.selectBorder,light:e.selectBorder,hcDark:e.selectBorder,hcLight:e.selectBorder},S.localize(165,null)),e.checkboxSelectBorder=t("checkbox.selectBorder",{dark:e.iconForeground,light:e.iconForeground,hcDark:e.iconForeground,hcLight:e.iconForeground},S.localize(166,null)),e._deprecatedQuickInputListFocusBackground=t("quickInput.list.focusBackground",{dark:null,light:null,hcDark:null,hcLight:null},"",void 0,S.localize(167,null)),e.quickInputListFocusForeground=t("quickInputList.focusForeground",{dark:e.listActiveSelectionForeground,light:e.listActiveSelectionForeground,hcDark:e.listActiveSelectionForeground,hcLight:e.listActiveSelectionForeground},S.localize(168,null)),e.quickInputListFocusIconForeground=t("quickInputList.focusIconForeground",{dark:e.listActiveSelectionIconForeground,light:e.listActiveSelectionIconForeground,hcDark:e.listActiveSelectionIconForeground,hcLight:e.listActiveSelectionIconForeground},S.localize(169,null)),e.quickInputListFocusBackground=t("quickInputList.focusBackground",{dark:m(e._deprecatedQuickInputListFocusBackground,e.listActiveSelectionBackground),light:m(e._deprecatedQuickInputListFocusBackground,e.listActiveSelectionBackground),hcDark:null,hcLight:null},S.localize(170,null)),e.menuBorder=t("menu.border",{dark:null,light:null,hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(171,null)),e.menuForeground=t("menu.foreground",{dark:e.selectForeground,light:e.selectForeground,hcDark:e.selectForeground,hcLight:e.selectForeground},S.localize(172,null)),e.menuBackground=t("menu.background",{dark:e.selectBackground,light:e.selectBackground,hcDark:e.selectBackground,hcLight:e.selectBackground},S.localize(173,null)),e.menuSelectionForeground=t("menu.selectionForeground",{dark:e.listActiveSelectionForeground,light:e.listActiveSelectionForeground,hcDark:e.listActiveSelectionForeground,hcLight:e.listActiveSelectionForeground},S.localize(174,null)),e.menuSelectionBackground=t("menu.selectionBackground",{dark:e.listActiveSelectionBackground,light:e.listActiveSelectionBackground,hcDark:e.listActiveSelectionBackground,hcLight:e.listActiveSelectionBackground},S.localize(175,null)),e.menuSelectionBorder=t("menu.selectionBorder",{dark:null,light:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(176,null)),e.menuSeparatorBackground=t("menu.separatorBackground",{dark:"#606060",light:"#D4D4D4",hcDark:e.contrastBorder,hcLight:e.contrastBorder},S.localize(177,null)),e.toolbarHoverBackground=t("toolbar.hoverBackground",{dark:"#5a5d5e50",light:"#b8b8b850",hcDark:null,hcLight:null},S.localize(178,null)),e.toolbarHoverOutline=t("toolbar.hoverOutline",{dark:null,light:null,hcDark:e.activeContrastBorder,hcLight:e.activeContrastBorder},S.localize(179,null)),e.toolbarActiveBackground=t("toolbar.activeBackground",{dark:g(e.toolbarHoverBackground,.1),light:o(e.toolbarHoverBackground,.1),hcDark:null,hcLight:null},S.localize(180,null)),e.snippetTabstopHighlightBackground=t("editor.snippetTabstopHighlightBackground",{dark:new y.Color(new y.RGBA(124,124,124,.3)),light:new y.Color(new y.RGBA(10,50,100,.2)),hcDark:new y.Color(new y.RGBA(124,124,124,.3)),hcLight:new y.Color(new y.RGBA(10,50,100,.2))},S.localize(181,null)),e.snippetTabstopHighlightBorder=t("editor.snippetTabstopHighlightBorder",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(182,null)),e.snippetFinalTabstopHighlightBackground=t("editor.snippetFinalTabstopHighlightBackground",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(183,null)),e.snippetFinalTabstopHighlightBorder=t("editor.snippetFinalTabstopHighlightBorder",{dark:"#525252",light:new y.Color(new y.RGBA(10,50,100,.5)),hcDark:"#525252",hcLight:"#292929"},S.localize(184,null)),e.breadcrumbsForeground=t("breadcrumb.foreground",{light:h(e.foreground,.8),dark:h(e.foreground,.8),hcDark:h(e.foreground,.8),hcLight:h(e.foreground,.8)},S.localize(185,null)),e.breadcrumbsBackground=t("breadcrumb.background",{light:e.editorBackground,dark:e.editorBackground,hcDark:e.editorBackground,hcLight:e.editorBackground},S.localize(186,null)),e.breadcrumbsFocusForeground=t("breadcrumb.focusForeground",{light:o(e.foreground,.2),dark:g(e.foreground,.1),hcDark:g(e.foreground,.1),hcLight:g(e.foreground,.1)},S.localize(187,null)),e.breadcrumbsActiveSelectionForeground=t("breadcrumb.activeSelectionForeground",{light:o(e.foreground,.2),dark:g(e.foreground,.1),hcDark:g(e.foreground,.1),hcLight:g(e.foreground,.1)},S.localize(188,null)),e.breadcrumbsPickerBackground=t("breadcrumbPicker.background",{light:e.editorWidgetBackground,dark:e.editorWidgetBackground,hcDark:e.editorWidgetBackground,hcLight:e.editorWidgetBackground},S.localize(189,null));const r=.5,u=y.Color.fromHex("#40C8AE").transparent(r),f=y.Color.fromHex("#40A6FF").transparent(r),c=y.Color.fromHex("#606060").transparent(.4),d=.4,s=1;e.mergeCurrentHeaderBackground=t("merge.currentHeaderBackground",{dark:u,light:u,hcDark:null,hcLight:null},S.localize(190,null),!0),e.mergeCurrentContentBackground=t("merge.currentContentBackground",{dark:h(e.mergeCurrentHeaderBackground,d),light:h(e.mergeCurrentHeaderBackground,d),hcDark:h(e.mergeCurrentHeaderBackground,d),hcLight:h(e.mergeCurrentHeaderBackground,d)},S.localize(191,null),!0),e.mergeIncomingHeaderBackground=t("merge.incomingHeaderBackground",{dark:f,light:f,hcDark:null,hcLight:null},S.localize(192,null),!0),e.mergeIncomingContentBackground=t("merge.incomingContentBackground",{dark:h(e.mergeIncomingHeaderBackground,d),light:h(e.mergeIncomingHeaderBackground,d),hcDark:h(e.mergeIncomingHeaderBackground,d),hcLight:h(e.mergeIncomingHeaderBackground,d)},S.localize(193,null),!0),e.mergeCommonHeaderBackground=t("merge.commonHeaderBackground",{dark:c,light:c,hcDark:null,hcLight:null},S.localize(194,null),!0),e.mergeCommonContentBackground=t("merge.commonContentBackground",{dark:h(e.mergeCommonHeaderBackground,d),light:h(e.mergeCommonHeaderBackground,d),hcDark:h(e.mergeCommonHeaderBackground,d),hcLight:h(e.mergeCommonHeaderBackground,d)},S.localize(195,null),!0),e.mergeBorder=t("merge.border",{dark:null,light:null,hcDark:"#C3DF6F",hcLight:"#007ACC"},S.localize(196,null)),e.overviewRulerCurrentContentForeground=t("editorOverviewRuler.currentContentForeground",{dark:h(e.mergeCurrentHeaderBackground,s),light:h(e.mergeCurrentHeaderBackground,s),hcDark:e.mergeBorder,hcLight:e.mergeBorder},S.localize(197,null)),e.overviewRulerIncomingContentForeground=t("editorOverviewRuler.incomingContentForeground",{dark:h(e.mergeIncomingHeaderBackground,s),light:h(e.mergeIncomingHeaderBackground,s),hcDark:e.mergeBorder,hcLight:e.mergeBorder},S.localize(198,null)),e.overviewRulerCommonContentForeground=t("editorOverviewRuler.commonContentForeground",{dark:h(e.mergeCommonHeaderBackground,s),light:h(e.mergeCommonHeaderBackground,s),hcDark:e.mergeBorder,hcLight:e.mergeBorder},S.localize(199,null)),e.overviewRulerFindMatchForeground=t("editorOverviewRuler.findMatchForeground",{dark:"#d186167e",light:"#d186167e",hcDark:"#AB5A00",hcLight:""},S.localize(200,null),!0),e.overviewRulerSelectionHighlightForeground=t("editorOverviewRuler.selectionHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hcDark:"#A0A0A0CC",hcLight:"#A0A0A0CC"},S.localize(201,null),!0),e.minimapFindMatch=t("minimap.findMatchHighlight",{light:"#d18616",dark:"#d18616",hcDark:"#AB5A00",hcLight:"#0F4A85"},S.localize(202,null),!0),e.minimapSelectionOccurrenceHighlight=t("minimap.selectionOccurrenceHighlight",{light:"#c9c9c9",dark:"#676767",hcDark:"#ffffff",hcLight:"#0F4A85"},S.localize(203,null),!0),e.minimapSelection=t("minimap.selectionHighlight",{light:"#ADD6FF",dark:"#264F78",hcDark:"#ffffff",hcLight:"#0F4A85"},S.localize(204,null),!0),e.minimapInfo=t("minimap.infoHighlight",{dark:e.editorInfoForeground,light:e.editorInfoForeground,hcDark:e.editorInfoBorder,hcLight:e.editorInfoBorder},S.localize(205,null)),e.minimapWarning=t("minimap.warningHighlight",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hcDark:e.editorWarningBorder,hcLight:e.editorWarningBorder},S.localize(206,null)),e.minimapError=t("minimap.errorHighlight",{dark:new y.Color(new y.RGBA(255,18,18,.7)),light:new y.Color(new y.RGBA(255,18,18,.7)),hcDark:new y.Color(new y.RGBA(255,50,50,1)),hcLight:"#B5200D"},S.localize(207,null)),e.minimapBackground=t("minimap.background",{dark:null,light:null,hcDark:null,hcLight:null},S.localize(208,null)),e.minimapForegroundOpacity=t("minimap.foregroundOpacity",{dark:y.Color.fromHex("#000f"),light:y.Color.fromHex("#000f"),hcDark:y.Color.fromHex("#000f"),hcLight:y.Color.fromHex("#000f")},S.localize(209,null)),e.minimapSliderBackground=t("minimapSlider.background",{light:h(e.scrollbarSliderBackground,.5),dark:h(e.scrollbarSliderBackground,.5),hcDark:h(e.scrollbarSliderBackground,.5),hcLight:h(e.scrollbarSliderBackground,.5)},S.localize(210,null)),e.minimapSliderHoverBackground=t("minimapSlider.hoverBackground",{light:h(e.scrollbarSliderHoverBackground,.5),dark:h(e.scrollbarSliderHoverBackground,.5),hcDark:h(e.scrollbarSliderHoverBackground,.5),hcLight:h(e.scrollbarSliderHoverBackground,.5)},S.localize(211,null)),e.minimapSliderActiveBackground=t("minimapSlider.activeBackground",{light:h(e.scrollbarSliderActiveBackground,.5),dark:h(e.scrollbarSliderActiveBackground,.5),hcDark:h(e.scrollbarSliderActiveBackground,.5),hcLight:h(e.scrollbarSliderActiveBackground,.5)},S.localize(212,null)),e.problemsErrorIconForeground=t("problemsErrorIcon.foreground",{dark:e.editorErrorForeground,light:e.editorErrorForeground,hcDark:e.editorErrorForeground,hcLight:e.editorErrorForeground},S.localize(213,null)),e.problemsWarningIconForeground=t("problemsWarningIcon.foreground",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hcDark:e.editorWarningForeground,hcLight:e.editorWarningForeground},S.localize(214,null)),e.problemsInfoIconForeground=t("problemsInfoIcon.foreground",{dark:e.editorInfoForeground,light:e.editorInfoForeground,hcDark:e.editorInfoForeground,hcLight:e.editorInfoForeground},S.localize(215,null)),e.chartsForeground=t("charts.foreground",{dark:e.foreground,light:e.foreground,hcDark:e.foreground,hcLight:e.foreground},S.localize(216,null)),e.chartsLines=t("charts.lines",{dark:h(e.foreground,.5),light:h(e.foreground,.5),hcDark:h(e.foreground,.5),hcLight:h(e.foreground,.5)},S.localize(217,null)),e.chartsRed=t("charts.red",{dark:e.editorErrorForeground,light:e.editorErrorForeground,hcDark:e.editorErrorForeground,hcLight:e.editorErrorForeground},S.localize(218,null)),e.chartsBlue=t("charts.blue",{dark:e.editorInfoForeground,light:e.editorInfoForeground,hcDark:e.editorInfoForeground,hcLight:e.editorInfoForeground},S.localize(219,null)),e.chartsYellow=t("charts.yellow",{dark:e.editorWarningForeground,light:e.editorWarningForeground,hcDark:e.editorWarningForeground,hcLight:e.editorWarningForeground},S.localize(220,null)),e.chartsOrange=t("charts.orange",{dark:e.minimapFindMatch,light:e.minimapFindMatch,hcDark:e.minimapFindMatch,hcLight:e.minimapFindMatch},S.localize(221,null)),e.chartsGreen=t("charts.green",{dark:"#89D185",light:"#388A34",hcDark:"#89D185",hcLight:"#374e06"},S.localize(222,null)),e.chartsPurple=t("charts.purple",{dark:"#B180D7",light:"#652D90",hcDark:"#B180D7",hcLight:"#652D90"},S.localize(223,null));function l(A,P){var N,M,R,x;switch(A.op){case 0:return(N=D(A.value,P))===null||N===void 0?void 0:N.darken(A.factor);case 1:return(M=D(A.value,P))===null||M===void 0?void 0:M.lighten(A.factor);case 2:return(R=D(A.value,P))===null||R===void 0?void 0:R.transparent(A.factor);case 3:{const O=D(A.background,P);return O?(x=D(A.value,P))===null||x===void 0?void 0:x.makeOpaque(O):D(A.value,P)}case 4:for(const O of A.values){const B=D(O,P);if(B)return B}return;case 6:return D(P.defines(A.if)?A.then:A.else,P);case 5:{const O=D(A.value,P);if(!O)return;const B=D(A.background,P);return B?O.isDarkerThan(B)?y.Color.getLighterColor(O,B,A.factor).transparent(A.transparency):y.Color.getDarkerColor(O,B,A.factor).transparent(A.transparency):O.transparent(A.factor*A.transparency)}default:throw(0,L.assertNever)(A)}}e.executeTransform=l;function o(A,P){return{op:0,value:A,factor:P}}e.darken=o;function g(A,P){return{op:1,value:A,factor:P}}e.lighten=g;function h(A,P){return{op:2,value:A,factor:P}}e.transparent=h;function m(...A){return{op:4,values:A}}e.oneOf=m;function C(A,P,N){return{op:6,if:A,then:P,else:N}}e.ifDefinedThenElse=C;function w(A,P,N,M){return{op:5,value:A,background:P,factor:N,transparency:M}}function D(A,P){if(A!==null){if(typeof A=="string")return A[0]==="#"?y.Color.fromHex(A):P.getColor(A);if(A instanceof y.Color)return A;if(typeof A=="object")return l(A,P)}}e.resolveColorValue=D,e.workbenchColorsSchemaId="vscode://schemas/workbench-colors";const I=_.Registry.as(p.Extensions.JSONContribution);I.registerSchema(e.workbenchColorsSchemaId,n.getColorSchema());const T=new k.RunOnceScheduler(()=>I.notifySchemaChanged(e.workbenchColorsSchemaId),200);n.onDidChangeSchema(()=>{T.isScheduled()||T.schedule()})}),define(se[167],oe([1,0,7,157,67,14,2,29]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DynamicCssRules=e.GlobalEditorPointerMoveMonitor=e.EditorPointerEventFactory=e.EditorMouseEventFactory=e.EditorMouseEvent=e.createCoordinatesRelativeToEditor=e.createEditorPagePosition=e.CoordinatesRelativeToEditor=e.EditorPagePosition=e.ClientCoordinates=e.PageCoordinates=void 0;class _{constructor(o,g){this.x=o,this.y=g,this._pageCoordinatesBrand=void 0}toClientCoordinates(o){return new v(this.x-o.scrollX,this.y-o.scrollY)}}e.PageCoordinates=_;class v{constructor(o,g){this.clientX=o,this.clientY=g,this._clientCoordinatesBrand=void 0}toPageCoordinates(o){return new _(this.clientX+o.scrollX,this.clientY+o.scrollY)}}e.ClientCoordinates=v;class b{constructor(o,g,h,m){this.x=o,this.y=g,this.width=h,this.height=m,this._editorPagePositionBrand=void 0}}e.EditorPagePosition=b;class a{constructor(o,g){this.x=o,this.y=g,this._positionRelativeToEditorBrand=void 0}}e.CoordinatesRelativeToEditor=a;function i(l){const o=L.getDomNodePagePosition(l);return new b(o.left,o.top,o.width,o.height)}e.createEditorPagePosition=i;function n(l,o,g){const h=o.width/l.offsetWidth,m=o.height/l.offsetHeight,C=(g.x-o.x)/h,w=(g.y-o.y)/m;return new a(C,w)}e.createCoordinatesRelativeToEditor=n;class t extends y.StandardMouseEvent{constructor(o,g,h){super(L.getWindow(h),o),this._editorMouseEventBrand=void 0,this.isFromPointerCapture=g,this.pos=new _(this.posx,this.posy),this.editorPos=i(h),this.relativePos=n(h,this.editorPos,this.pos)}}e.EditorMouseEvent=t;class r{constructor(o){this._editorViewDomNode=o}_create(o){return new t(o,!1,this._editorViewDomNode)}onContextMenu(o,g){return L.addDisposableListener(o,"contextmenu",h=>{g(this._create(h))})}onMouseUp(o,g){return L.addDisposableListener(o,"mouseup",h=>{g(this._create(h))})}onMouseDown(o,g){return L.addDisposableListener(o,L.EventType.MOUSE_DOWN,h=>{g(this._create(h))})}onPointerDown(o,g){return L.addDisposableListener(o,L.EventType.POINTER_DOWN,h=>{g(this._create(h),h.pointerId)})}onMouseLeave(o,g){return L.addDisposableListener(o,L.EventType.MOUSE_LEAVE,h=>{g(this._create(h))})}onMouseMove(o,g){return L.addDisposableListener(o,"mousemove",h=>g(this._create(h)))}}e.EditorMouseEventFactory=r;class u{constructor(o){this._editorViewDomNode=o}_create(o){return new t(o,!1,this._editorViewDomNode)}onPointerUp(o,g){return L.addDisposableListener(o,"pointerup",h=>{g(this._create(h))})}onPointerDown(o,g){return L.addDisposableListener(o,L.EventType.POINTER_DOWN,h=>{g(this._create(h),h.pointerId)})}onPointerLeave(o,g){return L.addDisposableListener(o,L.EventType.POINTER_LEAVE,h=>{g(this._create(h))})}onPointerMove(o,g){return L.addDisposableListener(o,"pointermove",h=>g(this._create(h)))}}e.EditorPointerEventFactory=u;class f extends S.Disposable{constructor(o){super(),this._editorViewDomNode=o,this._globalPointerMoveMonitor=this._register(new k.GlobalPointerMoveMonitor),this._keydownListener=null}startMonitoring(o,g,h,m,C){this._keydownListener=L.addStandardDisposableListener(o.ownerDocument,"keydown",w=>{w.toKeyCodeChord().isModifierKey()||this._globalPointerMoveMonitor.stopMonitoring(!0,w.browserEvent)},!0),this._globalPointerMoveMonitor.startMonitoring(o,g,h,w=>{m(new t(w,!0,this._editorViewDomNode))},w=>{this._keydownListener.dispose(),C(w)})}stopMonitoring(){this._globalPointerMoveMonitor.stopMonitoring(!0)}}e.GlobalEditorPointerMoveMonitor=f;class c{constructor(o){this._editor=o,this._instanceId=++c._idPool,this._counter=0,this._rules=new Map,this._garbageCollectionScheduler=new E.RunOnceScheduler(()=>this.garbageCollect(),1e3)}createClassNameRef(o){const g=this.getOrCreateRule(o);return g.increaseRefCount(),{className:g.className,dispose:()=>{g.decreaseRefCount(),this._garbageCollectionScheduler.schedule()}}}getOrCreateRule(o){const g=this.computeUniqueKey(o);let h=this._rules.get(g);if(!h){const m=this._counter++;h=new d(g,`dyn-rule-${this._instanceId}-${m}`,L.isInShadowDOM(this._editor.getContainerDomNode())?this._editor.getContainerDomNode():void 0,o),this._rules.set(g,h)}return h}computeUniqueKey(o){return JSON.stringify(o)}garbageCollect(){for(const o of this._rules.values())o.hasReferences()||(this._rules.delete(o.key),o.dispose())}}e.DynamicCssRules=c,c._idPool=0;class d{constructor(o,g,h,m){this.key=o,this.className=g,this.properties=m,this._referenceCount=0,this._styleElementDisposables=new S.DisposableStore,this._styleElement=L.createStyleSheet(h,void 0,this._styleElementDisposables),this._styleElement.textContent=this.getCssText(this.className,this.properties)}getCssText(o,g){let h=`.${o} {`;for(const m in g){const C=g[m];let w;typeof C=="object"?w=(0,p.asCssVariable)(C.id):w=C;const D=s(m);h+=` ${D}: ${w};`}return h+=` }`,h}dispose(){this._styleElementDisposables.dispose(),this._styleElement=void 0}increaseRefCount(){this._referenceCount++}decreaseRefCount(){this._referenceCount--}hasReferences(){return this._referenceCount>0}}function s(l){return l.replace(/(^[A-Z])/,([o])=>o.toLowerCase()).replace(/([A-Z])/g,([o])=>`-${o.toLowerCase()}`)}}),define(se[834],oe([1,0,7,40,157,2,17,11,233,56,36,5,281,339,86,29,24,63,497,41,108,440]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Minimap=void 0;const l=140,o=2;class g{constructor(N,M,R){const x=N.options,O=x.get(141),B=x.get(143),W=B.minimap,V=x.get(50),K=x.get(72);this.renderMinimap=W.renderMinimap,this.size=K.size,this.minimapHeightIsEditorHeight=W.minimapHeightIsEditorHeight,this.scrollBeyondLastLine=x.get(104),this.paddingTop=x.get(83).top,this.paddingBottom=x.get(83).bottom,this.showSlider=K.showSlider,this.autohide=K.autohide,this.pixelRatio=O,this.typicalHalfwidthCharacterWidth=V.typicalHalfwidthCharacterWidth,this.lineHeight=x.get(66),this.minimapLeft=W.minimapLeft,this.minimapWidth=W.minimapWidth,this.minimapHeight=B.height,this.canvasInnerWidth=W.minimapCanvasInnerWidth,this.canvasInnerHeight=W.minimapCanvasInnerHeight,this.canvasOuterWidth=W.minimapCanvasOuterWidth,this.canvasOuterHeight=W.minimapCanvasOuterHeight,this.isSampling=W.minimapIsSampling,this.editorHeight=B.height,this.fontScale=W.minimapScale,this.minimapLineHeight=W.minimapLineHeight,this.minimapCharWidth=1*this.fontScale,this.charRenderer=(0,s.createSingleCallFunction)(()=>c.MinimapCharRendererFactory.create(this.fontScale,V.fontFamily)),this.defaultBackgroundColor=R.getColor(2),this.backgroundColor=g._getMinimapBackground(M,this.defaultBackgroundColor),this.foregroundAlpha=g._getMinimapForegroundOpacity(M)}static _getMinimapBackground(N,M){const R=N.getColor(r.minimapBackground);return R?new i.RGBA8(R.rgba.r,R.rgba.g,R.rgba.b,Math.round(255*R.rgba.a)):M}static _getMinimapForegroundOpacity(N){const M=N.getColor(r.minimapForegroundOpacity);return M?i.RGBA8._clamp(Math.round(255*M.rgba.a)):255}equals(N){return this.renderMinimap===N.renderMinimap&&this.size===N.size&&this.minimapHeightIsEditorHeight===N.minimapHeightIsEditorHeight&&this.scrollBeyondLastLine===N.scrollBeyondLastLine&&this.paddingTop===N.paddingTop&&this.paddingBottom===N.paddingBottom&&this.showSlider===N.showSlider&&this.autohide===N.autohide&&this.pixelRatio===N.pixelRatio&&this.typicalHalfwidthCharacterWidth===N.typicalHalfwidthCharacterWidth&&this.lineHeight===N.lineHeight&&this.minimapLeft===N.minimapLeft&&this.minimapWidth===N.minimapWidth&&this.minimapHeight===N.minimapHeight&&this.canvasInnerWidth===N.canvasInnerWidth&&this.canvasInnerHeight===N.canvasInnerHeight&&this.canvasOuterWidth===N.canvasOuterWidth&&this.canvasOuterHeight===N.canvasOuterHeight&&this.isSampling===N.isSampling&&this.editorHeight===N.editorHeight&&this.fontScale===N.fontScale&&this.minimapLineHeight===N.minimapLineHeight&&this.minimapCharWidth===N.minimapCharWidth&&this.defaultBackgroundColor&&this.defaultBackgroundColor.equals(N.defaultBackgroundColor)&&this.backgroundColor&&this.backgroundColor.equals(N.backgroundColor)&&this.foregroundAlpha===N.foregroundAlpha}}class h{constructor(N,M,R,x,O,B,W,V,K){this.scrollTop=N,this.scrollHeight=M,this.sliderNeeded=R,this._computedSliderRatio=x,this.sliderTop=O,this.sliderHeight=B,this.topPaddingLineCount=W,this.startLineNumber=V,this.endLineNumber=K}getDesiredScrollTopFromDelta(N){return Math.round(this.scrollTop+N/this._computedSliderRatio)}getDesiredScrollTopFromTouchLocation(N){return Math.round((N-this.sliderHeight/2)/this._computedSliderRatio)}intersectWithViewport(N){const M=Math.max(this.startLineNumber,N.startLineNumber),R=Math.min(this.endLineNumber,N.endLineNumber);return M>R?null:[M,R]}getYForLineNumber(N,M){return+(N-this.startLineNumber+this.topPaddingLineCount)*M}static create(N,M,R,x,O,B,W,V,K,F,q){const ie=N.pixelRatio,ae=N.minimapLineHeight,ne=Math.floor(N.canvasInnerHeight/ae),$=N.lineHeight;if(N.minimapHeightIsEditorHeight){let X=V*N.lineHeight+N.paddingTop+N.paddingBottom;N.scrollBeyondLastLine&&(X+=Math.max(0,O-N.lineHeight-N.paddingBottom));const U=Math.max(1,Math.floor(O*O/X)),G=Math.max(0,N.minimapHeight-U),z=G/(F-O),H=K*z,Y=G>0,j=Math.floor(N.canvasInnerHeight/N.minimapLineHeight),Z=Math.floor(N.paddingTop/N.lineHeight);return new h(K,F,Y,z,H,U,Z,1,Math.min(W,j))}let J;if(B&&R!==W){const X=R-M+1;J=Math.floor(X*ae/ie)}else{const X=O/$;J=Math.floor(X*ae/ie)}const Q=Math.floor(N.paddingTop/$);let re=Math.floor(N.paddingBottom/$);if(N.scrollBeyondLastLine){const X=O/$;re=Math.max(re,X-1)}let de;if(re>0){const X=O/$;de=(Q+W+re-X-1)*ae/ie}else de=Math.max(0,(Q+W)*ae/ie-J);de=Math.min(N.minimapHeight-J,de);const he=de/(F-O),me=K*he;if(ne>=Q+W+re){const X=de>0;return new h(K,F,X,he,me,J,Q,1,W)}else{let X;M>1?X=M+Q:X=Math.max(1,K/$);let U,G=Math.max(1,Math.floor(X-me*ie/ae));GK&&(G=Math.min(G,q.startLineNumber),U=Math.max(U,q.topPaddingLineCount)),q.scrollTop=N.paddingTop?Y=(M-G+U+H)*ae/ie:Y=K/N.paddingTop*(U+H)*ae/ie,new h(K,F,!0,he,Y,J,U,G,z)}}}class m{constructor(N){this.dy=N}onContentChanged(){this.dy=-1}onTokensChanged(){this.dy=-1}}m.INVALID=new m(-1);class C{constructor(N,M,R){this.renderedLayout=N,this._imageData=M,this._renderedLines=new _.RenderedLinesCollection(()=>m.INVALID),this._renderedLines._set(N.startLineNumber,R)}linesEquals(N){if(!this.scrollEquals(N))return!1;const R=this._renderedLines._get().lines;for(let x=0,O=R.length;x1){for(let Q=0,re=x-1;Q0&&this.minimapLines[R-1]>=N;)R--;let x=this.modelLineToMinimapLine(M)-1;for(;x+1M)return null}return[R+1,x+1]}decorationLineRangeToMinimapLineRange(N,M){let R=this.modelLineToMinimapLine(N),x=this.modelLineToMinimapLine(M);return N!==M&&x===R&&(x===this.minimapLines.length?R>1&&R--:x++),[R,x]}onLinesDeleted(N){const M=N.toLineNumber-N.fromLineNumber+1;let R=this.minimapLines.length,x=0;for(let O=this.minimapLines.length-1;O>=0&&!(this.minimapLines[O]=0&&!(this.minimapLines[R]0,scrollWidth:N.scrollWidth,scrollHeight:N.scrollHeight,viewportStartLineNumber:M,viewportEndLineNumber:R,viewportStartLineNumberVerticalOffset:N.getVerticalOffsetForLineNumber(M),scrollTop:N.scrollTop,scrollLeft:N.scrollLeft,viewportWidth:N.viewportWidth,viewportHeight:N.viewportHeight};this._actual.render(x)}_recreateLineSampling(){this._minimapSelections=null;const N=!!this._samplingState,[M,R]=D.compute(this.options,this._context.viewModel.getLineCount(),this._samplingState);if(this._samplingState=M,N&&this._samplingState)for(const x of R)switch(x.type){case"deleted":this._actual.onLinesDeleted(x.deleteFromLineNumber,x.deleteToLineNumber);break;case"inserted":this._actual.onLinesInserted(x.insertFromLineNumber,x.insertToLineNumber);break;case"flush":this._actual.onFlushed();break}}getLineCount(){return this._samplingState?this._samplingState.minimapLines.length:this._context.viewModel.getLineCount()}getRealLineCount(){return this._context.viewModel.getLineCount()}getLineContent(N){return this._samplingState?this._context.viewModel.getLineContent(this._samplingState.minimapLines[N-1]):this._context.viewModel.getLineContent(N)}getLineMaxColumn(N){return this._samplingState?this._context.viewModel.getLineMaxColumn(this._samplingState.minimapLines[N-1]):this._context.viewModel.getLineMaxColumn(N)}getMinimapLinesRenderingData(N,M,R){if(this._samplingState){const x=[];for(let O=0,B=M-N+1;O{if(R.preventDefault(),this._model.options.renderMinimap===0||!this._lastRenderData)return;if(this._model.options.size!=="proportional"){if(R.button===0&&this._lastRenderData){const K=L.getDomNodePagePosition(this._slider.domNode),F=K.top+K.height/2;this._startSliderDragging(R,F,this._lastRenderData.renderedLayout)}return}const O=this._model.options.minimapLineHeight,B=this._model.options.canvasInnerHeight/this._model.options.canvasOuterHeight*R.offsetY;let V=Math.floor(B/O)+this._lastRenderData.renderedLayout.startLineNumber-this._lastRenderData.renderedLayout.topPaddingLineCount;V=Math.min(V,this._model.getLineCount()),this._model.revealLineNumber(V)}),this._sliderPointerMoveMonitor=new y.GlobalPointerMoveMonitor,this._sliderPointerDownListener=L.addStandardDisposableListener(this._slider.domNode,L.EventType.POINTER_DOWN,R=>{R.preventDefault(),R.stopPropagation(),R.button===0&&this._lastRenderData&&this._startSliderDragging(R,R.pageY,this._lastRenderData.renderedLayout)}),this._gestureDisposable=f.Gesture.addTarget(this._domNode.domNode),this._sliderTouchStartListener=L.addDisposableListener(this._domNode.domNode,f.EventType.Start,R=>{R.preventDefault(),R.stopPropagation(),this._lastRenderData&&(this._slider.toggleClassName("active",!0),this._gestureInProgress=!0,this.scrollDueToTouchEvent(R))},{passive:!1}),this._sliderTouchMoveListener=L.addDisposableListener(this._domNode.domNode,f.EventType.Change,R=>{R.preventDefault(),R.stopPropagation(),this._lastRenderData&&this._gestureInProgress&&this.scrollDueToTouchEvent(R)},{passive:!1}),this._sliderTouchEndListener=L.addStandardDisposableListener(this._domNode.domNode,f.EventType.End,R=>{R.preventDefault(),R.stopPropagation(),this._gestureInProgress=!1,this._slider.toggleClassName("active",!1)})}_startSliderDragging(N,M,R){if(!N.target||!(N.target instanceof Element))return;const x=N.pageX;this._slider.toggleClassName("active",!0);const O=(B,W)=>{const V=L.getDomNodePagePosition(this._domNode.domNode),K=Math.min(Math.abs(W-x),Math.abs(W-V.left),Math.abs(W-V.left-V.width));if(S.isWindows&&K>l){this._model.setScrollTop(R.scrollTop);return}const F=B-M;this._model.setScrollTop(R.getDesiredScrollTopFromDelta(F))};N.pageY!==M&&O(N.pageY,x),this._sliderPointerMoveMonitor.startMonitoring(N.target,N.pointerId,N.buttons,B=>O(B.pageY,B.pageX),()=>{this._slider.toggleClassName("active",!1)})}scrollDueToTouchEvent(N){const M=this._domNode.domNode.getBoundingClientRect().top,R=this._lastRenderData.renderedLayout.getDesiredScrollTopFromTouchLocation(N.pageY-M);this._model.setScrollTop(R)}dispose(){this._pointerDownListener.dispose(),this._sliderPointerMoveMonitor.dispose(),this._sliderPointerDownListener.dispose(),this._gestureDisposable.dispose(),this._sliderTouchStartListener.dispose(),this._sliderTouchMoveListener.dispose(),this._sliderTouchEndListener.dispose(),super.dispose()}_getMinimapDomNodeClassName(){const N=["minimap"];return this._model.options.showSlider==="always"?N.push("slider-always"):N.push("slider-mouseover"),this._model.options.autohide&&N.push("autohide"),N.join(" ")}getDomNode(){return this._domNode}_applyLayout(){this._domNode.setLeft(this._model.options.minimapLeft),this._domNode.setWidth(this._model.options.minimapWidth),this._domNode.setHeight(this._model.options.minimapHeight),this._shadow.setHeight(this._model.options.minimapHeight),this._canvas.setWidth(this._model.options.canvasOuterWidth),this._canvas.setHeight(this._model.options.canvasOuterHeight),this._canvas.domNode.width=this._model.options.canvasInnerWidth,this._canvas.domNode.height=this._model.options.canvasInnerHeight,this._decorationsCanvas.setWidth(this._model.options.canvasOuterWidth),this._decorationsCanvas.setHeight(this._model.options.canvasOuterHeight),this._decorationsCanvas.domNode.width=this._model.options.canvasInnerWidth,this._decorationsCanvas.domNode.height=this._model.options.canvasInnerHeight,this._slider.setWidth(this._model.options.minimapWidth)}_getBuffer(){return this._buffers||this._model.options.canvasInnerWidth>0&&this._model.options.canvasInnerHeight>0&&(this._buffers=new w(this._canvas.domNode.getContext("2d"),this._model.options.canvasInnerWidth,this._model.options.canvasInnerHeight,this._model.options.backgroundColor)),this._buffers?this._buffers.getBuffer():null}onDidChangeOptions(){this._lastRenderData=null,this._buffers=null,this._applyLayout(),this._domNode.setClassName(this._getMinimapDomNodeClassName())}onSelectionChanged(){return this._renderDecorations=!0,!0}onDecorationsChanged(){return this._renderDecorations=!0,!0}onFlushed(){return this._lastRenderData=null,!0}onLinesChanged(N,M){return this._lastRenderData?this._lastRenderData.onLinesChanged(N,M):!1}onLinesDeleted(N,M){var R;return(R=this._lastRenderData)===null||R===void 0||R.onLinesDeleted(N,M),!0}onLinesInserted(N,M){var R;return(R=this._lastRenderData)===null||R===void 0||R.onLinesInserted(N,M),!0}onScrollChanged(){return this._renderDecorations=!0,!0}onThemeChanged(){return this._selectionColor=this._theme.getColor(r.minimapSelection),this._renderDecorations=!0,!0}onTokensChanged(N){return this._lastRenderData?this._lastRenderData.onTokensChanged(N):!1}onTokensColorsChanged(){return this._lastRenderData=null,this._buffers=null,!0}onZonesChanged(){return this._lastRenderData=null,!0}render(N){if(this._model.options.renderMinimap===0){this._shadow.setClassName("minimap-shadow-hidden"),this._sliderHorizontal.setWidth(0),this._sliderHorizontal.setHeight(0);return}N.scrollLeft+N.viewportWidth>=N.scrollWidth?this._shadow.setClassName("minimap-shadow-hidden"):this._shadow.setClassName("minimap-shadow-visible");const R=h.create(this._model.options,N.viewportStartLineNumber,N.viewportEndLineNumber,N.viewportStartLineNumberVerticalOffset,N.viewportHeight,N.viewportContainsWhitespaceGaps,this._model.getLineCount(),this._model.getRealLineCount(),N.scrollTop,N.scrollHeight,this._lastRenderData?this._lastRenderData.renderedLayout:null);this._slider.setDisplay(R.sliderNeeded?"block":"none"),this._slider.setTop(R.sliderTop),this._slider.setHeight(R.sliderHeight),this._sliderHorizontal.setLeft(0),this._sliderHorizontal.setWidth(this._model.options.minimapWidth),this._sliderHorizontal.setTop(0),this._sliderHorizontal.setHeight(R.sliderHeight),this.renderDecorations(R),this._lastRenderData=this.renderLines(R)}renderDecorations(N){if(this._renderDecorations){this._renderDecorations=!1;const M=this._model.getSelections();M.sort(a.Range.compareRangesUsingStarts);const R=this._model.getMinimapDecorationsInViewport(N.startLineNumber,N.endLineNumber);R.sort((ie,ae)=>(ie.options.zIndex||0)-(ae.options.zIndex||0));const{canvasInnerWidth:x,canvasInnerHeight:O}=this._model.options,B=this._model.options.minimapLineHeight,W=this._model.options.minimapCharWidth,V=this._model.getOptions().tabSize,K=this._decorationsCanvas.domNode.getContext("2d");K.clearRect(0,0,x,O);const F=new A(N.startLineNumber,N.endLineNumber,!1);this._renderSelectionLineHighlights(K,M,F,N,B),this._renderDecorationsLineHighlights(K,R,F,N,B);const q=new A(N.startLineNumber,N.endLineNumber,null);this._renderSelectionsHighlights(K,M,q,N,B,V,W,x),this._renderDecorationsHighlights(K,R,q,N,B,V,W,x)}}_renderSelectionLineHighlights(N,M,R,x,O){if(!this._selectionColor||this._selectionColor.isTransparent())return;N.fillStyle=this._selectionColor.transparent(.5).toString();let B=0,W=0;for(const V of M){const K=x.intersectWithViewport(V);if(!K)continue;const[F,q]=K;for(let ne=F;ne<=q;ne++)R.set(ne,!0);const ie=x.getYForLineNumber(F,O),ae=x.getYForLineNumber(q,O);W>=ie||(W>B&&N.fillRect(b.MINIMAP_GUTTER_WIDTH,B,N.canvas.width,W-B),B=ie),W=ae}W>B&&N.fillRect(b.MINIMAP_GUTTER_WIDTH,B,N.canvas.width,W-B)}_renderDecorationsLineHighlights(N,M,R,x,O){const B=new Map;for(let W=M.length-1;W>=0;W--){const V=M[W],K=V.options.minimap;if(!K||K.position!==d.MinimapPosition.Inline)continue;const F=x.intersectWithViewport(V.range);if(!F)continue;const[q,ie]=F,ae=K.getColor(this._theme.value);if(!ae||ae.isTransparent())continue;let ne=B.get(ae.toString());ne||(ne=ae.transparent(.5).toString(),B.set(ae.toString(),ne)),N.fillStyle=ne;for(let $=q;$<=ie;$++){if(R.has($))continue;R.set($,!0);const J=x.getYForLineNumber(q,O);N.fillRect(b.MINIMAP_GUTTER_WIDTH,J,N.canvas.width,O)}}}_renderSelectionsHighlights(N,M,R,x,O,B,W,V){if(!(!this._selectionColor||this._selectionColor.isTransparent()))for(const K of M){const F=x.intersectWithViewport(K);if(!F)continue;const[q,ie]=F;for(let ae=q;ae<=ie;ae++)this.renderDecorationOnLine(N,R,K,this._selectionColor,x,ae,O,O,B,W,V)}}_renderDecorationsHighlights(N,M,R,x,O,B,W,V){for(const K of M){const F=K.options.minimap;if(!F)continue;const q=x.intersectWithViewport(K.range);if(!q)continue;const[ie,ae]=q,ne=F.getColor(this._theme.value);if(!(!ne||ne.isTransparent()))for(let $=ie;$<=ae;$++)switch(F.position){case d.MinimapPosition.Inline:this.renderDecorationOnLine(N,R,K.range,ne,x,$,O,O,B,W,V);continue;case d.MinimapPosition.Gutter:{const J=x.getYForLineNumber($,O),Q=2;this.renderDecoration(N,ne,Q,J,o,O);continue}}}}renderDecorationOnLine(N,M,R,x,O,B,W,V,K,F,q){const ie=O.getYForLineNumber(B,V);if(ie+W<0||ie>this._model.options.canvasInnerHeight)return;const{startLineNumber:ae,endLineNumber:ne}=R,$=ae===B?R.startColumn:1,J=ne===B?R.endColumn:this._model.getLineMaxColumn(B),Q=this.getXOffsetForPosition(M,B,$,K,F,q),re=this.getXOffsetForPosition(M,B,J,K,F,q);this.renderDecoration(N,x,Q,ie,re-Q,W)}getXOffsetForPosition(N,M,R,x,O,B){if(R===1)return b.MINIMAP_GUTTER_WIDTH;if((R-1)*O>=B)return B;let V=N.get(M);if(!V){const K=this._model.getLineContent(M);V=[b.MINIMAP_GUTTER_WIDTH];let F=b.MINIMAP_GUTTER_WIDTH;for(let q=1;q=B){V[q]=B;break}V[q]=ne,F=ne}N.set(M,V)}return R-1me?Math.floor((x-me)/2):0,U=ie.a/255,G=new i.RGBA8(Math.round((ie.r-q.r)*U+q.r),Math.round((ie.g-q.g)*U+q.g),Math.round((ie.b-q.b)*U+q.b),255);let z=N.topPaddingLineCount*x;const H=[];for(let le=0,ue=R-M+1;le=0&&Yre)return;const j=J.charCodeAt(me);if(j===9){const Z=ie-(me+X)%ie;X+=Z-1,he+=Z*B}else if(j===32)he+=B;else{const Z=p.isFullWidthCharacter(j)?2:1;for(let ee=0;eere)return}}}}}class A{constructor(N,M,R){this._startLineNumber=N,this._endLineNumber=M,this._defaultValue=R,this._values=[];for(let x=0,O=this._endLineNumber-this._startLineNumber+1;xthis._endLineNumber||(this._values[N-this._startLineNumber]=M)}get(N){return Nthis._endLineNumber?this._defaultValue:this._values[N-this._startLineNumber]}}}),define(se[835],oe([1,0,633,29]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.multiDiffEditorBorder=e.multiDiffEditorBackground=e.multiDiffEditorHeaderBackground=void 0,e.multiDiffEditorHeaderBackground=(0,k.registerColor)("multiDiffEditor.headerBackground",{dark:"#808080",light:"#b4b4b4",hcDark:"#808080",hcLight:"#b4b4b4"},(0,L.localize)(0,null)),e.multiDiffEditorBackground=(0,k.registerColor)("multiDiffEditor.background",{dark:"#000000",light:"#e5e5e5",hcDark:"#000000",hcLight:"#e5e5e5"},(0,L.localize)(1,null)),e.multiDiffEditorBorder=(0,k.registerColor)("multiDiffEditor.border",{dark:"sideBarSectionHeader.border",light:"#cccccc",hcDark:"sideBarSectionHeader.border",hcLight:"#cccccc"},(0,L.localize)(2,null))}),define(se[254],oe([1,0,722,29,479]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SYMBOL_ICON_VARIABLE_FOREGROUND=e.SYMBOL_ICON_UNIT_FOREGROUND=e.SYMBOL_ICON_TYPEPARAMETER_FOREGROUND=e.SYMBOL_ICON_TEXT_FOREGROUND=e.SYMBOL_ICON_STRUCT_FOREGROUND=e.SYMBOL_ICON_STRING_FOREGROUND=e.SYMBOL_ICON_SNIPPET_FOREGROUND=e.SYMBOL_ICON_REFERENCE_FOREGROUND=e.SYMBOL_ICON_PROPERTY_FOREGROUND=e.SYMBOL_ICON_PACKAGE_FOREGROUND=e.SYMBOL_ICON_OPERATOR_FOREGROUND=e.SYMBOL_ICON_OBJECT_FOREGROUND=e.SYMBOL_ICON_NUMBER_FOREGROUND=e.SYMBOL_ICON_NULL_FOREGROUND=e.SYMBOL_ICON_NAMESPACE_FOREGROUND=e.SYMBOL_ICON_MODULE_FOREGROUND=e.SYMBOL_ICON_METHOD_FOREGROUND=e.SYMBOL_ICON_KEYWORD_FOREGROUND=e.SYMBOL_ICON_KEY_FOREGROUND=e.SYMBOL_ICON_INTERFACE_FOREGROUND=e.SYMBOL_ICON_FUNCTION_FOREGROUND=e.SYMBOL_ICON_FOLDER_FOREGROUND=e.SYMBOL_ICON_FILE_FOREGROUND=e.SYMBOL_ICON_FIELD_FOREGROUND=e.SYMBOL_ICON_EVENT_FOREGROUND=e.SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND=e.SYMBOL_ICON_ENUMERATOR_FOREGROUND=e.SYMBOL_ICON_CONSTRUCTOR_FOREGROUND=e.SYMBOL_ICON_CONSTANT_FOREGROUND=e.SYMBOL_ICON_COLOR_FOREGROUND=e.SYMBOL_ICON_CLASS_FOREGROUND=e.SYMBOL_ICON_BOOLEAN_FOREGROUND=e.SYMBOL_ICON_ARRAY_FOREGROUND=void 0,e.SYMBOL_ICON_ARRAY_FOREGROUND=(0,k.registerColor)("symbolIcon.arrayForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(0,null)),e.SYMBOL_ICON_BOOLEAN_FOREGROUND=(0,k.registerColor)("symbolIcon.booleanForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(1,null)),e.SYMBOL_ICON_CLASS_FOREGROUND=(0,k.registerColor)("symbolIcon.classForeground",{dark:"#EE9D28",light:"#D67E00",hcDark:"#EE9D28",hcLight:"#D67E00"},(0,L.localize)(2,null)),e.SYMBOL_ICON_COLOR_FOREGROUND=(0,k.registerColor)("symbolIcon.colorForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(3,null)),e.SYMBOL_ICON_CONSTANT_FOREGROUND=(0,k.registerColor)("symbolIcon.constantForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(4,null)),e.SYMBOL_ICON_CONSTRUCTOR_FOREGROUND=(0,k.registerColor)("symbolIcon.constructorForeground",{dark:"#B180D7",light:"#652D90",hcDark:"#B180D7",hcLight:"#652D90"},(0,L.localize)(5,null)),e.SYMBOL_ICON_ENUMERATOR_FOREGROUND=(0,k.registerColor)("symbolIcon.enumeratorForeground",{dark:"#EE9D28",light:"#D67E00",hcDark:"#EE9D28",hcLight:"#D67E00"},(0,L.localize)(6,null)),e.SYMBOL_ICON_ENUMERATOR_MEMBER_FOREGROUND=(0,k.registerColor)("symbolIcon.enumeratorMemberForeground",{dark:"#75BEFF",light:"#007ACC",hcDark:"#75BEFF",hcLight:"#007ACC"},(0,L.localize)(7,null)),e.SYMBOL_ICON_EVENT_FOREGROUND=(0,k.registerColor)("symbolIcon.eventForeground",{dark:"#EE9D28",light:"#D67E00",hcDark:"#EE9D28",hcLight:"#D67E00"},(0,L.localize)(8,null)),e.SYMBOL_ICON_FIELD_FOREGROUND=(0,k.registerColor)("symbolIcon.fieldForeground",{dark:"#75BEFF",light:"#007ACC",hcDark:"#75BEFF",hcLight:"#007ACC"},(0,L.localize)(9,null)),e.SYMBOL_ICON_FILE_FOREGROUND=(0,k.registerColor)("symbolIcon.fileForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(10,null)),e.SYMBOL_ICON_FOLDER_FOREGROUND=(0,k.registerColor)("symbolIcon.folderForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(11,null)),e.SYMBOL_ICON_FUNCTION_FOREGROUND=(0,k.registerColor)("symbolIcon.functionForeground",{dark:"#B180D7",light:"#652D90",hcDark:"#B180D7",hcLight:"#652D90"},(0,L.localize)(12,null)),e.SYMBOL_ICON_INTERFACE_FOREGROUND=(0,k.registerColor)("symbolIcon.interfaceForeground",{dark:"#75BEFF",light:"#007ACC",hcDark:"#75BEFF",hcLight:"#007ACC"},(0,L.localize)(13,null)),e.SYMBOL_ICON_KEY_FOREGROUND=(0,k.registerColor)("symbolIcon.keyForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(14,null)),e.SYMBOL_ICON_KEYWORD_FOREGROUND=(0,k.registerColor)("symbolIcon.keywordForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(15,null)),e.SYMBOL_ICON_METHOD_FOREGROUND=(0,k.registerColor)("symbolIcon.methodForeground",{dark:"#B180D7",light:"#652D90",hcDark:"#B180D7",hcLight:"#652D90"},(0,L.localize)(16,null)),e.SYMBOL_ICON_MODULE_FOREGROUND=(0,k.registerColor)("symbolIcon.moduleForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(17,null)),e.SYMBOL_ICON_NAMESPACE_FOREGROUND=(0,k.registerColor)("symbolIcon.namespaceForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(18,null)),e.SYMBOL_ICON_NULL_FOREGROUND=(0,k.registerColor)("symbolIcon.nullForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(19,null)),e.SYMBOL_ICON_NUMBER_FOREGROUND=(0,k.registerColor)("symbolIcon.numberForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(20,null)),e.SYMBOL_ICON_OBJECT_FOREGROUND=(0,k.registerColor)("symbolIcon.objectForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(21,null)),e.SYMBOL_ICON_OPERATOR_FOREGROUND=(0,k.registerColor)("symbolIcon.operatorForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(22,null)),e.SYMBOL_ICON_PACKAGE_FOREGROUND=(0,k.registerColor)("symbolIcon.packageForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(23,null)),e.SYMBOL_ICON_PROPERTY_FOREGROUND=(0,k.registerColor)("symbolIcon.propertyForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(24,null)),e.SYMBOL_ICON_REFERENCE_FOREGROUND=(0,k.registerColor)("symbolIcon.referenceForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(25,null)),e.SYMBOL_ICON_SNIPPET_FOREGROUND=(0,k.registerColor)("symbolIcon.snippetForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(26,null)),e.SYMBOL_ICON_STRING_FOREGROUND=(0,k.registerColor)("symbolIcon.stringForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(27,null)),e.SYMBOL_ICON_STRUCT_FOREGROUND=(0,k.registerColor)("symbolIcon.structForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(28,null)),e.SYMBOL_ICON_TEXT_FOREGROUND=(0,k.registerColor)("symbolIcon.textForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(29,null)),e.SYMBOL_ICON_TYPEPARAMETER_FOREGROUND=(0,k.registerColor)("symbolIcon.typeParameterForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(30,null)),e.SYMBOL_ICON_UNIT_FOREGROUND=(0,k.registerColor)("symbolIcon.unitForeground",{dark:k.foreground,light:k.foreground,hcDark:k.foreground,hcLight:k.foreground},(0,L.localize)(31,null)),e.SYMBOL_ICON_VARIABLE_FOREGROUND=(0,k.registerColor)("symbolIcon.variableForeground",{dark:"#75BEFF",light:"#007ACC",hcDark:"#75BEFF",hcLight:"#007ACC"},(0,L.localize)(32,null))}),define(se[836],oe([1,0,26,116,658,177,254]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.toMenuItems=void 0;const E=Object.freeze({kind:k.CodeActionKind.Empty,title:(0,y.localize)(0,null)}),S=Object.freeze([{kind:k.CodeActionKind.QuickFix,title:(0,y.localize)(1,null)},{kind:k.CodeActionKind.RefactorExtract,title:(0,y.localize)(2,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.RefactorInline,title:(0,y.localize)(3,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.RefactorRewrite,title:(0,y.localize)(4,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.RefactorMove,title:(0,y.localize)(5,null),icon:L.Codicon.wrench},{kind:k.CodeActionKind.SurroundWith,title:(0,y.localize)(6,null),icon:L.Codicon.surroundWith},{kind:k.CodeActionKind.Source,title:(0,y.localize)(7,null),icon:L.Codicon.symbolFile},E]);function p(_,v,b){if(!v)return _.map(n=>{var t;return{kind:"action",item:n,group:E,disabled:!!n.action.disabled,label:n.action.disabled||n.action.title,canPreview:!!(!((t=n.action.edit)===null||t===void 0)&&t.edits.length)}});const a=S.map(n=>({group:n,actions:[]}));for(const n of _){const t=n.action.kind?new k.CodeActionKind(n.action.kind):k.CodeActionKind.None;for(const r of a)if(r.group.kind.contains(t)){r.actions.push(n);break}}const i=[];for(const n of a)if(n.actions.length){i.push({kind:"header",group:n.group});for(const t of n.actions){const r=n.group;i.push({kind:"action",item:t,group:t.action.isAI?{title:r.title,kind:r.kind,icon:L.Codicon.sparkle}:r,label:t.action.title,disabled:!!t.action.disabled,keybinding:b(t.action)})}}return i}e.toMenuItems=p}),define(se[106],oe([1,0,29,39]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.defaultMenuStyles=e.defaultSelectBoxStyles=e.getListStyles=e.defaultListStyles=e.defaultBreadcrumbsWidgetStyles=e.defaultCountBadgeStyles=e.defaultFindWidgetStyles=e.defaultInputBoxStyles=e.defaultDialogStyles=e.defaultCheckboxStyles=e.defaultToggleStyles=e.defaultProgressBarStyles=e.defaultButtonStyles=e.defaultKeybindingLabelStyles=void 0;function y(S,p){const _={...p};for(const v in S){const b=S[v];_[v]=b!==void 0?(0,L.asCssVariable)(b):void 0}return _}e.defaultKeybindingLabelStyles={keybindingLabelBackground:(0,L.asCssVariable)(L.keybindingLabelBackground),keybindingLabelForeground:(0,L.asCssVariable)(L.keybindingLabelForeground),keybindingLabelBorder:(0,L.asCssVariable)(L.keybindingLabelBorder),keybindingLabelBottomBorder:(0,L.asCssVariable)(L.keybindingLabelBottomBorder),keybindingLabelShadow:(0,L.asCssVariable)(L.widgetShadow)},e.defaultButtonStyles={buttonForeground:(0,L.asCssVariable)(L.buttonForeground),buttonSeparator:(0,L.asCssVariable)(L.buttonSeparator),buttonBackground:(0,L.asCssVariable)(L.buttonBackground),buttonHoverBackground:(0,L.asCssVariable)(L.buttonHoverBackground),buttonSecondaryForeground:(0,L.asCssVariable)(L.buttonSecondaryForeground),buttonSecondaryBackground:(0,L.asCssVariable)(L.buttonSecondaryBackground),buttonSecondaryHoverBackground:(0,L.asCssVariable)(L.buttonSecondaryHoverBackground),buttonBorder:(0,L.asCssVariable)(L.buttonBorder)},e.defaultProgressBarStyles={progressBarBackground:(0,L.asCssVariable)(L.progressBarBackground)},e.defaultToggleStyles={inputActiveOptionBorder:(0,L.asCssVariable)(L.inputActiveOptionBorder),inputActiveOptionForeground:(0,L.asCssVariable)(L.inputActiveOptionForeground),inputActiveOptionBackground:(0,L.asCssVariable)(L.inputActiveOptionBackground)},e.defaultCheckboxStyles={checkboxBackground:(0,L.asCssVariable)(L.checkboxBackground),checkboxBorder:(0,L.asCssVariable)(L.checkboxBorder),checkboxForeground:(0,L.asCssVariable)(L.checkboxForeground)},e.defaultDialogStyles={dialogBackground:(0,L.asCssVariable)(L.editorWidgetBackground),dialogForeground:(0,L.asCssVariable)(L.editorWidgetForeground),dialogShadow:(0,L.asCssVariable)(L.widgetShadow),dialogBorder:(0,L.asCssVariable)(L.contrastBorder),errorIconForeground:(0,L.asCssVariable)(L.problemsErrorIconForeground),warningIconForeground:(0,L.asCssVariable)(L.problemsWarningIconForeground),infoIconForeground:(0,L.asCssVariable)(L.problemsInfoIconForeground),textLinkForeground:(0,L.asCssVariable)(L.textLinkForeground)},e.defaultInputBoxStyles={inputBackground:(0,L.asCssVariable)(L.inputBackground),inputForeground:(0,L.asCssVariable)(L.inputForeground),inputBorder:(0,L.asCssVariable)(L.inputBorder),inputValidationInfoBorder:(0,L.asCssVariable)(L.inputValidationInfoBorder),inputValidationInfoBackground:(0,L.asCssVariable)(L.inputValidationInfoBackground),inputValidationInfoForeground:(0,L.asCssVariable)(L.inputValidationInfoForeground),inputValidationWarningBorder:(0,L.asCssVariable)(L.inputValidationWarningBorder),inputValidationWarningBackground:(0,L.asCssVariable)(L.inputValidationWarningBackground),inputValidationWarningForeground:(0,L.asCssVariable)(L.inputValidationWarningForeground),inputValidationErrorBorder:(0,L.asCssVariable)(L.inputValidationErrorBorder),inputValidationErrorBackground:(0,L.asCssVariable)(L.inputValidationErrorBackground),inputValidationErrorForeground:(0,L.asCssVariable)(L.inputValidationErrorForeground)},e.defaultFindWidgetStyles={listFilterWidgetBackground:(0,L.asCssVariable)(L.listFilterWidgetBackground),listFilterWidgetOutline:(0,L.asCssVariable)(L.listFilterWidgetOutline),listFilterWidgetNoMatchesOutline:(0,L.asCssVariable)(L.listFilterWidgetNoMatchesOutline),listFilterWidgetShadow:(0,L.asCssVariable)(L.listFilterWidgetShadow),inputBoxStyles:e.defaultInputBoxStyles,toggleStyles:e.defaultToggleStyles},e.defaultCountBadgeStyles={badgeBackground:(0,L.asCssVariable)(L.badgeBackground),badgeForeground:(0,L.asCssVariable)(L.badgeForeground),badgeBorder:(0,L.asCssVariable)(L.contrastBorder)},e.defaultBreadcrumbsWidgetStyles={breadcrumbsBackground:(0,L.asCssVariable)(L.breadcrumbsBackground),breadcrumbsForeground:(0,L.asCssVariable)(L.breadcrumbsForeground),breadcrumbsHoverForeground:(0,L.asCssVariable)(L.breadcrumbsFocusForeground),breadcrumbsFocusForeground:(0,L.asCssVariable)(L.breadcrumbsFocusForeground),breadcrumbsFocusAndSelectionForeground:(0,L.asCssVariable)(L.breadcrumbsActiveSelectionForeground)},e.defaultListStyles={listBackground:void 0,listInactiveFocusForeground:void 0,listFocusBackground:(0,L.asCssVariable)(L.listFocusBackground),listFocusForeground:(0,L.asCssVariable)(L.listFocusForeground),listFocusOutline:(0,L.asCssVariable)(L.listFocusOutline),listActiveSelectionBackground:(0,L.asCssVariable)(L.listActiveSelectionBackground),listActiveSelectionForeground:(0,L.asCssVariable)(L.listActiveSelectionForeground),listActiveSelectionIconForeground:(0,L.asCssVariable)(L.listActiveSelectionIconForeground),listFocusAndSelectionOutline:(0,L.asCssVariable)(L.listFocusAndSelectionOutline),listFocusAndSelectionBackground:(0,L.asCssVariable)(L.listActiveSelectionBackground),listFocusAndSelectionForeground:(0,L.asCssVariable)(L.listActiveSelectionForeground),listInactiveSelectionBackground:(0,L.asCssVariable)(L.listInactiveSelectionBackground),listInactiveSelectionIconForeground:(0,L.asCssVariable)(L.listInactiveSelectionIconForeground),listInactiveSelectionForeground:(0,L.asCssVariable)(L.listInactiveSelectionForeground),listInactiveFocusBackground:(0,L.asCssVariable)(L.listInactiveFocusBackground),listInactiveFocusOutline:(0,L.asCssVariable)(L.listInactiveFocusOutline),listHoverBackground:(0,L.asCssVariable)(L.listHoverBackground),listHoverForeground:(0,L.asCssVariable)(L.listHoverForeground),listDropOverBackground:(0,L.asCssVariable)(L.listDropOverBackground),listDropBetweenBackground:(0,L.asCssVariable)(L.listDropBetweenBackground),listSelectionOutline:(0,L.asCssVariable)(L.activeContrastBorder),listHoverOutline:(0,L.asCssVariable)(L.activeContrastBorder),treeIndentGuidesStroke:(0,L.asCssVariable)(L.treeIndentGuidesStroke),treeInactiveIndentGuidesStroke:(0,L.asCssVariable)(L.treeInactiveIndentGuidesStroke),tableColumnsBorder:(0,L.asCssVariable)(L.tableColumnsBorder),tableOddRowsBackgroundColor:(0,L.asCssVariable)(L.tableOddRowsBackgroundColor)};function E(S){return y(S,e.defaultListStyles)}e.getListStyles=E,e.defaultSelectBoxStyles={selectBackground:(0,L.asCssVariable)(L.selectBackground),selectListBackground:(0,L.asCssVariable)(L.selectListBackground),selectForeground:(0,L.asCssVariable)(L.selectForeground),decoratorRightForeground:(0,L.asCssVariable)(L.pickerGroupForeground),selectBorder:(0,L.asCssVariable)(L.selectBorder),focusBorder:(0,L.asCssVariable)(L.focusBorder),listFocusBackground:(0,L.asCssVariable)(L.quickInputListFocusBackground),listInactiveSelectionIconForeground:(0,L.asCssVariable)(L.quickInputListFocusIconForeground),listFocusForeground:(0,L.asCssVariable)(L.quickInputListFocusForeground),listFocusOutline:(0,L.asCssVariableWithDefault)(L.activeContrastBorder,k.Color.transparent.toString()),listHoverBackground:(0,L.asCssVariable)(L.listHoverBackground),listHoverForeground:(0,L.asCssVariable)(L.listHoverForeground),listHoverOutline:(0,L.asCssVariable)(L.activeContrastBorder),selectListBorder:(0,L.asCssVariable)(L.editorWidgetBorder),listBackground:void 0,listActiveSelectionBackground:void 0,listActiveSelectionForeground:void 0,listActiveSelectionIconForeground:void 0,listFocusAndSelectionBackground:void 0,listDropOverBackground:void 0,listDropBetweenBackground:void 0,listInactiveSelectionBackground:void 0,listInactiveSelectionForeground:void 0,listInactiveFocusBackground:void 0,listInactiveFocusOutline:void 0,listSelectionOutline:void 0,listFocusAndSelectionForeground:void 0,listFocusAndSelectionOutline:void 0,listInactiveFocusForeground:void 0,tableColumnsBorder:void 0,tableOddRowsBackgroundColor:void 0,treeIndentGuidesStroke:void 0,treeInactiveIndentGuidesStroke:void 0},e.defaultMenuStyles={shadowColor:(0,L.asCssVariable)(L.widgetShadow),borderColor:(0,L.asCssVariable)(L.menuBorder),foregroundColor:(0,L.asCssVariable)(L.menuForeground),backgroundColor:(0,L.asCssVariable)(L.menuBackground),selectionForegroundColor:(0,L.asCssVariable)(L.menuSelectionForeground),selectionBackgroundColor:(0,L.asCssVariable)(L.menuSelectionBackground),selectionBorderColor:(0,L.asCssVariable)(L.menuSelectionBorder),separatorColor:(0,L.asCssVariable)(L.menuSeparatorBackground),scrollbarShadow:(0,L.asCssVariable)(L.scrollbarShadow),scrollbarSliderBackground:(0,L.asCssVariable)(L.scrollbarSliderBackground),scrollbarSliderHoverBackground:(0,L.asCssVariable)(L.scrollbarSliderHoverBackground),scrollbarSliderActiveBackground:(0,L.asCssVariable)(L.scrollbarSliderActiveBackground)}}),define(se[837],oe([1,0,7,319,320,230,71,2,49,68,683,8,34,164,106,161]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";var u;Object.defineProperty(e,"__esModule",{value:!0}),e.AccessibilityProvider=e.OneReferenceRenderer=e.FileReferencesRenderer=e.IdentityProvider=e.StringRepresentationProvider=e.Delegate=e.DataSource=void 0;let f=class{constructor(w){this._resolverService=w}hasChildren(w){return w instanceof r.ReferencesModel||w instanceof r.FileReferences}getChildren(w){if(w instanceof r.ReferencesModel)return w.groups;if(w instanceof r.FileReferences)return w.resolve(this._resolverService).then(D=>D.children);throw new Error("bad tree")}};e.DataSource=f,e.DataSource=f=ke([ge(0,v.ITextModelService)],f);class c{getHeight(){return 23}getTemplateId(w){return w instanceof r.FileReferences?o.id:h.id}}e.Delegate=c;let d=class{constructor(w){this._keybindingService=w}getKeyboardNavigationLabel(w){var D;if(w instanceof r.OneReference){const I=(D=w.parent.getPreview(w))===null||D===void 0?void 0:D.preview(w.range);if(I)return I.value}return(0,_.basename)(w.uri)}};e.StringRepresentationProvider=d,e.StringRepresentationProvider=d=ke([ge(0,i.IKeybindingService)],d);class s{getId(w){return w instanceof r.OneReference?w.id:w.uri}}e.IdentityProvider=s;let l=class extends p.Disposable{constructor(w,D){super(),this._labelService=D;const I=document.createElement("div");I.classList.add("reference-file"),this.file=this._register(new E.IconLabel(I,{supportHighlights:!0})),this.badge=new k.CountBadge(L.append(I,L.$(".count")),{},t.defaultCountBadgeStyles),w.appendChild(I)}set(w,D){const I=(0,_.dirname)(w.uri);this.file.setLabel(this._labelService.getUriBasenameLabel(w.uri),this._labelService.getUriLabel(I,{relative:!0}),{title:this._labelService.getUriLabel(w.uri),matches:D});const T=w.children.length;this.badge.setCount(T),T>1?this.badge.setTitleFormat((0,b.localize)(0,null,T)):this.badge.setTitleFormat((0,b.localize)(1,null,T))}};l=ke([ge(1,n.ILabelService)],l);let o=u=class{constructor(w){this._instantiationService=w,this.templateId=u.id}renderTemplate(w){return this._instantiationService.createInstance(l,w)}renderElement(w,D,I){I.set(w.element,(0,S.createMatches)(w.filterData))}disposeTemplate(w){w.dispose()}};e.FileReferencesRenderer=o,o.id="FileReferencesRenderer",e.FileReferencesRenderer=o=u=ke([ge(0,a.IInstantiationService)],o);class g{constructor(w){this.label=new y.HighlightedLabel(w)}set(w,D){var I;const T=(I=w.parent.getPreview(w))===null||I===void 0?void 0:I.preview(w.range);if(!T||!T.value)this.label.set(`${(0,_.basename)(w.uri)}:${w.range.startLineNumber+1}:${w.range.startColumn+1}`);else{const{value:A,highlight:P}=T;D&&!S.FuzzyScore.isDefault(D)?(this.label.element.classList.toggle("referenceMatch",!1),this.label.set(A,(0,S.createMatches)(D))):(this.label.element.classList.toggle("referenceMatch",!0),this.label.set(A,[P]))}}}class h{constructor(){this.templateId=h.id}renderTemplate(w){return new g(w)}renderElement(w,D,I){I.set(w.element,w.filterData)}disposeTemplate(){}}e.OneReferenceRenderer=h,h.id="OneReferenceRenderer";class m{getWidgetAriaLabel(){return(0,b.localize)(2,null)}getAriaLabel(w){return w.ariaMessage}}e.AccessibilityProvider=m}),define(se[838],oe([1,0,7,224,119,19,26,2,17,28,731,59,34,106,29,276]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ActionList=e.previewSelectedActionCommand=e.acceptSelectedActionCommand=void 0,e.acceptSelectedActionCommand="acceptSelectedCodeAction",e.previewSelectedActionCommand="previewSelectedCodeAction";class r{get templateId(){return"header"}renderTemplate(g){g.classList.add("group-header");const h=document.createElement("span");return g.append(h),{container:g,text:h}}renderElement(g,h,m){var C,w;m.text.textContent=(w=(C=g.group)===null||C===void 0?void 0:C.title)!==null&&w!==void 0?w:""}disposeTemplate(g){}}let u=class{get templateId(){return"action"}constructor(g,h){this._supportsPreview=g,this._keybindingService=h}renderTemplate(g){g.classList.add(this.templateId);const h=document.createElement("div");h.className="icon",g.append(h);const m=document.createElement("span");m.className="title",g.append(m);const C=new k.KeybindingLabel(g,_.OS);return{container:g,icon:h,text:m,keybinding:C}}renderElement(g,h,m){var C,w,D;if(!((C=g.group)===null||C===void 0)&&C.icon?(m.icon.className=v.ThemeIcon.asClassName(g.group.icon),g.group.icon.color&&(m.icon.style.color=(0,t.asCssVariable)(g.group.icon.color.id))):(m.icon.className=v.ThemeIcon.asClassName(S.Codicon.lightBulb),m.icon.style.color="var(--vscode-editorLightBulb-foreground)"),!g.item||!g.label)return;m.text.textContent=l(g.label),m.keybinding.set(g.keybinding),L.setVisibility(!!g.keybinding,m.keybinding.element);const I=(w=this._keybindingService.lookupKeybinding(e.acceptSelectedActionCommand))===null||w===void 0?void 0:w.getLabel(),T=(D=this._keybindingService.lookupKeybinding(e.previewSelectedActionCommand))===null||D===void 0?void 0:D.getLabel();m.container.classList.toggle("option-disabled",g.disabled),g.disabled?m.container.title=g.label:I&&T?this._supportsPreview&&g.canPreview?m.container.title=(0,b.localize)(0,null,I,T):m.container.title=(0,b.localize)(1,null,I):m.container.title=""}disposeTemplate(g){}};u=ke([ge(1,i.IKeybindingService)],u);class f extends UIEvent{constructor(){super("acceptSelectedAction")}}class c extends UIEvent{constructor(){super("previewSelectedAction")}}function d(o){if(o.kind==="action")return o.label}let s=class extends p.Disposable{constructor(g,h,m,C,w,D){super(),this._delegate=C,this._contextViewService=w,this._keybindingService=D,this._actionLineHeight=24,this._headerLineHeight=26,this.cts=this._register(new E.CancellationTokenSource),this.domNode=document.createElement("div"),this.domNode.classList.add("actionList");const I={getHeight:T=>T.kind==="header"?this._headerLineHeight:this._actionLineHeight,getTemplateId:T=>T.kind};this._list=this._register(new y.List(g,this.domNode,I,[new u(h,this._keybindingService),new r],{keyboardSupport:!1,typeNavigationEnabled:!0,keyboardNavigationLabelProvider:{getKeyboardNavigationLabel:d},accessibilityProvider:{getAriaLabel:T=>{if(T.kind==="action"){let A=T.label?l(T?.label):"";return T.disabled&&(A=(0,b.localize)(2,null,A,T.disabled)),A}return null},getWidgetAriaLabel:()=>(0,b.localize)(3,null),getRole:T=>T.kind==="action"?"option":"separator",getWidgetRole:()=>"listbox"}})),this._list.style(n.defaultListStyles),this._register(this._list.onMouseClick(T=>this.onListClick(T))),this._register(this._list.onMouseOver(T=>this.onListHover(T))),this._register(this._list.onDidChangeFocus(()=>this.onFocus())),this._register(this._list.onDidChangeSelection(T=>this.onListSelection(T))),this._allMenuItems=m,this._list.splice(0,this._list.length,this._allMenuItems),this._list.length&&this.focusNext()}focusCondition(g){return!g.disabled&&g.kind==="action"}hide(g){this._delegate.onHide(g),this.cts.cancel(),this._contextViewService.hideContextView()}layout(g){const h=this._allMenuItems.filter(T=>T.kind==="header").length,C=this._allMenuItems.length*this._actionLineHeight+h*this._headerLineHeight-h*this._actionLineHeight;this._list.layout(C);let w=g;if(this._allMenuItems.length>=50)w=380;else{const T=this._allMenuItems.map((A,P)=>{const N=this.domNode.ownerDocument.getElementById(this._list.getElementID(P));if(N){N.style.width="auto";const M=N.getBoundingClientRect().width;return N.style.width="",M}return 0});w=Math.max(...T,g)}const D=.7,I=Math.min(C,this.domNode.ownerDocument.body.clientHeight*D);return this._list.layout(I,w),this.domNode.style.height=`${I}px`,this._list.domFocus(),w}focusPrevious(){this._list.focusPrevious(1,!0,void 0,this.focusCondition)}focusNext(){this._list.focusNext(1,!0,void 0,this.focusCondition)}acceptSelected(g){const h=this._list.getFocus();if(h.length===0)return;const m=h[0],C=this._list.element(m);if(!this.focusCondition(C))return;const w=g?new c:new f;this._list.setSelection([m],w)}onListSelection(g){if(!g.elements.length)return;const h=g.elements[0];h.item&&this.focusCondition(h)?this._delegate.onSelect(h.item,g.browserEvent instanceof c):this._list.setSelection([])}onFocus(){var g,h;const m=this._list.getFocus();if(m.length===0)return;const C=m[0],w=this._list.element(C);(h=(g=this._delegate).onFocus)===null||h===void 0||h.call(g,w.item)}async onListHover(g){const h=g.element;if(h&&h.item&&this.focusCondition(h)){if(this._delegate.onHover&&!h.disabled&&h.kind==="action"){const m=await this._delegate.onHover(h.item,this.cts.token);h.canPreview=m?m.canPreview:void 0}g.index&&this._list.splice(g.index,1,[h])}this._list.setFocus(typeof g.index=="number"?[g.index]:[])}onListClick(g){g.element&&this.focusCondition(g.element)&&this._list.setFocus([])}};e.ActionList=s,e.ActionList=s=ke([ge(4,a.IContextViewService),ge(5,i.IKeybindingService)],s);function l(o){return o.replace(/\r\n|\r|\n/g," ")}}),define(se[839],oe([1,0,7,78,2,732,838,30,15,59,45,8,29,276]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IActionWidgetService=void 0,(0,i.registerColor)("actionBar.toggledBackground",{dark:i.inputActiveOptionBackground,light:i.inputActiveOptionBackground,hcDark:i.inputActiveOptionBackground,hcLight:i.inputActiveOptionBackground},(0,E.localize)(0,null));const n={Visible:new _.RawContextKey("codeActionMenuVisible",!1,(0,E.localize)(1,null))};e.IActionWidgetService=(0,a.createDecorator)("actionWidgetService");let t=class extends y.Disposable{get isVisible(){return n.Visible.getValue(this._contextKeyService)||!1}constructor(f,c,d){super(),this._contextViewService=f,this._contextKeyService=c,this._instantiationService=d,this._list=this._register(new y.MutableDisposable)}show(f,c,d,s,l,o,g){const h=n.Visible.bindTo(this._contextKeyService),m=this._instantiationService.createInstance(S.ActionList,f,c,d,s);this._contextViewService.showContextView({getAnchor:()=>l,render:C=>(h.set(!0),this._renderWidget(C,m,g??[])),onHide:C=>{h.reset(),this._onWidgetClosed(C)}},o,!1)}acceptSelected(f){var c;(c=this._list.value)===null||c===void 0||c.acceptSelected(f)}focusPrevious(){var f,c;(c=(f=this._list)===null||f===void 0?void 0:f.value)===null||c===void 0||c.focusPrevious()}focusNext(){var f,c;(c=(f=this._list)===null||f===void 0?void 0:f.value)===null||c===void 0||c.focusNext()}hide(){var f;(f=this._list.value)===null||f===void 0||f.hide(),this._list.clear()}_renderWidget(f,c,d){var s;const l=document.createElement("div");if(l.classList.add("action-widget"),f.appendChild(l),this._list.value=c,this._list.value)l.appendChild(this._list.value.domNode);else throw new Error("List has no value");const o=new y.DisposableStore,g=document.createElement("div"),h=f.appendChild(g);h.classList.add("context-view-block"),o.add(L.addDisposableListener(h,L.EventType.MOUSE_DOWN,T=>T.stopPropagation()));const m=document.createElement("div"),C=f.appendChild(m);C.classList.add("context-view-pointerBlock"),o.add(L.addDisposableListener(C,L.EventType.POINTER_MOVE,()=>C.remove())),o.add(L.addDisposableListener(C,L.EventType.MOUSE_DOWN,()=>C.remove()));let w=0;if(d.length){const T=this._createActionBar(".action-widget-action-bar",d);T&&(l.appendChild(T.getContainer().parentElement),o.add(T),w=T.getContainer().offsetWidth)}const D=(s=this._list.value)===null||s===void 0?void 0:s.layout(w);l.style.width=`${D}px`;const I=o.add(L.trackFocus(f));return o.add(I.onDidBlur(()=>this.hide())),o}_createActionBar(f,c){if(!c.length)return;const d=L.$(f),s=new k.ActionBar(d);return s.push(c,{icon:!1,label:!0}),s}_onWidgetClosed(f){var c;(c=this._list.value)===null||c===void 0||c.hide(f)}};t=ke([ge(0,v.IContextViewService),ge(1,_.IContextKeyService),ge(2,a.IInstantiationService)],t),(0,b.registerSingleton)(e.IActionWidgetService,t,1);const r=100+1e3;(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:"hideCodeActionWidget",title:{value:(0,E.localize)(2,null),original:"Hide action widget"},precondition:n.Visible,keybinding:{weight:r,primary:9,secondary:[1033]}})}run(u){u.get(e.IActionWidgetService).hide()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:"selectPrevCodeAction",title:{value:(0,E.localize)(3,null),original:"Select previous action"},precondition:n.Visible,keybinding:{weight:r,primary:16,secondary:[2064],mac:{primary:16,secondary:[2064,302]}}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.focusPrevious()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:"selectNextCodeAction",title:{value:(0,E.localize)(4,null),original:"Select next action"},precondition:n.Visible,keybinding:{weight:r,primary:18,secondary:[2066],mac:{primary:18,secondary:[2066,300]}}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.focusNext()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:S.acceptSelectedActionCommand,title:{value:(0,E.localize)(5,null),original:"Accept selected action"},precondition:n.Visible,keybinding:{weight:r,primary:3,secondary:[2137]}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.acceptSelected()}}),(0,p.registerAction2)(class extends p.Action2{constructor(){super({id:S.previewSelectedActionCommand,title:{value:(0,E.localize)(6,null),original:"Preview selected action"},precondition:n.Visible,keybinding:{weight:r,primary:2051}})}run(u){const f=u.get(e.IActionWidgetService);f instanceof t&&f.acceptSelected(!0)}})}),define(se[840],oe([1,0,7,67,599,42,12,2,106]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextMenuHandler=void 0;class v{constructor(a,i,n,t){this.contextViewService=a,this.telemetryService=i,this.notificationService=n,this.keybindingService=t,this.focusToReturn=null,this.lastContainer=null,this.block=null,this.blockDisposable=null,this.options={blockMouse:!0}}configure(a){this.options=a}showContextMenu(a){const i=a.getActions();if(!i.length)return;this.focusToReturn=(0,L.getActiveElement)();let n;const t=a.domForShadowRoot instanceof HTMLElement?a.domForShadowRoot:void 0;this.contextViewService.showContextView({getAnchor:()=>a.getAnchor(),canRelayout:!1,anchorAlignment:a.anchorAlignment,anchorAxisAlignment:a.anchorAxisAlignment,render:r=>{var u;this.lastContainer=r;const f=a.getMenuClassName?a.getMenuClassName():"";f&&(r.className+=" "+f),this.options.blockMouse&&(this.block=r.appendChild((0,L.$)(".context-view-block")),this.block.style.position="fixed",this.block.style.cursor="initial",this.block.style.left="0",this.block.style.top="0",this.block.style.width="100%",this.block.style.height="100%",this.block.style.zIndex="-1",(u=this.blockDisposable)===null||u===void 0||u.dispose(),this.blockDisposable=(0,L.addDisposableListener)(this.block,L.EventType.MOUSE_DOWN,l=>l.stopPropagation()));const c=new p.DisposableStore,d=a.actionRunner||new E.ActionRunner;d.onWillRun(l=>this.onActionRun(l,!a.skipTelemetry),this,c),d.onDidRun(this.onDidActionRun,this,c),n=new y.Menu(r,i,{actionViewItemProvider:a.getActionViewItem,context:a.getActionsContext?a.getActionsContext():null,actionRunner:d,getKeyBinding:a.getKeyBinding?a.getKeyBinding:l=>this.keybindingService.lookupKeybinding(l.id)},_.defaultMenuStyles),n.onDidCancel(()=>this.contextViewService.hideContextView(!0),null,c),n.onDidBlur(()=>this.contextViewService.hideContextView(!0),null,c);const s=(0,L.getWindow)(r);return c.add((0,L.addDisposableListener)(s,L.EventType.BLUR,()=>this.contextViewService.hideContextView(!0))),c.add((0,L.addDisposableListener)(s,L.EventType.MOUSE_DOWN,l=>{if(l.defaultPrevented)return;const o=new k.StandardMouseEvent(s,l);let g=o.target;if(!o.rightButton){for(;g;){if(g===r)return;g=g.parentElement}this.contextViewService.hideContextView(!0)}})),(0,p.combinedDisposable)(c,n)},focus:()=>{n?.focus(!!a.autoSelectFirstItem)},onHide:r=>{var u,f,c;(u=a.onHide)===null||u===void 0||u.call(a,!!r),this.block&&(this.block.remove(),this.block=null),(f=this.blockDisposable)===null||f===void 0||f.dispose(),this.blockDisposable=null,this.lastContainer&&((0,L.getActiveElement)()===this.lastContainer||(0,L.isAncestor)((0,L.getActiveElement)(),this.lastContainer))&&((c=this.focusToReturn)===null||c===void 0||c.focus()),this.lastContainer=null}},t,!!t)}onActionRun(a,i){i&&this.telemetryService.publicLog2("workbenchActionExecuted",{id:a.action.id,from:"contextMenu"}),this.contextViewService.hideContextView(!1)}onDidActionRun(a){a.error&&!(0,S.isCancellationError)(a.error)&&this.notificationService.error(a.error)}}e.ContextMenuHandler=v}),define(se[192],oe([1,0,7,594,119,595,187,602,601,326,6,2,744,27,98,15,242,59,8,34,37,106]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WorkbenchCompressibleAsyncDataTree=e.WorkbenchAsyncDataTree=e.WorkbenchDataTree=e.WorkbenchCompressibleObjectTree=e.WorkbenchObjectTree=e.WorkbenchTable=e.WorkbenchPagedList=e.WorkbenchList=e.WorkbenchTreeFindOpen=e.WorkbenchTreeElementHasChild=e.WorkbenchTreeElementCanExpand=e.WorkbenchTreeElementHasParent=e.WorkbenchTreeElementCanCollapse=e.WorkbenchListSupportsFind=e.WorkbenchListSelectionNavigation=e.WorkbenchListMultiSelection=e.WorkbenchListDoubleSelection=e.WorkbenchListHasSelectionOrFocus=e.WorkbenchListFocusContextKey=e.WorkbenchListSupportsMultiSelectContextKey=e.WorkbenchTreeStickyScrollFocused=e.RawWorkbenchListFocusContextKey=e.WorkbenchListScrollAtBottomContextKey=e.WorkbenchListScrollAtTopContextKey=e.RawWorkbenchListScrollAtBoundaryContextKey=e.ListService=e.IListService=void 0,e.IListService=(0,c.createDecorator)("listService");class o{get lastFocusedList(){return this._lastFocusedWidget}constructor(){this.disposables=new a.DisposableStore,this.lists=[],this._lastFocusedWidget=void 0,this._hasCreatedStyleController=!1}setLastFocusedList(ce){var pe,ve;ce!==this._lastFocusedWidget&&((pe=this._lastFocusedWidget)===null||pe===void 0||pe.getHTMLElement().classList.remove("last-focused"),this._lastFocusedWidget=ce,(ve=this._lastFocusedWidget)===null||ve===void 0||ve.getHTMLElement().classList.add("last-focused"))}register(ce,pe){if(this._hasCreatedStyleController||(this._hasCreatedStyleController=!0,new y.DefaultStyleController((0,L.createStyleSheet)(),"").style(l.defaultListStyles)),this.lists.some(Ce=>Ce.widget===ce))throw new Error("Cannot register the same widget multiple times");const ve={widget:ce,extraContextKeys:pe};return this.lists.push(ve),(0,L.isActiveElement)(ce.getHTMLElement())&&this.setLastFocusedList(ce),(0,a.combinedDisposable)(ce.onDidFocus(()=>this.setLastFocusedList(ce)),(0,a.toDisposable)(()=>this.lists.splice(this.lists.indexOf(ve),1)),ce.onDidDispose(()=>{this.lists=this.lists.filter(Ce=>Ce!==ve),this._lastFocusedWidget===ce&&this.setLastFocusedList(void 0)}))}dispose(){this.disposables.dispose()}}e.ListService=o,e.RawWorkbenchListScrollAtBoundaryContextKey=new r.RawContextKey("listScrollAtBoundary","none"),e.WorkbenchListScrollAtTopContextKey=r.ContextKeyExpr.or(e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo("top"),e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo("both")),e.WorkbenchListScrollAtBottomContextKey=r.ContextKeyExpr.or(e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo("bottom"),e.RawWorkbenchListScrollAtBoundaryContextKey.isEqualTo("both")),e.RawWorkbenchListFocusContextKey=new r.RawContextKey("listFocus",!0),e.WorkbenchTreeStickyScrollFocused=new r.RawContextKey("treestickyScrollFocused",!1),e.WorkbenchListSupportsMultiSelectContextKey=new r.RawContextKey("listSupportsMultiselect",!0),e.WorkbenchListFocusContextKey=r.ContextKeyExpr.and(e.RawWorkbenchListFocusContextKey,r.ContextKeyExpr.not(u.InputFocusedContextKey),e.WorkbenchTreeStickyScrollFocused.negate()),e.WorkbenchListHasSelectionOrFocus=new r.RawContextKey("listHasSelectionOrFocus",!1),e.WorkbenchListDoubleSelection=new r.RawContextKey("listDoubleSelection",!1),e.WorkbenchListMultiSelection=new r.RawContextKey("listMultiSelection",!1),e.WorkbenchListSelectionNavigation=new r.RawContextKey("listSelectionNavigation",!1),e.WorkbenchListSupportsFind=new r.RawContextKey("listSupportsFind",!0),e.WorkbenchTreeElementCanCollapse=new r.RawContextKey("treeElementCanCollapse",!1),e.WorkbenchTreeElementHasParent=new r.RawContextKey("treeElementHasParent",!1),e.WorkbenchTreeElementCanExpand=new r.RawContextKey("treeElementCanExpand",!1),e.WorkbenchTreeElementHasChild=new r.RawContextKey("treeElementHasChild",!1),e.WorkbenchTreeFindOpen=new r.RawContextKey("treeFindOpen",!1);const g="listTypeNavigationMode",h="listAutomaticKeyboardNavigation";function m(ue,ce){const pe=ue.createScoped(ce.getHTMLElement());return e.RawWorkbenchListFocusContextKey.bindTo(pe),pe}function C(ue,ce){const pe=e.RawWorkbenchListScrollAtBoundaryContextKey.bindTo(ue),ve=()=>{const Ce=ce.scrollTop===0,Se=ce.scrollHeight-ce.renderHeight-ce.scrollTop<1;Ce&&Se?pe.set("both"):Ce?pe.set("top"):Se?pe.set("bottom"):pe.set("none")};return ve(),ce.onDidScroll(ve)}const w="workbench.list.multiSelectModifier",D="workbench.list.openMode",I="workbench.list.horizontalScrolling",T="workbench.list.defaultFindMode",A="workbench.list.typeNavigationMode",P="workbench.list.keyboardNavigation",N="workbench.list.scrollByPage",M="workbench.list.defaultFindMatchType",R="workbench.tree.indent",x="workbench.tree.renderIndentGuides",O="workbench.list.smoothScrolling",B="workbench.list.mouseWheelScrollSensitivity",W="workbench.list.fastScrollSensitivity",V="workbench.tree.expandMode",K="workbench.tree.enableStickyScroll",F="workbench.tree.stickyScrollMaxItemCount";function q(ue){return ue.getValue(w)==="alt"}class ie extends a.Disposable{constructor(ce){super(),this.configurationService=ce,this.useAltAsMultipleSelectionModifier=q(ce),this.registerListeners()}registerListeners(){this._register(this.configurationService.onDidChangeConfiguration(ce=>{ce.affectsConfiguration(w)&&(this.useAltAsMultipleSelectionModifier=q(this.configurationService))}))}isSelectionSingleChangeEvent(ce){return this.useAltAsMultipleSelectionModifier?ce.browserEvent.altKey:(0,y.isSelectionSingleChangeEvent)(ce)}isSelectionRangeChangeEvent(ce){return(0,y.isSelectionRangeChangeEvent)(ce)}}function ae(ue,ce){var pe;const ve=ue.get(n.IConfigurationService),Ce=ue.get(d.IKeybindingService),Se=new a.DisposableStore;return[{...ce,keyboardNavigationDelegate:{mightProducePrintableCharacter(Ee){return Ce.mightProducePrintableCharacter(Ee)}},smoothScrolling:!!ve.getValue(O),mouseWheelScrollSensitivity:ve.getValue(B),fastScrollSensitivity:ve.getValue(W),multipleSelectionController:(pe=ce.multipleSelectionController)!==null&&pe!==void 0?pe:Se.add(new ie(ve)),keyboardNavigationEventFilter:me(Ce),scrollByPage:!!ve.getValue(N)},Se]}let ne=class extends y.List{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const Be=typeof Se.horizontalScrolling<"u"?Se.horizontalScrolling:!!Ae.getValue(I),[De,Ie]=xe.invokeFunction(ae,Se);super(ce,pe,ve,Ce,{keyboardSupport:!1,...De,horizontalScrolling:Be}),this.disposables.add(Ie),this.contextKeyService=m(_e,this),this.disposables.add(C(this.contextKeyService,this)),this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(Se.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!Se.selectionNavigation),this.listHasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.listDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.listMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.horizontalScrolling=Se.horizontalScrolling,this._useAltAsMultipleSelectionModifier=q(Ae),this.disposables.add(this.contextKeyService),this.disposables.add(Ee.register(this)),this.updateStyles(Se.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const be=this.getSelection(),Ne=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(be.length>0||Ne.length>0),this.listMultiSelection.set(be.length>1),this.listDoubleSelection.set(be.length===2)})})),this.disposables.add(this.onDidChangeFocus(()=>{const be=this.getSelection(),Ne=this.getFocus();this.listHasSelectionOrFocus.set(be.length>0||Ne.length>0)})),this.disposables.add(Ae.onDidChangeConfiguration(be=>{be.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(Ae));let Ne={};if(be.affectsConfiguration(I)&&this.horizontalScrolling===void 0){const Pe=!!Ae.getValue(I);Ne={...Ne,horizontalScrolling:Pe}}if(be.affectsConfiguration(N)){const Pe=!!Ae.getValue(N);Ne={...Ne,scrollByPage:Pe}}if(be.affectsConfiguration(O)){const Pe=!!Ae.getValue(O);Ne={...Ne,smoothScrolling:Pe}}if(be.affectsConfiguration(B)){const Pe=Ae.getValue(B);Ne={...Ne,mouseWheelScrollSensitivity:Pe}}if(be.affectsConfiguration(W)){const Pe=Ae.getValue(W);Ne={...Ne,fastScrollSensitivity:Pe}}Object.keys(Ne).length>0&&this.updateOptions(Ne)})),this.navigator=new re(this,{configurationService:Ae,...Se}),this.disposables.add(this.navigator)}updateOptions(ce){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.updateStyles(ce.overrideStyles),ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyles(ce){this.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}};e.WorkbenchList=ne,e.WorkbenchList=ne=ke([ge(5,r.IContextKeyService),ge(6,e.IListService),ge(7,n.IConfigurationService),ge(8,c.IInstantiationService)],ne);let $=class extends k.PagedList{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const Be=typeof Se.horizontalScrolling<"u"?Se.horizontalScrolling:!!Ae.getValue(I),[De,Ie]=xe.invokeFunction(ae,Se);super(ce,pe,ve,Ce,{keyboardSupport:!1,...De,horizontalScrolling:Be}),this.disposables=new a.DisposableStore,this.disposables.add(Ie),this.contextKeyService=m(_e,this),this.disposables.add(C(this.contextKeyService,this.widget)),this.horizontalScrolling=Se.horizontalScrolling,this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(Se.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!Se.selectionNavigation),this._useAltAsMultipleSelectionModifier=q(Ae),this.disposables.add(this.contextKeyService),this.disposables.add(Ee.register(this)),this.updateStyles(Se.overrideStyles),this.disposables.add(Ae.onDidChangeConfiguration(be=>{be.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(Ae));let Ne={};if(be.affectsConfiguration(I)&&this.horizontalScrolling===void 0){const Pe=!!Ae.getValue(I);Ne={...Ne,horizontalScrolling:Pe}}if(be.affectsConfiguration(N)){const Pe=!!Ae.getValue(N);Ne={...Ne,scrollByPage:Pe}}if(be.affectsConfiguration(O)){const Pe=!!Ae.getValue(O);Ne={...Ne,smoothScrolling:Pe}}if(be.affectsConfiguration(B)){const Pe=Ae.getValue(B);Ne={...Ne,mouseWheelScrollSensitivity:Pe}}if(be.affectsConfiguration(W)){const Pe=Ae.getValue(W);Ne={...Ne,fastScrollSensitivity:Pe}}Object.keys(Ne).length>0&&this.updateOptions(Ne)})),this.navigator=new re(this,{configurationService:Ae,...Se}),this.disposables.add(this.navigator)}updateOptions(ce){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.updateStyles(ce.overrideStyles),ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyles(ce){this.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}dispose(){this.disposables.dispose(),super.dispose()}};e.WorkbenchPagedList=$,e.WorkbenchPagedList=$=ke([ge(5,r.IContextKeyService),ge(6,e.IListService),ge(7,n.IConfigurationService),ge(8,c.IInstantiationService)],$);let J=class extends E.Table{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be){const De=typeof _e.horizontalScrolling<"u"?_e.horizontalScrolling:!!xe.getValue(I),[Ie,fe]=Be.invokeFunction(ae,_e);super(ce,pe,ve,Ce,Se,{keyboardSupport:!1,...Ie,horizontalScrolling:De}),this.disposables.add(fe),this.contextKeyService=m(Ee,this),this.disposables.add(C(this.contextKeyService,this)),this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(_e.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!_e.selectionNavigation),this.listHasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.listDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.listMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.horizontalScrolling=_e.horizontalScrolling,this._useAltAsMultipleSelectionModifier=q(xe),this.disposables.add(this.contextKeyService),this.disposables.add(Ae.register(this)),this.updateStyles(_e.overrideStyles),this.disposables.add(this.onDidChangeSelection(()=>{const Ne=this.getSelection(),Pe=this.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.listHasSelectionOrFocus.set(Ne.length>0||Pe.length>0),this.listMultiSelection.set(Ne.length>1),this.listDoubleSelection.set(Ne.length===2)})})),this.disposables.add(this.onDidChangeFocus(()=>{const Ne=this.getSelection(),Pe=this.getFocus();this.listHasSelectionOrFocus.set(Ne.length>0||Pe.length>0)})),this.disposables.add(xe.onDidChangeConfiguration(Ne=>{Ne.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(xe));let Pe={};if(Ne.affectsConfiguration(I)&&this.horizontalScrolling===void 0){const ze=!!xe.getValue(I);Pe={...Pe,horizontalScrolling:ze}}if(Ne.affectsConfiguration(N)){const ze=!!xe.getValue(N);Pe={...Pe,scrollByPage:ze}}if(Ne.affectsConfiguration(O)){const ze=!!xe.getValue(O);Pe={...Pe,smoothScrolling:ze}}if(Ne.affectsConfiguration(B)){const ze=xe.getValue(B);Pe={...Pe,mouseWheelScrollSensitivity:ze}}if(Ne.affectsConfiguration(W)){const ze=xe.getValue(W);Pe={...Pe,fastScrollSensitivity:ze}}Object.keys(Pe).length>0&&this.updateOptions(Pe)})),this.navigator=new de(this,{configurationService:xe,..._e}),this.disposables.add(this.navigator)}updateOptions(ce){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.updateStyles(ce.overrideStyles),ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyles(ce){this.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}dispose(){this.disposables.dispose(),super.dispose()}};e.WorkbenchTable=J,e.WorkbenchTable=J=ke([ge(6,r.IContextKeyService),ge(7,e.IListService),ge(8,n.IConfigurationService),ge(9,c.IInstantiationService)],J);class Q extends a.Disposable{constructor(ce,pe){var ve;super(),this.widget=ce,this._onDidOpen=this._register(new b.Emitter),this.onDidOpen=this._onDidOpen.event,this._register(b.Event.filter(this.widget.onDidChangeSelection,Ce=>(0,L.isKeyboardEvent)(Ce.browserEvent))(Ce=>this.onSelectionFromKeyboard(Ce))),this._register(this.widget.onPointer(Ce=>this.onPointer(Ce.element,Ce.browserEvent))),this._register(this.widget.onMouseDblClick(Ce=>this.onMouseDblClick(Ce.element,Ce.browserEvent))),typeof pe?.openOnSingleClick!="boolean"&&pe?.configurationService?(this.openOnSingleClick=pe?.configurationService.getValue(D)!=="doubleClick",this._register(pe?.configurationService.onDidChangeConfiguration(Ce=>{Ce.affectsConfiguration(D)&&(this.openOnSingleClick=pe?.configurationService.getValue(D)!=="doubleClick")}))):this.openOnSingleClick=(ve=pe?.openOnSingleClick)!==null&&ve!==void 0?ve:!0}onSelectionFromKeyboard(ce){if(ce.elements.length!==1)return;const pe=ce.browserEvent,ve=typeof pe.preserveFocus=="boolean"?pe.preserveFocus:!0,Ce=typeof pe.pinned=="boolean"?pe.pinned:!ve,Se=!1;this._open(this.getSelectedElement(),ve,Ce,Se,ce.browserEvent)}onPointer(ce,pe){if(!this.openOnSingleClick||pe.detail===2)return;const Ce=pe.button===1,Se=!0,_e=Ce,Ee=pe.ctrlKey||pe.metaKey||pe.altKey;this._open(ce,Se,_e,Ee,pe)}onMouseDblClick(ce,pe){if(!pe)return;const ve=pe.target;if(ve.classList.contains("monaco-tl-twistie")||ve.classList.contains("monaco-icon-label")&&ve.classList.contains("folder-icon")&&pe.offsetX<16)return;const Se=!1,_e=!0,Ee=pe.ctrlKey||pe.metaKey||pe.altKey;this._open(ce,Se,_e,Ee,pe)}_open(ce,pe,ve,Ce,Se){ce&&this._onDidOpen.fire({editorOptions:{preserveFocus:pe,pinned:ve,revealIfVisible:!0},sideBySide:Ce,element:ce,browserEvent:Se})}}class re extends Q{constructor(ce,pe){super(ce,pe),this.widget=ce}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class de extends Q{constructor(ce,pe){super(ce,pe)}getSelectedElement(){return this.widget.getSelectedElements()[0]}}class he extends Q{constructor(ce,pe){super(ce,pe)}getSelectedElement(){var ce;return(ce=this.widget.getSelection()[0])!==null&&ce!==void 0?ce:void 0}}function me(ue){let ce=!1;return pe=>{if(pe.toKeyCodeChord().isModifierKey())return!1;if(ce)return ce=!1,!1;const ve=ue.softDispatch(pe,pe.target);return ve.kind===1?(ce=!0,!1):(ce=!1,ve.kind===0)}}let X=class extends v.ObjectTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const{options:Be,getTypeNavigationMode:De,disposable:Ie}=_e.invokeFunction(Z,Se);super(ce,pe,ve,Ce,Be),this.disposables.add(Ie),this.internals=new ee(this,Se,De,Se.overrideStyles,Ee,Ae,xe),this.disposables.add(this.internals)}updateOptions(ce){super.updateOptions(ce),this.internals.updateOptions(ce)}};e.WorkbenchObjectTree=X,e.WorkbenchObjectTree=X=ke([ge(5,c.IInstantiationService),ge(6,r.IContextKeyService),ge(7,e.IListService),ge(8,n.IConfigurationService)],X);let U=class extends v.CompressibleObjectTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe){const{options:Be,getTypeNavigationMode:De,disposable:Ie}=_e.invokeFunction(Z,Se);super(ce,pe,ve,Ce,Be),this.disposables.add(Ie),this.internals=new ee(this,Se,De,Se.overrideStyles,Ee,Ae,xe),this.disposables.add(this.internals)}updateOptions(ce={}){super.updateOptions(ce),ce.overrideStyles&&this.internals.updateStyleOverrides(ce.overrideStyles),this.internals.updateOptions(ce)}};e.WorkbenchCompressibleObjectTree=U,e.WorkbenchCompressibleObjectTree=U=ke([ge(5,c.IInstantiationService),ge(6,r.IContextKeyService),ge(7,e.IListService),ge(8,n.IConfigurationService)],U);let G=class extends _.DataTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be){const{options:De,getTypeNavigationMode:Ie,disposable:fe}=Ee.invokeFunction(Z,_e);super(ce,pe,ve,Ce,Se,De),this.disposables.add(fe),this.internals=new ee(this,_e,Ie,_e.overrideStyles,Ae,xe,Be),this.disposables.add(this.internals)}updateOptions(ce={}){super.updateOptions(ce),ce.overrideStyles!==void 0&&this.internals.updateStyleOverrides(ce.overrideStyles),this.internals.updateOptions(ce)}};e.WorkbenchDataTree=G,e.WorkbenchDataTree=G=ke([ge(6,c.IInstantiationService),ge(7,r.IContextKeyService),ge(8,e.IListService),ge(9,n.IConfigurationService)],G);let z=class extends p.AsyncDataTree{get onDidOpen(){return this.internals.onDidOpen}constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be){const{options:De,getTypeNavigationMode:Ie,disposable:fe}=Ee.invokeFunction(Z,_e);super(ce,pe,ve,Ce,Se,De),this.disposables.add(fe),this.internals=new ee(this,_e,Ie,_e.overrideStyles,Ae,xe,Be),this.disposables.add(this.internals)}updateOptions(ce={}){super.updateOptions(ce),ce.overrideStyles&&this.internals.updateStyleOverrides(ce.overrideStyles),this.internals.updateOptions(ce)}};e.WorkbenchAsyncDataTree=z,e.WorkbenchAsyncDataTree=z=ke([ge(6,c.IInstantiationService),ge(7,r.IContextKeyService),ge(8,e.IListService),ge(9,n.IConfigurationService)],z);let H=class extends p.CompressibleAsyncDataTree{constructor(ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be,De){const{options:Ie,getTypeNavigationMode:fe,disposable:be}=Ae.invokeFunction(Z,Ee);super(ce,pe,ve,Ce,Se,_e,Ie),this.disposables.add(be),this.internals=new ee(this,Ee,fe,Ee.overrideStyles,xe,Be,De),this.disposables.add(this.internals)}updateOptions(ce){super.updateOptions(ce),this.internals.updateOptions(ce)}};e.WorkbenchCompressibleAsyncDataTree=H,e.WorkbenchCompressibleAsyncDataTree=H=ke([ge(7,c.IInstantiationService),ge(8,r.IContextKeyService),ge(9,e.IListService),ge(10,n.IConfigurationService)],H);function Y(ue){const ce=ue.getValue(T);if(ce==="highlight")return S.TreeFindMode.Highlight;if(ce==="filter")return S.TreeFindMode.Filter;const pe=ue.getValue(P);if(pe==="simple"||pe==="highlight")return S.TreeFindMode.Highlight;if(pe==="filter")return S.TreeFindMode.Filter}function j(ue){const ce=ue.getValue(M);if(ce==="fuzzy")return S.TreeFindMatchType.Fuzzy;if(ce==="contiguous")return S.TreeFindMatchType.Contiguous}function Z(ue,ce){var pe;const ve=ue.get(n.IConfigurationService),Ce=ue.get(f.IContextViewService),Se=ue.get(r.IContextKeyService),_e=ue.get(c.IInstantiationService),Ee=()=>{const fe=Se.getContextKeyValue(g);if(fe==="automatic")return y.TypeNavigationMode.Automatic;if(fe==="trigger"||Se.getContextKeyValue(h)===!1)return y.TypeNavigationMode.Trigger;const Ne=ve.getValue(A);if(Ne==="automatic")return y.TypeNavigationMode.Automatic;if(Ne==="trigger")return y.TypeNavigationMode.Trigger},Ae=ce.horizontalScrolling!==void 0?ce.horizontalScrolling:!!ve.getValue(I),[xe,Be]=_e.invokeFunction(ae,ce),De=ce.paddingBottom,Ie=ce.renderIndentGuides!==void 0?ce.renderIndentGuides:ve.getValue(x);return{getTypeNavigationMode:Ee,disposable:Be,options:{keyboardSupport:!1,...xe,indent:typeof ve.getValue(R)=="number"?ve.getValue(R):void 0,renderIndentGuides:Ie,smoothScrolling:!!ve.getValue(O),defaultFindMode:Y(ve),defaultFindMatchType:j(ve),horizontalScrolling:Ae,scrollByPage:!!ve.getValue(N),paddingBottom:De,hideTwistiesOfChildlessElements:ce.hideTwistiesOfChildlessElements,expandOnlyOnTwistieClick:(pe=ce.expandOnlyOnTwistieClick)!==null&&pe!==void 0?pe:ve.getValue(V)==="doubleClick",contextViewProvider:Ce,findWidgetStyles:l.defaultFindWidgetStyles,enableStickyScroll:!!ve.getValue(K),stickyScrollMaxItemCount:Number(ve.getValue(F))}}}let ee=class{get onDidOpen(){return this.navigator.onDidOpen}constructor(ce,pe,ve,Ce,Se,_e,Ee){var Ae;this.tree=ce,this.disposables=[],this.contextKeyService=m(Se,ce),this.disposables.push(C(this.contextKeyService,ce)),this.listSupportsMultiSelect=e.WorkbenchListSupportsMultiSelectContextKey.bindTo(this.contextKeyService),this.listSupportsMultiSelect.set(pe.multipleSelectionSupport!==!1),e.WorkbenchListSelectionNavigation.bindTo(this.contextKeyService).set(!!pe.selectionNavigation),this.listSupportFindWidget=e.WorkbenchListSupportsFind.bindTo(this.contextKeyService),this.listSupportFindWidget.set((Ae=pe.findWidgetEnabled)!==null&&Ae!==void 0?Ae:!0),this.hasSelectionOrFocus=e.WorkbenchListHasSelectionOrFocus.bindTo(this.contextKeyService),this.hasDoubleSelection=e.WorkbenchListDoubleSelection.bindTo(this.contextKeyService),this.hasMultiSelection=e.WorkbenchListMultiSelection.bindTo(this.contextKeyService),this.treeElementCanCollapse=e.WorkbenchTreeElementCanCollapse.bindTo(this.contextKeyService),this.treeElementHasParent=e.WorkbenchTreeElementHasParent.bindTo(this.contextKeyService),this.treeElementCanExpand=e.WorkbenchTreeElementCanExpand.bindTo(this.contextKeyService),this.treeElementHasChild=e.WorkbenchTreeElementHasChild.bindTo(this.contextKeyService),this.treeFindOpen=e.WorkbenchTreeFindOpen.bindTo(this.contextKeyService),this.treeStickyScrollFocused=e.WorkbenchTreeStickyScrollFocused.bindTo(this.contextKeyService),this._useAltAsMultipleSelectionModifier=q(Ee),this.updateStyleOverrides(Ce);const Be=()=>{const Ie=ce.getFocus()[0];if(!Ie)return;const fe=ce.getNode(Ie);this.treeElementCanCollapse.set(fe.collapsible&&!fe.collapsed),this.treeElementHasParent.set(!!ce.getParentElement(Ie)),this.treeElementCanExpand.set(fe.collapsible&&fe.collapsed),this.treeElementHasChild.set(!!ce.getFirstElementChild(Ie))},De=new Set;De.add(g),De.add(h),this.disposables.push(this.contextKeyService,_e.register(ce),ce.onDidChangeSelection(()=>{const Ie=ce.getSelection(),fe=ce.getFocus();this.contextKeyService.bufferChangeEvents(()=>{this.hasSelectionOrFocus.set(Ie.length>0||fe.length>0),this.hasMultiSelection.set(Ie.length>1),this.hasDoubleSelection.set(Ie.length===2)})}),ce.onDidChangeFocus(()=>{const Ie=ce.getSelection(),fe=ce.getFocus();this.hasSelectionOrFocus.set(Ie.length>0||fe.length>0),Be()}),ce.onDidChangeCollapseState(Be),ce.onDidChangeModel(Be),ce.onDidChangeFindOpenState(Ie=>this.treeFindOpen.set(Ie)),ce.onDidChangeStickyScrollFocused(Ie=>this.treeStickyScrollFocused.set(Ie)),Ee.onDidChangeConfiguration(Ie=>{let fe={};if(Ie.affectsConfiguration(w)&&(this._useAltAsMultipleSelectionModifier=q(Ee)),Ie.affectsConfiguration(R)){const be=Ee.getValue(R);fe={...fe,indent:be}}if(Ie.affectsConfiguration(x)&&pe.renderIndentGuides===void 0){const be=Ee.getValue(x);fe={...fe,renderIndentGuides:be}}if(Ie.affectsConfiguration(O)){const be=!!Ee.getValue(O);fe={...fe,smoothScrolling:be}}if(Ie.affectsConfiguration(T)||Ie.affectsConfiguration(P)){const be=Y(Ee);fe={...fe,defaultFindMode:be}}if(Ie.affectsConfiguration(A)||Ie.affectsConfiguration(P)){const be=ve();fe={...fe,typeNavigationMode:be}}if(Ie.affectsConfiguration(M)){const be=j(Ee);fe={...fe,defaultFindMatchType:be}}if(Ie.affectsConfiguration(I)&&pe.horizontalScrolling===void 0){const be=!!Ee.getValue(I);fe={...fe,horizontalScrolling:be}}if(Ie.affectsConfiguration(N)){const be=!!Ee.getValue(N);fe={...fe,scrollByPage:be}}if(Ie.affectsConfiguration(V)&&pe.expandOnlyOnTwistieClick===void 0&&(fe={...fe,expandOnlyOnTwistieClick:Ee.getValue(V)==="doubleClick"}),Ie.affectsConfiguration(K)){const be=Ee.getValue(K);fe={...fe,enableStickyScroll:be}}if(Ie.affectsConfiguration(F)){const be=Math.max(1,Ee.getValue(F));fe={...fe,stickyScrollMaxItemCount:be}}if(Ie.affectsConfiguration(B)){const be=Ee.getValue(B);fe={...fe,mouseWheelScrollSensitivity:be}}if(Ie.affectsConfiguration(W)){const be=Ee.getValue(W);fe={...fe,fastScrollSensitivity:be}}Object.keys(fe).length>0&&ce.updateOptions(fe)}),this.contextKeyService.onDidChangeContext(Ie=>{Ie.affectsSome(De)&&ce.updateOptions({typeNavigationMode:ve()})})),this.navigator=new he(ce,{configurationService:Ee,...pe}),this.disposables.push(this.navigator)}updateOptions(ce){ce.multipleSelectionSupport!==void 0&&this.listSupportsMultiSelect.set(!!ce.multipleSelectionSupport)}updateStyleOverrides(ce){this.tree.style(ce?(0,l.getListStyles)(ce):l.defaultListStyles)}dispose(){this.disposables=(0,a.dispose)(this.disposables)}};ee=ke([ge(4,r.IContextKeyService),ge(5,e.IListService),ge(6,n.IConfigurationService)],ee),s.Registry.as(t.Extensions.Configuration).registerConfiguration({id:"workbench",order:7,title:(0,i.localize)(0,null),type:"object",properties:{[w]:{type:"string",enum:["ctrlCmd","alt"],markdownEnumDescriptions:[(0,i.localize)(1,null),(0,i.localize)(2,null)],default:"ctrlCmd",description:(0,i.localize)(3,null)},[D]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:(0,i.localize)(4,null)},[I]:{type:"boolean",default:!1,description:(0,i.localize)(5,null)},[N]:{type:"boolean",default:!1,description:(0,i.localize)(6,null)},[R]:{type:"number",default:8,minimum:4,maximum:40,description:(0,i.localize)(7,null)},[x]:{type:"string",enum:["none","onHover","always"],default:"onHover",description:(0,i.localize)(8,null)},[O]:{type:"boolean",default:!1,description:(0,i.localize)(9,null)},[B]:{type:"number",default:1,markdownDescription:(0,i.localize)(10,null)},[W]:{type:"number",default:5,markdownDescription:(0,i.localize)(11,null)},[T]:{type:"string",enum:["highlight","filter"],enumDescriptions:[(0,i.localize)(12,null),(0,i.localize)(13,null)],default:"highlight",description:(0,i.localize)(14,null)},[P]:{type:"string",enum:["simple","highlight","filter"],enumDescriptions:[(0,i.localize)(15,null),(0,i.localize)(16,null),(0,i.localize)(17,null)],default:"highlight",description:(0,i.localize)(18,null),deprecated:!0,deprecationMessage:(0,i.localize)(19,null)},[M]:{type:"string",enum:["fuzzy","contiguous"],enumDescriptions:[(0,i.localize)(20,null),(0,i.localize)(21,null)],default:"fuzzy",description:(0,i.localize)(22,null)},[V]:{type:"string",enum:["singleClick","doubleClick"],default:"singleClick",description:(0,i.localize)(23,null)},[K]:{type:"boolean",default:!0,description:(0,i.localize)(24,null)},[F]:{type:"number",minimum:1,default:7,markdownDescription:(0,i.localize)(25,null)},[A]:{type:"string",enum:["automatic","trigger"],default:"automatic",markdownDescription:(0,i.localize)(26,null)}}})}),define(se[82],oe([1,0,14,26,28,6,20,22,753,245,37]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.spinningLoading=e.syncing=e.gotoNextLocation=e.gotoPreviousLocation=e.widgetClose=e.iconsSchemaId=e.getIconRegistry=e.registerIcon=e.IconFontDefinition=e.IconContribution=e.Extensions=void 0,e.Extensions={IconContribution:"base.contributions.icons"};var a;(function(s){function l(o,g){let h=o.defaults;for(;y.ThemeIcon.isThemeIcon(h);){const m=t.getIcon(h.id);if(!m)return;h=m.defaults}return h}s.getDefinition=l})(a||(e.IconContribution=a={}));var i;(function(s){function l(g){return{weight:g.weight,style:g.style,src:g.src.map(h=>({format:h.format,location:h.location.toString()}))}}s.toJSONObject=l;function o(g){const h=m=>(0,S.isString)(m)?m:void 0;if(g&&Array.isArray(g.src)&&g.src.every(m=>(0,S.isString)(m.format)&&(0,S.isString)(m.location)))return{weight:h(g.weight),style:h(g.style),src:g.src.map(m=>({format:m.format,location:p.URI.parse(m.location)}))}}s.fromJSONObject=o})(i||(e.IconFontDefinition=i={}));class n{constructor(){this._onDidChange=new E.Emitter,this.onDidChange=this._onDidChange.event,this.iconSchema={definitions:{icons:{type:"object",properties:{fontId:{type:"string",description:(0,_.localize)(0,null)},fontCharacter:{type:"string",description:(0,_.localize)(1,null)}},additionalProperties:!1,defaultSnippets:[{body:{fontCharacter:"\\\\e030"}}]}},type:"object",properties:{}},this.iconReferenceSchema={type:"string",pattern:`^${y.ThemeIcon.iconNameExpression}$`,enum:[],enumDescriptions:[]},this.iconsById={},this.iconFontsById={}}registerIcon(l,o,g,h){const m=this.iconsById[l];if(m){if(g&&!m.description){m.description=g,this.iconSchema.properties[l].markdownDescription=`${g} $(${l})`;const D=this.iconReferenceSchema.enum.indexOf(l);D!==-1&&(this.iconReferenceSchema.enumDescriptions[D]=g),this._onDidChange.fire()}return m}const C={id:l,description:g,defaults:o,deprecationMessage:h};this.iconsById[l]=C;const w={$ref:"#/definitions/icons"};return h&&(w.deprecationMessage=h),g&&(w.markdownDescription=`${g}: $(${l})`),this.iconSchema.properties[l]=w,this.iconReferenceSchema.enum.push(l),this.iconReferenceSchema.enumDescriptions.push(g||""),this._onDidChange.fire(),{id:l}}getIcons(){return Object.keys(this.iconsById).map(l=>this.iconsById[l])}getIcon(l){return this.iconsById[l]}getIconSchema(){return this.iconSchema}toString(){const l=(m,C)=>m.id.localeCompare(C.id),o=m=>{for(;y.ThemeIcon.isThemeIcon(m.defaults);)m=this.iconsById[m.defaults.id];return`codicon codicon-${m?m.id:""}`},g=[];g.push("| preview | identifier | default codicon ID | description"),g.push("| ----------- | --------------------------------- | --------------------------------- | --------------------------------- |");const h=Object.keys(this.iconsById).map(m=>this.iconsById[m]);for(const m of h.filter(C=>!!C.description).sort(l))g.push(`||${m.id}|${y.ThemeIcon.isThemeIcon(m.defaults)?m.defaults.id:m.id}|${m.description||""}|`);g.push("| preview | identifier "),g.push("| ----------- | --------------------------------- |");for(const m of h.filter(C=>!y.ThemeIcon.isThemeIcon(C.defaults)).sort(l))g.push(`||${m.id}|`);return g.join(` `)}}const t=new n;b.Registry.add(e.Extensions.IconContribution,t);function r(s,l,o,g){return t.registerIcon(s,l,o,g)}e.registerIcon=r;function u(){return t}e.getIconRegistry=u;function f(){const s=(0,k.getCodiconFontCharacters)();for(const l in s){const o="\\"+s[l].toString(16);t.registerIcon(l,{fontCharacter:o})}}f(),e.iconsSchemaId="vscode://schemas/icons";const c=b.Registry.as(v.Extensions.JSONContribution);c.registerSchema(e.iconsSchemaId,t.getIconSchema());const d=new L.RunOnceScheduler(()=>c.notifySchemaChanged(e.iconsSchemaId),200);t.onDidChange(()=>{d.isScheduled()||d.schedule()}),e.widgetClose=r("widget-close",k.Codicon.close,(0,_.localize)(2,null)),e.gotoPreviousLocation=r("goto-previous-location",k.Codicon.arrowUp,(0,_.localize)(3,null)),e.gotoNextLocation=r("goto-next-location",k.Codicon.arrowDown,(0,_.localize)(4,null)),e.syncing=y.ThemeIcon.modify(k.Codicon.sync,"spin"),e.spinningLoading=y.ThemeIcon.modify(k.Codicon.loading,"spin")}),define(se[841],oe([1,0,7,93,78,77,42,13,26,2,35,28,72,87,36,62,73,10,5,112,43,94,120,86,622,122,8,82,447]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AccessibleDiffViewer=void 0;const D=(0,w.registerIcon)("diff-review-insert",_.Codicon.add,(0,h.localize)(0,null)),I=(0,w.registerIcon)("diff-review-remove",_.Codicon.remove,(0,h.localize)(1,null)),T=(0,w.registerIcon)("diff-review-close",_.Codicon.close,(0,h.localize)(2,null));let A=class extends v.Disposable{constructor(q,ie,ae,ne,$,J,Q,re,de){super(),this._parentNode=q,this._visible=ie,this._setVisible=ae,this._canClose=ne,this._width=$,this._height=J,this._diffs=Q,this._editors=re,this._instantiationService=de,this._state=(0,b.derivedWithStore)(this,(he,me)=>{const X=this._visible.read(he);if(this._parentNode.style.visibility=X?"visible":"hidden",!X)return null;const U=me.add(this._instantiationService.createInstance(P,this._diffs,this._editors,this._setVisible,this._canClose)),G=me.add(this._instantiationService.createInstance(K,this._parentNode,U,this._width,this._height,this._editors));return{model:U,view:G}}).recomputeInitiallyAndOnChange(this._store)}next(){(0,b.transaction)(q=>{const ie=this._visible.get();this._setVisible(!0,q),ie&&this._state.get().model.nextGroup(q)})}prev(){(0,b.transaction)(q=>{this._setVisible(!0,q),this._state.get().model.previousGroup(q)})}close(){(0,b.transaction)(q=>{this._setVisible(!1,q)})}};e.AccessibleDiffViewer=A,A._ttPolicy=(0,k.createTrustedTypesPolicy)("diffReview",{createHTML:F=>F}),e.AccessibleDiffViewer=A=ke([ge(8,C.IInstantiationService)],A);let P=class extends v.Disposable{constructor(q,ie,ae,ne,$){super(),this._diffs=q,this._editors=ie,this._setVisible=ae,this.canClose=ne,this._audioCueService=$,this._groups=(0,b.observableValue)(this,[]),this._currentGroupIdx=(0,b.observableValue)(this,0),this._currentElementIdx=(0,b.observableValue)(this,0),this.groups=this._groups,this.currentGroup=this._currentGroupIdx.map((J,Q)=>this._groups.read(Q)[J]),this.currentGroupIndex=this._currentGroupIdx,this.currentElement=this._currentElementIdx.map((J,Q)=>{var re;return(re=this.currentGroup.read(Q))===null||re===void 0?void 0:re.lines[J]}),this._register((0,b.autorun)(J=>{const Q=this._diffs.read(J);if(!Q){this._groups.set([],void 0);return}const re=M(Q,this._editors.original.getModel().getLineCount(),this._editors.modified.getModel().getLineCount());(0,b.transaction)(de=>{const he=this._editors.modified.getPosition();if(he){const me=re.findIndex(X=>he?.lineNumber{const Q=this.currentElement.read(J);Q?.type===R.Deleted?this._audioCueService.playAudioCue(m.AudioCue.diffLineDeleted,{source:"accessibleDiffViewer.currentElementChanged"}):Q?.type===R.Added&&this._audioCueService.playAudioCue(m.AudioCue.diffLineInserted,{source:"accessibleDiffViewer.currentElementChanged"})})),this._register((0,b.autorun)(J=>{var Q;const re=this.currentElement.read(J);if(re&&re.type!==R.Header){const de=(Q=re.modifiedLineNumber)!==null&&Q!==void 0?Q:re.diff.modified.startLineNumber;this._editors.modified.setSelection(c.Range.fromPositions(new f.Position(de,1)))}}))}_goToGroupDelta(q,ie){const ae=this.groups.get();!ae||ae.length<=1||(0,b.subtransaction)(ie,ne=>{this._currentGroupIdx.set(u.OffsetRange.ofLength(ae.length).clipCyclic(this._currentGroupIdx.get()+q),ne),this._currentElementIdx.set(0,ne)})}nextGroup(q){this._goToGroupDelta(1,q)}previousGroup(q){this._goToGroupDelta(-1,q)}_goToLineDelta(q){const ie=this.currentGroup.get();!ie||ie.lines.length<=1||(0,b.transaction)(ae=>{this._currentElementIdx.set(u.OffsetRange.ofLength(ie.lines.length).clip(this._currentElementIdx.get()+q),ae)})}goToNextLine(){this._goToLineDelta(1)}goToPreviousLine(){this._goToLineDelta(-1)}goToLine(q){const ie=this.currentGroup.get();if(!ie)return;const ae=ie.lines.indexOf(q);ae!==-1&&(0,b.transaction)(ne=>{this._currentElementIdx.set(ae,ne)})}revealCurrentElementInEditor(){this._setVisible(!1,void 0);const q=this.currentElement.get();q&&(q.type===R.Deleted?(this._editors.original.setSelection(c.Range.fromPositions(new f.Position(q.originalLineNumber,1))),this._editors.original.revealLine(q.originalLineNumber),this._editors.original.focus()):(q.type!==R.Header&&(this._editors.modified.setSelection(c.Range.fromPositions(new f.Position(q.modifiedLineNumber,1))),this._editors.modified.revealLine(q.modifiedLineNumber)),this._editors.modified.focus()))}close(){this._setVisible(!1,void 0),this._editors.modified.focus()}};P=ke([ge(4,m.IAudioCueService)],P);const N=3;function M(F,q,ie){const ae=[];for(const ne of(0,p.groupAdjacentBy)(F,($,J)=>J.modified.startLineNumber-$.modified.endLineNumberExclusive<2*N)){const $=[];$.push(new O);const J=new r.LineRange(Math.max(1,ne[0].original.startLineNumber-N),Math.min(ne[ne.length-1].original.endLineNumberExclusive+N,q+1)),Q=new r.LineRange(Math.max(1,ne[0].modified.startLineNumber-N),Math.min(ne[ne.length-1].modified.endLineNumberExclusive+N,ie+1));(0,p.forEachAdjacent)(ne,(he,me)=>{const X=new r.LineRange(he?he.original.endLineNumberExclusive:J.startLineNumber,me?me.original.startLineNumber:J.endLineNumberExclusive),U=new r.LineRange(he?he.modified.endLineNumberExclusive:Q.startLineNumber,me?me.modified.startLineNumber:Q.endLineNumberExclusive);X.forEach(G=>{$.push(new V(G,U.startLineNumber+(G-X.startLineNumber)))}),me&&(me.original.forEach(G=>{$.push(new B(me,G))}),me.modified.forEach(G=>{$.push(new W(me,G))}))});const re=ne[0].modified.join(ne[ne.length-1].modified),de=ne[0].original.join(ne[ne.length-1].original);ae.push(new x(new d.LineRangeMapping(re,de),$))}return ae}var R;(function(F){F[F.Header=0]="Header",F[F.Unchanged=1]="Unchanged",F[F.Deleted=2]="Deleted",F[F.Added=3]="Added"})(R||(R={}));class x{constructor(q,ie){this.range=q,this.lines=ie}}class O{constructor(){this.type=R.Header}}class B{constructor(q,ie){this.diff=q,this.originalLineNumber=ie,this.type=R.Deleted,this.modifiedLineNumber=void 0}}class W{constructor(q,ie){this.diff=q,this.modifiedLineNumber=ie,this.type=R.Added,this.originalLineNumber=void 0}}class V{constructor(q,ie){this.originalLineNumber=q,this.modifiedLineNumber=ie,this.type=R.Unchanged}}let K=class extends v.Disposable{constructor(q,ie,ae,ne,$,J){super(),this._element=q,this._model=ie,this._width=ae,this._height=ne,this._editors=$,this._languageService=J,this.domNode=this._element,this.domNode.className="diff-review monaco-editor-background";const Q=document.createElement("div");Q.className="diff-review-actions",this._actionBar=this._register(new y.ActionBar(Q)),this._register((0,b.autorun)(re=>{this._actionBar.clear(),this._model.canClose.read(re)&&this._actionBar.push(new S.Action("diffreview.close",(0,h.localize)(3,null),"close-diff-review "+a.ThemeIcon.asClassName(T),!0,async()=>ie.close()),{label:!1,icon:!0})})),this._content=document.createElement("div"),this._content.className="diff-review-content",this._content.setAttribute("role","code"),this._scrollbar=this._register(new E.DomScrollableElement(this._content,{})),(0,L.reset)(this.domNode,this._scrollbar.getDomNode(),Q),this._register((0,v.toDisposable)(()=>{(0,L.reset)(this.domNode)})),this._register((0,n.applyStyle)(this.domNode,{width:this._width,height:this._height})),this._register((0,n.applyStyle)(this._content,{width:this._width,height:this._height})),this._register((0,b.autorunWithStore)((re,de)=>{this._model.currentGroup.read(re),this._render(de)})),this._register((0,L.addStandardDisposableListener)(this.domNode,"keydown",re=>{(re.equals(18)||re.equals(2066)||re.equals(530))&&(re.preventDefault(),this._model.goToNextLine()),(re.equals(16)||re.equals(2064)||re.equals(528))&&(re.preventDefault(),this._model.goToPreviousLine()),(re.equals(9)||re.equals(2057)||re.equals(521)||re.equals(1033))&&(re.preventDefault(),this._model.close()),(re.equals(10)||re.equals(3))&&(re.preventDefault(),this._model.revealCurrentElementInEditor())}))}_render(q){const ie=this._editors.original.getOptions(),ae=this._editors.modified.getOptions(),ne=document.createElement("div");ne.className="diff-review-table",ne.setAttribute("role","list"),ne.setAttribute("aria-label",(0,h.localize)(4,null)),(0,i.applyFontInfo)(ne,ae.get(50)),(0,L.reset)(this._content,ne);const $=this._editors.original.getModel(),J=this._editors.modified.getModel();if(!$||!J)return;const Q=$.getOptions(),re=J.getOptions(),de=ae.get(66),he=this._model.currentGroup.get();for(const me of he?.lines||[]){if(!he)break;let X;if(me.type===R.Header){const G=document.createElement("div");G.className="diff-review-row",G.setAttribute("role","listitem");const z=he.range,H=this._model.currentGroupIndex.get(),Y=this._model.groups.get().length,j=ue=>ue===0?(0,h.localize)(5,null):ue===1?(0,h.localize)(6,null):(0,h.localize)(7,null,ue),Z=j(z.original.length),ee=j(z.modified.length);G.setAttribute("aria-label",(0,h.localize)(8,null,H+1,Y,z.original.startLineNumber,Z,z.modified.startLineNumber,ee));const le=document.createElement("div");le.className="diff-review-cell diff-review-summary",le.appendChild(document.createTextNode(`${H+1}/${Y}: @@ -${z.original.startLineNumber},${z.original.length} +${z.modified.startLineNumber},${z.modified.length} @@`)),G.appendChild(le),X=G}else X=this._createRow(me,de,this._width.get(),ie,$,Q,ae,J,re);ne.appendChild(X);const U=(0,b.derived)(G=>this._model.currentElement.read(G)===me);q.add((0,b.autorun)(G=>{const z=U.read(G);X.tabIndex=z?0:-1,z&&X.focus()})),q.add((0,L.addDisposableListener)(X,"focus",()=>{this._model.goToLine(me)}))}this._scrollbar.scanDomNode()}_createRow(q,ie,ae,ne,$,J,Q,re,de){const he=ne.get(143),me=he.glyphMarginWidth+he.lineNumbersWidth,X=Q.get(143),U=10+X.glyphMarginWidth+X.lineNumbersWidth;let G="diff-review-row",z="";const H="diff-review-spacer";let Y=null;switch(q.type){case R.Added:G="diff-review-row line-insert",z=" char-insert",Y=D;break;case R.Deleted:G="diff-review-row line-delete",z=" char-delete",Y=I;break}const j=document.createElement("div");j.style.minWidth=ae+"px",j.className=G,j.setAttribute("role","listitem"),j.ariaLevel="";const Z=document.createElement("div");Z.className="diff-review-cell",Z.style.height=`${ie}px`,j.appendChild(Z);const ee=document.createElement("span");ee.style.width=me+"px",ee.style.minWidth=me+"px",ee.className="diff-review-line-number"+z,q.originalLineNumber!==void 0?ee.appendChild(document.createTextNode(String(q.originalLineNumber))):ee.innerText="\xA0",Z.appendChild(ee);const le=document.createElement("span");le.style.width=U+"px",le.style.minWidth=U+"px",le.style.paddingRight="10px",le.className="diff-review-line-number"+z,q.modifiedLineNumber!==void 0?le.appendChild(document.createTextNode(String(q.modifiedLineNumber))):le.innerText="\xA0",Z.appendChild(le);const ue=document.createElement("span");if(ue.className=H,Y){const ve=document.createElement("span");ve.className=a.ThemeIcon.asClassName(Y),ve.innerText="\xA0\xA0",ue.appendChild(ve)}else ue.innerText="\xA0\xA0";Z.appendChild(ue);let ce;if(q.modifiedLineNumber!==void 0){let ve=this._getLineHtml(re,Q,de.tabSize,q.modifiedLineNumber,this._languageService.languageIdCodec);A._ttPolicy&&(ve=A._ttPolicy.createHTML(ve)),Z.insertAdjacentHTML("beforeend",ve),ce=re.getLineContent(q.modifiedLineNumber)}else{let ve=this._getLineHtml($,ne,J.tabSize,q.originalLineNumber,this._languageService.languageIdCodec);A._ttPolicy&&(ve=A._ttPolicy.createHTML(ve)),Z.insertAdjacentHTML("beforeend",ve),ce=$.getLineContent(q.originalLineNumber)}ce.length===0&&(ce=(0,h.localize)(9,null));let pe="";switch(q.type){case R.Unchanged:q.originalLineNumber===q.modifiedLineNumber?pe=(0,h.localize)(10,null,ce,q.originalLineNumber):pe=(0,h.localize)(11,null,ce,q.originalLineNumber,q.modifiedLineNumber);break;case R.Added:pe=(0,h.localize)(12,null,ce,q.modifiedLineNumber);break;case R.Deleted:pe=(0,h.localize)(13,null,ce,q.originalLineNumber);break}return j.setAttribute("aria-label",pe),j}_getLineHtml(q,ie,ae,ne,$){const J=q.getLineContent(ne),Q=ie.get(50),re=l.LineTokens.createEmpty(J,$),de=g.ViewLineRenderingData.isBasicASCII(J,q.mightContainNonBasicASCII()),he=g.ViewLineRenderingData.containsRTL(J,de,q.mightContainRTL());return(0,o.renderViewLine2)(new o.RenderLineInput(Q.isMonospace&&!ie.get(33),Q.canUseHalfwidthRightwardsArrow,J,!1,de,he,0,re,[],ae,0,Q.spaceWidth,Q.middotWidth,Q.wsmiddotWidth,ie.get(116),ie.get(98),ie.get(93),ie.get(51)!==t.EditorFontLigatures.OFF,null)).html}};K=ke([ge(5,s.ILanguageService)],K)}),define(se[842],oe([1,0,54,7,157,76,26,39,6,2,28,661,29,82,201]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorPickerWidget=e.InsertButton=e.ColorPickerBody=e.ColorPickerHeader=void 0;const t=k.$;class r extends v.Disposable{constructor(m,C,w,D=!1){super(),this.model=C,this.showingStandaloneColorPicker=D,this._closeButton=null,this._domNode=t(".colorpicker-header"),k.append(m,this._domNode),this._pickedColorNode=k.append(this._domNode,t(".picked-color")),k.append(this._pickedColorNode,t("span.codicon.codicon-color-mode")),this._pickedColorPresentation=k.append(this._pickedColorNode,document.createElement("span")),this._pickedColorPresentation.classList.add("picked-color-presentation");const I=(0,a.localize)(0,null);this._pickedColorNode.setAttribute("title",I),this._originalColorNode=k.append(this._domNode,t(".original-color")),this._originalColorNode.style.backgroundColor=p.Color.Format.CSS.format(this.model.originalColor)||"",this.backgroundColor=w.getColorTheme().getColor(i.editorHoverBackground)||p.Color.white,this._register(w.onDidColorThemeChange(T=>{this.backgroundColor=T.getColor(i.editorHoverBackground)||p.Color.white})),this._register(k.addDisposableListener(this._pickedColorNode,k.EventType.CLICK,()=>this.model.selectNextColorPresentation())),this._register(k.addDisposableListener(this._originalColorNode,k.EventType.CLICK,()=>{this.model.color=this.model.originalColor,this.model.flushColor()})),this._register(C.onDidChangeColor(this.onDidChangeColor,this)),this._register(C.onDidChangePresentation(this.onDidChangePresentation,this)),this._pickedColorNode.style.backgroundColor=p.Color.Format.CSS.format(C.color)||"",this._pickedColorNode.classList.toggle("light",C.color.rgba.a<.5?this.backgroundColor.isLighter():C.color.isLighter()),this.onDidChangeColor(this.model.color),this.showingStandaloneColorPicker&&(this._domNode.classList.add("standalone-colorpicker"),this._closeButton=this._register(new u(this._domNode)))}get closeButton(){return this._closeButton}get pickedColorNode(){return this._pickedColorNode}get originalColorNode(){return this._originalColorNode}onDidChangeColor(m){this._pickedColorNode.style.backgroundColor=p.Color.Format.CSS.format(m)||"",this._pickedColorNode.classList.toggle("light",m.rgba.a<.5?this.backgroundColor.isLighter():m.isLighter()),this.onDidChangePresentation()}onDidChangePresentation(){this._pickedColorPresentation.textContent=this.model.presentation?this.model.presentation.label:""}}e.ColorPickerHeader=r;class u extends v.Disposable{constructor(m){super(),this._onClicked=this._register(new _.Emitter),this.onClicked=this._onClicked.event,this._button=document.createElement("div"),this._button.classList.add("close-button"),k.append(m,this._button);const C=document.createElement("div");C.classList.add("close-button-inner-div"),k.append(this._button,C),k.append(C,t(".button"+b.ThemeIcon.asCSSSelector((0,n.registerIcon)("color-picker-close",S.Codicon.close,(0,a.localize)(1,null))))).classList.add("close-icon"),this._register(k.addDisposableListener(this._button,k.EventType.CLICK,()=>{this._onClicked.fire()}))}}class f extends v.Disposable{constructor(m,C,w,D=!1){super(),this.model=C,this.pixelRatio=w,this._insertButton=null,this._domNode=t(".colorpicker-body"),k.append(m,this._domNode),this._saturationBox=new c(this._domNode,this.model,this.pixelRatio),this._register(this._saturationBox),this._register(this._saturationBox.onDidChange(this.onDidSaturationValueChange,this)),this._register(this._saturationBox.onColorFlushed(this.flushColor,this)),this._opacityStrip=new s(this._domNode,this.model,D),this._register(this._opacityStrip),this._register(this._opacityStrip.onDidChange(this.onDidOpacityChange,this)),this._register(this._opacityStrip.onColorFlushed(this.flushColor,this)),this._hueStrip=new l(this._domNode,this.model,D),this._register(this._hueStrip),this._register(this._hueStrip.onDidChange(this.onDidHueChange,this)),this._register(this._hueStrip.onColorFlushed(this.flushColor,this)),D&&(this._insertButton=this._register(new o(this._domNode)),this._domNode.classList.add("standalone-colorpicker"))}flushColor(){this.model.flushColor()}onDidSaturationValueChange({s:m,v:C}){const w=this.model.color.hsva;this.model.color=new p.Color(new p.HSVA(w.h,m,C,w.a))}onDidOpacityChange(m){const C=this.model.color.hsva;this.model.color=new p.Color(new p.HSVA(C.h,C.s,C.v,m))}onDidHueChange(m){const C=this.model.color.hsva,w=(1-m)*360;this.model.color=new p.Color(new p.HSVA(w===360?0:w,C.s,C.v,C.a))}get domNode(){return this._domNode}get saturationBox(){return this._saturationBox}get enterButton(){return this._insertButton}layout(){this._saturationBox.layout(),this._opacityStrip.layout(),this._hueStrip.layout()}}e.ColorPickerBody=f;class c extends v.Disposable{constructor(m,C,w){super(),this.model=C,this.pixelRatio=w,this._onDidChange=new _.Emitter,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new _.Emitter,this.onColorFlushed=this._onColorFlushed.event,this._domNode=t(".saturation-wrap"),k.append(m,this._domNode),this._canvas=document.createElement("canvas"),this._canvas.className="saturation-box",k.append(this._domNode,this._canvas),this.selection=t(".saturation-selection"),k.append(this._domNode,this.selection),this.layout(),this._register(k.addDisposableListener(this._domNode,k.EventType.POINTER_DOWN,D=>this.onPointerDown(D))),this._register(this.model.onDidChangeColor(this.onDidChangeColor,this)),this.monitor=null}get domNode(){return this._domNode}onPointerDown(m){if(!m.target||!(m.target instanceof Element))return;this.monitor=this._register(new y.GlobalPointerMoveMonitor);const C=k.getDomNodePagePosition(this._domNode);m.target!==this.selection&&this.onDidChangePosition(m.offsetX,m.offsetY),this.monitor.startMonitoring(m.target,m.pointerId,m.buttons,D=>this.onDidChangePosition(D.pageX-C.left,D.pageY-C.top),()=>null);const w=k.addDisposableListener(m.target.ownerDocument,k.EventType.POINTER_UP,()=>{this._onColorFlushed.fire(),w.dispose(),this.monitor&&(this.monitor.stopMonitoring(!0),this.monitor=null)},!0)}onDidChangePosition(m,C){const w=Math.max(0,Math.min(1,m/this.width)),D=Math.max(0,Math.min(1,1-C/this.height));this.paintSelection(w,D),this._onDidChange.fire({s:w,v:D})}layout(){this.width=this._domNode.offsetWidth,this.height=this._domNode.offsetHeight,this._canvas.width=this.width*this.pixelRatio,this._canvas.height=this.height*this.pixelRatio,this.paint();const m=this.model.color.hsva;this.paintSelection(m.s,m.v)}paint(){const m=this.model.color.hsva,C=new p.Color(new p.HSVA(m.h,1,1,1)),w=this._canvas.getContext("2d"),D=w.createLinearGradient(0,0,this._canvas.width,0);D.addColorStop(0,"rgba(255, 255, 255, 1)"),D.addColorStop(.5,"rgba(255, 255, 255, 0.5)"),D.addColorStop(1,"rgba(255, 255, 255, 0)");const I=w.createLinearGradient(0,0,0,this._canvas.height);I.addColorStop(0,"rgba(0, 0, 0, 0)"),I.addColorStop(1,"rgba(0, 0, 0, 1)"),w.rect(0,0,this._canvas.width,this._canvas.height),w.fillStyle=p.Color.Format.CSS.format(C),w.fill(),w.fillStyle=D,w.fill(),w.fillStyle=I,w.fill()}paintSelection(m,C){this.selection.style.left=`${m*this.width}px`,this.selection.style.top=`${this.height-C*this.height}px`}onDidChangeColor(m){if(this.monitor&&this.monitor.isMonitoring())return;this.paint();const C=m.hsva;this.paintSelection(C.s,C.v)}}class d extends v.Disposable{constructor(m,C,w=!1){super(),this.model=C,this._onDidChange=new _.Emitter,this.onDidChange=this._onDidChange.event,this._onColorFlushed=new _.Emitter,this.onColorFlushed=this._onColorFlushed.event,w?(this.domNode=k.append(m,t(".standalone-strip")),this.overlay=k.append(this.domNode,t(".standalone-overlay"))):(this.domNode=k.append(m,t(".strip")),this.overlay=k.append(this.domNode,t(".overlay"))),this.slider=k.append(this.domNode,t(".slider")),this.slider.style.top="0px",this._register(k.addDisposableListener(this.domNode,k.EventType.POINTER_DOWN,D=>this.onPointerDown(D))),this._register(C.onDidChangeColor(this.onDidChangeColor,this)),this.layout()}layout(){this.height=this.domNode.offsetHeight-this.slider.offsetHeight;const m=this.getValue(this.model.color);this.updateSliderPosition(m)}onDidChangeColor(m){const C=this.getValue(m);this.updateSliderPosition(C)}onPointerDown(m){if(!m.target||!(m.target instanceof Element))return;const C=this._register(new y.GlobalPointerMoveMonitor),w=k.getDomNodePagePosition(this.domNode);this.domNode.classList.add("grabbing"),m.target!==this.slider&&this.onDidChangeTop(m.offsetY),C.startMonitoring(m.target,m.pointerId,m.buttons,I=>this.onDidChangeTop(I.pageY-w.top),()=>null);const D=k.addDisposableListener(m.target.ownerDocument,k.EventType.POINTER_UP,()=>{this._onColorFlushed.fire(),D.dispose(),C.stopMonitoring(!0),this.domNode.classList.remove("grabbing")},!0)}onDidChangeTop(m){const C=Math.max(0,Math.min(1,1-m/this.height));this.updateSliderPosition(C),this._onDidChange.fire(C)}updateSliderPosition(m){this.slider.style.top=`${(1-m)*this.height}px`}}class s extends d{constructor(m,C,w=!1){super(m,C,w),this.domNode.classList.add("opacity-strip"),this.onDidChangeColor(this.model.color)}onDidChangeColor(m){super.onDidChangeColor(m);const{r:C,g:w,b:D}=m.rgba,I=new p.Color(new p.RGBA(C,w,D,1)),T=new p.Color(new p.RGBA(C,w,D,0));this.overlay.style.background=`linear-gradient(to bottom, ${I} 0%, ${T} 100%)`}getValue(m){return m.hsva.a}}class l extends d{constructor(m,C,w=!1){super(m,C,w),this.domNode.classList.add("hue-strip")}getValue(m){return 1-m.hsva.h/360}}class o extends v.Disposable{constructor(m){super(),this._onClicked=this._register(new _.Emitter),this.onClicked=this._onClicked.event,this._button=k.append(m,document.createElement("button")),this._button.classList.add("insert-button"),this._button.textContent="Insert",this._register(k.addDisposableListener(this._button,k.EventType.CLICK,()=>{this._onClicked.fire()}))}get button(){return this._button}}e.InsertButton=o;class g extends E.Widget{constructor(m,C,w,D,I=!1){super(),this.model=C,this.pixelRatio=w,this._register(L.PixelRatio.onDidChange(()=>this.layout()));const T=t(".colorpicker-widget");m.appendChild(T),this.header=this._register(new r(T,this.model,D,I)),this.body=this._register(new f(T,this.model,this.pixelRatio,I))}layout(){this.body.layout()}}e.ColorPickerWidget=g}),define(se[843],oe([1,0,7,48,77,26,6,2,11,20,43,104,241,705,15,57,29,82,28,473]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";var d;Object.defineProperty(e,"__esModule",{value:!0}),e.ParameterHintsWidget=void 0;const s=L.$,l=(0,f.registerIcon)("parameter-hints-next",E.Codicon.chevronDown,n.localize(0,null)),o=(0,f.registerIcon)("parameter-hints-previous",E.Codicon.chevronUp,n.localize(1,null));let g=d=class extends p.Disposable{constructor(m,C,w,D,I){super(),this.editor=m,this.model=C,this.renderDisposeables=this._register(new p.DisposableStore),this.visible=!1,this.announcedLabel=null,this.allowEditorOverflow=!0,this.markdownRenderer=this._register(new a.MarkdownRenderer({editor:m},I,D)),this.keyVisible=i.Context.Visible.bindTo(w),this.keyMultipleSignatures=i.Context.MultipleSignatures.bindTo(w)}createParameterHintDOMNodes(){const m=s(".editor-widget.parameter-hints-widget"),C=L.append(m,s(".phwrapper"));C.tabIndex=-1;const w=L.append(C,s(".controls")),D=L.append(w,s(".button"+c.ThemeIcon.asCSSSelector(o))),I=L.append(w,s(".overloads")),T=L.append(w,s(".button"+c.ThemeIcon.asCSSSelector(l)));this._register(L.addDisposableListener(D,"click",x=>{L.EventHelper.stop(x),this.previous()})),this._register(L.addDisposableListener(T,"click",x=>{L.EventHelper.stop(x),this.next()}));const A=s(".body"),P=new y.DomScrollableElement(A,{alwaysConsumeMouseWheel:!0});this._register(P),C.appendChild(P.getDomNode());const N=L.append(A,s(".signature")),M=L.append(A,s(".docs"));m.style.userSelect="text",this.domNodes={element:m,signature:N,overloads:I,docs:M,scrollbar:P},this.editor.addContentWidget(this),this.hide(),this._register(this.editor.onDidChangeCursorSelection(x=>{this.visible&&this.editor.layoutContentWidget(this)}));const R=()=>{if(!this.domNodes)return;const x=this.editor.getOption(50);this.domNodes.element.style.fontSize=`${x.fontSize}px`,this.domNodes.element.style.lineHeight=`${x.lineHeight/x.fontSize}`};R(),this._register(S.Event.chain(this.editor.onDidChangeConfiguration.bind(this.editor),x=>x.filter(O=>O.hasChanged(50)))(R)),this._register(this.editor.onDidLayoutChange(x=>this.updateMaxHeight())),this.updateMaxHeight()}show(){this.visible||(this.domNodes||this.createParameterHintDOMNodes(),this.keyVisible.set(!0),this.visible=!0,setTimeout(()=>{var m;(m=this.domNodes)===null||m===void 0||m.element.classList.add("visible")},100),this.editor.layoutContentWidget(this))}hide(){var m;this.renderDisposeables.clear(),this.visible&&(this.keyVisible.reset(),this.visible=!1,this.announcedLabel=null,(m=this.domNodes)===null||m===void 0||m.element.classList.remove("visible"),this.editor.layoutContentWidget(this))}getPosition(){return this.visible?{position:this.editor.getPosition(),preference:[1,2]}:null}render(m){var C;if(this.renderDisposeables.clear(),!this.domNodes)return;const w=m.signatures.length>1;this.domNodes.element.classList.toggle("multiple",w),this.keyMultipleSignatures.set(w),this.domNodes.signature.innerText="",this.domNodes.docs.innerText="";const D=m.signatures[m.activeSignature];if(!D)return;const I=L.append(this.domNodes.signature,s(".code")),T=this.editor.getOption(50);I.style.fontSize=`${T.fontSize}px`,I.style.fontFamily=T.fontFamily;const A=D.parameters.length>0,P=(C=D.activeParameter)!==null&&C!==void 0?C:m.activeParameter;if(A)this.renderParameters(I,D,P);else{const R=L.append(I,s("span"));R.textContent=D.label}const N=D.parameters[P];if(N?.documentation){const R=s("span.documentation");if(typeof N.documentation=="string")R.textContent=N.documentation;else{const x=this.renderMarkdownDocs(N.documentation);R.appendChild(x.element)}L.append(this.domNodes.docs,s("p",{},R))}if(D.documentation!==void 0)if(typeof D.documentation=="string")L.append(this.domNodes.docs,s("p",{},D.documentation));else{const R=this.renderMarkdownDocs(D.documentation);L.append(this.domNodes.docs,R.element)}const M=this.hasDocs(D,N);if(this.domNodes.signature.classList.toggle("has-docs",M),this.domNodes.docs.classList.toggle("empty",!M),this.domNodes.overloads.textContent=String(m.activeSignature+1).padStart(m.signatures.length.toString().length,"0")+"/"+m.signatures.length,N){let R="";const x=D.parameters[P];Array.isArray(x.label)?R=D.label.substring(x.label[0],x.label[1]):R=x.label,x.documentation&&(R+=typeof x.documentation=="string"?`, ${x.documentation}`:`, ${x.documentation.value}`),D.documentation&&(R+=typeof D.documentation=="string"?`, ${D.documentation}`:`, ${D.documentation.value}`),this.announcedLabel!==R&&(k.alert(n.localize(2,null,R)),this.announcedLabel=R)}this.editor.layoutContentWidget(this),this.domNodes.scrollbar.scanDomNode()}renderMarkdownDocs(m){const C=this.renderDisposeables.add(this.markdownRenderer.render(m,{asyncRenderCallback:()=>{var w;(w=this.domNodes)===null||w===void 0||w.scrollbar.scanDomNode()}}));return C.element.classList.add("markdown-docs"),C}hasDocs(m,C){return!!(C&&typeof C.documentation=="string"&&(0,v.assertIsDefined)(C.documentation).length>0||C&&typeof C.documentation=="object"&&(0,v.assertIsDefined)(C.documentation).value.length>0||m.documentation&&typeof m.documentation=="string"&&(0,v.assertIsDefined)(m.documentation).length>0||m.documentation&&typeof m.documentation=="object"&&(0,v.assertIsDefined)(m.documentation.value).length>0)}renderParameters(m,C,w){const[D,I]=this.getParameterLabelOffsets(C,w),T=document.createElement("span");T.textContent=C.label.substring(0,D);const A=document.createElement("span");A.textContent=C.label.substring(D,I),A.className="parameter active";const P=document.createElement("span");P.textContent=C.label.substring(I),L.append(m,T,A,P)}getParameterLabelOffsets(m,C){const w=m.parameters[C];if(w){if(Array.isArray(w.label))return w.label;if(w.label.length){const D=new RegExp(`(\\W|^)${(0,_.escapeRegExpCharacters)(w.label)}(?=\\W|$)`,"g");D.test(m.label);const I=D.lastIndex-w.label.length;return I>=0?[I,D.lastIndex]:[0,0]}else return[0,0]}else return[0,0]}next(){this.editor.focus(),this.model.next()}previous(){this.editor.focus(),this.model.previous()}getDomNode(){return this.domNodes||this.createParameterHintDOMNodes(),this.domNodes.element}getId(){return d.ID}updateMaxHeight(){if(!this.domNodes)return;const C=`${Math.max(this.editor.getLayoutInfo().height/4,250)}px`;this.domNodes.element.style.maxHeight=C;const w=this.domNodes.element.getElementsByClassName("phwrapper");w.length&&(w[0].style.maxHeight=C)}};e.ParameterHintsWidget=g,g.ID="editor.widget.parameterHintsWidget",e.ParameterHintsWidget=g=d=ke([ge(2,t.IContextKeyService),ge(3,r.IOpenerService),ge(4,b.ILanguageService)],g),(0,u.registerColor)("editorHoverWidget.highlightForeground",{dark:u.listHighlightForeground,light:u.listHighlightForeground,hcDark:u.listHighlightForeground,hcLight:u.listHighlightForeground},n.localize(3,null))}),define(se[844],oe([1,0,99,2,16,21,31,18,768,241,704,15,8,843]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";var t;Object.defineProperty(e,"__esModule",{value:!0}),e.TriggerParameterHintsAction=e.ParameterHintsController=void 0;let r=t=class extends k.Disposable{static get(s){return s.getContribution(t.ID)}constructor(s,l,o){super(),this.editor=s,this.model=this._register(new _.ParameterHintsModel(s,o.signatureHelpProvider)),this._register(this.model.onChangedHints(g=>{var h;g?(this.widget.value.show(),this.widget.value.render(g)):(h=this.widget.rawValue)===null||h===void 0||h.hide()})),this.widget=new L.Lazy(()=>this._register(l.createInstance(n.ParameterHintsWidget,this.editor,this.model)))}cancel(){this.model.cancel()}previous(){var s;(s=this.widget.rawValue)===null||s===void 0||s.previous()}next(){var s;(s=this.widget.rawValue)===null||s===void 0||s.next()}trigger(s){this.model.trigger(s,0)}};e.ParameterHintsController=r,r.ID="editor.controller.parameterHints",e.ParameterHintsController=r=t=ke([ge(1,i.IInstantiationService),ge(2,p.ILanguageFeaturesService)],r);class u extends y.EditorAction{constructor(){super({id:"editor.action.triggerParameterHints",label:b.localize(0,null),alias:"Trigger Parameter Hints",precondition:E.EditorContextKeys.hasSignatureHelpProvider,kbOpts:{kbExpr:E.EditorContextKeys.editorTextFocus,primary:3082,weight:100}})}run(s,l){const o=r.get(l);o?.trigger({triggerKind:S.SignatureHelpTriggerKind.Invoke})}}e.TriggerParameterHintsAction=u,(0,y.registerEditorContribution)(r.ID,r,2),(0,y.registerEditorAction)(u);const f=100+75,c=y.EditorCommand.bindToContribution(r.get);(0,y.registerEditorCommand)(new c({id:"closeParameterHints",precondition:v.Context.Visible,handler:d=>d.cancel(),kbOpts:{weight:f,kbExpr:E.EditorContextKeys.focus,primary:9,secondary:[1033]}})),(0,y.registerEditorCommand)(new c({id:"showPrevParameterHint",precondition:a.ContextKeyExpr.and(v.Context.Visible,v.Context.MultipleSignatures),handler:d=>d.previous(),kbOpts:{weight:f,kbExpr:E.EditorContextKeys.focus,primary:16,secondary:[528],mac:{primary:16,secondary:[528,302]}}})),(0,y.registerEditorCommand)(new c({id:"showNextParameterHint",precondition:a.ContextKeyExpr.and(v.Context.Visible,v.Context.MultipleSignatures),handler:d=>d.next(),kbOpts:{weight:f,kbExpr:E.EditorContextKeys.focus,primary:18,secondary:[530],mac:{primary:18,secondary:[530,300]}}}))}),define(se[845],oe([1,0,7,78,42,2,104,8,786,82,28,480]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BannerController=void 0;const a=26;let i=class extends E.Disposable{constructor(r,u){super(),this._editor=r,this.instantiationService=u,this.banner=this._register(this.instantiationService.createInstance(n))}hide(){this._editor.setBanner(null,0),this.banner.clear()}show(r){this.banner.show({...r,onClose:()=>{var u;this.hide(),(u=r.onClose)===null||u===void 0||u.call(r)}}),this._editor.setBanner(this.banner.element,a)}};e.BannerController=i,e.BannerController=i=ke([ge(1,p.IInstantiationService)],i);let n=class extends E.Disposable{constructor(r){super(),this.instantiationService=r,this.markdownRenderer=this.instantiationService.createInstance(S.MarkdownRenderer,{}),this.element=(0,L.$)("div.editor-banner"),this.element.tabIndex=0}getAriaLabel(r){if(r.ariaLabel)return r.ariaLabel;if(typeof r.message=="string")return r.message}getBannerMessage(r){if(typeof r=="string"){const u=(0,L.$)("span");return u.innerText=r,u}return this.markdownRenderer.render(r).element}clear(){(0,L.clearNode)(this.element)}show(r){(0,L.clearNode)(this.element);const u=this.getAriaLabel(r);u&&this.element.setAttribute("aria-label",u);const f=(0,L.append)(this.element,(0,L.$)("div.icon-container"));f.setAttribute("aria-hidden","true"),r.icon&&f.appendChild((0,L.$)(`div${b.ThemeIcon.asCSSSelector(r.icon)}`));const c=(0,L.append)(this.element,(0,L.$)("div.message-container"));if(c.setAttribute("aria-hidden","true"),c.appendChild(this.getBannerMessage(r.message)),this.messageActionsContainer=(0,L.append)(this.element,(0,L.$)("div.message-actions-container")),r.actions)for(const s of r.actions)this._register(this.instantiationService.createInstance(_.Link,this.messageActionsContainer,{...s,tabIndex:-1},{}));const d=(0,L.append)(this.element,(0,L.$)("div.action-container"));this.actionBar=this._register(new k.ActionBar(d)),this.actionBar.push(this._register(new y.Action("banner.close","Close Banner",b.ThemeIcon.asClassName(v.widgetClose),!0,()=>{typeof r.onClose=="function"&&r.onClose()})),{icon:!0,label:!1}),this.actionBar.setFocusable(!1)}};n=ke([ge(0,p.IInstantiationService)],n)}),define(se[846],oe([1,0,7,6,2,28,82]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UnthemedProductIconTheme=e.getIconsStyleSheet=void 0;function p(v){const b=new y.DisposableStore,a=b.add(new k.Emitter),i=(0,S.getIconRegistry)();return b.add(i.onDidChange(()=>a.fire())),v&&b.add(v.onDidProductIconThemeChange(()=>a.fire())),{dispose:()=>b.dispose(),onDidChange:a.event,getCSS(){const n=v?v.getProductIconTheme():new _,t={},r=f=>{const c=n.getIcon(f);if(!c)return;const d=c.font;return d?(t[d.id]=d.definition,`.codicon-${f.id}:before { content: '${c.fontCharacter}'; font-family: ${(0,L.asCSSPropertyValue)(d.id)}; }`):`.codicon-${f.id}:before { content: '${c.fontCharacter}'; }`},u=[];for(const f of i.getIcons()){const c=r(f);c&&u.push(c)}for(const f in t){const c=t[f],d=c.weight?`font-weight: ${c.weight};`:"",s=c.style?`font-style: ${c.style};`:"",l=c.src.map(o=>`${(0,L.asCSSUrl)(o.location)} format('${o.format}')`).join(", ");u.push(`@font-face { src: ${l}; font-family: ${(0,L.asCSSPropertyValue)(f)};${d}${s} font-display: block; }`)}return u.join(` `)}}}e.getIconsStyleSheet=p;class _{getIcon(b){const a=(0,S.getIconRegistry)();let i=b.defaults;for(;E.ThemeIcon.isThemeIcon(i);){const n=a.getIcon(i.id);if(!n)return;i=n.defaults}return i}}e.UnthemedProductIconTheme=_}),define(se[89],oe([1,0]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.isDark=e.isHighContrast=e.ColorScheme=void 0;var L;(function(E){E.DARK="dark",E.LIGHT="light",E.HIGH_CONTRAST_DARK="hcDark",E.HIGH_CONTRAST_LIGHT="hcLight"})(L||(e.ColorScheme=L={}));function k(E){return E===L.HIGH_CONTRAST_DARK||E===L.HIGH_CONTRAST_LIGHT}e.isHighContrast=k;function y(E){return E===L.DARK||E===L.HIGH_CONTRAST_DARK}e.isDark=y}),define(se[255],oe([1,0,54,40,17,494,148,155,120,89,36]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getColumnOfNodeOffset=e.ViewLine=e.ViewLineOptions=void 0;const a=function(){return y.isNative?!0:!(y.isLinux||L.isFirefox||L.isSafari)}();let i=!0;class n{constructor(g,h){this.themeType=h;const m=g.options,C=m.get(50);m.get(38)==="off"?this.renderWhitespace=m.get(98):this.renderWhitespace="none",this.renderControlCharacters=m.get(93),this.spaceWidth=C.spaceWidth,this.middotWidth=C.middotWidth,this.wsmiddotWidth=C.wsmiddotWidth,this.useMonospaceOptimizations=C.isMonospace&&!m.get(33),this.canUseHalfwidthRightwardsArrow=C.canUseHalfwidthRightwardsArrow,this.lineHeight=m.get(66),this.stopRenderingLineAfter=m.get(116),this.fontLigatures=m.get(51)}equals(g){return this.themeType===g.themeType&&this.renderWhitespace===g.renderWhitespace&&this.renderControlCharacters===g.renderControlCharacters&&this.spaceWidth===g.spaceWidth&&this.middotWidth===g.middotWidth&&this.wsmiddotWidth===g.wsmiddotWidth&&this.useMonospaceOptimizations===g.useMonospaceOptimizations&&this.canUseHalfwidthRightwardsArrow===g.canUseHalfwidthRightwardsArrow&&this.lineHeight===g.lineHeight&&this.stopRenderingLineAfter===g.stopRenderingLineAfter&&this.fontLigatures===g.fontLigatures}}e.ViewLineOptions=n;class t{constructor(g){this._options=g,this._isMaybeInvalid=!0,this._renderedViewLine=null}getDomNode(){return this._renderedViewLine&&this._renderedViewLine.domNode?this._renderedViewLine.domNode.domNode:null}setDomNode(g){if(this._renderedViewLine)this._renderedViewLine.domNode=(0,k.createFastDomNode)(g);else throw new Error("I have no rendered view line to set the dom node to...")}onContentChanged(){this._isMaybeInvalid=!0}onTokensChanged(){this._isMaybeInvalid=!0}onDecorationsChanged(){this._isMaybeInvalid=!0}onOptionsChanged(g){this._isMaybeInvalid=!0,this._options=g}onSelectionChanged(){return(0,v.isHighContrast)(this._options.themeType)||this._options.renderWhitespace==="selection"?(this._isMaybeInvalid=!0,!0):!1}renderLine(g,h,m,C){if(this._isMaybeInvalid===!1)return!1;this._isMaybeInvalid=!1;const w=m.getViewLineRenderingData(g),D=this._options,I=p.LineDecoration.filter(w.inlineDecorations,g,w.minColumn,w.maxColumn);let T=null;if((0,v.isHighContrast)(D.themeType)||this._options.renderWhitespace==="selection"){const M=m.selections;for(const R of M){if(R.endLineNumberg)continue;const x=R.startLineNumber===g?R.startColumn:w.minColumn,O=R.endLineNumber===g?R.endColumn:w.maxColumn;x');const P=(0,_.renderViewLine)(A,C);C.appendString("
    ");let N=null;return i&&a&&w.isBasicASCII&&D.useMonospaceOptimizations&&P.containsForeignElements===0&&(N=new r(this._renderedViewLine?this._renderedViewLine.domNode:null,A,P.characterMapping)),N||(N=c(this._renderedViewLine?this._renderedViewLine.domNode:null,A,P.characterMapping,P.containsRTL,P.containsForeignElements)),this._renderedViewLine=N,!0}layoutLine(g,h){this._renderedViewLine&&this._renderedViewLine.domNode&&(this._renderedViewLine.domNode.setTop(h),this._renderedViewLine.domNode.setHeight(this._options.lineHeight))}getWidth(g){return this._renderedViewLine?this._renderedViewLine.getWidth(g):0}getWidthIsFast(){return this._renderedViewLine?this._renderedViewLine.getWidthIsFast():!0}needsMonospaceFontCheck(){return this._renderedViewLine?this._renderedViewLine instanceof r:!1}monospaceAssumptionsAreValid(){return this._renderedViewLine&&this._renderedViewLine instanceof r?this._renderedViewLine.monospaceAssumptionsAreValid():i}onMonospaceAssumptionsInvalidated(){this._renderedViewLine&&this._renderedViewLine instanceof r&&(this._renderedViewLine=this._renderedViewLine.toSlowRenderedLine())}getVisibleRangesForRange(g,h,m,C){if(!this._renderedViewLine)return null;h=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,h)),m=Math.min(this._renderedViewLine.input.lineContent.length+1,Math.max(1,m));const w=this._renderedViewLine.input.stopRenderingLineAfter;if(w!==-1&&h>w+1&&m>w+1)return new S.VisibleRanges(!0,[new S.FloatHorizontalRange(this.getWidth(C),0)]);w!==-1&&h>w+1&&(h=w+1),w!==-1&&m>w+1&&(m=w+1);const D=this._renderedViewLine.getVisibleRangesForRange(g,h,m,C);return D&&D.length>0?new S.VisibleRanges(!1,D):null}getColumnOfNodeOffset(g,h){return this._renderedViewLine?this._renderedViewLine.getColumnOfNodeOffset(g,h):1}}e.ViewLine=t,t.CLASS_NAME="view-line";class r{constructor(g,h,m){this._cachedWidth=-1,this.domNode=g,this.input=h;const C=Math.floor(h.lineContent.length/300);if(C>0){this._keyColumnPixelOffsetCache=new Float32Array(C);for(let w=0;w=2&&(console.warn("monospace assumptions have been violated, therefore disabling monospace optimizations!"),i=!1)}return i}toSlowRenderedLine(){return c(this.domNode,this.input,this._characterMapping,!1,0)}getVisibleRangesForRange(g,h,m,C){const w=this._getColumnPixelOffset(g,h,C),D=this._getColumnPixelOffset(g,m,C);return[new S.FloatHorizontalRange(w,D-w)]}_getColumnPixelOffset(g,h,m){if(h<=300){const A=this._characterMapping.getHorizontalOffset(h);return this._charWidth*A}const C=Math.floor((h-1)/300)-1,w=(C+1)*300+1;let D=-1;if(this._keyColumnPixelOffsetCache&&(D=this._keyColumnPixelOffsetCache[C],D===-1&&(D=this._actualReadPixelOffset(g,w,m),this._keyColumnPixelOffsetCache[C]=D)),D===-1){const A=this._characterMapping.getHorizontalOffset(h);return this._charWidth*A}const I=this._characterMapping.getHorizontalOffset(w),T=this._characterMapping.getHorizontalOffset(h);return D+this._charWidth*(T-I)}_getReadingTarget(g){return g.domNode.firstChild}_actualReadPixelOffset(g,h,m){if(!this.domNode)return-1;const C=this._characterMapping.getDomPosition(h),w=E.RangeUtil.readHorizontalRanges(this._getReadingTarget(this.domNode),C.partIndex,C.charIndex,C.partIndex,C.charIndex,m);return!w||w.length===0?-1:w[0].left}getColumnOfNodeOffset(g,h){return l(this._characterMapping,g,h)}}class u{constructor(g,h,m,C,w){if(this.domNode=g,this.input=h,this._characterMapping=m,this._isWhitespaceOnly=/^\s*$/.test(h.lineContent),this._containsForeignElements=w,this._cachedWidth=-1,this._pixelOffsetCache=null,!C||this._characterMapping.length===0){this._pixelOffsetCache=new Float32Array(Math.max(2,this._characterMapping.length+1));for(let D=0,I=this._characterMapping.length;D<=I;D++)this._pixelOffsetCache[D]=-1}}_getReadingTarget(g){return g.domNode.firstChild}getWidth(g){return this.domNode?(this._cachedWidth===-1&&(this._cachedWidth=this._getReadingTarget(this.domNode).offsetWidth,g?.markDidDomLayout()),this._cachedWidth):0}getWidthIsFast(){return this._cachedWidth!==-1}getVisibleRangesForRange(g,h,m,C){if(!this.domNode)return null;if(this._pixelOffsetCache!==null){const w=this._readPixelOffset(this.domNode,g,h,C);if(w===-1)return null;const D=this._readPixelOffset(this.domNode,g,m,C);return D===-1?null:[new S.FloatHorizontalRange(w,D-w)]}return this._readVisibleRangesForRange(this.domNode,g,h,m,C)}_readVisibleRangesForRange(g,h,m,C,w){if(m===C){const D=this._readPixelOffset(g,h,m,w);return D===-1?null:[new S.FloatHorizontalRange(D,0)]}else return this._readRawVisibleRangesForRange(g,m,C,w)}_readPixelOffset(g,h,m,C){if(this._characterMapping.length===0){if(this._containsForeignElements===0||this._containsForeignElements===2)return 0;if(this._containsForeignElements===1)return this.getWidth(C);const w=this._getReadingTarget(g);return w.firstChild?(C.markDidDomLayout(),w.firstChild.offsetWidth):0}if(this._pixelOffsetCache!==null){const w=this._pixelOffsetCache[m];if(w!==-1)return w;const D=this._actualReadPixelOffset(g,h,m,C);return this._pixelOffsetCache[m]=D,D}return this._actualReadPixelOffset(g,h,m,C)}_actualReadPixelOffset(g,h,m,C){if(this._characterMapping.length===0){const T=E.RangeUtil.readHorizontalRanges(this._getReadingTarget(g),0,0,0,0,C);return!T||T.length===0?-1:T[0].left}if(m===this._characterMapping.length&&this._isWhitespaceOnly&&this._containsForeignElements===0)return this.getWidth(C);const w=this._characterMapping.getDomPosition(m),D=E.RangeUtil.readHorizontalRanges(this._getReadingTarget(g),w.partIndex,w.charIndex,w.partIndex,w.charIndex,C);if(!D||D.length===0)return-1;const I=D[0].left;if(this.input.isBasicASCII){const T=this._characterMapping.getHorizontalOffset(m),A=Math.round(this.input.spaceWidth*T);if(Math.abs(A-I)<=1)return A}return I}_readRawVisibleRangesForRange(g,h,m,C){if(h===1&&m===this._characterMapping.length)return[new S.FloatHorizontalRange(0,this.getWidth(C))];const w=this._characterMapping.getDomPosition(h),D=this._characterMapping.getDomPosition(m);return E.RangeUtil.readHorizontalRanges(this._getReadingTarget(g),w.partIndex,w.charIndex,D.partIndex,D.charIndex,C)}getColumnOfNodeOffset(g,h){return l(this._characterMapping,g,h)}}class f extends u{_readVisibleRangesForRange(g,h,m,C,w){const D=super._readVisibleRangesForRange(g,h,m,C,w);if(!D||D.length===0||m===C||m===1&&C===this._characterMapping.length)return D;if(!this.input.containsRTL){const I=this._readPixelOffset(g,h,C,w);if(I!==-1){const T=D[D.length-1];T.left=4&&m[0]===3&&m[3]===8}static isStrictChildOfViewLines(m){return m.length>4&&m[0]===3&&m[3]===8}static isChildOfScrollableElement(m){return m.length>=2&&m[0]===3&&m[1]===6}static isChildOfMinimap(m){return m.length>=2&&m[0]===3&&m[1]===9}static isChildOfContentWidgets(m){return m.length>=4&&m[0]===3&&m[3]===1}static isChildOfOverflowGuard(m){return m.length>=1&&m[0]===3}static isChildOfOverflowingContentWidgets(m){return m.length>=1&&m[0]===2}static isChildOfOverlayWidgets(m){return m.length>=2&&m[0]===3&&m[1]===4}static isChildOfOverflowingOverlayWidgets(m){return m.length>=1&&m[0]===5}}class u{constructor(m,C,w){this.viewModel=m.viewModel;const D=m.configuration.options;this.layoutInfo=D.get(143),this.viewDomNode=C.viewDomNode,this.lineHeight=D.get(66),this.stickyTabStops=D.get(115),this.typicalHalfwidthCharacterWidth=D.get(50).typicalHalfwidthCharacterWidth,this.lastRenderData=w,this._context=m,this._viewHelper=C}getZoneAtCoord(m){return u.getZoneAtCoord(this._context,m)}static getZoneAtCoord(m,C){const w=m.viewLayout.getWhitespaceAtVerticalOffset(C);if(w){const D=w.verticalOffset+w.height/2,I=m.viewModel.getLineCount();let T=null,A,P=null;return w.afterLineNumber!==I&&(P=new E.Position(w.afterLineNumber+1,1)),w.afterLineNumber>0&&(T=new E.Position(w.afterLineNumber,m.viewModel.getLineMaxColumn(w.afterLineNumber))),P===null?A=T:T===null?A=P:C=m.layoutInfo.glyphMarginLeft,this.isInContentArea=!this.isInMarginArea,this.mouseColumn=Math.max(0,l._getMouseColumn(this.mouseContentHorizontalOffset,m.typicalHalfwidthCharacterWidth))}}class c extends f{constructor(m,C,w,D,I){super(m,C,w,D),this._ctx=m,I?(this.target=I,this.targetPath=k.PartFingerprints.collect(I,m.viewDomNode)):(this.target=null,this.targetPath=new Uint8Array(0))}toString(){return`pos(${this.pos.x},${this.pos.y}), editorPos(${this.editorPos.x},${this.editorPos.y}), relativePos(${this.relativePos.x},${this.relativePos.y}), mouseVerticalOffset: ${this.mouseVerticalOffset}, mouseContentHorizontalOffset: ${this.mouseContentHorizontalOffset} target: ${this.target?this.target.outerHTML:null}`}_getMouseColumn(m=null){return m&&m.columnT.contentLeft+T.width)continue;const A=m.getVerticalOffsetForLineNumber(T.position.lineNumber);if(A<=I&&I<=A+T.height)return C.fulfillContentText(T.position,null,{mightBeForeignElement:!1,injectedText:null})}}return null}static _hitTestViewZone(m,C){const w=m.getZoneAtCoord(C.mouseVerticalOffset);if(w){const D=C.isInContentArea?8:5;return C.fulfillViewZone(D,w.position,w)}return null}static _hitTestTextArea(m,C){return r.isTextArea(C.targetPath)?m.lastRenderData.lastTextareaPosition?C.fulfillContentText(m.lastRenderData.lastTextareaPosition,null,{mightBeForeignElement:!1,injectedText:null}):C.fulfillTextarea():null}static _hitTestMargin(m,C){if(C.isInMarginArea){const w=m.getFullLineRangeAtCoord(C.mouseVerticalOffset),D=w.range.getStartPosition();let I=Math.abs(C.relativePos.x);const T={isAfterLines:w.isAfterLines,glyphMarginLeft:m.layoutInfo.glyphMarginLeft,glyphMarginWidth:m.layoutInfo.glyphMarginWidth,lineNumbersWidth:m.layoutInfo.lineNumbersWidth,offsetX:I};if(I-=m.layoutInfo.glyphMarginLeft,I<=m.layoutInfo.glyphMarginWidth){const A=m.viewModel.coordinatesConverter.convertViewPositionToModelPosition(w.range.getStartPosition()),P=m.viewModel.glyphLanes.getLanesAtLine(A.lineNumber);return T.glyphMarginLane=P[Math.floor(I/m.lineHeight)],C.fulfillMargin(2,D,w.range,T)}return I-=m.layoutInfo.glyphMarginWidth,I<=m.layoutInfo.lineNumbersWidth?C.fulfillMargin(3,D,w.range,T):(I-=m.layoutInfo.lineNumbersWidth,C.fulfillMargin(4,D,w.range,T))}return null}static _hitTestViewLines(m,C,w){if(!r.isChildOfViewLines(C.targetPath))return null;if(m.isInTopPadding(C.mouseVerticalOffset))return C.fulfillContentEmpty(new E.Position(1,1),d);if(m.isAfterLines(C.mouseVerticalOffset)||m.isInBottomPadding(C.mouseVerticalOffset)){const I=m.viewModel.getLineCount(),T=m.viewModel.getLineMaxColumn(I);return C.fulfillContentEmpty(new E.Position(I,T),d)}if(w){if(r.isStrictChildOfViewLines(C.targetPath)){const I=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset);if(m.viewModel.getLineLength(I)===0){const A=m.getLineWidth(I),P=s(C.mouseContentHorizontalOffset-A);return C.fulfillContentEmpty(new E.Position(I,1),P)}const T=m.getLineWidth(I);if(C.mouseContentHorizontalOffset>=T){const A=s(C.mouseContentHorizontalOffset-T),P=new E.Position(I,m.viewModel.getLineMaxColumn(I));return C.fulfillContentEmpty(P,A)}}return C.fulfillUnknown()}const D=l._doHitTest(m,C);return D.type===1?l.createMouseTargetFromHitTestPosition(m,C,D.spanNode,D.position,D.injectedText):this._createMouseTarget(m,C.withTarget(D.hitTarget),!0)}static _hitTestMinimap(m,C){if(r.isChildOfMinimap(C.targetPath)){const w=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset),D=m.viewModel.getLineMaxColumn(w);return C.fulfillScrollbar(new E.Position(w,D))}return null}static _hitTestScrollbarSlider(m,C){if(r.isChildOfScrollableElement(C.targetPath)&&C.target&&C.target.nodeType===1){const w=C.target.className;if(w&&/\b(slider|scrollbar)\b/.test(w)){const D=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset),I=m.viewModel.getLineMaxColumn(D);return C.fulfillScrollbar(new E.Position(D,I))}}return null}static _hitTestScrollbar(m,C){if(r.isChildOfScrollableElement(C.targetPath)){const w=m.getLineNumberAtVerticalOffset(C.mouseVerticalOffset),D=m.viewModel.getLineMaxColumn(w);return C.fulfillScrollbar(new E.Position(w,D))}return null}getMouseColumn(m){const C=this._context.configuration.options,w=C.get(143),D=this._context.viewLayout.getCurrentScrollLeft()+m.x-w.contentLeft;return l._getMouseColumn(D,C.get(50).typicalHalfwidthCharacterWidth)}static _getMouseColumn(m,C){return m<0?1:Math.round(m/C)+1}static createMouseTargetFromHitTestPosition(m,C,w,D,I){const T=D.lineNumber,A=D.column,P=m.getLineWidth(T);if(C.mouseContentHorizontalOffset>P){const K=s(C.mouseContentHorizontalOffset-P);return C.fulfillContentEmpty(D,K)}const N=m.visibleRangeForPosition(T,A);if(!N)return C.fulfillUnknown(D);const M=N.left;if(Math.abs(C.mouseContentHorizontalOffset-M)<1)return C.fulfillContentText(D,null,{mightBeForeignElement:!!I,injectedText:I});const R=[];if(R.push({offset:N.left,column:A}),A>1){const K=m.visibleRangeForPosition(T,A-1);K&&R.push({offset:K.left,column:A-1})}const x=m.viewModel.getLineMaxColumn(T);if(AK.offset-F.offset);const O=C.pos.toClientCoordinates(_.getWindow(m.viewDomNode)),B=w.getBoundingClientRect(),W=B.left<=O.clientX&&O.clientX<=B.right;let V=null;for(let K=1;KI)){const A=Math.floor((D+I)/2);let P=C.pos.y+(A-C.mouseVerticalOffset);P<=C.editorPos.y&&(P=C.editorPos.y+1),P>=C.editorPos.y+C.editorPos.height&&(P=C.editorPos.y+C.editorPos.height-1);const N=new L.PageCoordinates(C.pos.x,P),M=this._actualDoHitTestWithCaretRangeFromPoint(m,N.toClientCoordinates(_.getWindow(m.viewDomNode)));if(M.type===1)return M}return this._actualDoHitTestWithCaretRangeFromPoint(m,C.pos.toClientCoordinates(_.getWindow(m.viewDomNode)))}static _actualDoHitTestWithCaretRangeFromPoint(m,C){const w=_.getShadowRoot(m.viewDomNode);let D;if(w?typeof w.caretRangeFromPoint>"u"?D=o(w,C.clientX,C.clientY):D=w.caretRangeFromPoint(C.clientX,C.clientY):D=m.viewDomNode.ownerDocument.caretRangeFromPoint(C.clientX,C.clientY),!D||!D.startContainer)return new b;const I=D.startContainer;if(I.nodeType===I.TEXT_NODE){const T=I.parentNode,A=T?T.parentNode:null,P=A?A.parentNode:null;return(P&&P.nodeType===P.ELEMENT_NODE?P.className:null)===y.ViewLine.CLASS_NAME?i.createFromDOMInfo(m,T,D.startOffset):new b(I.parentNode)}else if(I.nodeType===I.ELEMENT_NODE){const T=I.parentNode,A=T?T.parentNode:null;return(A&&A.nodeType===A.ELEMENT_NODE?A.className:null)===y.ViewLine.CLASS_NAME?i.createFromDOMInfo(m,I,I.textContent.length):new b(I)}return new b}static _doHitTestWithCaretPositionFromPoint(m,C){const w=m.viewDomNode.ownerDocument.caretPositionFromPoint(C.clientX,C.clientY);if(w.offsetNode.nodeType===w.offsetNode.TEXT_NODE){const D=w.offsetNode.parentNode,I=D?D.parentNode:null,T=I?I.parentNode:null;return(T&&T.nodeType===T.ELEMENT_NODE?T.className:null)===y.ViewLine.CLASS_NAME?i.createFromDOMInfo(m,w.offsetNode.parentNode,w.offset):new b(w.offsetNode.parentNode)}if(w.offsetNode.nodeType===w.offsetNode.ELEMENT_NODE){const D=w.offsetNode.parentNode,I=D&&D.nodeType===D.ELEMENT_NODE?D.className:null,T=D?D.parentNode:null,A=T&&T.nodeType===T.ELEMENT_NODE?T.className:null;if(I===y.ViewLine.CLASS_NAME){const P=w.offsetNode.childNodes[Math.min(w.offset,w.offsetNode.childNodes.length-1)];if(P)return i.createFromDOMInfo(m,P,0)}else if(A===y.ViewLine.CLASS_NAME)return i.createFromDOMInfo(m,w.offsetNode,0)}return new b(w.offsetNode)}static _snapToSoftTabBoundary(m,C){const w=C.getLineContent(m.lineNumber),{tabSize:D}=C.model.getOptions(),I=v.AtomicTabMoveOperations.atomicPosition(w,m.column-1,D,2);return I!==-1?new E.Position(m.lineNumber,I+1):m}static _doHitTest(m,C){let w=new b;if(typeof m.viewDomNode.ownerDocument.caretRangeFromPoint=="function"?w=this._doHitTestWithCaretRangeFromPoint(m,C):m.viewDomNode.ownerDocument.caretPositionFromPoint&&(w=this._doHitTestWithCaretPositionFromPoint(m,C.pos.toClientCoordinates(_.getWindow(m.viewDomNode)))),w.type===1){const D=m.viewModel.getInjectedTextAt(w.position),I=m.viewModel.normalizePosition(w.position,2);(D||!I.equals(w.position))&&(w=new a(I,w.spanNode,D))}return w}}e.MouseTargetFactory=l;function o(h,m,C){const w=document.createRange();let D=h.elementFromPoint(m,C);if(D!==null){for(;D&&D.firstChild&&D.firstChild.nodeType!==D.firstChild.TEXT_NODE&&D.lastChild&&D.lastChild.firstChild;)D=D.lastChild;const I=D.getBoundingClientRect(),T=_.getWindow(D),A=T.getComputedStyle(D,null).getPropertyValue("font-style"),P=T.getComputedStyle(D,null).getPropertyValue("font-variant"),N=T.getComputedStyle(D,null).getPropertyValue("font-weight"),M=T.getComputedStyle(D,null).getPropertyValue("font-size"),R=T.getComputedStyle(D,null).getPropertyValue("line-height"),x=T.getComputedStyle(D,null).getPropertyValue("font-family"),O=`${A} ${P} ${N} ${M}/${R} ${x}`,B=D.innerText;let W=I.left,V=0,K;if(m>I.left+I.width)V=B.length;else{const F=g.getInstance();for(let q=0;qthis._createMouseTarget(h,m),h=>this._getMouseColumn(h))),this.lastMouseLeaveTime=-1,this._height=this._context.configuration.options.get(143).height;const o=new p.EditorMouseEventFactory(this.viewHelper.viewDomNode);this._register(o.onContextMenu(this.viewHelper.viewDomNode,h=>this._onContextMenu(h,!0))),this._register(o.onMouseMove(this.viewHelper.viewDomNode,h=>{this._onMouseMove(h),this._mouseLeaveMonitor||(this._mouseLeaveMonitor=L.addDisposableListener(this.viewHelper.viewDomNode.ownerDocument,"mousemove",m=>{this.viewHelper.viewDomNode.contains(m.target)||this._onMouseLeave(new p.EditorMouseEvent(m,!1,this.viewHelper.viewDomNode))}))})),this._register(o.onMouseUp(this.viewHelper.viewDomNode,h=>this._onMouseUp(h))),this._register(o.onMouseLeave(this.viewHelper.viewDomNode,h=>this._onMouseLeave(h)));let g=0;this._register(o.onPointerDown(this.viewHelper.viewDomNode,(h,m)=>{g=m})),this._register(L.addDisposableListener(this.viewHelper.viewDomNode,L.EventType.POINTER_UP,h=>{this._mouseDownOperation.onPointerUp()})),this._register(o.onMouseDown(this.viewHelper.viewDomNode,h=>this._onMouseDown(h,g))),this._setupMouseWheelZoomListener(),this._context.addEventHandler(this)}_setupMouseWheelZoomListener(){const d=i.MouseWheelClassifier.INSTANCE;let s=0,l=_.EditorZoom.getZoomLevel(),o=!1,g=0;const h=C=>{if(this.viewController.emitMouseWheel(C),!this._context.configuration.options.get(75))return;const w=new k.StandardWheelEvent(C);if(d.acceptStandardWheelEvent(w),d.isPhysicalMouseWheel()){if(m(C)){const D=_.EditorZoom.getZoomLevel(),I=w.deltaY>0?1:-1;_.EditorZoom.setZoomLevel(D+I),w.preventDefault(),w.stopPropagation()}}else Date.now()-s>50&&(l=_.EditorZoom.getZoomLevel(),o=m(C),g=0),s=Date.now(),g+=w.deltaY,o&&(_.EditorZoom.setZoomLevel(l+g/5),w.preventDefault(),w.stopPropagation())};this._register(L.addDisposableListener(this.viewHelper.viewDomNode,L.EventType.MOUSE_WHEEL,h,{capture:!0,passive:!1}));function m(C){return E.isMacintosh?(C.metaKey||C.ctrlKey)&&!C.shiftKey&&!C.altKey:C.ctrlKey&&!C.metaKey&&!C.shiftKey&&!C.altKey}}dispose(){this._context.removeEventHandler(this),this._mouseLeaveMonitor&&(this._mouseLeaveMonitor.dispose(),this._mouseLeaveMonitor=null),super.dispose()}onConfigurationChanged(d){if(d.hasChanged(143)){const s=this._context.configuration.options.get(143).height;this._height!==s&&(this._height=s,this._mouseDownOperation.onHeightChanged())}return!1}onCursorStateChanged(d){return this._mouseDownOperation.onCursorStateChanged(d),!1}onFocusChanged(d){return!1}getTargetAtClientPoint(d,s){const o=new p.ClientCoordinates(d,s).toPageCoordinates(L.getWindow(this.viewHelper.viewDomNode)),g=(0,p.createEditorPagePosition)(this.viewHelper.viewDomNode);if(o.yg.y+g.height||o.xg.x+g.width)return null;const h=(0,p.createCoordinatesRelativeToEditor)(this.viewHelper.viewDomNode,g,o);return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),g,o,h,null)}_createMouseTarget(d,s){let l=d.target;if(!this.viewHelper.viewDomNode.contains(l)){const o=L.getShadowRoot(this.viewHelper.viewDomNode);o&&(l=o.elementsFromPoint(d.posx,d.posy).find(g=>this.viewHelper.viewDomNode.contains(g)))}return this.mouseTargetFactory.createMouseTarget(this.viewHelper.getLastRenderData(),d.editorPos,d.pos,d.relativePos,s?l:null)}_getMouseColumn(d){return this.mouseTargetFactory.getMouseColumn(d.relativePos)}_onContextMenu(d,s){this.viewController.emitContextMenu({event:d,target:this._createMouseTarget(d,s)})}_onMouseMove(d){this.mouseTargetFactory.mouseTargetIsWidget(d)||d.preventDefault(),!(this._mouseDownOperation.isActive()||d.timestamp{d.preventDefault(),this.viewHelper.focusTextArea()};if(D&&(o||h&&m))I(),this._mouseDownOperation.start(l.type,d,s);else if(g)d.preventDefault();else if(C){const T=l.detail;D&&this.viewHelper.shouldSuppressMouseDownOnViewZone(T.viewZoneId)&&(I(),this._mouseDownOperation.start(l.type,d,s),d.preventDefault())}else w&&this.viewHelper.shouldSuppressMouseDownOnWidget(l.detail)&&(I(),d.preventDefault());this.viewController.emitMouseDown({event:d,target:l})}}e.MouseHandler=n;class t extends y.Disposable{constructor(d,s,l,o,g,h){super(),this._context=d,this._viewController=s,this._viewHelper=l,this._mouseTargetFactory=o,this._createMouseTarget=g,this._getMouseColumn=h,this._mouseMoveMonitor=this._register(new p.GlobalEditorPointerMoveMonitor(this._viewHelper.viewDomNode)),this._topBottomDragScrolling=this._register(new r(this._context,this._viewHelper,this._mouseTargetFactory,(m,C,w)=>this._dispatchMouse(m,C,w))),this._mouseState=new f,this._currentSelection=new b.Selection(1,1,1,1),this._isActive=!1,this._lastMouseEvent=null}dispose(){super.dispose()}isActive(){return this._isActive}_onMouseDownThenMove(d){this._lastMouseEvent=d,this._mouseState.setModifiers(d);const s=this._findMousePosition(d,!1);s&&(this._mouseState.isDragAndDrop?this._viewController.emitMouseDrag({event:d,target:s}):s.type===13&&(s.outsidePosition==="above"||s.outsidePosition==="below")?this._topBottomDragScrolling.start(s,d):(this._topBottomDragScrolling.stop(),this._dispatchMouse(s,!0,1)))}start(d,s,l){this._lastMouseEvent=s,this._mouseState.setStartedOnLineNumbers(d===3),this._mouseState.setStartButtons(s),this._mouseState.setModifiers(s);const o=this._findMousePosition(s,!0);if(!o||!o.position)return;this._mouseState.trySetCount(s.detail,o.position),s.detail=this._mouseState.count;const g=this._context.configuration.options;if(!g.get(90)&&g.get(35)&&!g.get(22)&&!this._mouseState.altKey&&s.detail<2&&!this._isActive&&!this._currentSelection.isEmpty()&&o.type===6&&o.position&&this._currentSelection.containsPosition(o.position)){this._mouseState.isDragAndDrop=!0,this._isActive=!0,this._mouseMoveMonitor.startMonitoring(this._viewHelper.viewLinesDomNode,l,s.buttons,h=>this._onMouseDownThenMove(h),h=>{const m=this._findMousePosition(this._lastMouseEvent,!1);L.isKeyboardEvent(h)?this._viewController.emitMouseDropCanceled():this._viewController.emitMouseDrop({event:this._lastMouseEvent,target:m?this._createMouseTarget(this._lastMouseEvent,!0):null}),this._stop()});return}this._mouseState.isDragAndDrop=!1,this._dispatchMouse(o,s.shiftKey,1),this._isActive||(this._isActive=!0,this._mouseMoveMonitor.startMonitoring(this._viewHelper.viewLinesDomNode,l,s.buttons,h=>this._onMouseDownThenMove(h),()=>this._stop()))}_stop(){this._isActive=!1,this._topBottomDragScrolling.stop()}onHeightChanged(){this._mouseMoveMonitor.stopMonitoring()}onPointerUp(){this._mouseMoveMonitor.stopMonitoring()}onCursorStateChanged(d){this._currentSelection=d.selections[0]}_getPositionOutsideEditor(d){const s=d.editorPos,l=this._context.viewModel,o=this._context.viewLayout,g=this._getMouseColumn(d);if(d.posys.y+s.height){const m=d.posy-s.y-s.height,C=o.getCurrentScrollTop()+d.relativePos.y,w=S.HitTestContext.getZoneAtCoord(this._context,C);if(w){const I=this._helpPositionJumpOverViewZone(w);if(I)return S.MouseTarget.createOutsideEditor(g,I,"below",m)}const D=o.getLineNumberAtVerticalOffset(C);return S.MouseTarget.createOutsideEditor(g,new v.Position(D,l.getLineMaxColumn(D)),"below",m)}const h=o.getLineNumberAtVerticalOffset(o.getCurrentScrollTop()+d.relativePos.y);if(d.posxs.x+s.width){const m=d.posx-s.x-s.width;return S.MouseTarget.createOutsideEditor(g,new v.Position(h,l.getLineMaxColumn(h)),"right",m)}return null}_findMousePosition(d,s){const l=this._getPositionOutsideEditor(d);if(l)return l;const o=this._createMouseTarget(d,s);if(!o.position)return null;if(o.type===8||o.type===5){const h=this._helpPositionJumpOverViewZone(o.detail);if(h)return S.MouseTarget.createViewZone(o.type,o.element,o.mouseColumn,h,o.detail)}return o}_helpPositionJumpOverViewZone(d){const s=new v.Position(this._currentSelection.selectionStartLineNumber,this._currentSelection.selectionStartColumn),l=d.positionBefore,o=d.positionAfter;return l&&o?l.isBefore(s)?l:o:null}_dispatchMouse(d,s,l){d.position&&this._viewController.dispatchMouse({position:d.position,mouseColumn:d.mouseColumn,startedOnLineNumbers:this._mouseState.startedOnLineNumbers,revealType:l,inSelectionMode:s,mouseDownCount:this._mouseState.count,altKey:this._mouseState.altKey,ctrlKey:this._mouseState.ctrlKey,metaKey:this._mouseState.metaKey,shiftKey:this._mouseState.shiftKey,leftButton:this._mouseState.leftButton,middleButton:this._mouseState.middleButton,onInjectedText:d.type===6&&d.detail.injectedText!==null})}}class r extends y.Disposable{constructor(d,s,l,o){super(),this._context=d,this._viewHelper=s,this._mouseTargetFactory=l,this._dispatchMouse=o,this._operation=null}dispose(){super.dispose(),this.stop()}start(d,s){this._operation?this._operation.setPosition(d,s):this._operation=new u(this._context,this._viewHelper,this._mouseTargetFactory,this._dispatchMouse,d,s)}stop(){this._operation&&(this._operation.dispose(),this._operation=null)}}class u extends y.Disposable{constructor(d,s,l,o,g,h){super(),this._context=d,this._viewHelper=s,this._mouseTargetFactory=l,this._dispatchMouse=o,this._position=g,this._mouseEvent=h,this._lastTime=Date.now(),this._animationFrameDisposable=L.scheduleAtNextAnimationFrame(L.getWindow(h.browserEvent),()=>this._execute())}dispose(){this._animationFrameDisposable.dispose(),super.dispose()}setPosition(d,s){this._position=d,this._mouseEvent=s}_tick(){const d=Date.now(),s=d-this._lastTime;return this._lastTime=d,s}_getScrollSpeed(){const d=this._context.configuration.options.get(66),s=this._context.configuration.options.get(143).height/d,l=this._position.outsideDistance/d;return l<=1.5?Math.max(30,s*(1+l)):l<=3?Math.max(60,s*(2+l)):Math.max(200,s*(7+l))}_execute(){const d=this._context.configuration.options.get(66),s=this._getScrollSpeed(),l=this._tick(),o=s*(l/1e3)*d,g=this._position.outsidePosition==="above"?-o:o;this._context.viewModel.viewLayout.deltaScrollNow(0,g),this._viewHelper.renderNow();const h=this._context.viewLayout.getLinesViewportData(),m=this._position.outsidePosition==="above"?h.startLineNumber:h.endLineNumber;let C;{const w=(0,p.createEditorPagePosition)(this._viewHelper.viewDomNode),D=this._context.configuration.options.get(143).horizontalScrollbarHeight,I=new p.PageCoordinates(this._mouseEvent.pos.x,w.y+w.height-D-.1),T=(0,p.createCoordinatesRelativeToEditor)(this._viewHelper.viewDomNode,w,I);C=this._mouseTargetFactory.createMouseTarget(this._viewHelper.getLastRenderData(),w,I,T,null)}(!C.position||C.position.lineNumber!==m)&&(this._position.outsidePosition==="above"?C=S.MouseTarget.createOutsideEditor(this._position.mouseColumn,new v.Position(m,1),"above",this._position.outsideDistance):C=S.MouseTarget.createOutsideEditor(this._position.mouseColumn,new v.Position(m,this._context.viewModel.getLineMaxColumn(m)),"below",this._position.outsideDistance)),this._dispatchMouse(C,!0,2),this._animationFrameDisposable=L.scheduleAtNextAnimationFrame(L.getWindow(C.element),()=>this._execute())}}class f{get altKey(){return this._altKey}get ctrlKey(){return this._ctrlKey}get metaKey(){return this._metaKey}get shiftKey(){return this._shiftKey}get leftButton(){return this._leftButton}get middleButton(){return this._middleButton}get startedOnLineNumbers(){return this._startedOnLineNumbers}constructor(){this._altKey=!1,this._ctrlKey=!1,this._metaKey=!1,this._shiftKey=!1,this._leftButton=!1,this._middleButton=!1,this._startedOnLineNumbers=!1,this._lastMouseDownPosition=null,this._lastMouseDownPositionEqualCount=0,this._lastMouseDownCount=0,this._lastSetMouseDownCountTime=0,this.isDragAndDrop=!1}get count(){return this._lastMouseDownCount}setModifiers(d){this._altKey=d.altKey,this._ctrlKey=d.ctrlKey,this._metaKey=d.metaKey,this._shiftKey=d.shiftKey}setStartButtons(d){this._leftButton=d.leftButton,this._middleButton=d.middleButton}setStartedOnLineNumbers(d){this._startedOnLineNumbers=d}trySetCount(d,s){const l=new Date().getTime();l-this._lastSetMouseDownCountTime>f.CLEAR_MOUSE_DOWN_COUNT_TIME&&(d=1),this._lastSetMouseDownCountTime=l,d>this._lastMouseDownCount+1&&(d=this._lastMouseDownCount+1),this._lastMouseDownPosition&&this._lastMouseDownPosition.equals(s)?this._lastMouseDownPositionEqualCount++:this._lastMouseDownPositionEqualCount=1,this._lastMouseDownPosition=s,this._lastMouseDownCount=Math.min(d,this._lastMouseDownPositionEqualCount)}}f.CLEAR_MOUSE_DOWN_COUNT_TIME=400}),define(se[848],oe([1,0,219,7,63,44,2,17,847,190,167]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PointerHandler=e.PointerEventHandler=void 0;class a extends _.MouseHandler{constructor(r,u,f){super(r,u,f),this._register(y.Gesture.addTarget(this.viewHelper.linesContentDomNode)),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Tap,d=>this.onTap(d))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Change,d=>this.onChange(d))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Contextmenu,d=>this._onContextMenu(new b.EditorMouseEvent(d,!1,this.viewHelper.viewDomNode),!1))),this._lastPointerType="mouse",this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,"pointerdown",d=>{const s=d.pointerType;if(s==="mouse"){this._lastPointerType="mouse";return}else s==="touch"?this._lastPointerType="touch":this._lastPointerType="pen"}));const c=new b.EditorPointerEventFactory(this.viewHelper.viewDomNode);this._register(c.onPointerMove(this.viewHelper.viewDomNode,d=>this._onMouseMove(d))),this._register(c.onPointerUp(this.viewHelper.viewDomNode,d=>this._onMouseUp(d))),this._register(c.onPointerLeave(this.viewHelper.viewDomNode,d=>this._onMouseLeave(d))),this._register(c.onPointerDown(this.viewHelper.viewDomNode,(d,s)=>this._onMouseDown(d,s)))}onTap(r){!r.initialTarget||!this.viewHelper.linesContentDomNode.contains(r.initialTarget)||(r.preventDefault(),this.viewHelper.focusTextArea(),this._dispatchGesture(r,!1))}onChange(r){this._lastPointerType==="touch"&&this._context.viewModel.viewLayout.deltaScrollNow(-r.translationX,-r.translationY),this._lastPointerType==="pen"&&this._dispatchGesture(r,!0)}_dispatchGesture(r,u){const f=this._createMouseTarget(new b.EditorMouseEvent(r,!1,this.viewHelper.viewDomNode),!1);f.position&&this.viewController.dispatchMouse({position:f.position,mouseColumn:f.position.column,startedOnLineNumbers:!1,revealType:1,mouseDownCount:r.tapCount,inSelectionMode:u,altKey:!1,ctrlKey:!1,metaKey:!1,shiftKey:!1,leftButton:!1,middleButton:!1,onInjectedText:f.type===6&&f.detail.injectedText!==null})}_onMouseDown(r,u){r.browserEvent.pointerType!=="touch"&&super._onMouseDown(r,u)}}e.PointerEventHandler=a;class i extends _.MouseHandler{constructor(r,u,f){super(r,u,f),this._register(y.Gesture.addTarget(this.viewHelper.linesContentDomNode)),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Tap,c=>this.onTap(c))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Change,c=>this.onChange(c))),this._register(k.addDisposableListener(this.viewHelper.linesContentDomNode,y.EventType.Contextmenu,c=>this._onContextMenu(new b.EditorMouseEvent(c,!1,this.viewHelper.viewDomNode),!1)))}onTap(r){r.preventDefault(),this.viewHelper.focusTextArea();const u=this._createMouseTarget(new b.EditorMouseEvent(r,!1,this.viewHelper.viewDomNode),!1);if(u.position){const f=document.createEvent("CustomEvent");f.initEvent(v.TextAreaSyntethicEvents.Tap,!1,!0),this.viewHelper.dispatchTextAreaEvent(f),this.viewController.moveTo(u.position,1)}}onChange(r){this._context.viewModel.viewLayout.deltaScrollNow(-r.translationX,-r.translationY)}}class n extends S.Disposable{constructor(r,u,f){super(),(p.isIOS||p.isAndroid&&p.isMobile)&&L.BrowserFeatures.pointerEvents?this.handler=this._register(new a(r,u,f)):E.mainWindow.TouchEvent?this.handler=this._register(new i(r,u,f)):this.handler=this._register(new _.MouseHandler(r,u,f))}getTargetAtClientPoint(r,u){return this.handler.getTargetAtClientPoint(r,u)}}e.PointerHandler=n}),define(se[849],oe([1,0,200,14,17,72,148,233,56,493,255,10,5,436]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewLines=void 0;class n{constructor(){this._currentVisibleRange=new i.Range(1,1,1,1)}getCurrentVisibleRange(){return this._currentVisibleRange}setCurrentVisibleRange(c){this._currentVisibleRange=c}}class t{constructor(c,d,s,l,o,g,h){this.minimalReveal=c,this.lineNumber=d,this.startColumn=s,this.endColumn=l,this.startScrollTop=o,this.stopScrollTop=g,this.scrollType=h,this.type="range",this.minLineNumber=d,this.maxLineNumber=d}}class r{constructor(c,d,s,l,o){this.minimalReveal=c,this.selections=d,this.startScrollTop=s,this.stopScrollTop=l,this.scrollType=o,this.type="selections";let g=d[0].startLineNumber,h=d[0].endLineNumber;for(let m=1,C=d.length;m{this._updateLineWidthsSlow()},200),this._asyncCheckMonospaceFontAssumptions=new k.RunOnceScheduler(()=>{this._checkMonospaceFontAssumptions()},2e3),this._lastRenderedData=new n,this._horizontalRevealRequest=null,this._stickyScrollEnabled=l.get(114).enabled,this._maxNumberStickyLines=l.get(114).maxLineCount}dispose(){this._asyncUpdateLineWidths.dispose(),this._asyncCheckMonospaceFontAssumptions.dispose(),super.dispose()}getDomNode(){return this.domNode}createVisibleLine(){return new b.ViewLine(this._viewLineOptions)}onConfigurationChanged(c){this._visibleLines.onConfigurationChanged(c),c.hasChanged(144)&&(this._maxLineWidth=0);const d=this._context.configuration.options,s=d.get(50),l=d.get(144);return this._lineHeight=d.get(66),this._typicalHalfwidthCharacterWidth=s.typicalHalfwidthCharacterWidth,this._isViewportWrapping=l.isViewportWrapping,this._revealHorizontalRightPadding=d.get(99),this._cursorSurroundingLines=d.get(29),this._cursorSurroundingLinesStyle=d.get(30),this._canUseLayerHinting=!d.get(32),this._stickyScrollEnabled=d.get(114).enabled,this._maxNumberStickyLines=d.get(114).maxLineCount,(0,E.applyFontInfo)(this.domNode,s),this._onOptionsMaybeChanged(),c.hasChanged(143)&&(this._maxLineWidth=0),!0}_onOptionsMaybeChanged(){const c=this._context.configuration,d=new b.ViewLineOptions(c,this._context.theme.type);if(!this._viewLineOptions.equals(d)){this._viewLineOptions=d;const s=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let o=s;o<=l;o++)this._visibleLines.getVisibleLine(o).onOptionsChanged(this._viewLineOptions);return!0}return!1}onCursorStateChanged(c){const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();let l=!1;for(let o=d;o<=s;o++)l=this._visibleLines.getVisibleLine(o).onSelectionChanged()||l;return l}onDecorationsChanged(c){{const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();for(let l=d;l<=s;l++)this._visibleLines.getVisibleLine(l).onDecorationsChanged()}return!0}onFlushed(c){const d=this._visibleLines.onFlushed(c);return this._maxLineWidth=0,d}onLinesChanged(c){return this._visibleLines.onLinesChanged(c)}onLinesDeleted(c){return this._visibleLines.onLinesDeleted(c)}onLinesInserted(c){return this._visibleLines.onLinesInserted(c)}onRevealRangeRequest(c){const d=this._computeScrollTopToRevealRange(this._context.viewLayout.getFutureViewport(),c.source,c.minimalReveal,c.range,c.selections,c.verticalType);if(d===-1)return!1;let s=this._context.viewLayout.validateScrollPosition({scrollTop:d});c.revealHorizontal?c.range&&c.range.startLineNumber!==c.range.endLineNumber?s={scrollTop:s.scrollTop,scrollLeft:0}:c.range?this._horizontalRevealRequest=new t(c.minimalReveal,c.range.startLineNumber,c.range.startColumn,c.range.endColumn,this._context.viewLayout.getCurrentScrollTop(),s.scrollTop,c.scrollType):c.selections&&c.selections.length>0&&(this._horizontalRevealRequest=new r(c.minimalReveal,c.selections,this._context.viewLayout.getCurrentScrollTop(),s.scrollTop,c.scrollType)):this._horizontalRevealRequest=null;const o=Math.abs(this._context.viewLayout.getCurrentScrollTop()-s.scrollTop)<=this._lineHeight?1:c.scrollType;return this._context.viewModel.viewLayout.setScrollPosition(s,o),!0}onScrollChanged(c){if(this._horizontalRevealRequest&&c.scrollLeftChanged&&(this._horizontalRevealRequest=null),this._horizontalRevealRequest&&c.scrollTopChanged){const d=Math.min(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop),s=Math.max(this._horizontalRevealRequest.startScrollTop,this._horizontalRevealRequest.stopScrollTop);(c.scrollTops)&&(this._horizontalRevealRequest=null)}return this.domNode.setWidth(c.scrollWidth),this._visibleLines.onScrollChanged(c)||!0}onTokensChanged(c){return this._visibleLines.onTokensChanged(c)}onZonesChanged(c){return this._context.viewModel.viewLayout.setMaxLineWidth(this._maxLineWidth),this._visibleLines.onZonesChanged(c)}onThemeChanged(c){return this._onOptionsMaybeChanged()}getPositionFromDOMInfo(c,d){const s=this._getViewLineDomNode(c);if(s===null)return null;const l=this._getLineNumberFor(s);if(l===-1||l<1||l>this._context.viewModel.getLineCount())return null;if(this._context.viewModel.getLineMaxColumn(l)===1)return new a.Position(l,1);const o=this._visibleLines.getStartLineNumber(),g=this._visibleLines.getEndLineNumber();if(lg)return null;let h=this._visibleLines.getVisibleLine(l).getColumnOfNodeOffset(c,d);const m=this._context.viewModel.getLineMinColumn(l);return hs)return-1;const l=new v.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot),o=this._visibleLines.getVisibleLine(c).getWidth(l);return this._updateLineWidthsSlowIfDomDidLayout(l),o}linesVisibleRangesForRange(c,d){if(this.shouldRender())return null;const s=c.endLineNumber,l=i.Range.intersectRanges(c,this._lastRenderedData.getCurrentVisibleRange());if(!l)return null;const o=[];let g=0;const h=new v.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot);let m=0;d&&(m=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new a.Position(l.startLineNumber,1)).lineNumber);const C=this._visibleLines.getStartLineNumber(),w=this._visibleLines.getEndLineNumber();for(let D=l.startLineNumber;D<=l.endLineNumber;D++){if(Dw)continue;const I=D===l.startLineNumber?l.startColumn:1,T=D!==l.endLineNumber,A=T?this._context.viewModel.getLineMaxColumn(D):l.endColumn,P=this._visibleLines.getVisibleLine(D).getVisibleRangesForRange(D,I,A,h);if(P){if(d&&Dthis._visibleLines.getEndLineNumber())return null;const l=new v.DomReadingContext(this.domNode.domNode,this._textRangeRestingSpot),o=this._visibleLines.getVisibleLine(c).getVisibleRangesForRange(c,d,s,l);return this._updateLineWidthsSlowIfDomDidLayout(l),o}visibleRangeForPosition(c){const d=this._visibleRangesForLineRange(c.lineNumber,c.column,c.column);return d?new S.HorizontalPosition(d.outsideRenderedLine,d.ranges[0].left):null}_updateLineWidthsFast(){return this._updateLineWidths(!0)}_updateLineWidthsSlow(){this._updateLineWidths(!1)}_updateLineWidthsSlowIfDomDidLayout(c){c.didDomLayout&&(this._asyncUpdateLineWidths.isScheduled()||(this._asyncUpdateLineWidths.cancel(),this._updateLineWidthsSlow()))}_updateLineWidths(c){const d=this._visibleLines.getStartLineNumber(),s=this._visibleLines.getEndLineNumber();let l=1,o=!0;for(let g=d;g<=s;g++){const h=this._visibleLines.getVisibleLine(g);if(c&&!h.getWidthIsFast()){o=!1;continue}l=Math.max(l,h.getWidth(null))}return o&&d===1&&s===this._context.viewModel.getLineCount()&&(this._maxLineWidth=0),this._ensureMaxLineWidth(l),o}_checkMonospaceFontAssumptions(){let c=-1,d=-1;const s=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let o=s;o<=l;o++){const g=this._visibleLines.getVisibleLine(o);if(g.needsMonospaceFontCheck()){const h=g.getWidth(null);h>d&&(d=h,c=o)}}if(c!==-1&&!this._visibleLines.getVisibleLine(c).monospaceAssumptionsAreValid())for(let o=s;o<=l;o++)this._visibleLines.getVisibleLine(o).onMonospaceAssumptionsInvalidated()}prepareRender(){throw new Error("Not supported")}render(){throw new Error("Not supported")}renderText(c){if(this._visibleLines.renderLines(c),this._lastRenderedData.setCurrentVisibleRange(c.visibleRange),this.domNode.setWidth(this._context.viewLayout.getScrollWidth()),this.domNode.setHeight(Math.min(this._context.viewLayout.getScrollHeight(),1e6)),this._horizontalRevealRequest){const s=this._horizontalRevealRequest;if(c.startLineNumber<=s.minLineNumber&&s.maxLineNumber<=c.endLineNumber){this._horizontalRevealRequest=null,this.onDidRender();const l=this._computeScrollLeftToReveal(s);l&&(this._isViewportWrapping||this._ensureMaxLineWidth(l.maxHorizontalOffset),this._context.viewModel.viewLayout.setScrollPosition({scrollLeft:l.scrollLeft},s.scrollType))}}if(this._updateLineWidthsFast()?this._asyncUpdateLineWidths.cancel():this._asyncUpdateLineWidths.schedule(),y.isLinux&&!this._asyncCheckMonospaceFontAssumptions.isScheduled()){const s=this._visibleLines.getStartLineNumber(),l=this._visibleLines.getEndLineNumber();for(let o=s;o<=l;o++)if(this._visibleLines.getVisibleLine(o).needsMonospaceFontCheck()){this._asyncCheckMonospaceFontAssumptions.schedule();break}}this._linesContent.setLayerHinting(this._canUseLayerHinting),this._linesContent.setContain("strict");const d=this._context.viewLayout.getCurrentScrollTop()-c.bigNumbersDelta;this._linesContent.setTop(-d),this._linesContent.setLeft(-this._context.viewLayout.getCurrentScrollLeft())}_ensureMaxLineWidth(c){const d=Math.ceil(c);this._maxLineWidth0){let M=o[0].startLineNumber,R=o[0].endLineNumber;for(let x=1,O=o.length;xm){if(!w)return-1;N=D}else if(g===5||g===6)if(g===6&&h<=D&&I<=C)N=h;else{const M=Math.max(5*this._lineHeight,m*.2),R=D-M,x=I-m;N=Math.max(x,R)}else if(g===1||g===2)if(g===2&&h<=D&&I<=C)N=h;else{const M=(D+I)/2;N=Math.max(0,M-m/2)}else N=this._computeMinimumScrolling(h,C,D,I,g===3,g===4);return N}_computeScrollLeftToReveal(c){const d=this._context.viewLayout.getCurrentViewport(),s=this._context.configuration.options.get(143),l=d.left,o=l+d.width-s.verticalScrollbarWidth;let g=1073741824,h=0;if(c.type==="range"){const C=this._visibleRangesForLineRange(c.lineNumber,c.startColumn,c.endColumn);if(!C)return null;for(const w of C.ranges)g=Math.min(g,Math.round(w.left)),h=Math.max(h,Math.round(w.left+w.width))}else for(const C of c.selections){if(C.startLineNumber!==C.endLineNumber)return null;const w=this._visibleRangesForLineRange(C.startLineNumber,C.startColumn,C.endColumn);if(!w)return null;for(const D of w.ranges)g=Math.min(g,Math.round(D.left)),h=Math.max(h,Math.round(D.left+D.width))}return c.minimalReveal||(g=Math.max(0,g-u.HORIZONTAL_EXTRA_PX),h+=this._revealHorizontalRightPadding),c.type==="selections"&&h-g>d.width?null:{scrollLeft:this._computeMinimumScrolling(l,o,g,h),maxHorizontalOffset:h}}_computeMinimumScrolling(c,d,s,l,o,g){c=c|0,d=d|0,s=s|0,l=l|0,o=!!o,g=!!g;const h=d-c;if(l-sd)return Math.max(0,l-h)}else return s;return c}}e.ViewLines=u,u.HORIZONTAL_EXTRA_PX=30}),define(se[366],oe([1,0,7,46,78,230,224,13,14,398,107,12,6,126,2,17,11,750,350,99,22,89,178]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputList=e.QuickInputListFocus=void 0;const o=L.$;class g{constructor(N,M,R,x,O,B,W){var V,K,F;this._checked=!1,this._hidden=!1,this.hasCheckbox=x,this.index=R,this.fireButtonTriggered=O,this.fireSeparatorButtonTriggered=B,this._onChecked=W,this.onChecked=x?i.Event.map(i.Event.filter(this._onChecked.event,q=>q.listElement===this),q=>q.checked):i.Event.None,N.type==="separator"?this._separator=N:(this.item=N,M&&M.type==="separator"&&!M.buttons&&(this._separator=M),this.saneDescription=this.item.description,this.saneDetail=this.item.detail,this._labelHighlights=(V=this.item.highlights)===null||V===void 0?void 0:V.label,this._descriptionHighlights=(K=this.item.highlights)===null||K===void 0?void 0:K.description,this._detailHighlights=(F=this.item.highlights)===null||F===void 0?void 0:F.detail,this.saneTooltip=this.item.tooltip),this._init=new d.Lazy(()=>{var q;const ie=(q=N.label)!==null&&q!==void 0?q:"",ae=(0,n.parseLabelWithIcons)(ie).text.trim(),ne=N.ariaLabel||[ie,this.saneDescription,this.saneDetail].map($=>(0,n.getCodiconAriaLabel)($)).filter($=>!!$).join(", ");return{saneLabel:ie,saneSortLabel:ae,saneAriaLabel:ne}})}get saneLabel(){return this._init.value.saneLabel}get saneSortLabel(){return this._init.value.saneSortLabel}get saneAriaLabel(){return this._init.value.saneAriaLabel}get element(){return this._element}set element(N){this._element=N}get hidden(){return this._hidden}set hidden(N){this._hidden=N}get checked(){return this._checked}set checked(N){N!==this._checked&&(this._checked=N,this._onChecked.fire({listElement:this,checked:N}))}get separator(){return this._separator}set separator(N){this._separator=N}get labelHighlights(){return this._labelHighlights}set labelHighlights(N){this._labelHighlights=N}get descriptionHighlights(){return this._descriptionHighlights}set descriptionHighlights(N){this._descriptionHighlights=N}get detailHighlights(){return this._detailHighlights}set detailHighlights(N){this._detailHighlights=N}}class h{constructor(N,M){this.themeService=N,this.hoverDelegate=M}get templateId(){return h.ID}renderTemplate(N){const M=Object.create(null);M.toDisposeElement=[],M.toDisposeTemplate=[],M.entry=L.append(N,o(".quick-input-list-entry"));const R=L.append(M.entry,o("label.quick-input-list-label"));M.toDisposeTemplate.push(L.addStandardDisposableListener(R,L.EventType.CLICK,K=>{M.checkbox.offsetParent||K.preventDefault()})),M.checkbox=L.append(R,o("input.quick-input-list-checkbox")),M.checkbox.type="checkbox",M.toDisposeTemplate.push(L.addStandardDisposableListener(M.checkbox,L.EventType.CHANGE,K=>{M.element.checked=M.checkbox.checked}));const x=L.append(R,o(".quick-input-list-rows")),O=L.append(x,o(".quick-input-list-row")),B=L.append(x,o(".quick-input-list-row"));M.label=new E.IconLabel(O,{supportHighlights:!0,supportDescriptionHighlights:!0,supportIcons:!0,hoverDelegate:this.hoverDelegate}),M.toDisposeTemplate.push(M.label),M.icon=L.prepend(M.label.element,o(".quick-input-list-icon"));const W=L.append(O,o(".quick-input-list-entry-keybinding"));M.keybinding=new S.KeybindingLabel(W,r.OS);const V=L.append(B,o(".quick-input-list-label-meta"));return M.detail=new E.IconLabel(V,{supportHighlights:!0,supportIcons:!0,hoverDelegate:this.hoverDelegate}),M.toDisposeTemplate.push(M.detail),M.separator=L.append(M.entry,o(".quick-input-list-separator")),M.actionBar=new y.ActionBar(M.entry,this.hoverDelegate?{hoverDelegate:this.hoverDelegate}:void 0),M.actionBar.domNode.classList.add("quick-input-list-entry-action-bar"),M.toDisposeTemplate.push(M.actionBar),M}renderElement(N,M,R){var x,O,B,W;R.element=N,N.element=(x=R.entry)!==null&&x!==void 0?x:void 0;const V=N.item?N.item:N.separator;R.checkbox.checked=N.checked,R.toDisposeElement.push(N.onChecked(ne=>R.checkbox.checked=ne));const{labelHighlights:K,descriptionHighlights:F,detailHighlights:q}=N;if(!((O=N.item)===null||O===void 0)&&O.iconPath){const ne=(0,l.isDark)(this.themeService.getColorTheme().type)?N.item.iconPath.dark:(B=N.item.iconPath.light)!==null&&B!==void 0?B:N.item.iconPath.dark,$=s.URI.revive(ne);R.icon.className="quick-input-list-icon",R.icon.style.backgroundImage=L.asCSSUrl($)}else R.icon.style.backgroundImage="",R.icon.className=!((W=N.item)===null||W===void 0)&&W.iconClass?`quick-input-list-icon ${N.item.iconClass}`:"";const ie={matches:K||[],descriptionTitle:N.saneTooltip?void 0:N.saneDescription,descriptionMatches:F||[],labelEscapeNewLines:!0};V.type!=="separator"?(ie.extraClasses=V.iconClasses,ie.italic=V.italic,ie.strikethrough=V.strikethrough,R.entry.classList.remove("quick-input-list-separator-as-item")):R.entry.classList.add("quick-input-list-separator-as-item"),R.label.setLabel(N.saneLabel,N.saneDescription,ie),R.keybinding.set(V.type==="separator"?void 0:V.keybinding),N.saneDetail?(R.detail.element.style.display="",R.detail.setLabel(N.saneDetail,void 0,{matches:q,title:N.saneTooltip?void 0:N.saneDetail,labelEscapeNewLines:!0})):R.detail.element.style.display="none",N.item&&N.separator&&N.separator.label?(R.separator.textContent=N.separator.label,R.separator.style.display=""):R.separator.style.display="none",R.entry.classList.toggle("quick-input-list-separator-border",!!N.separator);const ae=V.buttons;ae&&ae.length?(R.actionBar.push(ae.map((ne,$)=>(0,c.quickInputButtonToAction)(ne,`id-${$}`,()=>V.type!=="separator"?N.fireButtonTriggered({button:ne,item:V}):N.fireSeparatorButtonTriggered({button:ne,separator:V}))),{icon:!0,label:!1}),R.entry.classList.add("has-actions")):R.entry.classList.remove("has-actions")}disposeElement(N,M,R){R.toDisposeElement=(0,t.dispose)(R.toDisposeElement),R.actionBar.clear()}disposeTemplate(N){N.toDisposeElement=(0,t.dispose)(N.toDisposeElement),N.toDisposeTemplate=(0,t.dispose)(N.toDisposeTemplate)}}h.ID="listelement";class m{getHeight(N){return N.item?N.saneDetail?44:22:24}getTemplateId(N){return h.ID}}var C;(function(P){P[P.First=1]="First",P[P.Second=2]="Second",P[P.Last=3]="Last",P[P.Next=4]="Next",P[P.Previous=5]="Previous",P[P.NextPage=6]="NextPage",P[P.PreviousPage=7]="PreviousPage"})(C||(e.QuickInputListFocus=C={}));class w{constructor(N,M,R,x){this.parent=N,this.options=R,this.inputElements=[],this.elements=[],this.elementsToIndexes=new Map,this.matchOnDescription=!1,this.matchOnDetail=!1,this.matchOnLabel=!0,this.matchOnLabelMode="fuzzy",this.sortByLabel=!0,this._onChangedAllVisibleChecked=new i.Emitter,this.onChangedAllVisibleChecked=this._onChangedAllVisibleChecked.event,this._onChangedCheckedCount=new i.Emitter,this.onChangedCheckedCount=this._onChangedCheckedCount.event,this._onChangedVisibleCount=new i.Emitter,this.onChangedVisibleCount=this._onChangedVisibleCount.event,this._onChangedCheckedElements=new i.Emitter,this.onChangedCheckedElements=this._onChangedCheckedElements.event,this._onButtonTriggered=new i.Emitter,this.onButtonTriggered=this._onButtonTriggered.event,this._onSeparatorButtonTriggered=new i.Emitter,this.onSeparatorButtonTriggered=this._onSeparatorButtonTriggered.event,this._onKeyDown=new i.Emitter,this.onKeyDown=this._onKeyDown.event,this._onLeave=new i.Emitter,this.onLeave=this._onLeave.event,this._listElementChecked=new i.Emitter,this._fireCheckedEvents=!0,this.elementDisposables=[],this.disposables=[],this.id=M,this.container=L.append(this.parent,o(".quick-input-list"));const O=new m,B=new A;this.list=R.createList("QuickInput",this.container,O,[new h(x,R.hoverDelegate)],{identityProvider:{getId:V=>{var K,F,q,ie,ae,ne,$,J;return(J=(ne=(ie=(F=(K=V.item)===null||K===void 0?void 0:K.id)!==null&&F!==void 0?F:(q=V.item)===null||q===void 0?void 0:q.label)!==null&&ie!==void 0?ie:(ae=V.separator)===null||ae===void 0?void 0:ae.id)!==null&&ne!==void 0?ne:($=V.separator)===null||$===void 0?void 0:$.label)!==null&&J!==void 0?J:""}},setRowLineHeight:!1,multipleSelectionSupport:!1,horizontalScrolling:!1,accessibilityProvider:B}),this.list.getHTMLElement().id=M,this.disposables.push(this.list),this.disposables.push(this.list.onKeyDown(V=>{const K=new k.StandardKeyboardEvent(V);switch(K.keyCode){case 10:this.toggleCheckbox();break;case 31:(r.isMacintosh?V.metaKey:V.ctrlKey)&&this.list.setFocus((0,p.range)(this.list.length));break;case 16:{const F=this.list.getFocus();F.length===1&&F[0]===0&&this._onLeave.fire();break}case 18:{const F=this.list.getFocus();F.length===1&&F[0]===this.list.length-1&&this._onLeave.fire();break}}this._onKeyDown.fire(K)})),this.disposables.push(this.list.onMouseDown(V=>{V.browserEvent.button!==2&&V.browserEvent.preventDefault()})),this.disposables.push(L.addDisposableListener(this.container,L.EventType.CLICK,V=>{(V.x||V.y)&&this._onLeave.fire()})),this.disposables.push(this.list.onMouseMiddleClick(V=>{this._onLeave.fire()})),this.disposables.push(this.list.onContextMenu(V=>{typeof V.index=="number"&&(V.browserEvent.preventDefault(),this.list.setSelection([V.index]))}));const W=new _.ThrottledDelayer(R.hoverDelegate.delay);this.disposables.push(this.list.onMouseOver(async V=>{var K;if(V.browserEvent.target instanceof HTMLAnchorElement){W.cancel();return}if(!(!(V.browserEvent.relatedTarget instanceof HTMLAnchorElement)&&L.isAncestor(V.browserEvent.relatedTarget,(K=V.element)===null||K===void 0?void 0:K.element)))try{await W.trigger(async()=>{V.element&&this.showHover(V.element)})}catch(F){if(!(0,a.isCancellationError)(F))throw F}})),this.disposables.push(this.list.onMouseOut(V=>{var K;L.isAncestor(V.browserEvent.relatedTarget,(K=V.element)===null||K===void 0?void 0:K.element)||W.cancel()})),this.disposables.push(W),this.disposables.push(this._listElementChecked.event(V=>this.fireCheckedEvents())),this.disposables.push(this._onChangedAllVisibleChecked,this._onChangedCheckedCount,this._onChangedVisibleCount,this._onChangedCheckedElements,this._onButtonTriggered,this._onSeparatorButtonTriggered,this._onLeave,this._onKeyDown)}get onDidChangeFocus(){return i.Event.map(this.list.onDidChangeFocus,N=>N.elements.map(M=>M.item))}get onDidChangeSelection(){return i.Event.map(this.list.onDidChangeSelection,N=>({items:N.elements.map(M=>M.item),event:N.browserEvent}))}get scrollTop(){return this.list.scrollTop}set scrollTop(N){this.list.scrollTop=N}get ariaLabel(){return this.list.getHTMLElement().ariaLabel}set ariaLabel(N){this.list.getHTMLElement().ariaLabel=N}getAllVisibleChecked(){return this.allVisibleChecked(this.elements,!1)}allVisibleChecked(N,M=!0){for(let R=0,x=N.length;R{M.hidden||(M.checked=N)})}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}setElements(N){this.elementDisposables=(0,t.dispose)(this.elementDisposables);const M=B=>this.fireButtonTriggered(B),R=B=>this.fireSeparatorButtonTriggered(B);this.inputElements=N;const x=new Map,O=this.parent.classList.contains("show-checkboxes");this.elements=N.reduce((B,W,V)=>{var K;const F=V>0?N[V-1]:void 0;if(W.type==="separator"&&!W.buttons)return B;const q=new g(W,F,V,O,M,R,this._listElementChecked),ie=B.length;return B.push(q),x.set((K=q.item)!==null&&K!==void 0?K:q.separator,ie),B},[]),this.elementsToIndexes=x,this.list.splice(0,this.list.length),this.list.splice(0,this.list.length,this.elements),this._onChangedVisibleCount.fire(this.elements.length)}getFocusedElements(){return this.list.getFocusedElements().map(N=>N.item)}setFocusedElements(N){if(this.list.setFocus(N.filter(M=>this.elementsToIndexes.has(M)).map(M=>this.elementsToIndexes.get(M))),N.length>0){const M=this.list.getFocus()[0];typeof M=="number"&&this.list.reveal(M)}}getActiveDescendant(){return this.list.getHTMLElement().getAttribute("aria-activedescendant")}setSelectedElements(N){this.list.setSelection(N.filter(M=>this.elementsToIndexes.has(M)).map(M=>this.elementsToIndexes.get(M)))}getCheckedElements(){return this.elements.filter(N=>N.checked).map(N=>N.item).filter(N=>!!N)}setCheckedElements(N){try{this._fireCheckedEvents=!1;const M=new Set;for(const R of N)M.add(R);for(const R of this.elements)R.checked=M.has(R.item)}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}set enabled(N){this.list.getHTMLElement().style.pointerEvents=N?"":"none"}focus(N){if(!this.list.length)return;switch(N===C.Second&&this.list.length<2&&(N=C.First),N){case C.First:this.list.scrollTop=0,this.list.focusFirst(void 0,R=>!!R.item);break;case C.Second:this.list.scrollTop=0,this.list.focusNth(1,void 0,R=>!!R.item);break;case C.Last:this.list.scrollTop=this.list.scrollHeight,this.list.focusLast(void 0,R=>!!R.item);break;case C.Next:{this.list.focusNext(void 0,!0,void 0,x=>!!x.item);const R=this.list.getFocus()[0];R!==0&&!this.elements[R-1].item&&this.list.firstVisibleIndex>R-1&&this.list.reveal(R-1);break}case C.Previous:{this.list.focusPrevious(void 0,!0,void 0,x=>!!x.item);const R=this.list.getFocus()[0];R!==0&&!this.elements[R-1].item&&this.list.firstVisibleIndex>R-1&&this.list.reveal(R-1);break}case C.NextPage:this.list.focusNextPage(void 0,R=>!!R.item);break;case C.PreviousPage:this.list.focusPreviousPage(void 0,R=>!!R.item);break}const M=this.list.getFocus()[0];typeof M=="number"&&this.list.reveal(M)}clearFocus(){this.list.setFocus([])}domFocus(){this.list.domFocus()}showHover(N){var M,R,x;this._lastHover&&!this._lastHover.isDisposed&&((R=(M=this.options.hoverDelegate).onDidHideHover)===null||R===void 0||R.call(M),(x=this._lastHover)===null||x===void 0||x.dispose()),!(!N.element||!N.saneTooltip)&&(this._lastHover=this.options.hoverDelegate.showHover({content:N.saneTooltip,target:N.element,linkHandler:O=>{this.options.linkOpenerDelegate(O)},appearance:{showPointer:!0},container:this.container,position:{hoverPosition:1}},!1))}layout(N){this.list.getHTMLElement().style.maxHeight=N?`${Math.floor(N/44)*44+6}px`:"",this.list.layout()}filter(N){if(!(this.sortByLabel||this.matchOnLabel||this.matchOnDescription||this.matchOnDetail))return this.list.layout(),!1;const M=N;if(N=N.trim(),!N||!(this.matchOnLabel||this.matchOnDescription||this.matchOnDetail))this.elements.forEach(x=>{x.labelHighlights=void 0,x.descriptionHighlights=void 0,x.detailHighlights=void 0,x.hidden=!1;const O=x.index&&this.inputElements[x.index-1];x.item&&(x.separator=O&&O.type==="separator"&&!O.buttons?O:void 0)});else{let x;this.elements.forEach(O=>{var B,W,V,K;let F;this.matchOnLabelMode==="fuzzy"?F=this.matchOnLabel&&(B=(0,n.matchesFuzzyIconAware)(N,(0,n.parseLabelWithIcons)(O.saneLabel)))!==null&&B!==void 0?B:void 0:F=this.matchOnLabel&&(W=D(M,(0,n.parseLabelWithIcons)(O.saneLabel)))!==null&&W!==void 0?W:void 0;const q=this.matchOnDescription&&(V=(0,n.matchesFuzzyIconAware)(N,(0,n.parseLabelWithIcons)(O.saneDescription||"")))!==null&&V!==void 0?V:void 0,ie=this.matchOnDetail&&(K=(0,n.matchesFuzzyIconAware)(N,(0,n.parseLabelWithIcons)(O.saneDetail||"")))!==null&&K!==void 0?K:void 0;if(F||q||ie?(O.labelHighlights=F,O.descriptionHighlights=q,O.detailHighlights=ie,O.hidden=!1):(O.labelHighlights=void 0,O.descriptionHighlights=void 0,O.detailHighlights=void 0,O.hidden=O.item?!O.item.alwaysShow:!0),O.item?O.separator=void 0:O.separator&&(O.hidden=!0),!this.sortByLabel){const ae=O.index&&this.inputElements[O.index-1];x=ae&&ae.type==="separator"?ae:x,x&&!O.hidden&&(O.separator=x,x=void 0)}})}const R=this.elements.filter(x=>!x.hidden);if(this.sortByLabel&&N){const x=N.toLowerCase();R.sort((O,B)=>T(O,B,x))}return this.elementsToIndexes=R.reduce((x,O,B)=>{var W;return x.set((W=O.item)!==null&&W!==void 0?W:O.separator,B),x},new Map),this.list.splice(0,this.list.length,R),this.list.setFocus([]),this.list.layout(),this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedVisibleCount.fire(R.length),!0}toggleCheckbox(){try{this._fireCheckedEvents=!1;const N=this.list.getFocusedElements(),M=this.allVisibleChecked(N);for(const R of N)R.checked=!M}finally{this._fireCheckedEvents=!0,this.fireCheckedEvents()}}display(N){this.container.style.display=N?"":"none"}isDisplayed(){return this.container.style.display!=="none"}dispose(){this.elementDisposables=(0,t.dispose)(this.elementDisposables),this.disposables=(0,t.dispose)(this.disposables)}fireCheckedEvents(){this._fireCheckedEvents&&(this._onChangedAllVisibleChecked.fire(this.getAllVisibleChecked()),this._onChangedCheckedCount.fire(this.getCheckedCount()),this._onChangedCheckedElements.fire(this.getCheckedElements()))}fireButtonTriggered(N){this._onButtonTriggered.fire(N)}fireSeparatorButtonTriggered(N){this._onSeparatorButtonTriggered.fire(N)}style(N){this.list.style(N)}toggleHover(){const N=this.list.getFocusedElements()[0];if(!N?.saneTooltip)return;if(this._lastHover&&!this._lastHover.isDisposed){this._lastHover.dispose();return}const M=this.list.getFocusedElements()[0];if(!M)return;this.showHover(M);const R=new t.DisposableStore;R.add(this.list.onDidChangeFocus(x=>{x.indexes.length&&this.showHover(x.elements[0])})),this._lastHover&&R.add(this._lastHover),this._toggleHover=R,this.elementDisposables.push(this._toggleHover)}}e.QuickInputList=w,ke([b.memoize],w.prototype,"onDidChangeFocus",null),ke([b.memoize],w.prototype,"onDidChangeSelection",null);function D(P,N){const{text:M,iconOffsets:R}=N;if(!R||R.length===0)return I(P,M);const x=(0,u.ltrim)(M," "),O=M.length-x.length,B=I(P,x);if(B)for(const W of B){const V=R[W.start+O]+O;W.start+=V,W.end+=V}return B}function I(P,N){const M=N.toLowerCase().indexOf(P.toLowerCase());return M!==-1?[{start:M,end:M+P.length}]:null}function T(P,N,M){const R=P.labelHighlights||[],x=N.labelHighlights||[];return R.length&&!x.length?-1:!R.length&&x.length?1:R.length===0&&x.length===0?0:(0,v.compareAnything)(P.saneSortLabel,N.saneSortLabel,M)}class A{getWidgetAriaLabel(){return(0,f.localize)(0,null)}getAriaLabel(N){var M;return!((M=N.separator)===null||M===void 0)&&M.label?`${N.saneAriaLabel}, ${N.separator.label}`:N.saneAriaLabel}getWidgetRole(){return"listbox"}getRole(N){return N.hasCheckbox?"checkbox":"option"}isChecked(N){if(N.hasCheckbox)return{value:N.checked,onDidChange:N.onChecked}}}}),define(se[367],oe([1,0,7,46,159,13,14,26,6,2,17,100,28,748,70,366,350,178]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputHoverDelegate=e.InputBox=e.QuickPick=e.backButton=void 0,e.backButton={iconClass:i.ThemeIcon.asClassName(p.Codicon.quickInputBack),tooltip:(0,n.localize)(0,null),handle:-1};class f extends v.Disposable{constructor(o){super(),this.ui=o,this._widgetUpdated=!1,this.visible=!1,this._enabled=!0,this._busy=!1,this._ignoreFocusOut=!1,this._buttons=[],this.buttonsUpdated=!1,this._toggles=[],this.togglesUpdated=!1,this.noValidationMessage=f.noPromptMessage,this._severity=a.default.Ignore,this.onDidTriggerButtonEmitter=this._register(new _.Emitter),this.onDidHideEmitter=this._register(new _.Emitter),this.onDisposeEmitter=this._register(new _.Emitter),this.visibleDisposables=this._register(new v.DisposableStore),this.onDidHide=this.onDidHideEmitter.event}get title(){return this._title}set title(o){this._title=o,this.update()}get description(){return this._description}set description(o){this._description=o,this.update()}get step(){return this._steps}set step(o){this._steps=o,this.update()}get totalSteps(){return this._totalSteps}set totalSteps(o){this._totalSteps=o,this.update()}get enabled(){return this._enabled}set enabled(o){this._enabled=o,this.update()}get contextKey(){return this._contextKey}set contextKey(o){this._contextKey=o,this.update()}get busy(){return this._busy}set busy(o){this._busy=o,this.update()}get ignoreFocusOut(){return this._ignoreFocusOut}set ignoreFocusOut(o){const g=this._ignoreFocusOut!==o&&!b.isIOS;this._ignoreFocusOut=o&&!b.isIOS,g&&this.update()}get buttons(){return this._buttons}set buttons(o){this._buttons=o,this.buttonsUpdated=!0,this.update()}get toggles(){return this._toggles}set toggles(o){this._toggles=o??[],this.togglesUpdated=!0,this.update()}get validationMessage(){return this._validationMessage}set validationMessage(o){this._validationMessage=o,this.update()}get severity(){return this._severity}set severity(o){this._severity=o,this.update()}show(){this.visible||(this.visibleDisposables.add(this.ui.onDidTriggerButton(o=>{this.buttons.indexOf(o)!==-1&&this.onDidTriggerButtonEmitter.fire(o)})),this.ui.show(this),this.visible=!0,this._lastValidationMessage=void 0,this._lastSeverity=void 0,this.buttons.length&&(this.buttonsUpdated=!0),this.toggles.length&&(this.togglesUpdated=!0),this.update())}hide(){this.visible&&this.ui.hide()}didHide(o=t.QuickInputHideReason.Other){this.visible=!1,this.visibleDisposables.clear(),this.onDidHideEmitter.fire({reason:o})}update(){var o,g;if(!this.visible)return;const h=this.getTitle();h&&this.ui.title.textContent!==h?this.ui.title.textContent=h:!h&&this.ui.title.innerHTML!==" "&&(this.ui.title.innerText="\xA0");const m=this.getDescription();if(this.ui.description1.textContent!==m&&(this.ui.description1.textContent=m),this.ui.description2.textContent!==m&&(this.ui.description2.textContent=m),this._widgetUpdated&&(this._widgetUpdated=!1,this._widget?L.reset(this.ui.widget,this._widget):L.reset(this.ui.widget)),this.busy&&!this.busyDelay&&(this.busyDelay=new S.TimeoutTimer,this.busyDelay.setIfNotSet(()=>{this.visible&&this.ui.progressBar.infinite()},800)),!this.busy&&this.busyDelay&&(this.ui.progressBar.stop(),this.busyDelay.cancel(),this.busyDelay=void 0),this.buttonsUpdated){this.buttonsUpdated=!1,this.ui.leftActionBar.clear();const w=this.buttons.filter(I=>I===e.backButton).map((I,T)=>(0,u.quickInputButtonToAction)(I,`id-${T}`,async()=>this.onDidTriggerButtonEmitter.fire(I)));this.ui.leftActionBar.push(w,{icon:!0,label:!1}),this.ui.rightActionBar.clear();const D=this.buttons.filter(I=>I!==e.backButton).map((I,T)=>(0,u.quickInputButtonToAction)(I,`id-${T}`,async()=>this.onDidTriggerButtonEmitter.fire(I)));this.ui.rightActionBar.push(D,{icon:!0,label:!1})}if(this.togglesUpdated){this.togglesUpdated=!1;const w=(g=(o=this.toggles)===null||o===void 0?void 0:o.filter(D=>D instanceof y.Toggle))!==null&&g!==void 0?g:[];this.ui.inputBox.toggles=w}this.ui.ignoreFocusOut=this.ignoreFocusOut,this.ui.setEnabled(this.enabled),this.ui.setContextKey(this.contextKey);const C=this.validationMessage||this.noValidationMessage;this._lastValidationMessage!==C&&(this._lastValidationMessage=C,L.reset(this.ui.message),(0,u.renderQuickInputDescription)(C,this.ui.message,{callback:w=>{this.ui.linkOpenerDelegate(w)},disposables:this.visibleDisposables})),this._lastSeverity!==this.severity&&(this._lastSeverity=this.severity,this.showMessageDecoration(this.severity))}getTitle(){return this.title&&this.step?`${this.title} (${this.getSteps()})`:this.title?this.title:this.step?this.getSteps():""}getDescription(){return this.description||""}getSteps(){return this.step&&this.totalSteps?(0,n.localize)(2,null,this.step,this.totalSteps):this.step?String(this.step):""}showMessageDecoration(o){if(this.ui.inputBox.showDecoration(o),o!==a.default.Ignore){const g=this.ui.inputBox.stylesForType(o);this.ui.message.style.color=g.foreground?`${g.foreground}`:"",this.ui.message.style.backgroundColor=g.background?`${g.background}`:"",this.ui.message.style.border=g.border?`1px solid ${g.border}`:"",this.ui.message.style.marginBottom="-2px"}else this.ui.message.style.color="",this.ui.message.style.backgroundColor="",this.ui.message.style.border="",this.ui.message.style.marginBottom=""}dispose(){this.hide(),this.onDisposeEmitter.fire(),super.dispose()}}f.noPromptMessage=(0,n.localize)(1,null);class c extends f{constructor(){super(...arguments),this._value="",this.onDidChangeValueEmitter=this._register(new _.Emitter),this.onWillAcceptEmitter=this._register(new _.Emitter),this.onDidAcceptEmitter=this._register(new _.Emitter),this.onDidCustomEmitter=this._register(new _.Emitter),this._items=[],this.itemsUpdated=!1,this._canSelectMany=!1,this._canAcceptInBackground=!1,this._matchOnDescription=!1,this._matchOnDetail=!1,this._matchOnLabel=!0,this._matchOnLabelMode="fuzzy",this._sortByLabel=!0,this._keepScrollPosition=!1,this._itemActivation=t.ItemActivation.FIRST,this._activeItems=[],this.activeItemsUpdated=!1,this.activeItemsToConfirm=[],this.onDidChangeActiveEmitter=this._register(new _.Emitter),this._selectedItems=[],this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=[],this.onDidChangeSelectionEmitter=this._register(new _.Emitter),this.onDidTriggerItemButtonEmitter=this._register(new _.Emitter),this.onDidTriggerSeparatorButtonEmitter=this._register(new _.Emitter),this.valueSelectionUpdated=!0,this._ok="default",this._customButton=!1,this.filterValue=o=>o,this.onDidChangeValue=this.onDidChangeValueEmitter.event,this.onWillAccept=this.onWillAcceptEmitter.event,this.onDidAccept=this.onDidAcceptEmitter.event,this.onDidChangeActive=this.onDidChangeActiveEmitter.event,this.onDidChangeSelection=this.onDidChangeSelectionEmitter.event,this.onDidTriggerItemButton=this.onDidTriggerItemButtonEmitter.event,this.onDidTriggerSeparatorButton=this.onDidTriggerSeparatorButtonEmitter.event}get quickNavigate(){return this._quickNavigate}set quickNavigate(o){this._quickNavigate=o,this.update()}get value(){return this._value}set value(o){this.doSetValue(o)}doSetValue(o,g){this._value!==o&&(this._value=o,g||this.update(),this.visible&&this.ui.list.filter(this.filterValue(this._value))&&this.trySelectFirst(),this.onDidChangeValueEmitter.fire(this._value))}set ariaLabel(o){this._ariaLabel=o,this.update()}get ariaLabel(){return this._ariaLabel}get placeholder(){return this._placeholder}set placeholder(o){this._placeholder=o,this.update()}get items(){return this._items}get scrollTop(){return this.ui.list.scrollTop}set scrollTop(o){this.ui.list.scrollTop=o}set items(o){this._items=o,this.itemsUpdated=!0,this.update()}get canSelectMany(){return this._canSelectMany}set canSelectMany(o){this._canSelectMany=o,this.update()}get canAcceptInBackground(){return this._canAcceptInBackground}set canAcceptInBackground(o){this._canAcceptInBackground=o}get matchOnDescription(){return this._matchOnDescription}set matchOnDescription(o){this._matchOnDescription=o,this.update()}get matchOnDetail(){return this._matchOnDetail}set matchOnDetail(o){this._matchOnDetail=o,this.update()}get matchOnLabel(){return this._matchOnLabel}set matchOnLabel(o){this._matchOnLabel=o,this.update()}get matchOnLabelMode(){return this._matchOnLabelMode}set matchOnLabelMode(o){this._matchOnLabelMode=o,this.update()}get sortByLabel(){return this._sortByLabel}set sortByLabel(o){this._sortByLabel=o,this.update()}get keepScrollPosition(){return this._keepScrollPosition}set keepScrollPosition(o){this._keepScrollPosition=o}get itemActivation(){return this._itemActivation}set itemActivation(o){this._itemActivation=o}get activeItems(){return this._activeItems}set activeItems(o){this._activeItems=o,this.activeItemsUpdated=!0,this.update()}get selectedItems(){return this._selectedItems}set selectedItems(o){this._selectedItems=o,this.selectedItemsUpdated=!0,this.update()}get keyMods(){return this._quickNavigate?t.NO_KEY_MODS:this.ui.keyMods}set valueSelection(o){this._valueSelection=o,this.valueSelectionUpdated=!0,this.update()}get customButton(){return this._customButton}set customButton(o){this._customButton=o,this.update()}get customLabel(){return this._customButtonLabel}set customLabel(o){this._customButtonLabel=o,this.update()}get customHover(){return this._customButtonHover}set customHover(o){this._customButtonHover=o,this.update()}get ok(){return this._ok}set ok(o){this._ok=o,this.update()}get hideInput(){return!!this._hideInput}set hideInput(o){this._hideInput=o,this.update()}trySelectFirst(){this.canSelectMany||this.ui.list.focus(r.QuickInputListFocus.First)}show(){this.visible||(this.visibleDisposables.add(this.ui.inputBox.onDidChange(o=>{this.doSetValue(o,!0)})),this.visibleDisposables.add((this._hideInput?this.ui.list:this.ui.inputBox).onKeyDown(o=>{switch(o.keyCode){case 18:this.ui.list.focus(r.QuickInputListFocus.Next),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 16:this.ui.list.getFocusedElements().length?this.ui.list.focus(r.QuickInputListFocus.Previous):this.ui.list.focus(r.QuickInputListFocus.Last),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 12:this.ui.list.focus(r.QuickInputListFocus.NextPage),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 11:this.ui.list.focus(r.QuickInputListFocus.PreviousPage),this.canSelectMany&&this.ui.list.domFocus(),L.EventHelper.stop(o,!0);break;case 17:if(!this._canAcceptInBackground||!this.ui.inputBox.isSelectionAtEnd())return;this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.handleAccept(!0));break;case 14:(o.ctrlKey||o.metaKey)&&!o.shiftKey&&!o.altKey&&(this.ui.list.focus(r.QuickInputListFocus.First),L.EventHelper.stop(o,!0));break;case 13:(o.ctrlKey||o.metaKey)&&!o.shiftKey&&!o.altKey&&(this.ui.list.focus(r.QuickInputListFocus.Last),L.EventHelper.stop(o,!0));break}})),this.visibleDisposables.add(this.ui.onDidAccept(()=>{this.canSelectMany?this.ui.list.getCheckedElements().length||(this._selectedItems=[],this.onDidChangeSelectionEmitter.fire(this.selectedItems)):this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems)),this.handleAccept(!1)})),this.visibleDisposables.add(this.ui.onDidCustom(()=>{this.onDidCustomEmitter.fire()})),this.visibleDisposables.add(this.ui.list.onDidChangeFocus(o=>{this.activeItemsUpdated||this.activeItemsToConfirm!==this._activeItems&&(0,E.equals)(o,this._activeItems,(g,h)=>g===h)||(this._activeItems=o,this.onDidChangeActiveEmitter.fire(o))})),this.visibleDisposables.add(this.ui.list.onDidChangeSelection(({items:o,event:g})=>{if(this.canSelectMany){o.length&&this.ui.list.setSelectedElements([]);return}this.selectedItemsToConfirm!==this._selectedItems&&(0,E.equals)(o,this._selectedItems,(h,m)=>h===m)||(this._selectedItems=o,this.onDidChangeSelectionEmitter.fire(o),o.length&&this.handleAccept(L.isMouseEvent(g)&&g.button===1))})),this.visibleDisposables.add(this.ui.list.onChangedCheckedElements(o=>{this.canSelectMany&&(this.selectedItemsToConfirm!==this._selectedItems&&(0,E.equals)(o,this._selectedItems,(g,h)=>g===h)||(this._selectedItems=o,this.onDidChangeSelectionEmitter.fire(o)))})),this.visibleDisposables.add(this.ui.list.onButtonTriggered(o=>this.onDidTriggerItemButtonEmitter.fire(o))),this.visibleDisposables.add(this.ui.list.onSeparatorButtonTriggered(o=>this.onDidTriggerSeparatorButtonEmitter.fire(o))),this.visibleDisposables.add(this.registerQuickNavigation()),this.valueSelectionUpdated=!0),super.show()}handleAccept(o){let g=!1;this.onWillAcceptEmitter.fire({veto:()=>g=!0}),g||this.onDidAcceptEmitter.fire({inBackground:o})}registerQuickNavigation(){return L.addDisposableListener(this.ui.container,L.EventType.KEY_UP,o=>{if(this.canSelectMany||!this._quickNavigate)return;const g=new k.StandardKeyboardEvent(o),h=g.keyCode;this._quickNavigate.keybindings.some(w=>{const D=w.getChords();return D.length>1?!1:D[0].shiftKey&&h===4?!(g.ctrlKey||g.altKey||g.metaKey):!!(D[0].altKey&&h===6||D[0].ctrlKey&&h===5||D[0].metaKey&&h===57)})&&(this.activeItems[0]&&(this._selectedItems=[this.activeItems[0]],this.onDidChangeSelectionEmitter.fire(this.selectedItems),this.handleAccept(!1)),this._quickNavigate=void 0)})}update(){if(!this.visible)return;const o=this.keepScrollPosition?this.scrollTop:0,g=!!this.description,h={title:!!this.title||!!this.step||!!this.buttons.length,description:g,checkAll:this.canSelectMany&&!this._hideCheckAll,checkBox:this.canSelectMany,inputBox:!this._hideInput,progressBar:!this._hideInput||g,visibleCount:!0,count:this.canSelectMany&&!this._hideCountBadge,ok:this.ok==="default"?this.canSelectMany:this.ok,list:!0,message:!!this.validationMessage,customButton:this.customButton};this.ui.setVisibilities(h),super.update(),this.ui.inputBox.value!==this.value&&(this.ui.inputBox.value=this.value),this.valueSelectionUpdated&&(this.valueSelectionUpdated=!1,this.ui.inputBox.select(this._valueSelection&&{start:this._valueSelection[0],end:this._valueSelection[1]})),this.ui.inputBox.placeholder!==(this.placeholder||"")&&(this.ui.inputBox.placeholder=this.placeholder||"");let m=this.ariaLabel;if(!m&&h.inputBox&&(m=this.placeholder||c.DEFAULT_ARIA_LABEL,this.title&&(m+=` - ${this.title}`)),this.ui.list.ariaLabel!==m&&(this.ui.list.ariaLabel=m??null),this.ui.list.matchOnDescription=this.matchOnDescription,this.ui.list.matchOnDetail=this.matchOnDetail,this.ui.list.matchOnLabel=this.matchOnLabel,this.ui.list.matchOnLabelMode=this.matchOnLabelMode,this.ui.list.sortByLabel=this.sortByLabel,this.itemsUpdated)switch(this.itemsUpdated=!1,this.ui.list.setElements(this.items),this.ui.list.filter(this.filterValue(this.ui.inputBox.value)),this.ui.checkAll.checked=this.ui.list.getAllVisibleChecked(),this.ui.visibleCount.setCount(this.ui.list.getVisibleCount()),this.ui.count.setCount(this.ui.list.getCheckedCount()),this._itemActivation){case t.ItemActivation.NONE:this._itemActivation=t.ItemActivation.FIRST;break;case t.ItemActivation.SECOND:this.ui.list.focus(r.QuickInputListFocus.Second),this._itemActivation=t.ItemActivation.FIRST;break;case t.ItemActivation.LAST:this.ui.list.focus(r.QuickInputListFocus.Last),this._itemActivation=t.ItemActivation.FIRST;break;default:this.trySelectFirst();break}this.ui.container.classList.contains("show-checkboxes")!==!!this.canSelectMany&&(this.canSelectMany?this.ui.list.clearFocus():this.trySelectFirst()),this.activeItemsUpdated&&(this.activeItemsUpdated=!1,this.activeItemsToConfirm=this._activeItems,this.ui.list.setFocusedElements(this.activeItems),this.activeItemsToConfirm===this._activeItems&&(this.activeItemsToConfirm=null)),this.selectedItemsUpdated&&(this.selectedItemsUpdated=!1,this.selectedItemsToConfirm=this._selectedItems,this.canSelectMany?this.ui.list.setCheckedElements(this.selectedItems):this.ui.list.setSelectedElements(this.selectedItems),this.selectedItemsToConfirm===this._selectedItems&&(this.selectedItemsToConfirm=null)),this.ui.customButton.label=this.customLabel||"",this.ui.customButton.element.title=this.customHover||"",h.inputBox||(this.ui.list.domFocus(),this.canSelectMany&&this.ui.list.focus(r.QuickInputListFocus.First)),this.keepScrollPosition&&(this.scrollTop=o)}}e.QuickPick=c,c.DEFAULT_ARIA_LABEL=(0,n.localize)(3,null);class d extends f{constructor(){super(...arguments),this._value="",this.valueSelectionUpdated=!0,this._password=!1,this.onDidValueChangeEmitter=this._register(new _.Emitter),this.onDidAcceptEmitter=this._register(new _.Emitter),this.onDidChangeValue=this.onDidValueChangeEmitter.event,this.onDidAccept=this.onDidAcceptEmitter.event}get value(){return this._value}set value(o){this._value=o||"",this.update()}get placeholder(){return this._placeholder}set placeholder(o){this._placeholder=o,this.update()}get password(){return this._password}set password(o){this._password=o,this.update()}show(){this.visible||(this.visibleDisposables.add(this.ui.inputBox.onDidChange(o=>{o!==this.value&&(this._value=o,this.onDidValueChangeEmitter.fire(o))})),this.visibleDisposables.add(this.ui.onDidAccept(()=>this.onDidAcceptEmitter.fire())),this.valueSelectionUpdated=!0),super.show()}update(){if(!this.visible)return;this.ui.container.classList.remove("hidden-input");const o={title:!!this.title||!!this.step||!!this.buttons.length,description:!!this.description||!!this.step,inputBox:!0,message:!0,progressBar:!0};this.ui.setVisibilities(o),super.update(),this.ui.inputBox.value!==this.value&&(this.ui.inputBox.value=this.value),this.valueSelectionUpdated&&(this.valueSelectionUpdated=!1,this.ui.inputBox.select(this._valueSelection&&{start:this._valueSelection[0],end:this._valueSelection[1]})),this.ui.inputBox.placeholder!==(this.placeholder||"")&&(this.ui.inputBox.placeholder=this.placeholder||""),this.ui.inputBox.password!==this.password&&(this.ui.inputBox.password=this.password)}}e.InputBox=d;class s{get delay(){return Date.now()-this.lastHoverHideTime<200?0:this.configurationService.getValue("workbench.hover.delay")}constructor(o,g){this.configurationService=o,this.hoverService=g,this.lastHoverHideTime=0,this.placement="element"}showHover(o,g){var h;const m=(o.content instanceof HTMLElement?(h=o.content.textContent)!==null&&h!==void 0?h:"":typeof o.content=="string"?o.content:o.content.value).length>20;return this.hoverService.showHover({...o,persistence:{hideOnKeyDown:!1},appearance:{showHoverHint:m,skipFadeInAnimation:!0}},g)}onDidHideHover(){this.lastHoverHideTime=Date.now()}}e.QuickInputHoverDelegate=s}),define(se[850],oe([1,0,7,78,229,319,590,19,6,2,100,749,70,788,366,367,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputController=void 0;const f=L.$;class c extends v.Disposable{constructor(s,l,o){super(),this.options=s,this.themeService=l,this.layoutService=o,this.enabled=!0,this.onDidAcceptEmitter=this._register(new _.Emitter),this.onDidCustomEmitter=this._register(new _.Emitter),this.onDidTriggerButtonEmitter=this._register(new _.Emitter),this.keyMods={ctrlCmd:!1,alt:!1},this.controller=null,this.onShowEmitter=this._register(new _.Emitter),this.onShow=this.onShowEmitter.event,this.onHideEmitter=this._register(new _.Emitter),this.onHide=this.onHideEmitter.event,this.idPrefix=s.idPrefix,this.parentElement=s.container,this.styles=s.styles,this._register(_.Event.runAndSubscribe(L.onDidRegisterWindow,({window:g,disposables:h})=>this.registerKeyModsListeners(g,h),{window:u.mainWindow,disposables:this._store})),this._register(L.onWillUnregisterWindow(g=>{this.ui&&L.getWindow(this.ui.container)===g&&this.reparentUI(this.layoutService.mainContainer)}))}registerKeyModsListeners(s,l){const o=g=>{this.keyMods.ctrlCmd=g.ctrlKey||g.metaKey,this.keyMods.alt=g.altKey};for(const g of[L.EventType.KEY_DOWN,L.EventType.KEY_UP,L.EventType.MOUSE_DOWN])l.add(L.addDisposableListener(s,g,o,!0))}getUI(s){if(this.ui)return s&&this.parentElement.ownerDocument!==this.layoutService.activeContainer.ownerDocument&&this.reparentUI(this.layoutService.activeContainer),this.ui;const l=L.append(this.parentElement,f(".quick-input-widget.show-file-icons"));l.tabIndex=-1,l.style.display="none";const o=L.createStyleSheet(l),g=L.append(l,f(".quick-input-titlebar")),h=this._register(new k.ActionBar(g,{hoverDelegate:this.options.hoverDelegate}));h.domNode.classList.add("quick-input-left-action-bar");const m=L.append(g,f(".quick-input-title")),C=this._register(new k.ActionBar(g,{hoverDelegate:this.options.hoverDelegate}));C.domNode.classList.add("quick-input-right-action-bar");const w=L.append(l,f(".quick-input-header")),D=L.append(w,f("input.quick-input-check-all"));D.type="checkbox",D.setAttribute("aria-label",(0,a.localize)(0,null)),this._register(L.addStandardDisposableListener(D,L.EventType.CHANGE,J=>{const Q=D.checked;ne.setAllVisibleChecked(Q)})),this._register(L.addDisposableListener(D,L.EventType.CLICK,J=>{(J.x||J.y)&&P.setFocus()}));const I=L.append(w,f(".quick-input-description")),T=L.append(w,f(".quick-input-and-message")),A=L.append(T,f(".quick-input-filter")),P=this._register(new n.QuickInputBox(A,this.styles.inputBox,this.styles.toggle));P.setAttribute("aria-describedby",`${this.idPrefix}message`);const N=L.append(A,f(".quick-input-visible-count"));N.setAttribute("aria-live","polite"),N.setAttribute("aria-atomic","true");const M=new E.CountBadge(N,{countFormat:(0,a.localize)(1,null)},this.styles.countBadge),R=L.append(A,f(".quick-input-count"));R.setAttribute("aria-live","polite");const x=new E.CountBadge(R,{countFormat:(0,a.localize)(2,null)},this.styles.countBadge),O=L.append(w,f(".quick-input-action")),B=this._register(new y.Button(O,this.styles.button));B.label=(0,a.localize)(3,null),this._register(B.onDidClick(J=>{this.onDidAcceptEmitter.fire()}));const W=L.append(w,f(".quick-input-action")),V=this._register(new y.Button(W,{...this.styles.button,supportIcons:!0}));V.label=(0,a.localize)(4,null),this._register(V.onDidClick(J=>{this.onDidCustomEmitter.fire()}));const K=L.append(T,f(`#${this.idPrefix}message.quick-input-message`)),F=this._register(new S.ProgressBar(l,this.styles.progressBar));F.getContainer().classList.add("quick-input-progress");const q=L.append(l,f(".quick-input-html-widget"));q.tabIndex=-1;const ie=L.append(l,f(".quick-input-description")),ae=this.idPrefix+"list",ne=this._register(new t.QuickInputList(l,ae,this.options,this.themeService));P.setAttribute("aria-controls",ae),this._register(ne.onDidChangeFocus(()=>{var J;P.setAttribute("aria-activedescendant",(J=ne.getActiveDescendant())!==null&&J!==void 0?J:"")})),this._register(ne.onChangedAllVisibleChecked(J=>{D.checked=J})),this._register(ne.onChangedVisibleCount(J=>{M.setCount(J)})),this._register(ne.onChangedCheckedCount(J=>{x.setCount(J)})),this._register(ne.onLeave(()=>{setTimeout(()=>{P.setFocus(),this.controller instanceof r.QuickPick&&this.controller.canSelectMany&&ne.clearFocus()},0)}));const $=L.trackFocus(l);return this._register($),this._register(L.addDisposableListener(l,L.EventType.FOCUS,J=>{L.isAncestor(J.relatedTarget,l)||(this.previousFocusElement=J.relatedTarget instanceof HTMLElement?J.relatedTarget:void 0)},!0)),this._register($.onDidBlur(()=>{!this.getUI().ignoreFocusOut&&!this.options.ignoreFocusOut()&&this.hide(i.QuickInputHideReason.Blur),this.previousFocusElement=void 0})),this._register(L.addDisposableListener(l,L.EventType.FOCUS,J=>{P.setFocus()})),this._register(L.addStandardDisposableListener(l,L.EventType.KEY_DOWN,J=>{if(!L.isAncestor(J.target,q))switch(J.keyCode){case 3:L.EventHelper.stop(J,!0),this.enabled&&this.onDidAcceptEmitter.fire();break;case 9:L.EventHelper.stop(J,!0),this.hide(i.QuickInputHideReason.Gesture);break;case 2:if(!J.altKey&&!J.ctrlKey&&!J.metaKey){const Q=[".quick-input-list .monaco-action-bar .always-visible",".quick-input-list-entry:hover .monaco-action-bar",".monaco-list-row.focused .monaco-action-bar"];if(l.classList.contains("show-checkboxes")?Q.push("input"):Q.push("input[type=text]"),this.getUI().list.isDisplayed()&&Q.push(".monaco-list"),this.getUI().message&&Q.push(".quick-input-message a"),this.getUI().widget){if(L.isAncestor(J.target,this.getUI().widget))break;Q.push(".quick-input-html-widget")}const re=l.querySelectorAll(Q.join(", "));J.shiftKey&&J.target===re[0]?(L.EventHelper.stop(J,!0),ne.clearFocus()):!J.shiftKey&&L.isAncestor(J.target,re[re.length-1])&&(L.EventHelper.stop(J,!0),re[0].focus())}break;case 10:J.ctrlKey&&(L.EventHelper.stop(J,!0),this.getUI().list.toggleHover());break}})),this.ui={container:l,styleSheet:o,leftActionBar:h,titleBar:g,title:m,description1:ie,description2:I,widget:q,rightActionBar:C,checkAll:D,inputContainer:T,filterContainer:A,inputBox:P,visibleCountContainer:N,visibleCount:M,countContainer:R,count:x,okContainer:O,ok:B,message:K,customButtonContainer:W,customButton:V,list:ne,progressBar:F,onDidAccept:this.onDidAcceptEmitter.event,onDidCustom:this.onDidCustomEmitter.event,onDidTriggerButton:this.onDidTriggerButtonEmitter.event,ignoreFocusOut:!1,keyMods:this.keyMods,show:J=>this.show(J),hide:()=>this.hide(),setVisibilities:J=>this.setVisibilities(J),setEnabled:J=>this.setEnabled(J),setContextKey:J=>this.options.setContextKey(J),linkOpenerDelegate:J=>this.options.linkOpenerDelegate(J)},this.updateStyles(),this.ui}reparentUI(s){this.ui&&(this.parentElement=s,L.append(this.parentElement,this.ui.container))}pick(s,l={},o=p.CancellationToken.None){return new Promise((g,h)=>{let m=I=>{var T;m=g,(T=l.onKeyMods)===null||T===void 0||T.call(l,C.keyMods),g(I)};if(o.isCancellationRequested){m(void 0);return}const C=this.createQuickPick();let w;const D=[C,C.onDidAccept(()=>{if(C.canSelectMany)m(C.selectedItems.slice()),C.hide();else{const I=C.activeItems[0];I&&(m(I),C.hide())}}),C.onDidChangeActive(I=>{const T=I[0];T&&l.onDidFocus&&l.onDidFocus(T)}),C.onDidChangeSelection(I=>{if(!C.canSelectMany){const T=I[0];T&&(m(T),C.hide())}}),C.onDidTriggerItemButton(I=>l.onDidTriggerItemButton&&l.onDidTriggerItemButton({...I,removeItem:()=>{const T=C.items.indexOf(I.item);if(T!==-1){const A=C.items.slice(),P=A.splice(T,1),N=C.activeItems.filter(R=>R!==P[0]),M=C.keepScrollPosition;C.keepScrollPosition=!0,C.items=A,N&&(C.activeItems=N),C.keepScrollPosition=M}}})),C.onDidTriggerSeparatorButton(I=>{var T;return(T=l.onDidTriggerSeparatorButton)===null||T===void 0?void 0:T.call(l,I)}),C.onDidChangeValue(I=>{w&&!I&&(C.activeItems.length!==1||C.activeItems[0]!==w)&&(C.activeItems=[w])}),o.onCancellationRequested(()=>{C.hide()}),C.onDidHide(()=>{(0,v.dispose)(D),m(void 0)})];C.title=l.title,C.canSelectMany=!!l.canPickMany,C.placeholder=l.placeHolder,C.ignoreFocusOut=!!l.ignoreFocusLost,C.matchOnDescription=!!l.matchOnDescription,C.matchOnDetail=!!l.matchOnDetail,C.matchOnLabel=l.matchOnLabel===void 0||l.matchOnLabel,C.quickNavigate=l.quickNavigate,C.hideInput=!!l.hideInput,C.contextKey=l.contextKey,C.busy=!0,Promise.all([s,l.activeItem]).then(([I,T])=>{w=T,C.busy=!1,C.items=I,C.canSelectMany&&(C.selectedItems=I.filter(A=>A.type!=="separator"&&A.picked)),w&&(C.activeItems=[w])}),C.show(),Promise.resolve(s).then(void 0,I=>{h(I),C.hide()})})}createQuickPick(){const s=this.getUI(!0);return new r.QuickPick(s)}createInputBox(){const s=this.getUI(!0);return new r.InputBox(s)}show(s){const l=this.getUI(!0);this.onShowEmitter.fire();const o=this.controller;this.controller=s,o?.didHide(),this.setEnabled(!0),l.leftActionBar.clear(),l.title.textContent="",l.description1.textContent="",l.description2.textContent="",L.reset(l.widget),l.rightActionBar.clear(),l.checkAll.checked=!1,l.inputBox.placeholder="",l.inputBox.password=!1,l.inputBox.showDecoration(b.default.Ignore),l.visibleCount.setCount(0),l.count.setCount(0),L.reset(l.message),l.progressBar.stop(),l.list.setElements([]),l.list.matchOnDescription=!1,l.list.matchOnDetail=!1,l.list.matchOnLabel=!0,l.list.sortByLabel=!0,l.ignoreFocusOut=!1,l.inputBox.toggles=void 0;const g=this.options.backKeybindingLabel();r.backButton.tooltip=g?(0,a.localize)(5,null,g):(0,a.localize)(6,null),l.container.style.display="",this.updateLayout(),l.inputBox.setFocus()}isVisible(){return!!this.ui&&this.ui.container.style.display!=="none"}setVisibilities(s){const l=this.getUI();l.title.style.display=s.title?"":"none",l.description1.style.display=s.description&&(s.inputBox||s.checkAll)?"":"none",l.description2.style.display=s.description&&!(s.inputBox||s.checkAll)?"":"none",l.checkAll.style.display=s.checkAll?"":"none",l.inputContainer.style.display=s.inputBox?"":"none",l.filterContainer.style.display=s.inputBox?"":"none",l.visibleCountContainer.style.display=s.visibleCount?"":"none",l.countContainer.style.display=s.count?"":"none",l.okContainer.style.display=s.ok?"":"none",l.customButtonContainer.style.display=s.customButton?"":"none",l.message.style.display=s.message?"":"none",l.progressBar.getContainer().style.display=s.progressBar?"":"none",l.list.display(!!s.list),l.container.classList.toggle("show-checkboxes",!!s.checkBox),l.container.classList.toggle("hidden-input",!s.inputBox&&!s.description),this.updateLayout()}setEnabled(s){if(s!==this.enabled){this.enabled=s;for(const l of this.getUI().leftActionBar.viewItems)l.action.enabled=s;for(const l of this.getUI().rightActionBar.viewItems)l.action.enabled=s;this.getUI().checkAll.disabled=!s,this.getUI().inputBox.enabled=s,this.getUI().ok.enabled=s,this.getUI().list.enabled=s}}hide(s){var l,o;const g=this.controller;if(!g)return;const h=(l=this.ui)===null||l===void 0?void 0:l.container,m=h&&!L.isAncestorOfActiveElement(h);if(this.controller=null,this.onHideEmitter.fire(),h&&(h.style.display="none"),!m){let C=this.previousFocusElement;for(;C&&!C.offsetParent;)C=(o=C.parentElement)!==null&&o!==void 0?o:void 0;C?.offsetParent?(C.focus(),this.previousFocusElement=void 0):this.options.returnFocus()}g.didHide(s)}layout(s,l){this.dimension=s,this.titleBarOffset=l,this.updateLayout()}updateLayout(){if(this.ui&&this.isVisible()){this.ui.container.style.top=`${this.titleBarOffset}px`;const s=this.ui.container.style,l=Math.min(this.dimension.width*.62,c.MAX_WIDTH);s.width=l+"px",s.marginLeft="-"+l/2+"px",this.ui.inputBox.layout(),this.ui.list.layout(this.dimension&&this.dimension.height*.4)}}applyStyles(s){this.styles=s,this.updateStyles()}updateStyles(){if(this.ui){const{quickInputTitleBackground:s,quickInputBackground:l,quickInputForeground:o,widgetBorder:g,widgetShadow:h}=this.styles.widget;this.ui.titleBar.style.backgroundColor=s??"",this.ui.container.style.backgroundColor=l??"",this.ui.container.style.color=o??"",this.ui.container.style.border=g?`1px solid ${g}`:"",this.ui.container.style.boxShadow=h?`0 0 8px 2px ${h}`:"",this.ui.list.style(this.styles.list);const m=[];this.styles.pickerGroup.pickerGroupBorder&&m.push(`.quick-input-list .quick-input-list-entry { border-top-color: ${this.styles.pickerGroup.pickerGroupBorder}; }`),this.styles.pickerGroup.pickerGroupForeground&&m.push(`.quick-input-list .quick-input-list-separator { color: ${this.styles.pickerGroup.pickerGroupForeground}; }`),this.styles.pickerGroup.pickerGroupForeground&&m.push(".quick-input-list .quick-input-list-separator-as-item { color: var(--vscode-descriptionForeground); }"),(this.styles.keybindingLabel.keybindingLabelBackground||this.styles.keybindingLabel.keybindingLabelBorder||this.styles.keybindingLabel.keybindingLabelBottomBorder||this.styles.keybindingLabel.keybindingLabelShadow||this.styles.keybindingLabel.keybindingLabelForeground)&&(m.push(".quick-input-list .monaco-keybinding > .monaco-keybinding-key {"),this.styles.keybindingLabel.keybindingLabelBackground&&m.push(`background-color: ${this.styles.keybindingLabel.keybindingLabelBackground};`),this.styles.keybindingLabel.keybindingLabelBorder&&m.push(`border-color: ${this.styles.keybindingLabel.keybindingLabelBorder};`),this.styles.keybindingLabel.keybindingLabelBottomBorder&&m.push(`border-bottom-color: ${this.styles.keybindingLabel.keybindingLabelBottomBorder};`),this.styles.keybindingLabel.keybindingLabelShadow&&m.push(`box-shadow: inset 0 -1px 0 ${this.styles.keybindingLabel.keybindingLabelShadow};`),this.styles.keybindingLabel.keybindingLabelForeground&&m.push(`color: ${this.styles.keybindingLabel.keybindingLabelForeground};`),m.push("}"));const C=m.join(` `);C!==this.ui.styleSheet.textContent&&(this.ui.styleSheet.textContent=C)}}}e.QuickInputController=c,c.MAX_WIDTH=600}),define(se[23],oe([1,0,6,2,8,37,89]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.Themable=e.registerThemingParticipant=e.Extensions=e.getThemeTypeSelector=e.themeColorFromId=e.IThemeService=void 0,e.IThemeService=(0,y.createDecorator)("themeService");function p(n){return{id:n}}e.themeColorFromId=p;function _(n){switch(n){case S.ColorScheme.DARK:return"vs-dark";case S.ColorScheme.HIGH_CONTRAST_DARK:return"hc-black";case S.ColorScheme.HIGH_CONTRAST_LIGHT:return"hc-light";default:return"vs"}}e.getThemeTypeSelector=_,e.Extensions={ThemingContribution:"base.contributions.theming"};class v{constructor(){this.themingParticipants=[],this.themingParticipants=[],this.onThemingParticipantAddedEmitter=new L.Emitter}onColorThemeChange(t){return this.themingParticipants.push(t),this.onThemingParticipantAddedEmitter.fire(t),(0,k.toDisposable)(()=>{const r=this.themingParticipants.indexOf(t);this.themingParticipants.splice(r,1)})}getThemingParticipants(){return this.themingParticipants}}const b=new v;E.Registry.add(e.Extensions.ThemingContribution,b);function a(n){return b.onColorThemeChange(n)}e.registerThemingParticipant=a;class i extends k.Disposable{constructor(t){super(),this.themeService=t,this.theme=t.getColorTheme(),this._register(this.themeService.onDidColorThemeChange(r=>this.onThemeChange(r)))}onThemeChange(t){this.theme=t,this.updateStyles()}updateStyles(){}}e.Themable=i}),define(se[851],oe([1,0,6,2,66,23]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GlobalStyleSheet=e.AbstractCodeEditorService=void 0;let S=class extends k.Disposable{constructor(v){super(),this._themeService=v,this._onWillCreateCodeEditor=this._register(new L.Emitter),this._onCodeEditorAdd=this._register(new L.Emitter),this.onCodeEditorAdd=this._onCodeEditorAdd.event,this._onCodeEditorRemove=this._register(new L.Emitter),this.onCodeEditorRemove=this._onCodeEditorRemove.event,this._onWillCreateDiffEditor=this._register(new L.Emitter),this._onDiffEditorAdd=this._register(new L.Emitter),this.onDiffEditorAdd=this._onDiffEditorAdd.event,this._onDiffEditorRemove=this._register(new L.Emitter),this.onDiffEditorRemove=this._onDiffEditorRemove.event,this._decorationOptionProviders=new Map,this._codeEditorOpenHandlers=new y.LinkedList,this._modelProperties=new Map,this._codeEditors=Object.create(null),this._diffEditors=Object.create(null),this._globalStyleSheet=null}willCreateCodeEditor(){this._onWillCreateCodeEditor.fire()}addCodeEditor(v){this._codeEditors[v.getId()]=v,this._onCodeEditorAdd.fire(v)}removeCodeEditor(v){delete this._codeEditors[v.getId()]&&this._onCodeEditorRemove.fire(v)}listCodeEditors(){return Object.keys(this._codeEditors).map(v=>this._codeEditors[v])}willCreateDiffEditor(){this._onWillCreateDiffEditor.fire()}addDiffEditor(v){this._diffEditors[v.getId()]=v,this._onDiffEditorAdd.fire(v)}listDiffEditors(){return Object.keys(this._diffEditors).map(v=>this._diffEditors[v])}getFocusedCodeEditor(){let v=null;const b=this.listCodeEditors();for(const a of b){if(a.hasTextFocus())return a;a.hasWidgetFocus()&&(v=a)}return v}removeDecorationType(v){const b=this._decorationOptionProviders.get(v);b&&(b.refCount--,b.refCount<=0&&(this._decorationOptionProviders.delete(v),b.dispose(),this.listCodeEditors().forEach(a=>a.removeDecorationsByType(v))))}setModelProperty(v,b,a){const i=v.toString();let n;this._modelProperties.has(i)?n=this._modelProperties.get(i):(n=new Map,this._modelProperties.set(i,n)),n.set(b,a)}getModelProperty(v,b){const a=v.toString();if(this._modelProperties.has(a))return this._modelProperties.get(a).get(b)}async openCodeEditor(v,b,a){for(const i of this._codeEditorOpenHandlers){const n=await i(v,b,a);if(n!==null)return n}return null}registerCodeEditorOpenHandler(v){const b=this._codeEditorOpenHandlers.unshift(v);return(0,k.toDisposable)(b)}};e.AbstractCodeEditorService=S,e.AbstractCodeEditorService=S=ke([ge(0,E.IThemeService)],S);class p{constructor(v){this._styleSheet=v}}e.GlobalStyleSheet=p}),define(se[852],oe([1,0,45,23,29,244,59,8,789,2,7,34,46,69,123,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.HoverService=void 0;let u=class{constructor(s,l,o,g,h,m){this._instantiationService=s,this._contextViewService=l,this._keybindingService=g,this._layoutService=h,this._accessibilityService=m,o.onDidShowContextMenu(()=>this.hideHover())}showHover(s,l,o){var g,h,m,C;if(f(this._currentHoverOptions)===f(s)||this._currentHover&&(!((h=(g=this._currentHoverOptions)===null||g===void 0?void 0:g.persistence)===null||h===void 0)&&h.sticky))return;this._currentHoverOptions=s,this._lastHoverOptions=s;const w=s.trapFocus||this._accessibilityService.isScreenReaderOptimized(),D=(0,b.getActiveElement)();o||(w&&D?this._lastFocusedElementBeforeOpen=D:this._lastFocusedElementBeforeOpen=void 0);const I=new v.DisposableStore,T=this._instantiationService.createInstance(_.HoverWidget,s);if(!((m=s.persistence)===null||m===void 0)&&m.sticky&&(T.isLocked=!0),T.onDispose(()=>{var P,N;((P=this._currentHover)===null||P===void 0?void 0:P.domNode)&&(0,b.isAncestorOfActiveElement)(this._currentHover.domNode)&&((N=this._lastFocusedElementBeforeOpen)===null||N===void 0||N.focus()),this._currentHoverOptions===s&&(this._currentHoverOptions=void 0),I.dispose()}),!s.container){const P=s.target instanceof HTMLElement?s.target:s.target.targetElements[0];s.container=this._layoutService.getContainer((0,b.getWindow)(P))}const A=this._contextViewService;if(A.showContextView(new c(T,l),s.container),T.onRequestLayout(()=>A.layout()),!((C=s.persistence)===null||C===void 0)&&C.sticky)I.add((0,b.addDisposableListener)((0,b.getWindow)(s.container).document,b.EventType.MOUSE_DOWN,P=>{(0,b.isAncestor)(P.target,T.domNode)||this.doHideHover()}));else{if("targetElements"in s.target)for(const N of s.target.targetElements)I.add((0,b.addDisposableListener)(N,b.EventType.CLICK,()=>this.hideHover()));else I.add((0,b.addDisposableListener)(s.target,b.EventType.CLICK,()=>this.hideHover()));const P=(0,b.getActiveElement)();if(P){const N=(0,b.getWindow)(P).document;I.add((0,b.addDisposableListener)(P,b.EventType.KEY_DOWN,M=>{var R;return this._keyDown(M,T,!!(!((R=s.persistence)===null||R===void 0)&&R.hideOnKeyDown))})),I.add((0,b.addDisposableListener)(N,b.EventType.KEY_DOWN,M=>{var R;return this._keyDown(M,T,!!(!((R=s.persistence)===null||R===void 0)&&R.hideOnKeyDown))})),I.add((0,b.addDisposableListener)(P,b.EventType.KEY_UP,M=>this._keyUp(M,T))),I.add((0,b.addDisposableListener)(N,b.EventType.KEY_UP,M=>this._keyUp(M,T)))}}if("IntersectionObserver"in r.mainWindow){const P=new IntersectionObserver(M=>this._intersectionChange(M,T),{threshold:0}),N="targetElements"in s.target?s.target.targetElements[0]:s.target;P.observe(N),I.add((0,v.toDisposable)(()=>P.disconnect()))}return this._currentHover=T,T}hideHover(){var s;!((s=this._currentHover)===null||s===void 0)&&s.isLocked||!this._currentHoverOptions||this.doHideHover()}doHideHover(){this._currentHover=void 0,this._currentHoverOptions=void 0,this._contextViewService.hideContextView()}_intersectionChange(s,l){s[s.length-1].isIntersecting||l.dispose()}_keyDown(s,l,o){var g,h;if(s.key==="Alt"){l.isLocked=!0;return}const m=new i.StandardKeyboardEvent(s);this._keybindingService.resolveKeyboardEvent(m).getSingleModifierDispatchChords().some(w=>!!w)||this._keybindingService.softDispatch(m,m.target).kind!==0||o&&(!(!((g=this._currentHoverOptions)===null||g===void 0)&&g.trapFocus)||s.key!=="Tab")&&(this.hideHover(),(h=this._lastFocusedElementBeforeOpen)===null||h===void 0||h.focus())}_keyUp(s,l){var o;s.key==="Alt"&&(l.isLocked=!1,l.isMouseIn||(this.hideHover(),(o=this._lastFocusedElementBeforeOpen)===null||o===void 0||o.focus()))}};e.HoverService=u,e.HoverService=u=ke([ge(0,p.IInstantiationService),ge(1,S.IContextViewService),ge(2,S.IContextMenuService),ge(3,a.IKeybindingService),ge(4,t.ILayoutService),ge(5,n.IAccessibilityService)],u);function f(d){var s;if(d!==void 0)return(s=d?.id)!==null&&s!==void 0?s:d}class c{get anchorPosition(){return this._hover.anchor}constructor(s,l=!1){this._hover=s,this._focus=l}render(s){return this._hover.render(s),this._focus&&this._hover.focus(),this._hover}getAnchor(){return{x:this._hover.x,y:this._hover.y}}layout(){this._hover.layout()}}(0,L.registerSingleton)(E.IHoverService,u,1),(0,k.registerThemingParticipant)((d,s)=>{const l=d.getColor(y.editorHoverBorder);l&&(s.addRule(`.monaco-workbench .workbench-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${l.transparent(.5)}; }`),s.addRule(`.monaco-workbench .workbench-hover hr { border-top: 1px solid ${l.transparent(.5)}; }`))})}),define(se[853],oe([1,0,7,40,77,56,23]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EditorScrollbar=void 0;class p extends E.ViewPart{constructor(v,b,a,i){super(v);const n=this._context.configuration.options,t=n.get(102),r=n.get(74),u=n.get(40),f=n.get(105),c={listenOnDomNode:a.domNode,className:"editor-scrollable "+(0,S.getThemeTypeSelector)(v.theme.type),useShadows:!1,lazyRender:!0,vertical:t.vertical,horizontal:t.horizontal,verticalHasArrows:t.verticalHasArrows,horizontalHasArrows:t.horizontalHasArrows,verticalScrollbarSize:t.verticalScrollbarSize,verticalSliderSize:t.verticalSliderSize,horizontalScrollbarSize:t.horizontalScrollbarSize,horizontalSliderSize:t.horizontalSliderSize,handleMouseWheel:t.handleMouseWheel,alwaysConsumeMouseWheel:t.alwaysConsumeMouseWheel,arrowSize:t.arrowSize,mouseWheelScrollSensitivity:r,fastScrollSensitivity:u,scrollPredominantAxis:f,scrollByPage:t.scrollByPage};this.scrollbar=this._register(new y.SmoothScrollableElement(b.domNode,c,this._context.viewLayout.getScrollable())),E.PartFingerprints.write(this.scrollbar.getDomNode(),6),this.scrollbarDomNode=(0,k.createFastDomNode)(this.scrollbar.getDomNode()),this.scrollbarDomNode.setPosition("absolute"),this._setLayout();const d=(s,l,o)=>{const g={};if(l){const h=s.scrollTop;h&&(g.scrollTop=this._context.viewLayout.getCurrentScrollTop()+h,s.scrollTop=0)}if(o){const h=s.scrollLeft;h&&(g.scrollLeft=this._context.viewLayout.getCurrentScrollLeft()+h,s.scrollLeft=0)}this._context.viewModel.viewLayout.setScrollPosition(g,1)};this._register(L.addDisposableListener(a.domNode,"scroll",s=>d(a.domNode,!0,!0))),this._register(L.addDisposableListener(b.domNode,"scroll",s=>d(b.domNode,!0,!1))),this._register(L.addDisposableListener(i.domNode,"scroll",s=>d(i.domNode,!0,!1))),this._register(L.addDisposableListener(this.scrollbarDomNode.domNode,"scroll",s=>d(this.scrollbarDomNode.domNode,!0,!1)))}dispose(){super.dispose()}_setLayout(){const v=this._context.configuration.options,b=v.get(143);this.scrollbarDomNode.setLeft(b.contentLeft),v.get(72).side==="right"?this.scrollbarDomNode.setWidth(b.contentWidth+b.minimap.minimapWidth):this.scrollbarDomNode.setWidth(b.contentWidth),this.scrollbarDomNode.setHeight(b.height)}getOverviewRulerLayoutInfo(){return this.scrollbar.getOverviewRulerLayoutInfo()}getDomNode(){return this.scrollbarDomNode}delegateVerticalScrollbarPointerDown(v){this.scrollbar.delegateVerticalScrollbarPointerDown(v)}delegateScrollFromMouseWheelEvent(v){this.scrollbar.delegateScrollFromMouseWheelEvent(v)}onConfigurationChanged(v){if(v.hasChanged(102)||v.hasChanged(74)||v.hasChanged(40)){const b=this._context.configuration.options,a=b.get(102),i=b.get(74),n=b.get(40),t=b.get(105),r={vertical:a.vertical,horizontal:a.horizontal,verticalScrollbarSize:a.verticalScrollbarSize,horizontalScrollbarSize:a.horizontalScrollbarSize,scrollByPage:a.scrollByPage,handleMouseWheel:a.handleMouseWheel,mouseWheelScrollSensitivity:i,fastScrollSensitivity:n,scrollPredominantAxis:t};this.scrollbar.updateOptions(r)}return v.hasChanged(143)&&this._setLayout(),!0}onScrollChanged(v){return!0}onThemeChanged(v){return this.scrollbar.updateClassName("editor-scrollable "+(0,S.getThemeTypeSelector)(this._context.theme.type)),!0}prepareRender(v){}render(v){this.scrollbar.renderNow()}}e.EditorScrollbar=p}),define(se[854],oe([1,0,115,29,23,444]),function(te,e,L,k,y){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectionsOverlay=void 0;class E{constructor(i){this.left=i.left,this.width=i.width,this.startStyle=null,this.endStyle=null}}class S{constructor(i,n){this.lineNumber=i,this.ranges=n}}function p(a){return new E(a)}function _(a){return new S(a.lineNumber,a.ranges.map(p))}class v extends L.DynamicViewOverlay{constructor(i){super(),this._previousFrameVisibleRangesWithStyle=[],this._context=i;const n=this._context.configuration.options;this._lineHeight=n.get(66),this._roundedSelection=n.get(100),this._typicalHalfwidthCharacterWidth=n.get(50).typicalHalfwidthCharacterWidth,this._selections=[],this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(i){const n=this._context.configuration.options;return this._lineHeight=n.get(66),this._roundedSelection=n.get(100),this._typicalHalfwidthCharacterWidth=n.get(50).typicalHalfwidthCharacterWidth,!0}onCursorStateChanged(i){return this._selections=i.selections.slice(0),!0}onDecorationsChanged(i){return!0}onFlushed(i){return!0}onLinesChanged(i){return!0}onLinesDeleted(i){return!0}onLinesInserted(i){return!0}onScrollChanged(i){return i.scrollTopChanged}onZonesChanged(i){return!0}_visibleRangesHaveGaps(i){for(let n=0,t=i.length;n1)return!0;return!1}_enrichVisibleRangesWithStyle(i,n,t){const r=this._typicalHalfwidthCharacterWidth/4;let u=null,f=null;if(t&&t.length>0&&n.length>0){const c=n[0].lineNumber;if(c===i.startLineNumber)for(let s=0;!u&&s=0;s--)t[s].lineNumber===d&&(f=t[s].ranges[0]);u&&!u.startStyle&&(u=null),f&&!f.startStyle&&(f=null)}for(let c=0,d=n.length;c0){const m=n[c-1].ranges[0].left,C=n[c-1].ranges[0].left+n[c-1].ranges[0].width;b(l-m)m&&(g.top=1),b(o-C)
    '}_actualRenderOneSelection(i,n,t,r){if(r.length===0)return;const u=!!r[0].ranges[0].startStyle,f=this._lineHeight.toString(),c=(this._lineHeight-1).toString(),d=r[0].lineNumber,s=r[r.length-1].lineNumber;for(let l=0,o=r.length;l1,s)}this._previousFrameVisibleRangesWithStyle=u,this._renderResult=n.map(([f,c])=>f+c)}render(i,n){if(!this._renderResult)return"";const t=n-i;return t<0||t>=this._renderResult.length?"":this._renderResult[t]}}e.SelectionsOverlay=v,v.SELECTION_CLASS_NAME="selected-text",v.SELECTION_TOP_LEFT="top-left-radius",v.SELECTION_BOTTOM_LEFT="bottom-left-radius",v.SELECTION_TOP_RIGHT="top-right-radius",v.SELECTION_BOTTOM_RIGHT="bottom-right-radius",v.EDITOR_BACKGROUND_CLASS_NAME="monaco-editor-background",v.ROUNDED_PIECE_WIDTH=10,(0,y.registerThemingParticipant)((a,i)=>{const n=a.getColor(k.editorSelectionForeground);n&&!n.isTransparent()&&i.addRule(`.monaco-editor .view-line span.inline-selected-text { color: ${n}; }`)});function b(a){return a<0?-a:a}}),define(se[368],oe([1,0,7,40,197,2,35,87,10,300,29,23]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";var i;Object.defineProperty(e,"__esModule",{value:!0}),e.OverviewRulerFeature=void 0;let n=i=class extends E.Disposable{constructor(r,u,f,c,d,s,l){super(),this._editors=r,this._rootElement=u,this._diffModel=f,this._rootWidth=c,this._rootHeight=d,this._modifiedEditorLayoutInfo=s,this._themeService=l,this.width=i.ENTIRE_DIFF_OVERVIEW_WIDTH;const o=(0,S.observableFromEvent)(this._themeService.onDidColorThemeChange,()=>this._themeService.getColorTheme()),g=(0,S.derived)(C=>{const w=o.read(C),D=w.getColor(b.diffOverviewRulerInserted)||(w.getColor(b.diffInserted)||b.defaultInsertColor).transparent(2),I=w.getColor(b.diffOverviewRulerRemoved)||(w.getColor(b.diffRemoved)||b.defaultRemoveColor).transparent(2);return{insertColor:D,removeColor:I}}),h=(0,k.createFastDomNode)(document.createElement("div"));h.setClassName("diffViewport"),h.setPosition("absolute");const m=(0,L.h)("div.diffOverview",{style:{position:"absolute",top:"0px",width:i.ENTIRE_DIFF_OVERVIEW_WIDTH+"px"}}).root;this._register((0,p.appendRemoveOnDispose)(m,h.domNode)),this._register((0,L.addStandardDisposableListener)(m,L.EventType.POINTER_DOWN,C=>{this._editors.modified.delegateVerticalScrollbarPointerDown(C)})),this._register((0,L.addDisposableListener)(m,L.EventType.MOUSE_WHEEL,C=>{this._editors.modified.delegateScrollFromMouseWheelEvent(C)},{passive:!1})),this._register((0,p.appendRemoveOnDispose)(this._rootElement,m)),this._register((0,S.autorunWithStore)((C,w)=>{const D=this._diffModel.read(C),I=this._editors.original.createOverviewRuler("original diffOverviewRuler");I&&(w.add(I),w.add((0,p.appendRemoveOnDispose)(m,I.getDomNode())));const T=this._editors.modified.createOverviewRuler("modified diffOverviewRuler");if(T&&(w.add(T),w.add((0,p.appendRemoveOnDispose)(m,T.getDomNode()))),!I||!T)return;const A=(0,S.observableSignalFromEvent)("viewZoneChanged",this._editors.original.onDidChangeViewZones),P=(0,S.observableSignalFromEvent)("viewZoneChanged",this._editors.modified.onDidChangeViewZones),N=(0,S.observableSignalFromEvent)("hiddenRangesChanged",this._editors.original.onDidChangeHiddenAreas),M=(0,S.observableSignalFromEvent)("hiddenRangesChanged",this._editors.modified.onDidChangeHiddenAreas);w.add((0,S.autorun)(R=>{var x;A.read(R),P.read(R),N.read(R),M.read(R);const O=g.read(R),B=(x=D?.diff.read(R))===null||x===void 0?void 0:x.mappings;function W(F,q,ie){const ae=ie._getViewModel();return ae?F.filter(ne=>ne.length>0).map(ne=>{const $=ae.coordinatesConverter.convertModelPositionToViewPosition(new _.Position(ne.startLineNumber,1)),J=ae.coordinatesConverter.convertModelPositionToViewPosition(new _.Position(ne.endLineNumberExclusive,1)),Q=J.lineNumber-$.lineNumber;return new v.OverviewRulerZone($.lineNumber,J.lineNumber,Q,q.toString())}):[]}const V=W((B||[]).map(F=>F.lineRangeMapping.original),O.removeColor,this._editors.original),K=W((B||[]).map(F=>F.lineRangeMapping.modified),O.insertColor,this._editors.modified);I?.setZones(V),T?.setZones(K)})),w.add((0,S.autorun)(R=>{const x=this._rootHeight.read(R),O=this._rootWidth.read(R),B=this._modifiedEditorLayoutInfo.read(R);if(B){const W=i.ENTIRE_DIFF_OVERVIEW_WIDTH-2*i.ONE_OVERVIEW_WIDTH;I.setLayout({top:0,height:x,right:W+i.ONE_OVERVIEW_WIDTH,width:i.ONE_OVERVIEW_WIDTH}),T.setLayout({top:0,height:x,right:0,width:i.ONE_OVERVIEW_WIDTH});const V=this._editors.modifiedScrollTop.read(R),K=this._editors.modifiedScrollHeight.read(R),F=this._editors.modified.getOption(102),q=new y.ScrollbarState(F.verticalHasArrows?F.arrowSize:0,F.verticalScrollbarSize,0,B.height,K,V);h.setTop(q.getSliderPosition()),h.setHeight(q.getSliderSize())}else h.setTop(0),h.setHeight(0);m.style.height=x+"px",m.style.left=O-i.ENTIRE_DIFF_OVERVIEW_WIDTH+"px",h.setWidth(i.ENTIRE_DIFF_OVERVIEW_WIDTH)}))}))}};e.OverviewRulerFeature=n,n.ONE_OVERVIEW_WIDTH=15,n.ENTIRE_DIFF_OVERVIEW_WIDTH=i.ONE_OVERVIEW_WIDTH*2,e.OverviewRulerFeature=n=i=ke([ge(6,a.IThemeService)],n)}),define(se[855],oe([1,0,6,2,35,368,36,623,8,34,10]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiffEditorEditors=void 0;let a=class extends k.Disposable{get onDidContentSizeChange(){return this._onDidContentSizeChange.event}constructor(n,t,r,u,f,c,d){super(),this.originalEditorElement=n,this.modifiedEditorElement=t,this._options=r,this._createInnerEditor=f,this._instantiationService=c,this._keybindingService=d,this._onDidContentSizeChange=this._register(new L.Emitter),this.original=this._register(this._createLeftHandSideEditor(r.editorOptions.get(),u.originalEditor||{})),this.modified=this._register(this._createRightHandSideEditor(r.editorOptions.get(),u.modifiedEditor||{})),this.modifiedModel=(0,y.observableFromEvent)(this.modified.onDidChangeModel,()=>this.modified.getModel()),this.modifiedScrollTop=(0,y.observableFromEvent)(this.modified.onDidScrollChange,()=>this.modified.getScrollTop()),this.modifiedScrollHeight=(0,y.observableFromEvent)(this.modified.onDidScrollChange,()=>this.modified.getScrollHeight()),this.modifiedSelections=(0,y.observableFromEvent)(this.modified.onDidChangeCursorSelection,()=>{var s;return(s=this.modified.getSelections())!==null&&s!==void 0?s:[]}),this.modifiedCursor=(0,y.observableFromEvent)(this.modified.onDidChangeCursorPosition,()=>{var s;return(s=this.modified.getPosition())!==null&&s!==void 0?s:new b.Position(1,1)}),this._register((0,y.autorunHandleChanges)({createEmptyChangeSummary:()=>({}),handleChange:(s,l)=>(s.didChange(r.editorOptions)&&Object.assign(l,s.change.changedOptions),!0)},(s,l)=>{r.editorOptions.read(s),this._options.renderSideBySide.read(s),this.modified.updateOptions(this._adjustOptionsForRightHandSide(s,l)),this.original.updateOptions(this._adjustOptionsForLeftHandSide(s,l))}))}_createLeftHandSideEditor(n,t){const r=this._adjustOptionsForLeftHandSide(void 0,n),u=this._constructInnerEditor(this._instantiationService,this.originalEditorElement,r,t);return u.setContextValue("isInDiffLeftEditor",!0),u}_createRightHandSideEditor(n,t){const r=this._adjustOptionsForRightHandSide(void 0,n),u=this._constructInnerEditor(this._instantiationService,this.modifiedEditorElement,r,t);return u.setContextValue("isInDiffRightEditor",!0),u}_constructInnerEditor(n,t,r,u){const f=this._createInnerEditor(n,t,r,u);return this._register(f.onDidContentSizeChange(c=>{const d=this.original.getContentWidth()+this.modified.getContentWidth()+E.OverviewRulerFeature.ENTIRE_DIFF_OVERVIEW_WIDTH,s=Math.max(this.modified.getContentHeight(),this.original.getContentHeight());this._onDidContentSizeChange.fire({contentHeight:s,contentWidth:d,contentHeightChanged:c.contentHeightChanged,contentWidthChanged:c.contentWidthChanged})})),f}_adjustOptionsForLeftHandSide(n,t){const r=this._adjustOptionsForSubEditor(t);return this._options.renderSideBySide.get()?(r.unicodeHighlight=this._options.editorOptions.get().unicodeHighlight||{},r.wordWrapOverride1=this._options.diffWordWrap.get()):(r.wordWrapOverride1="off",r.wordWrapOverride2="off",r.stickyScroll={enabled:!1},r.unicodeHighlight={nonBasicASCII:!1,ambiguousCharacters:!1,invisibleCharacters:!1}),r.glyphMargin=this._options.renderSideBySide.get(),t.originalAriaLabel&&(r.ariaLabel=t.originalAriaLabel),r.ariaLabel=this._updateAriaLabel(r.ariaLabel),r.readOnly=!this._options.originalEditable.get(),r.dropIntoEditor={enabled:!r.readOnly},r.extraEditorClassName="original-in-monaco-diff-editor",r}_adjustOptionsForRightHandSide(n,t){const r=this._adjustOptionsForSubEditor(t);return t.modifiedAriaLabel&&(r.ariaLabel=t.modifiedAriaLabel),r.ariaLabel=this._updateAriaLabel(r.ariaLabel),r.wordWrapOverride1=this._options.diffWordWrap.get(),r.revealHorizontalRightPadding=S.EditorOptions.revealHorizontalRightPadding.defaultValue+E.OverviewRulerFeature.ENTIRE_DIFF_OVERVIEW_WIDTH,r.scrollbar.verticalHasArrows=!1,r.extraEditorClassName="modified-in-monaco-diff-editor",r}_adjustOptionsForSubEditor(n){const t={...n,dimension:{height:0,width:0}};return t.inDiffEditor=!0,t.automaticLayout=!1,t.scrollbar={...t.scrollbar||{}},t.folding=!1,t.codeLens=this._options.diffCodeLens.get(),t.fixedOverflowWidgets=!0,t.minimap={...t.minimap||{}},t.minimap.enabled=!1,this._options.hideUnchangedRegions.get()?t.stickyScroll={enabled:!1}:t.stickyScroll=this._options.editorOptions.get().stickyScroll,t}_updateAriaLabel(n){var t;n||(n="");const r=(0,p.localize)(0,null,(t=this._keybindingService.lookupKeybinding("editor.action.accessibilityHelp"))===null||t===void 0?void 0:t.getAriaLabel());return this._options.accessibilityVerbose.get()?n+r:n?n.replaceAll(r,""):""}};e.DiffEditorEditors=a,e.DiffEditorEditors=a=ke([ge(5,_.IInstantiationService),ge(6,v.IKeybindingService)],a)}),define(se[83],oe([1,0,638,39,29,23]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.editorUnicodeHighlightBackground=e.editorUnicodeHighlightBorder=e.editorBracketPairGuideActiveBackground6=e.editorBracketPairGuideActiveBackground5=e.editorBracketPairGuideActiveBackground4=e.editorBracketPairGuideActiveBackground3=e.editorBracketPairGuideActiveBackground2=e.editorBracketPairGuideActiveBackground1=e.editorBracketPairGuideBackground6=e.editorBracketPairGuideBackground5=e.editorBracketPairGuideBackground4=e.editorBracketPairGuideBackground3=e.editorBracketPairGuideBackground2=e.editorBracketPairGuideBackground1=e.editorBracketHighlightingUnexpectedBracketForeground=e.editorBracketHighlightingForeground6=e.editorBracketHighlightingForeground5=e.editorBracketHighlightingForeground4=e.editorBracketHighlightingForeground3=e.editorBracketHighlightingForeground2=e.editorBracketHighlightingForeground1=e.overviewRulerInfo=e.overviewRulerWarning=e.overviewRulerError=e.overviewRulerRangeHighlight=e.ghostTextBackground=e.ghostTextForeground=e.ghostTextBorder=e.editorUnnecessaryCodeOpacity=e.editorUnnecessaryCodeBorder=e.editorGutter=e.editorOverviewRulerBackground=e.editorOverviewRulerBorder=e.editorBracketMatchBorder=e.editorBracketMatchBackground=e.editorCodeLensForeground=e.editorRuler=e.editorDimmedLineNumber=e.editorActiveLineNumber=e.editorActiveIndentGuide6=e.editorActiveIndentGuide5=e.editorActiveIndentGuide4=e.editorActiveIndentGuide3=e.editorActiveIndentGuide2=e.editorActiveIndentGuide1=e.editorIndentGuide6=e.editorIndentGuide5=e.editorIndentGuide4=e.editorIndentGuide3=e.editorIndentGuide2=e.editorIndentGuide1=e.deprecatedEditorActiveIndentGuides=e.deprecatedEditorIndentGuides=e.editorLineNumbers=e.editorWhitespaces=e.editorCursorBackground=e.editorCursorForeground=e.editorSymbolHighlightBorder=e.editorSymbolHighlight=e.editorRangeHighlightBorder=e.editorRangeHighlight=e.editorLineHighlightBorder=e.editorLineHighlight=void 0,e.editorLineHighlight=(0,y.registerColor)("editor.lineHighlightBackground",{dark:null,light:null,hcDark:null,hcLight:null},L.localize(0,null)),e.editorLineHighlightBorder=(0,y.registerColor)("editor.lineHighlightBorder",{dark:"#282828",light:"#eeeeee",hcDark:"#f38518",hcLight:y.contrastBorder},L.localize(1,null)),e.editorRangeHighlight=(0,y.registerColor)("editor.rangeHighlightBackground",{dark:"#ffffff0b",light:"#fdff0033",hcDark:null,hcLight:null},L.localize(2,null),!0),e.editorRangeHighlightBorder=(0,y.registerColor)("editor.rangeHighlightBorder",{dark:null,light:null,hcDark:y.activeContrastBorder,hcLight:y.activeContrastBorder},L.localize(3,null),!0),e.editorSymbolHighlight=(0,y.registerColor)("editor.symbolHighlightBackground",{dark:y.editorFindMatchHighlight,light:y.editorFindMatchHighlight,hcDark:null,hcLight:null},L.localize(4,null),!0),e.editorSymbolHighlightBorder=(0,y.registerColor)("editor.symbolHighlightBorder",{dark:null,light:null,hcDark:y.activeContrastBorder,hcLight:y.activeContrastBorder},L.localize(5,null),!0),e.editorCursorForeground=(0,y.registerColor)("editorCursor.foreground",{dark:"#AEAFAD",light:k.Color.black,hcDark:k.Color.white,hcLight:"#0F4A85"},L.localize(6,null)),e.editorCursorBackground=(0,y.registerColor)("editorCursor.background",null,L.localize(7,null)),e.editorWhitespaces=(0,y.registerColor)("editorWhitespace.foreground",{dark:"#e3e4e229",light:"#33333333",hcDark:"#e3e4e229",hcLight:"#CCCCCC"},L.localize(8,null)),e.editorLineNumbers=(0,y.registerColor)("editorLineNumber.foreground",{dark:"#858585",light:"#237893",hcDark:k.Color.white,hcLight:"#292929"},L.localize(9,null)),e.deprecatedEditorIndentGuides=(0,y.registerColor)("editorIndentGuide.background",{dark:e.editorWhitespaces,light:e.editorWhitespaces,hcDark:e.editorWhitespaces,hcLight:e.editorWhitespaces},L.localize(10,null),!1,L.localize(11,null)),e.deprecatedEditorActiveIndentGuides=(0,y.registerColor)("editorIndentGuide.activeBackground",{dark:e.editorWhitespaces,light:e.editorWhitespaces,hcDark:e.editorWhitespaces,hcLight:e.editorWhitespaces},L.localize(12,null),!1,L.localize(13,null)),e.editorIndentGuide1=(0,y.registerColor)("editorIndentGuide.background1",{dark:e.deprecatedEditorIndentGuides,light:e.deprecatedEditorIndentGuides,hcDark:e.deprecatedEditorIndentGuides,hcLight:e.deprecatedEditorIndentGuides},L.localize(14,null)),e.editorIndentGuide2=(0,y.registerColor)("editorIndentGuide.background2",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(15,null)),e.editorIndentGuide3=(0,y.registerColor)("editorIndentGuide.background3",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(16,null)),e.editorIndentGuide4=(0,y.registerColor)("editorIndentGuide.background4",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(17,null)),e.editorIndentGuide5=(0,y.registerColor)("editorIndentGuide.background5",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(18,null)),e.editorIndentGuide6=(0,y.registerColor)("editorIndentGuide.background6",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(19,null)),e.editorActiveIndentGuide1=(0,y.registerColor)("editorIndentGuide.activeBackground1",{dark:e.deprecatedEditorActiveIndentGuides,light:e.deprecatedEditorActiveIndentGuides,hcDark:e.deprecatedEditorActiveIndentGuides,hcLight:e.deprecatedEditorActiveIndentGuides},L.localize(20,null)),e.editorActiveIndentGuide2=(0,y.registerColor)("editorIndentGuide.activeBackground2",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(21,null)),e.editorActiveIndentGuide3=(0,y.registerColor)("editorIndentGuide.activeBackground3",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(22,null)),e.editorActiveIndentGuide4=(0,y.registerColor)("editorIndentGuide.activeBackground4",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(23,null)),e.editorActiveIndentGuide5=(0,y.registerColor)("editorIndentGuide.activeBackground5",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(24,null)),e.editorActiveIndentGuide6=(0,y.registerColor)("editorIndentGuide.activeBackground6",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(25,null));const S=(0,y.registerColor)("editorActiveLineNumber.foreground",{dark:"#c6c6c6",light:"#0B216F",hcDark:y.activeContrastBorder,hcLight:y.activeContrastBorder},L.localize(26,null),!1,L.localize(27,null));e.editorActiveLineNumber=(0,y.registerColor)("editorLineNumber.activeForeground",{dark:S,light:S,hcDark:S,hcLight:S},L.localize(28,null)),e.editorDimmedLineNumber=(0,y.registerColor)("editorLineNumber.dimmedForeground",{dark:null,light:null,hcDark:null,hcLight:null},L.localize(29,null)),e.editorRuler=(0,y.registerColor)("editorRuler.foreground",{dark:"#5A5A5A",light:k.Color.lightgrey,hcDark:k.Color.white,hcLight:"#292929"},L.localize(30,null)),e.editorCodeLensForeground=(0,y.registerColor)("editorCodeLens.foreground",{dark:"#999999",light:"#919191",hcDark:"#999999",hcLight:"#292929"},L.localize(31,null)),e.editorBracketMatchBackground=(0,y.registerColor)("editorBracketMatch.background",{dark:"#0064001a",light:"#0064001a",hcDark:"#0064001a",hcLight:"#0000"},L.localize(32,null)),e.editorBracketMatchBorder=(0,y.registerColor)("editorBracketMatch.border",{dark:"#888",light:"#B9B9B9",hcDark:y.contrastBorder,hcLight:y.contrastBorder},L.localize(33,null)),e.editorOverviewRulerBorder=(0,y.registerColor)("editorOverviewRuler.border",{dark:"#7f7f7f4d",light:"#7f7f7f4d",hcDark:"#7f7f7f4d",hcLight:"#666666"},L.localize(34,null)),e.editorOverviewRulerBackground=(0,y.registerColor)("editorOverviewRuler.background",null,L.localize(35,null)),e.editorGutter=(0,y.registerColor)("editorGutter.background",{dark:y.editorBackground,light:y.editorBackground,hcDark:y.editorBackground,hcLight:y.editorBackground},L.localize(36,null)),e.editorUnnecessaryCodeBorder=(0,y.registerColor)("editorUnnecessaryCode.border",{dark:null,light:null,hcDark:k.Color.fromHex("#fff").transparent(.8),hcLight:y.contrastBorder},L.localize(37,null)),e.editorUnnecessaryCodeOpacity=(0,y.registerColor)("editorUnnecessaryCode.opacity",{dark:k.Color.fromHex("#000a"),light:k.Color.fromHex("#0007"),hcDark:null,hcLight:null},L.localize(38,null)),e.ghostTextBorder=(0,y.registerColor)("editorGhostText.border",{dark:null,light:null,hcDark:k.Color.fromHex("#fff").transparent(.8),hcLight:k.Color.fromHex("#292929").transparent(.8)},L.localize(39,null)),e.ghostTextForeground=(0,y.registerColor)("editorGhostText.foreground",{dark:k.Color.fromHex("#ffffff56"),light:k.Color.fromHex("#0007"),hcDark:null,hcLight:null},L.localize(40,null)),e.ghostTextBackground=(0,y.registerColor)("editorGhostText.background",{dark:null,light:null,hcDark:null,hcLight:null},L.localize(41,null));const p=new k.Color(new k.RGBA(0,122,204,.6));e.overviewRulerRangeHighlight=(0,y.registerColor)("editorOverviewRuler.rangeHighlightForeground",{dark:p,light:p,hcDark:p,hcLight:p},L.localize(42,null),!0),e.overviewRulerError=(0,y.registerColor)("editorOverviewRuler.errorForeground",{dark:new k.Color(new k.RGBA(255,18,18,.7)),light:new k.Color(new k.RGBA(255,18,18,.7)),hcDark:new k.Color(new k.RGBA(255,50,50,1)),hcLight:"#B5200D"},L.localize(43,null)),e.overviewRulerWarning=(0,y.registerColor)("editorOverviewRuler.warningForeground",{dark:y.editorWarningForeground,light:y.editorWarningForeground,hcDark:y.editorWarningBorder,hcLight:y.editorWarningBorder},L.localize(44,null)),e.overviewRulerInfo=(0,y.registerColor)("editorOverviewRuler.infoForeground",{dark:y.editorInfoForeground,light:y.editorInfoForeground,hcDark:y.editorInfoBorder,hcLight:y.editorInfoBorder},L.localize(45,null)),e.editorBracketHighlightingForeground1=(0,y.registerColor)("editorBracketHighlight.foreground1",{dark:"#FFD700",light:"#0431FAFF",hcDark:"#FFD700",hcLight:"#0431FAFF"},L.localize(46,null)),e.editorBracketHighlightingForeground2=(0,y.registerColor)("editorBracketHighlight.foreground2",{dark:"#DA70D6",light:"#319331FF",hcDark:"#DA70D6",hcLight:"#319331FF"},L.localize(47,null)),e.editorBracketHighlightingForeground3=(0,y.registerColor)("editorBracketHighlight.foreground3",{dark:"#179FFF",light:"#7B3814FF",hcDark:"#87CEFA",hcLight:"#7B3814FF"},L.localize(48,null)),e.editorBracketHighlightingForeground4=(0,y.registerColor)("editorBracketHighlight.foreground4",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(49,null)),e.editorBracketHighlightingForeground5=(0,y.registerColor)("editorBracketHighlight.foreground5",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(50,null)),e.editorBracketHighlightingForeground6=(0,y.registerColor)("editorBracketHighlight.foreground6",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(51,null)),e.editorBracketHighlightingUnexpectedBracketForeground=(0,y.registerColor)("editorBracketHighlight.unexpectedBracket.foreground",{dark:new k.Color(new k.RGBA(255,18,18,.8)),light:new k.Color(new k.RGBA(255,18,18,.8)),hcDark:new k.Color(new k.RGBA(255,50,50,1)),hcLight:""},L.localize(52,null)),e.editorBracketPairGuideBackground1=(0,y.registerColor)("editorBracketPairGuide.background1",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(53,null)),e.editorBracketPairGuideBackground2=(0,y.registerColor)("editorBracketPairGuide.background2",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(54,null)),e.editorBracketPairGuideBackground3=(0,y.registerColor)("editorBracketPairGuide.background3",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(55,null)),e.editorBracketPairGuideBackground4=(0,y.registerColor)("editorBracketPairGuide.background4",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(56,null)),e.editorBracketPairGuideBackground5=(0,y.registerColor)("editorBracketPairGuide.background5",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(57,null)),e.editorBracketPairGuideBackground6=(0,y.registerColor)("editorBracketPairGuide.background6",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(58,null)),e.editorBracketPairGuideActiveBackground1=(0,y.registerColor)("editorBracketPairGuide.activeBackground1",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(59,null)),e.editorBracketPairGuideActiveBackground2=(0,y.registerColor)("editorBracketPairGuide.activeBackground2",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(60,null)),e.editorBracketPairGuideActiveBackground3=(0,y.registerColor)("editorBracketPairGuide.activeBackground3",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(61,null)),e.editorBracketPairGuideActiveBackground4=(0,y.registerColor)("editorBracketPairGuide.activeBackground4",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(62,null)),e.editorBracketPairGuideActiveBackground5=(0,y.registerColor)("editorBracketPairGuide.activeBackground5",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(63,null)),e.editorBracketPairGuideActiveBackground6=(0,y.registerColor)("editorBracketPairGuide.activeBackground6",{dark:"#00000000",light:"#00000000",hcDark:"#00000000",hcLight:"#00000000"},L.localize(64,null)),e.editorUnicodeHighlightBorder=(0,y.registerColor)("editorUnicodeHighlight.border",{dark:y.editorWarningForeground,light:y.editorWarningForeground,hcDark:y.editorWarningForeground,hcLight:y.editorWarningForeground},L.localize(65,null)),e.editorUnicodeHighlightBackground=(0,y.registerColor)("editorUnicodeHighlight.background",{dark:y.editorWarningBackground,light:y.editorWarningBackground,hcDark:y.editorWarningBackground,hcLight:y.editorWarningBackground},L.localize(66,null)),(0,E.registerThemingParticipant)((_,v)=>{const b=_.getColor(y.editorBackground),a=_.getColor(e.editorLineHighlight),i=a&&!a.isTransparent()?a:b;i&&v.addRule(`.monaco-editor .inputarea.ime-input { background-color: ${i}; }`)})}),define(se[856],oe([1,0,115,83,13,23,24,89,10,431]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CurrentLineMarginHighlightOverlay=e.CurrentLineHighlightOverlay=e.AbstractLineHighlightOverlay=void 0;class v extends L.DynamicViewOverlay{constructor(n){super(),this._context=n;const t=this._context.configuration.options,r=t.get(143);this._lineHeight=t.get(66),this._renderLineHighlight=t.get(95),this._renderLineHighlightOnlyWhenFocus=t.get(96),this._wordWrap=r.isViewportWrapping,this._contentLeft=r.contentLeft,this._contentWidth=r.contentWidth,this._selectionIsEmpty=!0,this._focused=!1,this._cursorLineNumbers=[1],this._selections=[new S.Selection(1,1,1,1)],this._renderData=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),super.dispose()}_readFromSelections(){let n=!1;const t=new Set;for(const f of this._selections)t.add(f.positionLineNumber);const r=Array.from(t);r.sort((f,c)=>f-c),y.equals(this._cursorLineNumbers,r)||(this._cursorLineNumbers=r,n=!0);const u=this._selections.every(f=>f.isEmpty());return this._selectionIsEmpty!==u&&(this._selectionIsEmpty=u,n=!0),n}onThemeChanged(n){return this._readFromSelections()}onConfigurationChanged(n){const t=this._context.configuration.options,r=t.get(143);return this._lineHeight=t.get(66),this._renderLineHighlight=t.get(95),this._renderLineHighlightOnlyWhenFocus=t.get(96),this._wordWrap=r.isViewportWrapping,this._contentLeft=r.contentLeft,this._contentWidth=r.contentWidth,!0}onCursorStateChanged(n){return this._selections=n.selections,this._readFromSelections()}onFlushed(n){return!0}onLinesDeleted(n){return!0}onLinesInserted(n){return!0}onScrollChanged(n){return n.scrollWidthChanged||n.scrollTopChanged}onZonesChanged(n){return!0}onFocusChanged(n){return this._renderLineHighlightOnlyWhenFocus?(this._focused=n.isFocused,!0):!1}prepareRender(n){if(!this._shouldRenderThis()){this._renderData=null;return}const t=n.visibleRange.startLineNumber,r=n.visibleRange.endLineNumber,u=[];for(let c=t;c<=r;c++){const d=c-t;u[d]=""}if(this._wordWrap){const c=this._renderOne(n,!1);for(const d of this._cursorLineNumbers){const s=this._context.viewModel.coordinatesConverter,l=s.convertViewPositionToModelPosition(new _.Position(d,1)).lineNumber,o=s.convertModelPositionToViewPosition(new _.Position(l,1)).lineNumber,g=s.convertModelPositionToViewPosition(new _.Position(l,this._context.viewModel.model.getLineMaxColumn(l))).lineNumber,h=Math.max(o,t),m=Math.min(g,r);for(let C=h;C<=m;C++){const w=C-t;u[w]=c}}}const f=this._renderOne(n,!0);for(const c of this._cursorLineNumbers){if(cr)continue;const d=c-t;u[d]=f}this._renderData=u}render(n,t){if(!this._renderData)return"";const r=t-n;return r>=this._renderData.length?"":this._renderData[r]}_shouldRenderInMargin(){return(this._renderLineHighlight==="gutter"||this._renderLineHighlight==="all")&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}_shouldRenderInContent(){return(this._renderLineHighlight==="line"||this._renderLineHighlight==="all")&&this._selectionIsEmpty&&(!this._renderLineHighlightOnlyWhenFocus||this._focused)}}e.AbstractLineHighlightOverlay=v;class b extends v{_renderOne(n,t){return`
    `}_shouldRenderThis(){return this._shouldRenderInContent()}_shouldRenderOther(){return this._shouldRenderInMargin()}}e.CurrentLineHighlightOverlay=b;class a extends v{_renderOne(n,t){return`
    `}_shouldRenderThis(){return!0}_shouldRenderOther(){return this._shouldRenderInContent()}}e.CurrentLineMarginHighlightOverlay=a,(0,E.registerThemingParticipant)((i,n)=>{const t=i.getColor(k.editorLineHighlight);if(t&&(n.addRule(`.monaco-editor .view-overlays .current-line { background-color: ${t}; }`),n.addRule(`.monaco-editor .margin-view-overlays .current-line-margin { background-color: ${t}; border: none; }`)),!t||t.isTransparent()||i.defines(k.editorLineHighlightBorder)){const r=i.getColor(k.editorLineHighlightBorder);r&&(n.addRule(`.monaco-editor .view-overlays .current-line-exact { border: 2px solid ${r}; }`),n.addRule(`.monaco-editor .margin-view-overlays .current-line-exact-margin { border: 2px solid ${r}; }`),(0,p.isHighContrast)(i.type)&&(n.addRule(".monaco-editor .view-overlays .current-line-exact { border-width: 1px; }"),n.addRule(".monaco-editor .margin-view-overlays .current-line-exact-margin { border-width: 1px; }")))}})}),define(se[857],oe([1,0,115,83,23,10,13,20,297,212,434]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IndentGuidesOverlay=void 0;class b extends L.DynamicViewOverlay{constructor(n){super(),this._context=n,this._primaryPosition=null;const t=this._context.configuration.options,r=t.get(144),u=t.get(50);this._lineHeight=t.get(66),this._spaceWidth=u.spaceWidth,this._maxIndentLeft=r.wrappingColumn===-1?-1:r.wrappingColumn*u.typicalHalfwidthCharacterWidth,this._bracketPairGuideOptions=t.get(16),this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(n){const t=this._context.configuration.options,r=t.get(144),u=t.get(50);return this._lineHeight=t.get(66),this._spaceWidth=u.spaceWidth,this._maxIndentLeft=r.wrappingColumn===-1?-1:r.wrappingColumn*u.typicalHalfwidthCharacterWidth,this._bracketPairGuideOptions=t.get(16),!0}onCursorStateChanged(n){var t;const u=n.selections[0].getPosition();return!((t=this._primaryPosition)===null||t===void 0)&&t.equals(u)?!1:(this._primaryPosition=u,!0)}onDecorationsChanged(n){return!0}onFlushed(n){return!0}onLinesChanged(n){return!0}onLinesDeleted(n){return!0}onLinesInserted(n){return!0}onScrollChanged(n){return n.scrollTopChanged}onZonesChanged(n){return!0}onLanguageConfigurationChanged(n){return!0}prepareRender(n){var t,r,u,f;if(!this._bracketPairGuideOptions.indentation&&this._bracketPairGuideOptions.bracketPairs===!1){this._renderResult=null;return}const c=n.visibleRange.startLineNumber,d=n.visibleRange.endLineNumber,s=n.scrollWidth,l=this._lineHeight,o=this._primaryPosition,g=this.getGuidesByLine(c,Math.min(d+1,this._context.viewModel.getLineCount()),o),h=[];for(let m=c;m<=d;m++){const C=m-c,w=g[C];let D="";const I=(r=(t=n.visibleRangeForPosition(new E.Position(m,1)))===null||t===void 0?void 0:t.left)!==null&&r!==void 0?r:0;for(const T of w){const A=T.column===-1?I+(T.visibleColumn-1)*this._spaceWidth:n.visibleRangeForPosition(new E.Position(m,T.column)).left;if(A>s||this._maxIndentLeft>0&&A>this._maxIndentLeft)break;const P=T.horizontalLine?T.horizontalLine.top?"horizontal-top":"horizontal-bottom":"vertical",N=T.horizontalLine?((f=(u=n.visibleRangeForPosition(new E.Position(m,T.horizontalLine.endColumn)))===null||u===void 0?void 0:u.left)!==null&&f!==void 0?f:A+this._spaceWidth)-A:this._spaceWidth;D+=`
    `}h[C]=D}this._renderResult=h}getGuidesByLine(n,t,r){const u=this._bracketPairGuideOptions.bracketPairs!==!1?this._context.viewModel.getBracketGuidesInRangeByLine(n,t,r,{highlightActive:this._bracketPairGuideOptions.highlightActiveBracketPair,horizontalGuides:this._bracketPairGuideOptions.bracketPairsHorizontal===!0?v.HorizontalGuidesState.Enabled:this._bracketPairGuideOptions.bracketPairsHorizontal==="active"?v.HorizontalGuidesState.EnabledForActive:v.HorizontalGuidesState.Disabled,includeInactive:this._bracketPairGuideOptions.bracketPairs===!0}):null,f=this._bracketPairGuideOptions.indentation?this._context.viewModel.getLinesIndentGuides(n,t):null;let c=0,d=0,s=0;if(this._bracketPairGuideOptions.highlightActiveIndentation!==!1&&r){const g=this._context.viewModel.getActiveIndentGuide(r.lineNumber,n,t);c=g.startLineNumber,d=g.endLineNumber,s=g.indent}const{indentSize:l}=this._context.viewModel.model.getOptions(),o=[];for(let g=n;g<=t;g++){const h=new Array;o.push(h);const m=u?u[g-n]:[],C=new S.ArrayQueue(m),w=f?f[g-n]:0;for(let D=1;D<=w;D++){const I=(D-1)*l+1,T=(this._bracketPairGuideOptions.highlightActiveIndentation==="always"||m.length===0)&&c<=g&&g<=d&&D===s;h.push(...C.takeWhile(P=>P.visibleColumn!0)||[])}return o}render(n,t){if(!this._renderResult)return"";const r=t-n;return r<0||r>=this._renderResult.length?"":this._renderResult[r]}}e.IndentGuidesOverlay=b;function a(i){if(!(i&&i.isTransparent()))return i}(0,y.registerThemingParticipant)((i,n)=>{const t=[{bracketColor:k.editorBracketHighlightingForeground1,guideColor:k.editorBracketPairGuideBackground1,guideColorActive:k.editorBracketPairGuideActiveBackground1},{bracketColor:k.editorBracketHighlightingForeground2,guideColor:k.editorBracketPairGuideBackground2,guideColorActive:k.editorBracketPairGuideActiveBackground2},{bracketColor:k.editorBracketHighlightingForeground3,guideColor:k.editorBracketPairGuideBackground3,guideColorActive:k.editorBracketPairGuideActiveBackground3},{bracketColor:k.editorBracketHighlightingForeground4,guideColor:k.editorBracketPairGuideBackground4,guideColorActive:k.editorBracketPairGuideActiveBackground4},{bracketColor:k.editorBracketHighlightingForeground5,guideColor:k.editorBracketPairGuideBackground5,guideColorActive:k.editorBracketPairGuideActiveBackground5},{bracketColor:k.editorBracketHighlightingForeground6,guideColor:k.editorBracketPairGuideBackground6,guideColorActive:k.editorBracketPairGuideActiveBackground6}],r=new _.BracketPairGuidesClassNames,u=[{indentColor:k.editorIndentGuide1,indentColorActive:k.editorActiveIndentGuide1},{indentColor:k.editorIndentGuide2,indentColorActive:k.editorActiveIndentGuide2},{indentColor:k.editorIndentGuide3,indentColorActive:k.editorActiveIndentGuide3},{indentColor:k.editorIndentGuide4,indentColorActive:k.editorActiveIndentGuide4},{indentColor:k.editorIndentGuide5,indentColorActive:k.editorActiveIndentGuide5},{indentColor:k.editorIndentGuide6,indentColorActive:k.editorActiveIndentGuide6}],f=t.map(d=>{var s,l;const o=i.getColor(d.bracketColor),g=i.getColor(d.guideColor),h=i.getColor(d.guideColorActive),m=a((s=a(g))!==null&&s!==void 0?s:o?.transparent(.3)),C=a((l=a(h))!==null&&l!==void 0?l:o);if(!(!m||!C))return{guideColor:m,guideColorActive:C}}).filter(p.isDefined),c=u.map(d=>{const s=i.getColor(d.indentColor),l=i.getColor(d.indentColorActive),o=a(s),g=a(l);if(!(!o||!g))return{indentColor:o,indentColorActive:g}}).filter(p.isDefined);if(f.length>0){for(let d=0;d<30;d++){const s=f[d%f.length];n.addRule(`.monaco-editor .${r.getInlineClassNameOfLevel(d).replace(/ /g,".")} { --guide-color: ${s.guideColor}; --guide-color-active: ${s.guideColorActive}; }`)}n.addRule(".monaco-editor .vertical { box-shadow: 1px 0 0 0 var(--guide-color) inset; }"),n.addRule(".monaco-editor .horizontal-top { border-top: 1px solid var(--guide-color); }"),n.addRule(".monaco-editor .horizontal-bottom { border-bottom: 1px solid var(--guide-color); }"),n.addRule(`.monaco-editor .vertical.${r.activeClassName} { box-shadow: 1px 0 0 0 var(--guide-color-active) inset; }`),n.addRule(`.monaco-editor .horizontal-top.${r.activeClassName} { border-top: 1px solid var(--guide-color-active); }`),n.addRule(`.monaco-editor .horizontal-bottom.${r.activeClassName} { border-bottom: 1px solid var(--guide-color-active); }`)}if(c.length>0){for(let d=0;d<30;d++){const s=c[d%c.length];n.addRule(`.monaco-editor .lines-content .core-guide-indent.lvl-${d} { --indent-color: ${s.indentColor}; --indent-color-active: ${s.indentColorActive}; }`)}n.addRule(".monaco-editor .lines-content .core-guide-indent { box-shadow: 1px 0 0 0 var(--indent-color) inset; }"),n.addRule(".monaco-editor .lines-content .core-guide-indent.indent-active { box-shadow: 1px 0 0 0 var(--indent-color-active) inset; }")}})}),define(se[369],oe([1,0,17,115,10,5,23,83,435]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.LineNumbersOverlay=void 0;class _ extends k.DynamicViewOverlay{constructor(b){super(),this._context=b,this._readConfig(),this._lastCursorModelPosition=new y.Position(1,1),this._renderResult=null,this._activeLineNumber=1,this._context.addEventHandler(this)}_readConfig(){const b=this._context.configuration.options;this._lineHeight=b.get(66);const a=b.get(67);this._renderLineNumbers=a.renderType,this._renderCustomLineNumbers=a.renderFn,this._renderFinalNewline=b.get(94);const i=b.get(143);this._lineNumbersLeft=i.lineNumbersLeft,this._lineNumbersWidth=i.lineNumbersWidth}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(b){return this._readConfig(),!0}onCursorStateChanged(b){const a=b.selections[0].getPosition();this._lastCursorModelPosition=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(a);let i=!1;return this._activeLineNumber!==a.lineNumber&&(this._activeLineNumber=a.lineNumber,i=!0),(this._renderLineNumbers===2||this._renderLineNumbers===3)&&(i=!0),i}onFlushed(b){return!0}onLinesChanged(b){return!0}onLinesDeleted(b){return!0}onLinesInserted(b){return!0}onScrollChanged(b){return b.scrollTopChanged}onZonesChanged(b){return!0}onDecorationsChanged(b){return b.affectsLineNumber}_getLineRenderLineNumber(b){const a=this._context.viewModel.coordinatesConverter.convertViewPositionToModelPosition(new y.Position(b,1));if(a.column!==1)return"";const i=a.lineNumber;if(this._renderCustomLineNumbers)return this._renderCustomLineNumbers(i);if(this._renderLineNumbers===2){const n=Math.abs(this._lastCursorModelPosition.lineNumber-i);return n===0?''+i+"":String(n)}return this._renderLineNumbers===3?this._lastCursorModelPosition.lineNumber===i||i%10===0?String(i):"":String(i)}prepareRender(b){if(this._renderLineNumbers===0){this._renderResult=null;return}const a=L.isLinux?this._lineHeight%2===0?" lh-even":" lh-odd":"",i=b.visibleRange.startLineNumber,n=b.visibleRange.endLineNumber,t=this._context.viewModel.getDecorationsInViewport(b.visibleRange).filter(c=>!!c.options.lineNumberClassName);t.sort((c,d)=>E.Range.compareRangesUsingEnds(c.range,d.range));let r=0;const u=this._context.viewModel.getLineCount(),f=[];for(let c=i;c<=n;c++){const d=c-i;let s=this._getLineRenderLineNumber(c),l="";for(;r${s}`}this._renderResult=f}render(b,a){if(!this._renderResult)return"";const i=a-b;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}e.LineNumbersOverlay=_,_.CLASS_NAME="line-numbers",(0,S.registerThemingParticipant)((v,b)=>{const a=v.getColor(p.editorLineNumbers),i=v.getColor(p.editorDimmedLineNumber);i?b.addRule(`.monaco-editor .line-numbers.dimmed-line-number { color: ${i}; }`):a&&b.addRule(`.monaco-editor .line-numbers.dimmed-line-number { color: ${a.transparent(.4)}; }`)})}),define(se[858],oe([1,0,618,54,40,17,11,72,190,280,56,369,299,36,150,10,5,24,200,31,39,270,34,8,429]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.TextAreaHandler=void 0;class h{constructor(I,T,A,P,N){this._context=I,this.modelLineNumber=T,this.distanceToModelLineStart=A,this.widthOfHiddenLineTextBefore=P,this.distanceToModelLineEnd=N,this._visibleTextAreaBrand=void 0,this.startPosition=null,this.endPosition=null,this.visibleTextareaStart=null,this.visibleTextareaEnd=null,this._previousPresentation=null}prepareRender(I){const T=new r.Position(this.modelLineNumber,this.distanceToModelLineStart+1),A=new r.Position(this.modelLineNumber,this._context.viewModel.model.getLineMaxColumn(this.modelLineNumber)-this.distanceToModelLineEnd);this.startPosition=this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(T),this.endPosition=this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(A),this.startPosition.lineNumber===this.endPosition.lineNumber?(this.visibleTextareaStart=I.visibleRangeForPosition(this.startPosition),this.visibleTextareaEnd=I.visibleRangeForPosition(this.endPosition)):(this.visibleTextareaStart=null,this.visibleTextareaEnd=null)}definePresentation(I){return this._previousPresentation||(I?this._previousPresentation=I:this._previousPresentation={foreground:1,italic:!1,bold:!1,underline:!1,strikethrough:!1}),this._previousPresentation}}const m=k.isFirefox;let C=class extends b.ViewPart{constructor(I,T,A,P,N){super(I),this._keybindingService=P,this._instantiationService=N,this._primaryCursorPosition=new r.Position(1,1),this._primaryCursorVisibleRange=null,this._viewController=T,this._visibleRangeProvider=A,this._scrollLeft=0,this._scrollTop=0;const M=this._context.configuration.options,R=M.get(143);this._setAccessibilityOptions(M),this._contentLeft=R.contentLeft,this._contentWidth=R.contentWidth,this._contentHeight=R.height,this._fontInfo=M.get(50),this._lineHeight=M.get(66),this._emptySelectionClipboard=M.get(37),this._copyWithSyntaxHighlighting=M.get(25),this._visibleTextArea=null,this._selections=[new f.Selection(1,1,1,1)],this._modelSelections=[new f.Selection(1,1,1,1)],this._lastRenderPosition=null,this.textArea=(0,y.createFastDomNode)(document.createElement("textarea")),b.PartFingerprints.write(this.textArea,7),this.textArea.setClassName(`inputarea ${c.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this.textArea.setAttribute("wrap",this._textAreaWrapping&&!this._visibleTextArea?"on":"off");const{tabSize:x}=this._context.viewModel.model.getOptions();this.textArea.domNode.style.tabSize=`${x*this._fontInfo.spaceWidth}px`,this.textArea.setAttribute("autocorrect","off"),this.textArea.setAttribute("autocapitalize","off"),this.textArea.setAttribute("autocomplete","off"),this.textArea.setAttribute("spellcheck","false"),this.textArea.setAttribute("aria-label",this._getAriaLabel(M)),this.textArea.setAttribute("aria-required",M.get(5)?"true":"false"),this.textArea.setAttribute("tabindex",String(M.get(123))),this.textArea.setAttribute("role","textbox"),this.textArea.setAttribute("aria-roledescription",L.localize(0,null)),this.textArea.setAttribute("aria-multiline","true"),this.textArea.setAttribute("aria-autocomplete",M.get(90)?"none":"both"),this._ensureReadOnlyAttribute(),this.textAreaCover=(0,y.createFastDomNode)(document.createElement("div")),this.textAreaCover.setPosition("absolute");const O={getLineCount:()=>this._context.viewModel.getLineCount(),getLineMaxColumn:V=>this._context.viewModel.getLineMaxColumn(V),getValueInRange:(V,K)=>this._context.viewModel.getValueInRange(V,K),getValueLengthInRange:(V,K)=>this._context.viewModel.getValueLengthInRange(V,K),modifyPosition:(V,K)=>this._context.viewModel.modifyPosition(V,K)},B={getDataToCopy:()=>{const V=this._context.viewModel.getPlainTextToCopy(this._modelSelections,this._emptySelectionClipboard,E.isWindows),K=this._context.viewModel.model.getEOL(),F=this._emptySelectionClipboard&&this._modelSelections.length===1&&this._modelSelections[0].isEmpty(),q=Array.isArray(V)?V:null,ie=Array.isArray(V)?V.join(K):V;let ae,ne=null;if(_.CopyOptions.forceCopyWithSyntaxHighlighting||this._copyWithSyntaxHighlighting&&ie.length<65536){const $=this._context.viewModel.getRichTextToCopy(this._modelSelections,this._emptySelectionClipboard);$&&(ae=$.html,ne=$.mode)}return{isFromEmptySelection:F,multicursorText:q,text:ie,html:ae,mode:ne}},getScreenReaderContent:()=>{if(this._accessibilitySupport===1){const V=this._selections[0];if(E.isMacintosh&&V.isEmpty()){const F=V.getStartPosition();let q=this._getWordBeforePosition(F);if(q.length===0&&(q=this._getCharacterBeforePosition(F)),q.length>0)return new v.TextAreaState(q,q.length,q.length,u.Range.fromPositions(F),0)}const K=500;if(E.isMacintosh&&!V.isEmpty()&&O.getValueLengthInRange(V,0)0)return new v.TextAreaState(F,q,q,u.Range.fromPositions(K),0)}return v.TextAreaState.EMPTY}return v.PagedScreenReaderStrategy.fromEditorSelection(O,this._selections[0],this._accessibilityPageSize,this._accessibilitySupport===0)},deduceModelPosition:(V,K,F)=>this._context.viewModel.deduceModelPositionRelativeToViewPosition(V,K,F)},W=this._register(new _.TextAreaWrapper(this.textArea.domNode));this._textAreaInput=this._register(this._instantiationService.createInstance(_.TextAreaInput,B,W,E.OS,{isAndroid:k.isAndroid,isChrome:k.isChrome,isFirefox:k.isFirefox,isSafari:k.isSafari})),this._register(this._textAreaInput.onKeyDown(V=>{this._viewController.emitKeyDown(V)})),this._register(this._textAreaInput.onKeyUp(V=>{this._viewController.emitKeyUp(V)})),this._register(this._textAreaInput.onPaste(V=>{let K=!1,F=null,q=null;V.metadata&&(K=this._emptySelectionClipboard&&!!V.metadata.isFromEmptySelection,F=typeof V.metadata.multicursorText<"u"?V.metadata.multicursorText:null,q=V.metadata.mode),this._viewController.paste(V.text,K,F,q)})),this._register(this._textAreaInput.onCut(()=>{this._viewController.cut()})),this._register(this._textAreaInput.onType(V=>{V.replacePrevCharCnt||V.replaceNextCharCnt||V.positionDelta?(v._debugComposition&&console.log(` => compositionType: <<${V.text}>>, ${V.replacePrevCharCnt}, ${V.replaceNextCharCnt}, ${V.positionDelta}`),this._viewController.compositionType(V.text,V.replacePrevCharCnt,V.replaceNextCharCnt,V.positionDelta)):(v._debugComposition&&console.log(` => type: <<${V.text}>>`),this._viewController.type(V.text))})),this._register(this._textAreaInput.onSelectionChangeRequest(V=>{this._viewController.setSelection(V)})),this._register(this._textAreaInput.onCompositionStart(V=>{const K=this.textArea.domNode,F=this._modelSelections[0],{distanceToModelLineStart:q,widthOfHiddenTextBefore:ie}=(()=>{const ne=K.value.substring(0,Math.min(K.selectionStart,K.selectionEnd)),$=ne.lastIndexOf(` `),J=ne.substring($+1),Q=J.lastIndexOf(" "),re=J.length-Q-1,de=F.getStartPosition(),he=Math.min(de.column-1,re),me=de.column-1-he,X=J.substring(0,J.length-he),{tabSize:U}=this._context.viewModel.model.getOptions(),G=w(this.textArea.domNode.ownerDocument,X,this._fontInfo,U);return{distanceToModelLineStart:me,widthOfHiddenTextBefore:G}})(),{distanceToModelLineEnd:ae}=(()=>{const ne=K.value.substring(Math.max(K.selectionStart,K.selectionEnd)),$=ne.indexOf(` `),J=$===-1?ne:ne.substring(0,$),Q=J.indexOf(" "),re=Q===-1?J.length:J.length-Q-1,de=F.getEndPosition(),he=Math.min(this._context.viewModel.model.getLineMaxColumn(de.lineNumber)-de.column,re);return{distanceToModelLineEnd:this._context.viewModel.model.getLineMaxColumn(de.lineNumber)-de.column-he}})();this._context.viewModel.revealRange("keyboard",!0,u.Range.fromPositions(this._selections[0].getStartPosition()),0,1),this._visibleTextArea=new h(this._context,F.startLineNumber,q,ie,ae),this.textArea.setAttribute("wrap",this._textAreaWrapping&&!this._visibleTextArea?"on":"off"),this._visibleTextArea.prepareRender(this._visibleRangeProvider),this._render(),this.textArea.setClassName(`inputarea ${c.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME} ime-input`),this._viewController.compositionStart(),this._context.viewModel.onCompositionStart()})),this._register(this._textAreaInput.onCompositionUpdate(V=>{this._visibleTextArea&&(this._visibleTextArea.prepareRender(this._visibleRangeProvider),this._render())})),this._register(this._textAreaInput.onCompositionEnd(()=>{this._visibleTextArea=null,this.textArea.setAttribute("wrap",this._textAreaWrapping&&!this._visibleTextArea?"on":"off"),this._render(),this.textArea.setClassName(`inputarea ${c.MOUSE_CURSOR_TEXT_CSS_CLASS_NAME}`),this._viewController.compositionEnd(),this._context.viewModel.onCompositionEnd()})),this._register(this._textAreaInput.onFocus(()=>{this._context.viewModel.setHasFocus(!0)})),this._register(this._textAreaInput.onBlur(()=>{this._context.viewModel.setHasFocus(!1)})),this._register(l.IME.onDidChange(()=>{this._ensureReadOnlyAttribute()}))}writeScreenReaderContent(I){this._textAreaInput.writeNativeTextAreaContent(I)}dispose(){super.dispose()}_getAndroidWordAtPosition(I){const T='`~!@#$%^&*()-=+[{]}\\|;:",.<>/?',A=this._context.viewModel.getLineContent(I.lineNumber),P=(0,t.getMapForWordSeparators)(T);let N=!0,M=I.column,R=!0,x=I.column,O=0;for(;O<50&&(N||R);){if(N&&M<=1&&(N=!1),N){const B=A.charCodeAt(M-2);P.get(B)!==0?N=!1:M--}if(R&&x>A.length&&(R=!1),R){const B=A.charCodeAt(x-1);P.get(B)!==0?R=!1:x++}O++}return[A.substring(M-1,x-1),I.column-M]}_getWordBeforePosition(I){const T=this._context.viewModel.getLineContent(I.lineNumber),A=(0,t.getMapForWordSeparators)(this._context.configuration.options.get(129));let P=I.column,N=0;for(;P>1;){const M=T.charCodeAt(P-2);if(A.get(M)!==0||N>50)return T.substring(P-1,I.column-1);N++,P--}return T.substring(0,I.column-1)}_getCharacterBeforePosition(I){if(I.column>1){const A=this._context.viewModel.getLineContent(I.lineNumber).charAt(I.column-2);if(!S.isHighSurrogate(A.charCodeAt(0)))return A}return""}_getAriaLabel(I){var T,A,P;if(I.get(2)===1){const M=(T=this._keybindingService.lookupKeybinding("editor.action.toggleScreenReaderAccessibilityMode"))===null||T===void 0?void 0:T.getAriaLabel(),R=(A=this._keybindingService.lookupKeybinding("workbench.action.showCommands"))===null||A===void 0?void 0:A.getAriaLabel(),x=(P=this._keybindingService.lookupKeybinding("workbench.action.openGlobalKeybindings"))===null||P===void 0?void 0:P.getAriaLabel(),O=L.localize(1,null);return M?L.localize(2,null,O,M):R?L.localize(3,null,O,R):x?L.localize(4,null,O,x):O}return I.get(4)}_setAccessibilityOptions(I){this._accessibilitySupport=I.get(2);const T=I.get(3);this._accessibilitySupport===2&&T===n.EditorOptions.accessibilityPageSize.defaultValue?this._accessibilityPageSize=500:this._accessibilityPageSize=T;const P=I.get(143).wrappingColumn;if(P!==-1&&this._accessibilitySupport!==1){const N=I.get(50);this._textAreaWrapping=!0,this._textAreaWidth=Math.round(P*N.typicalHalfwidthCharacterWidth)}else this._textAreaWrapping=!1,this._textAreaWidth=m?0:1}onConfigurationChanged(I){const T=this._context.configuration.options,A=T.get(143);this._setAccessibilityOptions(T),this._contentLeft=A.contentLeft,this._contentWidth=A.contentWidth,this._contentHeight=A.height,this._fontInfo=T.get(50),this._lineHeight=T.get(66),this._emptySelectionClipboard=T.get(37),this._copyWithSyntaxHighlighting=T.get(25),this.textArea.setAttribute("wrap",this._textAreaWrapping&&!this._visibleTextArea?"on":"off");const{tabSize:P}=this._context.viewModel.model.getOptions();return this.textArea.domNode.style.tabSize=`${P*this._fontInfo.spaceWidth}px`,this.textArea.setAttribute("aria-label",this._getAriaLabel(T)),this.textArea.setAttribute("aria-required",T.get(5)?"true":"false"),this.textArea.setAttribute("tabindex",String(T.get(123))),(I.hasChanged(34)||I.hasChanged(90))&&this._ensureReadOnlyAttribute(),I.hasChanged(2)&&this._textAreaInput.writeNativeTextAreaContent("strategy changed"),!0}onCursorStateChanged(I){return this._selections=I.selections.slice(0),this._modelSelections=I.modelSelections.slice(0),this._textAreaInput.writeNativeTextAreaContent("selection changed"),!0}onDecorationsChanged(I){return!0}onFlushed(I){return!0}onLinesChanged(I){return!0}onLinesDeleted(I){return!0}onLinesInserted(I){return!0}onScrollChanged(I){return this._scrollLeft=I.scrollLeft,this._scrollTop=I.scrollTop,!0}onZonesChanged(I){return!0}isFocused(){return this._textAreaInput.isFocused()}focusTextArea(){this._textAreaInput.focusTextArea()}getLastRenderData(){return this._lastRenderPosition}setAriaOptions(I){I.activeDescendant?(this.textArea.setAttribute("aria-haspopup","true"),this.textArea.setAttribute("aria-autocomplete","list"),this.textArea.setAttribute("aria-activedescendant",I.activeDescendant)):(this.textArea.setAttribute("aria-haspopup","false"),this.textArea.setAttribute("aria-autocomplete","both"),this.textArea.removeAttribute("aria-activedescendant")),I.role&&this.textArea.setAttribute("role",I.role)}_ensureReadOnlyAttribute(){const I=this._context.configuration.options;!l.IME.enabled||I.get(34)&&I.get(90)?this.textArea.setAttribute("readonly","true"):this.textArea.removeAttribute("readonly")}prepareRender(I){var T;this._primaryCursorPosition=new r.Position(this._selections[0].positionLineNumber,this._selections[0].positionColumn),this._primaryCursorVisibleRange=I.visibleRangeForPosition(this._primaryCursorPosition),(T=this._visibleTextArea)===null||T===void 0||T.prepareRender(I)}render(I){this._textAreaInput.writeNativeTextAreaContent("render"),this._render()}_render(){var I;if(this._visibleTextArea){const P=this._visibleTextArea.visibleTextareaStart,N=this._visibleTextArea.visibleTextareaEnd,M=this._visibleTextArea.startPosition,R=this._visibleTextArea.endPosition;if(M&&R&&P&&N&&N.left>=this._scrollLeft&&P.left<=this._scrollLeft+this._contentWidth){const x=this._context.viewLayout.getVerticalOffsetForLineNumber(this._primaryCursorPosition.lineNumber)-this._scrollTop,O=this._newlinecount(this.textArea.domNode.value.substr(0,this.textArea.domNode.selectionStart));let B=this._visibleTextArea.widthOfHiddenLineTextBefore,W=this._contentLeft+P.left-this._scrollLeft,V=N.left-P.left+1;if(Wthis._contentWidth&&(V=this._contentWidth);const K=this._context.viewModel.getViewLineData(M.lineNumber),F=K.tokens.findTokenIndexAtOffset(M.column-1),q=K.tokens.findTokenIndexAtOffset(R.column-1),ie=F===q,ae=this._visibleTextArea.definePresentation(ie?K.tokens.getPresentation(F):null);this.textArea.domNode.scrollTop=O*this._lineHeight,this.textArea.domNode.scrollLeft=B,this._doRender({lastRenderPosition:null,top:x,left:W,width:V,height:this._lineHeight,useCover:!1,color:(d.TokenizationRegistry.getColorMap()||[])[ae.foreground],italic:ae.italic,bold:ae.bold,underline:ae.underline,strikethrough:ae.strikethrough})}return}if(!this._primaryCursorVisibleRange){this._renderAtTopLeft();return}const T=this._contentLeft+this._primaryCursorVisibleRange.left-this._scrollLeft;if(Tthis._contentLeft+this._contentWidth){this._renderAtTopLeft();return}const A=this._context.viewLayout.getVerticalOffsetForLineNumber(this._selections[0].positionLineNumber)-this._scrollTop;if(A<0||A>this._contentHeight){this._renderAtTopLeft();return}if(E.isMacintosh||this._accessibilitySupport===2){this._doRender({lastRenderPosition:this._primaryCursorPosition,top:A,left:this._textAreaWrapping?this._contentLeft:T,width:this._textAreaWidth,height:this._lineHeight,useCover:!1}),this.textArea.domNode.scrollLeft=this._primaryCursorVisibleRange.left;const P=(I=this._textAreaInput.textAreaState.newlineCountBeforeSelection)!==null&&I!==void 0?I:this._newlinecount(this.textArea.domNode.value.substr(0,this.textArea.domNode.selectionStart));this.textArea.domNode.scrollTop=P*this._lineHeight;return}this._doRender({lastRenderPosition:this._primaryCursorPosition,top:A,left:this._textAreaWrapping?this._contentLeft:T,width:this._textAreaWidth,height:m?0:1,useCover:!1})}_newlinecount(I){let T=0,A=-1;do{if(A=I.indexOf(` `,A+1),A===-1)break;T++}while(!0);return T}_renderAtTopLeft(){this._doRender({lastRenderPosition:null,top:0,left:0,width:this._textAreaWidth,height:m?0:1,useCover:!0})}_doRender(I){this._lastRenderPosition=I.lastRenderPosition;const T=this.textArea,A=this.textAreaCover;(0,p.applyFontInfo)(T,this._fontInfo),T.setTop(I.top),T.setLeft(I.left),T.setWidth(I.width),T.setHeight(I.height),T.setColor(I.color?s.Color.Format.CSS.formatHex(I.color):""),T.setFontStyle(I.italic?"italic":""),I.bold&&T.setFontWeight("bold"),T.setTextDecoration(`${I.underline?" underline":""}${I.strikethrough?" line-through":""}`),A.setTop(I.useCover?I.top:0),A.setLeft(I.useCover?I.left:0),A.setWidth(I.useCover?I.width:0),A.setHeight(I.useCover?I.height:0);const P=this._context.configuration.options;P.get(57)?A.setClassName("monaco-editor-background textAreaCover "+i.Margin.OUTER_CLASS_NAME):P.get(67).renderType!==0?A.setClassName("monaco-editor-background textAreaCover "+a.LineNumbersOverlay.CLASS_NAME):A.setClassName("monaco-editor-background textAreaCover")}};e.TextAreaHandler=C,e.TextAreaHandler=C=ke([ge(3,o.IKeybindingService),ge(4,g.IInstantiationService)],C);function w(D,I,T,A){if(I.length===0)return 0;const P=D.createElement("div");P.style.position="absolute",P.style.top="-50000px",P.style.width="50000px";const N=D.createElement("span");(0,p.applyFontInfo)(N,T),N.style.whiteSpace="pre",N.style.tabSize=`${A*T.spaceWidth}px`,N.append(I),P.appendChild(N),D.body.appendChild(P);const M=N.offsetWidth;return D.body.removeChild(P),M}}),define(se[859],oe([1,0,40,39,56,10,31,83,86,13]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DecorationsOverviewRuler=void 0;class b{constructor(n,t){const r=n.options;this.lineHeight=r.get(66),this.pixelRatio=r.get(141),this.overviewRulerLanes=r.get(82),this.renderBorder=r.get(81);const u=t.getColor(p.editorOverviewRulerBorder);this.borderColor=u?u.toString():null,this.hideCursor=r.get(59);const f=t.getColor(p.editorCursorForeground);this.cursorColor=f?f.transparent(.7).toString():null,this.themeType=t.type;const c=r.get(72),d=c.enabled,s=c.side,l=t.getColor(p.editorOverviewRulerBackground),o=S.TokenizationRegistry.getDefaultBackground();l?this.backgroundColor=l:d&&s==="right"?this.backgroundColor=o:this.backgroundColor=null;const h=r.get(143).overviewRuler;this.top=h.top,this.right=h.right,this.domWidth=h.width,this.domHeight=h.height,this.overviewRulerLanes===0?(this.canvasWidth=0,this.canvasHeight=0):(this.canvasWidth=this.domWidth*this.pixelRatio|0,this.canvasHeight=this.domHeight*this.pixelRatio|0);const[m,C]=this._initLanes(1,this.canvasWidth,this.overviewRulerLanes);this.x=m,this.w=C}_initLanes(n,t,r){const u=t-n;if(r>=3){const f=Math.floor(u/3),c=Math.floor(u/3),d=u-f-c,s=n,l=s+f,o=s+f+d;return[[0,s,l,s,o,s,l,s],[0,f,d,f+d,c,f+d+c,d+c,f+d+c]]}else if(r===2){const f=Math.floor(u/2),c=u-f,d=n,s=d+f;return[[0,d,d,d,s,d,d,d],[0,f,f,f,c,f+c,f+c,f+c]]}else{const f=n,c=u;return[[0,f,f,f,f,f,f,f],[0,c,c,c,c,c,c,c]]}}equals(n){return this.lineHeight===n.lineHeight&&this.pixelRatio===n.pixelRatio&&this.overviewRulerLanes===n.overviewRulerLanes&&this.renderBorder===n.renderBorder&&this.borderColor===n.borderColor&&this.hideCursor===n.hideCursor&&this.cursorColor===n.cursorColor&&this.themeType===n.themeType&&k.Color.equals(this.backgroundColor,n.backgroundColor)&&this.top===n.top&&this.right===n.right&&this.domWidth===n.domWidth&&this.domHeight===n.domHeight&&this.canvasWidth===n.canvasWidth&&this.canvasHeight===n.canvasHeight}}class a extends y.ViewPart{constructor(n){super(n),this._actualShouldRender=0,this._renderedDecorations=[],this._renderedCursorPositions=[],this._domNode=(0,L.createFastDomNode)(document.createElement("canvas")),this._domNode.setClassName("decorationsOverviewRuler"),this._domNode.setPosition("absolute"),this._domNode.setLayerHinting(!0),this._domNode.setContain("strict"),this._domNode.setAttribute("aria-hidden","true"),this._updateSettings(!1),this._tokensColorTrackerListener=S.TokenizationRegistry.onDidChange(t=>{t.changedColorMap&&this._updateSettings(!0)}),this._cursorPositions=[]}dispose(){super.dispose(),this._tokensColorTrackerListener.dispose()}_updateSettings(n){const t=new b(this._context.configuration,this._context.theme);return this._settings&&this._settings.equals(t)?!1:(this._settings=t,this._domNode.setTop(this._settings.top),this._domNode.setRight(this._settings.right),this._domNode.setWidth(this._settings.domWidth),this._domNode.setHeight(this._settings.domHeight),this._domNode.domNode.width=this._settings.canvasWidth,this._domNode.domNode.height=this._settings.canvasHeight,n&&this._render(),!0)}_markRenderingIsNeeded(){return this._actualShouldRender=2,!0}_markRenderingIsMaybeNeeded(){return this._actualShouldRender=1,!0}onConfigurationChanged(n){return this._updateSettings(!1)?this._markRenderingIsNeeded():!1}onCursorStateChanged(n){this._cursorPositions=[];for(let t=0,r=n.selections.length;tC.lineNumber===w.lineNumber)&&(this._actualShouldRender=2),this._actualShouldRender===1)return;this._renderedDecorations=t,this._renderedCursorPositions=this._cursorPositions,this._domNode.setDisplay("block");const r=this._settings.canvasWidth,u=this._settings.canvasHeight,f=this._settings.lineHeight,c=this._context.viewLayout,d=this._context.viewLayout.getScrollHeight(),s=u/d,l=6*this._settings.pixelRatio|0,o=l/2|0,g=this._domNode.domNode.getContext("2d");n?n.isOpaque()?(g.fillStyle=k.Color.Format.CSS.formatHexA(n),g.fillRect(0,0,r,u)):(g.clearRect(0,0,r,u),g.fillStyle=k.Color.Format.CSS.formatHexA(n),g.fillRect(0,0,r,u)):g.clearRect(0,0,r,u);const h=this._settings.x,m=this._settings.w;for(const C of t){const w=C.color,D=C.data;g.fillStyle=w;let I=0,T=0,A=0;for(let P=0,N=D.length/3;Pu&&(V=u-o),O=V-o,B=V+o}O>A+1||M!==I?(P!==0&&g.fillRect(h[I],T,m[I],A-T),I=M,T=O,A=B):B>A&&(A=B)}g.fillRect(h[I],T,m[I],A-T)}if(!this._settings.hideCursor&&this._settings.cursorColor){const C=2*this._settings.pixelRatio|0,w=C/2|0,D=this._settings.x[7],I=this._settings.w[7];g.fillStyle=this._settings.cursorColor;let T=-100,A=-100;for(let P=0,N=this._cursorPositions.length;Pu&&(R=u-w);const x=R-w,O=x+C;x>A+1?(P!==0&&g.fillRect(D,T,I,A-T),T=x,A=O):O>A&&(A=O)}g.fillRect(D,T,I,A-T)}this._settings.renderBorder&&this._settings.borderColor&&this._settings.overviewRulerLanes>0&&(g.beginPath(),g.lineWidth=1,g.strokeStyle=this._settings.borderColor,g.moveTo(0,0),g.lineTo(0,u),g.stroke(),g.moveTo(0,0),g.lineTo(r,0),g.stroke())}}e.DecorationsOverviewRuler=a}),define(se[860],oe([1,0,40,14,56,636,36,83,23,89,7,445]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewCursors=void 0;class a extends y.ViewPart{constructor(n){super(n);const t=this._context.configuration.options;this._readOnly=t.get(90),this._cursorBlinking=t.get(26),this._cursorStyle=t.get(28),this._cursorSmoothCaretAnimation=t.get(27),this._selectionIsEmpty=!0,this._isComposingInput=!1,this._isVisible=!1,this._primaryCursor=new E.ViewCursor(this._context),this._secondaryCursors=[],this._renderData=[],this._domNode=(0,L.createFastDomNode)(document.createElement("div")),this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true"),this._updateDomClassName(),this._domNode.appendChild(this._primaryCursor.getDomNode()),this._startCursorBlinkAnimation=new k.TimeoutTimer,this._cursorFlatBlinkInterval=new b.WindowIntervalTimer,this._blinkingEnabled=!1,this._editorHasFocus=!1,this._updateBlinking()}dispose(){super.dispose(),this._startCursorBlinkAnimation.dispose(),this._cursorFlatBlinkInterval.dispose()}getDomNode(){return this._domNode}onCompositionStart(n){return this._isComposingInput=!0,this._updateBlinking(),!0}onCompositionEnd(n){return this._isComposingInput=!1,this._updateBlinking(),!0}onConfigurationChanged(n){const t=this._context.configuration.options;this._readOnly=t.get(90),this._cursorBlinking=t.get(26),this._cursorStyle=t.get(28),this._cursorSmoothCaretAnimation=t.get(27),this._updateBlinking(),this._updateDomClassName(),this._primaryCursor.onConfigurationChanged(n);for(let r=0,u=this._secondaryCursors.length;rt.length){const f=this._secondaryCursors.length-t.length;for(let c=0;c{for(let u=0,f=n.ranges.length;u{this._isVisible?this._hide():this._show()},a.BLINK_INTERVAL,(0,b.getWindow)(this._domNode.domNode)):this._startCursorBlinkAnimation.setIfNotSet(()=>{this._blinkingEnabled=!0,this._updateDomClassName()},a.BLINK_INTERVAL))}_updateDomClassName(){this._domNode.setClassName(this._getClassName())}_getClassName(){let n="cursors-layer";switch(this._selectionIsEmpty||(n+=" has-selection"),this._cursorStyle){case S.TextEditorCursorStyle.Line:n+=" cursor-line-style";break;case S.TextEditorCursorStyle.Block:n+=" cursor-block-style";break;case S.TextEditorCursorStyle.Underline:n+=" cursor-underline-style";break;case S.TextEditorCursorStyle.LineThin:n+=" cursor-line-thin-style";break;case S.TextEditorCursorStyle.BlockOutline:n+=" cursor-block-outline-style";break;case S.TextEditorCursorStyle.UnderlineThin:n+=" cursor-underline-thin-style";break;default:n+=" cursor-line-style"}if(this._blinkingEnabled)switch(this._getCursorBlinking()){case 1:n+=" cursor-blink";break;case 2:n+=" cursor-smooth";break;case 3:n+=" cursor-phase";break;case 4:n+=" cursor-expand";break;case 5:n+=" cursor-solid";break;default:n+=" cursor-solid"}else n+=" cursor-solid";return(this._cursorSmoothCaretAnimation==="on"||this._cursorSmoothCaretAnimation==="explicit")&&(n+=" cursor-smooth-caret-animation"),n}_show(){this._primaryCursor.show();for(let n=0,t=this._secondaryCursors.length;n{const t=i.getColor(p.editorCursorForeground);if(t){let r=i.getColor(p.editorCursorBackground);r||(r=t.opposite()),n.addRule(`.monaco-editor .cursors-layer .cursor { background-color: ${t}; border-color: ${t}; color: ${r}; }`),(0,v.isHighContrast)(i.type)&&n.addRule(`.monaco-editor .cursors-layer.has-selection .cursor { border-left: 1px solid ${r}; border-right: 1px solid ${r}; }`)}})}),define(se[861],oe([1,0,115,11,120,10,83,446]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.WhitespaceOverlay=void 0;class p extends L.DynamicViewOverlay{constructor(b){super(),this._context=b,this._options=new _(this._context.configuration),this._selection=[],this._renderResult=null,this._context.addEventHandler(this)}dispose(){this._context.removeEventHandler(this),this._renderResult=null,super.dispose()}onConfigurationChanged(b){const a=new _(this._context.configuration);return this._options.equals(a)?b.hasChanged(143):(this._options=a,!0)}onCursorStateChanged(b){return this._selection=b.selections,this._options.renderWhitespace==="selection"}onDecorationsChanged(b){return!0}onFlushed(b){return!0}onLinesChanged(b){return!0}onLinesDeleted(b){return!0}onLinesInserted(b){return!0}onScrollChanged(b){return b.scrollTopChanged}onZonesChanged(b){return!0}prepareRender(b){if(this._options.renderWhitespace==="none"){this._renderResult=null;return}const a=b.visibleRange.startLineNumber,n=b.visibleRange.endLineNumber-a+1,t=new Array(n);for(let u=0;uu)continue;const o=l.startLineNumber===u?l.startColumn:c.minColumn,g=l.endLineNumber===u?l.endColumn:c.maxColumn;o=R.endOffset&&(M++,R=i&&i[M]),B!==9&&B!==32||l&&!A&&O<=N)continue;if(s&&O>=P&&O<=N&&B===32){const V=O-1>=0?u.charCodeAt(O-1):0,K=O+1=0?u.charCodeAt(O-1):0;if(B===32&&V!==32&&V!==9)continue}if(i&&(!R||R.startOffset>O||R.endOffset<=O))continue;const W=b.visibleRangeForPosition(new E.Position(a,O+1));W&&(r?(x=Math.max(x,W.left),B===9?T+=this._renderArrow(o,m,W.left):T+=``):B===9?T+=`
    ${I?String.fromCharCode(65515):String.fromCharCode(8594)}
    `:T+=`
    ${String.fromCharCode(D)}
    `)}return r?(x=Math.round(x+m),``+T+""):T}_renderArrow(b,a,i){const n=a/7,t=a,r=b/2,u=i,f={x:0,y:n/2},c={x:100/125*t,y:f.y},d={x:c.x-.2*c.x,y:c.y+.2*c.x},s={x:d.x+.1*c.x,y:d.y+.1*c.x},l={x:s.x+.35*c.x,y:s.y-.35*c.x},o={x:l.x,y:-l.y},g={x:s.x,y:-s.y},h={x:d.x,y:-d.y},m={x:c.x,y:-c.y},C={x:f.x,y:-f.y};return``}render(b,a){if(!this._renderResult)return"";const i=a-b;return i<0||i>=this._renderResult.length?"":this._renderResult[i]}}e.WhitespaceOverlay=p;class _{constructor(b){const a=b.options,i=a.get(50),n=a.get(38);n==="off"?(this.renderWhitespace="none",this.renderWithSVG=!1):n==="svg"?(this.renderWhitespace=a.get(98),this.renderWithSVG=!0):(this.renderWhitespace=a.get(98),this.renderWithSVG=!1),this.spaceWidth=i.spaceWidth,this.middotWidth=i.middotWidth,this.wsmiddotWidth=i.wsmiddotWidth,this.canUseHalfwidthRightwardsArrow=i.canUseHalfwidthRightwardsArrow,this.lineHeight=a.get(66),this.stopRenderingLineAfter=a.get(116)}equals(b){return this.renderWhitespace===b.renderWhitespace&&this.renderWithSVG===b.renderWithSVG&&this.spaceWidth===b.spaceWidth&&this.middotWidth===b.middotWidth&&this.wsmiddotWidth===b.wsmiddotWidth&&this.canUseHalfwidthRightwardsArrow===b.canUseHalfwidthRightwardsArrow&&this.lineHeight===b.lineHeight&&this.stopRenderingLineAfter===b.stopRenderingLineAfter}}}),define(se[862],oe([1,0,7,40,266,12,365,848,858,148,808,610,56,279,536,605,856,537,853,213,857,369,849,538,299,539,834,606,859,549,540,541,854,860,542,861,10,5,24,41,154,545,550,8,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M,R,x,O,B,W,V,K,F,q,ie){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.View=void 0;let ae=class extends V.ViewEventHandler{constructor(Q,re,de,he,me,X,U){super(),this._instantiationService=U,this._shouldRecomputeGlyphMarginLanes=!1,this._selections=[new B.Selection(1,1,1,1)],this._renderAnimationFrame=null;const G=new b.ViewController(re,he,me,Q);this._context=new F.ViewContext(re,de,he),this._context.addEventHandler(this),this._viewParts=[],this._textAreaHandler=this._instantiationService.createInstance(_.TextAreaHandler,this._context,G,this._createTextAreaHandlerHelper()),this._viewParts.push(this._textAreaHandler),this._linesContent=(0,k.createFastDomNode)(document.createElement("div")),this._linesContent.setClassName("lines-content monaco-editor-background"),this._linesContent.setPosition("absolute"),this.domNode=(0,k.createFastDomNode)(document.createElement("div")),this.domNode.setClassName(this._getEditorClassName()),this.domNode.setAttribute("role","code"),this._overflowGuardContainer=(0,k.createFastDomNode)(document.createElement("div")),i.PartFingerprints.write(this._overflowGuardContainer,3),this._overflowGuardContainer.setClassName("overflow-guard"),this._scrollbar=new c.EditorScrollbar(this._context,this._linesContent,this.domNode,this._overflowGuardContainer),this._viewParts.push(this._scrollbar),this._viewLines=new o.ViewLines(this._context,this._linesContent),this._viewZones=new M.ViewZones(this._context),this._viewParts.push(this._viewZones);const z=new D.DecorationsOverviewRuler(this._context);this._viewParts.push(z);const H=new A.ScrollDecorationViewPart(this._context);this._viewParts.push(H);const Y=new a.ContentViewOverlays(this._context);this._viewParts.push(Y),Y.addDynamicOverlay(new u.CurrentLineHighlightOverlay(this._context)),Y.addDynamicOverlay(new P.SelectionsOverlay(this._context)),Y.addDynamicOverlay(new s.IndentGuidesOverlay(this._context)),Y.addDynamicOverlay(new f.DecorationsOverlay(this._context)),Y.addDynamicOverlay(new R.WhitespaceOverlay(this._context));const j=new a.MarginViewOverlays(this._context);this._viewParts.push(j),j.addDynamicOverlay(new u.CurrentLineMarginHighlightOverlay(this._context)),j.addDynamicOverlay(new m.MarginViewLineDecorationsOverlay(this._context)),j.addDynamicOverlay(new g.LinesDecorationsOverlay(this._context)),j.addDynamicOverlay(new l.LineNumbersOverlay(this._context)),this._glyphMarginWidgets=new d.GlyphMarginWidgets(this._context),this._viewParts.push(this._glyphMarginWidgets);const Z=new h.Margin(this._context);Z.getDomNode().appendChild(this._viewZones.marginDomNode),Z.getDomNode().appendChild(j.getDomNode()),Z.getDomNode().appendChild(this._glyphMarginWidgets.domNode),this._viewParts.push(Z),this._contentWidgets=new r.ViewContentWidgets(this._context,this.domNode),this._viewParts.push(this._contentWidgets),this._viewCursors=new N.ViewCursors(this._context),this._viewParts.push(this._viewCursors),this._overlayWidgets=new w.ViewOverlayWidgets(this._context,this.domNode),this._viewParts.push(this._overlayWidgets);const ee=new T.Rulers(this._context);this._viewParts.push(ee);const le=new t.BlockDecorations(this._context);this._viewParts.push(le);const ue=new C.Minimap(this._context);if(this._viewParts.push(ue),z){const ce=this._scrollbar.getOverviewRulerLayoutInfo();ce.parent.insertBefore(z.getDomNode(),ce.insertBefore)}this._linesContent.appendChild(Y.getDomNode()),this._linesContent.appendChild(ee.domNode),this._linesContent.appendChild(this._viewZones.domNode),this._linesContent.appendChild(this._viewLines.getDomNode()),this._linesContent.appendChild(this._contentWidgets.domNode),this._linesContent.appendChild(this._viewCursors.getDomNode()),this._overflowGuardContainer.appendChild(Z.getDomNode()),this._overflowGuardContainer.appendChild(this._scrollbar.getDomNode()),this._overflowGuardContainer.appendChild(H.getDomNode()),this._overflowGuardContainer.appendChild(this._textAreaHandler.textArea),this._overflowGuardContainer.appendChild(this._textAreaHandler.textAreaCover),this._overflowGuardContainer.appendChild(this._overlayWidgets.getDomNode()),this._overflowGuardContainer.appendChild(ue.getDomNode()),this._overflowGuardContainer.appendChild(le.domNode),this.domNode.appendChild(this._overflowGuardContainer),X?(X.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode.domNode),X.appendChild(this._overlayWidgets.overflowingOverlayWidgetsDomNode.domNode)):(this.domNode.appendChild(this._contentWidgets.overflowingContentWidgetsDomNode),this.domNode.appendChild(this._overlayWidgets.overflowingOverlayWidgetsDomNode)),this._applyLayout(),this._pointerHandler=this._register(new p.PointerHandler(this._context,G,this._createPointerHandlerHelper()))}_computeGlyphMarginLanes(){const Q=this._context.viewModel.model,re=this._context.viewModel.glyphLanes;let de=[],he=0;de=de.concat(Q.getAllMarginDecorations().map(me=>{var X,U,G;const z=(U=(X=me.options.glyphMargin)===null||X===void 0?void 0:X.position)!==null&&U!==void 0?U:W.GlyphMarginLane.Center;return he=Math.max(he,me.range.endLineNumber),{range:me.range,lane:z,persist:(G=me.options.glyphMargin)===null||G===void 0?void 0:G.persistLane}})),de=de.concat(this._glyphMarginWidgets.getWidgets().map(me=>{const X=Q.validateRange(me.preference.range);return he=Math.max(he,X.endLineNumber),{range:X,lane:me.preference.lane}})),de.sort((me,X)=>O.Range.compareRangesUsingStarts(me.range,X.range)),re.reset(he);for(const me of de)re.push(me.lane,me.range,me.persist);return re}_createPointerHandlerHelper(){return{viewDomNode:this.domNode.domNode,linesContentDomNode:this._linesContent.domNode,viewLinesDomNode:this._viewLines.getDomNode().domNode,focusTextArea:()=>{this.focus()},dispatchTextAreaEvent:Q=>{this._textAreaHandler.textArea.domNode.dispatchEvent(Q)},getLastRenderData:()=>{const Q=this._viewCursors.getLastRenderData()||[],re=this._textAreaHandler.getLastRenderData();return new S.PointerHandlerLastRenderData(Q,re)},renderNow:()=>{this.render(!0,!1)},shouldSuppressMouseDownOnViewZone:Q=>this._viewZones.shouldSuppressMouseDownOnViewZone(Q),shouldSuppressMouseDownOnWidget:Q=>this._contentWidgets.shouldSuppressMouseDownOnWidget(Q),getPositionFromDOMInfo:(Q,re)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getPositionFromDOMInfo(Q,re)),visibleRangeForPosition:(Q,re)=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(new x.Position(Q,re))),getLineWidth:Q=>(this._flushAccumulatedAndRenderNow(),this._viewLines.getLineWidth(Q))}}_createTextAreaHandlerHelper(){return{visibleRangeForPosition:Q=>(this._flushAccumulatedAndRenderNow(),this._viewLines.visibleRangeForPosition(Q))}}_applyLayout(){const re=this._context.configuration.options.get(143);this.domNode.setWidth(re.width),this.domNode.setHeight(re.height),this._overflowGuardContainer.setWidth(re.width),this._overflowGuardContainer.setHeight(re.height),this._linesContent.setWidth(1e6),this._linesContent.setHeight(1e6)}_getEditorClassName(){const Q=this._textAreaHandler.isFocused()?" focused":"";return this._context.configuration.options.get(140)+" "+(0,ie.getThemeTypeSelector)(this._context.theme.type)+Q}handleEvents(Q){super.handleEvents(Q),this._scheduleRender()}onConfigurationChanged(Q){return this.domNode.setClassName(this._getEditorClassName()),this._applyLayout(),!1}onCursorStateChanged(Q){return this._selections=Q.selections,!1}onDecorationsChanged(Q){return Q.affectsGlyphMargin&&(this._shouldRecomputeGlyphMarginLanes=!0),!1}onFocusChanged(Q){return this.domNode.setClassName(this._getEditorClassName()),!1}onThemeChanged(Q){return this._context.theme.update(Q.theme),this.domNode.setClassName(this._getEditorClassName()),!1}dispose(){this._renderAnimationFrame!==null&&(this._renderAnimationFrame.dispose(),this._renderAnimationFrame=null),this._contentWidgets.overflowingContentWidgetsDomNode.domNode.remove(),this._context.removeEventHandler(this),this._viewLines.dispose();for(const Q of this._viewParts)Q.dispose();super.dispose()}_scheduleRender(){if(this._store.isDisposed)throw new E.BugIndicatingError;if(this._renderAnimationFrame===null){const Q=this._createCoordinatedRendering();this._renderAnimationFrame=$.INSTANCE.scheduleCoordinatedRendering({window:L.getWindow(this.domNode.domNode),prepareRenderText:()=>{if(this._store.isDisposed)throw new E.BugIndicatingError;try{return Q.prepareRenderText()}finally{this._renderAnimationFrame=null}},renderText:()=>{if(this._store.isDisposed)throw new E.BugIndicatingError;return Q.renderText()},prepareRender:(re,de)=>{if(this._store.isDisposed)throw new E.BugIndicatingError;return Q.prepareRender(re,de)},render:(re,de)=>{if(this._store.isDisposed)throw new E.BugIndicatingError;return Q.render(re,de)}})}}_flushAccumulatedAndRenderNow(){const Q=this._createCoordinatedRendering();ne(()=>Q.prepareRenderText());const re=ne(()=>Q.renderText());if(re){const[de,he]=re;ne(()=>Q.prepareRender(de,he)),ne(()=>Q.render(de,he))}}_getViewPartsToRender(){const Q=[];let re=0;for(const de of this._viewParts)de.shouldRender()&&(Q[re++]=de);return Q}_createCoordinatedRendering(){return{prepareRenderText:()=>{if(this._shouldRecomputeGlyphMarginLanes){this._shouldRecomputeGlyphMarginLanes=!1;const Q=this._computeGlyphMarginLanes();this._context.configuration.setGlyphMarginDecorationLaneCount(Q.requiredLanes)}y.inputLatency.onRenderStart()},renderText:()=>{if(!this.domNode.domNode.isConnected)return null;let Q=this._getViewPartsToRender();if(!this._viewLines.shouldRender()&&Q.length===0)return null;const re=this._context.viewLayout.getLinesViewportData();this._context.viewModel.setViewport(re.startLineNumber,re.endLineNumber,re.centeredLineNumber);const de=new K.ViewportData(this._selections,re,this._context.viewLayout.getWhitespaceViewportData(),this._context.viewModel);return this._contentWidgets.shouldRender()&&this._contentWidgets.onBeforeRender(de),this._viewLines.shouldRender()&&(this._viewLines.renderText(de),this._viewLines.onDidRender(),Q=this._getViewPartsToRender()),[Q,new v.RenderingContext(this._context.viewLayout,de,this._viewLines)]},prepareRender:(Q,re)=>{for(const de of Q)de.prepareRender(re)},render:(Q,re)=>{for(const de of Q)de.render(re),de.onDidRender()}}}delegateVerticalScrollbarPointerDown(Q){this._scrollbar.delegateVerticalScrollbarPointerDown(Q)}delegateScrollFromMouseWheelEvent(Q){this._scrollbar.delegateScrollFromMouseWheelEvent(Q)}restoreState(Q){this._context.viewModel.viewLayout.setScrollPosition({scrollTop:Q.scrollTop,scrollLeft:Q.scrollLeft},1),this._context.viewModel.visibleLinesStabilized()}getOffsetForColumn(Q,re){const de=this._context.viewModel.model.validatePosition({lineNumber:Q,column:re}),he=this._context.viewModel.coordinatesConverter.convertModelPositionToViewPosition(de);this._flushAccumulatedAndRenderNow();const me=this._viewLines.visibleRangeForPosition(new x.Position(he.lineNumber,he.column));return me?me.left:-1}getTargetAtClientPoint(Q,re){const de=this._pointerHandler.getTargetAtClientPoint(Q,re);return de?n.ViewUserInputEvents.convertViewToModelMouseTarget(de,this._context.viewModel.coordinatesConverter):null}createOverviewRuler(Q){return new I.OverviewRuler(this._context,Q)}change(Q){this._viewZones.changeViewZones(Q),this._scheduleRender()}render(Q,re){if(re){this._viewLines.forceShouldRender();for(const de of this._viewParts)de.forceShouldRender()}Q?this._flushAccumulatedAndRenderNow():this._scheduleRender()}writeScreenReaderContent(Q){this._textAreaHandler.writeScreenReaderContent(Q)}focus(){this._textAreaHandler.focusTextArea()}isFocused(){return this._textAreaHandler.isFocused()}setAriaOptions(Q){this._textAreaHandler.setAriaOptions(Q)}addContentWidget(Q){this._contentWidgets.addWidget(Q.widget),this.layoutContentWidget(Q),this._scheduleRender()}layoutContentWidget(Q){var re,de,he,me,X,U,G,z;this._contentWidgets.setWidgetPosition(Q.widget,(de=(re=Q.position)===null||re===void 0?void 0:re.position)!==null&&de!==void 0?de:null,(me=(he=Q.position)===null||he===void 0?void 0:he.secondaryPosition)!==null&&me!==void 0?me:null,(U=(X=Q.position)===null||X===void 0?void 0:X.preference)!==null&&U!==void 0?U:null,(z=(G=Q.position)===null||G===void 0?void 0:G.positionAffinity)!==null&&z!==void 0?z:null),this._scheduleRender()}removeContentWidget(Q){this._contentWidgets.removeWidget(Q.widget),this._scheduleRender()}addOverlayWidget(Q){this._overlayWidgets.addWidget(Q.widget),this.layoutOverlayWidget(Q),this._scheduleRender()}layoutOverlayWidget(Q){const re=Q.position?Q.position.preference:null;this._overlayWidgets.setWidgetPosition(Q.widget,re)&&this._scheduleRender()}removeOverlayWidget(Q){this._overlayWidgets.removeWidget(Q.widget),this._scheduleRender()}addGlyphMarginWidget(Q){this._glyphMarginWidgets.addWidget(Q.widget),this._shouldRecomputeGlyphMarginLanes=!0,this._scheduleRender()}layoutGlyphMarginWidget(Q){const re=Q.position;this._glyphMarginWidgets.setWidgetPosition(Q.widget,re)&&(this._shouldRecomputeGlyphMarginLanes=!0,this._scheduleRender())}removeGlyphMarginWidget(Q){this._glyphMarginWidgets.removeWidget(Q.widget),this._shouldRecomputeGlyphMarginLanes=!0,this._scheduleRender()}};e.View=ae,e.View=ae=ke([ge(6,q.IInstantiationService)],ae);function ne(J){try{return J()}catch(Q){return(0,E.onUnexpectedError)(Q),null}}class ${constructor(){this._coordinatedRenderings=[],this._animationFrameRunners=new Map}scheduleCoordinatedRendering(Q){return this._coordinatedRenderings.push(Q),this._scheduleRender(Q.window),{dispose:()=>{const re=this._coordinatedRenderings.indexOf(Q);if(re!==-1&&(this._coordinatedRenderings.splice(re,1),this._coordinatedRenderings.length===0)){for(const[de,he]of this._animationFrameRunners)he.dispose();this._animationFrameRunners.clear()}}}}_scheduleRender(Q){if(!this._animationFrameRunners.has(Q)){const re=()=>{this._animationFrameRunners.delete(Q),this._onRenderScheduled()};this._animationFrameRunners.set(Q,L.runAtThisOrScheduleAtNextAnimationFrame(Q,re,100))}}_onRenderScheduled(){const Q=this._coordinatedRenderings.slice(0);this._coordinatedRenderings=[];for(const de of Q)ne(()=>de.prepareRenderText());const re=[];for(let de=0,he=Q.length;deme.renderText())}for(let de=0,he=Q.length;deme.prepareRender(U,G))}for(let de=0,he=Q.length;deme.render(U,G))}}}$.INSTANCE=new $}),define(se[863],oe([1,0,6,2,5,83,23]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorizedBracketPairsDecorationProvider=void 0;class p extends k.Disposable{constructor(b){super(),this.textModel=b,this.colorProvider=new _,this.onDidChangeEmitter=new L.Emitter,this.onDidChange=this.onDidChangeEmitter.event,this.colorizationOptions=b.getOptions().bracketPairColorizationOptions,this._register(b.bracketPairs.onDidChange(a=>{this.onDidChangeEmitter.fire()}))}handleDidChangeOptions(b){this.colorizationOptions=this.textModel.getOptions().bracketPairColorizationOptions}getDecorationsInRange(b,a,i,n){return n?[]:a===void 0?[]:this.colorizationOptions.enabled?this.textModel.bracketPairs.getBracketsInRange(b,!0).map(r=>({id:`bracket${r.range.toString()}-${r.nestingLevel}`,options:{description:"BracketPairColorization",inlineClassName:this.colorProvider.getInlineClassName(r,this.colorizationOptions.independentColorPoolPerBracketType)},ownerId:0,range:r.range})).toArray():[]}getAllDecorations(b,a){return b===void 0?[]:this.colorizationOptions.enabled?this.getDecorationsInRange(new y.Range(1,1,this.textModel.getLineCount(),1),b,a):[]}}e.ColorizedBracketPairsDecorationProvider=p;class _{constructor(){this.unexpectedClosingBracketClassName="unexpected-closing-bracket"}getInlineClassName(b,a){return b.isInvalid?this.unexpectedClosingBracketClassName:this.getInlineClassNameOfLevel(a?b.nestingLevelOfEqualBracketType:b.nestingLevel)}getInlineClassNameOfLevel(b){return`bracket-highlighting-${b%30}`}}(0,S.registerThemingParticipant)((v,b)=>{const a=[E.editorBracketHighlightingForeground1,E.editorBracketHighlightingForeground2,E.editorBracketHighlightingForeground3,E.editorBracketHighlightingForeground4,E.editorBracketHighlightingForeground5,E.editorBracketHighlightingForeground6],i=new _;b.addRule(`.monaco-editor .${i.unexpectedClosingBracketClassName} { color: ${v.getColor(E.editorBracketHighlightingUnexpectedBracketForeground)}; }`);const n=a.map(t=>v.getColor(t)).filter(t=>!!t).filter(t=>!t.isTransparent());for(let t=0;t<30;t++){const r=n[t%n.length];b.addRule(`.monaco-editor .${i.getInlineClassNameOfLevel(t)} { color: ${r}; }`)}})}),define(se[864],oe([1,0,97,2,41,23,83,51,5,47,6,29,53,268]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkerDecorationsService=void 0;let t=class extends k.Disposable{constructor(f,c){super(),this._markerService=c,this._onDidChangeMarker=this._register(new b.Emitter),this._markerDecorations=new i.ResourceMap,f.getModels().forEach(d=>this._onModelAdded(d)),this._register(f.onModelAdded(this._onModelAdded,this)),this._register(f.onModelRemoved(this._onModelRemoved,this)),this._register(this._markerService.onMarkerChanged(this._handleMarkerChange,this))}dispose(){super.dispose(),this._markerDecorations.forEach(f=>f.dispose()),this._markerDecorations.clear()}getMarker(f,c){const d=this._markerDecorations.get(f);return d&&d.getMarker(c)||null}_handleMarkerChange(f){f.forEach(c=>{const d=this._markerDecorations.get(c);d&&this._updateDecorations(d)})}_onModelAdded(f){const c=new r(f);this._markerDecorations.set(f.uri,c),this._updateDecorations(c)}_onModelRemoved(f){var c;const d=this._markerDecorations.get(f.uri);d&&(d.dispose(),this._markerDecorations.delete(f.uri)),(f.uri.scheme===v.Schemas.inMemory||f.uri.scheme===v.Schemas.internal||f.uri.scheme===v.Schemas.vscode)&&((c=this._markerService)===null||c===void 0||c.read({resource:f.uri}).map(s=>s.owner).forEach(s=>this._markerService.remove(s,[f.uri])))}_updateDecorations(f){const c=this._markerService.read({resource:f.model.uri,take:500});f.update(c)&&this._onDidChangeMarker.fire(f.model)}};e.MarkerDecorationsService=t,e.MarkerDecorationsService=t=ke([ge(0,p.IModelService),ge(1,L.IMarkerService)],t);class r extends k.Disposable{constructor(f){super(),this.model=f,this._map=new i.BidirectionalMap,this._register((0,k.toDisposable)(()=>{this.model.deltaDecorations([...this._map.values()],[]),this._map.clear()}))}update(f){const{added:c,removed:d}=(0,n.diffSets)(new Set(this._map.keys()),new Set(f));if(c.length===0&&d.length===0)return!1;const s=d.map(g=>this._map.get(g)),l=c.map(g=>({range:this._createDecorationRange(this.model,g),options:this._createDecorationOption(g)})),o=this.model.deltaDecorations(s,l);for(const g of d)this._map.delete(g);for(let g=0;g=s)return d;const l=f.getWordAtPosition(d.getStartPosition());l&&(d=new _.Range(d.startLineNumber,l.startColumn,d.endLineNumber,l.endColumn))}else if(c.endColumn===Number.MAX_VALUE&&c.startColumn===1&&d.startLineNumber===d.endLineNumber){const s=f.getLineFirstNonWhitespaceColumn(c.startLineNumber);s=0:!1}}}),define(se[256],oe([1,0,132,23,64,534,43]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.toMultilineTokens2=e.SemanticTokensProviderStyling=void 0;let p=class{constructor(i,n,t,r){this._legend=i,this._themeService=n,this._languageService=t,this._logService=r,this._hasWarnedOverlappingTokens=!1,this._hasWarnedInvalidLengthTokens=!1,this._hasWarnedInvalidEditStart=!1,this._hashTable=new b}getMetadata(i,n,t){const r=this._languageService.languageIdCodec.encodeLanguageId(t),u=this._hashTable.get(i,n,r);let f;if(u)f=u.metadata,this._logService.getLevel()===y.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling [CACHED] ${i} / ${n}: foreground ${L.TokenMetadata.getForeground(f)}, fontStyle ${L.TokenMetadata.getFontStyle(f).toString(2)}`);else{let c=this._legend.tokenTypes[i];const d=[];if(c){let s=n;for(let o=0;s>0&&o>1;s>0&&this._logService.getLevel()===y.LogLevel.Trace&&(this._logService.trace(`SemanticTokensProviderStyling: unknown token modifier index: ${n.toString(2)} for legend: ${JSON.stringify(this._legend.tokenModifiers)}`),d.push("not-in-legend"));const l=this._themeService.getColorTheme().getTokenStyleMetadata(c,d,t);if(typeof l>"u")f=2147483647;else{if(f=0,typeof l.italic<"u"){const o=(l.italic?1:0)<<11;f|=o|1}if(typeof l.bold<"u"){const o=(l.bold?2:0)<<11;f|=o|2}if(typeof l.underline<"u"){const o=(l.underline?4:0)<<11;f|=o|4}if(typeof l.strikethrough<"u"){const o=(l.strikethrough?8:0)<<11;f|=o|8}if(l.foreground){const o=l.foreground<<15;f|=o|16}f===0&&(f=2147483647)}}else this._logService.getLevel()===y.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling: unknown token type index: ${i} for legend: ${JSON.stringify(this._legend.tokenTypes)}`),f=2147483647,c="not-in-legend";this._hashTable.add(i,n,r,f),this._logService.getLevel()===y.LogLevel.Trace&&this._logService.trace(`SemanticTokensProviderStyling ${i} (${c}) / ${n} (${d.join(" ")}): foreground ${L.TokenMetadata.getForeground(f)}, fontStyle ${L.TokenMetadata.getFontStyle(f).toString(2)}`)}return f}warnOverlappingSemanticTokens(i,n){this._hasWarnedOverlappingTokens||(this._hasWarnedOverlappingTokens=!0,this._logService.warn(`Overlapping semantic tokens detected at lineNumber ${i}, column ${n}`))}warnInvalidLengthSemanticTokens(i,n){this._hasWarnedInvalidLengthTokens||(this._hasWarnedInvalidLengthTokens=!0,this._logService.warn(`Semantic token with invalid length detected at lineNumber ${i}, column ${n}`))}warnInvalidEditStart(i,n,t,r,u){this._hasWarnedInvalidEditStart||(this._hasWarnedInvalidEditStart=!0,this._logService.warn(`Invalid semantic tokens edit detected (previousResultId: ${i}, resultId: ${n}) at edit #${t}: The provided start offset ${r} is outside the previous data (length ${u}).`))}};e.SemanticTokensProviderStyling=p,e.SemanticTokensProviderStyling=p=ke([ge(1,k.IThemeService),ge(2,S.ILanguageService),ge(3,y.ILogService)],p);function _(a,i,n){const t=a.data,r=a.data.length/5|0,u=Math.max(Math.ceil(r/1024),400),f=[];let c=0,d=1,s=0;for(;cl&&t[5*I]===0;)I--;if(I-1===l){let T=o;for(;T+1N)i.warnOverlappingSemanticTokens(P,N+1);else{const B=i.getMetadata(x,O,n);B!==2147483647&&(m===0&&(m=P),g[h]=P-m,g[h+1]=N,g[h+2]=R,g[h+3]=B,h+=4,C=P,w=R)}d=P,s=N,c++}h!==g.length&&(g=g.subarray(0,h));const D=E.SparseMultilineTokens.create(m,g);f.push(D)}return f}e.toMultilineTokens2=_;class v{constructor(i,n,t,r){this.tokenTypeIndex=i,this.tokenModifierSet=n,this.languageId=t,this.metadata=r,this.next=null}}class b{constructor(){this._elementsCount=0,this._currentLengthIndex=0,this._currentLength=b._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1=this._growCount){const u=this._elements;this._currentLengthIndex++,this._currentLength=b._SIZES[this._currentLengthIndex],this._growCount=Math.round(this._currentLengthIndex+1{this._caches=new WeakMap}))}getStyling(a){return this._caches.has(a)||this._caches.set(a,new S.SemanticTokensProviderStyling(a.getLegend(),this._themeService,this._languageService,this._logService)),this._caches.get(a)}};e.SemanticTokensStylingService=v,e.SemanticTokensStylingService=v=ke([ge(0,y.IThemeService),ge(1,E.ILogService),ge(2,k.ILanguageService)],v),(0,_.registerSingleton)(p.ISemanticTokensStylingService,v,1)}),define(se[370],oe([1,0,108,2,153,41,83,23,48]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractEditorNavigationQuickAccessProvider=void 0;class v{constructor(a){this.options=a,this.rangeHighlightDecorationId=void 0}provide(a,i){var n;const t=new k.DisposableStore;a.canAcceptInBackground=!!(!((n=this.options)===null||n===void 0)&&n.canAcceptInBackground),a.matchOnLabel=a.matchOnDescription=a.matchOnDetail=a.sortByLabel=!1;const r=t.add(new k.MutableDisposable);return r.value=this.doProvide(a,i),t.add(this.onDidActiveTextEditorControlChange(()=>{r.value=void 0,r.value=this.doProvide(a,i)})),t}doProvide(a,i){var n;const t=new k.DisposableStore,r=this.activeTextEditorControl;if(r&&this.canProvideWithTextEditor(r)){const u={editor:r},f=(0,y.getCodeEditor)(r);if(f){let c=(n=r.saveViewState())!==null&&n!==void 0?n:void 0;t.add(f.onDidChangeCursorPosition(()=>{var d;c=(d=r.saveViewState())!==null&&d!==void 0?d:void 0})),u.restoreViewState=()=>{c&&r===this.activeTextEditorControl&&r.restoreViewState(c)},t.add((0,L.createSingleCallFunction)(i.onCancellationRequested)(()=>{var d;return(d=u.restoreViewState)===null||d===void 0?void 0:d.call(u)}))}t.add((0,k.toDisposable)(()=>this.clearDecorations(r))),t.add(this.provideWithTextEditor(u,a,i))}else t.add(this.provideWithoutTextEditor(a,i));return t}canProvideWithTextEditor(a){return!0}gotoLocation({editor:a},i){a.setSelection(i.range),a.revealRangeInCenter(i.range,0),i.preserveFocus||a.focus();const n=a.getModel();n&&"getLineContent"in n&&(0,_.status)(`${n.getLineContent(i.range.startLineNumber)}`)}getModel(a){var i;return(0,y.isDiffEditor)(a)?(i=a.getModel())===null||i===void 0?void 0:i.modified:a.getModel()}addDecorations(a,i){a.changeDecorations(n=>{const t=[];this.rangeHighlightDecorationId&&(t.push(this.rangeHighlightDecorationId.overviewRulerDecorationId),t.push(this.rangeHighlightDecorationId.rangeHighlightId),this.rangeHighlightDecorationId=void 0);const r=[{range:i,options:{description:"quick-access-range-highlight",className:"rangeHighlight",isWholeLine:!0}},{range:i,options:{description:"quick-access-range-highlight-overview",overviewRuler:{color:(0,p.themeColorFromId)(S.overviewRulerRangeHighlight),position:E.OverviewRulerLane.Full}}}],[u,f]=n.deltaDecorations(t,r);this.rangeHighlightDecorationId={rangeHighlightId:u,overviewRulerDecorationId:f}})}clearDecorations(a){const i=this.rangeHighlightDecorationId;i&&(a.changeDecorations(n=>{n.deltaDecorations([i.overviewRulerDecorationId,i.rangeHighlightId],[])}),this.rangeHighlightDecorationId=void 0)}}e.AbstractEditorNavigationQuickAccessProvider=v}),define(se[866],oe([1,0,2,153,370,707]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractGotoLineQuickAccessProvider=void 0;class S extends y.AbstractEditorNavigationQuickAccessProvider{constructor(){super({canAcceptInBackground:!0})}provideWithoutTextEditor(_){const v=(0,E.localize)(0,null);return _.items=[{label:v}],_.ariaLabel=v,L.Disposable.None}provideWithTextEditor(_,v,b){const a=_.editor,i=new L.DisposableStore;i.add(v.onDidAccept(r=>{const[u]=v.selectedItems;if(u){if(!this.isValidLineNumber(a,u.lineNumber))return;this.gotoLocation(_,{range:this.toRange(u.lineNumber,u.column),keyMods:v.keyMods,preserveFocus:r.inBackground}),r.inBackground||v.hide()}}));const n=()=>{const r=this.parsePosition(a,v.value.trim().substr(S.PREFIX.length)),u=this.getPickLabel(a,r.lineNumber,r.column);if(v.items=[{lineNumber:r.lineNumber,column:r.column,label:u}],v.ariaLabel=u,!this.isValidLineNumber(a,r.lineNumber)){this.clearDecorations(a);return}const f=this.toRange(r.lineNumber,r.column);a.revealRangeInCenter(f,0),this.addDecorations(a,f)};n(),i.add(v.onDidChangeValue(()=>n()));const t=(0,k.getCodeEditor)(a);return t&&t.getOptions().get(67).renderType===2&&(t.updateOptions({lineNumbers:"on"}),i.add((0,L.toDisposable)(()=>t.updateOptions({lineNumbers:"relative"})))),i}toRange(_=1,v=1){return{startLineNumber:_,startColumn:v,endLineNumber:_,endColumn:v}}parsePosition(_,v){const b=v.split(/,|:|#/).map(i=>parseInt(i,10)).filter(i=>!isNaN(i)),a=this.lineCount(_)+1;return{lineNumber:b[0]>0?b[0]:a+b[0],column:b[1]}}getPickLabel(_,v,b){if(this.isValidLineNumber(_,v))return this.isValidColumn(_,v,b)?(0,E.localize)(1,null,v,b):(0,E.localize)(2,null,v);const a=_.getPosition()||{lineNumber:1,column:1},i=this.lineCount(_);return i>1?(0,E.localize)(3,null,a.lineNumber,a.column,i):(0,E.localize)(4,null,a.lineNumber,a.column)}isValidLineNumber(_,v){return!v||typeof v!="number"?!1:v>0&&v<=this.lineCount(_)}isValidColumn(_,v,b){if(!b||typeof b!="number")return!1;const a=this.getModel(_);if(!a)return!1;const i={lineNumber:v,column:b};return a.validatePosition(i).equals(i)}lineCount(_){var v,b;return(b=(v=this.getModel(_))===null||v===void 0?void 0:v.getLineCount())!==null&&b!==void 0?b:0}}e.AbstractGotoLineQuickAccessProvider=S,S.PREFIX=":"}),define(se[867],oe([1,0,14,19,26,28,586,2,11,5,31,165,370,708,18,60]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";var u;Object.defineProperty(e,"__esModule",{value:!0}),e.AbstractGotoSymbolQuickAccessProvider=void 0;let f=u=class extends i.AbstractEditorNavigationQuickAccessProvider{constructor(l,o,g=Object.create(null)){super(g),this._languageFeaturesService=l,this._outlineModelService=o,this.options=g,this.options.canAcceptInBackground=!0}provideWithoutTextEditor(l){return this.provideLabelPick(l,(0,n.localize)(0,null)),p.Disposable.None}provideWithTextEditor(l,o,g){const h=l.editor,m=this.getModel(h);return m?this._languageFeaturesService.documentSymbolProvider.has(m)?this.doProvideWithEditorSymbols(l,m,o,g):this.doProvideWithoutEditorSymbols(l,m,o,g):p.Disposable.None}doProvideWithoutEditorSymbols(l,o,g,h){const m=new p.DisposableStore;return this.provideLabelPick(g,(0,n.localize)(1,null)),(async()=>!await this.waitForLanguageSymbolRegistry(o,m)||h.isCancellationRequested||m.add(this.doProvideWithEditorSymbols(l,o,g,h)))(),m}provideLabelPick(l,o){l.items=[{label:o,index:0,kind:14}],l.ariaLabel=o}async waitForLanguageSymbolRegistry(l,o){if(this._languageFeaturesService.documentSymbolProvider.has(l))return!0;const g=new L.DeferredPromise,h=o.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(()=>{this._languageFeaturesService.documentSymbolProvider.has(l)&&(h.dispose(),g.complete(!0))}));return o.add((0,p.toDisposable)(()=>g.complete(!1))),g.p}doProvideWithEditorSymbols(l,o,g,h){var m;const C=l.editor,w=new p.DisposableStore;w.add(g.onDidAccept(A=>{const[P]=g.selectedItems;P&&P.range&&(this.gotoLocation(l,{range:P.range.selection,keyMods:g.keyMods,preserveFocus:A.inBackground}),A.inBackground||g.hide())})),w.add(g.onDidTriggerItemButton(({item:A})=>{A&&A.range&&(this.gotoLocation(l,{range:A.range.selection,keyMods:g.keyMods,forceSideBySide:!0}),g.hide())}));const D=this.getDocumentSymbols(o,h);let I;const T=async A=>{I?.dispose(!0),g.busy=!1,I=new k.CancellationTokenSource(h),g.busy=!0;try{const P=(0,S.prepareQuery)(g.value.substr(u.PREFIX.length).trim()),N=await this.doGetSymbolPicks(D,P,void 0,I.token);if(h.isCancellationRequested)return;if(N.length>0){if(g.items=N,A&&P.original.length===0){const M=(0,r.findLast)(N,R=>!!(R.type!=="separator"&&R.range&&v.Range.containsPosition(R.range.decoration,A)));M&&(g.activeItems=[M])}}else P.original.length>0?this.provideLabelPick(g,(0,n.localize)(2,null)):this.provideLabelPick(g,(0,n.localize)(3,null))}finally{h.isCancellationRequested||(g.busy=!1)}};return w.add(g.onDidChangeValue(()=>T(void 0))),T((m=C.getSelection())===null||m===void 0?void 0:m.getPosition()),w.add(g.onDidChangeActive(()=>{const[A]=g.activeItems;A&&A.range&&(C.revealRangeInCenter(A.range.selection,0),this.addDecorations(C,A.range.decoration))})),w}async doGetSymbolPicks(l,o,g,h){var m,C;const w=await l;if(h.isCancellationRequested)return[];const D=o.original.indexOf(u.SCOPE_PREFIX)===0,I=D?1:0;let T,A;o.values&&o.values.length>1?(T=(0,S.pieceToQuery)(o.values[0]),A=(0,S.pieceToQuery)(o.values.slice(1))):T=o;let P;const N=(C=(m=this.options)===null||m===void 0?void 0:m.openSideBySideDirection)===null||C===void 0?void 0:C.call(m);N&&(P=[{iconClass:N==="right"?E.ThemeIcon.asClassName(y.Codicon.splitHorizontal):E.ThemeIcon.asClassName(y.Codicon.splitVertical),tooltip:N==="right"?(0,n.localize)(4,null):(0,n.localize)(5,null)}]);const M=[];for(let O=0;OI){let J=!1;if(T!==o&&([q,ie]=(0,S.scoreFuzzy2)(V,{...o,values:void 0},I,K),typeof q=="number"&&(J=!0)),typeof q!="number"&&([q,ie]=(0,S.scoreFuzzy2)(V,T,I,K),typeof q!="number"))continue;if(!J&&A){if(F&&A.original.length>0&&([ae,ne]=(0,S.scoreFuzzy2)(F,A)),typeof ae!="number")continue;typeof q=="number"&&(q+=ae)}}const $=B.tags&&B.tags.indexOf(1)>=0;M.push({index:O,kind:B.kind,score:q,label:V,ariaLabel:(0,b.getAriaLabelForSymbol)(B.name,B.kind),description:F,highlights:$?void 0:{label:ie,description:ne},range:{selection:v.Range.collapseToStart(B.selectionRange),decoration:B.range},strikethrough:$,buttons:P})}const R=M.sort((O,B)=>D?this.compareByKindAndScore(O,B):this.compareByScore(O,B));let x=[];if(D){let V=function(){B&&typeof O=="number"&&W>0&&(B.label=(0,_.format)(d[O]||c,W))},O,B,W=0;for(const K of R)O!==K.kind?(V(),O=K.kind,W=1,B={type:"separator"},x.push(B)):W++,x.push(K);V()}else R.length>0&&(x=[{label:(0,n.localize)(6,null,M.length),type:"separator"},...R]);return x}compareByScore(l,o){if(typeof l.score!="number"&&typeof o.score=="number")return 1;if(typeof l.score=="number"&&typeof o.score!="number")return-1;if(typeof l.score=="number"&&typeof o.score=="number"){if(l.score>o.score)return-1;if(l.scoreo.index?1:0}compareByKindAndScore(l,o){const g=d[l.kind]||c,h=d[o.kind]||c,m=g.localeCompare(h);return m===0?this.compareByScore(l,o):m}async getDocumentSymbols(l,o){const g=await this._outlineModelService.getOrCreate(l,o);return o.isCancellationRequested?[]:g.asListOfDocumentSymbols()}};e.AbstractGotoSymbolQuickAccessProvider=f,f.PREFIX="@",f.SCOPE_PREFIX=":",f.PREFIX_BY_CATEGORY=`${u.PREFIX}${u.SCOPE_PREFIX}`,e.AbstractGotoSymbolQuickAccessProvider=f=u=ke([ge(0,t.ILanguageFeaturesService),ge(1,a.IOutlineModelService)],f);const c=(0,n.localize)(7,null),d={[5]:(0,n.localize)(8,null),[11]:(0,n.localize)(9,null),[8]:(0,n.localize)(10,null),[12]:(0,n.localize)(11,null),[4]:(0,n.localize)(12,null),[22]:(0,n.localize)(13,null),[23]:(0,n.localize)(14,null),[24]:(0,n.localize)(15,null),[10]:(0,n.localize)(16,null),[2]:(0,n.localize)(17,null),[3]:(0,n.localize)(18,null),[25]:(0,n.localize)(19,null),[1]:(0,n.localize)(20,null),[6]:(0,n.localize)(21,null),[9]:(0,n.localize)(22,null),[21]:(0,n.localize)(23,null),[14]:(0,n.localize)(24,null),[0]:(0,n.localize)(25,null),[17]:(0,n.localize)(26,null),[15]:(0,n.localize)(27,null),[16]:(0,n.localize)(28,null),[18]:(0,n.localize)(29,null),[19]:(0,n.localize)(30,null),[7]:(0,n.localize)(31,null),[13]:(0,n.localize)(32,null)}}),define(se[868],oe([1,0,2,10,711,15,34,29,23,475]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RenameInputField=e.CONTEXT_RENAME_INPUT_VISIBLE=void 0,e.CONTEXT_RENAME_INPUT_VISIBLE=new E.RawContextKey("renameInputVisible",!1,(0,y.localize)(0,null));let v=class{constructor(a,i,n,t,r){this._editor=a,this._acceptKeybindings=i,this._themeService=n,this._keybindingService=t,this._disposables=new L.DisposableStore,this.allowEditorOverflow=!0,this._visibleContextKey=e.CONTEXT_RENAME_INPUT_VISIBLE.bindTo(r),this._editor.addContentWidget(this),this._disposables.add(this._editor.onDidChangeConfiguration(u=>{u.hasChanged(50)&&this._updateFont()})),this._disposables.add(n.onDidColorThemeChange(this._updateStyles,this))}dispose(){this._disposables.dispose(),this._editor.removeContentWidget(this)}getId(){return"__renameInputWidget"}getDomNode(){return this._domNode||(this._domNode=document.createElement("div"),this._domNode.className="monaco-editor rename-box",this._input=document.createElement("input"),this._input.className="rename-input",this._input.type="text",this._input.setAttribute("aria-label",(0,y.localize)(1,null)),this._domNode.appendChild(this._input),this._label=document.createElement("div"),this._label.className="rename-label",this._domNode.appendChild(this._label),this._updateFont(),this._updateStyles(this._themeService.getColorTheme())),this._domNode}_updateStyles(a){var i,n,t,r;if(!this._input||!this._domNode)return;const u=a.getColor(p.widgetShadow),f=a.getColor(p.widgetBorder);this._domNode.style.backgroundColor=String((i=a.getColor(p.editorWidgetBackground))!==null&&i!==void 0?i:""),this._domNode.style.boxShadow=u?` 0 0 8px 2px ${u}`:"",this._domNode.style.border=f?`1px solid ${f}`:"",this._domNode.style.color=String((n=a.getColor(p.inputForeground))!==null&&n!==void 0?n:""),this._input.style.backgroundColor=String((t=a.getColor(p.inputBackground))!==null&&t!==void 0?t:"");const c=a.getColor(p.inputBorder);this._input.style.borderWidth=c?"1px":"0px",this._input.style.borderStyle=c?"solid":"none",this._input.style.borderColor=(r=c?.toString())!==null&&r!==void 0?r:"none"}_updateFont(){if(!this._input||!this._label)return;const a=this._editor.getOption(50);this._input.style.fontFamily=a.fontFamily,this._input.style.fontWeight=a.fontWeight,this._input.style.fontSize=`${a.fontSize}px`,this._label.style.fontSize=`${a.fontSize*.8}px`}getPosition(){return this._visible?{position:this._position,preference:[2,1]}:null}beforeRender(){var a,i;const[n,t]=this._acceptKeybindings;return this._label.innerText=(0,y.localize)(2,null,(a=this._keybindingService.lookupKeybinding(n))===null||a===void 0?void 0:a.getLabel(),(i=this._keybindingService.lookupKeybinding(t))===null||i===void 0?void 0:i.getLabel()),null}afterRender(a){a||this.cancelInput(!0)}acceptInput(a){var i;(i=this._currentAcceptInput)===null||i===void 0||i.call(this,a)}cancelInput(a){var i;(i=this._currentCancelInput)===null||i===void 0||i.call(this,a)}getInput(a,i,n,t,r,u){this._domNode.classList.toggle("preview",r),this._position=new k.Position(a.startLineNumber,a.startColumn),this._input.value=i,this._input.setAttribute("selectionStart",n.toString()),this._input.setAttribute("selectionEnd",t.toString()),this._input.size=Math.max((a.endColumn-a.startColumn)*1.1,20);const f=new L.DisposableStore;return new Promise(c=>{this._currentCancelInput=d=>(this._currentAcceptInput=void 0,this._currentCancelInput=void 0,c(d),!0),this._currentAcceptInput=d=>{if(this._input.value.trim().length===0||this._input.value===i){this.cancelInput(!0);return}this._currentAcceptInput=void 0,this._currentCancelInput=void 0,c({newName:this._input.value,wantsPreview:r&&d})},f.add(u.onCancellationRequested(()=>this.cancelInput(!0))),f.add(this._editor.onDidBlurEditorWidget(()=>{var d;return this.cancelInput(!(!((d=this._domNode)===null||d===void 0)&&d.ownerDocument.hasFocus()))})),this._show()}).finally(()=>{f.dispose(),this._hide()})}_show(){this._editor.revealLineInCenterIfOutsideViewport(this._position.lineNumber,0),this._visible=!0,this._visibleContextKey.set(!0),this._editor.layoutContentWidget(this),setTimeout(()=>{this._input.focus(),this._input.setSelectionRange(parseInt(this._input.getAttribute("selectionStart")),parseInt(this._input.getAttribute("selectionEnd")))},100)}_hide(){this._visible=!1,this._visibleContextKey.reset(),this._editor.layoutContentWidget(this)}};e.RenameInputField=v,e.RenameInputField=v=ke([ge(2,_.IThemeService),ge(3,S.IKeybindingService),ge(4,E.IContextKeyService)],v)}),define(se[869],oe([1,0,48,14,19,12,2,20,22,105,16,136,33,10,5,21,189,166,710,98,15,8,64,50,88,37,868,18]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w){"use strict";var D;Object.defineProperty(e,"__esModule",{value:!0}),e.RenameAction=e.rename=void 0;class I{constructor(R,x,O){this.model=R,this.position=x,this._providerRenameIdx=0,this._providers=O.ordered(R)}hasProvider(){return this._providers.length>0}async resolveRenameLocation(R){const x=[];for(this._providerRenameIdx=0;this._providerRenameIdx0?x.join(` `):void 0}:{range:t.Range.fromPositions(this.position),text:"",rejectReason:x.length>0?x.join(` `):void 0}}async provideRenameEdits(R,x){return this._provideRenameEdits(R,this._providerRenameIdx,[],x)}async _provideRenameEdits(R,x,O,B){const W=this._providers[x];if(!W)return{edits:[],rejectReason:O.join(` `)};const V=await W.provideRenameEdits(this.model,this.position,R,B);if(V){if(V.rejectReason)return this._provideRenameEdits(R,x+1,O.concat(V.rejectReason),B)}else return this._provideRenameEdits(R,x+1,O.concat(c.localize(0,null)),B);return V}}async function T(M,R,x,O){const B=new I(R,x,M),W=await B.resolveRenameLocation(y.CancellationToken.None);return W?.rejectReason?{edits:[],rejectReason:W.rejectReason}:B.provideRenameEdits(O,y.CancellationToken.None)}e.rename=T;let A=D=class{static get(R){return R.getContribution(D.ID)}constructor(R,x,O,B,W,V,K,F){this.editor=R,this._instaService=x,this._notificationService=O,this._bulkEditService=B,this._progressService=W,this._logService=V,this._configService=K,this._languageFeaturesService=F,this._disposableStore=new S.DisposableStore,this._cts=new y.CancellationTokenSource,this._renameInputField=this._disposableStore.add(this._instaService.createInstance(C.RenameInputField,this.editor,["acceptRenameInput","acceptRenameInputWithPreview"]))}dispose(){this._disposableStore.dispose(),this._cts.dispose(!0)}async run(){var R,x;if(this._cts.dispose(!0),this._cts=new y.CancellationTokenSource,!this.editor.hasModel())return;const O=this.editor.getPosition(),B=new I(this.editor.getModel(),O,this._languageFeaturesService.renameProvider);if(!B.hasProvider())return;const W=new v.EditorStateCancellationTokenSource(this.editor,5,void 0,this._cts.token);let V;try{const J=B.resolveRenameLocation(W.token);this._progressService.showWhile(J,250),V=await J}catch(J){(R=f.MessageController.get(this.editor))===null||R===void 0||R.showMessage(J||c.localize(1,null),O);return}finally{W.dispose()}if(!V)return;if(V.rejectReason){(x=f.MessageController.get(this.editor))===null||x===void 0||x.showMessage(V.rejectReason,O);return}if(W.token.isCancellationRequested)return;const K=new v.EditorStateCancellationTokenSource(this.editor,5,V.range,this._cts.token),F=this.editor.getSelection();let q=0,ie=V.text.length;!t.Range.isEmpty(F)&&!t.Range.spansMultipleLines(F)&&t.Range.containsRange(V.range,F)&&(q=Math.max(0,F.startColumn-V.range.startColumn),ie=Math.min(V.range.endColumn,F.endColumn)-V.range.startColumn);const ae=this._bulkEditService.hasPreviewHandler()&&this._configService.getValue(this.editor.getModel().uri,"editor.rename.enablePreview"),ne=await this._renameInputField.getInput(V.range,V.text,q,ie,ae,K.token);if(typeof ne=="boolean"){ne&&this.editor.focus(),K.dispose();return}this.editor.focus();const $=(0,k.raceCancellation)(B.provideRenameEdits(ne.newName,K.token),K.token).then(async J=>{if(!(!J||!this.editor.hasModel())){if(J.rejectReason){this._notificationService.info(J.rejectReason);return}this.editor.setSelection(t.Range.fromPositions(this.editor.getSelection().getPosition())),this._bulkEditService.apply(J,{editor:this.editor,showPreview:ne.wantsPreview,label:c.localize(2,null,V?.text,ne.newName),code:"undoredo.rename",quotableLabel:c.localize(3,null,V?.text,ne.newName),respectAutoSaveConfig:!0}).then(Q=>{Q.ariaSummary&&(0,L.alert)(c.localize(4,null,V.text,ne.newName,Q.ariaSummary))}).catch(Q=>{this._notificationService.error(c.localize(5,null)),this._logService.error(Q)})}},J=>{this._notificationService.error(c.localize(6,null)),this._logService.error(J)}).finally(()=>{K.dispose()});return this._progressService.showWhile($,250),$}acceptRenameInput(R){this._renameInputField.acceptInput(R)}cancelRenameInput(){this._renameInputField.cancelInput(!0)}};A.ID="editor.contrib.renameController",A=D=ke([ge(1,l.IInstantiationService),ge(2,g.INotificationService),ge(3,a.IBulkEditService),ge(4,h.IEditorProgressService),ge(5,o.ILogService),ge(6,u.ITextResourceConfigurationService),ge(7,w.ILanguageFeaturesService)],A);class P extends b.EditorAction{constructor(){super({id:"editor.action.rename",label:c.localize(7,null),alias:"Rename Symbol",precondition:s.ContextKeyExpr.and(r.EditorContextKeys.writable,r.EditorContextKeys.hasRenameProvider),kbOpts:{kbExpr:r.EditorContextKeys.editorTextFocus,primary:60,weight:100},contextMenuOpts:{group:"1_modification",order:1.1}})}runCommand(R,x){const O=R.get(i.ICodeEditorService),[B,W]=Array.isArray(x)&&x||[void 0,void 0];return _.URI.isUri(B)&&n.Position.isIPosition(W)?O.openCodeEditor({resource:B},O.getActiveCodeEditor()).then(V=>{V&&(V.setPosition(W),V.invokeWithinContext(K=>(this.reportTelemetry(K,V),this.run(K,V))))},E.onUnexpectedError):super.runCommand(R,x)}run(R,x){const O=A.get(x);return O?O.run():Promise.resolve()}}e.RenameAction=P,(0,b.registerEditorContribution)(A.ID,A,4),(0,b.registerEditorAction)(P);const N=b.EditorCommand.bindToContribution(A.get);(0,b.registerEditorCommand)(new N({id:"acceptRenameInput",precondition:C.CONTEXT_RENAME_INPUT_VISIBLE,handler:M=>M.acceptRenameInput(!1),kbOpts:{weight:100+99,kbExpr:s.ContextKeyExpr.and(r.EditorContextKeys.focus,s.ContextKeyExpr.not("isComposing")),primary:3}})),(0,b.registerEditorCommand)(new N({id:"acceptRenameInputWithPreview",precondition:s.ContextKeyExpr.and(C.CONTEXT_RENAME_INPUT_VISIBLE,s.ContextKeyExpr.has("config.editor.rename.enablePreview")),handler:M=>M.acceptRenameInput(!0),kbOpts:{weight:100+99,kbExpr:s.ContextKeyExpr.and(r.EditorContextKeys.focus,s.ContextKeyExpr.not("isComposing")),primary:1024+3}})),(0,b.registerEditorCommand)(new N({id:"cancelRenameInput",precondition:C.CONTEXT_RENAME_INPUT_VISIBLE,handler:M=>M.cancelRenameInput(),kbOpts:{weight:100+99,kbExpr:r.EditorContextKeys.focus,primary:9,secondary:[1033]}})),(0,b.registerModelAndPositionCommand)("_executeDocumentRenameProvider",function(M,R,x,...O){const[B]=O;(0,p.assertType)(typeof B=="string");const{renameProvider:W}=M.get(w.ILanguageFeaturesService);return T(W,R,x,B)}),(0,b.registerModelAndPositionCommand)("_executePrepareRename",async function(M,R,x){const{renameProvider:O}=M.get(w.ILanguageFeaturesService),W=await new I(R,x,O).resolveRenameLocation(y.CancellationToken.None);if(W?.rejectReason)throw new Error(W.rejectReason);return W}),m.Registry.as(d.Extensions.Configuration).registerConfiguration({id:"editor",properties:{"editor.rename.enablePreview":{scope:5,description:c.localize(8,null),default:!0,type:"boolean"}}})}),define(se[870],oe([1,0,2,12,51,27,14,19,23,256,344,79,61,18,238,131,308]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";var f;Object.defineProperty(e,"__esModule",{value:!0}),e.DocumentSemanticTokensFeature=void 0;let c=class extends L.Disposable{constructor(o,g,h,m,C,w){super(),this._watchers=Object.create(null);const D=A=>{this._watchers[A.uri.toString()]=new d(A,o,h,C,w)},I=(A,P)=>{P.dispose(),delete this._watchers[A.uri.toString()]},T=()=>{for(const A of g.getModels()){const P=this._watchers[A.uri.toString()];(0,u.isSemanticColoringEnabled)(A,h,m)?P||D(A):P&&I(A,P)}};g.getModels().forEach(A=>{(0,u.isSemanticColoringEnabled)(A,h,m)&&D(A)}),this._register(g.onModelAdded(A=>{(0,u.isSemanticColoringEnabled)(A,h,m)&&D(A)})),this._register(g.onModelRemoved(A=>{const P=this._watchers[A.uri.toString()];P&&I(A,P)})),this._register(m.onDidChangeConfiguration(A=>{A.affectsConfiguration(u.SEMANTIC_HIGHLIGHTING_SETTING_ID)&&T()})),this._register(h.onDidColorThemeChange(T))}dispose(){for(const o of Object.values(this._watchers))o.dispose();super.dispose()}};e.DocumentSemanticTokensFeature=c,e.DocumentSemanticTokensFeature=c=ke([ge(0,t.ISemanticTokensStylingService),ge(1,y.IModelService),ge(2,_.IThemeService),ge(3,E.IConfigurationService),ge(4,a.ILanguageFeatureDebounceService),ge(5,n.ILanguageFeaturesService)],c);let d=f=class extends L.Disposable{constructor(o,g,h,m,C){super(),this._semanticTokensStylingService=g,this._isDisposed=!1,this._model=o,this._provider=C.documentSemanticTokensProvider,this._debounceInformation=m.for(this._provider,"DocumentSemanticTokens",{min:f.REQUEST_MIN_DELAY,max:f.REQUEST_MAX_DELAY}),this._fetchDocumentSemanticTokens=this._register(new S.RunOnceScheduler(()=>this._fetchDocumentSemanticTokensNow(),f.REQUEST_MIN_DELAY)),this._currentDocumentResponse=null,this._currentDocumentRequestCancellationTokenSource=null,this._documentProvidersChangeListeners=[],this._providersChangedDuringRequest=!1,this._register(this._model.onDidChangeContent(()=>{this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._register(this._model.onDidChangeAttached(()=>{this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._register(this._model.onDidChangeLanguage(()=>{this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule(0)}));const w=()=>{(0,L.dispose)(this._documentProvidersChangeListeners),this._documentProvidersChangeListeners=[];for(const D of this._provider.all(o))typeof D.onDidChange=="function"&&this._documentProvidersChangeListeners.push(D.onDidChange(()=>{if(this._currentDocumentRequestCancellationTokenSource){this._providersChangedDuringRequest=!0;return}this._fetchDocumentSemanticTokens.schedule(0)}))};w(),this._register(this._provider.onDidChange(()=>{w(),this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._register(h.onDidColorThemeChange(D=>{this._setDocumentSemanticTokens(null,null,null,[]),this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))})),this._fetchDocumentSemanticTokens.schedule(0)}dispose(){this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._currentDocumentRequestCancellationTokenSource&&(this._currentDocumentRequestCancellationTokenSource.cancel(),this._currentDocumentRequestCancellationTokenSource=null),(0,L.dispose)(this._documentProvidersChangeListeners),this._documentProvidersChangeListeners=[],this._setDocumentSemanticTokens(null,null,null,[]),this._isDisposed=!0,super.dispose()}_fetchDocumentSemanticTokensNow(){if(this._currentDocumentRequestCancellationTokenSource)return;if(!(0,b.hasDocumentSemanticTokensProvider)(this._provider,this._model)){this._currentDocumentResponse&&this._model.tokenization.setSemanticTokens(null,!1);return}if(!this._model.isAttachedToEditor())return;const o=new p.CancellationTokenSource,g=this._currentDocumentResponse?this._currentDocumentResponse.provider:null,h=this._currentDocumentResponse&&this._currentDocumentResponse.resultId||null,m=(0,b.getDocumentSemanticTokens)(this._provider,this._model,g,h,o.token);this._currentDocumentRequestCancellationTokenSource=o,this._providersChangedDuringRequest=!1;const C=[],w=this._model.onDidChangeContent(I=>{C.push(I)}),D=new i.StopWatch(!1);m.then(I=>{if(this._debounceInformation.update(this._model,D.elapsed()),this._currentDocumentRequestCancellationTokenSource=null,w.dispose(),!I)this._setDocumentSemanticTokens(null,null,null,C);else{const{provider:T,tokens:A}=I,P=this._semanticTokensStylingService.getStyling(T);this._setDocumentSemanticTokens(T,A||null,P,C)}},I=>{I&&(k.isCancellationError(I)||typeof I.message=="string"&&I.message.indexOf("busy")!==-1)||k.onUnexpectedError(I),this._currentDocumentRequestCancellationTokenSource=null,w.dispose(),(C.length>0||this._providersChangedDuringRequest)&&(this._fetchDocumentSemanticTokens.isScheduled()||this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model)))})}static _copy(o,g,h,m,C){C=Math.min(C,h.length-m,o.length-g);for(let w=0;w{(m.length>0||this._providersChangedDuringRequest)&&!this._fetchDocumentSemanticTokens.isScheduled()&&this._fetchDocumentSemanticTokens.schedule(this._debounceInformation.get(this._model))};if(this._currentDocumentResponse&&(this._currentDocumentResponse.dispose(),this._currentDocumentResponse=null),this._isDisposed){o&&g&&o.releaseDocumentSemanticTokens(g.resultId);return}if(!o||!h){this._model.tokenization.setSemanticTokens(null,!1);return}if(!g){this._model.tokenization.setSemanticTokens(null,!0),w();return}if((0,b.isSemanticTokensEdits)(g)){if(!C){this._model.tokenization.setSemanticTokens(null,!0);return}if(g.edits.length===0)g={resultId:g.resultId,data:C.data};else{let D=0;for(const N of g.edits)D+=(N.data?N.data.length:0)-N.deleteCount;const I=C.data,T=new Uint32Array(I.length+D);let A=I.length,P=T.length;for(let N=g.edits.length-1;N>=0;N--){const M=g.edits[N];if(M.start>I.length){h.warnInvalidEditStart(C.resultId,g.resultId,N,M.start,I.length),this._model.tokenization.setSemanticTokens(null,!0);return}const R=A-(M.start+M.deleteCount);R>0&&(f._copy(I,A-R,T,P-R,R),P-=R),M.data&&(f._copy(M.data,0,T,P-M.data.length,M.data.length),P-=M.data.length),A=M.start}A>0&&f._copy(I,0,T,0,A),g={resultId:g.resultId,data:T}}}if((0,b.isSemanticTokens)(g)){this._currentDocumentResponse=new s(o,g.resultId,g.data);const D=(0,v.toMultilineTokens2)(g,h,this._model.getLanguageId());if(m.length>0)for(const I of m)for(const T of D)for(const A of I.changes)T.applyEdit(A.range,A.text);this._model.tokenization.setSemanticTokens(D,!0)}else this._model.tokenization.setSemanticTokens(null,!0);w()}};d.REQUEST_MIN_DELAY=300,d.REQUEST_MAX_DELAY=2e3,d=f=ke([ge(1,t.ISemanticTokensStylingService),ge(2,_.IThemeService),ge(3,a.ILanguageFeatureDebounceService),ge(4,n.ILanguageFeaturesService)],d);class s{constructor(o,g,h){this.provider=o,this.resultId=g,this.data=h}dispose(){this.provider.releaseDocumentSemanticTokens(this.resultId)}}(0,r.registerEditorFeature)(c)}),define(se[871],oe([1,0,14,2,16,344,308,256,27,23,79,61,18,238]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewportSemanticTokensContribution=void 0;let t=class extends k.Disposable{constructor(u,f,c,d,s,l){super(),this._semanticTokensStylingService=f,this._themeService=c,this._configurationService=d,this._editor=u,this._provider=l.documentRangeSemanticTokensProvider,this._debounceInformation=s.for(this._provider,"DocumentRangeSemanticTokens",{min:100,max:500}),this._tokenizeViewport=this._register(new L.RunOnceScheduler(()=>this._tokenizeViewportNow(),100)),this._outstandingRequests=[];const o=()=>{this._editor.hasModel()&&this._tokenizeViewport.schedule(this._debounceInformation.get(this._editor.getModel()))};this._register(this._editor.onDidScrollChange(()=>{o()})),this._register(this._editor.onDidChangeModel(()=>{this._cancelAll(),o()})),this._register(this._editor.onDidChangeModelContent(g=>{this._cancelAll(),o()})),this._register(this._provider.onDidChange(()=>{this._cancelAll(),o()})),this._register(this._configurationService.onDidChangeConfiguration(g=>{g.affectsConfiguration(S.SEMANTIC_HIGHLIGHTING_SETTING_ID)&&(this._cancelAll(),o())})),this._register(this._themeService.onDidColorThemeChange(()=>{this._cancelAll(),o()})),o()}_cancelAll(){for(const u of this._outstandingRequests)u.cancel();this._outstandingRequests=[]}_removeOutstandingRequest(u){for(let f=0,c=this._outstandingRequests.length;fthis._requestRange(u,c)))}_requestRange(u,f){const c=u.getVersionId(),d=(0,L.createCancelablePromise)(l=>Promise.resolve((0,E.getDocumentRangeSemanticTokens)(this._provider,u,f,l))),s=new a.StopWatch(!1);return d.then(l=>{if(this._debounceInformation.update(u,s.elapsed()),!l||!l.tokens||u.isDisposed()||u.getVersionId()!==c)return;const{provider:o,tokens:g}=l,h=this._semanticTokensStylingService.getStyling(o);u.tokenization.setPartialSemanticTokens(f,(0,p.toMultilineTokens2)(g,h,u.getLanguageId()))}).then(()=>this._removeOutstandingRequest(d),()=>this._removeOutstandingRequest(d)),d}};e.ViewportSemanticTokensContribution=t,t.ID="editor.contrib.viewportSemanticTokens",e.ViewportSemanticTokensContribution=t=ke([ge(1,n.ISemanticTokensStylingService),ge(2,v.IThemeService),ge(3,_.IConfigurationService),ge(4,b.ILanguageFeatureDebounceService),ge(5,i.ILanguageFeaturesService)],t),(0,y.registerEditorContribution)(t.ID,t,1)}),define(se[872],oe([1,0,7,230,26,28,6,71,2,22,31,792,51,43,720,341,82,23,355]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";var d;Object.defineProperty(e,"__esModule",{value:!0}),e.ItemRenderer=e.getAriaId=void 0;function s(m){return`suggest-aria-id:${m}`}e.getAriaId=s;const l=(0,u.registerIcon)("suggest-more-info",y.Codicon.chevronRight,t.localize(0,null)),o=new(d=class{extract(C,w){if(C.textLabel.match(d._regexStrict))return w[0]=C.textLabel,!0;if(C.completion.detail&&C.completion.detail.match(d._regexStrict))return w[0]=C.completion.detail,!0;if(C.completion.documentation){const D=typeof C.completion.documentation=="string"?C.completion.documentation:C.completion.documentation.value,I=d._regexRelaxed.exec(D);if(I&&(I.index===0||I.index+I[0].length===D.length))return w[0]=I[0],!0}return!1}},d._regexRelaxed=/(#([\da-fA-F]{3}){1,2}|(rgb|hsl)a\(\s*(\d{1,3}%?\s*,\s*){3}(1|0?\.\d+)\)|(rgb|hsl)\(\s*\d{1,3}%?(\s*,\s*\d{1,3}%?){2}\s*\))/,d._regexStrict=new RegExp(`^${d._regexRelaxed.source}$`,"i"),d);let g=class{constructor(C,w,D,I){this._editor=C,this._modelService=w,this._languageService=D,this._themeService=I,this._onDidToggleDetails=new S.Emitter,this.onDidToggleDetails=this._onDidToggleDetails.event,this.templateId="suggestion"}dispose(){this._onDidToggleDetails.dispose()}renderTemplate(C){const w=new _.DisposableStore,D=C;D.classList.add("show-file-icons");const I=(0,L.append)(C,(0,L.$)(".icon")),T=(0,L.append)(I,(0,L.$)("span.colorspan")),A=(0,L.append)(C,(0,L.$)(".contents")),P=(0,L.append)(A,(0,L.$)(".main")),N=(0,L.append)(P,(0,L.$)(".icon-label.codicon")),M=(0,L.append)(P,(0,L.$)("span.left")),R=(0,L.append)(P,(0,L.$)("span.right")),x=new k.IconLabel(M,{supportHighlights:!0,supportIcons:!0});w.add(x);const O=(0,L.append)(M,(0,L.$)("span.signature-label")),B=(0,L.append)(M,(0,L.$)("span.qualifier-label")),W=(0,L.append)(R,(0,L.$)("span.details-label")),V=(0,L.append)(R,(0,L.$)("span.readMore"+E.ThemeIcon.asCSSSelector(l)));return V.title=t.localize(1,null),{root:D,left:M,right:R,icon:I,colorspan:T,iconLabel:x,iconContainer:N,parametersLabel:O,qualifierLabel:B,detailsLabel:W,readMore:V,disposables:w,configureFont:()=>{const F=this._editor.getOptions(),q=F.get(50),ie=q.getMassagedFontFamily(),ae=q.fontFeatureSettings,ne=F.get(118)||q.fontSize,$=F.get(119)||q.lineHeight,J=q.fontWeight,Q=q.letterSpacing,re=`${ne}px`,de=`${$}px`,he=`${Q}px`;D.style.fontSize=re,D.style.fontWeight=J,D.style.letterSpacing=he,P.style.fontFamily=ie,P.style.fontFeatureSettings=ae,P.style.lineHeight=de,I.style.height=de,I.style.width=de,V.style.height=de,V.style.width=de}}}renderElement(C,w,D){D.configureFont();const{completion:I}=C;D.root.id=s(w),D.colorspan.style.backgroundColor="";const T={labelEscapeNewLines:!0,matches:(0,p.createMatches)(C.score)},A=[];if(I.kind===19&&o.extract(C,A))D.icon.className="icon customcolor",D.iconContainer.className="icon hide",D.colorspan.style.backgroundColor=A[0];else if(I.kind===20&&this._themeService.getFileIconTheme().hasFileIcons){D.icon.className="icon hide",D.iconContainer.className="icon hide";const P=(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:"fake",path:C.textLabel}),r.FileKind.FILE),N=(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:"fake",path:I.detail}),r.FileKind.FILE);T.extraClasses=P.length>N.length?P:N}else I.kind===23&&this._themeService.getFileIconTheme().hasFolderIcons?(D.icon.className="icon hide",D.iconContainer.className="icon hide",T.extraClasses=[(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:"fake",path:C.textLabel}),r.FileKind.FOLDER),(0,a.getIconClasses)(this._modelService,this._languageService,v.URI.from({scheme:"fake",path:I.detail}),r.FileKind.FOLDER)].flat()):(D.icon.className="icon hide",D.iconContainer.className="",D.iconContainer.classList.add("suggest-icon",...E.ThemeIcon.asClassNameArray(b.CompletionItemKinds.toIcon(I.kind))));I.tags&&I.tags.indexOf(1)>=0&&(T.extraClasses=(T.extraClasses||[]).concat(["deprecated"]),T.matches=[]),D.iconLabel.setLabel(C.textLabel,void 0,T),typeof I.label=="string"?(D.parametersLabel.textContent="",D.detailsLabel.textContent=h(I.detail||""),D.root.classList.add("string-label")):(D.parametersLabel.textContent=h(I.label.detail||""),D.detailsLabel.textContent=h(I.label.description||""),D.root.classList.remove("string-label")),this._editor.getOption(117).showInlineDetails?(0,L.show)(D.detailsLabel):(0,L.hide)(D.detailsLabel),(0,c.canExpandCompletionItem)(C)?(D.right.classList.add("can-expand-details"),(0,L.show)(D.readMore),D.readMore.onmousedown=P=>{P.stopPropagation(),P.preventDefault()},D.readMore.onclick=P=>{P.stopPropagation(),P.preventDefault(),this._onDidToggleDetails.fire()}):(D.right.classList.remove("can-expand-details"),(0,L.hide)(D.readMore),D.readMore.onmousedown=null,D.readMore.onclick=null)}disposeTemplate(C){C.disposables.dispose()}};e.ItemRenderer=g,e.ItemRenderer=g=ke([ge(1,i.IModelService),ge(2,n.ILanguageService),ge(3,f.IThemeService)],g);function h(m){return m.replace(/\r\n|\r|\n/g,"")}}),define(se[873],oe([1,0,866,37,139,33,96,6,16,21,70]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GotoLineAction=e.StandaloneGotoLineQuickAccessProvider=void 0;let a=class extends L.AbstractGotoLineQuickAccessProvider{constructor(t){super(),this.editorService=t,this.onDidActiveTextEditorControlChange=p.Event.None}get activeTextEditorControl(){var t;return(t=this.editorService.getFocusedCodeEditor())!==null&&t!==void 0?t:void 0}};e.StandaloneGotoLineQuickAccessProvider=a,e.StandaloneGotoLineQuickAccessProvider=a=ke([ge(0,E.ICodeEditorService)],a);class i extends _.EditorAction{constructor(){super({id:i.ID,label:S.GoToLineNLS.gotoLineActionLabel,alias:"Go to Line/Column...",precondition:void 0,kbOpts:{kbExpr:v.EditorContextKeys.focus,primary:2085,mac:{primary:293},weight:100}})}run(t){t.get(b.IQuickInputService).quickAccess.show(a.PREFIX)}}e.GotoLineAction=i,i.ID="editor.action.gotoLine",(0,_.registerEditorAction)(i),k.Registry.as(y.Extensions.Quickaccess).registerQuickAccessProvider({ctor:a,prefix:a.PREFIX,helpEntries:[{description:S.GoToLineNLS.gotoLineActionLabel,commandId:i.ID}]})}),define(se[874],oe([1,0,867,37,139,33,96,6,16,21,70,165,18,177,254]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.GotoSymbolAction=e.StandaloneGotoSymbolQuickAccessProvider=void 0;let n=class extends L.AbstractGotoSymbolQuickAccessProvider{constructor(u,f,c){super(f,c),this.editorService=u,this.onDidActiveTextEditorControlChange=p.Event.None}get activeTextEditorControl(){var u;return(u=this.editorService.getFocusedCodeEditor())!==null&&u!==void 0?u:void 0}};e.StandaloneGotoSymbolQuickAccessProvider=n,e.StandaloneGotoSymbolQuickAccessProvider=n=ke([ge(0,E.ICodeEditorService),ge(1,i.ILanguageFeaturesService),ge(2,a.IOutlineModelService)],n);class t extends _.EditorAction{constructor(){super({id:t.ID,label:S.QuickOutlineNLS.quickOutlineActionLabel,alias:"Go to Symbol...",precondition:v.EditorContextKeys.hasDocumentSymbolProvider,kbOpts:{kbExpr:v.EditorContextKeys.focus,primary:3117,weight:100},contextMenuOpts:{group:"navigation",order:3}})}run(u){u.get(b.IQuickInputService).quickAccess.show(L.AbstractGotoSymbolQuickAccessProvider.PREFIX,{itemActivation:b.ItemActivation.NONE})}}e.GotoSymbolAction=t,t.ID="editor.action.quickOutline",(0,_.registerEditorAction)(t),k.Registry.as(y.Extensions.Quickaccess).registerQuickAccessProvider({ctor:n,prefix:L.AbstractGotoSymbolQuickAccessProvider.PREFIX,helpEntries:[{description:S.QuickOutlineNLS.quickOutlineActionLabel,prefix:L.AbstractGotoSymbolQuickAccessProvider.PREFIX,commandId:t.ID},{description:S.QuickOutlineNLS.quickOutlineByCategoryActionLabel,prefix:L.AbstractGotoSymbolQuickAccessProvider.PREFIX_BY_CATEGORY}]})}),define(se[371],oe([1,0,7,47,851,33,15,45,23]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneCodeEditorService=void 0;let v=class extends y.AbstractCodeEditorService{constructor(a,i){super(i),this._register(this.onCodeEditorAdd(()=>this._checkContextKey())),this._register(this.onCodeEditorRemove(()=>this._checkContextKey())),this._editorIsOpen=a.createKey("editorIsOpen",!1),this._activeCodeEditor=null,this._register(this.registerCodeEditorOpenHandler(async(n,t,r)=>t?this.doOpenEditor(t,n):null))}_checkContextKey(){let a=!1;for(const i of this.listCodeEditors())if(!i.isSimpleWidget){a=!0;break}this._editorIsOpen.set(a)}setActiveCodeEditor(a){this._activeCodeEditor=a}getActiveCodeEditor(){return this._activeCodeEditor}doOpenEditor(a,i){if(!this.findModel(a,i.resource)){if(i.resource){const r=i.resource.scheme;if(r===k.Schemas.http||r===k.Schemas.https)return(0,L.windowOpenNoOpener)(i.resource.toString()),a}return null}const t=i.options?i.options.selection:null;if(t)if(typeof t.endLineNumber=="number"&&typeof t.endColumn=="number")a.setSelection(t),a.revealRangeInCenter(t,1);else{const r={lineNumber:t.startLineNumber,column:t.startColumn};a.setPosition(r),a.revealPositionInCenter(r,1)}return a}findModel(a,i){const n=a.getModel();return n&&n.uri.toString()!==i.toString()?null:n}};e.StandaloneCodeEditorService=v,e.StandaloneCodeEditorService=v=ke([ge(0,S.IContextKeyService),ge(1,_.IThemeService)],v),(0,p.registerSingleton)(E.ICodeEditorService,v,0)}),define(se[875],oe([1,0,83,29]),function(te,e,L,k){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.hc_light=e.hc_black=e.vs_dark=e.vs=void 0,e.vs={base:"vs",inherit:!1,rules:[{token:"",foreground:"000000",background:"fffffe"},{token:"invalid",foreground:"cd3131"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"001188"},{token:"variable.predefined",foreground:"4864AA"},{token:"constant",foreground:"dd0000"},{token:"comment",foreground:"008000"},{token:"number",foreground:"098658"},{token:"number.hex",foreground:"3030c0"},{token:"regexp",foreground:"800000"},{token:"annotation",foreground:"808080"},{token:"type",foreground:"008080"},{token:"delimiter",foreground:"000000"},{token:"delimiter.html",foreground:"383838"},{token:"delimiter.xml",foreground:"0000FF"},{token:"tag",foreground:"800000"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta.scss",foreground:"800000"},{token:"metatag",foreground:"e00000"},{token:"metatag.content.html",foreground:"FF0000"},{token:"metatag.html",foreground:"808080"},{token:"metatag.xml",foreground:"808080"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"863B00"},{token:"string.key.json",foreground:"A31515"},{token:"string.value.json",foreground:"0451A5"},{token:"attribute.name",foreground:"FF0000"},{token:"attribute.value",foreground:"0451A5"},{token:"attribute.value.number",foreground:"098658"},{token:"attribute.value.unit",foreground:"098658"},{token:"attribute.value.html",foreground:"0000FF"},{token:"attribute.value.xml",foreground:"0000FF"},{token:"string",foreground:"A31515"},{token:"string.html",foreground:"0000FF"},{token:"string.sql",foreground:"FF0000"},{token:"string.yaml",foreground:"0451A5"},{token:"keyword",foreground:"0000FF"},{token:"keyword.json",foreground:"0451A5"},{token:"keyword.flow",foreground:"AF00DB"},{token:"keyword.flow.scss",foreground:"0000FF"},{token:"operator.scss",foreground:"666666"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"666666"},{token:"predefined.sql",foreground:"C700C7"}],colors:{[k.editorBackground]:"#FFFFFE",[k.editorForeground]:"#000000",[k.editorInactiveSelection]:"#E5EBF1",[L.editorIndentGuide1]:"#D3D3D3",[L.editorActiveIndentGuide1]:"#939393",[k.editorSelectionHighlight]:"#ADD6FF4D"}},e.vs_dark={base:"vs-dark",inherit:!1,rules:[{token:"",foreground:"D4D4D4",background:"1E1E1E"},{token:"invalid",foreground:"f44747"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"74B0DF"},{token:"variable.predefined",foreground:"4864AA"},{token:"variable.parameter",foreground:"9CDCFE"},{token:"constant",foreground:"569CD6"},{token:"comment",foreground:"608B4E"},{token:"number",foreground:"B5CEA8"},{token:"number.hex",foreground:"5BB498"},{token:"regexp",foreground:"B46695"},{token:"annotation",foreground:"cc6666"},{token:"type",foreground:"3DC9B0"},{token:"delimiter",foreground:"DCDCDC"},{token:"delimiter.html",foreground:"808080"},{token:"delimiter.xml",foreground:"808080"},{token:"tag",foreground:"569CD6"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta.scss",foreground:"A79873"},{token:"meta.tag",foreground:"CE9178"},{token:"metatag",foreground:"DD6A6F"},{token:"metatag.content.html",foreground:"9CDCFE"},{token:"metatag.html",foreground:"569CD6"},{token:"metatag.xml",foreground:"569CD6"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"9CDCFE"},{token:"string.key.json",foreground:"9CDCFE"},{token:"string.value.json",foreground:"CE9178"},{token:"attribute.name",foreground:"9CDCFE"},{token:"attribute.value",foreground:"CE9178"},{token:"attribute.value.number.css",foreground:"B5CEA8"},{token:"attribute.value.unit.css",foreground:"B5CEA8"},{token:"attribute.value.hex.css",foreground:"D4D4D4"},{token:"string",foreground:"CE9178"},{token:"string.sql",foreground:"FF0000"},{token:"keyword",foreground:"569CD6"},{token:"keyword.flow",foreground:"C586C0"},{token:"keyword.json",foreground:"CE9178"},{token:"keyword.flow.scss",foreground:"569CD6"},{token:"operator.scss",foreground:"909090"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"909090"},{token:"predefined.sql",foreground:"FF00FF"}],colors:{[k.editorBackground]:"#1E1E1E",[k.editorForeground]:"#D4D4D4",[k.editorInactiveSelection]:"#3A3D41",[L.editorIndentGuide1]:"#404040",[L.editorActiveIndentGuide1]:"#707070",[k.editorSelectionHighlight]:"#ADD6FF26"}},e.hc_black={base:"hc-black",inherit:!1,rules:[{token:"",foreground:"FFFFFF",background:"000000"},{token:"invalid",foreground:"f44747"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"1AEBFF"},{token:"variable.parameter",foreground:"9CDCFE"},{token:"constant",foreground:"569CD6"},{token:"comment",foreground:"608B4E"},{token:"number",foreground:"FFFFFF"},{token:"regexp",foreground:"C0C0C0"},{token:"annotation",foreground:"569CD6"},{token:"type",foreground:"3DC9B0"},{token:"delimiter",foreground:"FFFF00"},{token:"delimiter.html",foreground:"FFFF00"},{token:"tag",foreground:"569CD6"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta",foreground:"D4D4D4"},{token:"meta.tag",foreground:"CE9178"},{token:"metatag",foreground:"569CD6"},{token:"metatag.content.html",foreground:"1AEBFF"},{token:"metatag.html",foreground:"569CD6"},{token:"metatag.xml",foreground:"569CD6"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"9CDCFE"},{token:"string.key",foreground:"9CDCFE"},{token:"string.value",foreground:"CE9178"},{token:"attribute.name",foreground:"569CD6"},{token:"attribute.value",foreground:"3FF23F"},{token:"string",foreground:"CE9178"},{token:"string.sql",foreground:"FF0000"},{token:"keyword",foreground:"569CD6"},{token:"keyword.flow",foreground:"C586C0"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"909090"},{token:"predefined.sql",foreground:"FF00FF"}],colors:{[k.editorBackground]:"#000000",[k.editorForeground]:"#FFFFFF",[L.editorIndentGuide1]:"#FFFFFF",[L.editorActiveIndentGuide1]:"#FFFFFF"}},e.hc_light={base:"hc-light",inherit:!1,rules:[{token:"",foreground:"292929",background:"FFFFFF"},{token:"invalid",foreground:"B5200D"},{token:"emphasis",fontStyle:"italic"},{token:"strong",fontStyle:"bold"},{token:"variable",foreground:"264F70"},{token:"variable.predefined",foreground:"4864AA"},{token:"constant",foreground:"dd0000"},{token:"comment",foreground:"008000"},{token:"number",foreground:"098658"},{token:"number.hex",foreground:"3030c0"},{token:"regexp",foreground:"800000"},{token:"annotation",foreground:"808080"},{token:"type",foreground:"008080"},{token:"delimiter",foreground:"000000"},{token:"delimiter.html",foreground:"383838"},{token:"tag",foreground:"800000"},{token:"tag.id.pug",foreground:"4F76AC"},{token:"tag.class.pug",foreground:"4F76AC"},{token:"meta.scss",foreground:"800000"},{token:"metatag",foreground:"e00000"},{token:"metatag.content.html",foreground:"B5200D"},{token:"metatag.html",foreground:"808080"},{token:"metatag.xml",foreground:"808080"},{token:"metatag.php",fontStyle:"bold"},{token:"key",foreground:"863B00"},{token:"string.key.json",foreground:"A31515"},{token:"string.value.json",foreground:"0451A5"},{token:"attribute.name",foreground:"264F78"},{token:"attribute.value",foreground:"0451A5"},{token:"string",foreground:"A31515"},{token:"string.sql",foreground:"B5200D"},{token:"keyword",foreground:"0000FF"},{token:"keyword.flow",foreground:"AF00DB"},{token:"operator.sql",foreground:"778899"},{token:"operator.swift",foreground:"666666"},{token:"predefined.sql",foreground:"C700C7"}],colors:{[k.editorBackground]:"#FFFFFF",[k.editorForeground]:"#292929",[L.editorIndentGuide1]:"#292929",[L.editorActiveIndentGuide1]:"#292929"}}}),define(se[372],oe([1,0,7,54,39,6,31,132,519,875,37,29,23,2,89,846,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneThemeService=e.HC_LIGHT_THEME_NAME=e.HC_BLACK_THEME_NAME=e.VS_DARK_THEME_NAME=e.VS_LIGHT_THEME_NAME=void 0,e.VS_LIGHT_THEME_NAME="vs",e.VS_DARK_THEME_NAME="vs-dark",e.HC_BLACK_THEME_NAME="hc-black",e.HC_LIGHT_THEME_NAME="hc-light";const f=b.Registry.as(a.Extensions.ColorContribution),c=b.Registry.as(i.Extensions.ThemingContribution);class d{constructor(m,C){this.semanticHighlighting=!1,this.themeData=C;const w=C.base;m.length>0?(s(m)?this.id=m:this.id=w+" "+m,this.themeName=m):(this.id=w,this.themeName=w),this.colors=null,this.defaultColors=Object.create(null),this._tokenTheme=null}get base(){return this.themeData.base}notifyBaseUpdated(){this.themeData.inherit&&(this.colors=null,this._tokenTheme=null)}getColors(){if(!this.colors){const m=new Map;for(const C in this.themeData.colors)m.set(C,y.Color.fromHex(this.themeData.colors[C]));if(this.themeData.inherit){const C=l(this.themeData.base);for(const w in C.colors)m.has(w)||m.set(w,y.Color.fromHex(C.colors[w]))}this.colors=m}return this.colors}getColor(m,C){const w=this.getColors().get(m);if(w)return w;if(C!==!1)return this.getDefault(m)}getDefault(m){let C=this.defaultColors[m];return C||(C=f.resolveDefaultColor(m,this),this.defaultColors[m]=C,C)}defines(m){return this.getColors().has(m)}get type(){switch(this.base){case e.VS_LIGHT_THEME_NAME:return t.ColorScheme.LIGHT;case e.HC_BLACK_THEME_NAME:return t.ColorScheme.HIGH_CONTRAST_DARK;case e.HC_LIGHT_THEME_NAME:return t.ColorScheme.HIGH_CONTRAST_LIGHT;default:return t.ColorScheme.DARK}}get tokenTheme(){if(!this._tokenTheme){let m=[],C=[];if(this.themeData.inherit){const I=l(this.themeData.base);m=I.rules,I.encodedTokensColors&&(C=I.encodedTokensColors)}const w=this.themeData.colors["editor.foreground"],D=this.themeData.colors["editor.background"];if(w||D){const I={token:""};w&&(I.foreground=w),D&&(I.background=D),m.push(I)}m=m.concat(this.themeData.rules),this.themeData.encodedTokensColors&&(C=this.themeData.encodedTokensColors),this._tokenTheme=_.TokenTheme.createFromRawTokenTheme(m,C)}return this._tokenTheme}getTokenStyleMetadata(m,C,w){const I=this.tokenTheme._match([m].concat(C).join(".")).metadata,T=p.TokenMetadata.getForeground(I),A=p.TokenMetadata.getFontStyle(I);return{foreground:T,italic:!!(A&1),bold:!!(A&2),underline:!!(A&4),strikethrough:!!(A&8)}}}function s(h){return h===e.VS_LIGHT_THEME_NAME||h===e.VS_DARK_THEME_NAME||h===e.HC_BLACK_THEME_NAME||h===e.HC_LIGHT_THEME_NAME}function l(h){switch(h){case e.VS_LIGHT_THEME_NAME:return v.vs;case e.VS_DARK_THEME_NAME:return v.vs_dark;case e.HC_BLACK_THEME_NAME:return v.hc_black;case e.HC_LIGHT_THEME_NAME:return v.hc_light}}function o(h){const m=l(h);return new d(h,m)}class g extends n.Disposable{constructor(){super(),this._onColorThemeChange=this._register(new E.Emitter),this.onDidColorThemeChange=this._onColorThemeChange.event,this._onProductIconThemeChange=this._register(new E.Emitter),this.onDidProductIconThemeChange=this._onProductIconThemeChange.event,this._environment=Object.create(null),this._builtInProductIconTheme=new r.UnthemedProductIconTheme,this._autoDetectHighContrast=!0,this._knownThemes=new Map,this._knownThemes.set(e.VS_LIGHT_THEME_NAME,o(e.VS_LIGHT_THEME_NAME)),this._knownThemes.set(e.VS_DARK_THEME_NAME,o(e.VS_DARK_THEME_NAME)),this._knownThemes.set(e.HC_BLACK_THEME_NAME,o(e.HC_BLACK_THEME_NAME)),this._knownThemes.set(e.HC_LIGHT_THEME_NAME,o(e.HC_LIGHT_THEME_NAME));const m=this._register((0,r.getIconsStyleSheet)(this));this._codiconCSS=m.getCSS(),this._themeCSS="",this._allCSS=`${this._codiconCSS} ${this._themeCSS}`,this._globalStyleElement=null,this._styleElements=[],this._colorMapOverride=null,this.setTheme(e.VS_LIGHT_THEME_NAME),this._onOSSchemeChanged(),this._register(m.onDidChange(()=>{this._codiconCSS=m.getCSS(),this._updateCSS()})),(0,k.addMatchMediaChangeListener)(u.mainWindow,"(forced-colors: active)",()=>{this._onOSSchemeChanged()})}registerEditorContainer(m){return L.isInShadowDOM(m)?this._registerShadowDomContainer(m):this._registerRegularEditorContainer()}_registerRegularEditorContainer(){return this._globalStyleElement||(this._globalStyleElement=L.createStyleSheet(void 0,m=>{m.className="monaco-colors",m.textContent=this._allCSS}),this._styleElements.push(this._globalStyleElement)),n.Disposable.None}_registerShadowDomContainer(m){const C=L.createStyleSheet(m,w=>{w.className="monaco-colors",w.textContent=this._allCSS});return this._styleElements.push(C),{dispose:()=>{for(let w=0;w{w.base===m&&w.notifyBaseUpdated()}),this._theme.themeName===m&&this.setTheme(m)}getColorTheme(){return this._theme}setColorMapOverride(m){this._colorMapOverride=m,this._updateThemeOrColorMap()}setTheme(m){let C;this._knownThemes.has(m)?C=this._knownThemes.get(m):C=this._knownThemes.get(e.VS_LIGHT_THEME_NAME),this._updateActualTheme(C)}_updateActualTheme(m){!m||this._theme===m||(this._theme=m,this._updateThemeOrColorMap())}_onOSSchemeChanged(){if(this._autoDetectHighContrast){const m=u.mainWindow.matchMedia("(forced-colors: active)").matches;if(m!==(0,t.isHighContrast)(this._theme.type)){let C;(0,t.isDark)(this._theme.type)?C=m?e.HC_BLACK_THEME_NAME:e.VS_DARK_THEME_NAME:C=m?e.HC_LIGHT_THEME_NAME:e.VS_LIGHT_THEME_NAME,this._updateActualTheme(this._knownThemes.get(C))}}}setAutoDetectHighContrast(m){this._autoDetectHighContrast=m,this._onOSSchemeChanged()}_updateThemeOrColorMap(){const m=[],C={},w={addRule:T=>{C[T]||(m.push(T),C[T]=!0)}};c.getThemingParticipants().forEach(T=>T(this._theme,w,this._environment));const D=[];for(const T of f.getColors()){const A=this._theme.getColor(T.id,!0);A&&D.push(`${(0,a.asCssVariableName)(T.id)}: ${A.toString()};`)}w.addRule(`.monaco-editor, .monaco-diff-editor, .monaco-component { ${D.join(` `)} }`);const I=this._colorMapOverride||this._theme.tokenTheme.getColorMap();w.addRule((0,_.generateTokensCSSForColorMap)(I)),this._themeCSS=m.join(` `),this._updateCSS(),S.TokenizationRegistry.setColorMap(I),this._onColorThemeChange.fire(this._theme)}_updateCSS(){this._allCSS=`${this._codiconCSS} ${this._themeCSS}`,this._styleElements.forEach(m=>m.textContent=this._allCSS)}getFileIconTheme(){return{hasFileIcons:!1,hasFolderIcons:!1,hidesExplorerArrows:!1}}getProductIconTheme(){return this._builtInProductIconTheme}}e.StandaloneThemeService=g}),define(se[876],oe([1,0,16,137,96,89,372]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0});class p extends L.EditorAction{constructor(){super({id:"editor.action.toggleHighContrast",label:y.ToggleHighContrastNLS.toggleHighContrast,alias:"Toggle High Contrast Theme",precondition:void 0}),this._originalThemeName=null}run(v,b){const a=v.get(k.IStandaloneThemeService),i=a.getColorTheme();(0,E.isHighContrast)(i.type)?(a.setTheme(this._originalThemeName||((0,E.isDark)(i.type)?S.VS_DARK_THEME_NAME:S.VS_LIGHT_THEME_NAME)),this._originalThemeName=null):(a.setTheme((0,E.isDark)(i.type)?S.HC_BLACK_THEME_NAME:S.HC_LIGHT_THEME_NAME),this._originalThemeName=i.themeName)}}(0,L.registerEditorAction)(p)}),define(se[141],oe([1,0,7,46,135,325,42,218,2,17,733,30,756,15,59,8,34,50,92,23,28,89,20,29,106,69,488]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createActionViewItem=e.DropdownWithDefaultActionViewItem=e.SubmenuEntryActionViewItem=e.MenuEntryActionViewItem=e.createAndFillInActionBarActions=e.createAndFillInContextMenuActions=void 0;function C(M,R,x,O){const B=M.getActions(R),W=L.ModifierKeyEmitter.getInstance(),V=W.keyStatus.altKey||(v.isWindows||v.isLinux)&&W.keyStatus.shiftKey;D(B,x,V,O?K=>K===O:K=>K==="navigation")}e.createAndFillInContextMenuActions=C;function w(M,R,x,O,B,W){const V=M.getActions(R);D(V,x,!1,typeof O=="string"?F=>F===O:O,B,W)}e.createAndFillInActionBarActions=w;function D(M,R,x,O=V=>V==="navigation",B=()=>!1,W=!1){let V,K;Array.isArray(R)?(V=R,K=R):(V=R.primary,K=R.secondary);const F=new Set;for(const[q,ie]of M){let ae;O(q)?(ae=V,ae.length>0&&W&&ae.push(new S.Separator)):(ae=K,ae.length>0&&ae.push(new S.Separator));for(let ne of ie){x&&(ne=ne instanceof a.MenuItemAction&&ne.alt?ne.alt:ne);const $=ae.push(ne);ne instanceof S.SubmenuAction&&F.add({group:q,action:ne,index:$-1})}}for(const{group:q,action:ie,index:ae}of F){const ne=O(q)?V:K,$=ie.actions;B(ie,q,ne.length)&&ne.splice(ae,1,...$)}}let I=class extends y.ActionViewItem{constructor(R,x,O,B,W,V,K,F){super(void 0,R,{icon:!!(R.class||R.item.icon),label:!R.class&&!R.item.icon,draggable:x?.draggable,keybinding:x?.keybinding,hoverDelegate:x?.hoverDelegate}),this._keybindingService=O,this._notificationService=B,this._contextKeyService=W,this._themeService=V,this._contextMenuService=K,this._accessibilityService=F,this._wantsAltCommand=!1,this._itemClassDispose=this._register(new _.MutableDisposable),this._altKey=L.ModifierKeyEmitter.getInstance()}get _menuItemAction(){return this._action}get _commandAction(){return this._wantsAltCommand&&this._menuItemAction.alt||this._menuItemAction}async onClick(R){R.preventDefault(),R.stopPropagation();try{await this.actionRunner.run(this._commandAction,this._context)}catch(x){this._notificationService.error(x)}}render(R){if(super.render(R),R.classList.add("menu-entry"),this.options.icon&&this._updateItemClass(this._menuItemAction.item),this._menuItemAction.alt){let x=!1;const O=()=>{var B;const W=!!(!((B=this._menuItemAction.alt)===null||B===void 0)&&B.enabled)&&(!this._accessibilityService.isMotionReduced()||x)&&(this._altKey.keyStatus.altKey||this._altKey.keyStatus.shiftKey&&x);W!==this._wantsAltCommand&&(this._wantsAltCommand=W,this.updateLabel(),this.updateTooltip(),this.updateClass())};this._register(this._altKey.event(O)),this._register((0,L.addDisposableListener)(R,"mouseleave",B=>{x=!1,O()})),this._register((0,L.addDisposableListener)(R,"mouseenter",B=>{x=!0,O()})),O()}}updateLabel(){this.options.label&&this.label&&(this.label.textContent=this._commandAction.label)}getTooltip(){var R;const x=this._keybindingService.lookupKeybinding(this._commandAction.id,this._contextKeyService),O=x&&x.getLabel(),B=this._commandAction.tooltip||this._commandAction.label;let W=O?(0,b.localize)(0,null,B,O):B;if(!this._wantsAltCommand&&(!((R=this._menuItemAction.alt)===null||R===void 0)&&R.enabled)){const V=this._menuItemAction.alt.tooltip||this._menuItemAction.alt.label,K=this._keybindingService.lookupKeybinding(this._menuItemAction.alt.id,this._contextKeyService),F=K&&K.getLabel(),q=F?(0,b.localize)(1,null,V,F):V;W=(0,b.localize)(2,null,W,p.UILabelProvider.modifierLabels[v.OS].altKey,q)}return W}updateClass(){this.options.icon&&(this._commandAction!==this._menuItemAction?this._menuItemAction.alt&&this._updateItemClass(this._menuItemAction.alt.item):this._updateItemClass(this._menuItemAction.item))}_updateItemClass(R){this._itemClassDispose.value=void 0;const{element:x,label:O}=this;if(!x||!O)return;const B=this._commandAction.checked&&(0,i.isICommandActionToggleInfo)(R.toggled)&&R.toggled.icon?R.toggled.icon:R.icon;if(B)if(s.ThemeIcon.isThemeIcon(B)){const W=s.ThemeIcon.asClassNameArray(B);O.classList.add(...W),this._itemClassDispose.value=(0,_.toDisposable)(()=>{O.classList.remove(...W)})}else O.style.backgroundImage=(0,l.isDark)(this._themeService.getColorTheme().type)?(0,L.asCSSUrl)(B.dark):(0,L.asCSSUrl)(B.light),O.classList.add("icon"),this._itemClassDispose.value=(0,_.combinedDisposable)((0,_.toDisposable)(()=>{O.style.backgroundImage="",O.classList.remove("icon")}),this._themeService.onDidColorThemeChange(()=>{this.updateClass()}))}};e.MenuEntryActionViewItem=I,e.MenuEntryActionViewItem=I=ke([ge(2,u.IKeybindingService),ge(3,f.INotificationService),ge(4,n.IContextKeyService),ge(5,d.IThemeService),ge(6,t.IContextMenuService),ge(7,m.IAccessibilityService)],I);let T=class extends E.DropdownMenuActionViewItem{constructor(R,x,O,B,W){var V,K,F;const q={...x,menuAsChild:(V=x?.menuAsChild)!==null&&V!==void 0?V:!1,classNames:(K=x?.classNames)!==null&&K!==void 0?K:s.ThemeIcon.isThemeIcon(R.item.icon)?s.ThemeIcon.asClassName(R.item.icon):void 0,keybindingProvider:(F=x?.keybindingProvider)!==null&&F!==void 0?F:ie=>O.lookupKeybinding(ie.id)};super(R,{getActions:()=>R.actions},B,q),this._keybindingService=O,this._contextMenuService=B,this._themeService=W}render(R){super.render(R),(0,o.assertType)(this.element),R.classList.add("menu-entry");const x=this._action,{icon:O}=x.item;if(O&&!s.ThemeIcon.isThemeIcon(O)){this.element.classList.add("icon");const B=()=>{this.element&&(this.element.style.backgroundImage=(0,l.isDark)(this._themeService.getColorTheme().type)?(0,L.asCSSUrl)(O.dark):(0,L.asCSSUrl)(O.light))};B(),this._register(this._themeService.onDidColorThemeChange(()=>{B()}))}}};e.SubmenuEntryActionViewItem=T,e.SubmenuEntryActionViewItem=T=ke([ge(2,u.IKeybindingService),ge(3,t.IContextMenuService),ge(4,d.IThemeService)],T);let A=class extends y.BaseActionViewItem{constructor(R,x,O,B,W,V,K,F){var q,ie,ae;super(null,R),this._keybindingService=O,this._notificationService=B,this._contextMenuService=W,this._menuService=V,this._instaService=K,this._storageService=F,this._container=null,this._options=x,this._storageKey=`${R.item.submenu.id}_lastActionId`;let ne;const $=x?.persistLastActionId?F.get(this._storageKey,1):void 0;$&&(ne=R.actions.find(Q=>$===Q.id)),ne||(ne=R.actions[0]),this._defaultAction=this._instaService.createInstance(I,ne,{keybinding:this._getDefaultActionKeybindingLabel(ne)});const J={keybindingProvider:Q=>this._keybindingService.lookupKeybinding(Q.id),...x,menuAsChild:(q=x?.menuAsChild)!==null&&q!==void 0?q:!0,classNames:(ie=x?.classNames)!==null&&ie!==void 0?ie:["codicon","codicon-chevron-down"],actionRunner:(ae=x?.actionRunner)!==null&&ae!==void 0?ae:new S.ActionRunner};this._dropdown=new E.DropdownMenuActionViewItem(R,R.actions,this._contextMenuService,J),this._register(this._dropdown.actionRunner.onDidRun(Q=>{Q.action instanceof a.MenuItemAction&&this.update(Q.action)}))}update(R){var x;!((x=this._options)===null||x===void 0)&&x.persistLastActionId&&this._storageService.store(this._storageKey,R.id,1,1),this._defaultAction.dispose(),this._defaultAction=this._instaService.createInstance(I,R,{keybinding:this._getDefaultActionKeybindingLabel(R)}),this._defaultAction.actionRunner=new class extends S.ActionRunner{async runAction(O,B){await O.run(void 0)}},this._container&&this._defaultAction.render((0,L.prepend)(this._container,(0,L.$)(".action-container")))}_getDefaultActionKeybindingLabel(R){var x;let O;if(!((x=this._options)===null||x===void 0)&&x.renderKeybindingWithDefaultActionLabel){const B=this._keybindingService.lookupKeybinding(R.id);B&&(O=`(${B.getLabel()})`)}return O}setActionContext(R){super.setActionContext(R),this._defaultAction.setActionContext(R),this._dropdown.setActionContext(R)}render(R){this._container=R,super.render(this._container),this._container.classList.add("monaco-dropdown-with-default");const x=(0,L.$)(".action-container");this._defaultAction.render((0,L.append)(this._container,x)),this._register((0,L.addDisposableListener)(x,L.EventType.KEY_DOWN,B=>{const W=new k.StandardKeyboardEvent(B);W.equals(17)&&(this._defaultAction.element.tabIndex=-1,this._dropdown.focus(),W.stopPropagation())}));const O=(0,L.$)(".dropdown-action-container");this._dropdown.render((0,L.append)(this._container,O)),this._register((0,L.addDisposableListener)(O,L.EventType.KEY_DOWN,B=>{var W;const V=new k.StandardKeyboardEvent(B);V.equals(15)&&(this._defaultAction.element.tabIndex=0,this._dropdown.setFocusable(!1),(W=this._defaultAction.element)===null||W===void 0||W.focus(),V.stopPropagation())}))}focus(R){R?this._dropdown.focus():(this._defaultAction.element.tabIndex=0,this._defaultAction.element.focus())}blur(){this._defaultAction.element.tabIndex=-1,this._dropdown.blur(),this._container.blur()}setFocusable(R){R?this._defaultAction.element.tabIndex=0:(this._defaultAction.element.tabIndex=-1,this._dropdown.setFocusable(!1))}dispose(){this._defaultAction.dispose(),this._dropdown.dispose(),super.dispose()}};e.DropdownWithDefaultActionViewItem=A,e.DropdownWithDefaultActionViewItem=A=ke([ge(2,u.IKeybindingService),ge(3,f.INotificationService),ge(4,t.IContextMenuService),ge(5,a.IMenuService),ge(6,r.IInstantiationService),ge(7,c.IStorageService)],A);let P=class extends y.SelectActionViewItem{constructor(R,x){super(null,R,R.actions.map(O=>({text:O.id===S.Separator.ID?"\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500":O.label,isDisabled:!O.enabled})),0,x,h.defaultSelectBoxStyles,{ariaLabel:R.tooltip,optionsAsChildren:!0}),this.select(Math.max(0,R.actions.findIndex(O=>O.checked)))}render(R){super.render(R),R.style.borderColor=(0,g.asCssVariable)(g.selectBorder)}runAction(R,x){const O=this.action.actions[x];O&&this.actionRunner.run(O)}};P=ke([ge(1,t.IContextViewService)],P);function N(M,R,x){return R instanceof a.MenuItemAction?M.createInstance(I,R,x):R instanceof a.SubmenuItemAction?R.item.isSelection?M.createInstance(P,R):R.item.rememberDefaultAction?M.createInstance(A,R,{...x,persistLastActionId:!0}):M.createInstance(T,R,x):void 0}e.createActionViewItem=N}),define(se[877],oe([1,0,7,78,2,721,141,30,15,8]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestWidgetStatus=void 0;class b extends S.MenuEntryActionViewItem{updateLabel(){const n=this._keybindingService.lookupKeybinding(this._action.id,this._contextKeyService);if(!n)return super.updateLabel();this.label&&(this.label.textContent=(0,E.localize)(0,null,this._action.label,b.symbolPrintEnter(n)))}static symbolPrintEnter(n){var t;return(t=n.getLabel())===null||t===void 0?void 0:t.replace(/\benter\b/gi,"\u23CE")}}let a=class{constructor(n,t,r,u,f){this._menuId=t,this._menuService=u,this._contextKeyService=f,this._menuDisposables=new y.DisposableStore,this.element=L.append(n,L.$(".suggest-status-bar"));const c=d=>d instanceof p.MenuItemAction?r.createInstance(b,d,void 0):void 0;this._leftActions=new k.ActionBar(this.element,{actionViewItemProvider:c}),this._rightActions=new k.ActionBar(this.element,{actionViewItemProvider:c}),this._leftActions.domNode.classList.add("left"),this._rightActions.domNode.classList.add("right")}dispose(){this._menuDisposables.dispose(),this._leftActions.dispose(),this._rightActions.dispose(),this.element.remove()}show(){const n=this._menuService.createMenu(this._menuId,this._contextKeyService),t=()=>{const r=[],u=[];for(const[f,c]of n.getActions())f==="left"?r.push(...c):u.push(...c);this._leftActions.clear(),this._leftActions.push(r),this._rightActions.clear(),this._rightActions.push(u)};this._menuDisposables.add(n.onDidChange(()=>t())),this._menuDisposables.add(n)}hide(){this._menuDisposables.clear()}};e.SuggestWidgetStatus=a,e.SuggestWidgetStatus=a=ke([ge(2,v.IInstantiationService),ge(3,p.IMenuService),ge(4,_.IContextKeyService)],a)}),define(se[373],oe([1,0,7,67,600,42,13,268,12,6,52,2,734,141,30,15,59,34,81]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MenuWorkbenchToolBar=e.WorkbenchToolBar=void 0;let d=class extends y.ToolBar{constructor(o,g,h,m,C,w,D){super(o,C,{getKeyBinding:T=>{var A;return(A=w.lookupKeybinding(T.id))!==null&&A!==void 0?A:void 0},...g,allowContextMenu:!0,skipTelemetry:typeof g?.telemetrySource=="string"}),this._options=g,this._menuService=h,this._contextKeyService=m,this._contextMenuService=C,this._sessionDisposables=this._store.add(new a.DisposableStore);const I=g?.telemetrySource;I&&this._store.add(this.actionBar.onDidRun(T=>D.publicLog2("workbenchActionExecuted",{id:T.action.id,from:I})))}setActions(o,g=[],h){var m,C,w;this._sessionDisposables.clear();const D=o.slice(),I=g.slice(),T=[];let A=0;const P=[];let N=!1;if(((m=this._options)===null||m===void 0?void 0:m.hiddenItemStrategy)!==-1)for(let M=0;MO?.id)),R=this._options.overflowBehavior.maxItems-M.size;let x=0;for(let O=0;O=R&&(D[O]=void 0,P[O]=B))}}(0,S.coalesceInPlace)(D),(0,S.coalesceInPlace)(P),super.setActions(D,E.Separator.join(P,I)),T.length>0&&this._sessionDisposables.add((0,L.addDisposableListener)(this.getElement(),"contextmenu",M=>{var R,x,O,B,W;const V=new k.StandardMouseEvent((0,L.getWindow)(this.getElement()),M),K=this.getItemAction(V.target);if(!K)return;V.preventDefault(),V.stopPropagation();let F=!1;if(A===1&&((R=this._options)===null||R===void 0?void 0:R.hiddenItemStrategy)===0){F=!0;for(let ae=0;aethis._menuService.resetHiddenStates(h)}))),this._contextMenuService.showContextMenu({getAnchor:()=>V,getActions:()=>ie,menuId:(O=this._options)===null||O===void 0?void 0:O.contextMenu,menuActionOptions:{renderShortTitle:!0,...(B=this._options)===null||B===void 0?void 0:B.menuOptions},skipTelemetry:typeof((W=this._options)===null||W===void 0?void 0:W.telemetrySource)=="string",contextKeyService:this._contextKeyService})}))}};e.WorkbenchToolBar=d,e.WorkbenchToolBar=d=ke([ge(2,t.IMenuService),ge(3,r.IContextKeyService),ge(4,u.IContextMenuService),ge(5,f.IKeybindingService),ge(6,c.ITelemetryService)],d);let s=class extends d{constructor(o,g,h,m,C,w,D,I){super(o,{resetMenu:g,...h},m,C,w,D,I),this._onDidChangeMenuItems=this._store.add(new v.Emitter);const T=this._store.add(m.createMenu(g,C,{emitEventsForSubmenuChanges:!0})),A=()=>{var P,N,M;const R=[],x=[];(0,n.createAndFillInActionBarActions)(T,h?.menuOptions,{primary:R,secondary:x},(P=h?.toolbarOptions)===null||P===void 0?void 0:P.primaryGroup,(N=h?.toolbarOptions)===null||N===void 0?void 0:N.shouldInlineSubmenu,(M=h?.toolbarOptions)===null||M===void 0?void 0:M.useSeparatorsInPrimaryActions),o.classList.toggle("has-no-actions",R.length===0&&x.length===0),super.setActions(R,x)};this._store.add(T.onDidChange(()=>{A(),this._onDidChangeMenuItems.fire(this)})),A()}setActions(){throw new _.BugIndicatingError("This toolbar is populated from a menu.")}};e.MenuWorkbenchToolBar=s,e.MenuWorkbenchToolBar=s=ke([ge(3,t.IMenuService),ge(4,r.IContextKeyService),ge(5,u.IContextMenuService),ge(6,f.IKeybindingService),ge(7,c.ITelemetryService)],s)}),define(se[257],oe([1,0,7,135,224,42,13,14,26,2,35,17,28,10,31,216,697,141,373,30,25,15,59,8,34,81,82,468]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C){"use strict";var w;Object.defineProperty(e,"__esModule",{value:!0}),e.CustomizedMenuWorkbenchToolBar=e.InlineSuggestionHintsContentWidget=e.InlineCompletionsHintsWidget=void 0;let D=class extends v.Disposable{constructor(x,O,B){super(),this.editor=x,this.model=O,this.instantiationService=B,this.alwaysShowToolbar=(0,b.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(62).showToolbar==="always"),this.sessionPosition=void 0,this.position=(0,b.derived)(this,W=>{var V,K,F;const q=(V=this.model.read(W))===null||V===void 0?void 0:V.ghostText.read(W);if(!this.alwaysShowToolbar.read(W)||!q||q.parts.length===0)return this.sessionPosition=void 0,null;const ie=q.parts[0].column;this.sessionPosition&&this.sessionPosition.lineNumber!==q.lineNumber&&(this.sessionPosition=void 0);const ae=new n.Position(q.lineNumber,Math.min(ie,(F=(K=this.sessionPosition)===null||K===void 0?void 0:K.column)!==null&&F!==void 0?F:Number.MAX_SAFE_INTEGER));return this.sessionPosition=ae,ae}),this._register((0,b.autorunWithStore)((W,V)=>{const K=this.model.read(W);if(!K||!this.alwaysShowToolbar.read(W))return;const F=V.add(this.instantiationService.createInstance(A,this.editor,!0,this.position,K.selectedInlineCompletionIndex,K.inlineCompletionsCount,K.selectedInlineCompletion.map(q=>{var ie;return(ie=q?.inlineCompletion.source.inlineCompletions.commands)!==null&&ie!==void 0?ie:[]})));x.addContentWidget(F),V.add((0,v.toDisposable)(()=>x.removeContentWidget(F))),V.add((0,b.autorun)(q=>{this.position.read(q)&&K.lastTriggerKind.read(q)!==t.InlineCompletionTriggerKind.Explicit&&K.triggerExplicitly()}))}))}};e.InlineCompletionsHintsWidget=D,e.InlineCompletionsHintsWidget=D=ke([ge(2,g.IInstantiationService)],D);const I=(0,C.registerIcon)("inline-suggestion-hints-next",_.Codicon.chevronRight,(0,u.localize)(0,null)),T=(0,C.registerIcon)("inline-suggestion-hints-previous",_.Codicon.chevronLeft,(0,u.localize)(1,null));let A=w=class extends v.Disposable{static get dropDownVisible(){return this._dropDownVisible}createCommandAction(x,O,B){const W=new E.Action(x,O,B,!0,()=>this._commandService.executeCommand(x)),V=this.keybindingService.lookupKeybinding(x,this._contextKeyService);let K=O;return V&&(K=(0,u.localize)(2,null,O,V.getLabel())),W.tooltip=K,W}constructor(x,O,B,W,V,K,F,q,ie,ae,ne){super(),this.editor=x,this.withBorder=O,this._position=B,this._currentSuggestionIdx=W,this._suggestionCount=V,this._extraCommands=K,this._commandService=F,this.keybindingService=ie,this._contextKeyService=ae,this._menuService=ne,this.id=`InlineSuggestionHintsContentWidget${w.id++}`,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this.nodes=(0,L.h)("div.inlineSuggestionsHints",{className:this.withBorder?".withBorder":""},[(0,L.h)("div@toolBar")]),this.previousAction=this.createCommandAction(r.showPreviousInlineSuggestionActionId,(0,u.localize)(3,null),i.ThemeIcon.asClassName(T)),this.availableSuggestionCountAction=new E.Action("inlineSuggestionHints.availableSuggestionCount","",void 0,!1),this.nextAction=this.createCommandAction(r.showNextInlineSuggestionActionId,(0,u.localize)(4,null),i.ThemeIcon.asClassName(I)),this.inlineCompletionsActionsMenus=this._register(this._menuService.createMenu(d.MenuId.InlineCompletionsActions,this._contextKeyService)),this.clearAvailableSuggestionCountLabelDebounced=this._register(new p.RunOnceScheduler(()=>{this.availableSuggestionCountAction.label=""},100)),this.disableButtonsDebounced=this._register(new p.RunOnceScheduler(()=>{this.previousAction.enabled=this.nextAction.enabled=!1},100)),this.lastCommands=[],this.toolBar=this._register(q.createInstance(M,this.nodes.toolBar,d.MenuId.InlineSuggestionToolbar,{menuOptions:{renderShortTitle:!0},toolbarOptions:{primaryGroup:$=>$.startsWith("primary")},actionViewItemProvider:($,J)=>{if($ instanceof d.MenuItemAction)return q.createInstance(N,$,void 0);if($===this.availableSuggestionCountAction){const Q=new P(void 0,$,{label:!0,icon:!1});return Q.setClass("availableSuggestionCount"),Q}},telemetrySource:"InlineSuggestionToolbar"})),this.toolBar.setPrependedPrimaryActions([this.previousAction,this.availableSuggestionCountAction,this.nextAction]),this._register(this.toolBar.onDidChangeDropdownVisibility($=>{w._dropDownVisible=$})),this._register((0,b.autorun)($=>{this._position.read($),this.editor.layoutContentWidget(this)})),this._register((0,b.autorun)($=>{const J=this._suggestionCount.read($),Q=this._currentSuggestionIdx.read($);J!==void 0?(this.clearAvailableSuggestionCountLabelDebounced.cancel(),this.availableSuggestionCountAction.label=`${Q+1}/${J}`):this.clearAvailableSuggestionCountLabelDebounced.schedule(),J!==void 0&&J>1?(this.disableButtonsDebounced.cancel(),this.previousAction.enabled=this.nextAction.enabled=!0):this.disableButtonsDebounced.schedule()})),this._register((0,b.autorun)($=>{const J=this._extraCommands.read($);if((0,S.equals)(this.lastCommands,J))return;this.lastCommands=J;const Q=J.map(re=>({class:void 0,id:re.id,enabled:!0,tooltip:re.tooltip||"",label:re.title,run:de=>this._commandService.executeCommand(re.id)}));for(const[re,de]of this.inlineCompletionsActionsMenus.getActions())for(const he of de)he instanceof d.MenuItemAction&&Q.push(he);Q.length>0&&Q.unshift(new E.Separator),this.toolBar.setAdditionalSecondaryActions(Q)}))}getId(){return this.id}getDomNode(){return this.nodes.root}getPosition(){return{position:this._position.get(),preference:[1,2],positionAffinity:3}}};e.InlineSuggestionHintsContentWidget=A,A._dropDownVisible=!1,A.id=0,e.InlineSuggestionHintsContentWidget=A=w=ke([ge(6,s.ICommandService),ge(7,g.IInstantiationService),ge(8,h.IKeybindingService),ge(9,l.IContextKeyService),ge(10,d.IMenuService)],A);class P extends k.ActionViewItem{constructor(){super(...arguments),this._className=void 0}setClass(x){this._className=x}render(x){super.render(x),this._className&&x.classList.add(this._className)}updateTooltip(){}}class N extends f.MenuEntryActionViewItem{updateLabel(){const x=this._keybindingService.lookupKeybinding(this._action.id,this._contextKeyService);if(!x)return super.updateLabel();if(this.label){const O=(0,L.h)("div.keybinding").root;new y.KeybindingLabel(O,a.OS,{disableTitle:!0,...y.unthemedKeybindingLabelOptions}).set(x),this.label.textContent=this._action.label,this.label.appendChild(O),this.label.classList.add("inlineSuggestionStatusBarItemLabel")}}updateTooltip(){}}let M=class extends c.WorkbenchToolBar{constructor(x,O,B,W,V,K,F,q){super(x,{resetMenu:O,...B},W,V,K,F,q),this.menuId=O,this.options2=B,this.menuService=W,this.contextKeyService=V,this.menu=this._store.add(this.menuService.createMenu(this.menuId,this.contextKeyService,{emitEventsForSubmenuChanges:!0})),this.additionalActions=[],this.prependedPrimaryActions=[],this._store.add(this.menu.onDidChange(()=>this.updateToolbar())),this.updateToolbar()}updateToolbar(){var x,O,B,W,V,K,F;const q=[],ie=[];(0,f.createAndFillInActionBarActions)(this.menu,(x=this.options2)===null||x===void 0?void 0:x.menuOptions,{primary:q,secondary:ie},(B=(O=this.options2)===null||O===void 0?void 0:O.toolbarOptions)===null||B===void 0?void 0:B.primaryGroup,(V=(W=this.options2)===null||W===void 0?void 0:W.toolbarOptions)===null||V===void 0?void 0:V.shouldInlineSubmenu,(F=(K=this.options2)===null||K===void 0?void 0:K.toolbarOptions)===null||F===void 0?void 0:F.useSeparatorsInPrimaryActions),ie.push(...this.additionalActions),q.unshift(...this.prependedPrimaryActions),this.setActions(q,ie)}setPrependedPrimaryActions(x){(0,S.equals)(this.prependedPrimaryActions,x,(O,B)=>O===B)||(this.prependedPrimaryActions=x,this.updateToolbar())}setAdditionalSecondaryActions(x){(0,S.equals)(this.additionalActions,x,(O,B)=>O===B)||(this.additionalActions=x,this.updateToolbar())}};e.CustomizedMenuWorkbenchToolBar=M,e.CustomizedMenuWorkbenchToolBar=M=ke([ge(3,d.IMenuService),ge(4,l.IContextKeyService),ge(5,o.IContextMenuService),ge(6,h.IKeybindingService),ge(7,m.ITelemetryService)],M)}),define(se[878],oe([1,0,7,42,6,2,141,30,15,34,50,81,840,59]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ContextMenuMenuDelegate=e.ContextMenuService=void 0;let t=class extends E.Disposable{get contextMenuHandler(){return this._contextMenuHandler||(this._contextMenuHandler=new i.ContextMenuHandler(this.contextViewService,this.telemetryService,this.notificationService,this.keybindingService)),this._contextMenuHandler}constructor(f,c,d,s,l,o){super(),this.telemetryService=f,this.notificationService=c,this.contextViewService=d,this.keybindingService=s,this.menuService=l,this.contextKeyService=o,this._contextMenuHandler=void 0,this._onDidShowContextMenu=this._store.add(new y.Emitter),this.onDidShowContextMenu=this._onDidShowContextMenu.event,this._onDidHideContextMenu=this._store.add(new y.Emitter)}configure(f){this.contextMenuHandler.configure(f)}showContextMenu(f){f=r.transform(f,this.menuService,this.contextKeyService),this.contextMenuHandler.showContextMenu({...f,onHide:c=>{var d;(d=f.onHide)===null||d===void 0||d.call(f,c),this._onDidHideContextMenu.fire()}}),L.ModifierKeyEmitter.getInstance().resetKeyStatus(),this._onDidShowContextMenu.fire()}};e.ContextMenuService=t,e.ContextMenuService=t=ke([ge(0,a.ITelemetryService),ge(1,b.INotificationService),ge(2,n.IContextViewService),ge(3,v.IKeybindingService),ge(4,p.IMenuService),ge(5,_.IContextKeyService)],t);var r;(function(u){function f(d){return d&&d.menuId instanceof p.MenuId}function c(d,s,l){if(!f(d))return d;const{menuId:o,menuActionOptions:g,contextKeyService:h}=d;return{...d,getActions:()=>{const m=[];if(o){const C=s.createMenu(o,h??l);(0,S.createAndFillInContextMenuActions)(C,g,m),C.dispose()}return d.getActions?k.Separator.join(d.getActions(),m):m}}}u.transform=c})(r||(e.ContextMenuMenuDelegate=r={}))}),define(se[879],oe([1,0,19,6,15,8,123,192,57,803,106,29,23,367,850,27,244]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputService=void 0;let f=class extends i.Themable{get controller(){return this._controller||(this._controller=this._register(this.createController())),this._controller}get hasController(){return!!this._controller}get quickAccess(){return this._quickAccess||(this._quickAccess=this._register(this.instantiationService.createInstance(v.QuickAccessController))),this._quickAccess}constructor(d,s,l,o,g,h){super(l),this.instantiationService=d,this.contextKeyService=s,this.layoutService=o,this.configurationService=g,this.hoverService=h,this._onShow=this._register(new k.Emitter),this._onHide=this._register(new k.Emitter),this.contexts=new Map}createController(d=this.layoutService,s){const l={idPrefix:"quickInput_",container:d.activeContainer,ignoreFocusOut:()=>!1,backKeybindingLabel:()=>{},setContextKey:g=>this.setContextKey(g),linkOpenerDelegate:g=>{this.instantiationService.invokeFunction(h=>{h.get(_.IOpenerService).open(g,{allowCommands:!0,fromUserGesture:!0})})},returnFocus:()=>d.focus(),createList:(g,h,m,C,w)=>this.instantiationService.createInstance(p.WorkbenchList,g,h,m,C,w),styles:this.computeStyles(),hoverDelegate:new n.QuickInputHoverDelegate(this.configurationService,this.hoverService)},o=this._register(new t.QuickInputController({...l,...s},this.themeService,this.layoutService));return o.layout(d.activeContainerDimension,d.activeContainerOffset.quickPickTop),this._register(d.onDidLayoutActiveContainer(g=>o.layout(g,d.activeContainerOffset.quickPickTop))),this._register(d.onDidChangeActiveContainer(()=>{o.isVisible()||o.layout(d.activeContainerDimension,d.activeContainerOffset.quickPickTop)})),this._register(o.onShow(()=>{this.resetContextKeys(),this._onShow.fire()})),this._register(o.onHide(()=>{this.resetContextKeys(),this._onHide.fire()})),o}setContextKey(d){let s;d&&(s=this.contexts.get(d),s||(s=new y.RawContextKey(d,!1).bindTo(this.contextKeyService),this.contexts.set(d,s))),!(s&&s.get())&&(this.resetContextKeys(),s?.set(!0))}resetContextKeys(){this.contexts.forEach(d=>{d.get()&&d.reset()})}pick(d,s={},l=L.CancellationToken.None){return this.controller.pick(d,s,l)}createQuickPick(){return this.controller.createQuickPick()}createInputBox(){return this.controller.createInputBox()}updateStyles(){this.hasController&&this.controller.applyStyles(this.computeStyles())}computeStyles(){return{widget:{quickInputBackground:(0,a.asCssVariable)(a.quickInputBackground),quickInputForeground:(0,a.asCssVariable)(a.quickInputForeground),quickInputTitleBackground:(0,a.asCssVariable)(a.quickInputTitleBackground),widgetBorder:(0,a.asCssVariable)(a.widgetBorder),widgetShadow:(0,a.asCssVariable)(a.widgetShadow)},inputBox:b.defaultInputBoxStyles,toggle:b.defaultToggleStyles,countBadge:b.defaultCountBadgeStyles,button:b.defaultButtonStyles,progressBar:b.defaultProgressBarStyles,keybindingLabel:b.defaultKeybindingLabelStyles,list:(0,b.getListStyles)({listBackground:a.quickInputBackground,listFocusBackground:a.quickInputListFocusBackground,listFocusForeground:a.quickInputListFocusForeground,listInactiveFocusForeground:a.quickInputListFocusForeground,listInactiveSelectionIconForeground:a.quickInputListFocusIconForeground,listInactiveFocusBackground:a.quickInputListFocusBackground,listFocusOutline:a.activeContrastBorder,listInactiveFocusOutline:a.activeContrastBorder}),pickerGroup:{pickerGroupBorder:(0,a.asCssVariable)(a.pickerGroupBorder),pickerGroupForeground:(0,a.asCssVariable)(a.pickerGroupForeground)}}}};e.QuickInputService=f,e.QuickInputService=f=ke([ge(0,E.IInstantiationService),ge(1,y.IContextKeyService),ge(2,i.IThemeService),ge(3,S.ILayoutService),ge(4,r.IConfigurationService),ge(5,u.IHoverService)],f)}),define(se[880],oe([1,0,6,16,23,19,8,15,349,33,879,108,27,244,486]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.QuickInputEditorWidget=e.QuickInputEditorContribution=e.StandaloneQuickInputService=void 0;let t=class extends b.QuickInputService{constructor(d,s,l,o,g,h,m){super(s,l,o,new _.EditorScopedLayoutService(d.getContainerDomNode(),g),h,m),this.host=void 0;const C=u.get(d);if(C){const w=C.widget;this.host={_serviceBrand:void 0,get mainContainer(){return w.getDomNode()},getContainer(){return w.getDomNode()},get containers(){return[w.getDomNode()]},get activeContainer(){return w.getDomNode()},get mainContainerDimension(){return d.getLayoutInfo()},get activeContainerDimension(){return d.getLayoutInfo()},get onDidLayoutMainContainer(){return d.onDidLayoutChange},get onDidLayoutActiveContainer(){return d.onDidLayoutChange},get onDidLayoutContainer(){return L.Event.map(d.onDidLayoutChange,D=>({container:w.getDomNode(),dimension:D}))},get onDidChangeActiveContainer(){return L.Event.None},get onDidAddContainer(){return L.Event.None},get whenActiveContainerStylesLoaded(){return Promise.resolve()},get mainContainerOffset(){return{top:0,quickPickTop:0}},get activeContainerOffset(){return{top:0,quickPickTop:0}},focus:()=>d.focus()}}else this.host=void 0}createController(){return super.createController(this.host)}};t=ke([ge(1,S.IInstantiationService),ge(2,p.IContextKeyService),ge(3,y.IThemeService),ge(4,v.ICodeEditorService),ge(5,i.IConfigurationService),ge(6,n.IHoverService)],t);let r=class{get activeService(){const d=this.codeEditorService.getFocusedCodeEditor();if(!d)throw new Error("Quick input service needs a focused editor to work.");let s=this.mapEditorToService.get(d);if(!s){const l=s=this.instantiationService.createInstance(t,d);this.mapEditorToService.set(d,s),(0,a.createSingleCallFunction)(d.onDidDispose)(()=>{l.dispose(),this.mapEditorToService.delete(d)})}return s}get quickAccess(){return this.activeService.quickAccess}constructor(d,s){this.instantiationService=d,this.codeEditorService=s,this.mapEditorToService=new Map}pick(d,s={},l=E.CancellationToken.None){return this.activeService.pick(d,s,l)}createQuickPick(){return this.activeService.createQuickPick()}createInputBox(){return this.activeService.createInputBox()}};e.StandaloneQuickInputService=r,e.StandaloneQuickInputService=r=ke([ge(0,S.IInstantiationService),ge(1,v.ICodeEditorService)],r);class u{static get(d){return d.getContribution(u.ID)}constructor(d){this.editor=d,this.widget=new f(this.editor)}dispose(){this.widget.dispose()}}e.QuickInputEditorContribution=u,u.ID="editor.controller.quickInput";class f{constructor(d){this.codeEditor=d,this.domNode=document.createElement("div"),this.codeEditor.addOverlayWidget(this)}getId(){return f.ID}getDomNode(){return this.domNode}getPosition(){return{preference:2}}dispose(){this.codeEditor.removeOverlayWidget(this)}}e.QuickInputEditorWidget=f,f.ID="editor.contrib.quickInputWidget",(0,k.registerEditorContribution)(u.ID,u,4)}),define(se[193],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UndoRedoSource=e.UndoRedoGroup=e.ResourceEditStackSnapshot=e.IUndoRedoService=void 0,e.IUndoRedoService=(0,L.createDecorator)("undoRedoService");class k{constructor(p,_){this.resource=p,this.elements=_}}e.ResourceEditStackSnapshot=k;class y{constructor(){this.id=y._ID++,this.order=1}nextOrder(){return this.id===0?0:this.order++}}e.UndoRedoGroup=y,y._ID=0,y.None=new y;class E{constructor(){this.id=E._ID++,this.order=1}nextOrder(){return this.id===0?0:this.order++}}e.UndoRedoSource=E,E._ID=0,E.None=new E}),define(se[38],oe([1,0,13,39,12,6,2,11,22,129,203,62,10,5,24,179,43,32,41,613,863,340,297,524,525,331,614,184,642,114,193]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){"use strict";var A;Object.defineProperty(e,"__esModule",{value:!0}),e.AttachedViews=e.ModelDecorationOptions=e.ModelDecorationInjectedTextOptions=e.ModelDecorationMinimapOptions=e.ModelDecorationGlyphMarginOptions=e.ModelDecorationOverviewRulerOptions=e.TextModel=e.createTextBuffer=e.createTextBufferFactoryFromSnapshot=e.createTextBufferFactory=void 0;function P(Y){const j=new C.PieceTreeTextBufferBuilder;return j.acceptChunk(Y),j.finish()}e.createTextBufferFactory=P;function N(Y){const j=new C.PieceTreeTextBufferBuilder;let Z;for(;typeof(Z=Y.read())=="string";)j.acceptChunk(Z);return j.finish()}e.createTextBufferFactoryFromSnapshot=N;function M(Y,j){let Z;return typeof Y=="string"?Z=P(Y):c.isITextSnapshot(Y)?Z=N(Y):Z=Y,Z.create(j)}e.createTextBuffer=M;let R=0;const x=999,O=1e4;class B{constructor(j){this._source=j,this._eos=!1}read(){if(this._eos)return null;const j=[];let Z=0,ee=0;do{const le=this._source.read();if(le===null)return this._eos=!0,Z===0?null:j.join("");if(le.length>0&&(j[Z++]=le,ee+=le.length),ee>=64*1024)return j.join("")}while(!0)}}const W=()=>{throw new Error("Invalid change accessor")};let V=A=class extends S.Disposable{static resolveOptions(j,Z){if(Z.detectIndentation){const ee=(0,g.guessIndentation)(j,Z.tabSize,Z.insertSpaces);return new c.TextModelResolvedOptions({tabSize:ee.tabSize,indentSize:"tabSize",insertSpaces:ee.insertSpaces,trimAutoWhitespace:Z.trimAutoWhitespace,defaultEOL:Z.defaultEOL,bracketPairColorizationOptions:Z.bracketPairColorizationOptions})}return new c.TextModelResolvedOptions(Z)}get onDidChangeLanguage(){return this._tokenizationTextModelPart.onDidChangeLanguage}get onDidChangeLanguageConfiguration(){return this._tokenizationTextModelPart.onDidChangeLanguageConfiguration}get onDidChangeTokens(){return this._tokenizationTextModelPart.onDidChangeTokens}onDidChangeContent(j){return this._eventEmitter.slowEvent(Z=>j(Z.contentChangedEvent))}onDidChangeContentOrInjectedText(j){return(0,S.combinedDisposable)(this._eventEmitter.fastEvent(Z=>j(Z)),this._onDidChangeInjectedText.event(Z=>j(Z)))}_isDisposing(){return this.__isDisposing}get tokenization(){return this._tokenizationTextModelPart}get bracketPairs(){return this._bracketPairs}get guides(){return this._guidesTextModelPart}constructor(j,Z,ee,le=null,ue,ce,pe){super(),this._undoRedoService=ue,this._languageService=ce,this._languageConfigurationService=pe,this._onWillDispose=this._register(new E.Emitter),this.onWillDispose=this._onWillDispose.event,this._onDidChangeDecorations=this._register(new U(Ae=>this.handleBeforeFireDecorationsChangedEvent(Ae))),this.onDidChangeDecorations=this._onDidChangeDecorations.event,this._onDidChangeOptions=this._register(new E.Emitter),this.onDidChangeOptions=this._onDidChangeOptions.event,this._onDidChangeAttached=this._register(new E.Emitter),this.onDidChangeAttached=this._onDidChangeAttached.event,this._onDidChangeInjectedText=this._register(new E.Emitter),this._eventEmitter=this._register(new G),this._languageSelectionListener=this._register(new S.MutableDisposable),this._deltaDecorationCallCnt=0,this._attachedViews=new z,R++,this.id="$model"+R,this.isForSimpleWidget=ee.isForSimpleWidget,typeof le>"u"||le===null?this._associatedResource=_.URI.parse("inmemory://model/"+R):this._associatedResource=le,this._attachedEditorCount=0;const{textBuffer:ve,disposable:Ce}=M(j,ee.defaultEOL);this._buffer=ve,this._bufferDisposable=Ce,this._options=A.resolveOptions(this._buffer,ee);const Se=typeof Z=="string"?Z:Z.languageId;typeof Z!="string"&&(this._languageSelectionListener.value=Z.onDidChange(()=>this._setLanguage(Z.languageId))),this._bracketPairs=this._register(new d.BracketPairsTextModelPart(this,this._languageConfigurationService)),this._guidesTextModelPart=this._register(new o.GuidesTextModelPart(this,this._languageConfigurationService)),this._decorationProvider=this._register(new s.ColorizedBracketPairsDecorationProvider(this)),this._tokenizationTextModelPart=new D.TokenizationTextModelPart(this._languageService,this._languageConfigurationService,this,this._bracketPairs,Se,this._attachedViews);const _e=this._buffer.getLineCount(),Ee=this._buffer.getValueLengthInRange(new n.Range(1,1,_e,this._buffer.getLineLength(_e)+1),0);ee.largeFileOptimizations?(this._isTooLargeForTokenization=Ee>A.LARGE_FILE_SIZE_THRESHOLD||_e>A.LARGE_FILE_LINE_COUNT_THRESHOLD,this._isTooLargeForHeapOperation=Ee>A.LARGE_FILE_HEAP_OPERATION_THRESHOLD):(this._isTooLargeForTokenization=!1,this._isTooLargeForHeapOperation=!1),this._isTooLargeForSyncing=Ee>A._MODEL_SYNC_LIMIT,this._versionId=1,this._alternativeVersionId=1,this._initialUndoRedoSnapshot=null,this._isDisposed=!1,this.__isDisposing=!1,this._instanceId=p.singleLetterHash(R),this._lastDecorationId=0,this._decorations=Object.create(null),this._decorationsTree=new ae,this._commandManager=new l.EditStack(this,this._undoRedoService),this._isUndoing=!1,this._isRedoing=!1,this._trimAutoWhitespaceLines=null,this._register(this._decorationProvider.onDidChange(()=>{this._onDidChangeDecorations.beginDeferredEmit(),this._onDidChangeDecorations.fire(),this._onDidChangeDecorations.endDeferredEmit()})),this._languageService.requestRichLanguageFeatures(Se)}dispose(){this.__isDisposing=!0,this._onWillDispose.fire(),this._tokenizationTextModelPart.dispose(),this._isDisposed=!0,super.dispose(),this._bufferDisposable.dispose(),this.__isDisposing=!1;const j=new m.PieceTreeTextBuffer([],"",` `,!1,!1,!0,!0);j.dispose(),this._buffer=j,this._bufferDisposable=S.Disposable.None}_assertNotDisposed(){if(this._isDisposed)throw new Error("Model is disposed!")}_emitContentChangedEvent(j,Z){this.__isDisposing||(this._tokenizationTextModelPart.handleDidChangeContent(Z),this._bracketPairs.handleDidChangeContent(Z),this._eventEmitter.fire(new I.InternalModelContentChangeEvent(j,Z)))}setValue(j){if(this._assertNotDisposed(),j==null)throw(0,y.illegalArgument)();const{textBuffer:Z,disposable:ee}=M(j,this._options.defaultEOL);this._setValueFromTextBuffer(Z,ee)}_createContentChanged2(j,Z,ee,le,ue,ce,pe,ve){return{changes:[{range:j,rangeOffset:Z,rangeLength:ee,text:le}],eol:this._buffer.getEOL(),isEolChange:ve,versionId:this.getVersionId(),isUndoing:ue,isRedoing:ce,isFlush:pe}}_setValueFromTextBuffer(j,Z){this._assertNotDisposed();const ee=this.getFullModelRange(),le=this.getValueLengthInRange(ee),ue=this.getLineCount(),ce=this.getLineMaxColumn(ue);this._buffer=j,this._bufferDisposable.dispose(),this._bufferDisposable=Z,this._increaseVersionId(),this._decorations=Object.create(null),this._decorationsTree=new ae,this._commandManager.clear(),this._trimAutoWhitespaceLines=null,this._emitContentChangedEvent(new I.ModelRawContentChangedEvent([new I.ModelRawFlush],this._versionId,!1,!1),this._createContentChanged2(new n.Range(1,1,ue,ce),0,le,this.getValue(),!1,!1,!0,!1))}setEOL(j){this._assertNotDisposed();const Z=j===1?`\r `:` `;if(this._buffer.getEOL()===Z)return;const ee=this.getFullModelRange(),le=this.getValueLengthInRange(ee),ue=this.getLineCount(),ce=this.getLineMaxColumn(ue);this._onBeforeEOLChange(),this._buffer.setEOL(Z),this._increaseVersionId(),this._onAfterEOLChange(),this._emitContentChangedEvent(new I.ModelRawContentChangedEvent([new I.ModelRawEOLChanged],this._versionId,!1,!1),this._createContentChanged2(new n.Range(1,1,ue,ce),0,le,this.getValue(),!1,!1,!1,!0))}_onBeforeEOLChange(){this._decorationsTree.ensureAllNodesHaveRanges(this)}_onAfterEOLChange(){const j=this.getVersionId(),Z=this._decorationsTree.collectNodesPostOrder();for(let ee=0,le=Z.length;ee0}getAttachedEditorCount(){return this._attachedEditorCount}isTooLargeForSyncing(){return this._isTooLargeForSyncing}isTooLargeForTokenization(){return this._isTooLargeForTokenization}isTooLargeForHeapOperation(){return this._isTooLargeForHeapOperation}isDisposed(){return this._isDisposed}isDominatedByLongLines(){if(this._assertNotDisposed(),this.isTooLargeForTokenization())return!1;let j=0,Z=0;const ee=this._buffer.getLineCount();for(let le=1;le<=ee;le++){const ue=this._buffer.getLineLength(le);ue>=O?Z+=ue:j+=ue}return Z>j}get uri(){return this._associatedResource}getOptions(){return this._assertNotDisposed(),this._options}getFormattingOptions(){return{tabSize:this._options.indentSize,insertSpaces:this._options.insertSpaces}}updateOptions(j){this._assertNotDisposed();const Z=typeof j.tabSize<"u"?j.tabSize:this._options.tabSize,ee=typeof j.indentSize<"u"?j.indentSize:this._options.originalIndentSize,le=typeof j.insertSpaces<"u"?j.insertSpaces:this._options.insertSpaces,ue=typeof j.trimAutoWhitespace<"u"?j.trimAutoWhitespace:this._options.trimAutoWhitespace,ce=typeof j.bracketColorizationOptions<"u"?j.bracketColorizationOptions:this._options.bracketPairColorizationOptions,pe=new c.TextModelResolvedOptions({tabSize:Z,indentSize:ee,insertSpaces:le,defaultEOL:this._options.defaultEOL,trimAutoWhitespace:ue,bracketPairColorizationOptions:ce});if(this._options.equals(pe))return;const ve=this._options.createChangeEvent(pe);this._options=pe,this._bracketPairs.handleDidChangeOptions(ve),this._decorationProvider.handleDidChangeOptions(ve),this._onDidChangeOptions.fire(ve)}detectIndentation(j,Z){this._assertNotDisposed();const ee=(0,g.guessIndentation)(this._buffer,Z,j);this.updateOptions({insertSpaces:ee.insertSpaces,tabSize:ee.tabSize,indentSize:ee.tabSize})}normalizeIndentation(j){return this._assertNotDisposed(),(0,b.normalizeIndentation)(j,this._options.indentSize,this._options.insertSpaces)}getVersionId(){return this._assertNotDisposed(),this._versionId}mightContainRTL(){return this._buffer.mightContainRTL()}mightContainUnusualLineTerminators(){return this._buffer.mightContainUnusualLineTerminators()}removeUnusualLineTerminators(j=null){const Z=this.findMatches(p.UNUSUAL_LINE_TERMINATORS.source,!1,!0,!1,null,!1,1073741824);this._buffer.resetMightContainUnusualLineTerminators(),this.pushEditOperations(j,Z.map(ee=>({range:ee.range,text:null})),()=>null)}mightContainNonBasicASCII(){return this._buffer.mightContainNonBasicASCII()}getAlternativeVersionId(){return this._assertNotDisposed(),this._alternativeVersionId}getInitialUndoRedoSnapshot(){return this._assertNotDisposed(),this._initialUndoRedoSnapshot}getOffsetAt(j){this._assertNotDisposed();const Z=this._validatePosition(j.lineNumber,j.column,0);return this._buffer.getOffsetAt(Z.lineNumber,Z.column)}getPositionAt(j){this._assertNotDisposed();const Z=Math.min(this._buffer.getLength(),Math.max(0,j));return this._buffer.getPositionAt(Z)}_increaseVersionId(){this._versionId=this._versionId+1,this._alternativeVersionId=this._versionId}_overwriteVersionId(j){this._versionId=j}_overwriteAlternativeVersionId(j){this._alternativeVersionId=j}_overwriteInitialUndoRedoSnapshot(j){this._initialUndoRedoSnapshot=j}getValue(j,Z=!1){if(this._assertNotDisposed(),this.isTooLargeForHeapOperation())throw new y.BugIndicatingError("Operation would exceed heap memory limits");const ee=this.getFullModelRange(),le=this.getValueInRange(ee,j);return Z?this._buffer.getBOM()+le:le}createSnapshot(j=!1){return new B(this._buffer.createSnapshot(j))}getValueLength(j,Z=!1){this._assertNotDisposed();const ee=this.getFullModelRange(),le=this.getValueLengthInRange(ee,j);return Z?this._buffer.getBOM().length+le:le}getValueInRange(j,Z=0){return this._assertNotDisposed(),this._buffer.getValueInRange(this.validateRange(j),Z)}getValueLengthInRange(j,Z=0){return this._assertNotDisposed(),this._buffer.getValueLengthInRange(this.validateRange(j),Z)}getCharacterCountInRange(j,Z=0){return this._assertNotDisposed(),this._buffer.getCharacterCountInRange(this.validateRange(j),Z)}getLineCount(){return this._assertNotDisposed(),this._buffer.getLineCount()}getLineContent(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError("Illegal value for lineNumber");return this._buffer.getLineContent(j)}getLineLength(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError("Illegal value for lineNumber");return this._buffer.getLineLength(j)}getLinesContent(){if(this._assertNotDisposed(),this.isTooLargeForHeapOperation())throw new y.BugIndicatingError("Operation would exceed heap memory limits");return this._buffer.getLinesContent()}getEOL(){return this._assertNotDisposed(),this._buffer.getEOL()}getEndOfLineSequence(){return this._assertNotDisposed(),this._buffer.getEOL()===` `?0:1}getLineMinColumn(j){return this._assertNotDisposed(),1}getLineMaxColumn(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError("Illegal value for lineNumber");return this._buffer.getLineLength(j)+1}getLineFirstNonWhitespaceColumn(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError("Illegal value for lineNumber");return this._buffer.getLineFirstNonWhitespaceColumn(j)}getLineLastNonWhitespaceColumn(j){if(this._assertNotDisposed(),j<1||j>this.getLineCount())throw new y.BugIndicatingError("Illegal value for lineNumber");return this._buffer.getLineLastNonWhitespaceColumn(j)}_validateRangeRelaxedNoAllocations(j){const Z=this._buffer.getLineCount(),ee=j.startLineNumber,le=j.startColumn;let ue=Math.floor(typeof ee=="number"&&!isNaN(ee)?ee:1),ce=Math.floor(typeof le=="number"&&!isNaN(le)?le:1);if(ue<1)ue=1,ce=1;else if(ue>Z)ue=Z,ce=this.getLineMaxColumn(ue);else if(ce<=1)ce=1;else{const _e=this.getLineMaxColumn(ue);ce>=_e&&(ce=_e)}const pe=j.endLineNumber,ve=j.endColumn;let Ce=Math.floor(typeof pe=="number"&&!isNaN(pe)?pe:1),Se=Math.floor(typeof ve=="number"&&!isNaN(ve)?ve:1);if(Ce<1)Ce=1,Se=1;else if(Ce>Z)Ce=Z,Se=this.getLineMaxColumn(Ce);else if(Se<=1)Se=1;else{const _e=this.getLineMaxColumn(Ce);Se>=_e&&(Se=_e)}return ee===ue&&le===ce&&pe===Ce&&ve===Se&&j instanceof n.Range&&!(j instanceof t.Selection)?j:new n.Range(ue,ce,Ce,Se)}_isValidPosition(j,Z,ee){if(typeof j!="number"||typeof Z!="number"||isNaN(j)||isNaN(Z)||j<1||Z<1||(j|0)!==j||(Z|0)!==Z)return!1;const le=this._buffer.getLineCount();if(j>le)return!1;if(Z===1)return!0;const ue=this.getLineMaxColumn(j);if(Z>ue)return!1;if(ee===1){const ce=this._buffer.getLineCharCode(j,Z-2);if(p.isHighSurrogate(ce))return!1}return!0}_validatePosition(j,Z,ee){const le=Math.floor(typeof j=="number"&&!isNaN(j)?j:1),ue=Math.floor(typeof Z=="number"&&!isNaN(Z)?Z:1),ce=this._buffer.getLineCount();if(le<1)return new i.Position(1,1);if(le>ce)return new i.Position(ce,this.getLineMaxColumn(ce));if(ue<=1)return new i.Position(le,1);const pe=this.getLineMaxColumn(le);if(ue>=pe)return new i.Position(le,pe);if(ee===1){const ve=this._buffer.getLineCharCode(le,ue-2);if(p.isHighSurrogate(ve))return new i.Position(le,ue-1)}return new i.Position(le,ue)}validatePosition(j){return this._assertNotDisposed(),j instanceof i.Position&&this._isValidPosition(j.lineNumber,j.column,1)?j:this._validatePosition(j.lineNumber,j.column,1)}_isValidRange(j,Z){const ee=j.startLineNumber,le=j.startColumn,ue=j.endLineNumber,ce=j.endColumn;if(!this._isValidPosition(ee,le,0)||!this._isValidPosition(ue,ce,0))return!1;if(Z===1){const pe=le>1?this._buffer.getLineCharCode(ee,le-2):0,ve=ce>1&&ce<=this._buffer.getLineLength(ue)?this._buffer.getLineCharCode(ue,ce-2):0,Ce=p.isHighSurrogate(pe),Se=p.isHighSurrogate(ve);return!Ce&&!Se}return!0}validateRange(j){if(this._assertNotDisposed(),j instanceof n.Range&&!(j instanceof t.Selection)&&this._isValidRange(j,1))return j;const ee=this._validatePosition(j.startLineNumber,j.startColumn,0),le=this._validatePosition(j.endLineNumber,j.endColumn,0),ue=ee.lineNumber,ce=ee.column,pe=le.lineNumber,ve=le.column;{const Ce=ce>1?this._buffer.getLineCharCode(ue,ce-2):0,Se=ve>1&&ve<=this._buffer.getLineLength(pe)?this._buffer.getLineCharCode(pe,ve-2):0,_e=p.isHighSurrogate(Ce),Ee=p.isHighSurrogate(Se);return!_e&&!Ee?new n.Range(ue,ce,pe,ve):ue===pe&&ce===ve?new n.Range(ue,ce-1,pe,ve-1):_e&&Ee?new n.Range(ue,ce-1,pe,ve+1):_e?new n.Range(ue,ce-1,pe,ve):new n.Range(ue,ce,pe,ve+1)}return new n.Range(ue,ce,pe,ve)}modifyPosition(j,Z){this._assertNotDisposed();const ee=this.getOffsetAt(j)+Z;return this.getPositionAt(Math.min(this._buffer.getLength(),Math.max(0,ee)))}getFullModelRange(){this._assertNotDisposed();const j=this.getLineCount();return new n.Range(1,1,j,this.getLineMaxColumn(j))}findMatchesLineByLine(j,Z,ee,le){return this._buffer.findMatchesLineByLine(j,Z,ee,le)}findMatches(j,Z,ee,le,ue,ce,pe=x){this._assertNotDisposed();let ve=null;Z!==null&&(Array.isArray(Z)||(Z=[Z]),Z.every(_e=>n.Range.isIRange(_e))&&(ve=Z.map(_e=>this.validateRange(_e)))),ve===null&&(ve=[this.getFullModelRange()]),ve=ve.sort((_e,Ee)=>_e.startLineNumber-Ee.startLineNumber||_e.startColumn-Ee.startColumn);const Ce=[];Ce.push(ve.reduce((_e,Ee)=>n.Range.areIntersecting(_e,Ee)?_e.plusRange(Ee):(Ce.push(_e),Ee)));let Se;if(!ee&&j.indexOf(` `)<0){const Ee=new w.SearchParams(j,ee,le,ue).parseSearchRequest();if(!Ee)return[];Se=Ae=>this.findMatchesLineByLine(Ae,Ee,ce,pe)}else Se=_e=>w.TextModelSearch.findMatches(this,new w.SearchParams(j,ee,le,ue),_e,ce,pe);return Ce.map(Se).reduce((_e,Ee)=>_e.concat(Ee),[])}findNextMatch(j,Z,ee,le,ue,ce){this._assertNotDisposed();const pe=this.validatePosition(Z);if(!ee&&j.indexOf(` `)<0){const Ce=new w.SearchParams(j,ee,le,ue).parseSearchRequest();if(!Ce)return null;const Se=this.getLineCount();let _e=new n.Range(pe.lineNumber,pe.column,Se,this.getLineMaxColumn(Se)),Ee=this.findMatchesLineByLine(_e,Ce,ce,1);return w.TextModelSearch.findNextMatch(this,new w.SearchParams(j,ee,le,ue),pe,ce),Ee.length>0||(_e=new n.Range(1,1,pe.lineNumber,this.getLineMaxColumn(pe.lineNumber)),Ee=this.findMatchesLineByLine(_e,Ce,ce,1),Ee.length>0)?Ee[0]:null}return w.TextModelSearch.findNextMatch(this,new w.SearchParams(j,ee,le,ue),pe,ce)}findPreviousMatch(j,Z,ee,le,ue,ce){this._assertNotDisposed();const pe=this.validatePosition(Z);return w.TextModelSearch.findPreviousMatch(this,new w.SearchParams(j,ee,le,ue),pe,ce)}pushStackElement(){this._commandManager.pushStackElement()}popStackElement(){this._commandManager.popStackElement()}pushEOL(j){if((this.getEOL()===` `?0:1)!==j)try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._initialUndoRedoSnapshot===null&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEOL(j)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_validateEditOperation(j){return j instanceof c.ValidAnnotatedEditOperation?j:new c.ValidAnnotatedEditOperation(j.identifier||null,this.validateRange(j.range),j.text,j.forceMoveMarkers||!1,j.isAutoWhitespaceEdit||!1,j._isTracked||!1)}_validateEditOperations(j){const Z=[];for(let ee=0,le=j.length;ee({range:this.validateRange(pe.range),text:pe.text}));let ce=!0;if(j)for(let pe=0,ve=j.length;peCe.endLineNumber,Be=Ce.startLineNumber>Ae.endLineNumber;if(!xe&&!Be){Se=!0;break}}if(!Se){ce=!1;break}}if(ce)for(let pe=0,ve=this._trimAutoWhitespaceLines.length;pexe.endLineNumber)&&!(Ce===xe.startLineNumber&&xe.startColumn===Se&&xe.isEmpty()&&Be&&Be.length>0&&Be.charAt(0)===` `)&&!(Ce===xe.startLineNumber&&xe.startColumn===1&&xe.isEmpty()&&Be&&Be.length>0&&Be.charAt(Be.length-1)===` `)){_e=!1;break}}if(_e){const Ee=new n.Range(Ce,1,Ce,Se);Z.push(new c.ValidAnnotatedEditOperation(null,Ee,null,!1,!1,!1))}}this._trimAutoWhitespaceLines=null}return this._initialUndoRedoSnapshot===null&&(this._initialUndoRedoSnapshot=this._undoRedoService.createSnapshot(this.uri)),this._commandManager.pushEditOperation(j,Z,ee,le)}_applyUndo(j,Z,ee,le){const ue=j.map(ce=>{const pe=this.getPositionAt(ce.newPosition),ve=this.getPositionAt(ce.newEnd);return{range:new n.Range(pe.lineNumber,pe.column,ve.lineNumber,ve.column),text:ce.oldText}});this._applyUndoRedoEdits(ue,Z,!0,!1,ee,le)}_applyRedo(j,Z,ee,le){const ue=j.map(ce=>{const pe=this.getPositionAt(ce.oldPosition),ve=this.getPositionAt(ce.oldEnd);return{range:new n.Range(pe.lineNumber,pe.column,ve.lineNumber,ve.column),text:ce.newText}});this._applyUndoRedoEdits(ue,Z,!1,!0,ee,le)}_applyUndoRedoEdits(j,Z,ee,le,ue,ce){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit(),this._isUndoing=ee,this._isRedoing=le,this.applyEdits(j,!1),this.setEOL(Z),this._overwriteAlternativeVersionId(ue)}finally{this._isUndoing=!1,this._isRedoing=!1,this._eventEmitter.endDeferredEmit(ce),this._onDidChangeDecorations.endDeferredEmit()}}applyEdits(j,Z=!1){try{this._onDidChangeDecorations.beginDeferredEmit(),this._eventEmitter.beginDeferredEmit();const ee=this._validateEditOperations(j);return this._doApplyEdits(ee,Z)}finally{this._eventEmitter.endDeferredEmit(),this._onDidChangeDecorations.endDeferredEmit()}}_doApplyEdits(j,Z){const ee=this._buffer.getLineCount(),le=this._buffer.applyEdits(j,this._options.trimAutoWhitespace,Z),ue=this._buffer.getLineCount(),ce=le.changes;if(this._trimAutoWhitespaceLines=le.trimAutoWhitespaceLineNumbers,ce.length!==0){for(let Ce=0,Se=ce.length;Ce=0;Je--){const rt=Ae+Je,et=be+Je;je.takeFromEndWhile(Qe=>Qe.lineNumber>et);const st=je.takeFromEndWhile(Qe=>Qe.lineNumber===et);pe.push(new I.ModelRawLineChanged(rt,this.getLineContent(et),st))}if(Ielt.lineNumberlt.lineNumber===ct)}pe.push(new I.ModelRawLinesInserted(rt+1,Ae+De,ft,Qe))}ve+=fe}this._emitContentChangedEvent(new I.ModelRawContentChangedEvent(pe,this.getVersionId(),this._isUndoing,this._isRedoing),{changes:ce,eol:this._buffer.getEOL(),isEolChange:!1,versionId:this.getVersionId(),isUndoing:this._isUndoing,isRedoing:this._isRedoing,isFlush:!1})}return le.reverseEdits===null?void 0:le.reverseEdits}undo(){return this._undoRedoService.undo(this.uri)}canUndo(){return this._undoRedoService.canUndo(this.uri)}redo(){return this._undoRedoService.redo(this.uri)}canRedo(){return this._undoRedoService.canRedo(this.uri)}handleBeforeFireDecorationsChangedEvent(j){if(j===null||j.size===0)return;const ee=Array.from(j).map(le=>new I.ModelRawLineChanged(le,this.getLineContent(le),this._getInjectedTextInLine(le)));this._onDidChangeInjectedText.fire(new I.ModelInjectedTextChangedEvent(ee))}changeDecorations(j,Z=0){this._assertNotDisposed();try{return this._onDidChangeDecorations.beginDeferredEmit(),this._changeDecorations(Z,j)}finally{this._onDidChangeDecorations.endDeferredEmit()}}_changeDecorations(j,Z){const ee={addDecoration:(ue,ce)=>this._deltaDecorationsImpl(j,[],[{range:ue,options:ce}])[0],changeDecoration:(ue,ce)=>{this._changeDecorationImpl(ue,ce)},changeDecorationOptions:(ue,ce)=>{this._changeDecorationOptionsImpl(ue,X(ce))},removeDecoration:ue=>{this._deltaDecorationsImpl(j,[ue],[])},deltaDecorations:(ue,ce)=>ue.length===0&&ce.length===0?[]:this._deltaDecorationsImpl(j,ue,ce)};let le=null;try{le=Z(ee)}catch(ue){(0,y.onUnexpectedError)(ue)}return ee.addDecoration=W,ee.changeDecoration=W,ee.changeDecorationOptions=W,ee.removeDecoration=W,ee.deltaDecorations=W,le}deltaDecorations(j,Z,ee=0){if(this._assertNotDisposed(),j||(j=[]),j.length===0&&Z.length===0)return[];try{return this._deltaDecorationCallCnt++,this._deltaDecorationCallCnt>1&&(console.warn("Invoking deltaDecorations recursively could lead to leaking decorations."),(0,y.onUnexpectedError)(new Error("Invoking deltaDecorations recursively could lead to leaking decorations."))),this._onDidChangeDecorations.beginDeferredEmit(),this._deltaDecorationsImpl(ee,j,Z)}finally{this._onDidChangeDecorations.endDeferredEmit(),this._deltaDecorationCallCnt--}}_getTrackedRange(j){return this.getDecorationRange(j)}_setTrackedRange(j,Z,ee){const le=j?this._decorations[j]:null;if(!le)return Z?this._deltaDecorationsImpl(0,[],[{range:Z,options:me[ee]}],!0)[0]:null;if(!Z)return this._decorationsTree.delete(le),delete this._decorations[le.id],null;const ue=this._validateRangeRelaxedNoAllocations(Z),ce=this._buffer.getOffsetAt(ue.startLineNumber,ue.startColumn),pe=this._buffer.getOffsetAt(ue.endLineNumber,ue.endColumn);return this._decorationsTree.delete(le),le.reset(this.getVersionId(),ce,pe,ue),le.setOptions(me[ee]),this._decorationsTree.insert(le),le.id}removeAllDecorationsWithOwnerId(j){if(this._isDisposed)return;const Z=this._decorationsTree.collectNodesFromOwner(j);for(let ee=0,le=Z.length;eethis.getLineCount()?[]:this.getLinesDecorations(j,j,Z,ee)}getLinesDecorations(j,Z,ee=0,le=!1,ue=!1){const ce=this.getLineCount(),pe=Math.min(ce,Math.max(1,j)),ve=Math.min(ce,Math.max(1,Z)),Ce=this.getLineMaxColumn(ve),Se=new n.Range(pe,1,ve,Ce),_e=this._getDecorationsInRange(Se,ee,le,ue);return(0,L.pushMany)(_e,this._decorationProvider.getDecorationsInRange(Se,ee,le)),_e}getDecorationsInRange(j,Z=0,ee=!1,le=!1,ue=!1){const ce=this.validateRange(j),pe=this._getDecorationsInRange(ce,Z,ee,ue);return(0,L.pushMany)(pe,this._decorationProvider.getDecorationsInRange(ce,Z,ee,le)),pe}getOverviewRulerDecorations(j=0,Z=!1){return this._decorationsTree.getAll(this,j,Z,!0,!1)}getInjectedTextDecorations(j=0){return this._decorationsTree.getAllInjectedText(this,j)}_getInjectedTextInLine(j){const Z=this._buffer.getOffsetAt(j,1),ee=Z+this._buffer.getLineLength(j),le=this._decorationsTree.getInjectedTextInInterval(this,Z,ee,0);return I.LineInjectedText.fromDecorations(le).filter(ue=>ue.lineNumber===j)}getAllDecorations(j=0,Z=!1){let ee=this._decorationsTree.getAll(this,j,Z,!1,!1);return ee=ee.concat(this._decorationProvider.getAllDecorations(j,Z)),ee}getAllMarginDecorations(j=0){return this._decorationsTree.getAll(this,j,!1,!1,!0)}_getDecorationsInRange(j,Z,ee,le){const ue=this._buffer.getOffsetAt(j.startLineNumber,j.startColumn),ce=this._buffer.getOffsetAt(j.endLineNumber,j.endColumn);return this._decorationsTree.getAllInInterval(this,ue,ce,Z,ee,le)}getRangeAt(j,Z){return this._buffer.getRangeAt(j,Z-j)}_changeDecorationImpl(j,Z){const ee=this._decorations[j];if(!ee)return;if(ee.options.after){const pe=this.getDecorationRange(j);this._onDidChangeDecorations.recordLineAffectedByInjectedText(pe.endLineNumber)}if(ee.options.before){const pe=this.getDecorationRange(j);this._onDidChangeDecorations.recordLineAffectedByInjectedText(pe.startLineNumber)}const le=this._validateRangeRelaxedNoAllocations(Z),ue=this._buffer.getOffsetAt(le.startLineNumber,le.startColumn),ce=this._buffer.getOffsetAt(le.endLineNumber,le.endColumn);this._decorationsTree.delete(ee),ee.reset(this.getVersionId(),ue,ce,le),this._decorationsTree.insert(ee),this._onDidChangeDecorations.checkAffectedAndFire(ee.options),ee.options.after&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(le.endLineNumber),ee.options.before&&this._onDidChangeDecorations.recordLineAffectedByInjectedText(le.startLineNumber)}_changeDecorationOptionsImpl(j,Z){const ee=this._decorations[j];if(!ee)return;const le=!!(ee.options.overviewRuler&&ee.options.overviewRuler.color),ue=!!(Z.overviewRuler&&Z.overviewRuler.color);if(this._onDidChangeDecorations.checkAffectedAndFire(ee.options),this._onDidChangeDecorations.checkAffectedAndFire(Z),ee.options.after||Z.after){const ve=this._decorationsTree.getNodeRange(this,ee);this._onDidChangeDecorations.recordLineAffectedByInjectedText(ve.endLineNumber)}if(ee.options.before||Z.before){const ve=this._decorationsTree.getNodeRange(this,ee);this._onDidChangeDecorations.recordLineAffectedByInjectedText(ve.startLineNumber)}const ce=le!==ue,pe=q(Z)!==ie(ee);ce||pe?(this._decorationsTree.delete(ee),ee.setOptions(Z),this._decorationsTree.insert(ee)):ee.setOptions(Z)}_deltaDecorationsImpl(j,Z,ee,le=!1){const ue=this.getVersionId(),ce=Z.length;let pe=0;const ve=ee.length;let Ce=0;this._onDidChangeDecorations.beginDeferredEmit();try{const Se=new Array(ve);for(;pethis._setLanguage(j.languageId,Z)),this._setLanguage(j.languageId,Z))}_setLanguage(j,Z){this.tokenization.setLanguageId(j,Z),this._languageService.requestRichLanguageFeatures(j)}getLanguageIdAtPosition(j,Z){return this.tokenization.getLanguageIdAtPosition(j,Z)}getWordAtPosition(j){return this._tokenizationTextModelPart.getWordAtPosition(j)}getWordUntilPosition(j){return this._tokenizationTextModelPart.getWordUntilPosition(j)}normalizePosition(j,Z){return j}getLineIndentColumn(j){return K(this.getLineContent(j))+1}};e.TextModel=V,V._MODEL_SYNC_LIMIT=50*1024*1024,V.LARGE_FILE_SIZE_THRESHOLD=20*1024*1024,V.LARGE_FILE_LINE_COUNT_THRESHOLD=300*1e3,V.LARGE_FILE_HEAP_OPERATION_THRESHOLD=256*1024*1024,V.DEFAULT_CREATION_OPTIONS={isForSimpleWidget:!1,tabSize:r.EDITOR_MODEL_DEFAULTS.tabSize,indentSize:r.EDITOR_MODEL_DEFAULTS.indentSize,insertSpaces:r.EDITOR_MODEL_DEFAULTS.insertSpaces,detectIndentation:!1,defaultEOL:1,trimAutoWhitespace:r.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace,largeFileOptimizations:r.EDITOR_MODEL_DEFAULTS.largeFileOptimizations,bracketPairColorizationOptions:r.EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions},e.TextModel=V=A=ke([ge(4,T.IUndoRedoService),ge(5,u.ILanguageService),ge(6,f.ILanguageConfigurationService)],V);function K(Y){let j=0;for(const Z of Y)if(Z===" "||Z===" ")j++;else break;return j}function F(Y){return!!(Y.options.overviewRuler&&Y.options.overviewRuler.color)}function q(Y){return!!Y.after||!!Y.before}function ie(Y){return!!Y.options.after||!!Y.options.before}class ae{constructor(){this._decorationsTree0=new h.IntervalTree,this._decorationsTree1=new h.IntervalTree,this._injectedTextDecorationsTree=new h.IntervalTree}ensureAllNodesHaveRanges(j){this.getAll(j,0,!1,!1,!1)}_ensureNodesHaveRanges(j,Z){for(const ee of Z)ee.range===null&&(ee.range=j.getRangeAt(ee.cachedAbsoluteStart,ee.cachedAbsoluteEnd));return Z}getAllInInterval(j,Z,ee,le,ue,ce){const pe=j.getVersionId(),ve=this._intervalSearch(Z,ee,le,ue,pe,ce);return this._ensureNodesHaveRanges(j,ve)}_intervalSearch(j,Z,ee,le,ue,ce){const pe=this._decorationsTree0.intervalSearch(j,Z,ee,le,ue,ce),ve=this._decorationsTree1.intervalSearch(j,Z,ee,le,ue,ce),Ce=this._injectedTextDecorationsTree.intervalSearch(j,Z,ee,le,ue,ce);return pe.concat(ve).concat(Ce)}getInjectedTextInInterval(j,Z,ee,le){const ue=j.getVersionId(),ce=this._injectedTextDecorationsTree.intervalSearch(Z,ee,le,!1,ue,!1);return this._ensureNodesHaveRanges(j,ce).filter(pe=>pe.options.showIfCollapsed||!pe.range.isEmpty())}getAllInjectedText(j,Z){const ee=j.getVersionId(),le=this._injectedTextDecorationsTree.search(Z,!1,ee,!1);return this._ensureNodesHaveRanges(j,le).filter(ue=>ue.options.showIfCollapsed||!ue.range.isEmpty())}getAll(j,Z,ee,le,ue){const ce=j.getVersionId(),pe=this._search(Z,ee,le,ce,ue);return this._ensureNodesHaveRanges(j,pe)}_search(j,Z,ee,le,ue){if(ee)return this._decorationsTree1.search(j,Z,le,ue);{const ce=this._decorationsTree0.search(j,Z,le,ue),pe=this._decorationsTree1.search(j,Z,le,ue),ve=this._injectedTextDecorationsTree.search(j,Z,le,ue);return ce.concat(pe).concat(ve)}}collectNodesFromOwner(j){const Z=this._decorationsTree0.collectNodesFromOwner(j),ee=this._decorationsTree1.collectNodesFromOwner(j),le=this._injectedTextDecorationsTree.collectNodesFromOwner(j);return Z.concat(ee).concat(le)}collectNodesPostOrder(){const j=this._decorationsTree0.collectNodesPostOrder(),Z=this._decorationsTree1.collectNodesPostOrder(),ee=this._injectedTextDecorationsTree.collectNodesPostOrder();return j.concat(Z).concat(ee)}insert(j){ie(j)?this._injectedTextDecorationsTree.insert(j):F(j)?this._decorationsTree1.insert(j):this._decorationsTree0.insert(j)}delete(j){ie(j)?this._injectedTextDecorationsTree.delete(j):F(j)?this._decorationsTree1.delete(j):this._decorationsTree0.delete(j)}getNodeRange(j,Z){const ee=j.getVersionId();return Z.cachedVersionId!==ee&&this._resolveNode(Z,ee),Z.range===null&&(Z.range=j.getRangeAt(Z.cachedAbsoluteStart,Z.cachedAbsoluteEnd)),Z.range}_resolveNode(j,Z){ie(j)?this._injectedTextDecorationsTree.resolveNode(j,Z):F(j)?this._decorationsTree1.resolveNode(j,Z):this._decorationsTree0.resolveNode(j,Z)}acceptReplace(j,Z,ee,le){this._decorationsTree0.acceptReplace(j,Z,ee,le),this._decorationsTree1.acceptReplace(j,Z,ee,le),this._injectedTextDecorationsTree.acceptReplace(j,Z,ee,le)}}function ne(Y){return Y.replace(/[^a-z0-9\-_]/gi," ")}class ${constructor(j){this.color=j.color||"",this.darkColor=j.darkColor||""}}class J extends ${constructor(j){super(j),this._resolvedColor=null,this.position=typeof j.position=="number"?j.position:c.OverviewRulerLane.Center}getColor(j){return this._resolvedColor||(j.type!=="light"&&this.darkColor?this._resolvedColor=this._resolveColor(this.darkColor,j):this._resolvedColor=this._resolveColor(this.color,j)),this._resolvedColor}invalidateCachedColor(){this._resolvedColor=null}_resolveColor(j,Z){if(typeof j=="string")return j;const ee=j?Z.getColor(j.id):null;return ee?ee.toString():""}}e.ModelDecorationOverviewRulerOptions=J;class Q{constructor(j){var Z;this.position=(Z=j?.position)!==null&&Z!==void 0?Z:c.GlyphMarginLane.Center,this.persistLane=j?.persistLane}}e.ModelDecorationGlyphMarginOptions=Q;class re extends ${constructor(j){super(j),this.position=j.position}getColor(j){return this._resolvedColor||(j.type!=="light"&&this.darkColor?this._resolvedColor=this._resolveColor(this.darkColor,j):this._resolvedColor=this._resolveColor(this.color,j)),this._resolvedColor}invalidateCachedColor(){this._resolvedColor=void 0}_resolveColor(j,Z){return typeof j=="string"?k.Color.fromHex(j):Z.getColor(j.id)}}e.ModelDecorationMinimapOptions=re;class de{static from(j){return j instanceof de?j:new de(j)}constructor(j){this.content=j.content||"",this.inlineClassName=j.inlineClassName||null,this.inlineClassNameAffectsLetterSpacing=j.inlineClassNameAffectsLetterSpacing||!1,this.attachedData=j.attachedData||null,this.cursorStops=j.cursorStops||null}}e.ModelDecorationInjectedTextOptions=de;class he{static register(j){return new he(j)}static createDynamic(j){return new he(j)}constructor(j){var Z,ee,le,ue,ce,pe;this.description=j.description,this.blockClassName=j.blockClassName?ne(j.blockClassName):null,this.blockDoesNotCollapse=(Z=j.blockDoesNotCollapse)!==null&&Z!==void 0?Z:null,this.blockIsAfterEnd=(ee=j.blockIsAfterEnd)!==null&&ee!==void 0?ee:null,this.blockPadding=(le=j.blockPadding)!==null&&le!==void 0?le:null,this.stickiness=j.stickiness||0,this.zIndex=j.zIndex||0,this.className=j.className?ne(j.className):null,this.shouldFillLineOnLineBreak=(ue=j.shouldFillLineOnLineBreak)!==null&&ue!==void 0?ue:null,this.hoverMessage=j.hoverMessage||null,this.glyphMarginHoverMessage=j.glyphMarginHoverMessage||null,this.lineNumberHoverMessage=j.lineNumberHoverMessage||null,this.isWholeLine=j.isWholeLine||!1,this.showIfCollapsed=j.showIfCollapsed||!1,this.collapseOnReplaceEdit=j.collapseOnReplaceEdit||!1,this.overviewRuler=j.overviewRuler?new J(j.overviewRuler):null,this.minimap=j.minimap?new re(j.minimap):null,this.glyphMargin=j.glyphMarginClassName?new Q(j.glyphMargin):null,this.glyphMarginClassName=j.glyphMarginClassName?ne(j.glyphMarginClassName):null,this.linesDecorationsClassName=j.linesDecorationsClassName?ne(j.linesDecorationsClassName):null,this.lineNumberClassName=j.lineNumberClassName?ne(j.lineNumberClassName):null,this.linesDecorationsTooltip=j.linesDecorationsTooltip?p.htmlAttributeEncodeValue(j.linesDecorationsTooltip):null,this.firstLineDecorationClassName=j.firstLineDecorationClassName?ne(j.firstLineDecorationClassName):null,this.marginClassName=j.marginClassName?ne(j.marginClassName):null,this.inlineClassName=j.inlineClassName?ne(j.inlineClassName):null,this.inlineClassNameAffectsLetterSpacing=j.inlineClassNameAffectsLetterSpacing||!1,this.beforeContentClassName=j.beforeContentClassName?ne(j.beforeContentClassName):null,this.afterContentClassName=j.afterContentClassName?ne(j.afterContentClassName):null,this.after=j.after?de.from(j.after):null,this.before=j.before?de.from(j.before):null,this.hideInCommentTokens=(ce=j.hideInCommentTokens)!==null&&ce!==void 0?ce:!1,this.hideInStringTokens=(pe=j.hideInStringTokens)!==null&&pe!==void 0?pe:!1}}e.ModelDecorationOptions=he,he.EMPTY=he.register({description:"empty"});const me=[he.register({description:"tracked-range-always-grows-when-typing-at-edges",stickiness:0}),he.register({description:"tracked-range-never-grows-when-typing-at-edges",stickiness:1}),he.register({description:"tracked-range-grows-only-when-typing-before",stickiness:2}),he.register({description:"tracked-range-grows-only-when-typing-after",stickiness:3})];function X(Y){return Y instanceof he?Y:he.createDynamic(Y)}class U extends S.Disposable{constructor(j){super(),this.handleBeforeFire=j,this._actual=this._register(new E.Emitter),this.event=this._actual.event,this._affectedInjectedTextLines=null,this._deferredCnt=0,this._shouldFireDeferred=!1,this._affectsMinimap=!1,this._affectsOverviewRuler=!1,this._affectsGlyphMargin=!1,this._affectsLineNumber=!1}beginDeferredEmit(){this._deferredCnt++}endDeferredEmit(){var j;this._deferredCnt--,this._deferredCnt===0&&(this._shouldFireDeferred&&this.doFire(),(j=this._affectedInjectedTextLines)===null||j===void 0||j.clear(),this._affectedInjectedTextLines=null)}recordLineAffectedByInjectedText(j){this._affectedInjectedTextLines||(this._affectedInjectedTextLines=new Set),this._affectedInjectedTextLines.add(j)}checkAffectedAndFire(j){var Z,ee;this._affectsMinimap||(this._affectsMinimap=!!(!((Z=j.minimap)===null||Z===void 0)&&Z.position)),this._affectsOverviewRuler||(this._affectsOverviewRuler=!!(!((ee=j.overviewRuler)===null||ee===void 0)&&ee.color)),this._affectsGlyphMargin||(this._affectsGlyphMargin=!!j.glyphMarginClassName),this._affectsLineNumber||(this._affectsLineNumber=!!j.lineNumberClassName),this.tryFire()}fire(){this._affectsMinimap=!0,this._affectsOverviewRuler=!0,this._affectsGlyphMargin=!0,this.tryFire()}tryFire(){this._deferredCnt===0?this.doFire():this._shouldFireDeferred=!0}doFire(){this.handleBeforeFire(this._affectedInjectedTextLines);const j={affectsMinimap:this._affectsMinimap,affectsOverviewRuler:this._affectsOverviewRuler,affectsGlyphMargin:this._affectsGlyphMargin,affectsLineNumber:this._affectsLineNumber};this._shouldFireDeferred=!1,this._affectsMinimap=!1,this._affectsOverviewRuler=!1,this._affectsGlyphMargin=!1,this._actual.fire(j)}}class G extends S.Disposable{constructor(){super(),this._fastEmitter=this._register(new E.Emitter),this.fastEvent=this._fastEmitter.event,this._slowEmitter=this._register(new E.Emitter),this.slowEvent=this._slowEmitter.event,this._deferredCnt=0,this._deferredEvent=null}beginDeferredEmit(){this._deferredCnt++}endDeferredEmit(j=null){if(this._deferredCnt--,this._deferredCnt===0&&this._deferredEvent!==null){this._deferredEvent.rawContentChangedEvent.resultingSelection=j;const Z=this._deferredEvent;this._deferredEvent=null,this._fastEmitter.fire(Z),this._slowEmitter.fire(Z)}}fire(j){if(this._deferredCnt>0){this._deferredEvent?this._deferredEvent=this._deferredEvent.merge(j):this._deferredEvent=j;return}this._fastEmitter.fire(j),this._slowEmitter.fire(j)}}class z{constructor(){this._onDidChangeVisibleRanges=new E.Emitter,this.onDidChangeVisibleRanges=this._onDidChangeVisibleRanges.event,this._views=new Set}attachView(){const j=new H(Z=>{this._onDidChangeVisibleRanges.fire({view:j,state:Z})});return this._views.add(j),j}detachView(j){this._views.delete(j),this._onDidChangeVisibleRanges.fire({view:j,state:void 0})}}e.AttachedViews=z;class H{constructor(j){this.handleStateChange=j}setVisibleLines(j,Z){const ee=j.map(le=>new a.LineRange(le.startLineNumber,le.endLineNumber+1));this.handleStateChange({visibleLineRanges:ee,stabilized:Z})}}}),define(se[258],oe([1,0,26,28,38,631,29,82]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.diffDeleteDecorationEmpty=e.diffWholeLineDeleteDecoration=e.diffDeleteDecoration=e.diffAddDecorationEmpty=e.diffWholeLineAddDecoration=e.diffAddDecoration=e.diffLineDeleteDecorationBackground=e.diffLineAddDecorationBackground=e.diffLineDeleteDecorationBackgroundWithIndicator=e.diffLineAddDecorationBackgroundWithIndicator=e.diffRemoveIcon=e.diffInsertIcon=e.diffEditorUnchangedRegionShadow=e.diffMoveBorderActive=e.diffMoveBorder=void 0,e.diffMoveBorder=(0,S.registerColor)("diffEditor.move.border",{dark:"#8b8b8b9c",light:"#8b8b8b9c",hcDark:"#8b8b8b9c",hcLight:"#8b8b8b9c"},(0,E.localize)(0,null)),e.diffMoveBorderActive=(0,S.registerColor)("diffEditor.moveActive.border",{dark:"#FFA500",light:"#FFA500",hcDark:"#FFA500",hcLight:"#FFA500"},(0,E.localize)(1,null)),e.diffEditorUnchangedRegionShadow=(0,S.registerColor)("diffEditor.unchangedRegionShadow",{dark:"#000000",light:"#737373BF",hcDark:"#000000",hcLight:"#737373BF"},(0,E.localize)(2,null)),e.diffInsertIcon=(0,p.registerIcon)("diff-insert",L.Codicon.add,(0,E.localize)(3,null)),e.diffRemoveIcon=(0,p.registerIcon)("diff-remove",L.Codicon.remove,(0,E.localize)(4,null)),e.diffLineAddDecorationBackgroundWithIndicator=y.ModelDecorationOptions.register({className:"line-insert",description:"line-insert",isWholeLine:!0,linesDecorationsClassName:"insert-sign "+k.ThemeIcon.asClassName(e.diffInsertIcon),marginClassName:"gutter-insert"}),e.diffLineDeleteDecorationBackgroundWithIndicator=y.ModelDecorationOptions.register({className:"line-delete",description:"line-delete",isWholeLine:!0,linesDecorationsClassName:"delete-sign "+k.ThemeIcon.asClassName(e.diffRemoveIcon),marginClassName:"gutter-delete"}),e.diffLineAddDecorationBackground=y.ModelDecorationOptions.register({className:"line-insert",description:"line-insert",isWholeLine:!0,marginClassName:"gutter-insert"}),e.diffLineDeleteDecorationBackground=y.ModelDecorationOptions.register({className:"line-delete",description:"line-delete",isWholeLine:!0,marginClassName:"gutter-delete"}),e.diffAddDecoration=y.ModelDecorationOptions.register({className:"char-insert",description:"char-insert",shouldFillLineOnLineBreak:!0}),e.diffWholeLineAddDecoration=y.ModelDecorationOptions.register({className:"char-insert",description:"char-insert",isWholeLine:!0}),e.diffAddDecorationEmpty=y.ModelDecorationOptions.register({className:"char-insert diff-range-empty",description:"char-insert diff-range-empty"}),e.diffDeleteDecoration=y.ModelDecorationOptions.register({className:"char-delete",description:"char-delete",shouldFillLineOnLineBreak:!0}),e.diffWholeLineDeleteDecoration=y.ModelDecorationOptions.register({className:"char-delete",description:"char-delete",isWholeLine:!0}),e.diffDeleteDecorationEmpty=y.ModelDecorationOptions.register({className:"char-delete diff-range-empty",description:"char-delete diff-range-empty"})}),define(se[881],oe([1,0,2,35,334,258,87]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiffEditorDecorations=void 0;class p extends L.Disposable{constructor(v,b,a,i){super(),this._editors=v,this._diffModel=b,this._options=a,this._decorations=(0,k.derived)(this,n=>{var t;const r=(t=this._diffModel.read(n))===null||t===void 0?void 0:t.diff.read(n);if(!r)return null;const u=this._diffModel.read(n).movedTextToCompare.read(n),f=this._options.renderIndicators.read(n),c=this._options.showEmptyDecorations.read(n),d=[],s=[];if(!u)for(const o of r.mappings)if(o.lineRangeMapping.original.isEmpty||d.push({range:o.lineRangeMapping.original.toInclusiveRange(),options:f?E.diffLineDeleteDecorationBackgroundWithIndicator:E.diffLineDeleteDecorationBackground}),o.lineRangeMapping.modified.isEmpty||s.push({range:o.lineRangeMapping.modified.toInclusiveRange(),options:f?E.diffLineAddDecorationBackgroundWithIndicator:E.diffLineAddDecorationBackground}),o.lineRangeMapping.modified.isEmpty||o.lineRangeMapping.original.isEmpty)o.lineRangeMapping.original.isEmpty||d.push({range:o.lineRangeMapping.original.toInclusiveRange(),options:E.diffWholeLineDeleteDecoration}),o.lineRangeMapping.modified.isEmpty||s.push({range:o.lineRangeMapping.modified.toInclusiveRange(),options:E.diffWholeLineAddDecoration});else for(const g of o.lineRangeMapping.innerChanges||[])o.lineRangeMapping.original.contains(g.originalRange.startLineNumber)&&d.push({range:g.originalRange,options:g.originalRange.isEmpty()&&c?E.diffDeleteDecorationEmpty:E.diffDeleteDecoration}),o.lineRangeMapping.modified.contains(g.modifiedRange.startLineNumber)&&s.push({range:g.modifiedRange,options:g.modifiedRange.isEmpty()&&c?E.diffAddDecorationEmpty:E.diffAddDecoration});if(u)for(const o of u.changes){const g=o.original.toInclusiveRange();g&&d.push({range:g,options:f?E.diffLineDeleteDecorationBackgroundWithIndicator:E.diffLineDeleteDecorationBackground});const h=o.modified.toInclusiveRange();h&&s.push({range:h,options:f?E.diffLineAddDecorationBackgroundWithIndicator:E.diffLineAddDecorationBackground});for(const m of o.innerChanges||[])d.push({range:m.originalRange,options:E.diffDeleteDecoration}),s.push({range:m.modifiedRange,options:E.diffAddDecoration})}const l=this._diffModel.read(n).activeMovedText.read(n);for(const o of r.movedTexts)d.push({range:o.lineRangeMapping.original.toInclusiveRange(),options:{description:"moved",blockClassName:"movedOriginal"+(o===l?" currentMove":""),blockPadding:[y.MovedBlocksLinesFeature.movedCodeBlockPadding,0,y.MovedBlocksLinesFeature.movedCodeBlockPadding,y.MovedBlocksLinesFeature.movedCodeBlockPadding]}}),s.push({range:o.lineRangeMapping.modified.toInclusiveRange(),options:{description:"moved",blockClassName:"movedModified"+(o===l?" currentMove":""),blockPadding:[4,0,4,4]}});return{originalDecorations:d,modifiedDecorations:s}}),this._register((0,S.applyObservableDecorations)(this._editors.original,this._decorations.map(n=>n?.originalDecorations||[]))),this._register((0,S.applyObservableDecorations)(this._editors.modified,this._decorations.map(n=>n?.modifiedDecorations||[])))}}e.DiffEditorDecorations=p}),define(se[882],oe([1,0,7,13,14,26,2,35,28,20,72,258,359,625,648,87,62,10,86,103,59]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiffEditorViewZones=void 0;let l=class extends S.Disposable{constructor(m,C,w,D,I,T,A,P,N,M){super(),this._targetWindow=m,this._editors=C,this._diffModel=w,this._options=D,this._diffEditorWidget=I,this._canIgnoreViewZoneUpdateEvent=T,this._origViewZonesToIgnore=A,this._modViewZonesToIgnore=P,this._clipboardService=N,this._contextMenuService=M,this._originalTopPadding=(0,p.observableValue)(this,0),this._originalScrollOffset=(0,p.observableValue)(this,0),this._originalScrollOffsetAnimated=(0,r.animatedObservable)(this._targetWindow,this._originalScrollOffset,this._store),this._modifiedTopPadding=(0,p.observableValue)(this,0),this._modifiedScrollOffset=(0,p.observableValue)(this,0),this._modifiedScrollOffsetAnimated=(0,r.animatedObservable)(this._targetWindow,this._modifiedScrollOffset,this._store);const R=(0,p.observableValue)("invalidateAlignmentsState",0),x=this._register(new y.RunOnceScheduler(()=>{R.set(R.get()+1,void 0)},0));this._register(this._editors.original.onDidChangeViewZones(q=>{this._canIgnoreViewZoneUpdateEvent()||x.schedule()})),this._register(this._editors.modified.onDidChangeViewZones(q=>{this._canIgnoreViewZoneUpdateEvent()||x.schedule()})),this._register(this._editors.original.onDidChangeConfiguration(q=>{(q.hasChanged(144)||q.hasChanged(66))&&x.schedule()})),this._register(this._editors.modified.onDidChangeConfiguration(q=>{(q.hasChanged(144)||q.hasChanged(66))&&x.schedule()}));const O=this._diffModel.map(q=>q?(0,p.observableFromEvent)(q.model.original.onDidChangeTokens,()=>q.model.original.tokenization.backgroundTokenizationState===2):void 0).map((q,ie)=>q?.read(ie)),B=(0,p.derived)(q=>{const ie=this._diffModel.read(q),ae=ie?.diff.read(q);if(!ie||!ae)return null;R.read(q);const $=this._options.renderSideBySide.read(q);return o(this._editors.original,this._editors.modified,ae.mappings,this._origViewZonesToIgnore,this._modViewZonesToIgnore,$)}),W=(0,p.derived)(q=>{var ie;const ae=(ie=this._diffModel.read(q))===null||ie===void 0?void 0:ie.movedTextToCompare.read(q);if(!ae)return null;R.read(q);const ne=ae.changes.map($=>new i.DiffMapping($));return o(this._editors.original,this._editors.modified,ne,this._origViewZonesToIgnore,this._modViewZonesToIgnore,!0)});function V(){const q=document.createElement("div");return q.className="diagonal-fill",q}const K=this._register(new S.DisposableStore);this.viewZones=(0,p.derivedWithStore)(this,(q,ie)=>{var ae,ne,$,J,Q,re,de,he;K.clear();const me=B.read(q)||[],X=[],U=[],G=this._modifiedTopPadding.read(q);G>0&&U.push({afterLineNumber:0,domNode:document.createElement("div"),heightInPx:G,showInHiddenAreas:!0,suppressMouseDown:!0});const z=this._originalTopPadding.read(q);z>0&&X.push({afterLineNumber:0,domNode:document.createElement("div"),heightInPx:z,showInHiddenAreas:!0,suppressMouseDown:!0});const H=this._options.renderSideBySide.read(q),Y=H||(ae=this._editors.modified._getViewModel())===null||ae===void 0?void 0:ae.createLineBreaksComputer();if(Y){const ve=this._editors.original.getModel();for(const Ce of me)if(Ce.diff)for(let Se=Ce.originalRange.startLineNumber;Seve.getLineCount())return{orig:X,mod:U};Y?.addRequest(ve.getLineContent(Se),null,null)}}const j=(ne=Y?.finalize())!==null&&ne!==void 0?ne:[];let Z=0;const ee=this._editors.modified.getOption(66),le=($=this._diffModel.read(q))===null||$===void 0?void 0:$.movedTextToCompare.read(q),ue=(Q=(J=this._editors.original.getModel())===null||J===void 0?void 0:J.mightContainNonBasicASCII())!==null&&Q!==void 0?Q:!1,ce=(de=(re=this._editors.original.getModel())===null||re===void 0?void 0:re.mightContainRTL())!==null&&de!==void 0?de:!1,pe=t.RenderOptions.fromEditor(this._editors.modified);for(const ve of me)if(ve.diff&&!H){if(!ve.originalRange.isEmpty){O.read(q);const Se=document.createElement("div");Se.classList.add("view-lines","line-delete","monaco-mouse-cursor-text");const _e=this._editors.original.getModel();if(ve.originalRange.endLineNumberExclusive-1>_e.getLineCount())return{orig:X,mod:U};const Ee=new t.LineSource(ve.originalRange.mapToLineArray(Ie=>_e.tokenization.getLineTokens(Ie)),ve.originalRange.mapToLineArray(Ie=>j[Z++]),ue,ce),Ae=[];for(const Ie of ve.diff.innerChanges||[])Ae.push(new c.InlineDecoration(Ie.originalRange.delta(-(ve.diff.original.startLineNumber-1)),a.diffDeleteDecoration.className,0));const xe=(0,t.renderLines)(Ee,pe,Ae,Se),Be=document.createElement("div");if(Be.className="inline-deleted-margin-view-zone",(0,b.applyFontInfo)(Be,pe.fontInfo),this._options.renderIndicators.read(q))for(let Ie=0;Ie(0,v.assertIsDefined)(De),Be,this._editors.modified,ve.diff,this._diffEditorWidget,xe.viewLineCounts,this._editors.original.getModel(),this._contextMenuService,this._clipboardService));for(let Ie=0;Ie1&&X.push({afterLineNumber:ve.originalRange.startLineNumber+Ie,domNode:V(),heightInPx:(fe-1)*ee,showInHiddenAreas:!0,suppressMouseDown:!0})}U.push({afterLineNumber:ve.modifiedRange.startLineNumber-1,domNode:Se,heightInPx:xe.heightInLines*ee,minWidthInPx:xe.minWidthInPx,marginDomNode:Be,setZoneId(Ie){De=Ie},showInHiddenAreas:!0,suppressMouseDown:!0})}const Ce=document.createElement("div");Ce.className="gutter-delete",X.push({afterLineNumber:ve.originalRange.endLineNumberExclusive-1,domNode:V(),heightInPx:ve.modifiedHeightInPx,marginDomNode:Ce,showInHiddenAreas:!0,suppressMouseDown:!0})}else{const Ce=ve.modifiedHeightInPx-ve.originalHeightInPx;if(Ce>0){if(le?.lineRangeMapping.original.delta(-1).deltaLength(2).contains(ve.originalRange.endLineNumberExclusive-1))continue;X.push({afterLineNumber:ve.originalRange.endLineNumberExclusive-1,domNode:V(),heightInPx:Ce,showInHiddenAreas:!0,suppressMouseDown:!0})}else{let Se=function(){const Ee=document.createElement("div");return Ee.className="arrow-revert-change "+_.ThemeIcon.asClassName(E.Codicon.arrowRight),ie.add((0,L.addDisposableListener)(Ee,"mousedown",Ae=>Ae.stopPropagation())),ie.add((0,L.addDisposableListener)(Ee,"click",Ae=>{Ae.stopPropagation(),I.revert(ve.diff)})),(0,L.$)("div",{},Ee)};if(le?.lineRangeMapping.modified.delta(-1).deltaLength(2).contains(ve.modifiedRange.endLineNumberExclusive-1))continue;let _e;ve.diff&&ve.diff.modified.isEmpty&&this._options.shouldRenderRevertArrows.read(q)&&(_e=Se()),U.push({afterLineNumber:ve.modifiedRange.endLineNumberExclusive-1,domNode:V(),heightInPx:-Ce,marginDomNode:_e,showInHiddenAreas:!0,suppressMouseDown:!0})}}for(const ve of(he=W.read(q))!==null&&he!==void 0?he:[]){if(!le?.lineRangeMapping.original.intersect(ve.originalRange)||!le?.lineRangeMapping.modified.intersect(ve.modifiedRange))continue;const Ce=ve.modifiedHeightInPx-ve.originalHeightInPx;Ce>0?X.push({afterLineNumber:ve.originalRange.endLineNumberExclusive-1,domNode:V(),heightInPx:Ce,showInHiddenAreas:!0,suppressMouseDown:!0}):U.push({afterLineNumber:ve.modifiedRange.endLineNumberExclusive-1,domNode:V(),heightInPx:-Ce,showInHiddenAreas:!0,suppressMouseDown:!0})}return{orig:X,mod:U}});let F=!1;this._register(this._editors.original.onDidScrollChange(q=>{q.scrollLeftChanged&&!F&&(F=!0,this._editors.modified.setScrollLeft(q.scrollLeft),F=!1)})),this._register(this._editors.modified.onDidScrollChange(q=>{q.scrollLeftChanged&&!F&&(F=!0,this._editors.original.setScrollLeft(q.scrollLeft),F=!1)})),this._originalScrollTop=(0,p.observableFromEvent)(this._editors.original.onDidScrollChange,()=>this._editors.original.getScrollTop()),this._modifiedScrollTop=(0,p.observableFromEvent)(this._editors.modified.onDidScrollChange,()=>this._editors.modified.getScrollTop()),this._register((0,p.autorun)(q=>{const ie=this._originalScrollTop.read(q)-(this._originalScrollOffsetAnimated.get()-this._modifiedScrollOffsetAnimated.read(q))-(this._originalTopPadding.get()-this._modifiedTopPadding.read(q));ie!==this._editors.modified.getScrollTop()&&this._editors.modified.setScrollTop(ie,1)})),this._register((0,p.autorun)(q=>{const ie=this._modifiedScrollTop.read(q)-(this._modifiedScrollOffsetAnimated.get()-this._originalScrollOffsetAnimated.read(q))-(this._modifiedTopPadding.get()-this._originalTopPadding.read(q));ie!==this._editors.original.getScrollTop()&&this._editors.original.setScrollTop(ie,1)})),this._register((0,p.autorun)(q=>{var ie;const ae=(ie=this._diffModel.read(q))===null||ie===void 0?void 0:ie.movedTextToCompare.read(q);let ne=0;if(ae){const $=this._editors.original.getTopForLineNumber(ae.lineRangeMapping.original.startLineNumber,!0)-this._originalTopPadding.get();ne=this._editors.modified.getTopForLineNumber(ae.lineRangeMapping.modified.startLineNumber,!0)-this._modifiedTopPadding.get()-$}ne>0?(this._modifiedTopPadding.set(0,void 0),this._originalTopPadding.set(ne,void 0)):ne<0?(this._modifiedTopPadding.set(-ne,void 0),this._originalTopPadding.set(0,void 0)):setTimeout(()=>{this._modifiedTopPadding.set(0,void 0),this._originalTopPadding.set(0,void 0)},400),this._editors.modified.hasTextFocus()?this._originalScrollOffset.set(this._modifiedScrollOffset.get()-ne,void 0,!0):this._modifiedScrollOffset.set(this._originalScrollOffset.get()+ne,void 0,!0)}))}};e.DiffEditorViewZones=l,e.DiffEditorViewZones=l=ke([ge(8,d.IClipboardService),ge(9,s.IContextMenuService)],l);function o(h,m,C,w,D,I){const T=new k.ArrayQueue(g(h,w)),A=new k.ArrayQueue(g(m,D)),P=h.getOption(66),N=m.getOption(66),M=[];let R=0,x=0;function O(B,W){for(;;){let V=T.peek(),K=A.peek();if(V&&V.lineNumber>=B&&(V=void 0),K&&K.lineNumber>=W&&(K=void 0),!V&&!K)break;const F=V?V.lineNumber-R:Number.MAX_VALUE,q=K?K.lineNumber-x:Number.MAX_VALUE;Fq?(A.dequeue(),V={lineNumber:K.lineNumber-x+R,heightInPx:0}):(T.dequeue(),A.dequeue()),M.push({originalRange:u.LineRange.ofLength(V.lineNumber,1),modifiedRange:u.LineRange.ofLength(K.lineNumber,1),originalHeightInPx:P+V.heightInPx,modifiedHeightInPx:N+K.heightInPx,diff:void 0})}}for(const B of C){let q=function(ie,ae){var ne,$,J,Q;if(ieX.lineNumberX+U.heightInPx,0))!==null&&$!==void 0?$:0,me=(Q=(J=A.takeWhile(X=>X.lineNumberX+U.heightInPx,0))!==null&&Q!==void 0?Q:0;M.push({originalRange:re,modifiedRange:de,originalHeightInPx:re.length*P+he,modifiedHeightInPx:de.length*N+me,diff:B.lineRangeMapping}),F=ie,K=ae};const W=B.lineRangeMapping;O(W.original.startLineNumber,W.modified.startLineNumber);let V=!0,K=W.modified.startLineNumber,F=W.original.startLineNumber;if(I)for(const ie of W.innerChanges||[]){ie.originalRange.startColumn>1&&ie.modifiedRange.startColumn>1&&q(ie.originalRange.startLineNumber,ie.modifiedRange.startLineNumber);const ae=h.getModel(),ne=ie.originalRange.endLineNumber<=ae.getLineCount()?ae.getLineMaxColumn(ie.originalRange.endLineNumber):Number.MAX_SAFE_INTEGER;ie.originalRange.endColumn1&&w.push({lineNumber:P,heightInPx:T*(N-1)})}for(const P of h.getWhitespaces()){if(m.has(P.id))continue;const N=P.afterLineNumber===0?0:I.convertViewPositionToModelPosition(new f.Position(P.afterLineNumber,1)).lineNumber;C.push({lineNumber:N,heightInPx:P.height})}return(0,r.joinCombine)(C,w,P=>P.lineNumber,(P,N)=>({lineNumber:P.lineNumber,heightInPx:P.heightInPx+N.heightInPx}))}}),define(se[883],oe([1,0,6,2,17,38,179,80,43,189,27,193,111,340,47,55,32]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";var f;Object.defineProperty(e,"__esModule",{value:!0}),e.DefaultModelSHA1Computer=e.ModelService=void 0;function c(h){return h.toString()}class d{constructor(m,C,w){this.model=m,this._modelEventListeners=new k.DisposableStore,this.model=m,this._modelEventListeners.add(m.onWillDispose(()=>C(m))),this._modelEventListeners.add(m.onDidChangeLanguage(D=>w(m,D)))}dispose(){this._modelEventListeners.dispose()}}const s=y.isLinux||y.isMacintosh?1:2;class l{constructor(m,C,w,D,I,T,A,P){this.uri=m,this.initialUndoRedoSnapshot=C,this.time=w,this.sharesUndoRedoStack=D,this.heapSize=I,this.sha1=T,this.versionId=A,this.alternativeVersionId=P}}let o=f=class extends k.Disposable{constructor(m,C,w,D,I){super(),this._configurationService=m,this._resourcePropertiesService=C,this._undoRedoService=w,this._languageService=D,this._languageConfigurationService=I,this._onModelAdded=this._register(new L.Emitter),this.onModelAdded=this._onModelAdded.event,this._onModelRemoved=this._register(new L.Emitter),this.onModelRemoved=this._onModelRemoved.event,this._onModelModeChanged=this._register(new L.Emitter),this.onModelLanguageChanged=this._onModelModeChanged.event,this._modelCreationOptionsByLanguageAndResource=Object.create(null),this._models={},this._disposedModels=new Map,this._disposedModelsHeapSize=0,this._register(this._configurationService.onDidChangeConfiguration(T=>this._updateModelOptions(T))),this._updateModelOptions(void 0)}static _readModelOptions(m,C){var w;let D=S.EDITOR_MODEL_DEFAULTS.tabSize;if(m.editor&&typeof m.editor.tabSize<"u"){const O=parseInt(m.editor.tabSize,10);isNaN(O)||(D=O),D<1&&(D=1)}let I="tabSize";if(m.editor&&typeof m.editor.indentSize<"u"&&m.editor.indentSize!=="tabSize"){const O=parseInt(m.editor.indentSize,10);isNaN(O)||(I=Math.max(O,1))}let T=S.EDITOR_MODEL_DEFAULTS.insertSpaces;m.editor&&typeof m.editor.insertSpaces<"u"&&(T=m.editor.insertSpaces==="false"?!1:!!m.editor.insertSpaces);let A=s;const P=m.eol;P===`\r `?A=2:P===` `&&(A=1);let N=S.EDITOR_MODEL_DEFAULTS.trimAutoWhitespace;m.editor&&typeof m.editor.trimAutoWhitespace<"u"&&(N=m.editor.trimAutoWhitespace==="false"?!1:!!m.editor.trimAutoWhitespace);let M=S.EDITOR_MODEL_DEFAULTS.detectIndentation;m.editor&&typeof m.editor.detectIndentation<"u"&&(M=m.editor.detectIndentation==="false"?!1:!!m.editor.detectIndentation);let R=S.EDITOR_MODEL_DEFAULTS.largeFileOptimizations;m.editor&&typeof m.editor.largeFileOptimizations<"u"&&(R=m.editor.largeFileOptimizations==="false"?!1:!!m.editor.largeFileOptimizations);let x=S.EDITOR_MODEL_DEFAULTS.bracketPairColorizationOptions;return!((w=m.editor)===null||w===void 0)&&w.bracketPairColorization&&typeof m.editor.bracketPairColorization=="object"&&(x={enabled:!!m.editor.bracketPairColorization.enabled,independentColorPoolPerBracketType:!!m.editor.bracketPairColorization.independentColorPoolPerBracketType}),{isForSimpleWidget:C,tabSize:D,indentSize:I,insertSpaces:T,detectIndentation:M,defaultEOL:A,trimAutoWhitespace:N,largeFileOptimizations:R,bracketPairColorizationOptions:x}}_getEOL(m,C){if(m)return this._resourcePropertiesService.getEOL(m,C);const w=this._configurationService.getValue("files.eol",{overrideIdentifier:C});return w&&typeof w=="string"&&w!=="auto"?w:y.OS===3||y.OS===2?` `:`\r `}_shouldRestoreUndoStack(){const m=this._configurationService.getValue("files.restoreUndoStack");return typeof m=="boolean"?m:!0}getCreationOptions(m,C,w){const D=typeof m=="string"?m:m.languageId;let I=this._modelCreationOptionsByLanguageAndResource[D+C];if(!I){const T=this._configurationService.getValue("editor",{overrideIdentifier:D,resource:C}),A=this._getEOL(C,D);I=f._readModelOptions({editor:T,eol:A},w),this._modelCreationOptionsByLanguageAndResource[D+C]=I}return I}_updateModelOptions(m){const C=this._modelCreationOptionsByLanguageAndResource;this._modelCreationOptionsByLanguageAndResource=Object.create(null);const w=Object.keys(this._models);for(let D=0,I=w.length;Dm){const C=[];for(this._disposedModels.forEach(w=>{w.sharesUndoRedoStack||C.push(w)}),C.sort((w,D)=>w.time-D.time);C.length>0&&this._disposedModelsHeapSize>m;){const w=C.shift();this._removeDisposedModel(w.uri),w.initialUndoRedoSnapshot!==null&&this._undoRedoService.restoreSnapshot(w.initialUndoRedoSnapshot)}}}_createModelData(m,C,w,D){const I=this.getCreationOptions(C,w,D),T=new E.TextModel(m,C,I,w,this._undoRedoService,this._languageService,this._languageConfigurationService);if(w&&this._disposedModels.has(c(w))){const N=this._removeDisposedModel(w),M=this._undoRedoService.getElements(w),R=this._getSHA1Computer(),x=R.canComputeSHA1(T)?R.computeSHA1(T)===N.sha1:!1;if(x||N.sharesUndoRedoStack){for(const O of M.past)(0,n.isEditStackElement)(O)&&O.matchesResource(w)&&O.setModel(T);for(const O of M.future)(0,n.isEditStackElement)(O)&&O.matchesResource(w)&&O.setModel(T);this._undoRedoService.setElementsValidFlag(w,!0,O=>(0,n.isEditStackElement)(O)&&O.matchesResource(w)),x&&(T._overwriteVersionId(N.versionId),T._overwriteAlternativeVersionId(N.alternativeVersionId),T._overwriteInitialUndoRedoSnapshot(N.initialUndoRedoSnapshot))}else N.initialUndoRedoSnapshot!==null&&this._undoRedoService.restoreSnapshot(N.initialUndoRedoSnapshot)}const A=c(T.uri);if(this._models[A])throw new Error("ModelService: Cannot add model because it already exists!");const P=new d(T,N=>this._onWillDispose(N),(N,M)=>this._onDidChangeLanguage(N,M));return this._models[A]=P,P}createModel(m,C,w,D=!1){let I;return C?I=this._createModelData(m,C,w,D):I=this._createModelData(m,p.PLAINTEXT_LANGUAGE_ID,w,D),this._onModelAdded.fire(I.model),I.model}getModels(){const m=[],C=Object.keys(this._models);for(let w=0,D=C.length;w0||N.future.length>0){for(const M of N.past)(0,n.isEditStackElement)(M)&&M.matchesResource(m.uri)&&(I=!0,T+=M.heapSize(m.uri),M.setModel(m.uri));for(const M of N.future)(0,n.isEditStackElement)(M)&&M.matchesResource(m.uri)&&(I=!0,T+=M.heapSize(m.uri),M.setModel(m.uri))}}const A=f.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK,P=this._getSHA1Computer();if(I)if(!D&&(T>A||!P.canComputeSHA1(m))){const N=w.model.getInitialUndoRedoSnapshot();N!==null&&this._undoRedoService.restoreSnapshot(N)}else this._ensureDisposedModelsHeapSize(A-T),this._undoRedoService.setElementsValidFlag(m.uri,!1,N=>(0,n.isEditStackElement)(N)&&N.matchesResource(m.uri)),this._insertDisposedModel(new l(m.uri,w.model.getInitialUndoRedoSnapshot(),Date.now(),D,T,P.computeSHA1(m),m.getVersionId(),m.getAlternativeVersionId()));else if(!D){const N=w.model.getInitialUndoRedoSnapshot();N!==null&&this._undoRedoService.restoreSnapshot(N)}delete this._models[C],w.dispose(),delete this._modelCreationOptionsByLanguageAndResource[m.getLanguageId()+m.uri],this._onModelRemoved.fire(m)}_onDidChangeLanguage(m,C){const w=C.oldLanguage,D=m.getLanguageId(),I=this.getCreationOptions(w,m.uri,m.isForSimpleWidget),T=this.getCreationOptions(D,m.uri,m.isForSimpleWidget);f._setModelOptionsForModel(m,T,I),this._onModelModeChanged.fire({model:m,oldLanguageId:w})}_getSHA1Computer(){return new g}};e.ModelService=o,o.MAX_MEMORY_FOR_CLOSED_FILES_UNDO_STACK=20*1024*1024,e.ModelService=o=f=ke([ge(0,b.IConfigurationService),ge(1,v.ITextResourcePropertiesService),ge(2,a.IUndoRedoService),ge(3,_.ILanguageService),ge(4,u.ILanguageConfigurationService)],o);class g{canComputeSHA1(m){return m.getValueLength()<=g.MAX_MODEL_SIZE}computeSHA1(m){const C=new i.StringSHA1,w=m.createSnapshot();let D;for(;D=w.read();)C.update(D);return C.digest()}}e.DefaultModelSHA1Computer=g,g.MAX_MODEL_SIZE=10*1024*1024}),define(se[884],oe([1,0,13,10,5,212,38,114,214,547,291,86]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewModelLinesFromModelAsIs=e.ViewModelLinesFromProjectedModel=void 0;class i{constructor(s,l,o,g,h,m,C,w,D,I){this._editorId=s,this.model=l,this._validModelVersionId=-1,this._domLineBreaksComputerFactory=o,this._monospaceLineBreaksComputerFactory=g,this.fontInfo=h,this.tabSize=m,this.wrappingStrategy=C,this.wrappingColumn=w,this.wrappingIndent=D,this.wordBreak=I,this._constructLines(!0,null)}dispose(){this.hiddenAreasDecorationIds=this.model.deltaDecorations(this.hiddenAreasDecorationIds,[])}createCoordinatesConverter(){return new u(this)}_constructLines(s,l){this.modelLineProjections=[],s&&(this.hiddenAreasDecorationIds=this.model.deltaDecorations(this.hiddenAreasDecorationIds,[]));const o=this.model.getLinesContent(),g=this.model.getInjectedTextDecorations(this._editorId),h=o.length,m=this.createLineBreaksComputer(),C=new L.ArrayQueue(p.LineInjectedText.fromDecorations(g));for(let M=0;Mx.lineNumber===M+1);m.addRequest(o[M],R,l?l[M]:null)}const w=m.finalize(),D=[],I=this.hiddenAreasDecorationIds.map(M=>this.model.getDecorationRange(M)).sort(y.Range.compareRangesUsingStarts);let T=1,A=0,P=-1,N=P+1=T&&R<=A,O=(0,v.createModelLineProjection)(w[M],!x);D[M]=O.getViewLineCount(),this.modelLineProjections[M]=O}this._validModelVersionId=this.model.getVersionId(),this.projectedModelLineLineCounts=new b.ConstantTimePrefixSumComputer(D)}getHiddenAreas(){return this.hiddenAreasDecorationIds.map(s=>this.model.getDecorationRange(s))}setHiddenAreas(s){const l=s.map(A=>this.model.validateRange(A)),o=n(l),g=this.hiddenAreasDecorationIds.map(A=>this.model.getDecorationRange(A)).sort(y.Range.compareRangesUsingStarts);if(o.length===g.length){let A=!1;for(let P=0;P({range:A,options:S.ModelDecorationOptions.EMPTY}));this.hiddenAreasDecorationIds=this.model.deltaDecorations(this.hiddenAreasDecorationIds,h);const m=o;let C=1,w=0,D=-1,I=D+1=C&&P<=w?this.modelLineProjections[A].isVisible()&&(this.modelLineProjections[A]=this.modelLineProjections[A].setVisible(!1),N=!0):(T=!0,this.modelLineProjections[A].isVisible()||(this.modelLineProjections[A]=this.modelLineProjections[A].setVisible(!0),N=!0)),N){const M=this.modelLineProjections[A].getViewLineCount();this.projectedModelLineLineCounts.setValue(A,M)}}return T||this.setHiddenAreas([]),!0}modelPositionIsVisible(s,l){return s<1||s>this.modelLineProjections.length?!1:this.modelLineProjections[s-1].isVisible()}getModelLineViewLineCount(s){return s<1||s>this.modelLineProjections.length?1:this.modelLineProjections[s-1].getViewLineCount()}setTabSize(s){return this.tabSize===s?!1:(this.tabSize=s,this._constructLines(!1,null),!0)}setWrappingSettings(s,l,o,g,h){const m=this.fontInfo.equals(s),C=this.wrappingStrategy===l,w=this.wrappingColumn===o,D=this.wrappingIndent===g,I=this.wordBreak===h;if(m&&C&&w&&D&&I)return!1;const T=m&&C&&!w&&D&&I;this.fontInfo=s,this.wrappingStrategy=l,this.wrappingColumn=o,this.wrappingIndent=g,this.wordBreak=h;let A=null;if(T){A=[];for(let P=0,N=this.modelLineProjections.length;P2&&!this.modelLineProjections[l-2].isVisible(),m=l===1?1:this.projectedModelLineLineCounts.getPrefixSum(l-1)+1;let C=0;const w=[],D=[];for(let I=0,T=g.length;Iw?(I=this.projectedModelLineLineCounts.getPrefixSum(l-1)+1,T=I+w-1,N=T+1,M=N+(h-w)-1,D=!0):hl?l:s|0}getActiveIndentGuide(s,l,o){s=this._toValidViewLineNumber(s),l=this._toValidViewLineNumber(l),o=this._toValidViewLineNumber(o);const g=this.convertViewPositionToModelPosition(s,this.getViewLineMinColumn(s)),h=this.convertViewPositionToModelPosition(l,this.getViewLineMinColumn(l)),m=this.convertViewPositionToModelPosition(o,this.getViewLineMinColumn(o)),C=this.model.guides.getActiveIndentGuide(g.lineNumber,h.lineNumber,m.lineNumber),w=this.convertModelPositionToViewPosition(C.startLineNumber,1),D=this.convertModelPositionToViewPosition(C.endLineNumber,this.model.getLineMaxColumn(C.endLineNumber));return{startLineNumber:w.lineNumber,endLineNumber:D.lineNumber,indent:C.indent}}getViewLineInfo(s){s=this._toValidViewLineNumber(s);const l=this.projectedModelLineLineCounts.getIndexOf(s-1),o=l.index,g=l.remainder;return new t(o+1,g)}getMinColumnOfViewLine(s){return this.modelLineProjections[s.modelLineNumber-1].getViewLineMinColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx)}getMaxColumnOfViewLine(s){return this.modelLineProjections[s.modelLineNumber-1].getViewLineMaxColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx)}getModelStartPositionOfViewLine(s){const l=this.modelLineProjections[s.modelLineNumber-1],o=l.getViewLineMinColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx),g=l.getModelColumnOfViewPosition(s.modelLineWrappedLineIdx,o);return new k.Position(s.modelLineNumber,g)}getModelEndPositionOfViewLine(s){const l=this.modelLineProjections[s.modelLineNumber-1],o=l.getViewLineMaxColumn(this.model,s.modelLineNumber,s.modelLineWrappedLineIdx),g=l.getModelColumnOfViewPosition(s.modelLineWrappedLineIdx,o);return new k.Position(s.modelLineNumber,g)}getViewLineInfosGroupedByModelRanges(s,l){const o=this.getViewLineInfo(s),g=this.getViewLineInfo(l),h=new Array;let m=this.getModelStartPositionOfViewLine(o),C=new Array;for(let w=o.modelLineNumber;w<=g.modelLineNumber;w++){const D=this.modelLineProjections[w-1];if(D.isVisible()){const I=w===o.modelLineNumber?o.modelLineWrappedLineIdx:0,T=w===g.modelLineNumber?g.modelLineWrappedLineIdx+1:D.getViewLineCount();for(let A=I;A{if(P.forWrappedLinesAfterColumn!==-1&&this.modelLineProjections[I.modelLineNumber-1].getViewPositionOfModelPosition(0,P.forWrappedLinesAfterColumn).lineNumber>=I.modelLineWrappedLineIdx||P.forWrappedLinesBeforeOrAtColumn!==-1&&this.modelLineProjections[I.modelLineNumber-1].getViewPositionOfModelPosition(0,P.forWrappedLinesBeforeOrAtColumn).lineNumberI.modelLineWrappedLineIdx)return}const M=this.convertModelPositionToViewPosition(I.modelLineNumber,P.horizontalLine.endColumn),R=this.modelLineProjections[I.modelLineNumber-1].getViewPositionOfModelPosition(0,P.horizontalLine.endColumn);return R.lineNumber===I.modelLineWrappedLineIdx?new E.IndentGuide(P.visibleColumn,N,P.className,new E.IndentGuideHorizontalLine(P.horizontalLine.top,M.column),-1,-1):R.lineNumber!!P))}}return m}getViewLinesIndentGuides(s,l){s=this._toValidViewLineNumber(s),l=this._toValidViewLineNumber(l);const o=this.convertViewPositionToModelPosition(s,this.getViewLineMinColumn(s)),g=this.convertViewPositionToModelPosition(l,this.getViewLineMaxColumn(l));let h=[];const m=[],C=[],w=o.lineNumber-1,D=g.lineNumber-1;let I=null;for(let N=w;N<=D;N++){const M=this.modelLineProjections[N];if(M.isVisible()){const R=M.getViewLineNumberOfModelPosition(0,N===w?o.column:1),x=M.getViewLineNumberOfModelPosition(0,this.model.getLineMaxColumn(N+1)),O=x-R+1;let B=0;O>1&&M.getViewLineMinColumn(this.model,N+1,x)===1&&(B=R===0?1:2),m.push(O),C.push(B),I===null&&(I=new k.Position(N+1,0))}else I!==null&&(h=h.concat(this.model.guides.getLinesIndentGuides(I.lineNumber,N)),I=null)}I!==null&&(h=h.concat(this.model.guides.getLinesIndentGuides(I.lineNumber,g.lineNumber)),I=null);const T=l-s+1,A=new Array(T);let P=0;for(let N=0,M=h.length;Nl&&(N=!0,P=l-h+1),T.getViewLinesData(this.model,D+1,A,P,h-s,o,w),h+=P,N)break}return w}validateViewPosition(s,l,o){s=this._toValidViewLineNumber(s);const g=this.projectedModelLineLineCounts.getIndexOf(s-1),h=g.index,m=g.remainder,C=this.modelLineProjections[h],w=C.getViewLineMinColumn(this.model,h+1,m),D=C.getViewLineMaxColumn(this.model,h+1,m);lD&&(l=D);const I=C.getModelColumnOfViewPosition(m,l);return this.model.validatePosition(new k.Position(h+1,I)).equals(o)?new k.Position(s,l):this.convertModelPositionToViewPosition(o.lineNumber,o.column)}validateViewRange(s,l){const o=this.validateViewPosition(s.startLineNumber,s.startColumn,l.getStartPosition()),g=this.validateViewPosition(s.endLineNumber,s.endColumn,l.getEndPosition());return new y.Range(o.lineNumber,o.column,g.lineNumber,g.column)}convertViewPositionToModelPosition(s,l){const o=this.getViewLineInfo(s),g=this.modelLineProjections[o.modelLineNumber-1].getModelColumnOfViewPosition(o.modelLineWrappedLineIdx,l);return this.model.validatePosition(new k.Position(o.modelLineNumber,g))}convertViewRangeToModelRange(s){const l=this.convertViewPositionToModelPosition(s.startLineNumber,s.startColumn),o=this.convertViewPositionToModelPosition(s.endLineNumber,s.endColumn);return new y.Range(l.lineNumber,l.column,o.lineNumber,o.column)}convertModelPositionToViewPosition(s,l,o=2,g=!1,h=!1){const m=this.model.validatePosition(new k.Position(s,l)),C=m.lineNumber,w=m.column;let D=C-1,I=!1;if(h)for(;D0&&!this.modelLineProjections[D].isVisible();)D--,I=!0;if(D===0&&!this.modelLineProjections[D].isVisible())return new k.Position(g?0:1,1);const T=1+this.projectedModelLineLineCounts.getPrefixSum(D);let A;return I?h?A=this.modelLineProjections[D].getViewPositionOfModelPosition(T,1,o):A=this.modelLineProjections[D].getViewPositionOfModelPosition(T,this.model.getLineMaxColumn(D+1),o):A=this.modelLineProjections[C-1].getViewPositionOfModelPosition(T,w,o),A}convertModelRangeToViewRange(s,l=0){if(s.isEmpty()){const o=this.convertModelPositionToViewPosition(s.startLineNumber,s.startColumn,l);return y.Range.fromPositions(o)}else{const o=this.convertModelPositionToViewPosition(s.startLineNumber,s.startColumn,1),g=this.convertModelPositionToViewPosition(s.endLineNumber,s.endColumn,0);return new y.Range(o.lineNumber,o.column,g.lineNumber,g.column)}}getViewLineNumberOfModelPosition(s,l){let o=s-1;if(this.modelLineProjections[o].isVisible()){const h=1+this.projectedModelLineLineCounts.getPrefixSum(o);return this.modelLineProjections[o].getViewLineNumberOfModelPosition(h,l)}for(;o>0&&!this.modelLineProjections[o].isVisible();)o--;if(o===0&&!this.modelLineProjections[o].isVisible())return 1;const g=1+this.projectedModelLineLineCounts.getPrefixSum(o);return this.modelLineProjections[o].getViewLineNumberOfModelPosition(g,this.model.getLineMaxColumn(o+1))}getDecorationsInRange(s,l,o,g,h){const m=this.convertViewPositionToModelPosition(s.startLineNumber,s.startColumn),C=this.convertViewPositionToModelPosition(s.endLineNumber,s.endColumn);if(C.lineNumber-m.lineNumber<=s.endLineNumber-s.startLineNumber)return this.model.getDecorationsInRange(new y.Range(m.lineNumber,1,C.lineNumber,C.column),l,o,g,h);let w=[];const D=m.lineNumber-1,I=C.lineNumber-1;let T=null;for(let M=D;M<=I;M++)if(this.modelLineProjections[M].isVisible())T===null&&(T=new k.Position(M+1,M===D?m.column:1));else if(T!==null){const x=this.model.getLineMaxColumn(M);w=w.concat(this.model.getDecorationsInRange(new y.Range(T.lineNumber,T.column,M,x),l,o,g)),T=null}T!==null&&(w=w.concat(this.model.getDecorationsInRange(new y.Range(T.lineNumber,T.column,C.lineNumber,C.column),l,o,g)),T=null),w.sort((M,R)=>{const x=y.Range.compareRangesUsingStarts(M.range,R.range);return x===0?M.idR.id?1:0:x});const A=[];let P=0,N=null;for(const M of w){const R=M.id;N!==R&&(N=R,A[P++]=M)}return A}getInjectedTextAt(s){const l=this.getViewLineInfo(s.lineNumber);return this.modelLineProjections[l.modelLineNumber-1].getInjectedTextAt(l.modelLineWrappedLineIdx,s.column)}normalizePosition(s,l){const o=this.getViewLineInfo(s.lineNumber);return this.modelLineProjections[o.modelLineNumber-1].normalizePosition(o.modelLineWrappedLineIdx,s,l)}getLineIndentColumn(s){const l=this.getViewLineInfo(s);return l.modelLineWrappedLineIdx===0?this.model.getLineIndentColumn(l.modelLineNumber):0}}e.ViewModelLinesFromProjectedModel=i;function n(d){if(d.length===0)return[];const s=d.slice();s.sort(y.Range.compareRangesUsingStarts);const l=[];let o=s[0].startLineNumber,g=s[0].endLineNumber;for(let h=1,m=s.length;hg+1?(l.push(new y.Range(o,1,g,1)),o=C.startLineNumber,g=C.endLineNumber):C.endLineNumber>g&&(g=C.endLineNumber)}return l.push(new y.Range(o,1,g,1)),l}class t{constructor(s,l){this.modelLineNumber=s,this.modelLineWrappedLineIdx=l}}class r{constructor(s,l){this.modelRange=s,this.viewLines=l}}class u{constructor(s){this._lines=s}convertViewPositionToModelPosition(s){return this._lines.convertViewPositionToModelPosition(s.lineNumber,s.column)}convertViewRangeToModelRange(s){return this._lines.convertViewRangeToModelRange(s)}validateViewPosition(s,l){return this._lines.validateViewPosition(s.lineNumber,s.column,l)}validateViewRange(s,l){return this._lines.validateViewRange(s,l)}convertModelPositionToViewPosition(s,l,o,g){return this._lines.convertModelPositionToViewPosition(s.lineNumber,s.column,l,o,g)}convertModelRangeToViewRange(s,l){return this._lines.convertModelRangeToViewRange(s,l)}modelPositionIsVisible(s){return this._lines.modelPositionIsVisible(s.lineNumber,s.column)}getModelLineViewLineCount(s){return this._lines.getModelLineViewLineCount(s)}getViewLineNumberOfModelPosition(s,l){return this._lines.getViewLineNumberOfModelPosition(s,l)}}class f{constructor(s){this.model=s}dispose(){}createCoordinatesConverter(){return new c(this)}getHiddenAreas(){return[]}setHiddenAreas(s){return!1}setTabSize(s){return!1}setWrappingSettings(s,l,o,g){return!1}createLineBreaksComputer(){const s=[];return{addRequest:(l,o,g)=>{s.push(null)},finalize:()=>s}}onModelFlushed(){}onModelLinesDeleted(s,l,o){return new _.ViewLinesDeletedEvent(l,o)}onModelLinesInserted(s,l,o,g){return new _.ViewLinesInsertedEvent(l,o)}onModelLineChanged(s,l,o){return[!1,new _.ViewLinesChangedEvent(l,1),null,null]}acceptVersionId(s){}getViewLineCount(){return this.model.getLineCount()}getActiveIndentGuide(s,l,o){return{startLineNumber:s,endLineNumber:s,indent:0}}getViewLinesBracketGuides(s,l,o){return new Array(l-s+1).fill([])}getViewLinesIndentGuides(s,l){const o=l-s+1,g=new Array(o);for(let h=0;hl)}getModelLineViewLineCount(s){return 1}getViewLineNumberOfModelPosition(s,l){return s}}}),define(se[885],oe([1,0,13,14,39,2,17,11,36,791,75,10,5,114,31,80,337,214,551,339,86,336,215,884,546]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ViewModel=void 0;const m=!0;class C extends E.Disposable{constructor(M,R,x,O,B,W,V,K,F){if(super(),this.languageConfigurationService=V,this._themeService=K,this._attachedView=F,this.hiddenAreasModel=new I,this.previousHiddenAreas=[],this._editorId=M,this._configuration=R,this.model=x,this._eventDispatcher=new o.ViewModelEventDispatcher,this.onEvent=this._eventDispatcher.onEvent,this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._updateConfigurationViewLineCount=this._register(new k.RunOnceScheduler(()=>this._updateConfigurationViewLineCountNow(),0)),this._hasFocus=!1,this._viewportStart=w.create(this.model),this.glyphLanes=new h.GlyphMarginLanesModel(0),m&&this.model.isTooLargeForTokenization())this._lines=new g.ViewModelLinesFromModelAsIs(this.model);else{const q=this._configuration.options,ie=q.get(50),ae=q.get(137),ne=q.get(144),$=q.get(136),J=q.get(128);this._lines=new g.ViewModelLinesFromProjectedModel(this._editorId,this.model,O,B,ie,this.model.getOptions().tabSize,ae,ne.wrappingColumn,$,J)}this.coordinatesConverter=this._lines.createCoordinatesConverter(),this._cursor=this._register(new v.CursorsController(x,this,this.coordinatesConverter,this.cursorConfig)),this.viewLayout=this._register(new c.ViewLayout(this._configuration,this.getLineCount(),W)),this._register(this.viewLayout.onDidScroll(q=>{q.scrollTopChanged&&this._handleVisibleLinesChanged(),q.scrollTopChanged&&this._viewportStart.invalidate(),this._eventDispatcher.emitSingleViewEvent(new f.ViewScrollChangedEvent(q)),this._eventDispatcher.emitOutgoingEvent(new o.ScrollChangedEvent(q.oldScrollWidth,q.oldScrollLeft,q.oldScrollHeight,q.oldScrollTop,q.scrollWidth,q.scrollLeft,q.scrollHeight,q.scrollTop))})),this._register(this.viewLayout.onDidContentSizeChange(q=>{this._eventDispatcher.emitOutgoingEvent(q)})),this._decorations=new l.ViewModelDecorations(this._editorId,this.model,this._configuration,this._lines,this.coordinatesConverter),this._registerModelEvents(),this._register(this._configuration.onDidChangeFast(q=>{try{const ie=this._eventDispatcher.beginEmitViewEvents();this._onConfigurationChanged(ie,q)}finally{this._eventDispatcher.endEmitViewEvents()}})),this._register(d.MinimapTokensColorTracker.getInstance().onDidChange(()=>{this._eventDispatcher.emitSingleViewEvent(new f.ViewTokensColorsChangedEvent)})),this._register(this._themeService.onDidColorThemeChange(q=>{this._invalidateDecorationsColorCache(),this._eventDispatcher.emitSingleViewEvent(new f.ViewThemeChangedEvent(q))})),this._updateConfigurationViewLineCountNow()}dispose(){super.dispose(),this._decorations.dispose(),this._lines.dispose(),this._viewportStart.dispose(),this._eventDispatcher.dispose()}createLineBreaksComputer(){return this._lines.createLineBreaksComputer()}addViewEventHandler(M){this._eventDispatcher.addViewEventHandler(M)}removeViewEventHandler(M){this._eventDispatcher.removeViewEventHandler(M)}_updateConfigurationViewLineCountNow(){this._configuration.setViewLineCount(this._lines.getViewLineCount())}getModelVisibleRanges(){const M=this.viewLayout.getLinesViewportData(),R=new i.Range(M.startLineNumber,this.getLineMinColumn(M.startLineNumber),M.endLineNumber,this.getLineMaxColumn(M.endLineNumber));return this._toModelVisibleRanges(R)}visibleLinesStabilized(){const M=this.getModelVisibleRanges();this._attachedView.setVisibleLines(M,!0)}_handleVisibleLinesChanged(){const M=this.getModelVisibleRanges();this._attachedView.setVisibleLines(M,!1)}setHasFocus(M){this._hasFocus=M,this._cursor.setHasFocus(M),this._eventDispatcher.emitSingleViewEvent(new f.ViewFocusChangedEvent(M)),this._eventDispatcher.emitOutgoingEvent(new o.FocusChangedEvent(!M,M))}onCompositionStart(){this._eventDispatcher.emitSingleViewEvent(new f.ViewCompositionStartEvent)}onCompositionEnd(){this._eventDispatcher.emitSingleViewEvent(new f.ViewCompositionEndEvent)}_captureStableViewport(){if(this._viewportStart.isValid&&this.viewLayout.getCurrentScrollTop()>0){const M=new a.Position(this._viewportStart.viewLineNumber,this.getLineMinColumn(this._viewportStart.viewLineNumber)),R=this.coordinatesConverter.convertViewPositionToModelPosition(M);return new P(R,this._viewportStart.startLineDelta)}return new P(null,0)}_onConfigurationChanged(M,R){const x=this._captureStableViewport(),O=this._configuration.options,B=O.get(50),W=O.get(137),V=O.get(144),K=O.get(136),F=O.get(128);this._lines.setWrappingSettings(B,W,V.wrappingColumn,K,F)&&(M.emitViewEvent(new f.ViewFlushedEvent),M.emitViewEvent(new f.ViewLineMappingChangedEvent),M.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(M),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this._updateConfigurationViewLineCount.schedule()),R.hasChanged(90)&&(this._decorations.reset(),M.emitViewEvent(new f.ViewDecorationsChangedEvent(null))),R.hasChanged(97)&&(this._decorations.reset(),M.emitViewEvent(new f.ViewDecorationsChangedEvent(null))),M.emitViewEvent(new f.ViewConfigurationChangedEvent(R)),this.viewLayout.onConfigurationChanged(R),x.recoverViewportStart(this.coordinatesConverter,this.viewLayout),b.CursorConfiguration.shouldRecreate(R)&&(this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig))}_registerModelEvents(){this._register(this.model.onDidChangeContentOrInjectedText(M=>{try{const x=this._eventDispatcher.beginEmitViewEvents();let O=!1,B=!1;const W=M instanceof n.InternalModelContentChangeEvent?M.rawContentChangedEvent.changes:M.changes,V=M instanceof n.InternalModelContentChangeEvent?M.rawContentChangedEvent.versionId:null,K=this._lines.createLineBreaksComputer();for(const ie of W)switch(ie.changeType){case 4:{for(let ae=0;ae!J.ownerId||J.ownerId===this._editorId)),K.addRequest(ne,$,null)}break}case 2:{let ae=null;ie.injectedText&&(ae=ie.injectedText.filter(ne=>!ne.ownerId||ne.ownerId===this._editorId)),K.addRequest(ie.detail,ae,null);break}}const F=K.finalize(),q=new L.ArrayQueue(F);for(const ie of W)switch(ie.changeType){case 1:{this._lines.onModelFlushed(),x.emitViewEvent(new f.ViewFlushedEvent),this._decorations.reset(),this.viewLayout.onFlushed(this.getLineCount()),O=!0;break}case 3:{const ae=this._lines.onModelLinesDeleted(V,ie.fromLineNumber,ie.toLineNumber);ae!==null&&(x.emitViewEvent(ae),this.viewLayout.onLinesDeleted(ae.fromLineNumber,ae.toLineNumber)),O=!0;break}case 4:{const ae=q.takeCount(ie.detail.length),ne=this._lines.onModelLinesInserted(V,ie.fromLineNumber,ie.toLineNumber,ae);ne!==null&&(x.emitViewEvent(ne),this.viewLayout.onLinesInserted(ne.fromLineNumber,ne.toLineNumber)),O=!0;break}case 2:{const ae=q.dequeue(),[ne,$,J,Q]=this._lines.onModelLineChanged(V,ie.lineNumber,ae);B=ne,$&&x.emitViewEvent($),J&&(x.emitViewEvent(J),this.viewLayout.onLinesInserted(J.fromLineNumber,J.toLineNumber)),Q&&(x.emitViewEvent(Q),this.viewLayout.onLinesDeleted(Q.fromLineNumber,Q.toLineNumber));break}case 5:break}V!==null&&this._lines.acceptVersionId(V),this.viewLayout.onHeightMaybeChanged(),!O&&B&&(x.emitViewEvent(new f.ViewLineMappingChangedEvent),x.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(x),this._decorations.onLineMappingChanged())}finally{this._eventDispatcher.endEmitViewEvents()}const R=this._viewportStart.isValid;if(this._viewportStart.invalidate(),this._configuration.setModelLineCount(this.model.getLineCount()),this._updateConfigurationViewLineCountNow(),!this._hasFocus&&this.model.getAttachedEditorCount()>=2&&R){const x=this.model._getTrackedRange(this._viewportStart.modelTrackedRange);if(x){const O=this.coordinatesConverter.convertModelPositionToViewPosition(x.getStartPosition()),B=this.viewLayout.getVerticalOffsetForLineNumber(O.lineNumber);this.viewLayout.setScrollPosition({scrollTop:B+this._viewportStart.startLineDelta},1)}}try{const x=this._eventDispatcher.beginEmitViewEvents();M instanceof n.InternalModelContentChangeEvent&&x.emitOutgoingEvent(new o.ModelContentChangedEvent(M.contentChangedEvent)),this._cursor.onModelContentChanged(x,M)}finally{this._eventDispatcher.endEmitViewEvents()}this._handleVisibleLinesChanged()})),this._register(this.model.onDidChangeTokens(M=>{const R=[];for(let x=0,O=M.ranges.length;x{this._eventDispatcher.emitSingleViewEvent(new f.ViewLanguageConfigurationEvent),this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig),this._eventDispatcher.emitOutgoingEvent(new o.ModelLanguageConfigurationChangedEvent(M))})),this._register(this.model.onDidChangeLanguage(M=>{this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig),this._eventDispatcher.emitOutgoingEvent(new o.ModelLanguageChangedEvent(M))})),this._register(this.model.onDidChangeOptions(M=>{if(this._lines.setTabSize(this.model.getOptions().tabSize)){try{const R=this._eventDispatcher.beginEmitViewEvents();R.emitViewEvent(new f.ViewFlushedEvent),R.emitViewEvent(new f.ViewLineMappingChangedEvent),R.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(R),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount())}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule()}this.cursorConfig=new b.CursorConfiguration(this.model.getLanguageId(),this.model.getOptions(),this._configuration,this.languageConfigurationService),this._cursor.updateConfiguration(this.cursorConfig),this._eventDispatcher.emitOutgoingEvent(new o.ModelOptionsChangedEvent(M))})),this._register(this.model.onDidChangeDecorations(M=>{this._decorations.onModelDecorationsChanged(),this._eventDispatcher.emitSingleViewEvent(new f.ViewDecorationsChangedEvent(M)),this._eventDispatcher.emitOutgoingEvent(new o.ModelDecorationsChangedEvent(M))}))}setHiddenAreas(M,R){var x;this.hiddenAreasModel.setHiddenAreas(R,M);const O=this.hiddenAreasModel.getMergedRanges();if(O===this.previousHiddenAreas)return;this.previousHiddenAreas=O;const B=this._captureStableViewport();let W=!1;try{const V=this._eventDispatcher.beginEmitViewEvents();W=this._lines.setHiddenAreas(O),W&&(V.emitViewEvent(new f.ViewFlushedEvent),V.emitViewEvent(new f.ViewLineMappingChangedEvent),V.emitViewEvent(new f.ViewDecorationsChangedEvent(null)),this._cursor.onLineMappingChanged(V),this._decorations.onLineMappingChanged(),this.viewLayout.onFlushed(this.getLineCount()),this.viewLayout.onHeightMaybeChanged());const K=(x=B.viewportStartModelPosition)===null||x===void 0?void 0:x.lineNumber;K&&O.some(q=>q.startLineNumber<=K&&K<=q.endLineNumber)||B.recoverViewportStart(this.coordinatesConverter,this.viewLayout)}finally{this._eventDispatcher.endEmitViewEvents()}this._updateConfigurationViewLineCount.schedule(),W&&this._eventDispatcher.emitOutgoingEvent(new o.HiddenAreasChangedEvent)}getVisibleRangesPlusViewportAboveBelow(){const M=this._configuration.options.get(143),R=this._configuration.options.get(66),x=Math.max(20,Math.round(M.height/R)),O=this.viewLayout.getLinesViewportData(),B=Math.max(1,O.completelyVisibleStartLineNumber-x),W=Math.min(this.getLineCount(),O.completelyVisibleEndLineNumber+x);return this._toModelVisibleRanges(new i.Range(B,this.getLineMinColumn(B),W,this.getLineMaxColumn(W)))}getVisibleRanges(){const M=this.getCompletelyVisibleViewRange();return this._toModelVisibleRanges(M)}getHiddenAreas(){return this._lines.getHiddenAreas()}_toModelVisibleRanges(M){const R=this.coordinatesConverter.convertViewRangeToModelRange(M),x=this._lines.getHiddenAreas();if(x.length===0)return[R];const O=[];let B=0,W=R.startLineNumber,V=R.startColumn;const K=R.endLineNumber,F=R.endColumn;for(let q=0,ie=x.length;qK||(W"u")return this._reduceRestoreStateCompatibility(M);const R=this.model.validatePosition(M.firstPosition),x=this.coordinatesConverter.convertModelPositionToViewPosition(R),O=this.viewLayout.getVerticalOffsetForLineNumber(x.lineNumber)-M.firstPositionDeltaTop;return{scrollLeft:M.scrollLeft,scrollTop:O}}_reduceRestoreStateCompatibility(M){return{scrollLeft:M.scrollLeft,scrollTop:M.scrollTopWithoutViewZones}}getTabSize(){return this.model.getOptions().tabSize}getLineCount(){return this._lines.getViewLineCount()}setViewport(M,R,x){this._viewportStart.update(this,M)}getActiveIndentGuide(M,R,x){return this._lines.getActiveIndentGuide(M,R,x)}getLinesIndentGuides(M,R){return this._lines.getViewLinesIndentGuides(M,R)}getBracketGuidesInRangeByLine(M,R,x,O){return this._lines.getViewLinesBracketGuides(M,R,x,O)}getLineContent(M){return this._lines.getViewLineContent(M)}getLineLength(M){return this._lines.getViewLineLength(M)}getLineMinColumn(M){return this._lines.getViewLineMinColumn(M)}getLineMaxColumn(M){return this._lines.getViewLineMaxColumn(M)}getLineFirstNonWhitespaceColumn(M){const R=p.firstNonWhitespaceIndex(this.getLineContent(M));return R===-1?0:R+1}getLineLastNonWhitespaceColumn(M){const R=p.lastNonWhitespaceIndex(this.getLineContent(M));return R===-1?0:R+2}getMinimapDecorationsInRange(M){return this._decorations.getMinimapDecorationsInRange(M)}getDecorationsInViewport(M){return this._decorations.getDecorationsViewportData(M).decorations}getInjectedTextAt(M){return this._lines.getInjectedTextAt(M)}getViewportViewLineRenderingData(M,R){const O=this._decorations.getDecorationsViewportData(M).inlineDecorations[R-M.startLineNumber];return this._getViewLineRenderingData(R,O)}getViewLineRenderingData(M){const R=this._decorations.getInlineDecorationsOnLine(M);return this._getViewLineRenderingData(M,R)}_getViewLineRenderingData(M,R){const x=this.model.mightContainRTL(),O=this.model.mightContainNonBasicASCII(),B=this.getTabSize(),W=this._lines.getViewLineData(M);return W.inlineDecorations&&(R=[...R,...W.inlineDecorations.map(V=>V.toInlineDecoration(M))]),new s.ViewLineRenderingData(W.minColumn,W.maxColumn,W.content,W.continuesWithWrappedLine,x,O,W.tokens,R,B,W.startVisibleColumn)}getViewLineData(M){return this._lines.getViewLineData(M)}getMinimapLinesRenderingData(M,R,x){const O=this._lines.getViewLinesData(M,R,x);return new s.MinimapLinesRenderingData(this.getTabSize(),O)}getAllOverviewRulerDecorations(M){const R=this.model.getOverviewRulerDecorations(this._editorId,(0,_.filterValidationDecorations)(this._configuration.options)),x=new D;for(const O of R){const B=O.options,W=B.overviewRuler;if(!W)continue;const V=W.position;if(V===0)continue;const K=W.getColor(M.value),F=this.coordinatesConverter.getViewLineNumberOfModelPosition(O.range.startLineNumber,O.range.startColumn),q=this.coordinatesConverter.getViewLineNumberOfModelPosition(O.range.endLineNumber,O.range.endColumn);x.accept(K,B.zIndex,F,q,V)}return x.asArray}_invalidateDecorationsColorCache(){const M=this.model.getOverviewRulerDecorations();for(const R of M){const x=R.options.overviewRuler;x?.invalidateCachedColor();const O=R.options.minimap;O?.invalidateCachedColor()}}getValueInRange(M,R){const x=this.coordinatesConverter.convertViewRangeToModelRange(M);return this.model.getValueInRange(x,R)}getValueLengthInRange(M,R){const x=this.coordinatesConverter.convertViewRangeToModelRange(M);return this.model.getValueLengthInRange(x,R)}modifyPosition(M,R){const x=this.coordinatesConverter.convertViewPositionToModelPosition(M),O=this.model.modifyPosition(x,R);return this.coordinatesConverter.convertModelPositionToViewPosition(O)}deduceModelPositionRelativeToViewPosition(M,R,x){const O=this.coordinatesConverter.convertViewPositionToModelPosition(M);this.model.getEOL().length===2&&(R<0?R-=x:R+=x);const W=this.model.getOffsetAt(O)+R;return this.model.getPositionAt(W)}getPlainTextToCopy(M,R,x){const O=x?`\r `:this.model.getEOL();M=M.slice(0),M.sort(i.Range.compareRangesUsingStarts);let B=!1,W=!1;for(const K of M)K.isEmpty()?B=!0:W=!0;if(!W){if(!R)return"";const K=M.map(q=>q.startLineNumber);let F="";for(let q=0;q0&&K[q-1]===K[q]||(F+=this.model.getLineContent(K[q])+O);return F}if(B&&R){const K=[];let F=0;for(const q of M){const ie=q.startLineNumber;q.isEmpty()?ie!==F&&K.push(this.model.getLineContent(ie)):K.push(this.model.getValueInRange(q,x?2:0)),F=ie}return K.length===1?K[0]:K}const V=[];for(const K of M)K.isEmpty()||V.push(this.model.getValueInRange(K,x?2:0));return V.length===1?V[0]:V}getRichTextToCopy(M,R){const x=this.model.getLanguageId();if(x===r.PLAINTEXT_LANGUAGE_ID||M.length!==1)return null;let O=M[0];if(O.isEmpty()){if(!R)return null;const q=O.startLineNumber;O=new i.Range(q,this.model.getLineMinColumn(q),q,this.model.getLineMaxColumn(q))}const B=this._configuration.options.get(50),W=this._getColorMap(),K=/[:;\\\/<>]/.test(B.fontFamily)||B.fontFamily===_.EDITOR_FONT_DEFAULTS.fontFamily;let F;return K?F=_.EDITOR_FONT_DEFAULTS.fontFamily:(F=B.fontFamily,F=F.replace(/"/g,"'"),/[,']/.test(F)||/[+ ]/.test(F)&&(F=`'${F}'`),F=`${F}, ${_.EDITOR_FONT_DEFAULTS.fontFamily}`),{mode:x,html:`
    `+this._getHTMLToCopy(O,W)+"
    "}}_getHTMLToCopy(M,R){const x=M.startLineNumber,O=M.startColumn,B=M.endLineNumber,W=M.endColumn,V=this.getTabSize();let K="";for(let F=x;F<=B;F++){const q=this.model.tokenization.getLineTokens(F),ie=q.getLineContent(),ae=F===x?O-1:0,ne=F===B?W-1:ie.length;ie===""?K+="
    ":K+=(0,u.tokenizeLineToHTML)(ie,q.inflate(),R,ae,ne,V,S.isWindows)}return K}_getColorMap(){const M=t.TokenizationRegistry.getColorMap(),R=["#000000"];if(M)for(let x=1,O=M.length;xthis._cursor.setStates(O,M,R,x))}getCursorColumnSelectData(){return this._cursor.getCursorColumnSelectData()}getCursorAutoClosedCharacters(){return this._cursor.getAutoClosedCharacters()}setCursorColumnSelectData(M){this._cursor.setCursorColumnSelectData(M)}getPrevEditOperationType(){return this._cursor.getPrevEditOperationType()}setPrevEditOperationType(M){this._cursor.setPrevEditOperationType(M)}getSelection(){return this._cursor.getSelection()}getSelections(){return this._cursor.getSelections()}getPosition(){return this._cursor.getPrimaryCursorState().modelState.position}setSelections(M,R,x=0){this._withViewEventsCollector(O=>this._cursor.setSelections(O,M,R,x))}saveCursorState(){return this._cursor.saveState()}restoreCursorState(M){this._withViewEventsCollector(R=>this._cursor.restoreState(R,M))}_executeCursorEdit(M){if(this._cursor.context.cursorConfig.readOnly){this._eventDispatcher.emitOutgoingEvent(new o.ReadOnlyEditAttemptEvent);return}this._withViewEventsCollector(M)}executeEdits(M,R,x){this._executeCursorEdit(O=>this._cursor.executeEdits(O,M,R,x))}startComposition(){this._executeCursorEdit(M=>this._cursor.startComposition(M))}endComposition(M){this._executeCursorEdit(R=>this._cursor.endComposition(R,M))}type(M,R){this._executeCursorEdit(x=>this._cursor.type(x,M,R))}compositionType(M,R,x,O,B){this._executeCursorEdit(W=>this._cursor.compositionType(W,M,R,x,O,B))}paste(M,R,x,O){this._executeCursorEdit(B=>this._cursor.paste(B,M,R,x,O))}cut(M){this._executeCursorEdit(R=>this._cursor.cut(R,M))}executeCommand(M,R){this._executeCursorEdit(x=>this._cursor.executeCommand(x,M,R))}executeCommands(M,R){this._executeCursorEdit(x=>this._cursor.executeCommands(x,M,R))}revealPrimaryCursor(M,R,x=!1){this._withViewEventsCollector(O=>this._cursor.revealPrimary(O,M,x,0,R,0))}revealTopMostCursor(M){const R=this._cursor.getTopMostViewPosition(),x=new i.Range(R.lineNumber,R.column,R.lineNumber,R.column);this._withViewEventsCollector(O=>O.emitViewEvent(new f.ViewRevealRangeRequestEvent(M,!1,x,null,0,!0,0)))}revealBottomMostCursor(M){const R=this._cursor.getBottomMostViewPosition(),x=new i.Range(R.lineNumber,R.column,R.lineNumber,R.column);this._withViewEventsCollector(O=>O.emitViewEvent(new f.ViewRevealRangeRequestEvent(M,!1,x,null,0,!0,0)))}revealRange(M,R,x,O,B){this._withViewEventsCollector(W=>W.emitViewEvent(new f.ViewRevealRangeRequestEvent(M,!1,x,null,O,R,B)))}changeWhitespace(M){this.viewLayout.changeWhitespace(M)&&(this._eventDispatcher.emitSingleViewEvent(new f.ViewZonesChangedEvent),this._eventDispatcher.emitOutgoingEvent(new o.ViewZonesChangedEvent))}_withViewEventsCollector(M){try{const R=this._eventDispatcher.beginEmitViewEvents();return M(R)}finally{this._eventDispatcher.endEmitViewEvents()}}normalizePosition(M,R){return this._lines.normalizePosition(M,R)}getLineIndentColumn(M){return this._lines.getLineIndentColumn(M)}}e.ViewModel=C;class w{static create(M){const R=M._setTrackedRange(null,new i.Range(1,1,1,1),1);return new w(M,1,!1,R,0)}get viewLineNumber(){return this._viewLineNumber}get isValid(){return this._isValid}get modelTrackedRange(){return this._modelTrackedRange}get startLineDelta(){return this._startLineDelta}constructor(M,R,x,O,B){this._model=M,this._viewLineNumber=R,this._isValid=x,this._modelTrackedRange=O,this._startLineDelta=B}dispose(){this._model._setTrackedRange(this._modelTrackedRange,null,1)}update(M,R){const x=M.coordinatesConverter.convertViewPositionToModelPosition(new a.Position(R,M.getLineMinColumn(R))),O=M.model._setTrackedRange(this._modelTrackedRange,new i.Range(x.lineNumber,x.column,x.lineNumber,x.column),1),B=M.viewLayout.getVerticalOffsetForLineNumber(R),W=M.viewLayout.getCurrentScrollTop();this._viewLineNumber=R,this._isValid=!0,this._modelTrackedRange=O,this._startLineDelta=W-B}invalidate(){this._isValid=!1}}class D{constructor(){this._asMap=Object.create(null),this.asArray=[]}accept(M,R,x,O,B){const W=this._asMap[M];if(W){const V=W.data,K=V[V.length-3],F=V[V.length-1];if(K===B&&F+1>=x){O>F&&(V[V.length-1]=O);return}V.push(B,x,O)}else{const V=new s.OverviewRulerDecorationsGroup(M,R,[B,x,O]);this._asMap[M]=V,this.asArray.push(V)}}}class I{constructor(){this.hiddenAreas=new Map,this.shouldRecompute=!1,this.ranges=[]}setHiddenAreas(M,R){const x=this.hiddenAreas.get(M);x&&A(x,R)||(this.hiddenAreas.set(M,R),this.shouldRecompute=!0)}getMergedRanges(){if(!this.shouldRecompute)return this.ranges;this.shouldRecompute=!1;const M=Array.from(this.hiddenAreas.values()).reduce((R,x)=>T(R,x),[]);return A(this.ranges,M)?this.ranges:(this.ranges=M,this.ranges)}}function T(N,M){const R=[];let x=0,O=0;for(;x{this._onDidChangeConfiguration.fire(xe);const Be=this._configuration.options;if(xe.hasChanged(143)){const De=Be.get(143);this._onDidLayoutChange.fire(De)}})),this._contextKeyService=this._register(le.createScoped(this._domElement)),this._notificationService=ce,this._codeEditorService=Z,this._commandService=ee,this._themeService=ue,this._register(new ne(this,this._contextKeyService)),this._register(new $(this,this._contextKeyService,Ce)),this._instantiationService=j.createChild(new D.ServiceCollection([C.IContextKeyService,this._contextKeyService])),this._modelData=null,this._focusTracker=new J(z,this._overflowWidgetsDomNode),this._register(this._focusTracker.onChange(()=>{this._editorWidgetFocus.setValue(this._focusTracker.hasFocus())})),this._contentWidgets={},this._overlayWidgets={},this._glyphMarginWidgets={};let Ee;Array.isArray(Y.contributions)?Ee=Y.contributions:Ee=v.EditorExtensionsRegistry.getEditorContributions(),this._contributions.initialize(this,Ee,this._instantiationService);for(const xe of v.EditorExtensionsRegistry.getEditorActions()){if(this._actions.has(xe.id)){(0,y.onUnexpectedError)(new Error(`Cannot have two actions with the same id ${xe.id}`));continue}const Be=new c.InternalEditorAction(xe.id,xe.label,xe.alias,xe.metadata,(Se=xe.precondition)!==null&&Se!==void 0?Se:void 0,De=>this._instantiationService.invokeFunction(Ie=>Promise.resolve(xe.runEditorCommand(Ie,this,De))),this._contextKeyService);this._actions.set(Be.id,Be)}const Ae=()=>!this._configuration.options.get(90)&&this._configuration.options.get(36).enabled;this._register(new k.DragAndDropObserver(this._domElement,{onDragOver:xe=>{if(!Ae())return;const Be=this.getTargetAtClientPoint(xe.clientX,xe.clientY);Be?.position&&this.showDropIndicatorAt(Be.position)},onDrop:async xe=>{if(!Ae()||(this.removeDropIndicator(),!xe.dataTransfer))return;const Be=this.getTargetAtClientPoint(xe.clientX,xe.clientY);Be?.position&&this._onDropIntoEditor.fire({position:Be.position,event:xe})},onDragLeave:()=>{this.removeDropIndicator()},onDragEnd:()=>{this.removeDropIndicator()}})),this._codeEditorService.addCodeEditor(this)}writeScreenReaderContent(z){var H;(H=this._modelData)===null||H===void 0||H.view.writeScreenReaderContent(z)}_createConfiguration(z,H,Y){return new _.EditorConfiguration(z,H,this._domElement,Y)}getId(){return this.getEditorType()+":"+this._id}getEditorType(){return d.EditorType.ICodeEditor}dispose(){this._codeEditorService.removeCodeEditor(this),this._focusTracker.dispose(),this._actions.clear(),this._contentWidgets={},this._overlayWidgets={},this._removeDecorationTypes(),this._postDetachModelCleanup(this._detachModel()),this._onDidDispose.fire(),super.dispose()}invokeWithinContext(z){return this._instantiationService.invokeFunction(z)}updateOptions(z){this._configuration.updateOptions(z||{})}getOptions(){return this._configuration.options}getOption(z){return this._configuration.options.get(z)}getRawOptions(){return this._configuration.getRawOptions()}getOverflowWidgetsDomNode(){return this._overflowWidgetsDomNode}getConfiguredWordAtPosition(z){return this._modelData?M.WordOperations.getWordAtPosition(this._modelData.model,this._configuration.options.get(129),z):null}getValue(z=null){if(!this._modelData)return"";const H=!!(z&&z.preserveBOM);let Y=0;return z&&z.lineEnding&&z.lineEnding===` `?Y=1:z&&z.lineEnding&&z.lineEnding===`\r `&&(Y=2),this._modelData.model.getValue(Y,H)}setValue(z){this._modelData&&this._modelData.model.setValue(z)}getModel(){return this._modelData?this._modelData.model:null}setModel(z=null){var H;const Y=z;if(this._modelData===null&&Y===null||this._modelData&&this._modelData.model===Y)return;const j={oldModelUrl:((H=this._modelData)===null||H===void 0?void 0:H.model.uri)||null,newModelUrl:Y?.uri||null};this._onWillChangeModel.fire(j);const Z=this.hasTextFocus(),ee=this._detachModel();this._attachModel(Y),Z&&this.hasModel()&&this.focus(),this._removeDecorationTypes(),this._onDidChangeModel.fire(j),this._postDetachModelCleanup(ee),this._contributions.onAfterModelAttached()}_removeDecorationTypes(){if(this._decorationTypeKeysToIds={},this._decorationTypeSubtypes){for(const z in this._decorationTypeSubtypes){const H=this._decorationTypeSubtypes[z];for(const Y in H)this._removeDecorationType(z+"-"+Y)}this._decorationTypeSubtypes={}}}getVisibleRanges(){return this._modelData?this._modelData.viewModel.getVisibleRanges():[]}getVisibleRangesPlusViewportAboveBelow(){return this._modelData?this._modelData.viewModel.getVisibleRangesPlusViewportAboveBelow():[]}getWhitespaces(){return this._modelData?this._modelData.viewModel.viewLayout.getWhitespaces():[]}static _getVerticalOffsetAfterPosition(z,H,Y,j){const Z=z.model.validatePosition({lineNumber:H,column:Y}),ee=z.viewModel.coordinatesConverter.convertModelPositionToViewPosition(Z);return z.viewModel.viewLayout.getVerticalOffsetAfterLineNumber(ee.lineNumber,j)}getTopForLineNumber(z,H=!1){return this._modelData?V._getVerticalOffsetForPosition(this._modelData,z,1,H):-1}getTopForPosition(z,H){return this._modelData?V._getVerticalOffsetForPosition(this._modelData,z,H,!1):-1}static _getVerticalOffsetForPosition(z,H,Y,j=!1){const Z=z.model.validatePosition({lineNumber:H,column:Y}),ee=z.viewModel.coordinatesConverter.convertModelPositionToViewPosition(Z);return z.viewModel.viewLayout.getVerticalOffsetForLineNumber(ee.lineNumber,j)}getBottomForLineNumber(z,H=!1){return this._modelData?V._getVerticalOffsetAfterPosition(this._modelData,z,1,H):-1}setHiddenAreas(z,H){var Y;(Y=this._modelData)===null||Y===void 0||Y.viewModel.setHiddenAreas(z.map(j=>u.Range.lift(j)),H)}getVisibleColumnFromPosition(z){if(!this._modelData)return z.column;const H=this._modelData.model.validatePosition(z),Y=this._modelData.model.getOptions().tabSize;return t.CursorColumns.visibleColumnFromColumn(this._modelData.model.getLineContent(H.lineNumber),H.column,Y)+1}getPosition(){return this._modelData?this._modelData.viewModel.getPosition():null}setPosition(z,H="api"){if(this._modelData){if(!r.Position.isIPosition(z))throw new Error("Invalid arguments");this._modelData.viewModel.setSelections(H,[{selectionStartLineNumber:z.lineNumber,selectionStartColumn:z.column,positionLineNumber:z.lineNumber,positionColumn:z.column}])}}_sendRevealRange(z,H,Y,j){if(!this._modelData)return;if(!u.Range.isIRange(z))throw new Error("Invalid arguments");const Z=this._modelData.model.validateRange(z),ee=this._modelData.viewModel.coordinatesConverter.convertModelRangeToViewRange(Z);this._modelData.viewModel.revealRange("api",Y,ee,H,j)}revealLine(z,H=0){this._revealLine(z,0,H)}revealLineInCenter(z,H=0){this._revealLine(z,1,H)}revealLineInCenterIfOutsideViewport(z,H=0){this._revealLine(z,2,H)}revealLineNearTop(z,H=0){this._revealLine(z,5,H)}_revealLine(z,H,Y){if(typeof z!="number")throw new Error("Invalid arguments");this._sendRevealRange(new u.Range(z,1,z,1),H,!1,Y)}revealPosition(z,H=0){this._revealPosition(z,0,!0,H)}revealPositionInCenter(z,H=0){this._revealPosition(z,1,!0,H)}revealPositionInCenterIfOutsideViewport(z,H=0){this._revealPosition(z,2,!0,H)}revealPositionNearTop(z,H=0){this._revealPosition(z,5,!0,H)}_revealPosition(z,H,Y,j){if(!r.Position.isIPosition(z))throw new Error("Invalid arguments");this._sendRevealRange(new u.Range(z.lineNumber,z.column,z.lineNumber,z.column),H,Y,j)}getSelection(){return this._modelData?this._modelData.viewModel.getSelection():null}getSelections(){return this._modelData?this._modelData.viewModel.getSelections():null}setSelection(z,H="api"){const Y=f.Selection.isISelection(z),j=u.Range.isIRange(z);if(!Y&&!j)throw new Error("Invalid arguments");if(Y)this._setSelectionImpl(z,H);else if(j){const Z={selectionStartLineNumber:z.startLineNumber,selectionStartColumn:z.startColumn,positionLineNumber:z.endLineNumber,positionColumn:z.endColumn};this._setSelectionImpl(Z,H)}}_setSelectionImpl(z,H){if(!this._modelData)return;const Y=new f.Selection(z.selectionStartLineNumber,z.selectionStartColumn,z.positionLineNumber,z.positionColumn);this._modelData.viewModel.setSelections(H,[Y])}revealLines(z,H,Y=0){this._revealLines(z,H,0,Y)}revealLinesInCenter(z,H,Y=0){this._revealLines(z,H,1,Y)}revealLinesInCenterIfOutsideViewport(z,H,Y=0){this._revealLines(z,H,2,Y)}revealLinesNearTop(z,H,Y=0){this._revealLines(z,H,5,Y)}_revealLines(z,H,Y,j){if(typeof z!="number"||typeof H!="number")throw new Error("Invalid arguments");this._sendRevealRange(new u.Range(z,1,H,1),Y,!1,j)}revealRange(z,H=0,Y=!1,j=!0){this._revealRange(z,Y?1:0,j,H)}revealRangeInCenter(z,H=0){this._revealRange(z,1,!0,H)}revealRangeInCenterIfOutsideViewport(z,H=0){this._revealRange(z,2,!0,H)}revealRangeNearTop(z,H=0){this._revealRange(z,5,!0,H)}revealRangeNearTopIfOutsideViewport(z,H=0){this._revealRange(z,6,!0,H)}revealRangeAtTop(z,H=0){this._revealRange(z,3,!0,H)}_revealRange(z,H,Y,j){if(!u.Range.isIRange(z))throw new Error("Invalid arguments");this._sendRevealRange(u.Range.lift(z),H,Y,j)}setSelections(z,H="api",Y=0){if(this._modelData){if(!z||z.length===0)throw new Error("Invalid arguments");for(let j=0,Z=z.length;j0&&this._modelData.viewModel.restoreCursorState(Y):this._modelData.viewModel.restoreCursorState([Y]),this._contributions.restoreViewState(H.contributionsState||{});const j=this._modelData.viewModel.reduceRestoreState(H.viewState);this._modelData.view.restoreState(j)}}handleInitialized(){var z;(z=this._getViewModel())===null||z===void 0||z.visibleLinesStabilized()}getContribution(z){return this._contributions.get(z)}getActions(){return Array.from(this._actions.values())}getSupportedActions(){let z=this.getActions();return z=z.filter(H=>H.isSupported()),z}getAction(z){return this._actions.get(z)||null}trigger(z,H,Y){switch(Y=Y||{},H){case"compositionStart":this._startComposition();return;case"compositionEnd":this._endComposition(z);return;case"type":{const Z=Y;this._type(z,Z.text||"");return}case"replacePreviousChar":{const Z=Y;this._compositionType(z,Z.text||"",Z.replaceCharCnt||0,0,0);return}case"compositionType":{const Z=Y;this._compositionType(z,Z.text||"",Z.replacePrevCharCnt||0,Z.replaceNextCharCnt||0,Z.positionDelta||0);return}case"paste":{const Z=Y;this._paste(z,Z.text||"",Z.pasteOnNewLine||!1,Z.multicursorText||null,Z.mode||null);return}case"cut":this._cut(z);return}const j=this.getAction(H);if(j){Promise.resolve(j.run(Y)).then(void 0,y.onUnexpectedError);return}this._modelData&&(this._triggerEditorCommand(z,H,Y)||this._triggerCommand(H,Y))}_triggerCommand(z,H){this._commandService.executeCommand(z,H)}_startComposition(){this._modelData&&(this._modelData.viewModel.startComposition(),this._onDidCompositionStart.fire())}_endComposition(z){this._modelData&&(this._modelData.viewModel.endComposition(z),this._onDidCompositionEnd.fire())}_type(z,H){!this._modelData||H.length===0||(z==="keyboard"&&this._onWillType.fire(H),this._modelData.viewModel.type(H,z),z==="keyboard"&&this._onDidType.fire(H))}_compositionType(z,H,Y,j,Z){this._modelData&&this._modelData.viewModel.compositionType(H,Y,j,Z,z)}_paste(z,H,Y,j,Z){if(!this._modelData||H.length===0)return;const ee=this._modelData.viewModel,le=ee.getSelection().getStartPosition();ee.paste(H,Y,j,z);const ue=ee.getSelection().getStartPosition();z==="keyboard"&&this._onDidPaste.fire({range:new u.Range(le.lineNumber,le.column,ue.lineNumber,ue.column),languageId:Z})}_cut(z){this._modelData&&this._modelData.viewModel.cut(z)}_triggerEditorCommand(z,H,Y){const j=v.EditorExtensionsRegistry.getEditorCommand(H);return j?(Y=Y||{},Y.source=z,this._instantiationService.invokeFunction(Z=>{Promise.resolve(j.runEditorCommand(Z,this,Y)).then(void 0,y.onUnexpectedError)}),!0):!1}_getViewModel(){return this._modelData?this._modelData.viewModel:null}pushUndoStop(){return!this._modelData||this._configuration.options.get(90)?!1:(this._modelData.model.pushStackElement(),!0)}popUndoStop(){return!this._modelData||this._configuration.options.get(90)?!1:(this._modelData.model.popStackElement(),!0)}executeEdits(z,H,Y){if(!this._modelData||this._configuration.options.get(90))return!1;let j;return Y?Array.isArray(Y)?j=()=>Y:j=Y:j=()=>null,this._modelData.viewModel.executeEdits(z,H,j),!0}executeCommand(z,H){this._modelData&&this._modelData.viewModel.executeCommand(H,z)}executeCommands(z,H){this._modelData&&this._modelData.viewModel.executeCommands(H,z)}createDecorationsCollection(z){return new Q(this,z)}changeDecorations(z){return this._modelData?this._modelData.model.changeDecorations(z,this._id):null}getLineDecorations(z){return this._modelData?this._modelData.model.getLineDecorations(z,this._id,(0,n.filterValidationDecorations)(this._configuration.options)):null}getDecorationsInRange(z){return this._modelData?this._modelData.model.getDecorationsInRange(z,this._id,(0,n.filterValidationDecorations)(this._configuration.options)):null}deltaDecorations(z,H){return this._modelData?z.length===0&&H.length===0?z:this._modelData.model.deltaDecorations(z,H,this._id):[]}removeDecorations(z){!this._modelData||z.length===0||this._modelData.model.changeDecorations(H=>{H.deltaDecorations(z,[])})}removeDecorationsByType(z){const H=this._decorationTypeKeysToIds[z];H&&this.deltaDecorations(H,[]),this._decorationTypeKeysToIds.hasOwnProperty(z)&&delete this._decorationTypeKeysToIds[z],this._decorationTypeSubtypes.hasOwnProperty(z)&&delete this._decorationTypeSubtypes[z]}getLayoutInfo(){return this._configuration.options.get(143)}createOverviewRuler(z){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.createOverviewRuler(z)}getContainerDomNode(){return this._domElement}getDomNode(){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.domNode.domNode}delegateVerticalScrollbarPointerDown(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.delegateVerticalScrollbarPointerDown(z)}delegateScrollFromMouseWheelEvent(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.delegateScrollFromMouseWheelEvent(z)}layout(z,H=!1){this._configuration.observeContainer(z),H||this.render()}focus(){!this._modelData||!this._modelData.hasRealView||this._modelData.view.focus()}hasTextFocus(){return!this._modelData||!this._modelData.hasRealView?!1:this._modelData.view.isFocused()}hasWidgetFocus(){return this._focusTracker&&this._focusTracker.hasFocus()}addContentWidget(z){const H={widget:z,position:z.getPosition()};this._contentWidgets.hasOwnProperty(z.getId())&&console.warn("Overwriting a content widget with the same id:"+z.getId()),this._contentWidgets[z.getId()]=H,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addContentWidget(H)}layoutContentWidget(z){const H=z.getId();if(this._contentWidgets.hasOwnProperty(H)){const Y=this._contentWidgets[H];Y.position=z.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutContentWidget(Y)}}removeContentWidget(z){const H=z.getId();if(this._contentWidgets.hasOwnProperty(H)){const Y=this._contentWidgets[H];delete this._contentWidgets[H],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeContentWidget(Y)}}addOverlayWidget(z){const H={widget:z,position:z.getPosition()};this._overlayWidgets.hasOwnProperty(z.getId())&&console.warn("Overwriting an overlay widget with the same id."),this._overlayWidgets[z.getId()]=H,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addOverlayWidget(H)}layoutOverlayWidget(z){const H=z.getId();if(this._overlayWidgets.hasOwnProperty(H)){const Y=this._overlayWidgets[H];Y.position=z.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutOverlayWidget(Y)}}removeOverlayWidget(z){const H=z.getId();if(this._overlayWidgets.hasOwnProperty(H)){const Y=this._overlayWidgets[H];delete this._overlayWidgets[H],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeOverlayWidget(Y)}}addGlyphMarginWidget(z){const H={widget:z,position:z.getPosition()};this._glyphMarginWidgets.hasOwnProperty(z.getId())&&console.warn("Overwriting a glyph margin widget with the same id."),this._glyphMarginWidgets[z.getId()]=H,this._modelData&&this._modelData.hasRealView&&this._modelData.view.addGlyphMarginWidget(H)}layoutGlyphMarginWidget(z){const H=z.getId();if(this._glyphMarginWidgets.hasOwnProperty(H)){const Y=this._glyphMarginWidgets[H];Y.position=z.getPosition(),this._modelData&&this._modelData.hasRealView&&this._modelData.view.layoutGlyphMarginWidget(Y)}}removeGlyphMarginWidget(z){const H=z.getId();if(this._glyphMarginWidgets.hasOwnProperty(H)){const Y=this._glyphMarginWidgets[H];delete this._glyphMarginWidgets[H],this._modelData&&this._modelData.hasRealView&&this._modelData.view.removeGlyphMarginWidget(Y)}}changeViewZones(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.change(z)}getTargetAtClientPoint(z,H){return!this._modelData||!this._modelData.hasRealView?null:this._modelData.view.getTargetAtClientPoint(z,H)}getScrolledVisiblePosition(z){if(!this._modelData||!this._modelData.hasRealView)return null;const H=this._modelData.model.validatePosition(z),Y=this._configuration.options,j=Y.get(143),Z=V._getVerticalOffsetForPosition(this._modelData,H.lineNumber,H.column)-this.getScrollTop(),ee=this._modelData.view.getOffsetForColumn(H.lineNumber,H.column)+j.glyphMarginWidth+j.lineNumbersWidth+j.decorationsWidth-this.getScrollLeft();return{top:Z,left:ee,height:Y.get(66)}}getOffsetForColumn(z,H){return!this._modelData||!this._modelData.hasRealView?-1:this._modelData.view.getOffsetForColumn(z,H)}render(z=!1){!this._modelData||!this._modelData.hasRealView||this._modelData.view.render(!0,z)}setAriaOptions(z){!this._modelData||!this._modelData.hasRealView||this._modelData.view.setAriaOptions(z)}applyFontInfo(z){(0,x.applyFontInfo)(z,this._configuration.options.get(50))}setBanner(z,H){this._bannerDomNode&&this._domElement.contains(this._bannerDomNode)&&this._domElement.removeChild(this._bannerDomNode),this._bannerDomNode=z,this._configuration.setReservedHeight(z?H:0),this._bannerDomNode&&this._domElement.prepend(this._bannerDomNode)}_attachModel(z){if(!z){this._modelData=null;return}const H=[];this._domElement.setAttribute("data-mode-id",z.getLanguageId()),this._configuration.setIsDominatedByLongLines(z.isDominatedByLongLines()),this._configuration.setModelLineCount(z.getLineCount());const Y=z.onBeforeAttached(),j=new h.ViewModel(this._id,this._configuration,z,N.DOMLineBreaksComputerFactory.create(k.getWindow(this._domElement)),P.MonospaceLineBreaksComputerFactory.create(this._configuration.options),le=>k.scheduleAtNextAnimationFrame(k.getWindow(this._domElement),le),this.languageConfigurationService,this._themeService,Y);H.push(z.onWillDispose(()=>this.setModel(null))),H.push(j.onEvent(le=>{switch(le.kind){case 0:this._onDidContentSizeChange.fire(le);break;case 1:this._editorTextFocus.setValue(le.hasFocus);break;case 2:this._onDidScrollChange.fire(le);break;case 3:this._onDidChangeViewZones.fire();break;case 4:this._onDidChangeHiddenAreas.fire();break;case 5:this._onDidAttemptReadOnlyEdit.fire();break;case 6:{if(le.reachedMaxCursorCount){const ve=this.getOption(79),Ce=L.localize(0,null,ve);this._notificationService.prompt(I.Severity.Warning,Ce,[{label:"Find and Replace",run:()=>{this._commandService.executeCommand("editor.action.startFindReplaceAction")}},{label:L.localize(1,null),run:()=>{this._commandService.executeCommand("workbench.action.openSettings2",{query:"editor.multiCursorLimit"})}}])}const ue=[];for(let ve=0,Ce=le.selections.length;ve{this._paste("keyboard",Z,ee,le,ue)},type:Z=>{this._type("keyboard",Z)},compositionType:(Z,ee,le,ue)=>{this._compositionType("keyboard",Z,ee,le,ue)},startComposition:()=>{this._startComposition()},endComposition:()=>{this._endComposition("keyboard")},cut:()=>{this._cut("keyboard")}}:H={paste:(Z,ee,le,ue)=>{const ce={text:Z,pasteOnNewLine:ee,multicursorText:le,mode:ue};this._commandService.executeCommand("paste",ce)},type:Z=>{const ee={text:Z};this._commandService.executeCommand("type",ee)},compositionType:(Z,ee,le,ue)=>{if(le||ue){const ce={text:Z,replacePrevCharCnt:ee,replaceNextCharCnt:le,positionDelta:ue};this._commandService.executeCommand("compositionType",ce)}else{const ce={text:Z,replaceCharCnt:ee};this._commandService.executeCommand("replacePreviousChar",ce)}},startComposition:()=>{this._commandService.executeCommand("compositionStart",{})},endComposition:()=>{this._commandService.executeCommand("compositionEnd",{})},cut:()=>{this._commandService.executeCommand("cut",{})}};const Y=new i.ViewUserInputEvents(z.coordinatesConverter);return Y.onKeyDown=Z=>this._onKeyDown.fire(Z),Y.onKeyUp=Z=>this._onKeyUp.fire(Z),Y.onContextMenu=Z=>this._onContextMenu.fire(Z),Y.onMouseMove=Z=>this._onMouseMove.fire(Z),Y.onMouseLeave=Z=>this._onMouseLeave.fire(Z),Y.onMouseDown=Z=>this._onMouseDown.fire(Z),Y.onMouseUp=Z=>this._onMouseUp.fire(Z),Y.onMouseDrag=Z=>this._onMouseDrag.fire(Z),Y.onMouseDrop=Z=>this._onMouseDrop.fire(Z),Y.onMouseDropCanceled=Z=>this._onMouseDropCanceled.fire(Z),Y.onMouseWheel=Z=>this._onMouseWheel.fire(Z),[new a.View(H,this._configuration,this._themeService.getColorTheme(),z,Y,this._overflowWidgetsDomNode,this._instantiationService),!0]}_postDetachModelCleanup(z){z?.removeAllDecorationsWithOwnerId(this._id)}_detachModel(){if(!this._modelData)return null;const z=this._modelData.model,H=this._modelData.hasRealView?this._modelData.view.domNode.domNode:null;return this._modelData.dispose(),this._modelData=null,this._domElement.removeAttribute("data-mode-id"),H&&this._domElement.contains(H)&&this._domElement.removeChild(H),this._bannerDomNode&&this._domElement.contains(this._bannerDomNode)&&this._domElement.removeChild(this._bannerDomNode),z}_removeDecorationType(z){this._codeEditorService.removeDecorationType(z)}hasModel(){return this._modelData!==null}showDropIndicatorAt(z){const H=[{range:new u.Range(z.lineNumber,z.column,z.lineNumber,z.column),options:V.dropIntoEditorDecorationOptions}];this._dropIntoEditorDecorations.set(H),this.revealPosition(z,1)}removeDropIndicator(){this._dropIntoEditorDecorations.clear()}setContextValue(z,H){this._contextKeyService.createKey(z,H)}};e.CodeEditorWidget=q,q.dropIntoEditorDecorationOptions=l.ModelDecorationOptions.register({description:"workbench-dnd-target",className:"dnd-target"}),e.CodeEditorWidget=q=V=ke([ge(3,w.IInstantiationService),ge(4,b.ICodeEditorService),ge(5,m.ICommandService),ge(6,C.IContextKeyService),ge(7,T.IThemeService),ge(8,I.INotificationService),ge(9,A.IAccessibilityService),ge(10,R.ILanguageConfigurationService),ge(11,O.ILanguageFeaturesService)],q);class ie extends S.Disposable{constructor(z){super(),this._emitterOptions=z,this._onDidChangeToTrue=this._register(new E.Emitter(this._emitterOptions)),this.onDidChangeToTrue=this._onDidChangeToTrue.event,this._onDidChangeToFalse=this._register(new E.Emitter(this._emitterOptions)),this.onDidChangeToFalse=this._onDidChangeToFalse.event,this._value=0}setValue(z){const H=z?2:1;this._value!==H&&(this._value=H,this._value===2?this._onDidChangeToTrue.fire():this._value===1&&this._onDidChangeToFalse.fire())}}e.BooleanEventEmitter=ie;class ae extends E.Emitter{constructor(z,H){super({deliveryQueue:H}),this._contributions=z}fire(z){this._contributions.onBeforeInteractionEvent(),super.fire(z)}}class ne extends S.Disposable{constructor(z,H){super(),this._editor=z,H.createKey("editorId",z.getId()),this._editorSimpleInput=s.EditorContextKeys.editorSimpleInput.bindTo(H),this._editorFocus=s.EditorContextKeys.focus.bindTo(H),this._textInputFocus=s.EditorContextKeys.textInputFocus.bindTo(H),this._editorTextFocus=s.EditorContextKeys.editorTextFocus.bindTo(H),this._tabMovesFocus=s.EditorContextKeys.tabMovesFocus.bindTo(H),this._editorReadonly=s.EditorContextKeys.readOnly.bindTo(H),this._inDiffEditor=s.EditorContextKeys.inDiffEditor.bindTo(H),this._editorColumnSelection=s.EditorContextKeys.columnSelection.bindTo(H),this._hasMultipleSelections=s.EditorContextKeys.hasMultipleSelections.bindTo(H),this._hasNonEmptySelection=s.EditorContextKeys.hasNonEmptySelection.bindTo(H),this._canUndo=s.EditorContextKeys.canUndo.bindTo(H),this._canRedo=s.EditorContextKeys.canRedo.bindTo(H),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromConfig())),this._register(this._editor.onDidChangeCursorSelection(()=>this._updateFromSelection())),this._register(this._editor.onDidFocusEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorWidget(()=>this._updateFromFocus())),this._register(this._editor.onDidFocusEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidBlurEditorText(()=>this._updateFromFocus())),this._register(this._editor.onDidChangeModel(()=>this._updateFromModel())),this._register(this._editor.onDidChangeConfiguration(()=>this._updateFromModel())),this._register(W.TabFocus.onDidChangeTabFocus(Y=>this._tabMovesFocus.set(Y))),this._updateFromConfig(),this._updateFromSelection(),this._updateFromFocus(),this._updateFromModel(),this._editorSimpleInput.set(this._editor.isSimpleWidget)}_updateFromConfig(){const z=this._editor.getOptions();this._tabMovesFocus.set(W.TabFocus.getTabFocusMode()),this._editorReadonly.set(z.get(90)),this._inDiffEditor.set(z.get(61)),this._editorColumnSelection.set(z.get(22))}_updateFromSelection(){const z=this._editor.getSelections();z?(this._hasMultipleSelections.set(z.length>1),this._hasNonEmptySelection.set(z.some(H=>!H.isEmpty()))):(this._hasMultipleSelections.reset(),this._hasNonEmptySelection.reset())}_updateFromFocus(){this._editorFocus.set(this._editor.hasWidgetFocus()&&!this._editor.isSimpleWidget),this._editorTextFocus.set(this._editor.hasTextFocus()&&!this._editor.isSimpleWidget),this._textInputFocus.set(this._editor.hasTextFocus())}_updateFromModel(){const z=this._editor.getModel();this._canUndo.set(!!(z&&z.canUndo())),this._canRedo.set(!!(z&&z.canRedo()))}}class $ extends S.Disposable{constructor(z,H,Y){super(),this._editor=z,this._contextKeyService=H,this._languageFeaturesService=Y,this._langId=s.EditorContextKeys.languageId.bindTo(H),this._hasCompletionItemProvider=s.EditorContextKeys.hasCompletionItemProvider.bindTo(H),this._hasCodeActionsProvider=s.EditorContextKeys.hasCodeActionsProvider.bindTo(H),this._hasCodeLensProvider=s.EditorContextKeys.hasCodeLensProvider.bindTo(H),this._hasDefinitionProvider=s.EditorContextKeys.hasDefinitionProvider.bindTo(H),this._hasDeclarationProvider=s.EditorContextKeys.hasDeclarationProvider.bindTo(H),this._hasImplementationProvider=s.EditorContextKeys.hasImplementationProvider.bindTo(H),this._hasTypeDefinitionProvider=s.EditorContextKeys.hasTypeDefinitionProvider.bindTo(H),this._hasHoverProvider=s.EditorContextKeys.hasHoverProvider.bindTo(H),this._hasDocumentHighlightProvider=s.EditorContextKeys.hasDocumentHighlightProvider.bindTo(H),this._hasDocumentSymbolProvider=s.EditorContextKeys.hasDocumentSymbolProvider.bindTo(H),this._hasReferenceProvider=s.EditorContextKeys.hasReferenceProvider.bindTo(H),this._hasRenameProvider=s.EditorContextKeys.hasRenameProvider.bindTo(H),this._hasSignatureHelpProvider=s.EditorContextKeys.hasSignatureHelpProvider.bindTo(H),this._hasInlayHintsProvider=s.EditorContextKeys.hasInlayHintsProvider.bindTo(H),this._hasDocumentFormattingProvider=s.EditorContextKeys.hasDocumentFormattingProvider.bindTo(H),this._hasDocumentSelectionFormattingProvider=s.EditorContextKeys.hasDocumentSelectionFormattingProvider.bindTo(H),this._hasMultipleDocumentFormattingProvider=s.EditorContextKeys.hasMultipleDocumentFormattingProvider.bindTo(H),this._hasMultipleDocumentSelectionFormattingProvider=s.EditorContextKeys.hasMultipleDocumentSelectionFormattingProvider.bindTo(H),this._isInWalkThrough=s.EditorContextKeys.isInWalkThroughSnippet.bindTo(H);const j=()=>this._update();this._register(z.onDidChangeModel(j)),this._register(z.onDidChangeModelLanguage(j)),this._register(Y.completionProvider.onDidChange(j)),this._register(Y.codeActionProvider.onDidChange(j)),this._register(Y.codeLensProvider.onDidChange(j)),this._register(Y.definitionProvider.onDidChange(j)),this._register(Y.declarationProvider.onDidChange(j)),this._register(Y.implementationProvider.onDidChange(j)),this._register(Y.typeDefinitionProvider.onDidChange(j)),this._register(Y.hoverProvider.onDidChange(j)),this._register(Y.documentHighlightProvider.onDidChange(j)),this._register(Y.documentSymbolProvider.onDidChange(j)),this._register(Y.referenceProvider.onDidChange(j)),this._register(Y.renameProvider.onDidChange(j)),this._register(Y.documentFormattingEditProvider.onDidChange(j)),this._register(Y.documentRangeFormattingEditProvider.onDidChange(j)),this._register(Y.signatureHelpProvider.onDidChange(j)),this._register(Y.inlayHintsProvider.onDidChange(j)),j()}dispose(){super.dispose()}reset(){this._contextKeyService.bufferChangeEvents(()=>{this._langId.reset(),this._hasCompletionItemProvider.reset(),this._hasCodeActionsProvider.reset(),this._hasCodeLensProvider.reset(),this._hasDefinitionProvider.reset(),this._hasDeclarationProvider.reset(),this._hasImplementationProvider.reset(),this._hasTypeDefinitionProvider.reset(),this._hasHoverProvider.reset(),this._hasDocumentHighlightProvider.reset(),this._hasDocumentSymbolProvider.reset(),this._hasReferenceProvider.reset(),this._hasRenameProvider.reset(),this._hasDocumentFormattingProvider.reset(),this._hasDocumentSelectionFormattingProvider.reset(),this._hasSignatureHelpProvider.reset(),this._isInWalkThrough.reset()})}_update(){const z=this._editor.getModel();if(!z){this.reset();return}this._contextKeyService.bufferChangeEvents(()=>{this._langId.set(z.getLanguageId()),this._hasCompletionItemProvider.set(this._languageFeaturesService.completionProvider.has(z)),this._hasCodeActionsProvider.set(this._languageFeaturesService.codeActionProvider.has(z)),this._hasCodeLensProvider.set(this._languageFeaturesService.codeLensProvider.has(z)),this._hasDefinitionProvider.set(this._languageFeaturesService.definitionProvider.has(z)),this._hasDeclarationProvider.set(this._languageFeaturesService.declarationProvider.has(z)),this._hasImplementationProvider.set(this._languageFeaturesService.implementationProvider.has(z)),this._hasTypeDefinitionProvider.set(this._languageFeaturesService.typeDefinitionProvider.has(z)),this._hasHoverProvider.set(this._languageFeaturesService.hoverProvider.has(z)),this._hasDocumentHighlightProvider.set(this._languageFeaturesService.documentHighlightProvider.has(z)),this._hasDocumentSymbolProvider.set(this._languageFeaturesService.documentSymbolProvider.has(z)),this._hasReferenceProvider.set(this._languageFeaturesService.referenceProvider.has(z)),this._hasRenameProvider.set(this._languageFeaturesService.renameProvider.has(z)),this._hasSignatureHelpProvider.set(this._languageFeaturesService.signatureHelpProvider.has(z)),this._hasInlayHintsProvider.set(this._languageFeaturesService.inlayHintsProvider.has(z)),this._hasDocumentFormattingProvider.set(this._languageFeaturesService.documentFormattingEditProvider.has(z)||this._languageFeaturesService.documentRangeFormattingEditProvider.has(z)),this._hasDocumentSelectionFormattingProvider.set(this._languageFeaturesService.documentRangeFormattingEditProvider.has(z)),this._hasMultipleDocumentFormattingProvider.set(this._languageFeaturesService.documentFormattingEditProvider.all(z).length+this._languageFeaturesService.documentRangeFormattingEditProvider.all(z).length>1),this._hasMultipleDocumentSelectionFormattingProvider.set(this._languageFeaturesService.documentRangeFormattingEditProvider.all(z).length>1),this._isInWalkThrough.set(z.uri.scheme===p.Schemas.walkThroughSnippet)})}}e.EditorModeContext=$;class J extends S.Disposable{constructor(z,H){super(),this._onChange=this._register(new E.Emitter),this.onChange=this._onChange.event,this._hadFocus=void 0,this._hasDomElementFocus=!1,this._domFocusTracker=this._register(k.trackFocus(z)),this._overflowWidgetsDomNodeHasFocus=!1,this._register(this._domFocusTracker.onDidFocus(()=>{this._hasDomElementFocus=!0,this._update()})),this._register(this._domFocusTracker.onDidBlur(()=>{this._hasDomElementFocus=!1,this._update()})),H&&(this._overflowWidgetsDomNode=this._register(k.trackFocus(H)),this._register(this._overflowWidgetsDomNode.onDidFocus(()=>{this._overflowWidgetsDomNodeHasFocus=!0,this._update()})),this._register(this._overflowWidgetsDomNode.onDidBlur(()=>{this._overflowWidgetsDomNodeHasFocus=!1,this._update()})))}_update(){const z=this._hasDomElementFocus||this._overflowWidgetsDomNodeHasFocus;this._hadFocus!==z&&(this._hadFocus=z,this._onChange.fire(void 0))}hasFocus(){var z;return(z=this._hadFocus)!==null&&z!==void 0?z:!1}}class Q{get length(){return this._decorationIds.length}constructor(z,H){this._editor=z,this._decorationIds=[],this._isChangingDecorations=!1,Array.isArray(H)&&H.length>0&&this.set(H)}onDidChange(z,H,Y){return this._editor.onDidChangeModelDecorations(j=>{this._isChangingDecorations||z.call(H,j)},Y)}getRange(z){return!this._editor.hasModel()||z>=this._decorationIds.length?null:this._editor.getModel().getDecorationRange(this._decorationIds[z])}getRanges(){if(!this._editor.hasModel())return[];const z=this._editor.getModel(),H=[];for(const Y of this._decorationIds){const j=z.getDecorationRange(Y);j&&H.push(j)}return H}has(z){return this._decorationIds.includes(z.id)}clear(){this._decorationIds.length!==0&&this.set([])}set(z){try{this._isChangingDecorations=!0,this._editor.changeDecorations(H=>{this._decorationIds=H.deltaDecorations(this._decorationIds,z)})}finally{this._isChangingDecorations=!1}return this._decorationIds}append(z){let H=[];try{this._isChangingDecorations=!0,this._editor.changeDecorations(Y=>{H=Y.deltaDecorations([],z),this._decorationIds=this._decorationIds.concat(H)})}finally{this._isChangingDecorations=!1}return H}}const re=encodeURIComponent("");function he(G){return re+encodeURIComponent(G.toString())+de}const me=encodeURIComponent('');function U(G){return me+encodeURIComponent(G.toString())+X}(0,T.registerThemingParticipant)((G,z)=>{const H=G.getColor(g.editorErrorForeground);H&&z.addRule(`.monaco-editor .squiggly-error { background: url("data:image/svg+xml,${he(H)}") repeat-x bottom left; }`);const Y=G.getColor(g.editorWarningForeground);Y&&z.addRule(`.monaco-editor .squiggly-warning { background: url("data:image/svg+xml,${he(Y)}") repeat-x bottom left; }`);const j=G.getColor(g.editorInfoForeground);j&&z.addRule(`.monaco-editor .squiggly-info { background: url("data:image/svg+xml,${he(j)}") repeat-x bottom left; }`);const Z=G.getColor(g.editorHintForeground);Z&&z.addRule(`.monaco-editor .squiggly-hint { background: url("data:image/svg+xml,${U(Z)}") no-repeat bottom left; }`);const ee=G.getColor(o.editorUnnecessaryCodeOpacity);ee&&z.addRule(`.monaco-editor.showUnused .squiggly-inline-unnecessary { opacity: ${ee.rgba.a}; }`)})}),define(se[259],oe([1,0,7,60,12,6,2,35,171,16,33,127,194,841,881,608,342,882,334,368,87,10,5,180,21,122,15,8,163,88,498,855,637,359,630,448]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiffEditorWidget=void 0;let R=class extends T.DelegatingEditor{get onDidContentSizeChange(){return this._editors.onDidContentSizeChange}constructor(B,W,V,K,F,q,ie,ae){var ne;super(),this._domElement=B,this._parentContextKeyService=K,this._parentInstantiationService=F,this._audioCueService=ie,this._editorProgressService=ae,this.elements=(0,L.h)("div.monaco-diff-editor.side-by-side",{style:{position:"relative",height:"100%"}},[(0,L.h)("div.noModificationsOverlay@overlay",{style:{position:"absolute",height:"100%",visibility:"hidden"}},[(0,L.$)("span",{},"No Changes")]),(0,L.h)("div.editor.original@original",{style:{position:"absolute",height:"100%"}}),(0,L.h)("div.editor.modified@modified",{style:{position:"absolute",height:"100%"}}),(0,L.h)("div.accessibleDiffViewer@accessibleDiffViewer",{style:{position:"absolute",height:"100%"}})]),this._diffModel=(0,p.observableValue)(this,void 0),this._shouldDisposeDiffModel=!1,this.onDidChangeModel=E.Event.fromObservableLight(this._diffModel),this._contextKeyService=this._register(this._parentContextKeyService.createScoped(this._domElement)),this._instantiationService=this._parentInstantiationService.createChild(new D.ServiceCollection([C.IContextKeyService,this._contextKeyService])),this._boundarySashes=(0,p.observableValue)(this,void 0),this._accessibleDiffViewerShouldBeVisible=(0,p.observableValue)(this,!1),this._accessibleDiffViewerVisible=(0,p.derived)(this,z=>this._options.onlyShowAccessibleDiffViewer.read(z)?!0:this._accessibleDiffViewerShouldBeVisible.read(z)),this._movedBlocksLinesPart=(0,p.observableValue)(this,void 0),this._layoutInfo=(0,p.derived)(this,z=>{var H,Y,j,Z,ee;const le=this._rootSizeObserver.width.read(z),ue=this._rootSizeObserver.height.read(z),ce=(H=this._sash.read(z))===null||H===void 0?void 0:H.sashLeft.read(z),pe=ce??Math.max(5,this._editors.original.getLayoutInfo().decorationsLeft),ve=le-pe-((j=(Y=this._overviewRulerPart.read(z))===null||Y===void 0?void 0:Y.width)!==null&&j!==void 0?j:0),Ce=(ee=(Z=this._movedBlocksLinesPart.read(z))===null||Z===void 0?void 0:Z.width.read(z))!==null&&ee!==void 0?ee:0,Se=pe-Ce;return this.elements.original.style.width=Se+"px",this.elements.original.style.left="0px",this.elements.modified.style.width=ve+"px",this.elements.modified.style.left=pe+"px",this._editors.original.layout({width:Se,height:ue},!0),this._editors.modified.layout({width:ve,height:ue},!0),{modifiedEditor:this._editors.modified.getLayoutInfo(),originalEditor:this._editors.original.getLayoutInfo()}}),this._diffValue=this._diffModel.map((z,H)=>z?.diff.read(H)),this.onDidUpdateDiff=E.Event.fromObservableLight(this._diffValue),q.willCreateDiffEditor(),this._contextKeyService.createKey("isInDiffEditor",!0),this._domElement.appendChild(this.elements.root),this._register((0,S.toDisposable)(()=>this._domElement.removeChild(this.elements.root))),this._rootSizeObserver=this._register(new s.ObservableElementSizeObserver(this.elements.root,W.dimension)),this._rootSizeObserver.setAutomaticLayout((ne=W.automaticLayout)!==null&&ne!==void 0?ne:!1),this._options=new P.DiffEditorOptions(W),this._register((0,p.autorun)(z=>{this._options.setWidth(this._rootSizeObserver.width.read(z))})),this._contextKeyService.createKey(h.EditorContextKeys.isEmbeddedDiffEditor.key,!1),this._register((0,s.bindContextKey)(h.EditorContextKeys.isEmbeddedDiffEditor,this._contextKeyService,z=>this._options.isInEmbeddedEditor.read(z))),this._register((0,s.bindContextKey)(h.EditorContextKeys.comparingMovedCode,this._contextKeyService,z=>{var H;return!!(!((H=this._diffModel.read(z))===null||H===void 0)&&H.movedTextToCompare.read(z))})),this._register((0,s.bindContextKey)(h.EditorContextKeys.diffEditorRenderSideBySideInlineBreakpointReached,this._contextKeyService,z=>this._options.couldShowInlineViewBecauseOfSize.read(z))),this._register((0,s.bindContextKey)(h.EditorContextKeys.hasChanges,this._contextKeyService,z=>{var H,Y,j;return((j=(Y=(H=this._diffModel.read(z))===null||H===void 0?void 0:H.diff.read(z))===null||Y===void 0?void 0:Y.mappings.length)!==null&&j!==void 0?j:0)>0})),this._editors=this._register(this._instantiationService.createInstance(A.DiffEditorEditors,this.elements.original,this.elements.modified,this._options,V,(z,H,Y,j)=>this._createInnerEditor(z,H,Y,j))),this._overviewRulerPart=(0,_.derivedDisposable)(this,z=>this._options.renderOverviewRuler.read(z)?this._instantiationService.createInstance((0,s.readHotReloadableExport)(d.OverviewRulerFeature,z),this._editors,this.elements.root,this._diffModel,this._rootSizeObserver.width,this._rootSizeObserver.height,this._layoutInfo.map(H=>H.modifiedEditor)):void 0).recomputeInitiallyAndOnChange(this._store),this._sash=(0,_.derivedDisposable)(this,z=>{const H=this._options.renderSideBySide.read(z);return this.elements.root.classList.toggle("side-by-side",H),H?new r.DiffEditorSash(this._options,this.elements.root,{height:this._rootSizeObserver.height,width:this._rootSizeObserver.width.map((Y,j)=>{var Z,ee;return Y-((ee=(Z=this._overviewRulerPart.read(j))===null||Z===void 0?void 0:Z.width)!==null&&ee!==void 0?ee:0)})},this._boundarySashes):void 0}).recomputeInitiallyAndOnChange(this._store);const $=(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(u.HideUnchangedRegionsFeature,z),this._editors,this._diffModel,this._options)).recomputeInitiallyAndOnChange(this._store);(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(t.DiffEditorDecorations,z),this._editors,this._diffModel,this._options,this)).recomputeInitiallyAndOnChange(this._store);const J=new Set,Q=new Set;let re=!1;const de=(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(f.DiffEditorViewZones,z),(0,L.getWindow)(this._domElement),this._editors,this._diffModel,this._options,this,()=>re||$.get().isUpdatingHiddenAreas,J,Q)).recomputeInitiallyAndOnChange(this._store),he=(0,p.derived)(this,z=>{const H=de.read(z).viewZones.read(z).orig,Y=$.read(z).viewZones.read(z).origViewZones;return H.concat(Y)}),me=(0,p.derived)(this,z=>{const H=de.read(z).viewZones.read(z).mod,Y=$.read(z).viewZones.read(z).modViewZones;return H.concat(Y)});this._register((0,s.applyViewZones)(this._editors.original,he,z=>{re=z},J));let X;this._register((0,s.applyViewZones)(this._editors.modified,me,z=>{re=z,re?X=a.StableEditorScrollState.capture(this._editors.modified):(X?.restore(this._editors.modified),X=void 0)},Q)),this._accessibleDiffViewer=(0,_.derivedDisposable)(this,z=>this._instantiationService.createInstance((0,s.readHotReloadableExport)(n.AccessibleDiffViewer,z),this.elements.accessibleDiffViewer,this._accessibleDiffViewerVisible,(H,Y)=>this._accessibleDiffViewerShouldBeVisible.set(H,Y),this._options.onlyShowAccessibleDiffViewer.map(H=>!H),this._rootSizeObserver.width,this._rootSizeObserver.height,this._diffModel.map((H,Y)=>{var j;return(j=H?.diff.read(Y))===null||j===void 0?void 0:j.mappings.map(Z=>Z.lineRangeMapping)}),this._editors)).recomputeInitiallyAndOnChange(this._store);const U=this._accessibleDiffViewerVisible.map(z=>z?"hidden":"visible");this._register((0,s.applyStyle)(this.elements.modified,{visibility:U})),this._register((0,s.applyStyle)(this.elements.original,{visibility:U})),this._createDiffEditorContributions(),q.addDiffEditor(this),this._register((0,p.recomputeInitiallyAndOnChange)(this._layoutInfo)),(0,_.derivedDisposable)(this,z=>new((0,s.readHotReloadableExport)(c.MovedBlocksLinesFeature,z))(this.elements.root,this._diffModel,this._layoutInfo.map(H=>H.originalEditor),this._layoutInfo.map(H=>H.modifiedEditor),this._editors)).recomputeInitiallyAndOnChange(this._store,z=>{this._movedBlocksLinesPart.set(z,void 0)}),this._register((0,s.applyStyle)(this.elements.overlay,{width:this._layoutInfo.map((z,H)=>z.originalEditor.width+(this._options.renderSideBySide.read(H)?0:z.modifiedEditor.width)),visibility:(0,p.derived)(z=>{var H,Y;return this._options.hideUnchangedRegions.read(z)&&((Y=(H=this._diffModel.read(z))===null||H===void 0?void 0:H.diff.read(z))===null||Y===void 0?void 0:Y.mappings.length)===0?"visible":"hidden"})})),this._register(E.Event.runAndSubscribe(this._editors.modified.onDidChangeCursorPosition,z=>{var H,Y;if(z?.reason===3){const j=(Y=(H=this._diffModel.get())===null||H===void 0?void 0:H.diff.get())===null||Y===void 0?void 0:Y.mappings.find(Z=>Z.lineRangeMapping.modified.contains(z.position.lineNumber));j?.lineRangeMapping.modified.isEmpty?this._audioCueService.playAudioCue(m.AudioCue.diffLineDeleted,{source:"diffEditor.cursorPositionChanged"}):j?.lineRangeMapping.original.isEmpty?this._audioCueService.playAudioCue(m.AudioCue.diffLineInserted,{source:"diffEditor.cursorPositionChanged"}):j&&this._audioCueService.playAudioCue(m.AudioCue.diffLineModified,{source:"diffEditor.cursorPositionChanged"})}}));const G=this._diffModel.map(this,(z,H)=>{if(z)return z.diff.read(H)===void 0&&!z.isDiffUpToDate.read(H)});this._register((0,p.autorunWithStore)((z,H)=>{if(G.read(z)===!0){const Y=this._editorProgressService.show(!0,1e3);H.add((0,S.toDisposable)(()=>Y.done()))}})),this._register((0,S.toDisposable)(()=>{var z;this._shouldDisposeDiffModel&&((z=this._diffModel.get())===null||z===void 0||z.dispose())})),this._register(new M.RevertButtonsFeature(this._editors,this._diffModel,this._options,this))}_createInnerEditor(B,W,V,K){return B.createInstance(i.CodeEditorWidget,W,V,K)}_createDiffEditorContributions(){const B=v.EditorExtensionsRegistry.getDiffEditorContributions();for(const W of B)try{this._register(this._instantiationService.createInstance(W.ctor,this))}catch(V){(0,y.onUnexpectedError)(V)}}get _targetEditor(){return this._editors.modified}getEditorType(){return g.EditorType.IDiffEditor}layout(B){this._rootSizeObserver.observe(B)}hasTextFocus(){return this._editors.original.hasTextFocus()||this._editors.modified.hasTextFocus()}saveViewState(){var B;const W=this._editors.original.saveViewState(),V=this._editors.modified.saveViewState();return{original:W,modified:V,modelState:(B=this._diffModel.get())===null||B===void 0?void 0:B.serializeState()}}restoreViewState(B){var W;if(B&&B.original&&B.modified){const V=B;this._editors.original.restoreViewState(V.original),this._editors.modified.restoreViewState(V.modified),V.modelState&&((W=this._diffModel.get())===null||W===void 0||W.restoreSerializedState(V.modelState))}}handleInitialized(){this._editors.original.handleInitialized(),this._editors.modified.handleInitialized()}createViewModel(B){return this._instantiationService.createInstance(N.DiffEditorViewModel,B,this._options)}getModel(){var B,W;return(W=(B=this._diffModel.get())===null||B===void 0?void 0:B.model)!==null&&W!==void 0?W:null}setModel(B,W){!B&&this._diffModel.get()&&this._accessibleDiffViewer.get().close();const V=B?"model"in B?{model:B,shouldDispose:!1}:{model:this.createViewModel(B),shouldDispose:!0}:void 0;this._diffModel.get()!==V?.model&&(0,p.subtransaction)(W,K=>{var F;p.observableFromEvent.batchEventsGlobally(K,()=>{this._editors.original.setModel(V?V.model.model.original:null),this._editors.modified.setModel(V?V.model.model.modified:null)});const q=this._diffModel.get(),ie=this._shouldDisposeDiffModel;this._shouldDisposeDiffModel=(F=V?.shouldDispose)!==null&&F!==void 0?F:!1,this._diffModel.set(V?.model,K),ie&&q?.dispose()})}updateOptions(B){this._options.updateOptions(B)}getContainerDomNode(){return this._domElement}getOriginalEditor(){return this._editors.original}getModifiedEditor(){return this._editors.modified}getLineChanges(){var B;const W=(B=this._diffModel.get())===null||B===void 0?void 0:B.diff.get();return W?x(W):null}revert(B){if(B.innerChanges){this.revertRangeMappings(B.innerChanges);return}const W=this._diffModel.get();!W||!W.isDiffUpToDate.get()||this._editors.modified.executeEdits("diffEditor",[{range:B.modified.toExclusiveRange(),text:W.model.original.getValueInRange(B.original.toExclusiveRange())}])}revertRangeMappings(B){const W=this._diffModel.get();if(!W||!W.isDiffUpToDate.get())return;const V=B.map(K=>({range:K.modifiedRange,text:W.model.original.getValueInRange(K.originalRange)}));this._editors.modified.executeEdits("diffEditor",V)}_goTo(B){this._editors.modified.setPosition(new l.Position(B.lineRangeMapping.modified.startLineNumber,1)),this._editors.modified.revealRangeInCenter(B.lineRangeMapping.modified.toExclusiveRange())}goToDiff(B){var W,V,K,F;const q=(V=(W=this._diffModel.get())===null||W===void 0?void 0:W.diff.get())===null||V===void 0?void 0:V.mappings;if(!q||q.length===0)return;const ie=this._editors.modified.getPosition().lineNumber;let ae;B==="next"?ae=(K=q.find(ne=>ne.lineRangeMapping.modified.startLineNumber>ie))!==null&&K!==void 0?K:q[0]:ae=(F=(0,k.findLast)(q,ne=>ne.lineRangeMapping.modified.startLineNumber{var W;const V=(W=B.diff.get())===null||W===void 0?void 0:W.mappings;!V||V.length===0||this._goTo(V[0])})}accessibleDiffViewerNext(){this._accessibleDiffViewer.get().next()}accessibleDiffViewerPrev(){this._accessibleDiffViewer.get().prev()}async waitForDiff(){const B=this._diffModel.get();B&&await B.waitForDiff()}mapToOtherSide(){var B,W;const V=this._editors.modified.hasWidgetFocus(),K=V?this._editors.modified:this._editors.original,F=V?this._editors.original:this._editors.modified;let q;const ie=K.getSelection();if(ie){const ae=(W=(B=this._diffModel.get())===null||B===void 0?void 0:B.diff.get())===null||W===void 0?void 0:W.mappings.map(ne=>V?ne.lineRangeMapping.flip():ne.lineRangeMapping);if(ae){const ne=(0,s.translatePosition)(ie.getStartPosition(),ae),$=(0,s.translatePosition)(ie.getEndPosition(),ae);q=o.Range.plusRange(ne,$)}}return{destination:F,destinationSelection:q}}switchSide(){const{destination:B,destinationSelection:W}=this.mapToOtherSide();B.focus(),W&&B.setSelection(W)}exitCompareMove(){const B=this._diffModel.get();B&&B.movedTextToCompare.set(void 0,void 0)}collapseAllUnchangedRegions(){var B;const W=(B=this._diffModel.get())===null||B===void 0?void 0:B.unchangedRegions.get();W&&(0,p.transaction)(V=>{for(const K of W)K.collapseAll(V)})}showAllUnchangedRegions(){var B;const W=(B=this._diffModel.get())===null||B===void 0?void 0:B.unchangedRegions.get();W&&(0,p.transaction)(V=>{for(const K of W)K.showAll(V)})}};e.DiffEditorWidget=R,e.DiffEditorWidget=R=ke([ge(3,C.IContextKeyService),ge(4,w.IInstantiationService),ge(5,b.ICodeEditorService),ge(6,m.IAudioCueService),ge(7,I.IEditorProgressService)],R);function x(O){return O.mappings.map(B=>{const W=B.lineRangeMapping;let V,K,F,q,ie=W.innerChanges;return W.original.isEmpty?(V=W.original.startLineNumber-1,K=0,ie=void 0):(V=W.original.startLineNumber,K=W.original.endLineNumberExclusive-1),W.modified.isEmpty?(F=W.modified.startLineNumber-1,q=0,ie=void 0):(F=W.modified.startLineNumber,q=W.modified.endLineNumberExclusive-1),{originalStartLineNumber:V,originalEndLineNumber:K,modifiedStartLineNumber:F,modifiedEndLineNumber:q,charChanges:ie?.map(ae=>({originalStartLineNumber:ae.originalRange.startLineNumber,originalStartColumn:ae.originalRange.startColumn,originalEndLineNumber:ae.originalRange.endLineNumber,originalEndColumn:ae.originalRange.endColumn,modifiedStartLineNumber:ae.modifiedRange.startLineNumber,modifiedStartColumn:ae.modifiedRange.startColumn,modifiedEndLineNumber:ae.modifiedRange.endLineNumber,modifiedEndColumn:ae.modifiedRange.endColumn}))}})}}),define(se[886],oe([1,0,7,26,16,33,259,21,626,30,25,27,15,258]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.findFocusedDiffEditor=e.AccessibleDiffViewerPrev=e.AccessibleDiffViewerNext=e.ShowAllUnchangedRegions=e.CollapseAllUnchangedRegions=e.ExitCompareMove=e.SwitchSide=e.ToggleUseInlineViewWhenSpaceIsLimited=e.ToggleShowMovedCodeBlocks=e.ToggleCollapseUnchangedRegions=void 0;class n extends v.Action2{constructor(){super({id:"diffEditor.toggleCollapseUnchangedRegions",title:(0,_.localize2)(5,"Toggle Collapse Unchanged Regions"),icon:k.Codicon.map,toggled:i.ContextKeyExpr.has("config.diffEditor.hideUnchangedRegions.enabled"),precondition:i.ContextKeyExpr.has("isInDiffEditor"),menu:{when:i.ContextKeyExpr.has("isInDiffEditor"),id:v.MenuId.EditorTitle,order:22,group:"navigation"}})}run(w,...D){const I=w.get(a.IConfigurationService),T=!I.getValue("diffEditor.hideUnchangedRegions.enabled");I.updateValue("diffEditor.hideUnchangedRegions.enabled",T)}}e.ToggleCollapseUnchangedRegions=n,(0,v.registerAction2)(n);class t extends v.Action2{constructor(){super({id:"diffEditor.toggleShowMovedCodeBlocks",title:(0,_.localize2)(6,"Toggle Show Moved Code Blocks"),precondition:i.ContextKeyExpr.has("isInDiffEditor")})}run(w,...D){const I=w.get(a.IConfigurationService),T=!I.getValue("diffEditor.experimental.showMoves");I.updateValue("diffEditor.experimental.showMoves",T)}}e.ToggleShowMovedCodeBlocks=t,(0,v.registerAction2)(t);class r extends v.Action2{constructor(){super({id:"diffEditor.toggleUseInlineViewWhenSpaceIsLimited",title:(0,_.localize2)(7,"Toggle Use Inline View When Space Is Limited"),precondition:i.ContextKeyExpr.has("isInDiffEditor")})}run(w,...D){const I=w.get(a.IConfigurationService),T=!I.getValue("diffEditor.useInlineViewWhenSpaceIsLimited");I.updateValue("diffEditor.useInlineViewWhenSpaceIsLimited",T)}}e.ToggleUseInlineViewWhenSpaceIsLimited=r,(0,v.registerAction2)(r),v.MenuRegistry.appendMenuItem(v.MenuId.EditorTitle,{command:{id:new r().desc.id,title:(0,_.localize)(0,null),toggled:i.ContextKeyExpr.has("config.diffEditor.useInlineViewWhenSpaceIsLimited"),precondition:i.ContextKeyExpr.has("isInDiffEditor")},order:11,group:"1_diff",when:i.ContextKeyExpr.and(p.EditorContextKeys.diffEditorRenderSideBySideInlineBreakpointReached,i.ContextKeyExpr.has("isInDiffEditor"))}),v.MenuRegistry.appendMenuItem(v.MenuId.EditorTitle,{command:{id:new t().desc.id,title:(0,_.localize)(1,null),icon:k.Codicon.move,toggled:i.ContextKeyEqualsExpr.create("config.diffEditor.experimental.showMoves",!0),precondition:i.ContextKeyExpr.has("isInDiffEditor")},order:10,group:"1_diff",when:i.ContextKeyExpr.has("isInDiffEditor")});const u={value:(0,_.localize)(2,null),original:"Diff Editor"};class f extends y.EditorAction2{constructor(){super({id:"diffEditor.switchSide",title:(0,_.localize2)(8,"Switch Side"),icon:k.Codicon.arrowSwap,precondition:i.ContextKeyExpr.has("isInDiffEditor"),f1:!0,category:u})}runEditorCommand(w,D,I){const T=h(w);if(T instanceof S.DiffEditorWidget){if(I&&I.dryRun)return{destinationSelection:T.mapToOtherSide().destinationSelection};T.switchSide()}}}e.SwitchSide=f,(0,v.registerAction2)(f);class c extends y.EditorAction2{constructor(){super({id:"diffEditor.exitCompareMove",title:(0,_.localize2)(9,"Exit Compare Move"),icon:k.Codicon.close,precondition:p.EditorContextKeys.comparingMovedCode,f1:!1,category:u,keybinding:{weight:1e4,primary:9}})}runEditorCommand(w,D,...I){const T=h(w);T instanceof S.DiffEditorWidget&&T.exitCompareMove()}}e.ExitCompareMove=c,(0,v.registerAction2)(c);class d extends y.EditorAction2{constructor(){super({id:"diffEditor.collapseAllUnchangedRegions",title:(0,_.localize2)(10,"Collapse All Unchanged Regions"),icon:k.Codicon.fold,precondition:i.ContextKeyExpr.has("isInDiffEditor"),f1:!0,category:u})}runEditorCommand(w,D,...I){const T=h(w);T instanceof S.DiffEditorWidget&&T.collapseAllUnchangedRegions()}}e.CollapseAllUnchangedRegions=d,(0,v.registerAction2)(d);class s extends y.EditorAction2{constructor(){super({id:"diffEditor.showAllUnchangedRegions",title:(0,_.localize2)(11,"Show All Unchanged Regions"),icon:k.Codicon.unfold,precondition:i.ContextKeyExpr.has("isInDiffEditor"),f1:!0,category:u})}runEditorCommand(w,D,...I){const T=h(w);T instanceof S.DiffEditorWidget&&T.showAllUnchangedRegions()}}e.ShowAllUnchangedRegions=s,(0,v.registerAction2)(s);const l={value:(0,_.localize)(3,null),original:"Accessible Diff Viewer"};class o extends v.Action2{constructor(){super({id:o.id,title:(0,_.localize2)(12,"Go to Next Difference"),category:l,precondition:i.ContextKeyExpr.has("isInDiffEditor"),keybinding:{primary:65,weight:100},f1:!0})}run(w){const D=h(w);D?.accessibleDiffViewerNext()}}e.AccessibleDiffViewerNext=o,o.id="editor.action.accessibleDiffViewer.next",v.MenuRegistry.appendMenuItem(v.MenuId.EditorTitle,{command:{id:o.id,title:(0,_.localize)(4,null),precondition:i.ContextKeyExpr.has("isInDiffEditor")},order:10,group:"2_diff",when:i.ContextKeyExpr.and(p.EditorContextKeys.accessibleDiffViewerVisible.negate(),i.ContextKeyExpr.has("isInDiffEditor"))});class g extends v.Action2{constructor(){super({id:g.id,title:(0,_.localize2)(13,"Go to Previous Difference"),category:l,precondition:i.ContextKeyExpr.has("isInDiffEditor"),keybinding:{primary:1089,weight:100},f1:!0})}run(w){const D=h(w);D?.accessibleDiffViewerPrev()}}e.AccessibleDiffViewerPrev=g,g.id="editor.action.accessibleDiffViewer.prev";function h(C){const D=C.get(E.ICodeEditorService).listDiffEditors(),I=(0,L.getActiveElement)();if(I)for(const T of D){const A=T.getContainerDomNode();if(m(A,I))return T}return null}e.findFocusedDiffEditor=h;function m(C,w){let D=w;for(;D;){if(D===C)return!0;D=D.parentElement}return!1}b.CommandsRegistry.registerCommandAlias("editor.action.diffReview.next",o.id),(0,v.registerAction2)(o),b.CommandsRegistry.registerCommandAlias("editor.action.diffReview.prev",g.id),(0,v.registerAction2)(g)}),define(se[168],oe([1,0,55,33,194,32,18,69,25,15,8,50,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.EmbeddedCodeEditorWidget=void 0;let n=class extends y.CodeEditorWidget{constructor(r,u,f,c,d,s,l,o,g,h,m,C,w){super(r,{...c.getRawOptions(),overflowWidgetsDomNode:c.getOverflowWidgetsDomNode()},f,d,s,l,o,g,h,m,C,w),this._parentEditor=c,this._overwriteOptions=u,super.updateOptions(this._overwriteOptions),this._register(c.onDidChangeConfiguration(D=>this._onParentConfigurationChanged(D)))}getParentEditor(){return this._parentEditor}_onParentConfigurationChanged(r){super.updateOptions(this._parentEditor.getRawOptions()),super.updateOptions(this._overwriteOptions)}updateOptions(r){L.mixin(this._overwriteOptions,r,!0),super.updateOptions(this._overwriteOptions)}};e.EmbeddedCodeEditorWidget=n,e.EmbeddedCodeEditorWidget=n=ke([ge(4,b.IInstantiationService),ge(5,k.ICodeEditorService),ge(6,_.ICommandService),ge(7,v.IContextKeyService),ge(8,i.IThemeService),ge(9,a.INotificationService),ge(10,p.IAccessibilityService),ge(11,E.ILanguageConfigurationService),ge(12,S.ILanguageFeaturesService)],n)}),define(se[374],oe([1,0,7,229,26,2,35,110,259,373,30,8,578]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DiffEditorItemTemplate=e.TemplateData=void 0;class n{constructor(f){this.viewModel=f}getId(){return this.viewModel}}e.TemplateData=n;let t=class extends E.Disposable{constructor(f,c,d,s){super(),this._container=f,this._overflowWidgetsDomNode=c,this._workbenchUIElementFactory=d,this._instantiationService=s,this._viewModel=(0,p.observableValue)(this,void 0),this._collapsed=(0,S.derived)(this,o=>{var g;return(g=this._viewModel.read(o))===null||g===void 0?void 0:g.collapsed.read(o)}),this._editorContentHeight=(0,p.observableValue)(this,500),this.contentHeight=(0,S.derived)(this,o=>(this._collapsed.read(o)?0:this._editorContentHeight.read(o))+this._outerEditorHeight),this._modifiedContentWidth=(0,p.observableValue)(this,0),this._modifiedWidth=(0,p.observableValue)(this,0),this._originalContentWidth=(0,p.observableValue)(this,0),this._originalWidth=(0,p.observableValue)(this,0),this.maxScroll=(0,S.derived)(this,o=>{const g=this._modifiedContentWidth.read(o)-this._modifiedWidth.read(o),h=this._originalContentWidth.read(o)-this._originalWidth.read(o);return g>h?{maxScroll:g,width:this._modifiedWidth.read(o)}:{maxScroll:h,width:this._originalWidth.read(o)}}),this._elements=(0,L.h)("div.multiDiffEntry",[(0,L.h)("div.header@header",[(0,L.h)("div.collapse-button@collapseButton"),(0,L.h)("div.file-path",[(0,L.h)("div.title.modified.show-file-icons@primaryPath",[]),(0,L.h)("div.status.deleted@status",["R"]),(0,L.h)("div.title.original.show-file-icons@secondaryPath",[])]),(0,L.h)("div.actions@actions")]),(0,L.h)("div.editorParent",[(0,L.h)("div.editorContainer@editor")])]),this.editor=this._register(this._instantiationService.createInstance(_.DiffEditorWidget,this._elements.editor,{overflowWidgetsDomNode:this._overflowWidgetsDomNode},{})),this.isModifedFocused=r(this.editor.getModifiedEditor()),this.isOriginalFocused=r(this.editor.getOriginalEditor()),this.isFocused=(0,S.derived)(this,o=>this.isModifedFocused.read(o)||this.isOriginalFocused.read(o)),this._resourceLabel=this._workbenchUIElementFactory.createResourceLabel?this._register(this._workbenchUIElementFactory.createResourceLabel(this._elements.primaryPath)):void 0,this._resourceLabel2=this._workbenchUIElementFactory.createResourceLabel?this._register(this._workbenchUIElementFactory.createResourceLabel(this._elements.secondaryPath)):void 0,this._dataStore=new E.DisposableStore,this._headerHeight=38;const l=new k.Button(this._elements.collapseButton,{});this._register((0,S.autorun)(o=>{l.element.className="",l.icon=this._collapsed.read(o)?y.Codicon.chevronRight:y.Codicon.chevronDown})),this._register(l.onDidClick(()=>{var o;(o=this._viewModel.get())===null||o===void 0||o.collapsed.set(!this._collapsed.get(),void 0)})),this._register((0,S.autorun)(o=>{this._elements.editor.style.display=this._collapsed.read(o)?"none":"block"})),this.editor.getModifiedEditor().onDidLayoutChange(o=>{const g=this.editor.getModifiedEditor().getLayoutInfo().contentWidth;this._modifiedWidth.set(g,void 0)}),this.editor.getOriginalEditor().onDidLayoutChange(o=>{const g=this.editor.getOriginalEditor().getLayoutInfo().contentWidth;this._originalWidth.set(g,void 0)}),this._register(this.editor.onDidContentSizeChange(o=>{(0,p.globalTransaction)(g=>{this._editorContentHeight.set(o.contentHeight,g),this._modifiedContentWidth.set(this.editor.getModifiedEditor().getContentWidth(),g),this._originalContentWidth.set(this.editor.getOriginalEditor().getContentWidth(),g)})})),this._register((0,S.autorun)(o=>{const g=this.isFocused.read(o);this._elements.root.classList.toggle("focused",g)})),this._container.appendChild(this._elements.root),this._outerEditorHeight=38,this._register(this._instantiationService.createInstance(v.MenuWorkbenchToolBar,this._elements.actions,b.MenuId.MultiDiffEditorFileToolbar,{actionRunner:this._register(new i.ActionRunnerWithContext(()=>{var o;return(o=this._viewModel.get())===null||o===void 0?void 0:o.modifiedUri})),menuOptions:{shouldForwardArgs:!0},toolbarOptions:{primaryGroup:o=>o.startsWith("navigation")}}))}setScrollLeft(f){this._modifiedContentWidth.get()-this._modifiedWidth.get()>this._originalContentWidth.get()-this._originalWidth.get()?this.editor.getModifiedEditor().setScrollLeft(f):this.editor.getOriginalEditor().setScrollLeft(f)}setData(f){function c(s){return{...s,scrollBeyondLastLine:!1,hideUnchangedRegions:{enabled:!0},scrollbar:{vertical:"hidden",horizontal:"hidden",handleMouseWheel:!1,useShadows:!1},renderOverviewRuler:!1,fixedOverflowWidgets:!0,overviewRulerBorder:!1}}const d=f.viewModel.entry.value;d.onOptionsDidChange&&this._dataStore.add(d.onOptionsDidChange(()=>{var s;this.editor.updateOptions(c((s=d.options)!==null&&s!==void 0?s:{}))})),(0,p.globalTransaction)(s=>{var l,o,g,h;(l=this._resourceLabel)===null||l===void 0||l.setUri((o=f.viewModel.modifiedUri)!==null&&o!==void 0?o:f.viewModel.originalUri,{strikethrough:f.viewModel.modifiedUri===void 0});let m=!1,C=!1,w=!1,D="";f.viewModel.modifiedUri&&f.viewModel.originalUri&&f.viewModel.modifiedUri.path!==f.viewModel.originalUri.path?(D="R",m=!0):f.viewModel.modifiedUri?f.viewModel.originalUri||(D="A",w=!0):(D="D",C=!0),this._elements.status.classList.toggle("renamed",m),this._elements.status.classList.toggle("deleted",C),this._elements.status.classList.toggle("added",w),this._elements.status.innerText=D,(g=this._resourceLabel2)===null||g===void 0||g.setUri(m?f.viewModel.originalUri:void 0,{strikethrough:!0}),this._dataStore.clear(),this._viewModel.set(f.viewModel,s),this.editor.setModel(f.viewModel.diffEditorViewModel,s),this.editor.updateOptions(c((h=d.options)!==null&&h!==void 0?h:{}))})}render(f,c,d,s){this._elements.root.style.visibility="visible",this._elements.root.style.top=`${f.start}px`,this._elements.root.style.height=`${f.length}px`,this._elements.root.style.width=`${c}px`,this._elements.root.style.position="absolute";const l=Math.max(0,Math.min(f.length-this._headerHeight,s.start-f.start));this._elements.header.style.transform=`translateY(${l}px)`,(0,p.globalTransaction)(o=>{this.editor.layout({width:c,height:f.length-this._outerEditorHeight})}),this.editor.getOriginalEditor().setScrollTop(d),this._elements.header.classList.toggle("shadow",l>0||d>0)}hide(){this._elements.root.style.top="-100000px",this._elements.root.style.visibility="hidden"}};e.DiffEditorItemTemplate=t,e.DiffEditorItemTemplate=t=ke([ge(3,a.IInstantiationService)],t);function r(u){return(0,S.observableFromEvent)(f=>{const c=new E.DisposableStore;return c.add(u.onDidFocusEditorWidget(()=>f(!0))),c.add(u.onDidBlurEditorWidget(()=>f(!1))),c},()=>u.hasWidgetFocus())}}),define(se[887],oe([1,0,7,77,60,2,35,110,147,87,73,8,374,499,15,163,21,24,452]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MultiDiffEditorWidgetImpl=void 0;let c=class extends E.Disposable{constructor(l,o,g,h,m,C){super(),this._element=l,this._dimension=o,this._viewModel=g,this._workbenchUIElementFactory=h,this._parentContextKeyService=m,this._parentInstantiationService=C,this._elements=(0,L.h)("div.monaco-component.multiDiffEditor",[(0,L.h)("div@content",{style:{overflow:"hidden"}}),(0,L.h)("div.monaco-editor@overflowWidgetsDomNode",{})]),this._sizeObserver=this._register(new v.ObservableElementSizeObserver(this._element,void 0)),this._objectPool=this._register(new n.ObjectPool(D=>{const I=this._instantiationService.createInstance(i.DiffEditorItemTemplate,this._elements.content,this._elements.overflowWidgetsDomNode,this._workbenchUIElementFactory);return I.setData(D),I})),this._scrollable=this._register(new _.Scrollable({forceIntegerValues:!1,scheduleAtNextAnimationFrame:D=>(0,L.scheduleAtNextAnimationFrame)((0,L.getWindow)(this._element),D),smoothScrollDuration:100})),this._scrollableElement=this._register(new k.SmoothScrollableElement(this._elements.root,{vertical:1,horizontal:1,useShadows:!1},this._scrollable)),this.scrollTop=(0,S.observableFromEvent)(this._scrollableElement.onScroll,()=>this._scrollableElement.getScrollPosition().scrollTop),this.scrollLeft=(0,S.observableFromEvent)(this._scrollableElement.onScroll,()=>this._scrollableElement.getScrollPosition().scrollLeft),this._viewItems=(0,S.derivedWithStore)(this,(D,I)=>{const T=this._viewModel.read(D);return T?T.items.read(D).map(P=>{var N;const M=I.add(new d(P,this._objectPool,this.scrollLeft)),R=(N=this._lastDocStates)===null||N===void 0?void 0:N[M.getKey()];return R&&(0,p.transaction)(x=>{M.setViewState(R,x)}),M}):[]}),this._spaceBetweenPx=10,this._totalHeight=this._viewItems.map(this,(D,I)=>D.reduce((T,A)=>T+A.contentHeight.read(I)+this._spaceBetweenPx,0)),this.activeDiffItem=(0,S.derived)(this,D=>this._viewItems.read(D).find(I=>{var T;return(T=I.template.read(D))===null||T===void 0?void 0:T.isFocused.read(D)})),this.lastActiveDiffItem=(0,S.derivedObservableWithCache)((D,I)=>{var T;return(T=this.activeDiffItem.read(D))!==null&&T!==void 0?T:I}),this._contextKeyService=this._register(this._parentContextKeyService.createScoped(this._element)),this._instantiationService=this._parentInstantiationService.createChild(new r.ServiceCollection([t.IContextKeyService,this._contextKeyService])),this._lastDocStates={},this._contextKeyService.createKey(u.EditorContextKeys.inMultiDiffEditor.key,!0),this._register((0,S.autorunWithStore)((D,I)=>{const T=this._viewModel.read(D);if(T&&T.contextKeys)for(const[A,P]of Object.entries(T.contextKeys)){const N=this._contextKeyService.createKey(A,void 0);N.set(P),I.add((0,E.toDisposable)(()=>N.reset()))}}));const w=this._parentContextKeyService.createKey(u.EditorContextKeys.multiDiffEditorAllCollapsed.key,!1);this._register((0,S.autorun)(D=>{const I=this._viewModel.read(D);if(I){const T=I.items.read(D).every(A=>A.collapsed.read(D));w.set(T)}})),this._register((0,S.autorun)(D=>{const I=this.lastActiveDiffItem.read(D);(0,p.transaction)(T=>{var A;(A=this._viewModel.read(D))===null||A===void 0||A.activeDiffItem.set(I?.viewModel,T)})})),this._register((0,S.autorun)(D=>{const I=this._dimension.read(D);this._sizeObserver.observe(I)})),this._elements.content.style.position="relative",this._register((0,S.autorun)(D=>{const I=this._sizeObserver.height.read(D);this._elements.root.style.height=`${I}px`;const T=this._totalHeight.read(D);this._elements.content.style.height=`${T}px`;const A=this._sizeObserver.width.read(D);let P=A;const N=this._viewItems.read(D),M=(0,y.findFirstMaxBy)(N,R=>R.maxScroll.read(D).maxScroll);if(M){const R=M.maxScroll.read(D);P=A+R.maxScroll}this._scrollableElement.setScrollDimensions({width:A,height:I,scrollHeight:T,scrollWidth:P})})),l.replaceChildren(this._scrollableElement.getDomNode()),this._register((0,E.toDisposable)(()=>{l.replaceChildren()})),this._register(this._register((0,S.autorun)(D=>{(0,p.globalTransaction)(I=>{this.render(D)})})))}render(l){const o=this.scrollTop.read(l);let g=0,h=0,m=0;const C=this._sizeObserver.height.read(l),w=b.OffsetRange.ofStartAndLength(o,C),D=this._sizeObserver.width.read(l);for(const I of this._viewItems.read(l)){const T=I.contentHeight.read(l),A=Math.min(T,C),P=b.OffsetRange.ofStartAndLength(h,A),N=b.OffsetRange.ofStartAndLength(m,T);if(N.isBefore(w))g-=T-A,I.hide();else if(N.isAfter(w))I.hide();else{const M=Math.max(0,Math.min(w.start-N.start,T-A));g-=M;const R=b.OffsetRange.ofStartAndLength(o+g,C);I.render(P,M,D,R)}h+=A+this._spaceBetweenPx,m+=T+this._spaceBetweenPx}this._elements.content.style.transform=`translateY(${-(o+g)}px)`}};e.MultiDiffEditorWidgetImpl=c,e.MultiDiffEditorWidgetImpl=c=ke([ge(4,t.IContextKeyService),ge(5,a.IInstantiationService)],c);class d extends E.Disposable{constructor(l,o,g){super(),this.viewModel=l,this._objectPool=o,this._scrollLeft=g,this._templateRef=this._register((0,p.disposableObservableValue)(this,void 0)),this.contentHeight=(0,S.derived)(this,h=>{var m,C,w;return(w=(C=(m=this._templateRef.read(h))===null||m===void 0?void 0:m.object.contentHeight)===null||C===void 0?void 0:C.read(h))!==null&&w!==void 0?w:this.viewModel.lastTemplateData.read(h).contentHeight}),this.maxScroll=(0,S.derived)(this,h=>{var m,C;return(C=(m=this._templateRef.read(h))===null||m===void 0?void 0:m.object.maxScroll.read(h))!==null&&C!==void 0?C:{maxScroll:0,scrollWidth:0}}),this.template=(0,S.derived)(this,h=>{var m;return(m=this._templateRef.read(h))===null||m===void 0?void 0:m.object}),this._isHidden=(0,S.observableValue)(this,!1),this._register((0,S.autorun)(h=>{var m;const C=this._scrollLeft.read(h);(m=this._templateRef.read(h))===null||m===void 0||m.object.setScrollLeft(C)})),this._register((0,S.autorun)(h=>{const m=this._templateRef.read(h);!m||!this._isHidden.read(h)||m.object.isFocused.read(h)||this._clear()}))}dispose(){this._clear(),super.dispose()}toString(){var l;return`VirtualViewItem(${(l=this.viewModel.entry.value.modified)===null||l===void 0?void 0:l.uri.toString()})`}getKey(){return this.viewModel.getKey()}setViewState(l,o){var g;this.viewModel.collapsed.set(l.collapsed,o),this._updateTemplateData(o);const h=this.viewModel.lastTemplateData.get(),m=(g=l.selections)===null||g===void 0?void 0:g.map(f.Selection.liftSelection);this.viewModel.lastTemplateData.set({...h,selections:m},o);const C=this._templateRef.get();C&&m&&C.object.editor.setSelections(m)}_updateTemplateData(l){var o;const g=this._templateRef.get();g&&this.viewModel.lastTemplateData.set({contentHeight:g.object.contentHeight.get(),selections:(o=g.object.editor.getSelections())!==null&&o!==void 0?o:void 0},l)}_clear(){const l=this._templateRef.get();l&&(0,p.transaction)(o=>{this._updateTemplateData(o),l.object.hide(),this._templateRef.set(void 0,o)})}hide(){this._isHidden.set(!0,void 0)}render(l,o,g,h){this._isHidden.set(!1,void 0);let m=this._templateRef.get();if(!m){m=this._objectPool.getUnusedObj(new i.TemplateData(this.viewModel)),this._templateRef.set(m,void 0);const C=this.viewModel.lastTemplateData.get().selections;C&&m.object.editor.setSelections(C)}m.object.render(l,g,o,h)}}}),define(se[888],oe([1,0,2,35,87,887,8,374,835]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MultiDiffEditorWidget=void 0;let _=class extends L.Disposable{constructor(b,a,i){super(),this._element=b,this._workbenchUIElementFactory=a,this._instantiationService=i,this._dimension=(0,k.observableValue)(this,void 0),this._viewModel=(0,k.observableValue)(this,void 0),this._widgetImpl=(0,k.derivedWithStore)(this,(n,t)=>((0,y.readHotReloadableExport)(p.DiffEditorItemTemplate,n),t.add(this._instantiationService.createInstance((0,y.readHotReloadableExport)(E.MultiDiffEditorWidgetImpl,n),this._element,this._dimension,this._viewModel,this._workbenchUIElementFactory)))),this._register((0,k.recomputeInitiallyAndOnChange)(this._widgetImpl))}};e.MultiDiffEditorWidget=_,e.MultiDiffEditorWidget=_=ke([ge(2,S.IInstantiationService)],_)}),define(se[889],oe([1,0,14,2,16,10,5,24,21,41,38,650,30,29,23,454]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.BracketMatchingController=void 0;const r=(0,n.registerColor)("editorOverviewRuler.bracketMatchForeground",{dark:"#A0A0A0",light:"#A0A0A0",hcDark:"#A0A0A0",hcLight:"#A0A0A0"},a.localize(0,null));class u extends y.EditorAction{constructor(){super({id:"editor.action.jumpToBracket",label:a.localize(1,null),alias:"Go to Bracket",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:3165,weight:100}})}run(o,g){var h;(h=s.get(g))===null||h===void 0||h.jumpToBracket()}}class f extends y.EditorAction{constructor(){super({id:"editor.action.selectToBracket",label:a.localize(2,null),alias:"Select to Bracket",precondition:void 0,metadata:{description:a.localize2(5,"Select the text inside and including the brackets or curly braces"),args:[{name:"args",schema:{type:"object",properties:{selectBrackets:{type:"boolean",default:!0}}}}]}})}run(o,g,h){var m;let C=!0;h&&h.selectBrackets===!1&&(C=!1),(m=s.get(g))===null||m===void 0||m.selectToBracket(C)}}class c extends y.EditorAction{constructor(){super({id:"editor.action.removeBrackets",label:a.localize(3,null),alias:"Remove Brackets",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:2561,weight:100}})}run(o,g){var h;(h=s.get(g))===null||h===void 0||h.removeBrackets(this.id)}}class d{constructor(o,g,h){this.position=o,this.brackets=g,this.options=h}}class s extends k.Disposable{static get(o){return o.getContribution(s.ID)}constructor(o){super(),this._editor=o,this._lastBracketsData=[],this._lastVersionId=0,this._decorations=this._editor.createDecorationsCollection(),this._updateBracketsSoon=this._register(new L.RunOnceScheduler(()=>this._updateBrackets(),50)),this._matchBrackets=this._editor.getOption(71),this._updateBracketsSoon.schedule(),this._register(o.onDidChangeCursorPosition(g=>{this._matchBrackets!=="never"&&this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeModelContent(g=>{this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeModel(g=>{this._lastBracketsData=[],this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeModelLanguageConfiguration(g=>{this._lastBracketsData=[],this._updateBracketsSoon.schedule()})),this._register(o.onDidChangeConfiguration(g=>{g.hasChanged(71)&&(this._matchBrackets=this._editor.getOption(71),this._decorations.clear(),this._lastBracketsData=[],this._lastVersionId=0,this._updateBracketsSoon.schedule())})),this._register(o.onDidBlurEditorWidget(()=>{this._updateBracketsSoon.schedule()})),this._register(o.onDidFocusEditorWidget(()=>{this._updateBracketsSoon.schedule()}))}jumpToBracket(){if(!this._editor.hasModel())return;const o=this._editor.getModel(),g=this._editor.getSelections().map(h=>{const m=h.getStartPosition(),C=o.bracketPairs.matchBracket(m);let w=null;if(C)C[0].containsPosition(m)&&!C[1].containsPosition(m)?w=C[1].getStartPosition():C[1].containsPosition(m)&&(w=C[0].getStartPosition());else{const D=o.bracketPairs.findEnclosingBrackets(m);if(D)w=D[1].getStartPosition();else{const I=o.bracketPairs.findNextBracket(m);I&&I.range&&(w=I.range.getStartPosition())}}return w?new p.Selection(w.lineNumber,w.column,w.lineNumber,w.column):new p.Selection(m.lineNumber,m.column,m.lineNumber,m.column)});this._editor.setSelections(g),this._editor.revealRange(g[0])}selectToBracket(o){if(!this._editor.hasModel())return;const g=this._editor.getModel(),h=[];this._editor.getSelections().forEach(m=>{const C=m.getStartPosition();let w=g.bracketPairs.matchBracket(C);if(!w&&(w=g.bracketPairs.findEnclosingBrackets(C),!w)){const T=g.bracketPairs.findNextBracket(C);T&&T.range&&(w=g.bracketPairs.matchBracket(T.range.getStartPosition()))}let D=null,I=null;if(w){w.sort(S.Range.compareRangesUsingStarts);const[T,A]=w;if(D=o?T.getStartPosition():T.getEndPosition(),I=o?A.getEndPosition():A.getStartPosition(),A.containsPosition(C)){const P=D;D=I,I=P}}D&&I&&h.push(new p.Selection(D.lineNumber,D.column,I.lineNumber,I.column))}),h.length>0&&(this._editor.setSelections(h),this._editor.revealRange(h[0]))}removeBrackets(o){if(!this._editor.hasModel())return;const g=this._editor.getModel();this._editor.getSelections().forEach(h=>{const m=h.getPosition();let C=g.bracketPairs.matchBracket(m);C||(C=g.bracketPairs.findEnclosingBrackets(m)),C&&(this._editor.pushUndoStop(),this._editor.executeEdits(o,[{range:C[0],text:""},{range:C[1],text:""}]),this._editor.pushUndoStop())})}_updateBrackets(){if(this._matchBrackets==="never")return;this._recomputeBrackets();const o=[];let g=0;for(const h of this._lastBracketsData){const m=h.brackets;m&&(o[g++]={range:m[0],options:h.options},o[g++]={range:m[1],options:h.options})}this._decorations.set(o)}_recomputeBrackets(){if(!this._editor.hasModel()||!this._editor.hasWidgetFocus()){this._lastBracketsData=[],this._lastVersionId=0;return}const o=this._editor.getSelections();if(o.length>100){this._lastBracketsData=[],this._lastVersionId=0;return}const g=this._editor.getModel(),h=g.getVersionId();let m=[];this._lastVersionId===h&&(m=this._lastBracketsData);const C=[];let w=0;for(let P=0,N=o.length;P1&&C.sort(E.Position.compare);const D=[];let I=0,T=0;const A=m.length;for(let P=0,N=C.length;Pthis.update(F))),this._lightBulbWidget=new E.Lazy(()=>{const F=this._editor.getContribution(n.LightBulbWidget.ID);return F&&this._register(F.onClick(q=>this.showCodeActionsFromLightbulb(q.actions,q))),F}),this._resolver=R.createInstance(a.CodeActionKeybindingResolver),this._register(this._editor.onDidLayoutChange(()=>this._actionWidgetService.hide()))}dispose(){this._disposed=!0,super.dispose()}async showCodeActionsFromLightbulb(P,N){if(P.allAIFixes&&P.validActions.length===1){const M=P.validActions[0],R=M.action.command;R&&R.id==="inlineChat.start"&&R.arguments&&R.arguments.length>=1&&(R.arguments[0]={...R.arguments[0],autoSend:!1}),await this._applyCodeAction(M,!1,!1,b.ApplyCodeActionReason.FromAILightbulb);return}await this.showCodeActionList(P,N,{includeDisabledActions:!1,fromLightbulb:!0})}showCodeActions(P,N,M){return this.showCodeActionList(N,M,{includeDisabledActions:!1,fromLightbulb:!1})}manualTriggerAtCurrentPosition(P,N,M,R){var x;if(!this._editor.hasModel())return;(x=t.MessageController.get(this._editor))===null||x===void 0||x.closeMessage();const O=this._editor.getPosition();this._trigger({type:1,triggerAction:N,filter:M,autoApply:R,context:{notAvailableMessage:P,position:O}})}_trigger(P){return this._model.trigger(P)}async _applyCodeAction(P,N,M,R){try{await this._instantiationService.invokeFunction(b.applyCodeAction,P,R,{preview:M,editor:this._editor})}finally{N&&this._trigger({type:2,triggerAction:C.CodeActionTriggerSource.QuickFix,filter:{}})}}async update(P){var N,M,R,x,O,B,W;if(P.type!==1){(N=this._lightBulbWidget.rawValue)===null||N===void 0||N.hide();return}let V;try{V=await P.actions}catch(K){(0,y.onUnexpectedError)(K);return}if(!this._disposed)if((M=this._lightBulbWidget.value)===null||M===void 0||M.update(V,P.trigger,P.position),P.trigger.type===1){if(!((R=P.trigger.filter)===null||R===void 0)&&R.include){const F=this.tryGetValidActionToApply(P.trigger,V);if(F){try{(x=this._lightBulbWidget.value)===null||x===void 0||x.hide(),await this._applyCodeAction(F,!1,!1,b.ApplyCodeActionReason.FromCodeActions)}finally{V.dispose()}return}if(P.trigger.context){const q=this.getInvalidActionThatWouldHaveBeenApplied(P.trigger,V);if(q&&q.action.disabled){(O=t.MessageController.get(this._editor))===null||O===void 0||O.showMessage(q.action.disabled,P.trigger.context.position),V.dispose();return}}}const K=!!(!((B=P.trigger.filter)===null||B===void 0)&&B.include);if(P.trigger.context&&(!V.allActions.length||!K&&!V.validActions.length)){(W=t.MessageController.get(this._editor))===null||W===void 0||W.showMessage(P.trigger.context.notAvailableMessage,P.trigger.context.position),this._activeCodeActions.value=V,V.dispose();return}this._activeCodeActions.value=V,this.showCodeActionList(V,this.toCoords(P.position),{includeDisabledActions:K,fromLightbulb:!1})}else this._actionWidgetService.isVisible?V.dispose():this._activeCodeActions.value=V}getInvalidActionThatWouldHaveBeenApplied(P,N){if(N.allActions.length&&(P.autoApply==="first"&&N.validActions.length===0||P.autoApply==="ifSingle"&&N.allActions.length===1))return N.allActions.find(({action:M})=>M.disabled)}tryGetValidActionToApply(P,N){if(N.validActions.length&&(P.autoApply==="first"&&N.validActions.length>0||P.autoApply==="ifSingle"&&N.validActions.length===1))return N.validActions[0]}async showCodeActionList(P,N,M){const R=this._editor.createDecorationsCollection(),x=this._editor.getDomNode();if(!x)return;const O=M.includeDisabledActions&&(this._showDisabled||P.validActions.length===0)?P.allActions:P.validActions;if(!O.length)return;const B=p.Position.isIPosition(N)?this.toCoords(N):N,W={onSelect:async(V,K)=>{this._applyCodeAction(V,!0,!!K,b.ApplyCodeActionReason.FromCodeActions),this._actionWidgetService.hide(),R.clear()},onHide:()=>{var V;(V=this._editor)===null||V===void 0||V.focus(),R.clear()},onHover:async(V,K)=>{var F;if(!K.isCancellationRequested)return{canPreview:!!(!((F=V.action.edit)===null||F===void 0)&&F.edits.length)}},onFocus:V=>{var K,F;if(V&&V.action){const q=V.action.ranges,ie=V.action.diagnostics;if(R.clear(),q&&q.length>0){const ae=q.map(ne=>({range:ne,options:D.DECORATION}));R.set(ae)}else if(ie&&ie.length>0){const ae=ie.map($=>({range:$,options:D.DECORATION}));R.set(ae);const ne=ie[0];if(ne.startLineNumber&&ne.startColumn){const $=(F=(K=this._editor.getModel())===null||K===void 0?void 0:K.getWordAtPosition({lineNumber:ne.startLineNumber,column:ne.startColumn}))===null||F===void 0?void 0:F.word;k.status((0,r.localize)(0,null,$,ne.startLineNumber,ne.startColumn))}}}else R.clear()}};this._actionWidgetService.show("codeActionWidget",!0,(0,i.toMenuItems)(O,this._shouldShowHeaders(),this._resolver.getResolver()),W,B,x,this._getActionBarActions(P,N,M))}toCoords(P){if(!this._editor.hasModel())return{x:0,y:0};this._editor.revealPosition(P,1),this._editor.render();const N=this._editor.getScrolledVisiblePosition(P),M=(0,L.getDomNodePagePosition)(this._editor.getDomNode()),R=M.left+N.left,x=M.top+N.top+N.height;return{x:R,y:x}}_shouldShowHeaders(){var P;const N=(P=this._editor)===null||P===void 0?void 0:P.getModel();return this._configurationService.getValue("editor.codeActionWidget.showHeaders",{resource:N?.uri})}_getActionBarActions(P,N,M){if(M.fromLightbulb)return[];const R=P.documentation.map(x=>{var O;return{id:x.id,label:x.title,tooltip:(O=x.tooltip)!==null&&O!==void 0?O:"",class:void 0,enabled:!0,run:()=>{var B;return this._commandService.executeCommand(x.id,...(B=x.arguments)!==null&&B!==void 0?B:[])}}});return M.includeDisabledActions&&P.validActions.length>0&&P.allActions.length!==P.validActions.length&&R.push(this._showDisabled?{id:"hideMoreActions",label:(0,r.localize)(1,null),enabled:!0,tooltip:"",class:void 0,run:()=>(this._showDisabled=!1,this.showCodeActionList(P,N,M))}:{id:"showMoreActions",label:(0,r.localize)(2,null),enabled:!0,tooltip:"",class:void 0,run:()=>(this._showDisabled=!0,this.showCodeActionList(P,N,M))}),R}};e.CodeActionController=T,T.ID="editor.contrib.codeActionController",T.DECORATION=_.ModelDecorationOptions.register({description:"quickfix-highlight",className:I}),e.CodeActionController=T=D=ke([ge(1,l.IMarkerService),ge(2,d.IContextKeyService),ge(3,s.IInstantiationService),ge(4,v.ILanguageFeaturesService),ge(5,o.IEditorProgressService),ge(6,f.ICommandService),ge(7,c.IConfigurationService),ge(8,u.IActionWidgetService),ge(9,s.IInstantiationService)],T),(0,m.registerThemingParticipant)((A,P)=>{((R,x)=>{x&&P.addRule(`.monaco-editor ${R} { background-color: ${x}; }`)})(".quickfix-edit-highlight",A.getColor(g.editorFindMatchHighlight));const M=A.getColor(g.editorFindMatchHighlightBorder);M&&P.addRule(`.monaco-editor .quickfix-edit-highlight { border: 1px ${(0,h.isHighContrast)(A.type)?"dotted":"solid"} ${M}; box-sizing: border-box; }`)})}),define(se[890],oe([1,0,11,16,21,140,655,15,116,260,360]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.AutoFixAction=e.FixAllAction=e.OrganizeImportsAction=e.SourceAction=e.RefactorAction=e.CodeActionCommand=e.QuickFixAction=void 0;function a(l){return p.ContextKeyExpr.regex(b.SUPPORTED_CODE_ACTIONS.keys()[0],new RegExp("(\\s|^)"+(0,L.escapeRegExpCharacters)(l.value)+"\\b"))}const i={type:"object",defaultSnippets:[{body:{kind:""}}],properties:{kind:{type:"string",description:S.localize(0,null)},apply:{type:"string",description:S.localize(1,null),default:"ifSingle",enum:["first","ifSingle","never"],enumDescriptions:[S.localize(2,null),S.localize(3,null),S.localize(4,null)]},preferred:{type:"boolean",default:!1,description:S.localize(5,null)}}};function n(l,o,g,h,m=_.CodeActionTriggerSource.Default){if(l.hasModel()){const C=v.CodeActionController.get(l);C?.manualTriggerAtCurrentPosition(o,m,g,h)}}class t extends k.EditorAction{constructor(){super({id:E.quickFixCommandId,label:S.localize(6,null),alias:"Quick Fix...",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:2137,weight:100}})}run(o,g){return n(g,S.localize(7,null),void 0,void 0,_.CodeActionTriggerSource.QuickFix)}}e.QuickFixAction=t;class r extends k.EditorCommand{constructor(){super({id:E.codeActionCommandId,precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),metadata:{description:"Trigger a code action",args:[{name:"args",schema:i}]}})}runEditorCommand(o,g,h){const m=_.CodeActionCommandArgs.fromUser(h,{kind:_.CodeActionKind.Empty,apply:"ifSingle"});return n(g,typeof h?.kind=="string"?m.preferred?S.localize(8,null,h.kind):S.localize(9,null,h.kind):m.preferred?S.localize(10,null):S.localize(11,null),{include:m.kind,includeSourceActions:!0,onlyIncludePreferredActions:m.preferred},m.apply)}}e.CodeActionCommand=r;class u extends k.EditorAction{constructor(){super({id:E.refactorCommandId,label:S.localize(12,null),alias:"Refactor...",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:3120,mac:{primary:1328},weight:100},contextMenuOpts:{group:"1_modification",order:2,when:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.Refactor))},metadata:{description:"Refactor...",args:[{name:"args",schema:i}]}})}run(o,g,h){const m=_.CodeActionCommandArgs.fromUser(h,{kind:_.CodeActionKind.Refactor,apply:"never"});return n(g,typeof h?.kind=="string"?m.preferred?S.localize(13,null,h.kind):S.localize(14,null,h.kind):m.preferred?S.localize(15,null):S.localize(16,null),{include:_.CodeActionKind.Refactor.contains(m.kind)?m.kind:_.CodeActionKind.None,onlyIncludePreferredActions:m.preferred},m.apply,_.CodeActionTriggerSource.Refactor)}}e.RefactorAction=u;class f extends k.EditorAction{constructor(){super({id:E.sourceActionCommandId,label:S.localize(17,null),alias:"Source Action...",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,y.EditorContextKeys.hasCodeActionsProvider),contextMenuOpts:{group:"1_modification",order:2.1,when:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.Source))},metadata:{description:"Source Action...",args:[{name:"args",schema:i}]}})}run(o,g,h){const m=_.CodeActionCommandArgs.fromUser(h,{kind:_.CodeActionKind.Source,apply:"never"});return n(g,typeof h?.kind=="string"?m.preferred?S.localize(18,null,h.kind):S.localize(19,null,h.kind):m.preferred?S.localize(20,null):S.localize(21,null),{include:_.CodeActionKind.Source.contains(m.kind)?m.kind:_.CodeActionKind.None,includeSourceActions:!0,onlyIncludePreferredActions:m.preferred},m.apply,_.CodeActionTriggerSource.SourceAction)}}e.SourceAction=f;class c extends k.EditorAction{constructor(){super({id:E.organizeImportsCommandId,label:S.localize(22,null),alias:"Organize Imports",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.SourceOrganizeImports)),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:1581,weight:100}})}run(o,g){return n(g,S.localize(23,null),{include:_.CodeActionKind.SourceOrganizeImports,includeSourceActions:!0},"ifSingle",_.CodeActionTriggerSource.OrganizeImports)}}e.OrganizeImportsAction=c;class d extends k.EditorAction{constructor(){super({id:E.fixAllCommandId,label:S.localize(24,null),alias:"Fix All",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.SourceFixAll))})}run(o,g){return n(g,S.localize(25,null),{include:_.CodeActionKind.SourceFixAll,includeSourceActions:!0},"ifSingle",_.CodeActionTriggerSource.FixAll)}}e.FixAllAction=d;class s extends k.EditorAction{constructor(){super({id:E.autoFixCommandId,label:S.localize(26,null),alias:"Auto Fix...",precondition:p.ContextKeyExpr.and(y.EditorContextKeys.writable,a(_.CodeActionKind.QuickFix)),kbOpts:{kbExpr:y.EditorContextKeys.textInputFocus,primary:1625,mac:{primary:2649},weight:100}})}run(o,g){return n(g,S.localize(27,null),{include:_.CodeActionKind.QuickFix,onlyIncludePreferredActions:!0},"ifSingle",_.CodeActionTriggerSource.AutoFix)}}e.AutoFixAction=s}),define(se[891],oe([1,0,16,246,890,260,361,656,98,37]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),(0,L.registerEditorContribution)(E.CodeActionController.ID,E.CodeActionController,3),(0,L.registerEditorContribution)(S.LightBulbWidget.ID,S.LightBulbWidget,4),(0,L.registerEditorAction)(y.QuickFixAction),(0,L.registerEditorAction)(y.RefactorAction),(0,L.registerEditorAction)(y.SourceAction),(0,L.registerEditorAction)(y.OrganizeImportsAction),(0,L.registerEditorAction)(y.AutoFixAction),(0,L.registerEditorAction)(y.FixAllAction),(0,L.registerEditorCommand)(new y.CodeActionCommand),v.Registry.as(_.Extensions.Configuration).registerConfiguration({...k.editorConfigurationBaseNode,properties:{"editor.codeActionWidget.showHeaders":{type:"boolean",scope:5,description:p.localize(0,null),default:!0}}}),v.Registry.as(_.Extensions.Configuration).registerConfiguration({...k.editorConfigurationBaseNode,properties:{"editor.codeActionWidget.includeNearbyQuickFixes":{type:"boolean",scope:5,description:p.localize(1,null),default:!0}}})}),define(se[892],oe([1,0,7,118,5,38,456]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.CodeLensWidget=e.CodeLensHelper=void 0;class S{constructor(i,n,t){this.afterColumn=1073741824,this.afterLineNumber=i,this.heightInPx=n,this._onHeight=t,this.suppressMouseDown=!0,this.domNode=document.createElement("div")}onComputedHeight(i){this._lastHeight===void 0?this._lastHeight=i:this._lastHeight!==i&&(this._lastHeight=i,this._onHeight())}isVisible(){return this._lastHeight!==0&&this.domNode.hasAttribute("monaco-visible-view-zone")}}class p{constructor(i,n){this.allowEditorOverflow=!1,this.suppressMouseDown=!0,this._commands=new Map,this._isEmpty=!0,this._editor=i,this._id=`codelens.widget-${p._idPool++}`,this.updatePosition(n),this._domNode=document.createElement("span"),this._domNode.className="codelens-decoration"}withCommands(i,n){this._commands.clear();const t=[];let r=!1;for(let u=0;u{s.symbol.command&&d.push(s.symbol),t.addDecoration({range:s.symbol.range,options:v},o=>this._decorationIds[l]=o),c?c=y.Range.plusRange(c,s.symbol.range):c=y.Range.lift(s.symbol.range)}),this._viewZone=new S(c.startLineNumber-1,u,f),this._viewZoneId=r.addZone(this._viewZone),d.length>0&&(this._createContentWidgetIfNecessary(),this._contentWidget.withCommands(d,!1))}_createContentWidgetIfNecessary(){this._contentWidget?this._editor.layoutContentWidget(this._contentWidget):(this._contentWidget=new p(this._editor,this._viewZone.afterLineNumber+1),this._editor.addContentWidget(this._contentWidget))}dispose(i,n){this._decorationIds.forEach(i.removeDecoration,i),this._decorationIds=[],n?.removeZone(this._viewZoneId),this._contentWidget&&(this._editor.removeContentWidget(this._contentWidget),this._contentWidget=void 0),this._isDisposed=!0}isDisposed(){return this._isDisposed}isValid(){return this._decorationIds.some((i,n)=>{const t=this._editor.getModel().getDecorationRange(i),r=this._data[n].symbol;return!!(t&&y.Range.isEmpty(r.range)===t.isEmpty())})}updateCodeLensSymbols(i,n){this._decorationIds.forEach(n.removeDecoration,n),this._decorationIds=[],this._data=i,this._data.forEach((t,r)=>{n.addDecoration({range:t.symbol.range,options:v},u=>this._decorationIds[r]=u)})}updateHeight(i,n){this._viewZone.heightInPx=i,n.layoutZone(this._viewZoneId),this._contentWidget&&this._editor.layoutContentWidget(this._contentWidget)}computeIfNecessary(i){if(!this._viewZone.isVisible())return null;for(let n=0;nthis._resolveCodeLensesInViewport(),this._resolveCodeLensesDebounce.default()),this._disposables.add(this._editor.onDidChangeModel(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>this._onModelChange())),this._disposables.add(this._editor.onDidChangeConfiguration(C=>{(C.hasChanged(50)||C.hasChanged(19)||C.hasChanged(18))&&this._updateLensStyle(),C.hasChanged(17)&&this._onModelChange()})),this._disposables.add(l.codeLensProvider.onDidChange(this._onModelChange,this)),this._onModelChange(),this._updateLensStyle()}dispose(){var s;this._localDispose(),this._disposables.dispose(),this._oldCodeLensModels.dispose(),(s=this._currentCodeLensModel)===null||s===void 0||s.dispose()}_getLayoutInfo(){const s=Math.max(1.3,this._editor.getOption(66)/this._editor.getOption(52));let l=this._editor.getOption(19);return(!l||l<5)&&(l=this._editor.getOption(52)*.9|0),{fontSize:l,codeLensHeight:l*s|0}}_updateLensStyle(){const{codeLensHeight:s,fontSize:l}=this._getLayoutInfo(),o=this._editor.getOption(18),g=this._editor.getOption(50),{style:h}=this._editor.getContainerDomNode();h.setProperty("--vscode-editorCodeLens-lineHeight",`${s}px`),h.setProperty("--vscode-editorCodeLens-fontSize",`${l}px`),h.setProperty("--vscode-editorCodeLens-fontFeatureSettings",g.fontFeatureSettings),o&&(h.setProperty("--vscode-editorCodeLens-fontFamily",o),h.setProperty("--vscode-editorCodeLens-fontFamilyDefault",p.EDITOR_FONT_DEFAULTS.fontFamily)),this._editor.changeViewZones(m=>{for(const C of this._lenses)C.updateHeight(s,m)})}_localDispose(){var s,l,o;(s=this._getCodeLensModelPromise)===null||s===void 0||s.cancel(),this._getCodeLensModelPromise=void 0,(l=this._resolveCodeLensesPromise)===null||l===void 0||l.cancel(),this._resolveCodeLensesPromise=void 0,this._localToDispose.clear(),this._oldCodeLensModels.clear(),(o=this._currentCodeLensModel)===null||o===void 0||o.dispose()}_onModelChange(){this._localDispose();const s=this._editor.getModel();if(!s||!this._editor.getOption(17)||s.isTooLargeForTokenization())return;const l=this._codeLensCache.get(s);if(l&&this._renderCodeLensSymbols(l),!this._languageFeaturesService.codeLensProvider.has(s)){l&&(0,L.disposableTimeout)(()=>{const g=this._codeLensCache.get(s);l===g&&(this._codeLensCache.delete(s),this._onModelChange())},30*1e3,this._localToDispose);return}for(const g of this._languageFeaturesService.codeLensProvider.all(s))if(typeof g.onDidChange=="function"){const h=g.onDidChange(()=>o.schedule());this._localToDispose.add(h)}const o=new L.RunOnceScheduler(()=>{var g;const h=Date.now();(g=this._getCodeLensModelPromise)===null||g===void 0||g.cancel(),this._getCodeLensModelPromise=(0,L.createCancelablePromise)(m=>(0,v.getCodeLensModel)(this._languageFeaturesService.codeLensProvider,s,m)),this._getCodeLensModelPromise.then(m=>{this._currentCodeLensModel&&this._oldCodeLensModels.add(this._currentCodeLensModel),this._currentCodeLensModel=m,this._codeLensCache.put(s,m);const C=this._provideCodeLensDebounce.update(s,Date.now()-h);o.delay=C,this._renderCodeLensSymbols(m),this._resolveCodeLensesInViewportSoon()},k.onUnexpectedError)},this._provideCodeLensDebounce.get(s));this._localToDispose.add(o),this._localToDispose.add((0,y.toDisposable)(()=>this._resolveCodeLensesScheduler.cancel())),this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{var g;this._editor.changeDecorations(h=>{this._editor.changeViewZones(m=>{const C=[];let w=-1;this._lenses.forEach(I=>{!I.isValid()||w===I.getLineNumber()?C.push(I):(I.update(m),w=I.getLineNumber())});const D=new a.CodeLensHelper;C.forEach(I=>{I.dispose(D,m),this._lenses.splice(this._lenses.indexOf(I),1)}),D.commit(h)})}),o.schedule(),this._resolveCodeLensesScheduler.cancel(),(g=this._resolveCodeLensesPromise)===null||g===void 0||g.cancel(),this._resolveCodeLensesPromise=void 0})),this._localToDispose.add(this._editor.onDidFocusEditorWidget(()=>{o.schedule()})),this._localToDispose.add(this._editor.onDidBlurEditorText(()=>{o.cancel()})),this._localToDispose.add(this._editor.onDidScrollChange(g=>{g.scrollTopChanged&&this._lenses.length>0&&this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add(this._editor.onDidLayoutChange(()=>{this._resolveCodeLensesInViewportSoon()})),this._localToDispose.add((0,y.toDisposable)(()=>{if(this._editor.getModel()){const g=E.StableEditorScrollState.capture(this._editor);this._editor.changeDecorations(h=>{this._editor.changeViewZones(m=>{this._disposeAllLenses(h,m)})}),g.restore(this._editor)}else this._disposeAllLenses(void 0,void 0)})),this._localToDispose.add(this._editor.onMouseDown(g=>{if(g.target.type!==9)return;let h=g.target.element;if(h?.tagName==="SPAN"&&(h=h.parentElement),h?.tagName==="A")for(const m of this._lenses){const C=m.getCommand(h);if(C){this._commandService.executeCommand(C.id,...C.arguments||[]).catch(w=>this._notificationService.error(w));break}}})),o.schedule()}_disposeAllLenses(s,l){const o=new a.CodeLensHelper;for(const g of this._lenses)g.dispose(o,l);s&&o.commit(s),this._lenses.length=0}_renderCodeLensSymbols(s){if(!this._editor.hasModel())return;const l=this._editor.getModel().getLineCount(),o=[];let g;for(const C of s.lenses){const w=C.symbol.range.startLineNumber;w<1||w>l||(g&&g[g.length-1].symbol.range.startLineNumber===w?g.push(C):(g=[C],o.push(g)))}if(!o.length&&!this._lenses.length)return;const h=E.StableEditorScrollState.capture(this._editor),m=this._getLayoutInfo();this._editor.changeDecorations(C=>{this._editor.changeViewZones(w=>{const D=new a.CodeLensHelper;let I=0,T=0;for(;Tthis._resolveCodeLensesInViewportSoon())),I++,T++)}for(;Ithis._resolveCodeLensesInViewportSoon())),T++;D.commit(C)})}),h.restore(this._editor)}_resolveCodeLensesInViewportSoon(){this._editor.getModel()&&this._resolveCodeLensesScheduler.schedule()}_resolveCodeLensesInViewport(){var s;(s=this._resolveCodeLensesPromise)===null||s===void 0||s.cancel(),this._resolveCodeLensesPromise=void 0;const l=this._editor.getModel();if(!l)return;const o=[],g=[];if(this._lenses.forEach(C=>{const w=C.computeIfNecessary(l);w&&(o.push(w),g.push(C))}),o.length===0)return;const h=Date.now(),m=(0,L.createCancelablePromise)(C=>{const w=o.map((D,I)=>{const T=new Array(D.length),A=D.map((P,N)=>!P.symbol.command&&typeof P.provider.resolveCodeLens=="function"?Promise.resolve(P.provider.resolveCodeLens(l,P.symbol,C)).then(M=>{T[N]=M},k.onUnexpectedExternalError):(T[N]=P.symbol,Promise.resolve(void 0)));return Promise.all(A).then(()=>{!C.isCancellationRequested&&!g[I].isDisposed()&&g[I].updateCommands(T)})});return Promise.all(w)});this._resolveCodeLensesPromise=m,this._resolveCodeLensesPromise.then(()=>{const C=this._resolveCodeLensesDebounce.update(l,Date.now()-h);this._resolveCodeLensesScheduler.delay=C,this._currentCodeLensModel&&this._codeLensCache.put(l,this._currentCodeLensModel),this._oldCodeLensModels.clear(),m===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)},C=>{(0,k.onUnexpectedError)(C),m===this._resolveCodeLensesPromise&&(this._resolveCodeLensesPromise=void 0)})}async getModel(){var s;return await this._getCodeLensModelPromise,await this._resolveCodeLensesPromise,!((s=this._currentCodeLensModel)===null||s===void 0)&&s.isDisposed?void 0:this._currentCodeLensModel}};e.CodeLensContribution=c,c.ID="css.editor.codeLens",e.CodeLensContribution=c=ke([ge(1,f.ILanguageFeaturesService),ge(2,u.ILanguageFeatureDebounceService),ge(3,n.ICommandService),ge(4,t.INotificationService),ge(5,b.ICodeLensCache)],c),(0,S.registerEditorContribution)(c.ID,c,1),(0,S.registerEditorAction)(class extends S.EditorAction{constructor(){super({id:"codelens.showLensesInCurrentLine",precondition:_.EditorContextKeys.hasCodeLensProvider,label:(0,i.localize)(0,null),alias:"Show CodeLens Commands For Current Line"})}async run(s,l){if(!l.hasModel())return;const o=s.get(r.IQuickInputService),g=s.get(n.ICommandService),h=s.get(t.INotificationService),m=l.getSelection().positionLineNumber,C=l.getContribution(c.ID);if(!C)return;const w=await C.getModel();if(!w)return;const D=[];for(const A of w.lenses)A.symbol.command&&A.symbol.range.startLineNumber===m&&D.push({label:A.symbol.command.title,command:A.symbol.command});if(D.length===0)return;const I=await o.pick(D,{canPickMany:!1,placeHolder:(0,i.localize)(1,null)});if(!I)return;let T=I.command;if(w.isDisposed){const A=await C.getModel(),P=A?.lenses.find(N=>{var M;return N.symbol.range.startLineNumber===m&&((M=N.symbol.command)===null||M===void 0?void 0:M.title)===T.title});if(!P||!P.symbol.command)return;T=P.symbol.command}try{await g.executeCommand(T.id,...T.arguments||[])}catch(A){h.error(A)}}})}),define(se[375],oe([1,0,14,39,12,6,2,61,11,167,16,5,38,79,18,354,27]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";var f;Object.defineProperty(e,"__esModule",{value:!0}),e.DecoratorLimitReporter=e.ColorDetector=e.ColorDecorationInjectedTextMarker=void 0,e.ColorDecorationInjectedTextMarker=Object.create({});let c=f=class extends S.Disposable{constructor(l,o,g,h){super(),this._editor=l,this._configurationService=o,this._languageFeaturesService=g,this._localToDispose=this._register(new S.DisposableStore),this._decorationsIds=[],this._colorDatas=new Map,this._colorDecoratorIds=this._editor.createDecorationsCollection(),this._ruleFactory=new v.DynamicCssRules(this._editor),this._decoratorLimitReporter=new d,this._colorDecorationClassRefs=this._register(new S.DisposableStore),this._debounceInformation=h.for(g.colorProvider,"Document Colors",{min:f.RECOMPUTE_TIME}),this._register(l.onDidChangeModel(()=>{this._isColorDecoratorsEnabled=this.isEnabled(),this.updateColors()})),this._register(l.onDidChangeModelLanguage(()=>this.updateColors())),this._register(g.colorProvider.onDidChange(()=>this.updateColors())),this._register(l.onDidChangeConfiguration(m=>{const C=this._isColorDecoratorsEnabled;this._isColorDecoratorsEnabled=this.isEnabled(),this._isDefaultColorDecoratorsEnabled=this._editor.getOption(145);const w=C!==this._isColorDecoratorsEnabled||m.hasChanged(21),D=m.hasChanged(145);(w||D)&&(this._isColorDecoratorsEnabled?this.updateColors():this.removeAllDecorations())})),this._timeoutTimer=null,this._computePromise=null,this._isColorDecoratorsEnabled=this.isEnabled(),this._isDefaultColorDecoratorsEnabled=this._editor.getOption(145),this.updateColors()}isEnabled(){const l=this._editor.getModel();if(!l)return!1;const o=l.getLanguageId(),g=this._configurationService.getValue(o);if(g&&typeof g=="object"){const h=g.colorDecorators;if(h&&h.enable!==void 0&&!h.enable)return h.enable}return this._editor.getOption(20)}static get(l){return l.getContribution(this.ID)}dispose(){this.stop(),this.removeAllDecorations(),super.dispose()}updateColors(){if(this.stop(),!this._isColorDecoratorsEnabled)return;const l=this._editor.getModel();!l||!this._languageFeaturesService.colorProvider.has(l)||(this._localToDispose.add(this._editor.onDidChangeModelContent(()=>{this._timeoutTimer||(this._timeoutTimer=new L.TimeoutTimer,this._timeoutTimer.cancelAndSet(()=>{this._timeoutTimer=null,this.beginCompute()},this._debounceInformation.get(l)))})),this.beginCompute())}async beginCompute(){this._computePromise=(0,L.createCancelablePromise)(async l=>{const o=this._editor.getModel();if(!o)return[];const g=new p.StopWatch(!1),h=await(0,r.getColors)(this._languageFeaturesService.colorProvider,o,l,this._isDefaultColorDecoratorsEnabled);return this._debounceInformation.update(o,g.elapsed()),h});try{const l=await this._computePromise;this.updateDecorations(l),this.updateColorDecorators(l),this._computePromise=null}catch(l){(0,y.onUnexpectedError)(l)}}stop(){this._timeoutTimer&&(this._timeoutTimer.cancel(),this._timeoutTimer=null),this._computePromise&&(this._computePromise.cancel(),this._computePromise=null),this._localToDispose.clear()}updateDecorations(l){const o=l.map(g=>({range:{startLineNumber:g.colorInfo.range.startLineNumber,startColumn:g.colorInfo.range.startColumn,endLineNumber:g.colorInfo.range.endLineNumber,endColumn:g.colorInfo.range.endColumn},options:i.ModelDecorationOptions.EMPTY}));this._editor.changeDecorations(g=>{this._decorationsIds=g.deltaDecorations(this._decorationsIds,o),this._colorDatas=new Map,this._decorationsIds.forEach((h,m)=>this._colorDatas.set(h,l[m]))})}updateColorDecorators(l){this._colorDecorationClassRefs.clear();const o=[],g=this._editor.getOption(21);for(let m=0;mthis._colorDatas.has(h.id));return g.length===0?null:this._colorDatas.get(g[0].id)}isColorDecoration(l){return this._colorDecoratorIds.has(l)}};e.ColorDetector=c,c.ID="editor.contrib.colorDetector",c.RECOMPUTE_TIME=1e3,e.ColorDetector=c=f=ke([ge(1,u.IConfigurationService),ge(2,t.ILanguageFeaturesService),ge(3,n.ILanguageFeatureDebounceService)],c);class d{constructor(){this._onDidChange=new E.Emitter,this._computed=0,this._limited=!1}update(l,o){(l!==this._computed||o!==this._limited)&&(this._computed=l,this._limited=o,this._onDidChange.fire())}}e.DecoratorLimitReporter=d,(0,b.registerEditorContribution)(c.ID,c,1)}),define(se[376],oe([1,0,14,19,39,2,5,354,375,553,842,23,7]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneColorPickerParticipant=e.StandaloneColorPickerHover=e.ColorHoverParticipant=e.ColorHover=void 0;class n{constructor(o,g,h,m){this.owner=o,this.range=g,this.model=h,this.provider=m,this.forceShowAtRange=!0}isValidForHoverAnchor(o){return o.type===1&&this.range.startColumn<=o.range.startColumn&&this.range.endColumn>=o.range.endColumn}}e.ColorHover=n;let t=class{constructor(o,g){this._editor=o,this._themeService=g,this.hoverOrdinal=2}computeSync(o,g){return[]}computeAsync(o,g,h){return L.AsyncIterableObject.fromPromise(this._computeAsync(o,g,h))}async _computeAsync(o,g,h){if(!this._editor.hasModel())return[];const m=_.ColorDetector.get(this._editor);if(!m)return[];for(const C of g){if(!m.isColorDecoration(C))continue;const w=m.getColorData(C.range.getStartPosition());if(w)return[await f(this,this._editor.getModel(),w.colorInfo,w.provider)]}return[]}renderHoverParts(o,g){return c(this,this._editor,this._themeService,g,o)}};e.ColorHoverParticipant=t,e.ColorHoverParticipant=t=ke([ge(1,a.IThemeService)],t);class r{constructor(o,g,h,m){this.owner=o,this.range=g,this.model=h,this.provider=m}}e.StandaloneColorPickerHover=r;let u=class{constructor(o,g){this._editor=o,this._themeService=g,this._color=null}async createColorHover(o,g,h){if(!this._editor.hasModel()||!_.ColorDetector.get(this._editor))return null;const C=await(0,p.getColors)(h,this._editor.getModel(),k.CancellationToken.None);let w=null,D=null;for(const P of C){const N=P.colorInfo;S.Range.containsRange(N.range,o.range)&&(w=N,D=P.provider)}const I=w??o,T=D??g,A=!!w;return{colorHover:await f(this,this._editor.getModel(),I,T),foundInEditor:A}}async updateEditorModel(o){if(!this._editor.hasModel())return;const g=o.model;let h=new S.Range(o.range.startLineNumber,o.range.startColumn,o.range.endLineNumber,o.range.endColumn);this._color&&(await s(this._editor.getModel(),g,this._color,h,o),h=d(this._editor,h,g))}renderHoverParts(o,g){return c(this,this._editor,this._themeService,g,o)}set color(o){this._color=o}get color(){return this._color}};e.StandaloneColorPickerParticipant=u,e.StandaloneColorPickerParticipant=u=ke([ge(1,a.IThemeService)],u);async function f(l,o,g,h){const m=o.getValueInRange(g.range),{red:C,green:w,blue:D,alpha:I}=g.color,T=new y.RGBA(Math.round(C*255),Math.round(w*255),Math.round(D*255),I),A=new y.Color(T),P=await(0,p.getColorPresentations)(o,g,h,k.CancellationToken.None),N=new v.ColorPickerModel(A,[],0);return N.colorPresentations=P||[],N.guessColorPresentation(A,m),l instanceof t?new n(l,S.Range.lift(g.range),N,h):new r(l,S.Range.lift(g.range),N,h)}function c(l,o,g,h,m){if(h.length===0||!o.hasModel())return E.Disposable.None;if(m.setMinimumDimensions){const N=o.getOption(66)+8;m.setMinimumDimensions(new i.Dimension(302,N))}const C=new E.DisposableStore,w=h[0],D=o.getModel(),I=w.model,T=C.add(new b.ColorPickerWidget(m.fragment,I,o.getOption(141),g,l instanceof u));m.setColorPicker(T);let A=!1,P=new S.Range(w.range.startLineNumber,w.range.startColumn,w.range.endLineNumber,w.range.endColumn);if(l instanceof u){const N=h[0].model.color;l.color=N,s(D,I,N,P,w),C.add(I.onColorFlushed(M=>{l.color=M}))}else C.add(I.onColorFlushed(async N=>{await s(D,I,N,P,w),A=!0,P=d(o,P,I)}));return C.add(I.onDidChangeColor(N=>{s(D,I,N,P,w)})),C.add(o.onDidChangeModelContent(N=>{A?A=!1:(m.hide(),o.focus())})),C}function d(l,o,g){var h,m;const C=[],w=(h=g.presentation.textEdit)!==null&&h!==void 0?h:{range:o,text:g.presentation.label,forceMoveMarkers:!1};C.push(w),g.presentation.additionalTextEdits&&C.push(...g.presentation.additionalTextEdits);const D=S.Range.lift(w.range),I=l.getModel()._setTrackedRange(null,D,3);return l.executeEdits("colorpicker",C),l.pushUndoStop(),(m=l.getModel()._getTrackedRange(I))!==null&&m!==void 0?m:D}async function s(l,o,g,h,m){const C=await(0,p.getColorPresentations)(l,{range:h,color:{red:g.rgba.r/255,green:g.rgba.g/255,blue:g.rgba.b/255,alpha:g.rgba.a}},m.provider,k.CancellationToken.None);o.colorPresentations=C||[]}}),define(se[894],oe([1,0,2,17,16,10,5,24,38,555,457]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DragAndDropController=void 0;function b(i){return k.isMacintosh?i.altKey:i.ctrlKey}class a extends L.Disposable{constructor(n){super(),this._editor=n,this._dndDecorationIds=this._editor.createDecorationsCollection(),this._register(this._editor.onMouseDown(t=>this._onEditorMouseDown(t))),this._register(this._editor.onMouseUp(t=>this._onEditorMouseUp(t))),this._register(this._editor.onMouseDrag(t=>this._onEditorMouseDrag(t))),this._register(this._editor.onMouseDrop(t=>this._onEditorMouseDrop(t))),this._register(this._editor.onMouseDropCanceled(()=>this._onEditorMouseDropCanceled())),this._register(this._editor.onKeyDown(t=>this.onEditorKeyDown(t))),this._register(this._editor.onKeyUp(t=>this.onEditorKeyUp(t))),this._register(this._editor.onDidBlurEditorWidget(()=>this.onEditorBlur())),this._register(this._editor.onDidBlurEditorText(()=>this.onEditorBlur())),this._mouseDown=!1,this._modifierPressed=!1,this._dragSelection=null}onEditorBlur(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1}onEditorKeyDown(n){!this._editor.getOption(35)||this._editor.getOption(22)||(b(n)&&(this._modifierPressed=!0),this._mouseDown&&b(n)&&this._editor.updateOptions({mouseStyle:"copy"}))}onEditorKeyUp(n){!this._editor.getOption(35)||this._editor.getOption(22)||(b(n)&&(this._modifierPressed=!1),this._mouseDown&&n.keyCode===a.TRIGGER_KEY_VALUE&&this._editor.updateOptions({mouseStyle:"default"}))}_onEditorMouseDown(n){this._mouseDown=!0}_onEditorMouseUp(n){this._mouseDown=!1,this._editor.updateOptions({mouseStyle:"text"})}_onEditorMouseDrag(n){const t=n.target;if(this._dragSelection===null){const u=(this._editor.getSelections()||[]).filter(f=>t.position&&f.containsPosition(t.position));if(u.length===1)this._dragSelection=u[0];else return}b(n.event)?this._editor.updateOptions({mouseStyle:"copy"}):this._editor.updateOptions({mouseStyle:"default"}),t.position&&(this._dragSelection.containsPosition(t.position)?this._removeDecoration():this.showAt(t.position))}_onEditorMouseDropCanceled(){this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}_onEditorMouseDrop(n){if(n.target&&(this._hitContent(n.target)||this._hitMargin(n.target))&&n.target.position){const t=new E.Position(n.target.position.lineNumber,n.target.position.column);if(this._dragSelection===null){let r=null;if(n.event.shiftKey){const u=this._editor.getSelection();if(u){const{selectionStartLineNumber:f,selectionStartColumn:c}=u;r=[new p.Selection(f,c,t.lineNumber,t.column)]}}else r=(this._editor.getSelections()||[]).map(u=>u.containsPosition(t)?new p.Selection(t.lineNumber,t.column,t.lineNumber,t.column):u);this._editor.setSelections(r||[],"mouse",3)}else(!this._dragSelection.containsPosition(t)||(b(n.event)||this._modifierPressed)&&(this._dragSelection.getEndPosition().equals(t)||this._dragSelection.getStartPosition().equals(t)))&&(this._editor.pushUndoStop(),this._editor.executeCommand(a.ID,new v.DragAndDropCommand(this._dragSelection,t,b(n.event)||this._modifierPressed)),this._editor.pushUndoStop())}this._editor.updateOptions({mouseStyle:"text"}),this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1}showAt(n){this._dndDecorationIds.set([{range:new S.Range(n.lineNumber,n.column,n.lineNumber,n.column),options:a._DECORATION_OPTIONS}]),this._editor.revealPosition(n,1)}_removeDecoration(){this._dndDecorationIds.clear()}_hitContent(n){return n.type===6||n.type===7}_hitMargin(n){return n.type===2||n.type===3||n.type===4}dispose(){this._removeDecoration(),this._dragSelection=null,this._mouseDown=!1,this._modifierPressed=!1,super.dispose()}}e.DragAndDropController=a,a.ID="editor.contrib.dragAndDrop",a.TRIGGER_KEY_VALUE=k.isMacintosh?6:5,a._DECORATION_OPTIONS=_.ModelDecorationOptions.register({description:"dnd-target",className:"dnd-target"}),(0,y.registerEditorContribution)(a.ID,a,2)}),define(se[895],oe([1,0,5,41,38,29,23]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FindDecorations=void 0;class p{constructor(v){this._editor=v,this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null,this._startPosition=this._editor.getPosition()}dispose(){this._editor.removeDecorations(this._allDecorations()),this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}reset(){this._decorations=[],this._overviewRulerApproximateDecorations=[],this._findScopeDecorationIds=[],this._rangeHighlightDecorationId=null,this._highlightedDecorationId=null}getCount(){return this._decorations.length}getFindScope(){return this._findScopeDecorationIds[0]?this._editor.getModel().getDecorationRange(this._findScopeDecorationIds[0]):null}getFindScopes(){if(this._findScopeDecorationIds.length){const v=this._findScopeDecorationIds.map(b=>this._editor.getModel().getDecorationRange(b)).filter(b=>!!b);if(v.length)return v}return null}getStartPosition(){return this._startPosition}setStartPosition(v){this._startPosition=v,this.setCurrentFindMatch(null)}_getDecorationIndex(v){const b=this._decorations.indexOf(v);return b>=0?b+1:1}getDecorationRangeAt(v){const b=v{if(this._highlightedDecorationId!==null&&(i.changeDecorationOptions(this._highlightedDecorationId,p._FIND_MATCH_DECORATION),this._highlightedDecorationId=null),b!==null&&(this._highlightedDecorationId=b,i.changeDecorationOptions(this._highlightedDecorationId,p._CURRENT_FIND_MATCH_DECORATION)),this._rangeHighlightDecorationId!==null&&(i.removeDecoration(this._rangeHighlightDecorationId),this._rangeHighlightDecorationId=null),b!==null){let n=this._editor.getModel().getDecorationRange(b);if(n.startLineNumber!==n.endLineNumber&&n.endColumn===1){const t=n.endLineNumber-1,r=this._editor.getModel().getLineMaxColumn(t);n=new L.Range(n.startLineNumber,n.startColumn,t,r)}this._rangeHighlightDecorationId=i.addDecoration(n,p._RANGE_HIGHLIGHT_DECORATION)}}),a}set(v,b){this._editor.changeDecorations(a=>{let i=p._FIND_MATCH_DECORATION;const n=[];if(v.length>1e3){i=p._FIND_MATCH_NO_OVERVIEW_DECORATION;const r=this._editor.getModel().getLineCount(),f=this._editor.getLayoutInfo().height/r,c=Math.max(2,Math.ceil(3/f));let d=v[0].range.startLineNumber,s=v[0].range.endLineNumber;for(let l=1,o=v.length;l=g.startLineNumber?g.endLineNumber>s&&(s=g.endLineNumber):(n.push({range:new L.Range(d,1,s,1),options:p._FIND_MATCH_ONLY_OVERVIEW_DECORATION}),d=g.startLineNumber,s=g.endLineNumber)}n.push({range:new L.Range(d,1,s,1),options:p._FIND_MATCH_ONLY_OVERVIEW_DECORATION})}const t=new Array(v.length);for(let r=0,u=v.length;ra.removeDecoration(r)),this._findScopeDecorationIds=[]),b?.length&&(this._findScopeDecorationIds=b.map(r=>a.addDecoration(r,p._FIND_SCOPE_DECORATION)))})}matchBeforePosition(v){if(this._decorations.length===0)return null;for(let b=this._decorations.length-1;b>=0;b--){const a=this._decorations[b],i=this._editor.getModel().getDecorationRange(a);if(!(!i||i.endLineNumber>v.lineNumber)){if(i.endLineNumberv.column))return i}}return this._editor.getModel().getDecorationRange(this._decorations[this._decorations.length-1])}matchAfterPosition(v){if(this._decorations.length===0)return null;for(let b=0,a=this._decorations.length;bv.lineNumber)return n;if(!(n.startColumnthis.research(!1),100),this._toDispose.add(this._updateDecorationsScheduler),this._toDispose.add(this._editor.onDidChangeCursorPosition(d=>{(d.reason===3||d.reason===5||d.reason===6)&&this._decorations.setStartPosition(this._editor.getPosition())})),this._ignoreModelContentChanged=!1,this._toDispose.add(this._editor.onDidChangeModelContent(d=>{this._ignoreModelContentChanged||(d.isFlush&&this._decorations.reset(),this._decorations.setStartPosition(this._editor.getPosition()),this._updateDecorationsScheduler.schedule())})),this._toDispose.add(this._state.onFindReplaceStateChange(d=>this._onStateChanged(d))),this.research(!1,this._state.searchScope)}dispose(){this._isDisposed=!0,(0,y.dispose)(this._startSearchingTimer),this._toDispose.dispose()}_onStateChanged(f){this._isDisposed||this._editor.hasModel()&&(f.searchString||f.isReplaceRevealed||f.isRegex||f.wholeWord||f.matchCase||f.searchScope)&&(this._editor.getModel().isTooLargeForSyncing()?(this._startSearchingTimer.cancel(),this._startSearchingTimer.setIfNotSet(()=>{f.searchScope?this.research(f.moveCursor,this._state.searchScope):this.research(f.moveCursor)},t)):f.searchScope?this.research(f.moveCursor,this._state.searchScope):this.research(f.moveCursor))}static _getSearchRange(f,c){return c||f.getFullModelRange()}research(f,c){let d=null;typeof c<"u"?c!==null&&(Array.isArray(c)?d=c:d=[c]):d=this._decorations.getFindScopes(),d!==null&&(d=d.map(g=>{if(g.startLineNumber!==g.endLineNumber){let h=g.endLineNumber;return g.endColumn===1&&(h=h-1),new p.Range(g.startLineNumber,1,h,this._editor.getModel().getLineMaxColumn(h))}return g}));const s=this._findMatches(d,!1,e.MATCHES_LIMIT);this._decorations.set(s,d);const l=this._editor.getSelection();let o=this._decorations.getCurrentMatchesPosition(l);if(o===0&&s.length>0){const g=(0,L.findFirstIdxMonotonousOrArrLen)(s.map(h=>h.range),h=>p.Range.compareRangesUsingStarts(h,l)>=0);o=g>0?g-1+1:o}this._state.changeMatchInfo(o,this._decorations.getCount(),void 0),f&&this._editor.getOption(41).cursorMoveOnType&&this._moveToNextMatch(this._decorations.getStartPosition())}_hasMatches(){return this._state.matchesCount>0}_cannotFind(){if(!this._hasMatches()){const f=this._decorations.getFindScope();return f&&this._editor.revealRangeInCenterIfOutsideViewport(f,0),!0}return!1}_setCurrentFindMatch(f){const c=this._decorations.setCurrentFindMatch(f);this._state.changeMatchInfo(c,this._decorations.getCount(),f),this._editor.setSelection(f),this._editor.revealRangeInCenterIfOutsideViewport(f,0)}_prevSearchPosition(f){const c=this._state.isRegex&&(this._state.searchString.indexOf("^")>=0||this._state.searchString.indexOf("$")>=0);let{lineNumber:d,column:s}=f;const l=this._editor.getModel();return c||s===1?(d===1?d=l.getLineCount():d--,s=l.getLineMaxColumn(d)):s--,new S.Position(d,s)}_moveToPrevMatch(f,c=!1){if(!this._state.canNavigateBack()){const C=this._decorations.matchAfterPosition(f);C&&this._setCurrentFindMatch(C);return}if(this._decorations.getCount()=0||this._state.searchString.indexOf("$")>=0);let{lineNumber:d,column:s}=f;const l=this._editor.getModel();return c||s===l.getLineMaxColumn(d)?(d===l.getLineCount()?d=1:d++,s=1):s++,new S.Position(d,s)}_moveToNextMatch(f){if(!this._state.canNavigateForward()){const d=this._decorations.matchBeforePosition(f);d&&this._setCurrentFindMatch(d);return}if(this._decorations.getCount()r._getSearchRange(this._editor.getModel(),l));return this._editor.getModel().findMatches(this._state.searchString,s,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null,c,d)}replaceAll(){if(!this._hasMatches())return;const f=this._decorations.getFindScopes();f===null&&this._state.matchesCount>=e.MATCHES_LIMIT?this._largeReplaceAll():this._regularReplaceAll(f),this.research(!1)}_largeReplaceAll(){const c=new v.SearchParams(this._state.searchString,this._state.isRegex,this._state.matchCase,this._state.wholeWord?this._editor.getOption(129):null).parseSearchRequest();if(!c)return;let d=c.regex;if(!d.multiline){let w="mu";d.ignoreCase&&(w+="i"),d.global&&(w+="g"),d=new RegExp(d.source,w)}const s=this._editor.getModel(),l=s.getValue(1),o=s.getFullModelRange(),g=this._getReplacePattern();let h;const m=this._state.preserveCase;g.hasReplacementPatterns||m?h=l.replace(d,function(){return g.buildReplaceString(arguments,m)}):h=l.replace(d,g.buildReplaceString(null,m));const C=new E.ReplaceCommandThatPreservesSelection(o,h,this._editor.getSelection());this._executeEditorCommand("replaceAll",C)}_regularReplaceAll(f){const c=this._getReplacePattern(),d=this._findMatches(f,c.hasReplacementPatterns||this._state.preserveCase,1073741824),s=[];for(let o=0,g=d.length;oo.range),s);this._executeEditorCommand("replaceAll",l)}selectAllMatches(){if(!this._hasMatches())return;const f=this._decorations.getFindScopes();let d=this._findMatches(f,!1,1073741824).map(l=>new _.Selection(l.range.startLineNumber,l.range.startColumn,l.range.endLineNumber,l.range.endColumn));const s=this._editor.getSelection();for(let l=0,o=d.length;lthis._hide(),2e3)),this._isVisible=!1,this._editor=b,this._state=a,this._keybindingService=i,this._domNode=document.createElement("div"),this._domNode.className="findOptionsWidget",this._domNode.style.display="none",this._domNode.style.top="10px",this._domNode.style.zIndex="12",this._domNode.setAttribute("role","presentation"),this._domNode.setAttribute("aria-hidden","true");const n={inputActiveOptionBorder:(0,p.asCssVariable)(p.inputActiveOptionBorder),inputActiveOptionForeground:(0,p.asCssVariable)(p.inputActiveOptionForeground),inputActiveOptionBackground:(0,p.asCssVariable)(p.inputActiveOptionBackground)};this.caseSensitive=this._register(new k.CaseSensitiveToggle({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleCaseSensitiveCommand),isChecked:this._state.matchCase,...n})),this._domNode.appendChild(this.caseSensitive.domNode),this._register(this.caseSensitive.onChange(()=>{this._state.change({matchCase:this.caseSensitive.checked},!1)})),this.wholeWords=this._register(new k.WholeWordsToggle({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleWholeWordCommand),isChecked:this._state.wholeWord,...n})),this._domNode.appendChild(this.wholeWords.domNode),this._register(this.wholeWords.onChange(()=>{this._state.change({wholeWord:this.wholeWords.checked},!1)})),this.regex=this._register(new k.RegexToggle({appendTitle:this._keybindingLabelFor(S.FIND_IDS.ToggleRegexCommand),isChecked:this._state.isRegex,...n})),this._domNode.appendChild(this.regex.domNode),this._register(this.regex.onChange(()=>{this._state.change({isRegex:this.regex.checked},!1)})),this._editor.addOverlayWidget(this),this._register(this._state.onFindReplaceStateChange(t=>{let r=!1;t.isRegex&&(this.regex.checked=this._state.isRegex,r=!0),t.wholeWord&&(this.wholeWords.checked=this._state.wholeWord,r=!0),t.matchCase&&(this.caseSensitive.checked=this._state.matchCase,r=!0),!this._state.isRevealed&&r&&this._revealTemporarily()})),this._register(L.addDisposableListener(this._domNode,L.EventType.MOUSE_LEAVE,t=>this._onMouseLeave())),this._register(L.addDisposableListener(this._domNode,"mouseover",t=>this._onMouseOver()))}_keybindingLabelFor(b){const a=this._keybindingService.lookupKeybinding(b);return a?` (${a.getLabel()})`:""}dispose(){this._editor.removeOverlayWidget(this),super.dispose()}getId(){return _.ID}getDomNode(){return this._domNode}getPosition(){return{preference:0}}highlightFindOptions(){this._revealTemporarily()}_revealTemporarily(){this._show(),this._hideSoon.schedule()}_onMouseLeave(){this._hideSoon.schedule()}_onMouseOver(){this._hideSoon.cancel()}_show(){this._isVisible||(this._isVisible=!0,this._domNode.style.display="block")}_hide(){this._isVisible&&(this._isVisible=!1,this._domNode.style.display="none")}}e.FindOptionsWidget=_,_.ID="editor.contrib.findOptionsWidget"}),define(se[897],oe([1,0,6,2,5,195]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FindReplaceState=void 0;function S(_,v){return _===1?!0:_===2?!1:v}class p extends k.Disposable{get searchString(){return this._searchString}get replaceString(){return this._replaceString}get isRevealed(){return this._isRevealed}get isReplaceRevealed(){return this._isReplaceRevealed}get isRegex(){return S(this._isRegexOverride,this._isRegex)}get wholeWord(){return S(this._wholeWordOverride,this._wholeWord)}get matchCase(){return S(this._matchCaseOverride,this._matchCase)}get preserveCase(){return S(this._preserveCaseOverride,this._preserveCase)}get actualIsRegex(){return this._isRegex}get actualWholeWord(){return this._wholeWord}get actualMatchCase(){return this._matchCase}get actualPreserveCase(){return this._preserveCase}get searchScope(){return this._searchScope}get matchesPosition(){return this._matchesPosition}get matchesCount(){return this._matchesCount}get currentMatch(){return this._currentMatch}constructor(){super(),this._onFindReplaceStateChange=this._register(new L.Emitter),this.onFindReplaceStateChange=this._onFindReplaceStateChange.event,this._searchString="",this._replaceString="",this._isRevealed=!1,this._isReplaceRevealed=!1,this._isRegex=!1,this._isRegexOverride=0,this._wholeWord=!1,this._wholeWordOverride=0,this._matchCase=!1,this._matchCaseOverride=0,this._preserveCase=!1,this._preserveCaseOverride=0,this._searchScope=null,this._matchesPosition=0,this._matchesCount=0,this._currentMatch=null,this._loop=!0,this._isSearching=!1,this._filters=null}changeMatchInfo(v,b,a){const i={moveCursor:!1,updateHistory:!1,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1,isSearching:!1,filters:!1};let n=!1;b===0&&(v=0),v>b&&(v=b),this._matchesPosition!==v&&(this._matchesPosition=v,i.matchesPosition=!0,n=!0),this._matchesCount!==b&&(this._matchesCount=b,i.matchesCount=!0,n=!0),typeof a<"u"&&(y.Range.equalsRange(this._currentMatch,a)||(this._currentMatch=a,i.currentMatch=!0,n=!0)),n&&this._onFindReplaceStateChange.fire(i)}change(v,b,a=!0){var i;const n={moveCursor:b,updateHistory:a,searchString:!1,replaceString:!1,isRevealed:!1,isReplaceRevealed:!1,isRegex:!1,wholeWord:!1,matchCase:!1,preserveCase:!1,searchScope:!1,matchesPosition:!1,matchesCount:!1,currentMatch:!1,loop:!1,isSearching:!1,filters:!1};let t=!1;const r=this.isRegex,u=this.wholeWord,f=this.matchCase,c=this.preserveCase;typeof v.searchString<"u"&&this._searchString!==v.searchString&&(this._searchString=v.searchString,n.searchString=!0,t=!0),typeof v.replaceString<"u"&&this._replaceString!==v.replaceString&&(this._replaceString=v.replaceString,n.replaceString=!0,t=!0),typeof v.isRevealed<"u"&&this._isRevealed!==v.isRevealed&&(this._isRevealed=v.isRevealed,n.isRevealed=!0,t=!0),typeof v.isReplaceRevealed<"u"&&this._isReplaceRevealed!==v.isReplaceRevealed&&(this._isReplaceRevealed=v.isReplaceRevealed,n.isReplaceRevealed=!0,t=!0),typeof v.isRegex<"u"&&(this._isRegex=v.isRegex),typeof v.wholeWord<"u"&&(this._wholeWord=v.wholeWord),typeof v.matchCase<"u"&&(this._matchCase=v.matchCase),typeof v.preserveCase<"u"&&(this._preserveCase=v.preserveCase),typeof v.searchScope<"u"&&(!((i=v.searchScope)===null||i===void 0)&&i.every(d=>{var s;return(s=this._searchScope)===null||s===void 0?void 0:s.some(l=>!y.Range.equalsRange(l,d))})||(this._searchScope=v.searchScope,n.searchScope=!0,t=!0)),typeof v.loop<"u"&&this._loop!==v.loop&&(this._loop=v.loop,n.loop=!0,t=!0),typeof v.isSearching<"u"&&this._isSearching!==v.isSearching&&(this._isSearching=v.isSearching,n.isSearching=!0,t=!0),typeof v.filters<"u"&&(this._filters?this._filters.update(v.filters):this._filters=v.filters,n.filters=!0,t=!0),this._isRegexOverride=typeof v.isRegexOverride<"u"?v.isRegexOverride:0,this._wholeWordOverride=typeof v.wholeWordOverride<"u"?v.wholeWordOverride:0,this._matchCaseOverride=typeof v.matchCaseOverride<"u"?v.matchCaseOverride:0,this._preserveCaseOverride=typeof v.preserveCaseOverride<"u"?v.preserveCaseOverride:0,r!==this.isRegex&&(t=!0,n.isRegex=!0),u!==this.wholeWord&&(t=!0,n.wholeWord=!0),f!==this.matchCase&&(t=!0,n.matchCase=!0),c!==this.preserveCase&&(t=!0,n.preserveCase=!0),t&&this._onFindReplaceStateChange.fire(n)}canNavigateBack(){return this.canNavigateInLoop()||this.matchesPosition!==1}canNavigateForward(){return this.canNavigateInLoop()||this.matchesPosition=E.MATCHES_LIMIT}}e.FindReplaceState=p}),define(se[898],oe([1,0,7,48,159,158,76,14,26,12,2,17,11,5,195,673,357,761,29,82,23,28,89,20,106,460]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SimpleButton=e.FindWidget=e.FindWidgetViewZone=e.NLS_NO_RESULTS=e.NLS_MATCHES_LOCATION=e.findNextMatchIcon=e.findPreviousMatchIcon=e.findReplaceAllIcon=e.findReplaceIcon=void 0;const m=(0,d.registerIcon)("find-selection",_.Codicon.selection,r.localize(0,null)),C=(0,d.registerIcon)("find-collapsed",_.Codicon.chevronRight,r.localize(1,null)),w=(0,d.registerIcon)("find-expanded",_.Codicon.chevronDown,r.localize(2,null));e.findReplaceIcon=(0,d.registerIcon)("find-replace",_.Codicon.replace,r.localize(3,null)),e.findReplaceAllIcon=(0,d.registerIcon)("find-replace-all",_.Codicon.replaceAll,r.localize(4,null)),e.findPreviousMatchIcon=(0,d.registerIcon)("find-previous-match",_.Codicon.arrowUp,r.localize(5,null)),e.findNextMatchIcon=(0,d.registerIcon)("find-next-match",_.Codicon.arrowDown,r.localize(6,null));const D=r.localize(7,null),I=r.localize(8,null),T=r.localize(9,null),A=r.localize(10,null),P=r.localize(11,null),N=r.localize(12,null),M=r.localize(13,null),R=r.localize(14,null),x=r.localize(15,null),O=r.localize(16,null),B=r.localize(17,null),W=r.localize(18,null),V=r.localize(19,null,t.MATCHES_LIMIT);e.NLS_MATCHES_LOCATION=r.localize(20,null),e.NLS_NO_RESULTS=r.localize(21,null);const K=419,q=275-54;let ie=69;const ae=33,ne="ctrlEnterReplaceAll.windows.donotask",$=a.isMacintosh?256:2048;class J{constructor(X){this.afterLineNumber=X,this.heightInPx=ae,this.suppressMouseDown=!1,this.domNode=document.createElement("div"),this.domNode.className="dock-find-viewzone"}}e.FindWidgetViewZone=J;function Q(me,X,U){const G=!!X.match(/\n/);if(U&&G&&U.selectionStart>0){me.stopPropagation();return}}function re(me,X,U){const G=!!X.match(/\n/);if(U&&G&&U.selectionEndthis._updateHistoryDelayer.cancel())),this._register(this._state.onFindReplaceStateChange(le=>this._onStateChanged(le))),this._buildDomNode(),this._updateButtons(),this._tryUpdateWidgetWidth(),this._findInput.inputBox.layout(),this._register(this._codeEditor.onDidChangeConfiguration(le=>{if(le.hasChanged(90)&&(this._codeEditor.getOption(90)&&this._state.change({isReplaceRevealed:!1},!1),this._updateButtons()),le.hasChanged(143)&&this._tryUpdateWidgetWidth(),le.hasChanged(2)&&this.updateAccessibilitySupport(),le.hasChanged(41)){const ue=this._codeEditor.getOption(41).loop;this._state.change({loop:ue},!1);const ce=this._codeEditor.getOption(41).addExtraSpaceOnTop;ce&&!this._viewZone&&(this._viewZone=new J(0),this._showViewZone()),!ce&&this._viewZone&&this._removeViewZone()}})),this.updateAccessibilitySupport(),this._register(this._codeEditor.onDidChangeCursorSelection(()=>{this._isVisible&&this._updateToggleSelectionFindButton()})),this._register(this._codeEditor.onDidFocusEditorWidget(async()=>{if(this._isVisible){const le=await this._controller.getGlobalBufferTerm();le&&le!==this._state.searchString&&(this._state.change({searchString:le},!1),this._findInput.select())}})),this._findInputFocused=t.CONTEXT_FIND_INPUT_FOCUSED.bindTo(Y),this._findFocusTracker=this._register(L.trackFocus(this._findInput.inputBox.inputElement)),this._register(this._findFocusTracker.onDidFocus(()=>{this._findInputFocused.set(!0),this._updateSearchScope()})),this._register(this._findFocusTracker.onDidBlur(()=>{this._findInputFocused.set(!1)})),this._replaceInputFocused=t.CONTEXT_REPLACE_INPUT_FOCUSED.bindTo(Y),this._replaceFocusTracker=this._register(L.trackFocus(this._replaceInput.inputBox.inputElement)),this._register(this._replaceFocusTracker.onDidFocus(()=>{this._replaceInputFocused.set(!0),this._updateSearchScope()})),this._register(this._replaceFocusTracker.onDidBlur(()=>{this._replaceInputFocused.set(!1)})),this._codeEditor.addOverlayWidget(this),this._codeEditor.getOption(41).addExtraSpaceOnTop&&(this._viewZone=new J(0)),this._register(this._codeEditor.onDidChangeModel(()=>{this._isVisible&&(this._viewZoneId=void 0)})),this._register(this._codeEditor.onDidScrollChange(le=>{if(le.scrollTopChanged){this._layoutViewZone();return}setTimeout(()=>{this._layoutViewZone()},0)}))}getId(){return de.ID}getDomNode(){return this._domNode}getPosition(){return this._isVisible?{preference:0}:null}_onStateChanged(X){if(X.searchString){try{this._ignoreChangeEvent=!0,this._findInput.setValue(this._state.searchString)}finally{this._ignoreChangeEvent=!1}this._updateButtons()}if(X.replaceString&&(this._replaceInput.inputBox.value=this._state.replaceString),X.isRevealed&&(this._state.isRevealed?this._reveal():this._hide(!0)),X.isReplaceRevealed&&(this._state.isReplaceRevealed?!this._codeEditor.getOption(90)&&!this._isReplaceVisible&&(this._isReplaceVisible=!0,this._replaceInput.width=L.getTotalWidth(this._findInput.domNode),this._updateButtons(),this._replaceInput.inputBox.layout()):this._isReplaceVisible&&(this._isReplaceVisible=!1,this._updateButtons())),(X.isRevealed||X.isReplaceRevealed)&&(this._state.isRevealed||this._state.isReplaceRevealed)&&this._tryUpdateHeight()&&this._showViewZone(),X.isRegex&&this._findInput.setRegex(this._state.isRegex),X.wholeWord&&this._findInput.setWholeWords(this._state.wholeWord),X.matchCase&&this._findInput.setCaseSensitive(this._state.matchCase),X.preserveCase&&this._replaceInput.setPreserveCase(this._state.preserveCase),X.searchScope&&(this._state.searchScope?this._toggleSelectionFind.checked=!0:this._toggleSelectionFind.checked=!1,this._updateToggleSelectionFindButton()),X.searchString||X.matchesCount||X.matchesPosition){const U=this._state.searchString.length>0&&this._state.matchesCount===0;this._domNode.classList.toggle("no-results",U),this._updateMatchesCount(),this._updateButtons()}(X.searchString||X.currentMatch)&&this._layoutViewZone(),X.updateHistory&&this._delayedUpdateHistory(),X.loop&&this._updateButtons()}_delayedUpdateHistory(){this._updateHistoryDelayer.trigger(this._updateHistory.bind(this)).then(void 0,v.onUnexpectedError)}_updateHistory(){this._state.searchString&&this._findInput.inputBox.addToHistory(),this._state.replaceString&&this._replaceInput.inputBox.addToHistory()}_updateMatchesCount(){this._matchesCount.style.minWidth=ie+"px",this._state.matchesCount>=t.MATCHES_LIMIT?this._matchesCount.title=V:this._matchesCount.title="",this._matchesCount.firstChild&&this._matchesCount.removeChild(this._matchesCount.firstChild);let X;if(this._state.matchesCount>0){let U=String(this._state.matchesCount);this._state.matchesCount>=t.MATCHES_LIMIT&&(U+="+");let G=String(this._state.matchesPosition);G==="0"&&(G="?"),X=i.format(e.NLS_MATCHES_LOCATION,G,U)}else X=e.NLS_NO_RESULTS;this._matchesCount.appendChild(document.createTextNode(X)),(0,k.alert)(this._getAriaLabel(X,this._state.currentMatch,this._state.searchString)),ie=Math.max(ie,this._matchesCount.clientWidth)}_getAriaLabel(X,U,G){if(X===e.NLS_NO_RESULTS)return G===""?r.localize(22,null,X):r.localize(23,null,X,G);if(U){const z=r.localize(24,null,X,G,U.startLineNumber+":"+U.startColumn),H=this._codeEditor.getModel();return H&&U.startLineNumber<=H.getLineCount()&&U.startLineNumber>=1?`${H.getLineContent(U.startLineNumber)}, ${z}`:z}return r.localize(25,null,X,G)}_updateToggleSelectionFindButton(){const X=this._codeEditor.getSelection(),U=X?X.startLineNumber!==X.endLineNumber||X.startColumn!==X.endColumn:!1,G=this._toggleSelectionFind.checked;this._isVisible&&(G||U)?this._toggleSelectionFind.enable():this._toggleSelectionFind.disable()}_updateButtons(){this._findInput.setEnabled(this._isVisible),this._replaceInput.setEnabled(this._isVisible&&this._isReplaceVisible),this._updateToggleSelectionFindButton(),this._closeBtn.setEnabled(this._isVisible);const X=this._state.searchString.length>0,U=!!this._state.matchesCount;this._prevBtn.setEnabled(this._isVisible&&X&&U&&this._state.canNavigateBack()),this._nextBtn.setEnabled(this._isVisible&&X&&U&&this._state.canNavigateForward()),this._replaceBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&X),this._replaceAllBtn.setEnabled(this._isVisible&&this._isReplaceVisible&&X),this._domNode.classList.toggle("replaceToggled",this._isReplaceVisible),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible);const G=!this._codeEditor.getOption(90);this._toggleReplaceBtn.setEnabled(this._isVisible&&G)}_reveal(){if(this._revealTimeouts.forEach(X=>{clearTimeout(X)}),this._revealTimeouts=[],!this._isVisible){this._isVisible=!0;const X=this._codeEditor.getSelection();switch(this._codeEditor.getOption(41).autoFindInSelection){case"always":this._toggleSelectionFind.checked=!0;break;case"never":this._toggleSelectionFind.checked=!1;break;case"multiline":{const G=!!X&&X.startLineNumber!==X.endLineNumber;this._toggleSelectionFind.checked=G;break}default:break}this._tryUpdateWidgetWidth(),this._updateButtons(),this._revealTimeouts.push(setTimeout(()=>{this._domNode.classList.add("visible"),this._domNode.setAttribute("aria-hidden","false")},0)),this._revealTimeouts.push(setTimeout(()=>{this._findInput.validate()},200)),this._codeEditor.layoutOverlayWidget(this);let U=!0;if(this._codeEditor.getOption(41).seedSearchStringFromSelection&&X){const G=this._codeEditor.getDomNode();if(G){const z=L.getDomNodePagePosition(G),H=this._codeEditor.getScrolledVisiblePosition(X.getStartPosition()),Y=z.left+(H?H.left:0),j=H?H.top:0;if(this._viewZone&&jX.startLineNumber&&(U=!1);const Z=L.getTopLeftOffset(this._domNode).left;Y>Z&&(U=!1);const ee=this._codeEditor.getScrolledVisiblePosition(X.getEndPosition());z.left+(ee?ee.left:0)>Z&&(U=!1)}}}this._showViewZone(U)}}_hide(X){this._revealTimeouts.forEach(U=>{clearTimeout(U)}),this._revealTimeouts=[],this._isVisible&&(this._isVisible=!1,this._updateButtons(),this._domNode.classList.remove("visible"),this._domNode.setAttribute("aria-hidden","true"),this._findInput.clearMessage(),X&&this._codeEditor.focus(),this._codeEditor.layoutOverlayWidget(this),this._removeViewZone())}_layoutViewZone(X){if(!this._codeEditor.getOption(41).addExtraSpaceOnTop){this._removeViewZone();return}if(!this._isVisible)return;const G=this._viewZone;this._viewZoneId!==void 0||!G||this._codeEditor.changeViewZones(z=>{G.heightInPx=this._getHeight(),this._viewZoneId=z.addZone(G),this._codeEditor.setScrollTop(X||this._codeEditor.getScrollTop()+G.heightInPx)})}_showViewZone(X=!0){if(!this._isVisible||!this._codeEditor.getOption(41).addExtraSpaceOnTop)return;this._viewZone===void 0&&(this._viewZone=new J(0));const G=this._viewZone;this._codeEditor.changeViewZones(z=>{if(this._viewZoneId!==void 0){const H=this._getHeight();if(H===G.heightInPx)return;const Y=H-G.heightInPx;G.heightInPx=H,z.layoutZone(this._viewZoneId),X&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+Y);return}else{let H=this._getHeight();if(H-=this._codeEditor.getOption(83).top,H<=0)return;G.heightInPx=H,this._viewZoneId=z.addZone(G),X&&this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()+H)}})}_removeViewZone(){this._codeEditor.changeViewZones(X=>{this._viewZoneId!==void 0&&(X.removeZone(this._viewZoneId),this._viewZoneId=void 0,this._viewZone&&(this._codeEditor.setScrollTop(this._codeEditor.getScrollTop()-this._viewZone.heightInPx),this._viewZone=void 0))})}_tryUpdateWidgetWidth(){if(!this._isVisible||!this._domNode.isConnected)return;const X=this._codeEditor.getLayoutInfo();if(X.contentWidth<=0){this._domNode.classList.add("hiddenEditor");return}else this._domNode.classList.contains("hiddenEditor")&&this._domNode.classList.remove("hiddenEditor");const G=X.width,z=X.minimap.minimapWidth;let H=!1,Y=!1,j=!1;if(this._resized&&L.getTotalWidth(this._domNode)>K){this._domNode.style.maxWidth=`${G-28-z-15}px`,this._replaceInput.width=L.getTotalWidth(this._findInput.domNode);return}if(K+28+z>=G&&(Y=!0),K+28+z-ie>=G&&(j=!0),K+28+z-ie>=G+50&&(H=!0),this._domNode.classList.toggle("collapsed-find-widget",H),this._domNode.classList.toggle("narrow-find-widget",j),this._domNode.classList.toggle("reduced-find-widget",Y),!j&&!H&&(this._domNode.style.maxWidth=`${G-28-z-15}px`),this._findInput.layout({collapsedFindWidget:H,narrowFindWidget:j,reducedFindWidget:Y}),this._resized){const Z=this._findInput.inputBox.element.clientWidth;Z>0&&(this._replaceInput.width=Z)}else this._isReplaceVisible&&(this._replaceInput.width=L.getTotalWidth(this._findInput.domNode))}_getHeight(){let X=0;return X+=4,X+=this._findInput.inputBox.height+2,this._isReplaceVisible&&(X+=4,X+=this._replaceInput.inputBox.height+2),X+=4,X}_tryUpdateHeight(){const X=this._getHeight();return this._cachedHeight!==null&&this._cachedHeight===X?!1:(this._cachedHeight=X,this._domNode.style.height=`${X}px`,!0)}focusFindInput(){this._findInput.select(),this._findInput.focus()}focusReplaceInput(){this._replaceInput.select(),this._replaceInput.focus()}highlightFindOptions(){this._findInput.highlightFindOptions()}_updateSearchScope(){if(this._codeEditor.hasModel()&&this._toggleSelectionFind.checked){const X=this._codeEditor.getSelections();X.map(U=>{U.endColumn===1&&U.endLineNumber>U.startLineNumber&&(U=U.setEndPosition(U.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(U.endLineNumber-1)));const G=this._state.currentMatch;return U.startLineNumber!==U.endLineNumber&&!n.Range.equalsRange(U,G)?U:null}).filter(U=>!!U),X.length&&this._state.change({searchScope:X},!0)}}_onFindInputMouseDown(X){X.middleButton&&X.stopPropagation()}_onFindInputKeyDown(X){if(X.equals($|3))if(this._keybindingService.dispatchEvent(X,X.target)){X.preventDefault();return}else{this._findInput.inputBox.insertAtCursor(` `),X.preventDefault();return}if(X.equals(2)){this._isReplaceVisible?this._replaceInput.focus():this._findInput.focusOnCaseSensitive(),X.preventDefault();return}if(X.equals(2066)){this._codeEditor.focus(),X.preventDefault();return}if(X.equals(16))return Q(X,this._findInput.getValue(),this._findInput.domNode.querySelector("textarea"));if(X.equals(18))return re(X,this._findInput.getValue(),this._findInput.domNode.querySelector("textarea"))}_onReplaceInputKeyDown(X){if(X.equals($|3))if(this._keybindingService.dispatchEvent(X,X.target)){X.preventDefault();return}else{a.isWindows&&a.isNative&&!this._ctrlEnterReplaceAllWarningPrompted&&(this._notificationService.info(r.localize(26,null)),this._ctrlEnterReplaceAllWarningPrompted=!0,this._storageService.store(ne,!0,0,0)),this._replaceInput.inputBox.insertAtCursor(` `),X.preventDefault();return}if(X.equals(2)){this._findInput.focusOnCaseSensitive(),X.preventDefault();return}if(X.equals(1026)){this._findInput.focus(),X.preventDefault();return}if(X.equals(2066)){this._codeEditor.focus(),X.preventDefault();return}if(X.equals(16))return Q(X,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector("textarea"));if(X.equals(18))return re(X,this._replaceInput.inputBox.value,this._replaceInput.inputBox.element.querySelector("textarea"))}getVerticalSashLeft(X){return 0}_keybindingLabelFor(X){const U=this._keybindingService.lookupKeybinding(X);return U?` (${U.getLabel()})`:""}_buildDomNode(){this._findInput=this._register(new u.ContextScopedFindInput(null,this._contextViewProvider,{width:q,label:I,placeholder:T,appendCaseSensitiveLabel:this._keybindingLabelFor(t.FIND_IDS.ToggleCaseSensitiveCommand),appendWholeWordsLabel:this._keybindingLabelFor(t.FIND_IDS.ToggleWholeWordCommand),appendRegexLabel:this._keybindingLabelFor(t.FIND_IDS.ToggleRegexCommand),validation:Z=>{if(Z.length===0||!this._findInput.getRegex())return null;try{return new RegExp(Z,"gu"),null}catch(ee){return{content:ee.message}}},flexibleHeight:!0,flexibleWidth:!0,flexibleMaxHeight:118,showCommonFindToggles:!0,showHistoryHint:()=>(0,f.showHistoryKeybindingHint)(this._keybindingService),inputBoxStyles:h.defaultInputBoxStyles,toggleStyles:h.defaultToggleStyles},this._contextKeyService)),this._findInput.setRegex(!!this._state.isRegex),this._findInput.setCaseSensitive(!!this._state.matchCase),this._findInput.setWholeWords(!!this._state.wholeWord),this._register(this._findInput.onKeyDown(Z=>this._onFindInputKeyDown(Z))),this._register(this._findInput.inputBox.onDidChange(()=>{this._ignoreChangeEvent||this._state.change({searchString:this._findInput.getValue()},!0)})),this._register(this._findInput.onDidOptionChange(()=>{this._state.change({isRegex:this._findInput.getRegex(),wholeWord:this._findInput.getWholeWords(),matchCase:this._findInput.getCaseSensitive()},!0)})),this._register(this._findInput.onCaseSensitiveKeyDown(Z=>{Z.equals(1026)&&this._isReplaceVisible&&(this._replaceInput.focus(),Z.preventDefault())})),this._register(this._findInput.onRegexKeyDown(Z=>{Z.equals(2)&&this._isReplaceVisible&&(this._replaceInput.focusOnPreserve(),Z.preventDefault())})),this._register(this._findInput.inputBox.onDidHeightChange(Z=>{this._tryUpdateHeight()&&this._showViewZone()})),a.isLinux&&this._register(this._findInput.onMouseDown(Z=>this._onFindInputMouseDown(Z))),this._matchesCount=document.createElement("div"),this._matchesCount.className="matchesCount",this._updateMatchesCount(),this._prevBtn=this._register(new he({label:A+this._keybindingLabelFor(t.FIND_IDS.PreviousMatchFindAction),icon:e.findPreviousMatchIcon,onTrigger:()=>{(0,g.assertIsDefined)(this._codeEditor.getAction(t.FIND_IDS.PreviousMatchFindAction)).run().then(void 0,v.onUnexpectedError)}})),this._nextBtn=this._register(new he({label:P+this._keybindingLabelFor(t.FIND_IDS.NextMatchFindAction),icon:e.findNextMatchIcon,onTrigger:()=>{(0,g.assertIsDefined)(this._codeEditor.getAction(t.FIND_IDS.NextMatchFindAction)).run().then(void 0,v.onUnexpectedError)}}));const G=document.createElement("div");G.className="find-part",G.appendChild(this._findInput.domNode);const z=document.createElement("div");z.className="find-actions",G.appendChild(z),z.appendChild(this._matchesCount),z.appendChild(this._prevBtn.domNode),z.appendChild(this._nextBtn.domNode),this._toggleSelectionFind=this._register(new y.Toggle({icon:m,title:N+this._keybindingLabelFor(t.FIND_IDS.ToggleSearchScopeCommand),isChecked:!1,inputActiveOptionBackground:(0,c.asCssVariable)(c.inputActiveOptionBackground),inputActiveOptionBorder:(0,c.asCssVariable)(c.inputActiveOptionBorder),inputActiveOptionForeground:(0,c.asCssVariable)(c.inputActiveOptionForeground)})),this._register(this._toggleSelectionFind.onChange(()=>{if(this._toggleSelectionFind.checked){if(this._codeEditor.hasModel()){const Z=this._codeEditor.getSelections();Z.map(ee=>(ee.endColumn===1&&ee.endLineNumber>ee.startLineNumber&&(ee=ee.setEndPosition(ee.endLineNumber-1,this._codeEditor.getModel().getLineMaxColumn(ee.endLineNumber-1))),ee.isEmpty()?null:ee)).filter(ee=>!!ee),Z.length&&this._state.change({searchScope:Z},!0)}}else this._state.change({searchScope:null},!0)})),z.appendChild(this._toggleSelectionFind.domNode),this._closeBtn=this._register(new he({label:M+this._keybindingLabelFor(t.FIND_IDS.CloseFindWidgetCommand),icon:d.widgetClose,onTrigger:()=>{this._state.change({isRevealed:!1,searchScope:null},!1)},onKeyDown:Z=>{Z.equals(2)&&this._isReplaceVisible&&(this._replaceBtn.isEnabled()?this._replaceBtn.focus():this._codeEditor.focus(),Z.preventDefault())}})),this._replaceInput=this._register(new u.ContextScopedReplaceInput(null,void 0,{label:R,placeholder:x,appendPreserveCaseLabel:this._keybindingLabelFor(t.FIND_IDS.TogglePreserveCaseCommand),history:[],flexibleHeight:!0,flexibleWidth:!0,flexibleMaxHeight:118,showHistoryHint:()=>(0,f.showHistoryKeybindingHint)(this._keybindingService),inputBoxStyles:h.defaultInputBoxStyles,toggleStyles:h.defaultToggleStyles},this._contextKeyService,!0)),this._replaceInput.setPreserveCase(!!this._state.preserveCase),this._register(this._replaceInput.onKeyDown(Z=>this._onReplaceInputKeyDown(Z))),this._register(this._replaceInput.inputBox.onDidChange(()=>{this._state.change({replaceString:this._replaceInput.inputBox.value},!1)})),this._register(this._replaceInput.inputBox.onDidHeightChange(Z=>{this._isReplaceVisible&&this._tryUpdateHeight()&&this._showViewZone()})),this._register(this._replaceInput.onDidOptionChange(()=>{this._state.change({preserveCase:this._replaceInput.getPreserveCase()},!0)})),this._register(this._replaceInput.onPreserveCaseKeyDown(Z=>{Z.equals(2)&&(this._prevBtn.isEnabled()?this._prevBtn.focus():this._nextBtn.isEnabled()?this._nextBtn.focus():this._toggleSelectionFind.enabled?this._toggleSelectionFind.focus():this._closeBtn.isEnabled()&&this._closeBtn.focus(),Z.preventDefault())})),this._replaceBtn=this._register(new he({label:O+this._keybindingLabelFor(t.FIND_IDS.ReplaceOneAction),icon:e.findReplaceIcon,onTrigger:()=>{this._controller.replace()},onKeyDown:Z=>{Z.equals(1026)&&(this._closeBtn.focus(),Z.preventDefault())}})),this._replaceAllBtn=this._register(new he({label:B+this._keybindingLabelFor(t.FIND_IDS.ReplaceAllAction),icon:e.findReplaceAllIcon,onTrigger:()=>{this._controller.replaceAll()}}));const H=document.createElement("div");H.className="replace-part",H.appendChild(this._replaceInput.domNode);const Y=document.createElement("div");Y.className="replace-actions",H.appendChild(Y),Y.appendChild(this._replaceBtn.domNode),Y.appendChild(this._replaceAllBtn.domNode),this._toggleReplaceBtn=this._register(new he({label:W,className:"codicon toggle left",onTrigger:()=>{this._state.change({isReplaceRevealed:!this._isReplaceVisible},!1),this._isReplaceVisible&&(this._replaceInput.width=L.getTotalWidth(this._findInput.domNode),this._replaceInput.inputBox.layout()),this._showViewZone()}})),this._toggleReplaceBtn.setExpanded(this._isReplaceVisible),this._domNode=document.createElement("div"),this._domNode.className="editor-widget find-widget",this._domNode.setAttribute("aria-hidden","true"),this._domNode.ariaLabel=D,this._domNode.role="dialog",this._domNode.style.width=`${K}px`,this._domNode.appendChild(this._toggleReplaceBtn.domNode),this._domNode.appendChild(G),this._domNode.appendChild(this._closeBtn.domNode),this._domNode.appendChild(H),this._resizeSash=new E.Sash(this._domNode,this,{orientation:0,size:2}),this._resized=!1;let j=K;this._register(this._resizeSash.onDidStart(()=>{j=L.getTotalWidth(this._domNode)})),this._register(this._resizeSash.onDidChange(Z=>{this._resized=!0;const ee=j+Z.startX-Z.currentX;if(eele||(this._domNode.style.width=`${ee}px`,this._isReplaceVisible&&(this._replaceInput.width=L.getTotalWidth(this._findInput.domNode)),this._findInput.inputBox.layout(),this._tryUpdateHeight())})),this._register(this._resizeSash.onDidReset(()=>{const Z=L.getTotalWidth(this._domNode);if(Z{this._opts.onTrigger(),G.preventDefault()}),this.onkeydown(this._domNode,G=>{var z,H;if(G.equals(10)||G.equals(3)){this._opts.onTrigger(),G.preventDefault();return}(H=(z=this._opts).onKeyDown)===null||H===void 0||H.call(z,G)})}get domNode(){return this._domNode}isEnabled(){return this._domNode.tabIndex>=0}focus(){this._domNode.focus()}setEnabled(X){this._domNode.classList.toggle("disabled",!X),this._domNode.setAttribute("aria-disabled",String(!X)),this._domNode.tabIndex=X?0:-1}setExpanded(X){this._domNode.setAttribute("aria-expanded",String(!!X)),X?(this._domNode.classList.remove(...l.ThemeIcon.asClassNameArray(C)),this._domNode.classList.add(...l.ThemeIcon.asClassNameArray(w))):(this._domNode.classList.remove(...l.ThemeIcon.asClassNameArray(w)),this._domNode.classList.add(...l.ThemeIcon.asClassNameArray(C)))}}e.SimpleButton=he,(0,s.registerThemingParticipant)((me,X)=>{const U=(Ce,Se)=>{Se&&X.addRule(`.monaco-editor ${Ce} { background-color: ${Se}; }`)};U(".findMatch",me.getColor(c.editorFindMatchHighlight)),U(".currentFindMatch",me.getColor(c.editorFindMatch)),U(".findScope",me.getColor(c.editorFindRangeHighlight));const G=me.getColor(c.editorWidgetBackground);U(".find-widget",G);const z=me.getColor(c.widgetShadow);z&&X.addRule(`.monaco-editor .find-widget { box-shadow: 0 0 8px 2px ${z}; }`);const H=me.getColor(c.widgetBorder);H&&X.addRule(`.monaco-editor .find-widget { border-left: 1px solid ${H}; border-right: 1px solid ${H}; border-bottom: 1px solid ${H}; }`);const Y=me.getColor(c.editorFindMatchHighlightBorder);Y&&X.addRule(`.monaco-editor .findMatch { border: 1px ${(0,o.isHighContrast)(me.type)?"dotted":"solid"} ${Y}; box-sizing: border-box; }`);const j=me.getColor(c.editorFindMatchBorder);j&&X.addRule(`.monaco-editor .currentFindMatch { border: 2px solid ${j}; padding: 1px; box-sizing: border-box; }`);const Z=me.getColor(c.editorFindRangeHighlightBorder);Z&&X.addRule(`.monaco-editor .findScope { border: 1px ${(0,o.isHighContrast)(me.type)?"dashed":"solid"} ${Z}; }`);const ee=me.getColor(c.contrastBorder);ee&&X.addRule(`.monaco-editor .find-widget { border: 1px solid ${ee}; }`);const le=me.getColor(c.editorWidgetForeground);le&&X.addRule(`.monaco-editor .find-widget { color: ${le}; }`);const ue=me.getColor(c.errorForeground);ue&&X.addRule(`.monaco-editor .find-widget.no-results .matchesCount { color: ${ue}; }`);const ce=me.getColor(c.editorWidgetResizeBorder);if(ce)X.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${ce}; }`);else{const Ce=me.getColor(c.editorWidgetBorder);Ce&&X.addRule(`.monaco-editor .find-widget .monaco-sash { background-color: ${Ce}; }`)}const pe=me.getColor(c.toolbarHoverBackground);pe&&X.addRule(` .monaco-editor .find-widget .button:not(.disabled):hover, .monaco-editor .find-widget .codicon-find-selection:hover { background-color: ${pe} !important; } `);const ve=me.getColor(c.focusBorder);ve&&X.addRule(`.monaco-editor .find-widget .monaco-inputbox.synthetic-focus { outline-color: ${ve}; }`)})}),define(se[377],oe([1,0,14,2,11,16,83,21,41,195,896,897,898,672,30,103,15,59,34,50,70,92,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){"use strict";var g;Object.defineProperty(e,"__esModule",{value:!0}),e.StartFindReplaceAction=e.PreviousSelectionMatchFindAction=e.NextSelectionMatchFindAction=e.SelectionMatchFindAction=e.MoveToMatchFindAction=e.PreviousMatchFindAction=e.NextMatchFindAction=e.MatchFindAction=e.StartFindWithSelectionAction=e.StartFindWithArgsAction=e.StartFindAction=e.FindController=e.CommonFindController=e.getSelectionSearchString=void 0;const h=524288;function m(W,V="single",K=!1){if(!W.hasModel())return null;const F=W.getSelection();if(V==="single"&&F.startLineNumber===F.endLineNumber||V==="multiple"){if(F.isEmpty()){const q=W.getConfiguredWordAtPosition(F.getStartPosition());if(q&&K===!1)return q.word}else if(W.getModel().getValueLengthInRange(F)this._onStateChanged(ae))),this._model=null,this._register(this._editor.onDidChangeModel(()=>{const ae=this._editor.getModel()&&this._state.isRevealed;this.disposeModel(),this._state.change({searchScope:null,matchCase:this._storageService.getBoolean("editor.matchCase",1,!1),wholeWord:this._storageService.getBoolean("editor.wholeWord",1,!1),isRegex:this._storageService.getBoolean("editor.isRegex",1,!1),preserveCase:this._storageService.getBoolean("editor.preserveCase",1,!1)},!1),ae&&this._start({forceRevealReplace:!1,seedSearchStringFromSelection:"none",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!1,updateSearchScope:!1,loop:this._editor.getOption(41).loop})}))}dispose(){this.disposeModel(),super.dispose()}disposeModel(){this._model&&(this._model.dispose(),this._model=null)}_onStateChanged(V){this.saveQueryState(V),V.isRevealed&&(this._state.isRevealed?this._findWidgetVisible.set(!0):(this._findWidgetVisible.reset(),this.disposeModel())),V.searchString&&this.setGlobalBufferTerm(this._state.searchString)}saveQueryState(V){V.isRegex&&this._storageService.store("editor.isRegex",this._state.actualIsRegex,1,1),V.wholeWord&&this._storageService.store("editor.wholeWord",this._state.actualWholeWord,1,1),V.matchCase&&this._storageService.store("editor.matchCase",this._state.actualMatchCase,1,1),V.preserveCase&&this._storageService.store("editor.preserveCase",this._state.actualPreserveCase,1,1)}loadQueryState(){this._state.change({matchCase:this._storageService.getBoolean("editor.matchCase",1,this._state.matchCase),wholeWord:this._storageService.getBoolean("editor.wholeWord",1,this._state.wholeWord),isRegex:this._storageService.getBoolean("editor.isRegex",1,this._state.isRegex),preserveCase:this._storageService.getBoolean("editor.preserveCase",1,this._state.preserveCase)},!1)}isFindInputFocused(){return!!v.CONTEXT_FIND_INPUT_FOCUSED.getValue(this._contextKeyService)}getState(){return this._state}closeFindWidget(){this._state.change({isRevealed:!1,searchScope:null},!1),this._editor.focus()}toggleCaseSensitive(){this._state.change({matchCase:!this._state.matchCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleWholeWords(){this._state.change({wholeWord:!this._state.wholeWord},!1),this._state.isRevealed||this.highlightFindOptions()}toggleRegex(){this._state.change({isRegex:!this._state.isRegex},!1),this._state.isRevealed||this.highlightFindOptions()}togglePreserveCase(){this._state.change({preserveCase:!this._state.preserveCase},!1),this._state.isRevealed||this.highlightFindOptions()}toggleSearchScope(){if(this._state.searchScope)this._state.change({searchScope:null},!0);else if(this._editor.hasModel()){const V=this._editor.getSelections();V.map(K=>(K.endColumn===1&&K.endLineNumber>K.startLineNumber&&(K=K.setEndPosition(K.endLineNumber-1,this._editor.getModel().getLineMaxColumn(K.endLineNumber-1))),K.isEmpty()?null:K)).filter(K=>!!K),V.length&&this._state.change({searchScope:V},!0)}}setSearchString(V){this._state.isRegex&&(V=y.escapeRegExpCharacters(V)),this._state.change({searchString:V},!1)}highlightFindOptions(V=!1){}async _start(V,K){if(this.disposeModel(),!this._editor.hasModel())return;const F={...K,isRevealed:!0};if(V.seedSearchStringFromSelection==="single"){const q=m(this._editor,V.seedSearchStringFromSelection,V.seedSearchStringFromNonEmptySelection);q&&(this._state.isRegex?F.searchString=y.escapeRegExpCharacters(q):F.searchString=q)}else if(V.seedSearchStringFromSelection==="multiple"&&!V.updateSearchScope){const q=m(this._editor,V.seedSearchStringFromSelection);q&&(F.searchString=q)}if(!F.searchString&&V.seedSearchStringFromGlobalClipboard){const q=await this.getGlobalBufferTerm();if(!this._editor.hasModel())return;q&&(F.searchString=q)}if(V.forceRevealReplace||F.isReplaceRevealed?F.isReplaceRevealed=!0:this._findWidgetVisible.get()||(F.isReplaceRevealed=!1),V.updateSearchScope){const q=this._editor.getSelections();q.some(ie=>!ie.isEmpty())&&(F.searchScope=q)}F.loop=V.loop,this._state.change(F,!1),this._model||(this._model=new v.FindModelBoundToEditorModel(this._editor,this._state))}start(V,K){return this._start(V,K)}moveToNextMatch(){return this._model?(this._model.moveToNextMatch(),!0):!1}moveToPrevMatch(){return this._model?(this._model.moveToPrevMatch(),!0):!1}goToMatch(V){return this._model?(this._model.moveToMatch(V),!0):!1}replace(){return this._model?(this._model.replace(),!0):!1}replaceAll(){var V;return this._model?!((V=this._editor.getModel())===null||V===void 0)&&V.isTooLargeForHeapOperation()?(this._notificationService.warn(n.localize(0,null)),!1):(this._model.replaceAll(),!0):!1}selectAllMatches(){return this._model?(this._model.selectAllMatches(),this._editor.focus(),!0):!1}async getGlobalBufferTerm(){return this._editor.getOption(41).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()?this._clipboardService.readFindText():""}setGlobalBufferTerm(V){this._editor.getOption(41).globalFindClipboard&&this._editor.hasModel()&&!this._editor.getModel().isTooLargeForSyncing()&&this._clipboardService.writeFindText(V)}};e.CommonFindController=C,C.ID="editor.contrib.findController",e.CommonFindController=C=g=ke([ge(1,u.IContextKeyService),ge(2,l.IStorageService),ge(3,r.IClipboardService),ge(4,d.INotificationService)],C);let w=class extends C{constructor(V,K,F,q,ie,ae,ne,$){super(V,F,ne,$,ae),this._contextViewService=K,this._keybindingService=q,this._themeService=ie,this._widget=null,this._findOptionsWidget=null}async _start(V,K){this._widget||this._createFindWidget();const F=this._editor.getSelection();let q=!1;switch(this._editor.getOption(41).autoFindInSelection){case"always":q=!0;break;case"never":q=!1;break;case"multiline":{q=!!F&&F.startLineNumber!==F.endLineNumber;break}default:break}V.updateSearchScope=V.updateSearchScope||q,await super._start(V,K),this._widget&&(V.shouldFocus===2?this._widget.focusReplaceInput():V.shouldFocus===1&&this._widget.focusFindInput())}highlightFindOptions(V=!1){this._widget||this._createFindWidget(),this._state.isRevealed&&!V?this._widget.highlightFindOptions():this._findOptionsWidget.highlightFindOptions()}_createFindWidget(){this._widget=this._register(new i.FindWidget(this._editor,this,this._state,this._contextViewService,this._keybindingService,this._contextKeyService,this._themeService,this._storageService,this._notificationService)),this._findOptionsWidget=this._register(new b.FindOptionsWidget(this._editor,this._state,this._keybindingService))}};e.FindController=w,e.FindController=w=ke([ge(1,f.IContextViewService),ge(2,u.IContextKeyService),ge(3,c.IKeybindingService),ge(4,o.IThemeService),ge(5,d.INotificationService),ge(6,l.IStorageService),ge(7,r.IClipboardService)],w),e.StartFindAction=(0,E.registerMultiEditorAction)(new E.MultiEditorAction({id:v.FIND_IDS.StartFindAction,label:n.localize(1,null),alias:"Find",precondition:u.ContextKeyExpr.or(p.EditorContextKeys.focus,u.ContextKeyExpr.has("editorIsOpen")),kbOpts:{kbExpr:null,primary:2084,weight:100},menuOpts:{menuId:t.MenuId.MenubarEditMenu,group:"3_find",title:n.localize(2,null),order:1}})),e.StartFindAction.addImplementation(0,(W,V,K)=>{const F=C.get(V);return F?F.start({forceRevealReplace:!1,seedSearchStringFromSelection:V.getOption(41).seedSearchStringFromSelection!=="never"?"single":"none",seedSearchStringFromNonEmptySelection:V.getOption(41).seedSearchStringFromSelection==="selection",seedSearchStringFromGlobalClipboard:V.getOption(41).globalFindClipboard,shouldFocus:1,shouldAnimate:!0,updateSearchScope:!1,loop:V.getOption(41).loop}):!1});const D={description:"Open a new In-Editor Find Widget.",args:[{name:"Open a new In-Editor Find Widget args",schema:{properties:{searchString:{type:"string"},replaceString:{type:"string"},isRegex:{type:"boolean"},matchWholeWord:{type:"boolean"},isCaseSensitive:{type:"boolean"},preserveCase:{type:"boolean"},findInSelection:{type:"boolean"}}}}]};class I extends E.EditorAction{constructor(){super({id:v.FIND_IDS.StartFindWithArgs,label:n.localize(3,null),alias:"Find With Arguments",precondition:void 0,kbOpts:{kbExpr:null,primary:0,weight:100},metadata:D})}async run(V,K,F){const q=C.get(K);if(q){const ie=F?{searchString:F.searchString,replaceString:F.replaceString,isReplaceRevealed:F.replaceString!==void 0,isRegex:F.isRegex,wholeWord:F.matchWholeWord,matchCase:F.isCaseSensitive,preserveCase:F.preserveCase}:{};await q.start({forceRevealReplace:!1,seedSearchStringFromSelection:q.getState().searchString.length===0&&K.getOption(41).seedSearchStringFromSelection!=="never"?"single":"none",seedSearchStringFromNonEmptySelection:K.getOption(41).seedSearchStringFromSelection==="selection",seedSearchStringFromGlobalClipboard:!0,shouldFocus:1,shouldAnimate:!0,updateSearchScope:F?.findInSelection||!1,loop:K.getOption(41).loop},ie),q.setGlobalBufferTerm(q.getState().searchString)}}}e.StartFindWithArgsAction=I;class T extends E.EditorAction{constructor(){super({id:v.FIND_IDS.StartFindWithSelection,label:n.localize(4,null),alias:"Find With Selection",precondition:void 0,kbOpts:{kbExpr:null,primary:0,mac:{primary:2083},weight:100}})}async run(V,K){const F=C.get(K);F&&(await F.start({forceRevealReplace:!1,seedSearchStringFromSelection:"multiple",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:K.getOption(41).loop}),F.setGlobalBufferTerm(F.getState().searchString))}}e.StartFindWithSelectionAction=T;class A extends E.EditorAction{async run(V,K){const F=C.get(K);F&&!this._run(F)&&(await F.start({forceRevealReplace:!1,seedSearchStringFromSelection:F.getState().searchString.length===0&&K.getOption(41).seedSearchStringFromSelection!=="never"?"single":"none",seedSearchStringFromNonEmptySelection:K.getOption(41).seedSearchStringFromSelection==="selection",seedSearchStringFromGlobalClipboard:!0,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:K.getOption(41).loop}),this._run(F))}}e.MatchFindAction=A;class P extends A{constructor(){super({id:v.FIND_IDS.NextMatchFindAction,label:n.localize(5,null),alias:"Find Next",precondition:void 0,kbOpts:[{kbExpr:p.EditorContextKeys.focus,primary:61,mac:{primary:2085,secondary:[61]},weight:100},{kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_FIND_INPUT_FOCUSED),primary:3,weight:100}]})}_run(V){return V.moveToNextMatch()?(V.editor.pushUndoStop(),!0):!1}}e.NextMatchFindAction=P;class N extends A{constructor(){super({id:v.FIND_IDS.PreviousMatchFindAction,label:n.localize(6,null),alias:"Find Previous",precondition:void 0,kbOpts:[{kbExpr:p.EditorContextKeys.focus,primary:1085,mac:{primary:3109,secondary:[1085]},weight:100},{kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_FIND_INPUT_FOCUSED),primary:1027,weight:100}]})}_run(V){return V.moveToPrevMatch()}}e.PreviousMatchFindAction=N;class M extends E.EditorAction{constructor(){super({id:v.FIND_IDS.GoToMatchFindAction,label:n.localize(7,null),alias:"Go to Match...",precondition:v.CONTEXT_FIND_WIDGET_VISIBLE}),this._highlightDecorations=[]}run(V,K,F){const q=C.get(K);if(!q)return;const ie=q.getState().matchesCount;if(ie<1){V.get(d.INotificationService).notify({severity:d.Severity.Warning,message:n.localize(8,null)});return}const ne=V.get(s.IQuickInputService).createInputBox();ne.placeholder=n.localize(9,null,ie);const $=Q=>{const re=parseInt(Q);if(isNaN(re))return;const de=q.getState().matchesCount;if(re>0&&re<=de)return re-1;if(re<0&&re>=-de)return de+re},J=Q=>{const re=$(Q);if(typeof re=="number"){ne.validationMessage=void 0,q.goToMatch(re);const de=q.getState().currentMatch;de&&this.addDecorations(K,de)}else ne.validationMessage=n.localize(10,null,q.getState().matchesCount),this.clearDecorations(K)};ne.onDidChangeValue(Q=>{J(Q)}),ne.onDidAccept(()=>{const Q=$(ne.value);typeof Q=="number"?(q.goToMatch(Q),ne.hide()):ne.validationMessage=n.localize(11,null,q.getState().matchesCount)}),ne.onDidHide(()=>{this.clearDecorations(K),ne.dispose()}),ne.show()}clearDecorations(V){V.changeDecorations(K=>{this._highlightDecorations=K.deltaDecorations(this._highlightDecorations,[])})}addDecorations(V,K){V.changeDecorations(F=>{this._highlightDecorations=F.deltaDecorations(this._highlightDecorations,[{range:K,options:{description:"find-match-quick-access-range-highlight",className:"rangeHighlight",isWholeLine:!0}},{range:K,options:{description:"find-match-quick-access-range-highlight-overview",overviewRuler:{color:(0,o.themeColorFromId)(S.overviewRulerRangeHighlight),position:_.OverviewRulerLane.Full}}}])})}}e.MoveToMatchFindAction=M;class R extends E.EditorAction{async run(V,K){const F=C.get(K);if(!F)return;const q=m(K,"single",!1);q&&F.setSearchString(q),this._run(F)||(await F.start({forceRevealReplace:!1,seedSearchStringFromSelection:"none",seedSearchStringFromNonEmptySelection:!1,seedSearchStringFromGlobalClipboard:!1,shouldFocus:0,shouldAnimate:!0,updateSearchScope:!1,loop:K.getOption(41).loop}),this._run(F))}}e.SelectionMatchFindAction=R;class x extends R{constructor(){super({id:v.FIND_IDS.NextSelectionMatchFindAction,label:n.localize(12,null),alias:"Find Next Selection",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:2109,weight:100}})}_run(V){return V.moveToNextMatch()}}e.NextSelectionMatchFindAction=x;class O extends R{constructor(){super({id:v.FIND_IDS.PreviousSelectionMatchFindAction,label:n.localize(13,null),alias:"Find Previous Selection",precondition:void 0,kbOpts:{kbExpr:p.EditorContextKeys.focus,primary:3133,weight:100}})}_run(V){return V.moveToPrevMatch()}}e.PreviousSelectionMatchFindAction=O,e.StartFindReplaceAction=(0,E.registerMultiEditorAction)(new E.MultiEditorAction({id:v.FIND_IDS.StartFindReplaceAction,label:n.localize(14,null),alias:"Replace",precondition:u.ContextKeyExpr.or(p.EditorContextKeys.focus,u.ContextKeyExpr.has("editorIsOpen")),kbOpts:{kbExpr:null,primary:2086,mac:{primary:2596},weight:100},menuOpts:{menuId:t.MenuId.MenubarEditMenu,group:"3_find",title:n.localize(15,null),order:2}})),e.StartFindReplaceAction.addImplementation(0,(W,V,K)=>{if(!V.hasModel()||V.getOption(90))return!1;const F=C.get(V);if(!F)return!1;const q=V.getSelection(),ie=F.isFindInputFocused(),ae=!q.isEmpty()&&q.startLineNumber===q.endLineNumber&&V.getOption(41).seedSearchStringFromSelection!=="never"&&!ie,ne=ie||ae?2:1;return F.start({forceRevealReplace:!0,seedSearchStringFromSelection:ae?"single":"none",seedSearchStringFromNonEmptySelection:V.getOption(41).seedSearchStringFromSelection==="selection",seedSearchStringFromGlobalClipboard:V.getOption(41).seedSearchStringFromSelection!=="never",shouldFocus:ne,shouldAnimate:!0,updateSearchScope:!1,loop:V.getOption(41).loop})}),(0,E.registerEditorContribution)(C.ID,w,0),(0,E.registerEditorAction)(I),(0,E.registerEditorAction)(T),(0,E.registerEditorAction)(P),(0,E.registerEditorAction)(N),(0,E.registerEditorAction)(M),(0,E.registerEditorAction)(x),(0,E.registerEditorAction)(O);const B=E.EditorCommand.bindToContribution(C.get);(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.CloseFindWidgetCommand,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.closeFindWidget(),kbOpts:{weight:100+5,kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,u.ContextKeyExpr.not("isComposing")),primary:9,secondary:[1033]}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleCaseSensitiveCommand,precondition:void 0,handler:W=>W.toggleCaseSensitive(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleCaseSensitiveKeybinding.primary,mac:v.ToggleCaseSensitiveKeybinding.mac,win:v.ToggleCaseSensitiveKeybinding.win,linux:v.ToggleCaseSensitiveKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleWholeWordCommand,precondition:void 0,handler:W=>W.toggleWholeWords(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleWholeWordKeybinding.primary,mac:v.ToggleWholeWordKeybinding.mac,win:v.ToggleWholeWordKeybinding.win,linux:v.ToggleWholeWordKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleRegexCommand,precondition:void 0,handler:W=>W.toggleRegex(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleRegexKeybinding.primary,mac:v.ToggleRegexKeybinding.mac,win:v.ToggleRegexKeybinding.win,linux:v.ToggleRegexKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ToggleSearchScopeCommand,precondition:void 0,handler:W=>W.toggleSearchScope(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.ToggleSearchScopeKeybinding.primary,mac:v.ToggleSearchScopeKeybinding.mac,win:v.ToggleSearchScopeKeybinding.win,linux:v.ToggleSearchScopeKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.TogglePreserveCaseCommand,precondition:void 0,handler:W=>W.togglePreserveCase(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:v.TogglePreserveCaseKeybinding.primary,mac:v.TogglePreserveCaseKeybinding.mac,win:v.TogglePreserveCaseKeybinding.win,linux:v.TogglePreserveCaseKeybinding.linux}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceOneAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replace(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:3094}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceOneAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replace(),kbOpts:{weight:100+5,kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_REPLACE_INPUT_FOCUSED),primary:3}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceAllAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replaceAll(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:2563}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.ReplaceAllAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.replaceAll(),kbOpts:{weight:100+5,kbExpr:u.ContextKeyExpr.and(p.EditorContextKeys.focus,v.CONTEXT_REPLACE_INPUT_FOCUSED),primary:void 0,mac:{primary:2051}}})),(0,E.registerEditorCommand)(new B({id:v.FIND_IDS.SelectAllMatchesAction,precondition:v.CONTEXT_FIND_WIDGET_VISIBLE,handler:W=>W.selectAllMatches(),kbOpts:{weight:100+5,kbExpr:p.EditorContextKeys.focus,primary:515}}))}),define(se[378],oe([1,0,26,41,38,675,29,82,23,28]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.FoldingDecorationProvider=e.foldingManualExpandedIcon=e.foldingManualCollapsedIcon=e.foldingCollapsedIcon=e.foldingExpandedIcon=void 0;const b=(0,S.registerColor)("editor.foldBackground",{light:(0,S.transparent)(S.editorSelectionBackground,.3),dark:(0,S.transparent)(S.editorSelectionBackground,.3),hcDark:null,hcLight:null},(0,E.localize)(0,null),!0);(0,S.registerColor)("editorGutter.foldingControlForeground",{dark:S.iconForeground,light:S.iconForeground,hcDark:S.iconForeground,hcLight:S.iconForeground},(0,E.localize)(1,null)),e.foldingExpandedIcon=(0,p.registerIcon)("folding-expanded",L.Codicon.chevronDown,(0,E.localize)(2,null)),e.foldingCollapsedIcon=(0,p.registerIcon)("folding-collapsed",L.Codicon.chevronRight,(0,E.localize)(3,null)),e.foldingManualCollapsedIcon=(0,p.registerIcon)("folding-manual-collapsed",e.foldingCollapsedIcon,(0,E.localize)(4,null)),e.foldingManualExpandedIcon=(0,p.registerIcon)("folding-manual-expanded",e.foldingExpandedIcon,(0,E.localize)(5,null));const a={color:(0,_.themeColorFromId)(b),position:k.MinimapPosition.Inline},i=(0,E.localize)(6,null),n=(0,E.localize)(7,null);class t{constructor(u){this.editor=u,this.showFoldingControls="mouseover",this.showFoldingHighlights=!0}getDecorationOption(u,f,c){return f?t.HIDDEN_RANGE_DECORATION:this.showFoldingControls==="never"?u?this.showFoldingHighlights?t.NO_CONTROLS_COLLAPSED_HIGHLIGHTED_RANGE_DECORATION:t.NO_CONTROLS_COLLAPSED_RANGE_DECORATION:t.NO_CONTROLS_EXPANDED_RANGE_DECORATION:u?c?this.showFoldingHighlights?t.MANUALLY_COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION:t.MANUALLY_COLLAPSED_VISUAL_DECORATION:this.showFoldingHighlights?t.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION:t.COLLAPSED_VISUAL_DECORATION:this.showFoldingControls==="mouseover"?c?t.MANUALLY_EXPANDED_AUTO_HIDE_VISUAL_DECORATION:t.EXPANDED_AUTO_HIDE_VISUAL_DECORATION:c?t.MANUALLY_EXPANDED_VISUAL_DECORATION:t.EXPANDED_VISUAL_DECORATION}changeDecorations(u){return this.editor.changeDecorations(u)}removeDecorations(u){this.editor.removeDecorations(u)}}e.FoldingDecorationProvider=t,t.COLLAPSED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-collapsed-visual-decoration",stickiness:0,afterContentClassName:"inline-folded",isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingCollapsedIcon)}),t.COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-collapsed-highlighted-visual-decoration",stickiness:0,afterContentClassName:"inline-folded",className:"folded-background",minimap:a,isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingCollapsedIcon)}),t.MANUALLY_COLLAPSED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-manually-collapsed-visual-decoration",stickiness:0,afterContentClassName:"inline-folded",isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingManualCollapsedIcon)}),t.MANUALLY_COLLAPSED_HIGHLIGHTED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-manually-collapsed-highlighted-visual-decoration",stickiness:0,afterContentClassName:"inline-folded",className:"folded-background",minimap:a,isWholeLine:!0,linesDecorationsTooltip:i,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingManualCollapsedIcon)}),t.NO_CONTROLS_COLLAPSED_RANGE_DECORATION=y.ModelDecorationOptions.register({description:"folding-no-controls-range-decoration",stickiness:0,afterContentClassName:"inline-folded",isWholeLine:!0,linesDecorationsTooltip:i}),t.NO_CONTROLS_COLLAPSED_HIGHLIGHTED_RANGE_DECORATION=y.ModelDecorationOptions.register({description:"folding-no-controls-range-decoration",stickiness:0,afterContentClassName:"inline-folded",className:"folded-background",minimap:a,isWholeLine:!0,linesDecorationsTooltip:i}),t.EXPANDED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-expanded-visual-decoration",stickiness:1,isWholeLine:!0,firstLineDecorationClassName:"alwaysShowFoldIcons "+v.ThemeIcon.asClassName(e.foldingExpandedIcon),linesDecorationsTooltip:n}),t.EXPANDED_AUTO_HIDE_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-expanded-auto-hide-visual-decoration",stickiness:1,isWholeLine:!0,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingExpandedIcon),linesDecorationsTooltip:n}),t.MANUALLY_EXPANDED_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-manually-expanded-visual-decoration",stickiness:0,isWholeLine:!0,firstLineDecorationClassName:"alwaysShowFoldIcons "+v.ThemeIcon.asClassName(e.foldingManualExpandedIcon),linesDecorationsTooltip:n}),t.MANUALLY_EXPANDED_AUTO_HIDE_VISUAL_DECORATION=y.ModelDecorationOptions.register({description:"folding-manually-expanded-auto-hide-visual-decoration",stickiness:0,isWholeLine:!0,firstLineDecorationClassName:v.ThemeIcon.asClassName(e.foldingManualExpandedIcon),linesDecorationsTooltip:n}),t.NO_CONTROLS_EXPANDED_RANGE_DECORATION=y.ModelDecorationOptions.register({description:"folding-no-controls-range-decoration",stickiness:0,isWholeLine:!0}),t.HIDDEN_RANGE_DECORATION=y.ModelDecorationOptions.register({description:"folding-hidden-range-decoration",stickiness:1})}),define(se[261],oe([1,0,14,19,12,65,2,11,20,127,16,21,31,32,302,558,303,674,15,378,185,304,50,79,61,18,6,25,22,51,27,461]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){"use strict";var A;Object.defineProperty(e,"__esModule",{value:!0}),e.RangesLimitReporter=e.FoldingController=void 0;const P=new c.RawContextKey("foldingEnabled",!1);let N=A=class extends S.Disposable{static get(G){return G.getContribution(A.ID)}static getFoldingRangeProviders(G,z){var H,Y;const j=G.foldingRangeProvider.ordered(z);return(Y=(H=A._foldingRangeSelector)===null||H===void 0?void 0:H.call(A,j,z))!==null&&Y!==void 0?Y:j}constructor(G,z,H,Y,j,Z){super(),this.contextKeyService=z,this.languageConfigurationService=H,this.languageFeaturesService=Z,this.localToDispose=this._register(new S.DisposableStore),this.editor=G,this._foldingLimitReporter=new M(G);const ee=this.editor.getOptions();this._isEnabled=ee.get(43),this._useFoldingProviders=ee.get(44)!=="indentation",this._unfoldOnClickAfterEndOfLine=ee.get(48),this._restoringViewState=!1,this._currentModelHasFoldedImports=!1,this._foldingImportsByDefault=ee.get(46),this.updateDebounceInfo=j.for(Z.foldingRangeProvider,"Folding",{min:200}),this.foldingModel=null,this.hiddenRangeModel=null,this.rangeProvider=null,this.foldingRegionPromise=null,this.foldingModelPromise=null,this.updateScheduler=null,this.cursorChangedScheduler=null,this.mouseDownInfo=null,this.foldingDecorationProvider=new d.FoldingDecorationProvider(G),this.foldingDecorationProvider.showFoldingControls=ee.get(109),this.foldingDecorationProvider.showFoldingHighlights=ee.get(45),this.foldingEnabled=P.bindTo(this.contextKeyService),this.foldingEnabled.set(this._isEnabled),this._register(this.editor.onDidChangeModel(()=>this.onModelChanged())),this._register(this.editor.onDidChangeConfiguration(le=>{if(le.hasChanged(43)&&(this._isEnabled=this.editor.getOptions().get(43),this.foldingEnabled.set(this._isEnabled),this.onModelChanged()),le.hasChanged(47)&&this.onModelChanged(),le.hasChanged(109)||le.hasChanged(45)){const ue=this.editor.getOptions();this.foldingDecorationProvider.showFoldingControls=ue.get(109),this.foldingDecorationProvider.showFoldingHighlights=ue.get(45),this.triggerFoldingModelChanged()}le.hasChanged(44)&&(this._useFoldingProviders=this.editor.getOptions().get(44)!=="indentation",this.onFoldingStrategyChanged()),le.hasChanged(48)&&(this._unfoldOnClickAfterEndOfLine=this.editor.getOptions().get(48)),le.hasChanged(46)&&(this._foldingImportsByDefault=this.editor.getOptions().get(46))})),this.onModelChanged()}saveViewState(){const G=this.editor.getModel();if(!G||!this._isEnabled||G.isTooLargeForTokenization())return{};if(this.foldingModel){const z=this.foldingModel.getMemento(),H=this.rangeProvider?this.rangeProvider.id:void 0;return{collapsedRegions:z,lineCount:G.getLineCount(),provider:H,foldedImports:this._currentModelHasFoldedImports}}}restoreViewState(G){const z=this.editor.getModel();if(!(!z||!this._isEnabled||z.isTooLargeForTokenization()||!this.hiddenRangeModel)&&G&&(this._currentModelHasFoldedImports=!!G.foldedImports,G.collapsedRegions&&G.collapsedRegions.length>0&&this.foldingModel)){this._restoringViewState=!0;try{this.foldingModel.applyMemento(G.collapsedRegions)}finally{this._restoringViewState=!1}}}onModelChanged(){this.localToDispose.clear();const G=this.editor.getModel();!this._isEnabled||!G||G.isTooLargeForTokenization()||(this._currentModelHasFoldedImports=!1,this.foldingModel=new t.FoldingModel(G,this.foldingDecorationProvider),this.localToDispose.add(this.foldingModel),this.hiddenRangeModel=new r.HiddenRangeModel(this.foldingModel),this.localToDispose.add(this.hiddenRangeModel),this.localToDispose.add(this.hiddenRangeModel.onDidChange(z=>this.onHiddenRangesChanges(z))),this.updateScheduler=new L.Delayer(this.updateDebounceInfo.get(G)),this.cursorChangedScheduler=new L.RunOnceScheduler(()=>this.revealCursor(),200),this.localToDispose.add(this.cursorChangedScheduler),this.localToDispose.add(this.languageFeaturesService.foldingRangeProvider.onDidChange(()=>this.onFoldingStrategyChanged())),this.localToDispose.add(this.editor.onDidChangeModelLanguageConfiguration(()=>this.onFoldingStrategyChanged())),this.localToDispose.add(this.editor.onDidChangeModelContent(z=>this.onDidChangeModelContent(z))),this.localToDispose.add(this.editor.onDidChangeCursorPosition(()=>this.onCursorPositionChanged())),this.localToDispose.add(this.editor.onMouseDown(z=>this.onEditorMouseDown(z))),this.localToDispose.add(this.editor.onMouseUp(z=>this.onEditorMouseUp(z))),this.localToDispose.add({dispose:()=>{var z,H;this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),(z=this.updateScheduler)===null||z===void 0||z.cancel(),this.updateScheduler=null,this.foldingModel=null,this.foldingModelPromise=null,this.hiddenRangeModel=null,this.cursorChangedScheduler=null,(H=this.rangeProvider)===null||H===void 0||H.dispose(),this.rangeProvider=null}}),this.triggerFoldingModelChanged())}onFoldingStrategyChanged(){var G;(G=this.rangeProvider)===null||G===void 0||G.dispose(),this.rangeProvider=null,this.triggerFoldingModelChanged()}getRangeProvider(G){if(this.rangeProvider)return this.rangeProvider;const z=new u.IndentRangeProvider(G,this.languageConfigurationService,this._foldingLimitReporter);if(this.rangeProvider=z,this._useFoldingProviders&&this.foldingModel){const H=A.getFoldingRangeProviders(this.languageFeaturesService,G);H.length>0&&(this.rangeProvider=new l.SyntaxRangeProvider(G,H,()=>this.triggerFoldingModelChanged(),this._foldingLimitReporter,z))}return this.rangeProvider}getFoldingModel(){return this.foldingModelPromise}onDidChangeModelContent(G){var z;(z=this.hiddenRangeModel)===null||z===void 0||z.notifyChangeModelContent(G),this.triggerFoldingModelChanged()}triggerFoldingModelChanged(){this.updateScheduler&&(this.foldingRegionPromise&&(this.foldingRegionPromise.cancel(),this.foldingRegionPromise=null),this.foldingModelPromise=this.updateScheduler.trigger(()=>{const G=this.foldingModel;if(!G)return null;const z=new h.StopWatch,H=this.getRangeProvider(G.textModel),Y=this.foldingRegionPromise=(0,L.createCancelablePromise)(j=>H.compute(j));return Y.then(j=>{if(j&&Y===this.foldingRegionPromise){let Z;if(this._foldingImportsByDefault&&!this._currentModelHasFoldedImports){const ce=j.setCollapsedAllOfType(i.FoldingRangeKind.Imports.value,!0);ce&&(Z=v.StableEditorScrollState.capture(this.editor),this._currentModelHasFoldedImports=ce)}const ee=this.editor.getSelections(),le=ee?ee.map(ce=>ce.startLineNumber):[];G.update(j,le),Z?.restore(this.editor);const ue=this.updateDebounceInfo.update(G.textModel,z.elapsed());this.updateScheduler&&(this.updateScheduler.defaultDelay=ue)}return G})}).then(void 0,G=>((0,y.onUnexpectedError)(G),null)))}onHiddenRangesChanges(G){if(this.hiddenRangeModel&&G.length&&!this._restoringViewState){const z=this.editor.getSelections();z&&this.hiddenRangeModel.adjustSelections(z)&&this.editor.setSelections(z)}this.editor.setHiddenAreas(G,this)}onCursorPositionChanged(){this.hiddenRangeModel&&this.hiddenRangeModel.hasRanges()&&this.cursorChangedScheduler.schedule()}revealCursor(){const G=this.getFoldingModel();G&&G.then(z=>{if(z){const H=this.editor.getSelections();if(H&&H.length>0){const Y=[];for(const j of H){const Z=j.selectionStartLineNumber;this.hiddenRangeModel&&this.hiddenRangeModel.isHidden(Z)&&Y.push(...z.getAllRegionsAtLine(Z,ee=>ee.isCollapsed&&Z>ee.startLineNumber))}Y.length&&(z.toggleCollapseState(Y),this.reveal(H[0].getPosition()))}}}).then(void 0,y.onUnexpectedError)}onEditorMouseDown(G){if(this.mouseDownInfo=null,!this.hiddenRangeModel||!G.target||!G.target.range||!G.event.leftButton&&!G.event.middleButton)return;const z=G.target.range;let H=!1;switch(G.target.type){case 4:{const Y=G.target.detail,j=G.target.element.offsetLeft;if(Y.offsetX-j<4)return;H=!0;break}case 7:{if(this._unfoldOnClickAfterEndOfLine&&this.hiddenRangeModel.hasRanges()&&!G.target.detail.isAfterLines)break;return}case 6:{if(this.hiddenRangeModel.hasRanges()){const Y=this.editor.getModel();if(Y&&z.startColumn===Y.getLineMaxColumn(z.startLineNumber))break}return}default:return}this.mouseDownInfo={lineNumber:z.startLineNumber,iconClicked:H}}onEditorMouseUp(G){const z=this.foldingModel;if(!z||!this.mouseDownInfo||!G.target)return;const H=this.mouseDownInfo.lineNumber,Y=this.mouseDownInfo.iconClicked,j=G.target.range;if(!j||j.startLineNumber!==H)return;if(Y){if(G.target.type!==4)return}else{const ee=this.editor.getModel();if(!ee||j.startColumn!==ee.getLineMaxColumn(H))return}const Z=z.getRegionAtLine(H);if(Z&&Z.startLineNumber===H){const ee=Z.isCollapsed;if(Y||ee){const le=G.event.altKey;let ue=[];if(le){const ce=ve=>!ve.containedBy(Z)&&!Z.containedBy(ve),pe=z.getRegionsInside(null,ce);for(const ve of pe)ve.isCollapsed&&ue.push(ve);ue.length===0&&(ue=pe)}else{const ce=G.event.middleButton||G.event.shiftKey;if(ce)for(const pe of z.getRegionsInside(Z))pe.isCollapsed===ee&&ue.push(pe);(ee||!ce||ue.length===0)&&ue.push(Z)}z.toggleCollapseState(ue),this.reveal({lineNumber:H,column:1})}}}reveal(G){this.editor.revealPositionInCenterIfOutsideViewport(G,0)}};e.FoldingController=N,N.ID="editor.contrib.folding",e.FoldingController=N=A=ke([ge(1,c.IContextKeyService),ge(2,n.ILanguageConfigurationService),ge(3,o.INotificationService),ge(4,g.ILanguageFeatureDebounceService),ge(5,m.ILanguageFeaturesService)],N);class M{constructor(G){this.editor=G,this._onDidChange=new C.Emitter,this._computed=0,this._limited=!1}get limit(){return this.editor.getOptions().get(47)}update(G,z){(G!==this._computed||z!==this._limited)&&(this._computed=G,this._limited=z,this._onDidChange.fire())}}e.RangesLimitReporter=M;class R extends b.EditorAction{runEditorCommand(G,z,H){const Y=G.get(n.ILanguageConfigurationService),j=N.get(z);if(!j)return;const Z=j.getFoldingModel();if(Z)return this.reportTelemetry(G,z),Z.then(ee=>{if(ee){this.invoke(j,ee,z,H,Y);const le=z.getSelection();le&&j.reveal(le.getStartPosition())}})}getSelectedLines(G){const z=G.getSelections();return z?z.map(H=>H.startLineNumber):[]}getLineNumbers(G,z){return G&&G.selectionLines?G.selectionLines.map(H=>H+1):this.getSelectedLines(z)}run(G,z){}}function x(U){if(!_.isUndefined(U)){if(!_.isObject(U))return!1;const G=U;if(!_.isUndefined(G.levels)&&!_.isNumber(G.levels)||!_.isUndefined(G.direction)&&!_.isString(G.direction)||!_.isUndefined(G.selectionLines)&&(!Array.isArray(G.selectionLines)||!G.selectionLines.every(_.isNumber)))return!1}return!0}class O extends R{constructor(){super({id:"editor.unfold",label:f.localize(0,null),alias:"Unfold",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:3166,mac:{primary:2654},weight:100},metadata:{description:"Unfold the content in the editor",args:[{name:"Unfold editor argument",description:`Property-value pairs that can be passed through this argument: * 'levels': Number of levels to unfold. If not set, defaults to 1. * 'direction': If 'up', unfold given number of levels up otherwise unfolds down. * 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the unfold action to. If not set, the active selection(s) will be used. `,constraint:x,schema:{type:"object",properties:{levels:{type:"number",default:1},direction:{type:"string",enum:["up","down"],default:"down"},selectionLines:{type:"array",items:{type:"number"}}}}}]}})}invoke(G,z,H,Y){const j=Y&&Y.levels||1,Z=this.getLineNumbers(Y,H);Y&&Y.direction==="up"?(0,t.setCollapseStateLevelsUp)(z,!1,j,Z):(0,t.setCollapseStateLevelsDown)(z,!1,j,Z)}}class B extends R{constructor(){super({id:"editor.unfoldRecursively",label:f.localize(1,null),alias:"Unfold Recursively",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2142),weight:100}})}invoke(G,z,H,Y){(0,t.setCollapseStateLevelsDown)(z,!1,Number.MAX_VALUE,this.getSelectedLines(H))}}class W extends R{constructor(){super({id:"editor.fold",label:f.localize(2,null),alias:"Fold",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:3164,mac:{primary:2652},weight:100},metadata:{description:"Fold the content in the editor",args:[{name:"Fold editor argument",description:`Property-value pairs that can be passed through this argument: * 'levels': Number of levels to fold. * 'direction': If 'up', folds given number of levels up otherwise folds down. * 'selectionLines': Array of the start lines (0-based) of the editor selections to apply the fold action to. If not set, the active selection(s) will be used. If no levels or direction is set, folds the region at the locations or if already collapsed, the first uncollapsed parent instead. `,constraint:x,schema:{type:"object",properties:{levels:{type:"number"},direction:{type:"string",enum:["up","down"]},selectionLines:{type:"array",items:{type:"number"}}}}}]}})}invoke(G,z,H,Y){const j=this.getLineNumbers(Y,H),Z=Y&&Y.levels,ee=Y&&Y.direction;typeof Z!="number"&&typeof ee!="string"?(0,t.setCollapseStateUp)(z,!0,j):ee==="up"?(0,t.setCollapseStateLevelsUp)(z,!0,Z||1,j):(0,t.setCollapseStateLevelsDown)(z,!0,Z||1,j)}}class V extends R{constructor(){super({id:"editor.toggleFold",label:f.localize(3,null),alias:"Toggle Fold",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2090),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.toggleCollapseState)(z,1,Y)}}class K extends R{constructor(){super({id:"editor.foldRecursively",label:f.localize(4,null),alias:"Fold Recursively",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2140),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.setCollapseStateLevelsDown)(z,!0,Number.MAX_VALUE,Y)}}class F extends R{constructor(){super({id:"editor.foldAllBlockComments",label:f.localize(5,null),alias:"Fold All Block Comments",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2138),weight:100}})}invoke(G,z,H,Y,j){if(z.regions.hasTypes())(0,t.setCollapseStateForType)(z,i.FoldingRangeKind.Comment.value,!0);else{const Z=H.getModel();if(!Z)return;const ee=j.getLanguageConfiguration(Z.getLanguageId()).comments;if(ee&&ee.blockCommentStartToken){const le=new RegExp("^\\s*"+(0,p.escapeRegExpCharacters)(ee.blockCommentStartToken));(0,t.setCollapseStateForMatchingLines)(z,le,!0)}}}}class q extends R{constructor(){super({id:"editor.foldAllMarkerRegions",label:f.localize(6,null),alias:"Fold All Regions",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2077),weight:100}})}invoke(G,z,H,Y,j){if(z.regions.hasTypes())(0,t.setCollapseStateForType)(z,i.FoldingRangeKind.Region.value,!0);else{const Z=H.getModel();if(!Z)return;const ee=j.getLanguageConfiguration(Z.getLanguageId()).foldingRules;if(ee&&ee.markers&&ee.markers.start){const le=new RegExp(ee.markers.start);(0,t.setCollapseStateForMatchingLines)(z,le,!0)}}}}class ie extends R{constructor(){super({id:"editor.unfoldAllMarkerRegions",label:f.localize(7,null),alias:"Unfold All Regions",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2078),weight:100}})}invoke(G,z,H,Y,j){if(z.regions.hasTypes())(0,t.setCollapseStateForType)(z,i.FoldingRangeKind.Region.value,!1);else{const Z=H.getModel();if(!Z)return;const ee=j.getLanguageConfiguration(Z.getLanguageId()).foldingRules;if(ee&&ee.markers&&ee.markers.start){const le=new RegExp(ee.markers.start);(0,t.setCollapseStateForMatchingLines)(z,le,!1)}}}}class ae extends R{constructor(){super({id:"editor.foldAllExcept",label:f.localize(8,null),alias:"Fold All Except Selected",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2136),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.setCollapseStateForRest)(z,!0,Y)}}class ne extends R{constructor(){super({id:"editor.unfoldAllExcept",label:f.localize(9,null),alias:"Unfold All Except Selected",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2134),weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);(0,t.setCollapseStateForRest)(z,!1,Y)}}class $ extends R{constructor(){super({id:"editor.foldAll",label:f.localize(10,null),alias:"Fold All",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2069),weight:100}})}invoke(G,z,H){(0,t.setCollapseStateLevelsDown)(z,!0)}}class J extends R{constructor(){super({id:"editor.unfoldAll",label:f.localize(11,null),alias:"Unfold All",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2088),weight:100}})}invoke(G,z,H){(0,t.setCollapseStateLevelsDown)(z,!1)}}class Q extends R{getFoldingLevel(){return parseInt(this.id.substr(Q.ID_PREFIX.length))}invoke(G,z,H){(0,t.setCollapseStateAtLevel)(z,this.getFoldingLevel(),!0,this.getSelectedLines(H))}}Q.ID_PREFIX="editor.foldLevel",Q.ID=U=>Q.ID_PREFIX+U;class re extends R{constructor(){super({id:"editor.gotoParentFold",label:f.localize(12,null),alias:"Go to Parent Fold",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);if(Y.length>0){const j=(0,t.getParentFoldLine)(Y[0],z);j!==null&&H.setSelection({startLineNumber:j,startColumn:1,endLineNumber:j,endColumn:1})}}}class de extends R{constructor(){super({id:"editor.gotoPreviousFold",label:f.localize(13,null),alias:"Go to Previous Folding Range",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);if(Y.length>0){const j=(0,t.getPreviousFoldLine)(Y[0],z);j!==null&&H.setSelection({startLineNumber:j,startColumn:1,endLineNumber:j,endColumn:1})}}}class he extends R{constructor(){super({id:"editor.gotoNextFold",label:f.localize(14,null),alias:"Go to Next Folding Range",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,weight:100}})}invoke(G,z,H){const Y=this.getSelectedLines(H);if(Y.length>0){const j=(0,t.getNextFoldLine)(Y[0],z);j!==null&&H.setSelection({startLineNumber:j,startColumn:1,endLineNumber:j,endColumn:1})}}}class me extends R{constructor(){super({id:"editor.createFoldingRangeFromSelection",label:f.localize(15,null),alias:"Create Folding Range from Selection",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2135),weight:100}})}invoke(G,z,H){var Y;const j=[],Z=H.getSelections();if(Z){for(const ee of Z){let le=ee.endLineNumber;ee.endColumn===1&&--le,le>ee.startLineNumber&&(j.push({startLineNumber:ee.startLineNumber,endLineNumber:le,type:void 0,isCollapsed:!0,source:1}),H.setSelection({startLineNumber:ee.startLineNumber,startColumn:1,endLineNumber:ee.startLineNumber,endColumn:1}))}if(j.length>0){j.sort((le,ue)=>le.startLineNumber-ue.startLineNumber);const ee=s.FoldingRegions.sanitizeAndMerge(z.regions,j,(Y=H.getModel())===null||Y===void 0?void 0:Y.getLineCount());z.updatePost(s.FoldingRegions.fromFoldRanges(ee))}}}}class X extends R{constructor(){super({id:"editor.removeManualFoldingRanges",label:f.localize(16,null),alias:"Remove Manual Folding Ranges",precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2137),weight:100}})}invoke(G,z,H){const Y=H.getSelections();if(Y){const j=[];for(const Z of Y){const{startLineNumber:ee,endLineNumber:le}=Z;j.push(le>=ee?{startLineNumber:ee,endLineNumber:le}:{endLineNumber:le,startLineNumber:ee})}z.removeManualRanges(j),G.triggerFoldingModelChanged()}}}(0,b.registerEditorContribution)(N.ID,N,0),(0,b.registerEditorAction)(O),(0,b.registerEditorAction)(B),(0,b.registerEditorAction)(W),(0,b.registerEditorAction)(K),(0,b.registerEditorAction)($),(0,b.registerEditorAction)(J),(0,b.registerEditorAction)(F),(0,b.registerEditorAction)(q),(0,b.registerEditorAction)(ie),(0,b.registerEditorAction)(ae),(0,b.registerEditorAction)(ne),(0,b.registerEditorAction)(V),(0,b.registerEditorAction)(re),(0,b.registerEditorAction)(de),(0,b.registerEditorAction)(he),(0,b.registerEditorAction)(me),(0,b.registerEditorAction)(X);for(let U=1;U<=7;U++)(0,b.registerInstantiatedEditorAction)(new Q({id:Q.ID(U),label:f.localize(17,null,U),alias:`Fold Level ${U}`,precondition:P,kbOpts:{kbExpr:a.EditorContextKeys.editorTextFocus,primary:(0,E.KeyChord)(2089,2048|21+U),weight:100}}));w.CommandsRegistry.registerCommand("_executeFoldingRangeProvider",async function(U,...G){const[z]=G;if(!(z instanceof D.URI))throw(0,y.illegalArgument)();const H=U.get(m.ILanguageFeaturesService),Y=U.get(I.IModelService).getModel(z);if(!Y)throw(0,y.illegalArgument)();const j=U.get(T.IConfigurationService);if(!j.getValue("editor.folding",{resource:z}))return[];const Z=U.get(n.ILanguageConfigurationService),ee=j.getValue("editor.foldingStrategy",{resource:z}),le={get limit(){return j.getValue("editor.foldingMaximumRegions",{resource:z})},update:(Ce,Se)=>{}},ue=new u.IndentRangeProvider(Y,Z,le);let ce=ue;if(ee!=="indentation"){const Ce=N.getFoldingRangeProviders(H,Y);Ce.length&&(ce=new l.SyntaxRangeProvider(Y,Ce,()=>{},le,ue))}const pe=await ce.compute(k.CancellationToken.None),ve=[];try{if(pe)for(let Ce=0;CeB.hoverOrdinal-W.hoverOrdinal),this._computer=new P(this._editor,this._participants),this._hoverOperation=this._register(new b.HoverOperation(this._editor,this._computer)),this._register(this._hoverOperation.onResult(B=>{if(!this._computer.anchor)return;const W=B.hasLoadingMessage?this._addLoadingMessage(B.value):B.value;this._withResult(new h(this._computer.anchor,W,B.isComplete))})),this._register(L.addStandardDisposableListener(this._widget.getDomNode(),"keydown",B=>{B.equals(9)&&this.hide()})),this._register(v.TokenizationRegistry.onDidChange(()=>{this._widget.position&&this._currentResult&&this._setCurrentResult(this._currentResult)}))}_startShowingOrUpdateHover(R,x,O,B,W){return!this._widget.position||!this._currentResult?R?(this._startHoverOperationIfNecessary(R,x,O,B,!1),!0):!1:this._editor.getOption(60).sticky&&W&&this._widget.isMouseGettingCloser(W.event.posx,W.event.posy)?(R&&this._startHoverOperationIfNecessary(R,x,O,B,!0),!0):R?R&&this._currentResult.anchor.equals(R)?!0:R.canAdoptVisibleHover(this._currentResult.anchor,this._widget.position)?(this._setCurrentResult(this._currentResult.filter(R)),this._startHoverOperationIfNecessary(R,x,O,B,!1),!0):(this._setCurrentResult(null),this._startHoverOperationIfNecessary(R,x,O,B,!1),!0):(this._setCurrentResult(null),!1)}_startHoverOperationIfNecessary(R,x,O,B,W){this._computer.anchor&&this._computer.anchor.equals(R)||(this._hoverOperation.cancel(),this._computer.anchor=R,this._computer.shouldFocus=B,this._computer.source=O,this._computer.insistOnKeepingHoverVisible=W,this._hoverOperation.start(x))}_setCurrentResult(R){this._currentResult!==R&&(R&&R.messages.length===0&&(R=null),this._currentResult=R,this._currentResult?this._renderMessages(this._currentResult.anchor,this._currentResult.messages):this._widget.hide())}_addLoadingMessage(R){if(this._computer.anchor){for(const x of this._participants)if(x.createLoadingMessage){const O=x.createLoadingMessage(this._computer.anchor);if(O)return R.slice(0).concat([O])}}return R}_withResult(R){this._widget.position&&this._currentResult&&this._currentResult.isComplete&&(!R.isComplete||this._computer.insistOnKeepingHoverVisible&&R.messages.length===0)||this._setCurrentResult(R)}_renderMessages(R,x){const{showAtPosition:O,showAtSecondaryPosition:B,highlightRange:W}=s.computeHoverRanges(this._editor,R.range,x),V=new E.DisposableStore,K=V.add(new A(this._keybindingService)),F=document.createDocumentFragment();let q=null;const ie={fragment:F,statusBar:K,setColorPicker:ne=>q=ne,onContentsChanged:()=>this._widget.onContentsChanged(),setMinimumDimensions:ne=>this._widget.setMinimumDimensions(ne),hide:()=>this.hide()};for(const ne of this._participants){const $=x.filter(J=>J.owner===ne);$.length>0&&V.add(ne.renderHoverParts(ie,$))}const ae=x.some(ne=>ne.isBeforeContent);if(K.hasContent&&F.appendChild(K.hoverElement),F.hasChildNodes()){if(W){const ne=this._editor.createDecorationsCollection();ne.set([{range:W,options:s._DECORATION_OPTIONS}]),V.add((0,E.toDisposable)(()=>{ne.clear()}))}this._widget.showAt(F,new C(R.initialMousePosX,R.initialMousePosY,q,O,B,this._editor.getOption(60).above,this._computer.shouldFocus,this._computer.source,ae,V))}else V.dispose()}static computeHoverRanges(R,x,O){let B=1;if(R.hasModel()){const ae=R._getViewModel(),ne=ae.coordinatesConverter,$=ne.convertModelRangeToViewRange(x),J=new S.Position($.startLineNumber,ae.getLineMinColumn($.startLineNumber));B=ne.convertViewPositionToModelPosition(J).column}const W=x.startLineNumber;let V=x.startColumn,K=O[0].range,F=null;for(const ae of O)K=p.Range.plusRange(K,ae.range),ae.range.startLineNumber===W&&ae.range.endLineNumber===W&&(V=Math.max(Math.min(V,ae.range.startColumn),B)),ae.forceShowAtRange&&(F=ae.range);const q=F?F.getStartPosition():new S.Position(W,x.startColumn),ie=F?F.getStartPosition():new S.Position(W,V);return{showAtPosition:q,showAtSecondaryPosition:ie,highlightRange:K}}showsOrWillShow(R){if(this._widget.isResizing)return!0;const x=[];for(const B of this._participants)if(B.suggestHoverAnchor){const W=B.suggestHoverAnchor(R);W&&x.push(W)}const O=R.target;if(O.type===6&&x.push(new a.HoverRangeAnchor(0,O.range,R.event.posx,R.event.posy)),O.type===7){const B=this._editor.getOption(50).typicalHalfwidthCharacterWidth/2;!O.detail.isAfterLines&&typeof O.detail.horizontalDistanceToText=="number"&&O.detail.horizontalDistanceToTextW.priority-B.priority),this._startShowingOrUpdateHover(x[0],0,0,!1,R))}startShowingAtRange(R,x,O,B){this._startShowingOrUpdateHover(new a.HoverRangeAnchor(0,R,void 0,void 0),x,O,B,null)}containsNode(R){return R?this._widget.getDomNode().contains(R):!1}focus(){this._widget.focus()}scrollUp(){this._widget.scrollUp()}scrollDown(){this._widget.scrollDown()}scrollLeft(){this._widget.scrollLeft()}scrollRight(){this._widget.scrollRight()}pageUp(){this._widget.pageUp()}pageDown(){this._widget.pageDown()}goToTop(){this._widget.goToTop()}goToBottom(){this._widget.goToBottom()}hide(){this._computer.anchor=null,this._hoverOperation.cancel(),this._setCurrentResult(null)}get isColorPickerVisible(){return this._widget.isColorPickerVisible}get isVisibleFromKeyboard(){return this._widget.isVisibleFromKeyboard}get isVisible(){return this._widget.isVisible}get isFocused(){return this._widget.isFocused}get isResizing(){return this._widget.isResizing}get widget(){return this._widget}};e.ContentHoverController=g,g._DECORATION_OPTIONS=_.ModelDecorationOptions.register({description:"content-hover-highlight",className:"hoverHighlight"}),e.ContentHoverController=g=s=ke([ge(1,i.IInstantiationService),ge(2,n.IKeybindingService)],g);class h{constructor(R,x,O){this.anchor=R,this.messages=x,this.isComplete=O}filter(R){const x=this.messages.filter(O=>O.isValidForHoverAnchor(R));return x.length===this.messages.length?this:new m(this,this.anchor,x,this.isComplete)}}class m extends h{constructor(R,x,O,B){super(x,O,B),this.original=R}filter(R){return this.original.filter(R)}}class C{constructor(R,x,O,B,W,V,K,F,q,ie){this.initialMousePosX=R,this.initialMousePosY=x,this.colorPicker=O,this.showAtPosition=B,this.showAtSecondaryPosition=W,this.preferAbove=V,this.stoleFocus=K,this.source=F,this.isBeforeContent=q,this.disposables=ie,this.closestMouseDistance=void 0}}const w=30,D=10,I=6;let T=l=class extends f.ResizableContentWidget{get isColorPickerVisible(){var R;return!!(!((R=this._visibleData)===null||R===void 0)&&R.colorPicker)}get isVisibleFromKeyboard(){var R;return((R=this._visibleData)===null||R===void 0?void 0:R.source)===1}get isVisible(){var R;return(R=this._hoverVisibleKey.get())!==null&&R!==void 0?R:!1}get isFocused(){var R;return(R=this._hoverFocusedKey.get())!==null&&R!==void 0?R:!1}constructor(R,x,O,B,W){const V=R.getOption(66)+8,K=150,F=new L.Dimension(K,V);super(R,F),this._configurationService=O,this._accessibilityService=B,this._keybindingService=W,this._hover=this._register(new k.HoverWidget),this._minimumSize=F,this._hoverVisibleKey=r.EditorContextKeys.hoverVisible.bindTo(x),this._hoverFocusedKey=r.EditorContextKeys.hoverFocused.bindTo(x),L.append(this._resizableNode.domNode,this._hover.containerDomNode),this._resizableNode.domNode.style.zIndex="50",this._register(this._editor.onDidLayoutChange(()=>{this.isVisible&&this._updateMaxDimensions()})),this._register(this._editor.onDidChangeConfiguration(ie=>{ie.hasChanged(50)&&this._updateFont()}));const q=this._register(L.trackFocus(this._resizableNode.domNode));this._register(q.onDidFocus(()=>{this._hoverFocusedKey.set(!0)})),this._register(q.onDidBlur(()=>{this._hoverFocusedKey.set(!1)})),this._setHoverData(void 0),this._editor.addContentWidget(this)}dispose(){var R;super.dispose(),(R=this._visibleData)===null||R===void 0||R.disposables.dispose(),this._editor.removeContentWidget(this)}getId(){return l.ID}static _applyDimensions(R,x,O){const B=typeof x=="number"?`${x}px`:x,W=typeof O=="number"?`${O}px`:O;R.style.width=B,R.style.height=W}_setContentsDomNodeDimensions(R,x){const O=this._hover.contentsDomNode;return l._applyDimensions(O,R,x)}_setContainerDomNodeDimensions(R,x){const O=this._hover.containerDomNode;return l._applyDimensions(O,R,x)}_setHoverWidgetDimensions(R,x){this._setContentsDomNodeDimensions(R,x),this._setContainerDomNodeDimensions(R,x),this._layoutContentWidget()}static _applyMaxDimensions(R,x,O){const B=typeof x=="number"?`${x}px`:x,W=typeof O=="number"?`${O}px`:O;R.style.maxWidth=B,R.style.maxHeight=W}_setHoverWidgetMaxDimensions(R,x){l._applyMaxDimensions(this._hover.contentsDomNode,R,x),l._applyMaxDimensions(this._hover.containerDomNode,R,x),this._hover.containerDomNode.style.setProperty("--vscode-hover-maxWidth",typeof R=="number"?`${R}px`:R),this._layoutContentWidget()}_hasHorizontalScrollbar(){const R=this._hover.scrollbar.getScrollDimensions();return R.scrollWidth>R.width}_adjustContentsBottomPadding(){const R=this._hover.contentsDomNode,x=`${this._hover.scrollbar.options.horizontalScrollbarSize}px`;R.style.paddingBottom!==x&&(R.style.paddingBottom=x)}_setAdjustedHoverWidgetDimensions(R){this._setHoverWidgetMaxDimensions("none","none");const x=R.width,O=R.height;this._setHoverWidgetDimensions(x,O),this._hasHorizontalScrollbar()&&(this._adjustContentsBottomPadding(),this._setContentsDomNodeDimensions(x,O-D))}_updateResizableNodeMaxDimensions(){var R,x;const O=(R=this._findMaximumRenderingWidth())!==null&&R!==void 0?R:1/0,B=(x=this._findMaximumRenderingHeight())!==null&&x!==void 0?x:1/0;this._resizableNode.maxSize=new L.Dimension(O,B),this._setHoverWidgetMaxDimensions(O,B)}_resize(R){var x,O;l._lastDimensions=new L.Dimension(R.width,R.height),this._setAdjustedHoverWidgetDimensions(R),this._resizableNode.layout(R.height,R.width),this._updateResizableNodeMaxDimensions(),this._hover.scrollbar.scanDomNode(),this._editor.layoutContentWidget(this),(O=(x=this._visibleData)===null||x===void 0?void 0:x.colorPicker)===null||O===void 0||O.layout()}_findAvailableSpaceVertically(){var R;const x=(R=this._visibleData)===null||R===void 0?void 0:R.showAtPosition;if(x)return this._positionPreference===1?this._availableVerticalSpaceAbove(x):this._availableVerticalSpaceBelow(x)}_findMaximumRenderingHeight(){const R=this._findAvailableSpaceVertically();if(!R)return;let x=I;return Array.from(this._hover.contentsDomNode.children).forEach(O=>{x+=O.clientHeight}),this._hasHorizontalScrollbar()&&(x+=D),Math.min(R,x)}_isHoverTextOverflowing(){this._hover.containerDomNode.style.setProperty("--vscode-hover-whiteSpace","nowrap"),this._hover.containerDomNode.style.setProperty("--vscode-hover-sourceWhiteSpace","nowrap");const R=Array.from(this._hover.contentsDomNode.children).some(x=>x.scrollWidth>x.clientWidth);return this._hover.containerDomNode.style.removeProperty("--vscode-hover-whiteSpace"),this._hover.containerDomNode.style.removeProperty("--vscode-hover-sourceWhiteSpace"),R}_findMaximumRenderingWidth(){if(!this._editor||!this._editor.hasModel())return;const R=this._isHoverTextOverflowing(),x=typeof this._contentWidth>"u"?0:this._contentWidth-2;return R||this._hover.containerDomNode.clientWidth"u"||typeof this._visibleData.initialMousePosY>"u")return this._visibleData.initialMousePosX=R,this._visibleData.initialMousePosY=x,!1;const O=L.getDomNodePagePosition(this.getDomNode());typeof this._visibleData.closestMouseDistance>"u"&&(this._visibleData.closestMouseDistance=N(this._visibleData.initialMousePosX,this._visibleData.initialMousePosY,O.left,O.top,O.width,O.height));const B=N(R,x,O.left,O.top,O.width,O.height);return B>this._visibleData.closestMouseDistance+4?!1:(this._visibleData.closestMouseDistance=Math.min(this._visibleData.closestMouseDistance,B),!0)}_setHoverData(R){var x;(x=this._visibleData)===null||x===void 0||x.disposables.dispose(),this._visibleData=R,this._hoverVisibleKey.set(!!R),this._hover.containerDomNode.classList.toggle("hidden",!R)}_updateFont(){const{fontSize:R,lineHeight:x}=this._editor.getOption(50),O=this._hover.contentsDomNode;O.style.fontSize=`${R}px`,O.style.lineHeight=`${x/R}`,Array.prototype.slice.call(this._hover.contentsDomNode.getElementsByClassName("code")).forEach(W=>this._editor.applyFontInfo(W))}_updateContent(R){const x=this._hover.contentsDomNode;x.style.paddingBottom="",x.textContent="",x.appendChild(R)}_layoutContentWidget(){this._editor.layoutContentWidget(this),this._hover.onContentsChanged()}_updateMaxDimensions(){const R=Math.max(this._editor.getLayoutInfo().height/4,250,l._lastDimensions.height),x=Math.max(this._editor.getLayoutInfo().width*.66,500,l._lastDimensions.width);this._setHoverWidgetMaxDimensions(x,R)}_render(R,x){this._setHoverData(x),this._updateFont(),this._updateContent(R),this._updateMaxDimensions(),this.onContentsChanged(),this._editor.render()}getPosition(){var R;return this._visibleData?{position:this._visibleData.showAtPosition,secondaryPosition:this._visibleData.showAtSecondaryPosition,positionAffinity:this._visibleData.isBeforeContent?3:void 0,preference:[(R=this._positionPreference)!==null&&R!==void 0?R:1]}:null}showAt(R,x){var O,B,W,V;if(!this._editor||!this._editor.hasModel())return;this._render(R,x);const K=L.getTotalHeight(this._hover.containerDomNode),F=x.showAtPosition;this._positionPreference=(O=this._findPositionPreference(K,F))!==null&&O!==void 0?O:1,this.onContentsChanged(),x.stoleFocus&&this._hover.containerDomNode.focus(),(B=x.colorPicker)===null||B===void 0||B.layout();const ie=this._hover.containerDomNode.ownerDocument.activeElement===this._hover.containerDomNode&&(0,k.getHoverAccessibleViewHint)(this._configurationService.getValue("accessibility.verbosity.hover")===!0&&this._accessibilityService.isScreenReaderOptimized(),(V=(W=this._keybindingService.lookupKeybinding("editor.action.accessibleView"))===null||W===void 0?void 0:W.getAriaLabel())!==null&&V!==void 0?V:"");ie&&(this._hover.contentsDomNode.ariaLabel=this._hover.contentsDomNode.textContent+", "+ie)}hide(){if(!this._visibleData)return;const R=this._visibleData.stoleFocus||this._hoverFocusedKey.get();this._setHoverData(void 0),this._resizableNode.maxSize=new L.Dimension(1/0,1/0),this._resizableNode.clearSashHoverState(),this._hoverFocusedKey.set(!1),this._editor.layoutContentWidget(this),R&&this._editor.focus()}_removeConstraintsRenderNormally(){const R=this._editor.getLayoutInfo();this._resizableNode.layout(R.height,R.width),this._setHoverWidgetDimensions("auto","auto")}_adjustHoverHeightForScrollbar(R){var x;const O=this._hover.containerDomNode,B=this._hover.contentsDomNode,W=(x=this._findMaximumRenderingHeight())!==null&&x!==void 0?x:1/0;this._setContainerDomNodeDimensions(L.getTotalWidth(O),Math.min(W,R)),this._setContentsDomNodeDimensions(L.getTotalWidth(B),Math.min(W,R-D))}setMinimumDimensions(R){this._minimumSize=new L.Dimension(Math.max(this._minimumSize.width,R.width),Math.max(this._minimumSize.height,R.height)),this._updateMinimumWidth()}_updateMinimumWidth(){const R=typeof this._contentWidth>"u"?this._minimumSize.width:Math.min(this._contentWidth,this._minimumSize.width);this._resizableNode.minSize=new L.Dimension(R,this._minimumSize.height)}onContentsChanged(){var R;this._removeConstraintsRenderNormally();const x=this._hover.containerDomNode;let O=L.getTotalHeight(x),B=L.getTotalWidth(x);if(this._resizableNode.layout(O,B),this._setHoverWidgetDimensions(B,O),O=L.getTotalHeight(x),B=L.getTotalWidth(x),this._contentWidth=B,this._updateMinimumWidth(),this._resizableNode.layout(O,B),this._hasHorizontalScrollbar()&&(this._adjustContentsBottomPadding(),this._adjustHoverHeightForScrollbar(O)),!((R=this._visibleData)===null||R===void 0)&&R.showAtPosition){const W=L.getTotalHeight(this._hover.containerDomNode);this._positionPreference=this._findPositionPreference(W,this._visibleData.showAtPosition)}this._layoutContentWidget()}focus(){this._hover.containerDomNode.focus()}scrollUp(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._editor.getOption(50);this._hover.scrollbar.setScrollPosition({scrollTop:R-x.lineHeight})}scrollDown(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._editor.getOption(50);this._hover.scrollbar.setScrollPosition({scrollTop:R+x.lineHeight})}scrollLeft(){const R=this._hover.scrollbar.getScrollPosition().scrollLeft;this._hover.scrollbar.setScrollPosition({scrollLeft:R-w})}scrollRight(){const R=this._hover.scrollbar.getScrollPosition().scrollLeft;this._hover.scrollbar.setScrollPosition({scrollLeft:R+w})}pageUp(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._hover.scrollbar.getScrollDimensions().height;this._hover.scrollbar.setScrollPosition({scrollTop:R-x})}pageDown(){const R=this._hover.scrollbar.getScrollPosition().scrollTop,x=this._hover.scrollbar.getScrollDimensions().height;this._hover.scrollbar.setScrollPosition({scrollTop:R+x})}goToTop(){this._hover.scrollbar.setScrollPosition({scrollTop:0})}goToBottom(){this._hover.scrollbar.setScrollPosition({scrollTop:this._hover.scrollbar.getScrollDimensions().scrollHeight})}};e.ContentHoverWidget=T,T.ID="editor.contrib.resizableContentHoverWidget",T._lastDimensions=new L.Dimension(0,0),e.ContentHoverWidget=T=l=ke([ge(1,u.IContextKeyService),ge(2,c.IConfigurationService),ge(3,d.IAccessibilityService),ge(4,n.IKeybindingService)],T);let A=class extends E.Disposable{get hasContent(){return this._hasContent}constructor(R){super(),this._keybindingService=R,this._hasContent=!1,this.hoverElement=o("div.hover-row.status-bar"),this.actionsElement=L.append(this.hoverElement,o("div.actions"))}addAction(R){const x=this._keybindingService.lookupKeybinding(R.commandId),O=x?x.getLabel():null;return this._hasContent=!0,this._register(k.HoverAction.render(this.actionsElement,R,O))}append(R){const x=L.append(this.actionsElement,R);return this._hasContent=!0,x}};e.EditorHoverStatusBar=A,e.EditorHoverStatusBar=A=ke([ge(0,n.IKeybindingService)],A);class P{get anchor(){return this._anchor}set anchor(R){this._anchor=R}get shouldFocus(){return this._shouldFocus}set shouldFocus(R){this._shouldFocus=R}get source(){return this._source}set source(R){this._source=R}get insistOnKeepingHoverVisible(){return this._insistOnKeepingHoverVisible}set insistOnKeepingHoverVisible(R){this._insistOnKeepingHoverVisible=R}constructor(R,x){this._editor=R,this._participants=x,this._anchor=null,this._shouldFocus=!1,this._source=0,this._insistOnKeepingHoverVisible=!1}static _getLineDecorations(R,x){if(x.type!==1&&!x.supportsMarkerHover)return[];const O=R.getModel(),B=x.range.startLineNumber;if(B>O.getLineCount())return[];const W=O.getLineMaxColumn(B);return R.getLineDecorations(B).filter(V=>{if(V.options.isWholeLine)return!0;const K=V.range.startLineNumber===B?V.range.startColumn:1,F=V.range.endLineNumber===B?V.range.endColumn:W;if(V.options.showIfCollapsed){if(K>x.range.startColumn+1||x.range.endColumn-1>F)return!1}else if(K>x.range.startColumn||x.range.endColumn>F)return!1;return!0})}computeAsync(R){const x=this._anchor;if(!this._editor.hasModel()||!x)return t.AsyncIterableObject.EMPTY;const O=P._getLineDecorations(this._editor,x);return t.AsyncIterableObject.merge(this._participants.map(B=>B.computeAsync?B.computeAsync(x,O,R):t.AsyncIterableObject.EMPTY))}computeSync(){if(!this._editor.hasModel()||!this._anchor)return[];const R=P._getLineDecorations(this._editor,this._anchor);let x=[];for(const O of this._participants)x=x.concat(O.computeSync(this._anchor,R));return(0,y.coalesce)(x)}}function N(M,R,x,O,B,W){const V=x+B/2,K=O+W/2,F=Math.max(Math.abs(M-V)-B/2,0),q=Math.max(Math.abs(R-K)-W/2,0);return Math.sqrt(F*F+q*q)}}),define(se[899],oe([1,0,2,376,8,379,34,6,18,16,21,15,51,32,353,7,201]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";var u,f;Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneColorPickerWidget=e.StandaloneColorPickerController=void 0;let c=u=class extends L.Disposable{constructor(h,m,C,w,D,I,T){super(),this._editor=h,this._modelService=C,this._keybindingService=w,this._instantiationService=D,this._languageFeatureService=I,this._languageConfigurationService=T,this._standaloneColorPickerWidget=null,this._standaloneColorPickerVisible=b.EditorContextKeys.standaloneColorPickerVisible.bindTo(m),this._standaloneColorPickerFocused=b.EditorContextKeys.standaloneColorPickerFocused.bindTo(m)}showOrFocus(){var h;this._editor.hasModel()&&(this._standaloneColorPickerVisible.get()?this._standaloneColorPickerFocused.get()||(h=this._standaloneColorPickerWidget)===null||h===void 0||h.focus():this._standaloneColorPickerWidget=new l(this._editor,this._standaloneColorPickerVisible,this._standaloneColorPickerFocused,this._instantiationService,this._modelService,this._keybindingService,this._languageFeatureService,this._languageConfigurationService))}hide(){var h;this._standaloneColorPickerFocused.set(!1),this._standaloneColorPickerVisible.set(!1),(h=this._standaloneColorPickerWidget)===null||h===void 0||h.hide(),this._editor.focus()}insertColor(){var h;(h=this._standaloneColorPickerWidget)===null||h===void 0||h.updateEditor(),this.hide()}static get(h){return h.getContribution(u.ID)}};e.StandaloneColorPickerController=c,c.ID="editor.contrib.standaloneColorPickerController",e.StandaloneColorPickerController=c=u=ke([ge(1,a.IContextKeyService),ge(2,i.IModelService),ge(3,S.IKeybindingService),ge(4,y.IInstantiationService),ge(5,_.ILanguageFeaturesService),ge(6,n.ILanguageConfigurationService)],c),(0,v.registerEditorContribution)(c.ID,c,1);const d=8,s=22;let l=f=class extends L.Disposable{constructor(h,m,C,w,D,I,T,A){var P;super(),this._editor=h,this._standaloneColorPickerVisible=m,this._standaloneColorPickerFocused=C,this._modelService=D,this._keybindingService=I,this._languageFeaturesService=T,this._languageConfigurationService=A,this.allowEditorOverflow=!0,this._position=void 0,this._body=document.createElement("div"),this._colorHover=null,this._selectionSetInEditor=!1,this._onResult=this._register(new p.Emitter),this.onResult=this._onResult.event,this._standaloneColorPickerVisible.set(!0),this._standaloneColorPickerParticipant=w.createInstance(k.StandaloneColorPickerParticipant,this._editor),this._position=(P=this._editor._getViewModel())===null||P===void 0?void 0:P.getPrimaryCursorState().modelState.position;const N=this._editor.getSelection(),M=N?{startLineNumber:N.startLineNumber,startColumn:N.startColumn,endLineNumber:N.endLineNumber,endColumn:N.endColumn}:{startLineNumber:0,endLineNumber:0,endColumn:0,startColumn:0},R=this._register(r.trackFocus(this._body));this._register(R.onDidBlur(x=>{this.hide()})),this._register(R.onDidFocus(x=>{this.focus()})),this._register(this._editor.onDidChangeCursorPosition(()=>{this._selectionSetInEditor?this._selectionSetInEditor=!1:this.hide()})),this._register(this._editor.onMouseMove(x=>{var O;const B=(O=x.target.element)===null||O===void 0?void 0:O.classList;B&&B.contains("colorpicker-color-decoration")&&this.hide()})),this._register(this.onResult(x=>{this._render(x.value,x.foundInEditor)})),this._start(M),this._body.style.zIndex="50",this._editor.addContentWidget(this)}updateEditor(){this._colorHover&&this._standaloneColorPickerParticipant.updateEditorModel(this._colorHover)}getId(){return f.ID}getDomNode(){return this._body}getPosition(){if(!this._position)return null;const h=this._editor.getOption(60).above;return{position:this._position,secondaryPosition:this._position,preference:h?[1,2]:[2,1],positionAffinity:2}}hide(){this.dispose(),this._standaloneColorPickerVisible.set(!1),this._standaloneColorPickerFocused.set(!1),this._editor.removeContentWidget(this),this._editor.focus()}focus(){this._standaloneColorPickerFocused.set(!0),this._body.focus()}async _start(h){const m=await this._computeAsync(h);m&&this._onResult.fire(new o(m.result,m.foundInEditor))}async _computeAsync(h){if(!this._editor.hasModel())return null;const m={range:h,color:{red:0,green:0,blue:0,alpha:1}},C=await this._standaloneColorPickerParticipant.createColorHover(m,new t.DefaultDocumentColorProvider(this._modelService,this._languageConfigurationService),this._languageFeaturesService.colorProvider);return C?{result:C.colorHover,foundInEditor:C.foundInEditor}:null}_render(h,m){const C=document.createDocumentFragment(),w=this._register(new E.EditorHoverStatusBar(this._keybindingService));let D;const I={fragment:C,statusBar:w,setColorPicker:B=>D=B,onContentsChanged:()=>{},hide:()=>this.hide()};if(this._colorHover=h,this._register(this._standaloneColorPickerParticipant.renderHoverParts(I,[h])),D===void 0)return;this._body.classList.add("standalone-colorpicker-body"),this._body.style.maxHeight=Math.max(this._editor.getLayoutInfo().height/4,250)+"px",this._body.style.maxWidth=Math.max(this._editor.getLayoutInfo().width*.66,500)+"px",this._body.tabIndex=0,this._body.appendChild(C),D.layout();const T=D.body,A=T.saturationBox.domNode.clientWidth,P=T.domNode.clientWidth-A-s-d,N=D.body.enterButton;N?.onClicked(()=>{this.updateEditor(),this.hide()});const M=D.header,R=M.pickedColorNode;R.style.width=A+d+"px";const x=M.originalColorNode;x.style.width=P+"px";const O=D.header.closeButton;O?.onClicked(()=>{this.hide()}),m&&(N&&(N.button.textContent="Replace"),this._selectionSetInEditor=!0,this._editor.setSelection(h.range)),this._editor.layoutContentWidget(this)}};e.StandaloneColorPickerWidget=l,l.ID="editor.contrib.standaloneColorPickerWidget",e.StandaloneColorPickerWidget=l=f=ke([ge(3,y.IInstantiationService),ge(4,i.IModelService),ge(5,S.IKeybindingService),ge(6,_.ILanguageFeaturesService),ge(7,n.ILanguageConfigurationService)],l);class o{constructor(h,m){this.value=h,this.foundInEditor=m}}}),define(se[900],oe([1,0,16,662,899,21,30,201]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ShowOrFocusStandaloneColorPicker=void 0;class p extends L.EditorAction2{constructor(){super({id:"editor.action.showOrFocusStandaloneColorPicker",title:{value:(0,k.localize)(0,null),mnemonicTitle:(0,k.localize)(1,null),original:"Show or Focus Standalone Color Picker"},precondition:void 0,menu:[{id:S.MenuId.CommandPalette}]})}runEditorCommand(a,i){var n;(n=y.StandaloneColorPickerController.get(i))===null||n===void 0||n.showOrFocus()}}e.ShowOrFocusStandaloneColorPicker=p;class _ extends L.EditorAction{constructor(){super({id:"editor.action.hideColorPicker",label:(0,k.localize)(2,null),alias:"Hide the Color Picker",precondition:E.EditorContextKeys.standaloneColorPickerVisible.isEqualTo(!0),kbOpts:{primary:9,weight:100}})}run(a,i){var n;(n=y.StandaloneColorPickerController.get(i))===null||n===void 0||n.hide()}}class v extends L.EditorAction{constructor(){super({id:"editor.action.insertColorWithStandaloneColorPicker",label:(0,k.localize)(3,null),alias:"Insert Color with Standalone Color Picker",precondition:E.EditorContextKeys.standaloneColorPickerFocused.isEqualTo(!0),kbOpts:{primary:3,weight:100}})}run(a,i){var n;(n=y.StandaloneColorPickerController.get(i))===null||n===void 0||n.insertColor()}}(0,L.registerEditorAction)(_),(0,L.registerEditorAction)(v),(0,S.registerAction2)(p)}),define(se[901],oe([1,0,14,12,105,16,5,24,21,38,121,690,559,466]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";var n;Object.defineProperty(e,"__esModule",{value:!0});let t=n=class{static get(c){return c.getContribution(n.ID)}constructor(c,d){this.editor=c,this.editorWorkerService=d,this.decorations=this.editor.createDecorationsCollection()}dispose(){}run(c,d){var s;(s=this.currentRequest)===null||s===void 0||s.cancel();const l=this.editor.getSelection(),o=this.editor.getModel();if(!o||!l)return;let g=l;if(g.startLineNumber!==g.endLineNumber)return;const h=new y.EditorState(this.editor,5),m=o.uri;return this.editorWorkerService.canNavigateValueSet(m)?(this.currentRequest=(0,L.createCancelablePromise)(C=>this.editorWorkerService.navigateValueSet(m,g,d)),this.currentRequest.then(C=>{var w;if(!C||!C.range||!C.value||!h.validate(this.editor))return;const D=S.Range.lift(C.range);let I=C.range;const T=C.value.length-(g.endColumn-g.startColumn);I={startLineNumber:I.startLineNumber,startColumn:I.startColumn,endLineNumber:I.endLineNumber,endColumn:I.startColumn+C.value.length},T>1&&(g=new p.Selection(g.startLineNumber,g.startColumn,g.endLineNumber,g.endColumn+T-1));const A=new i.InPlaceReplaceCommand(D,g,C.value);this.editor.pushUndoStop(),this.editor.executeCommand(c,A),this.editor.pushUndoStop(),this.decorations.set([{range:I,options:n.DECORATION}]),(w=this.decorationRemover)===null||w===void 0||w.cancel(),this.decorationRemover=(0,L.timeout)(350),this.decorationRemover.then(()=>this.decorations.clear()).catch(k.onUnexpectedError)}).catch(k.onUnexpectedError)):Promise.resolve(void 0)}};t.ID="editor.contrib.inPlaceReplaceController",t.DECORATION=v.ModelDecorationOptions.register({description:"in-place-replace",className:"valueSetReplacement"}),t=n=ke([ge(1,b.IEditorWorkerService)],t);class r extends E.EditorAction{constructor(){super({id:"editor.action.inPlaceReplace.up",label:a.localize(0,null),alias:"Replace with Previous Value",precondition:_.EditorContextKeys.writable,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:3159,weight:100}})}run(c,d){const s=t.get(d);return s?s.run(this.id,!1):Promise.resolve(void 0)}}class u extends E.EditorAction{constructor(){super({id:"editor.action.inPlaceReplace.down",label:a.localize(1,null),alias:"Replace with Next Value",precondition:_.EditorContextKeys.writable,kbOpts:{kbExpr:_.EditorContextKeys.editorTextFocus,primary:3161,weight:100}})}run(c,d){const s=t.get(d);return s?s.run(this.id,!0):Promise.resolve(void 0)}}(0,E.registerEditorContribution)(t.ID,t,4),(0,E.registerEditorAction)(r),(0,E.registerEditorAction)(u)}),define(se[262],oe([1,0,7,14,26,2,11,28,5,38,8,469]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlineProgressManager=void 0;const a=v.ModelDecorationOptions.register({description:"inline-progress-widget",stickiness:1,showIfCollapsed:!0,after:{content:S.noBreakWhitespace,inlineClassName:"inline-editor-progress-decoration",inlineClassNameAffectsLetterSpacing:!0}});class i extends E.Disposable{constructor(r,u,f,c,d){super(),this.typeId=r,this.editor=u,this.range=f,this.delegate=d,this.allowEditorOverflow=!1,this.suppressMouseDown=!0,this.create(c),this.editor.addContentWidget(this),this.editor.layoutContentWidget(this)}create(r){this.domNode=L.$(".inline-progress-widget"),this.domNode.role="button",this.domNode.title=r;const u=L.$("span.icon");this.domNode.append(u),u.classList.add(...p.ThemeIcon.asClassNameArray(y.Codicon.loading),"codicon-modifier-spin");const f=()=>{const c=this.editor.getOption(66);this.domNode.style.height=`${c}px`,this.domNode.style.width=`${Math.ceil(.8*c)}px`};f(),this._register(this.editor.onDidChangeConfiguration(c=>{(c.hasChanged(52)||c.hasChanged(66))&&f()})),this._register(L.addDisposableListener(this.domNode,L.EventType.CLICK,c=>{this.delegate.cancel()}))}getId(){return i.baseId+"."+this.typeId}getDomNode(){return this.domNode}getPosition(){return{position:{lineNumber:this.range.startLineNumber,column:this.range.startColumn},preference:[0]}}dispose(){super.dispose(),this.editor.removeContentWidget(this)}}i.baseId="editor.widget.inlineProgressWidget";let n=class extends E.Disposable{constructor(r,u,f){super(),this.id=r,this._editor=u,this._instantiationService=f,this._showDelay=500,this._showPromise=this._register(new E.MutableDisposable),this._currentWidget=new E.MutableDisposable,this._operationIdPool=0,this._currentDecorations=u.createDecorationsCollection()}async showWhile(r,u,f){const c=this._operationIdPool++;this._currentOperation=c,this.clear(),this._showPromise.value=(0,k.disposableTimeout)(()=>{const d=_.Range.fromPositions(r);this._currentDecorations.set([{range:d,options:a}]).length>0&&(this._currentWidget.value=this._instantiationService.createInstance(i,this.id,this._editor,d,u,f))},this._showDelay);try{return await f}finally{this._currentOperation===c&&(this.clear(),this._currentOperation=void 0)}}clear(){this._showPromise.clear(),this._currentDecorations.clear(),this._currentWidget.clear()}};e.InlineProgressManager=n,e.InlineProgressManager=n=ke([ge(2,b.IInstantiationService)],n)}),define(se[380],oe([1,0,7,13,14,176,2,109,17,175,190,352,136,5,18,239,105,262,667,103,15,8,88,70,346,166]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m){"use strict";var C;Object.defineProperty(e,"__esModule",{value:!0}),e.CopyPasteController=e.pasteWidgetVisibleCtx=e.changePasteTypeCommandId=void 0,e.changePasteTypeCommandId="editor.changePasteType",e.pasteWidgetVisibleCtx=new s.RawContextKey("pasteWidgetVisible",!1,(0,c.localize)(0,null));const w="application/vnd.code.copyMetadata";let D=C=class extends S.Disposable{static get(A){return A.getContribution(C.ID)}constructor(A,P,N,M,R,x,O){super(),this._bulkEditService=N,this._clipboardService=M,this._languageFeaturesService=R,this._quickInputService=x,this._progressService=O,this._editor=A;const B=A.getContainerDomNode();this._register((0,L.addDisposableListener)(B,"copy",W=>this.handleCopy(W))),this._register((0,L.addDisposableListener)(B,"cut",W=>this.handleCopy(W))),this._register((0,L.addDisposableListener)(B,"paste",W=>this.handlePaste(W),!0)),this._pasteProgressManager=this._register(new f.InlineProgressManager("pasteIntoEditor",A,P)),this._postPasteWidgetManager=this._register(P.createInstance(h.PostEditWidgetManager,"pasteIntoEditor",A,e.pasteWidgetVisibleCtx,{id:e.changePasteTypeCommandId,label:(0,c.localize)(1,null)}))}changePasteType(){this._postPasteWidgetManager.tryShowSelector()}pasteAs(A){this._editor.focus();try{this._pasteAsActionContext={preferredId:A},(0,L.getActiveDocument)().execCommand("paste")}finally{this._pasteAsActionContext=void 0}}isPasteAsEnabled(){return this._editor.getOption(84).enabled&&!this._editor.getOption(90)}async finishedPaste(){await this._currentPasteOperation}handleCopy(A){var P,N;if(!this._editor.hasTextFocus()||(_.isWeb&&this._clipboardService.writeResources([]),!A.clipboardData||!this.isPasteAsEnabled()))return;const M=this._editor.getModel(),R=this._editor.getSelections();if(!M||!R?.length)return;const x=this._editor.getOption(37);let O=R;const B=R.length===1&&R[0].isEmpty();if(B){if(!x)return;O=[new n.Range(O[0].startLineNumber,1,O[0].startLineNumber,1+M.getLineLength(O[0].startLineNumber))]}const W=(P=this._editor._getViewModel())===null||P===void 0?void 0:P.getPlainTextToCopy(R,x,_.isWindows),K={multicursorText:Array.isArray(W)?W:null,pasteOnNewLine:B,mode:null},F=this._languageFeaturesService.documentPasteEditProvider.ordered(M).filter($=>!!$.prepareDocumentPaste);if(!F.length){this.setCopyMetadata(A.clipboardData,{defaultPastePayload:K});return}const q=(0,a.toVSDataTransfer)(A.clipboardData),ie=F.flatMap($=>{var J;return(J=$.copyMimeTypes)!==null&&J!==void 0?J:[]}),ae=(0,v.generateUuid)();this.setCopyMetadata(A.clipboardData,{id:ae,providerCopyMimeTypes:ie,defaultPastePayload:K});const ne=(0,y.createCancelablePromise)(async $=>{const J=(0,k.coalesce)(await Promise.all(F.map(async Q=>{try{return await Q.prepareDocumentPaste(M,O,q,$)}catch(re){console.error(re);return}})));J.reverse();for(const Q of J)for(const[re,de]of Q)q.replace(re,de);return q});(N=this._currentCopyOperation)===null||N===void 0||N.dataTransferPromise.cancel(),this._currentCopyOperation={handle:ae,dataTransferPromise:ne}}async handlePaste(A){var P,N,M,R,x;if(!A.clipboardData||!this._editor.hasTextFocus())return;(P=m.MessageController.get(this._editor))===null||P===void 0||P.closeMessage(),(N=this._currentPasteOperation)===null||N===void 0||N.cancel(),this._currentPasteOperation=void 0;const O=this._editor.getModel(),B=this._editor.getSelections();if(!B?.length||!O||!this.isPasteAsEnabled()&&!this._pasteAsActionContext)return;const W=this.fetchCopyMetadata(A),V=(0,a.toExternalVSDataTransfer)(A.clipboardData);V.delete(w);const K=[...A.clipboardData.types,...(M=W?.providerCopyMimeTypes)!==null&&M!==void 0?M:[],p.Mimes.uriList],F=this._languageFeaturesService.documentPasteEditProvider.ordered(O).filter(q=>{var ie,ae;return!((ie=this._pasteAsActionContext)===null||ie===void 0)&&ie.preferredId&&this._pasteAsActionContext.preferredId!==q.id?!1:(ae=q.pasteMimeTypes)===null||ae===void 0?void 0:ae.some(ne=>(0,E.matchesMimeType)(ne,K))});if(!F.length){!((R=this._pasteAsActionContext)===null||R===void 0)&&R.preferredId&&this.showPasteAsNoEditMessage(B,(x=this._pasteAsActionContext)===null||x===void 0?void 0:x.preferredId);return}A.preventDefault(),A.stopImmediatePropagation(),this._pasteAsActionContext?this.showPasteAsPick(this._pasteAsActionContext.preferredId,F,B,V,W,{trigger:"explicit",only:this._pasteAsActionContext.preferredId}):this.doPasteInline(F,B,V,W,{trigger:"implicit"})}showPasteAsNoEditMessage(A,P){var N;(N=m.MessageController.get(this._editor))===null||N===void 0||N.showMessage((0,c.localize)(2,null,P),A[0].getStartPosition())}doPasteInline(A,P,N,M,R){const x=(0,y.createCancelablePromise)(async O=>{const B=this._editor;if(!B.hasModel())return;const W=B.getModel(),V=new u.EditorStateCancellationTokenSource(B,3,void 0,O);try{if(await this.mergeInDataFromCopy(N,M,V.token),V.token.isCancellationRequested)return;const K=A.filter(q=>I(q,N));if(!K.length||K.length===1&&K[0].id==="text"){await this.applyDefaultPasteHandler(N,M,V.token);return}const F=await this.getPasteEdits(K,N,W,P,R,V.token);if(V.token.isCancellationRequested)return;if(F.length===1&&F[0].providerId==="text"){await this.applyDefaultPasteHandler(N,M,V.token);return}if(F.length){const q=B.getOption(84).showPasteSelector==="afterPaste";return this._postPasteWidgetManager.applyEditAndShowIfNeeded(P,{activeEditIndex:0,allEdits:F},q,V.token)}await this.applyDefaultPasteHandler(N,M,V.token)}finally{V.dispose(),this._currentPasteOperation===x&&(this._currentPasteOperation=void 0)}});this._pasteProgressManager.showWhile(P[0].getEndPosition(),(0,c.localize)(3,null),x),this._currentPasteOperation=x}showPasteAsPick(A,P,N,M,R,x){const O=(0,y.createCancelablePromise)(async B=>{const W=this._editor;if(!W.hasModel())return;const V=W.getModel(),K=new u.EditorStateCancellationTokenSource(W,3,void 0,B);try{if(await this.mergeInDataFromCopy(M,R,K.token),K.token.isCancellationRequested)return;let F=P.filter(ne=>I(ne,M));A&&(F=F.filter(ne=>ne.id===A));const q=await this.getPasteEdits(F,M,V,N,x,K.token);if(K.token.isCancellationRequested)return;if(!q.length){x.only&&this.showPasteAsNoEditMessage(N,x.only);return}let ie;if(A)ie=q.at(0);else{const ne=await this._quickInputService.pick(q.map($=>({label:$.label,description:$.providerId,detail:$.detail,edit:$})),{placeHolder:(0,c.localize)(4,null)});ie=ne?.edit}if(!ie)return;const ae=(0,r.createCombinedWorkspaceEdit)(V.uri,N,ie);await this._bulkEditService.apply(ae,{editor:this._editor})}finally{K.dispose(),this._currentPasteOperation===O&&(this._currentPasteOperation=void 0)}});this._progressService.withProgress({location:10,title:(0,c.localize)(5,null)},()=>O)}setCopyMetadata(A,P){A.setData(w,JSON.stringify(P))}fetchCopyMetadata(A){var P;if(!A.clipboardData)return;const N=A.clipboardData.getData(w);if(N)try{return JSON.parse(N)}catch{return}const[M,R]=b.ClipboardEventUtils.getTextData(A.clipboardData);if(R)return{defaultPastePayload:{mode:R.mode,multicursorText:(P=R.multicursorText)!==null&&P!==void 0?P:null,pasteOnNewLine:!!R.isFromEmptySelection}}}async mergeInDataFromCopy(A,P,N){var M;if(P?.id&&((M=this._currentCopyOperation)===null||M===void 0?void 0:M.handle)===P.id){const R=await this._currentCopyOperation.dataTransferPromise;if(N.isCancellationRequested)return;for(const[x,O]of R)A.replace(x,O)}if(!A.has(p.Mimes.uriList)){const R=await this._clipboardService.readResources();if(N.isCancellationRequested)return;R.length&&A.append(p.Mimes.uriList,(0,E.createStringDataTransferItem)(E.UriList.create(R)))}}async getPasteEdits(A,P,N,M,R,x){const O=await(0,y.raceCancellation)(Promise.all(A.map(async W=>{var V;try{const K=await((V=W.provideDocumentPasteEdits)===null||V===void 0?void 0:V.call(W,N,M,P,R,x));if(K)return{...K,providerId:W.id}}catch(K){console.error(K)}})),x),B=(0,k.coalesce)(O??[]);return(0,r.sortEditsByYieldTo)(B)}async applyDefaultPasteHandler(A,P,N){var M,R,x;const O=(M=A.get(p.Mimes.text))!==null&&M!==void 0?M:A.get("text");if(!O)return;const B=await O.asString();if(N.isCancellationRequested)return;const W={text:B,pasteOnNewLine:(R=P?.defaultPastePayload.pasteOnNewLine)!==null&&R!==void 0?R:!1,multicursorText:(x=P?.defaultPastePayload.multicursorText)!==null&&x!==void 0?x:null,mode:null};this._editor.trigger("keyboard","paste",W)}};e.CopyPasteController=D,D.ID="editor.contrib.copyPasteActionController",e.CopyPasteController=D=C=ke([ge(1,l.IInstantiationService),ge(2,i.IBulkEditService),ge(3,d.IClipboardService),ge(4,t.ILanguageFeaturesService),ge(5,g.IQuickInputService),ge(6,o.IProgressService)],D);function I(T,A){var P;return!!(!((P=T.pasteMimeTypes)===null||P===void 0)&&P.some(N=>A.matches(N)))}}),define(se[902],oe([1,0,54,7,17,190,16,33,21,380,653,30,103,15]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.PasteAction=e.CopyAction=e.CutAction=void 0;const t="9_cutcopypaste",r=y.isNative||document.queryCommandSupported("cut"),u=y.isNative||document.queryCommandSupported("copy"),f=typeof navigator.clipboard>"u"||L.isFirefox?document.queryCommandSupported("paste"):!0;function c(l){return l.register(),l}e.CutAction=r?c(new S.MultiCommand({id:"editor.action.clipboardCutAction",precondition:void 0,kbOpts:y.isNative?{primary:2102,win:{primary:2102,secondary:[1044]},weight:100}:void 0,menuOpts:[{menuId:a.MenuId.MenubarEditMenu,group:"2_ccp",title:b.localize(0,null),order:1},{menuId:a.MenuId.EditorContext,group:t,title:b.localize(1,null),when:_.EditorContextKeys.writable,order:1},{menuId:a.MenuId.CommandPalette,group:"",title:b.localize(2,null),order:1},{menuId:a.MenuId.SimpleEditorContext,group:t,title:b.localize(3,null),when:_.EditorContextKeys.writable,order:1}]})):void 0,e.CopyAction=u?c(new S.MultiCommand({id:"editor.action.clipboardCopyAction",precondition:void 0,kbOpts:y.isNative?{primary:2081,win:{primary:2081,secondary:[2067]},weight:100}:void 0,menuOpts:[{menuId:a.MenuId.MenubarEditMenu,group:"2_ccp",title:b.localize(4,null),order:2},{menuId:a.MenuId.EditorContext,group:t,title:b.localize(5,null),order:2},{menuId:a.MenuId.CommandPalette,group:"",title:b.localize(6,null),order:1},{menuId:a.MenuId.SimpleEditorContext,group:t,title:b.localize(7,null),order:2}]})):void 0,a.MenuRegistry.appendMenuItem(a.MenuId.MenubarEditMenu,{submenu:a.MenuId.MenubarCopy,title:{value:b.localize(8,null),original:"Copy As"},group:"2_ccp",order:3}),a.MenuRegistry.appendMenuItem(a.MenuId.EditorContext,{submenu:a.MenuId.EditorContextCopy,title:{value:b.localize(9,null),original:"Copy As"},group:t,order:3}),a.MenuRegistry.appendMenuItem(a.MenuId.EditorContext,{submenu:a.MenuId.EditorContextShare,title:{value:b.localize(10,null),original:"Share"},group:"11_share",order:-1,when:n.ContextKeyExpr.and(n.ContextKeyExpr.notEquals("resourceScheme","output"),_.EditorContextKeys.editorTextFocus)}),a.MenuRegistry.appendMenuItem(a.MenuId.EditorTitleContext,{submenu:a.MenuId.EditorTitleContextShare,title:{value:b.localize(11,null),original:"Share"},group:"11_share",order:-1}),a.MenuRegistry.appendMenuItem(a.MenuId.ExplorerContext,{submenu:a.MenuId.ExplorerContextShare,title:{value:b.localize(12,null),original:"Share"},group:"11_share",order:-1}),e.PasteAction=f?c(new S.MultiCommand({id:"editor.action.clipboardPasteAction",precondition:void 0,kbOpts:y.isNative?{primary:2100,win:{primary:2100,secondary:[1043]},linux:{primary:2100,secondary:[1043]},weight:100}:void 0,menuOpts:[{menuId:a.MenuId.MenubarEditMenu,group:"2_ccp",title:b.localize(13,null),order:4},{menuId:a.MenuId.EditorContext,group:t,title:b.localize(14,null),when:_.EditorContextKeys.writable,order:4},{menuId:a.MenuId.CommandPalette,group:"",title:b.localize(15,null),order:1},{menuId:a.MenuId.SimpleEditorContext,group:t,title:b.localize(16,null),when:_.EditorContextKeys.writable,order:4}]})):void 0;class d extends S.EditorAction{constructor(){super({id:"editor.action.clipboardCopyWithSyntaxHighlightingAction",label:b.localize(17,null),alias:"Copy With Syntax Highlighting",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.textInputFocus,primary:0,weight:100}})}run(o,g){!g.hasModel()||!g.getOption(37)&&g.getSelection().isEmpty()||(E.CopyOptions.forceCopyWithSyntaxHighlighting=!0,g.focus(),g.getContainerDomNode().ownerDocument.execCommand("copy"),E.CopyOptions.forceCopyWithSyntaxHighlighting=!1)}}function s(l,o){l&&(l.addImplementation(1e4,"code-editor",(g,h)=>{const m=g.get(p.ICodeEditorService).getFocusedCodeEditor();if(m&&m.hasTextFocus()){const C=m.getOption(37),w=m.getSelection();return w&&w.isEmpty()&&!C||m.getContainerDomNode().ownerDocument.execCommand(o),!0}return!1}),l.addImplementation(0,"generic-dom",(g,h)=>((0,k.getActiveDocument)().execCommand(o),!0)))}s(e.CutAction,"cut"),s(e.CopyAction,"copy"),e.PasteAction&&(e.PasteAction.addImplementation(1e4,"code-editor",(l,o)=>{var g,h;const m=l.get(p.ICodeEditorService),C=l.get(i.IClipboardService),w=m.getFocusedCodeEditor();return w&&w.hasTextFocus()?w.getContainerDomNode().ownerDocument.execCommand("paste")?(h=(g=v.CopyPasteController.get(w))===null||g===void 0?void 0:g.finishedPaste())!==null&&h!==void 0?h:Promise.resolve():y.isWeb?(async()=>{const I=await C.readText();if(I!==""){const T=E.InMemoryClipboardMetadataManager.INSTANCE.get(I);let A=!1,P=null,N=null;T&&(A=w.getOption(37)&&!!T.isFromEmptySelection,P=typeof T.multicursorText<"u"?T.multicursorText:null,N=T.mode),w.trigger("keyboard","paste",{text:I,pasteOnNewLine:A,multicursorText:P,mode:N})}})():!0:!1}),e.PasteAction.addImplementation(0,"generic-dom",(l,o)=>((0,k.getActiveDocument)().execCommand("paste"),!0))),u&&(0,S.registerEditorAction)(d)}),define(se[903],oe([1,0,13,14,176,2,352,5,18,295,764,105,262,670,27,15,351,8,239,346]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d){"use strict";var s;Object.defineProperty(e,"__esModule",{value:!0}),e.DropIntoEditorController=e.dropWidgetVisibleCtx=e.changeDropTypeCommandId=e.defaultProviderConfig=void 0,e.defaultProviderConfig="editor.experimental.dropIntoEditor.defaultProvider",e.changeDropTypeCommandId="editor.changeDropType",e.dropWidgetVisibleCtx=new r.RawContextKey("dropWidgetVisible",!1,(0,n.localize)(0,null));let l=s=class extends E.Disposable{static get(g){return g.getContribution(s.ID)}constructor(g,h,m,C,w){super(),this._configService=m,this._languageFeaturesService=C,this._treeViewsDragAndDropService=w,this.treeItemsTransfer=u.LocalSelectionTransfer.getInstance(),this._dropProgressManager=this._register(h.createInstance(i.InlineProgressManager,"dropIntoEditor",g)),this._postDropWidgetManager=this._register(h.createInstance(d.PostEditWidgetManager,"dropIntoEditor",g,e.dropWidgetVisibleCtx,{id:e.changeDropTypeCommandId,label:(0,n.localize)(1,null)})),this._register(g.onDropIntoEditor(D=>this.onDropIntoEditor(g,D.position,D.event)))}changeDropType(){this._postDropWidgetManager.tryShowSelector()}async onDropIntoEditor(g,h,m){var C;if(!m.dataTransfer||!g.hasModel())return;(C=this._currentOperation)===null||C===void 0||C.cancel(),g.focus(),g.setPosition(h);const w=(0,k.createCancelablePromise)(async D=>{const I=new a.EditorStateCancellationTokenSource(g,1,void 0,D);try{const T=await this.extractDataTransferData(m);if(T.size===0||I.token.isCancellationRequested)return;const A=g.getModel();if(!A)return;const P=this._languageFeaturesService.documentOnDropEditProvider.ordered(A).filter(M=>M.dropMimeTypes?M.dropMimeTypes.some(R=>T.matches(R)):!0),N=await this.getDropEdits(P,A,h,T,I);if(I.token.isCancellationRequested)return;if(N.length){const M=this.getInitialActiveEditIndex(A,N),R=g.getOption(36).showDropSelector==="afterDrop";await this._postDropWidgetManager.applyEditAndShowIfNeeded([p.Range.fromPositions(h)],{activeEditIndex:M,allEdits:N},R,D)}}finally{I.dispose(),this._currentOperation===w&&(this._currentOperation=void 0)}});this._dropProgressManager.showWhile(h,(0,n.localize)(2,null),w),this._currentOperation=w}async getDropEdits(g,h,m,C,w){const D=await(0,k.raceCancellation)(Promise.all(g.map(async T=>{try{const A=await T.provideDocumentOnDropEdits(h,m,C,w.token);if(A)return{...A,providerId:T.id}}catch(A){console.error(A)}})),w.token),I=(0,L.coalesce)(D??[]);return(0,c.sortEditsByYieldTo)(I)}getInitialActiveEditIndex(g,h){const m=this._configService.getValue(e.defaultProviderConfig,{resource:g.uri});for(const[C,w]of Object.entries(m)){const D=h.findIndex(I=>w===I.providerId&&I.handledMimeType&&(0,y.matchesMimeType)(C,[I.handledMimeType]));if(D>=0)return D}return 0}async extractDataTransferData(g){if(!g.dataTransfer)return new y.VSDataTransfer;const h=(0,S.toExternalVSDataTransfer)(g.dataTransfer);if(this.treeItemsTransfer.hasData(v.DraggedTreeItemsIdentifier.prototype)){const m=this.treeItemsTransfer.getData(v.DraggedTreeItemsIdentifier.prototype);if(Array.isArray(m))for(const C of m){const w=await this._treeViewsDragAndDropService.removeDragOperationTransfer(C.identifier);if(w)for(const[D,I]of w)h.replace(D,I)}}return h}};e.DropIntoEditorController=l,l.ID="editor.contrib.dropIntoEditorController",e.DropIntoEditorController=l=s=ke([ge(1,f.IInstantiationService),ge(2,t.IConfigurationService),ge(3,_.ILanguageFeaturesService),ge(4,b.ITreeViewsDnDService)],l)}),define(se[904],oe([1,0,13,14,19,39,12,6,2,11,22,16,33,10,5,21,38,32,700,15,18,29,79,61,470]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){"use strict";var h;Object.defineProperty(e,"__esModule",{value:!0}),e.editorLinkedEditingBackground=e.LinkedEditingAction=e.LinkedEditingContribution=e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE=void 0,e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE=new d.RawContextKey("LinkedEditingInputVisible",!1);const m="linked-editing-decoration";let C=h=class extends _.Disposable{static get(A){return A.getContribution(h.ID)}constructor(A,P,N,M,R){super(),this.languageConfigurationService=M,this._syncRangesToken=0,this._localToDispose=this._register(new _.DisposableStore),this._editor=A,this._providers=N.linkedEditingRangeProvider,this._enabled=!1,this._visibleContextKey=e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE.bindTo(P),this._debounceInformation=R.for(this._providers,"Linked Editing",{max:200}),this._currentDecorations=this._editor.createDecorationsCollection(),this._languageWordPattern=null,this._currentWordPattern=null,this._ignoreChangeEvent=!1,this._localToDispose=this._register(new _.DisposableStore),this._rangeUpdateTriggerPromise=null,this._rangeSyncTriggerPromise=null,this._currentRequestCts=null,this._currentRequestPosition=null,this._currentRequestModelVersion=null,this._register(this._editor.onDidChangeModel(()=>this.reinitialize(!0))),this._register(this._editor.onDidChangeConfiguration(x=>{(x.hasChanged(69)||x.hasChanged(92))&&this.reinitialize(!1)})),this._register(this._providers.onDidChange(()=>this.reinitialize(!1))),this._register(this._editor.onDidChangeModelLanguage(()=>this.reinitialize(!0))),this.reinitialize(!0)}reinitialize(A){const P=this._editor.getModel(),N=P!==null&&(this._editor.getOption(69)||this._editor.getOption(92))&&this._providers.has(P);if(N===this._enabled&&!A||(this._enabled=N,this.clearRanges(),this._localToDispose.clear(),!N||P===null))return;this._localToDispose.add(p.Event.runAndSubscribe(P.onDidChangeLanguageConfiguration,()=>{this._languageWordPattern=this.languageConfigurationService.getLanguageConfiguration(P.getLanguageId()).getWordDefinition()}));const M=new k.Delayer(this._debounceInformation.get(P)),R=()=>{var B;this._rangeUpdateTriggerPromise=M.trigger(()=>this.updateRanges(),(B=this._debounceDuration)!==null&&B!==void 0?B:this._debounceInformation.get(P))},x=new k.Delayer(0),O=B=>{this._rangeSyncTriggerPromise=x.trigger(()=>this._syncRanges(B))};this._localToDispose.add(this._editor.onDidChangeCursorPosition(()=>{R()})),this._localToDispose.add(this._editor.onDidChangeModelContent(B=>{if(!this._ignoreChangeEvent&&this._currentDecorations.length>0){const W=this._currentDecorations.getRange(0);if(W&&B.changes.every(V=>W.intersectRanges(V.range))){O(this._syncRangesToken);return}}R()})),this._localToDispose.add({dispose:()=>{M.dispose(),x.dispose()}}),this.updateRanges()}_syncRanges(A){if(!this._editor.hasModel()||A!==this._syncRangesToken||this._currentDecorations.length===0)return;const P=this._editor.getModel(),N=this._currentDecorations.getRange(0);if(!N||N.startLineNumber!==N.endLineNumber)return this.clearRanges();const M=P.getValueInRange(N);if(this._currentWordPattern){const x=M.match(this._currentWordPattern);if((x?x[0].length:0)!==M.length)return this.clearRanges()}const R=[];for(let x=1,O=this._currentDecorations.length;x1){this.clearRanges();return}const N=this._editor.getModel(),M=N.getVersionId();if(this._currentRequestPosition&&this._currentRequestModelVersion===M){if(P.equals(this._currentRequestPosition))return;if(this._currentDecorations.length>0){const x=this._currentDecorations.getRange(0);if(x&&x.containsPosition(P))return}}this.clearRanges(),this._currentRequestPosition=P,this._currentRequestModelVersion=M;const R=this._currentRequestCts=new y.CancellationTokenSource;try{const x=new g.StopWatch(!1),O=await I(this._providers,N,P,R.token);if(this._debounceInformation.update(N,x.elapsed()),R!==this._currentRequestCts||(this._currentRequestCts=null,M!==N.getVersionId()))return;let B=[];O?.ranges&&(B=O.ranges),this._currentWordPattern=O?.wordPattern||this._languageWordPattern;let W=!1;for(let K=0,F=B.length;K({range:K,options:h.DECORATION}));this._visibleContextKey.set(!0),this._currentDecorations.set(V),this._syncRangesToken++}catch(x){(0,S.isCancellationError)(x)||(0,S.onUnexpectedError)(x),(this._currentRequestCts===R||!this._currentRequestCts)&&this.clearRanges()}}};e.LinkedEditingContribution=C,C.ID="editor.contrib.linkedEditing",C.DECORATION=u.ModelDecorationOptions.register({description:"linked-editing",stickiness:0,className:m}),e.LinkedEditingContribution=C=h=ke([ge(1,d.IContextKeyService),ge(2,s.ILanguageFeaturesService),ge(3,f.ILanguageConfigurationService),ge(4,o.ILanguageFeatureDebounceService)],C);class w extends a.EditorAction{constructor(){super({id:"editor.action.linkedEditing",label:c.localize(0,null),alias:"Start Linked Editing",precondition:d.ContextKeyExpr.and(r.EditorContextKeys.writable,r.EditorContextKeys.hasRenameProvider),kbOpts:{kbExpr:r.EditorContextKeys.editorTextFocus,primary:3132,weight:100}})}runCommand(A,P){const N=A.get(i.ICodeEditorService),[M,R]=Array.isArray(P)&&P||[void 0,void 0];return b.URI.isUri(M)&&n.Position.isIPosition(R)?N.openCodeEditor({resource:M},N.getActiveCodeEditor()).then(x=>{x&&(x.setPosition(R),x.invokeWithinContext(O=>(this.reportTelemetry(O,x),this.run(O,x))))},S.onUnexpectedError):super.runCommand(A,P)}run(A,P){const N=C.get(P);return N?Promise.resolve(N.updateRanges(!0)):Promise.resolve()}}e.LinkedEditingAction=w;const D=a.EditorCommand.bindToContribution(C.get);(0,a.registerEditorCommand)(new D({id:"cancelLinkedEditingInput",precondition:e.CONTEXT_ONTYPE_RENAME_INPUT_VISIBLE,handler:T=>T.clearRanges(),kbOpts:{kbExpr:r.EditorContextKeys.editorTextFocus,weight:100+99,primary:9,secondary:[1033]}}));function I(T,A,P,N){const M=T.ordered(A);return(0,k.first)(M.map(R=>async()=>{try{return await R.provideLinkedEditingRanges(A,P,N)}catch(x){(0,S.onUnexpectedExternalError)(x);return}}),R=>!!R&&L.isNonEmptyArray(R?.ranges))}e.editorLinkedEditingBackground=(0,l.registerColor)("editor.linkedEditingBackground",{dark:E.Color.fromHex("#f00").transparent(.3),light:E.Color.fromHex("#f00").transparent(.3),hcDark:E.Color.fromHex("#f00").transparent(.3),hcLight:E.Color.white},c.localize(1,null)),(0,a.registerModelAndPositionCommand)("_executeLinkedEditingProvider",(T,A,P)=>{const{linkedEditingRangeProvider:N}=T.get(s.ILanguageFeaturesService);return I(N,A,P,y.CancellationToken.None)}),(0,a.registerEditorContribution)(C.ID,C,1),(0,a.registerEditorAction)(w)}),define(se[905],oe([1,0,14,19,12,58,2,47,17,49,61,22,16,38,79,18,188,766,701,50,57,471]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){"use strict";var l;Object.defineProperty(e,"__esModule",{value:!0}),e.LinkDetector=void 0;let o=l=class extends S.Disposable{static get(D){return D.getContribution(l.ID)}constructor(D,I,T,A,P){super(),this.editor=D,this.openerService=I,this.notificationService=T,this.languageFeaturesService=A,this.providers=this.languageFeaturesService.linkProvider,this.debounceInformation=P.for(this.providers,"Links",{min:1e3,max:4e3}),this.computeLinks=this._register(new L.RunOnceScheduler(()=>this.computeLinksNow(),1e3)),this.computePromise=null,this.activeLinksList=null,this.currentOccurrences={},this.activeLinkDecorationId=null;const N=this._register(new u.ClickLinkGesture(D));this._register(N.onMouseMoveOrRelevantKeyDown(([M,R])=>{this._onEditorMouseMove(M,R)})),this._register(N.onExecute(M=>{this.onEditorMouseUp(M)})),this._register(N.onCancel(M=>{this.cleanUpActiveLinkDecoration()})),this._register(D.onDidChangeConfiguration(M=>{M.hasChanged(70)&&(this.updateDecorations([]),this.stop(),this.computeLinks.schedule(0))})),this._register(D.onDidChangeModelContent(M=>{this.editor.hasModel()&&this.computeLinks.schedule(this.debounceInformation.get(this.editor.getModel()))})),this._register(D.onDidChangeModel(M=>{this.currentOccurrences={},this.activeLinkDecorationId=null,this.stop(),this.computeLinks.schedule(0)})),this._register(D.onDidChangeModelLanguage(M=>{this.stop(),this.computeLinks.schedule(0)})),this._register(this.providers.onDidChange(M=>{this.stop(),this.computeLinks.schedule(0)})),this.computeLinks.schedule(0)}async computeLinksNow(){if(!this.editor.hasModel()||!this.editor.getOption(70))return;const D=this.editor.getModel();if(!D.isTooLargeForSyncing()&&this.providers.has(D)){this.activeLinksList&&(this.activeLinksList.dispose(),this.activeLinksList=null),this.computePromise=(0,L.createCancelablePromise)(I=>(0,f.getLinks)(this.providers,D,I));try{const I=new b.StopWatch(!1);if(this.activeLinksList=await this.computePromise,this.debounceInformation.update(D,I.elapsed()),D.isDisposed())return;this.updateDecorations(this.activeLinksList.links)}catch(I){(0,y.onUnexpectedError)(I)}finally{this.computePromise=null}}}updateDecorations(D){const I=this.editor.getOption(77)==="altKey",T=[],A=Object.keys(this.currentOccurrences);for(const N of A){const M=this.currentOccurrences[N];T.push(M.decorationId)}const P=[];if(D)for(const N of D)P.push(h.decoration(N,I));this.editor.changeDecorations(N=>{const M=N.deltaDecorations(T,P);this.currentOccurrences={},this.activeLinkDecorationId=null;for(let R=0,x=M.length;R{A.activate(P,T),this.activeLinkDecorationId=A.decorationId})}else this.cleanUpActiveLinkDecoration()}cleanUpActiveLinkDecoration(){const D=this.editor.getOption(77)==="altKey";if(this.activeLinkDecorationId){const I=this.currentOccurrences[this.activeLinkDecorationId];I&&this.editor.changeDecorations(T=>{I.deactivate(T,D)}),this.activeLinkDecorationId=null}}onEditorMouseUp(D){if(!this.isEnabled(D))return;const I=this.getLinkOccurrence(D.target.position);I&&this.openLinkOccurrence(I,D.hasSideBySideModifier,!0)}openLinkOccurrence(D,I,T=!1){if(!this.openerService)return;const{link:A}=D;A.resolve(k.CancellationToken.None).then(P=>{if(typeof P=="string"&&this.editor.hasModel()){const N=this.editor.getModel().uri;if(N.scheme===p.Schemas.file&&P.startsWith(`${p.Schemas.file}:`)){const M=a.URI.parse(P);if(M.scheme===p.Schemas.file){const R=v.originalFSPath(M);let x=null;R.startsWith("/./")?x=`.${R.substr(1)}`:R.startsWith("//./")&&(x=`.${R.substr(2)}`),x&&(P=v.joinPath(N,x))}}}return this.openerService.open(P,{openToSide:I,fromUserGesture:T,allowContributedOpeners:!0,allowCommands:!0,fromWorkspace:!0})},P=>{const N=P instanceof Error?P.message:P;N==="invalid"?this.notificationService.warn(c.localize(0,null,A.url.toString())):N==="missing"?this.notificationService.warn(c.localize(1,null)):(0,y.onUnexpectedError)(P)})}getLinkOccurrence(D){if(!this.editor.hasModel()||!D)return null;const I=this.editor.getModel().getDecorationsInRange({startLineNumber:D.lineNumber,startColumn:D.column,endLineNumber:D.lineNumber,endColumn:D.column},0,!0);for(const T of I){const A=this.currentOccurrences[T.id];if(A)return A}return null}isEnabled(D,I){return!!(D.target.type===6&&(D.hasTriggerModifier||I&&I.keyCodeIsTriggerKey))}stop(){var D;this.computeLinks.cancel(),this.activeLinksList&&((D=this.activeLinksList)===null||D===void 0||D.dispose(),this.activeLinksList=null),this.computePromise&&(this.computePromise.cancel(),this.computePromise=null)}dispose(){super.dispose(),this.stop()}};e.LinkDetector=o,o.ID="editor.linkDetector",e.LinkDetector=o=l=ke([ge(1,s.IOpenerService),ge(2,d.INotificationService),ge(3,r.ILanguageFeaturesService),ge(4,t.ILanguageFeatureDebounceService)],o);const g={general:n.ModelDecorationOptions.register({description:"detected-link",stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:"detected-link"}),active:n.ModelDecorationOptions.register({description:"detected-link-active",stickiness:1,collapseOnReplaceEdit:!0,inlineClassName:"detected-link-active"})};class h{static decoration(D,I){return{range:D.range,options:h._getOptions(D,I,!1)}}static _getOptions(D,I,T){const A={...T?g.active:g.general};return A.hoverMessage=m(D,I),A}constructor(D,I){this.link=D,this.decorationId=I}activate(D,I){D.changeDecorationOptions(this.decorationId,h._getOptions(this.link,I,!0))}deactivate(D,I){D.changeDecorationOptions(this.decorationId,h._getOptions(this.link,I,!1))}}function m(w,D){const I=w.url&&/^command:/i.test(w.url.toString()),T=w.tooltip?w.tooltip:I?c.localize(2,null):c.localize(3,null),A=D?_.isMacintosh?c.localize(4,null):c.localize(5,null):_.isMacintosh?c.localize(6,null):c.localize(7,null);if(w.url){let P="";if(/^command:/i.test(w.url.toString())){const M=w.url.toString().match(/^command:([^?#]+)/);if(M){const R=M[1];P=c.localize(8,null,R)}}return new E.MarkdownString("",!0).appendLink(w.url.toString(!0).replace(/ /g,"%20"),T,P).appendMarkdown(` (${A})`)}else return new E.MarkdownString().appendText(`${T} (${A})`)}class C extends i.EditorAction{constructor(){super({id:"editor.action.openLink",label:c.localize(9,null),alias:"Open Link",precondition:void 0})}run(D,I){const T=o.get(I);if(!T||!I.hasModel())return;const A=I.getSelections();for(const P of A){const N=T.getLinkOccurrence(P.getEndPosition());N&&T.openLinkOccurrence(N,!1)}}}(0,i.registerEditorContribution)(o.ID,o,1),(0,i.registerEditorAction)(C)}),define(se[906],oe([1,0,2,18,165,14,261,304,303,32,12,310,52]),function(te,e,L,k,y,E,S,p,_,v,b,a,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StickyModelProvider=void 0;var n;(function(l){l.OUTLINE_MODEL="outlineModel",l.FOLDING_PROVIDER_MODEL="foldingProviderModel",l.INDENTATION_MODEL="indentationModel"})(n||(n={}));var t;(function(l){l[l.VALID=0]="VALID",l[l.INVALID=1]="INVALID",l[l.CANCELED=2]="CANCELED"})(t||(t={}));let r=class extends L.Disposable{constructor(o,g,h,m){super(),this._editor=o,this._languageConfigurationService=g,this._languageFeaturesService=h,this._modelProviders=[],this._modelPromise=null,this._updateScheduler=this._register(new E.Delayer(300)),this._updateOperation=this._register(new L.DisposableStore);const C=new f(h),w=new s(this._editor,h),D=new d(this._editor,g);switch(m){case n.OUTLINE_MODEL:this._modelProviders.push(C),this._modelProviders.push(w),this._modelProviders.push(D);break;case n.FOLDING_PROVIDER_MODEL:this._modelProviders.push(w),this._modelProviders.push(D);break;case n.INDENTATION_MODEL:this._modelProviders.push(D);break}}_cancelModelPromise(){this._modelPromise&&(this._modelPromise.cancel(),this._modelPromise=null)}async update(o,g,h){return this._updateOperation.clear(),this._updateOperation.add({dispose:()=>{this._cancelModelPromise(),this._updateScheduler.cancel()}}),this._cancelModelPromise(),await this._updateScheduler.trigger(async()=>{for(const m of this._modelProviders){const{statusPromise:C,modelPromise:w}=m.computeStickyModel(o,g,h);this._modelPromise=w;const D=await C;if(this._modelPromise!==w)return null;switch(D){case t.CANCELED:return this._updateOperation.clear(),null;case t.VALID:return m.stickyModel}}return null}).catch(m=>((0,b.onUnexpectedError)(m),null))}};e.StickyModelProvider=r,e.StickyModelProvider=r=ke([ge(1,v.ILanguageConfigurationService),ge(2,k.ILanguageFeaturesService)],r);class u{constructor(){this._stickyModel=null}get stickyModel(){return this._stickyModel}_invalid(){return this._stickyModel=null,t.INVALID}computeStickyModel(o,g,h){if(h.isCancellationRequested||!this.isProviderValid(o))return{statusPromise:this._invalid(),modelPromise:null};const m=(0,E.createCancelablePromise)(C=>this.createModelFromProvider(o,g,C));return{statusPromise:m.then(C=>this.isModelValid(C)?h.isCancellationRequested?t.CANCELED:(this._stickyModel=this.createStickyModel(o,g,h,C),t.VALID):this._invalid()).then(void 0,C=>((0,b.onUnexpectedError)(C),t.CANCELED)),modelPromise:m}}isModelValid(o){return!0}isProviderValid(o){return!0}}let f=class extends u{constructor(o){super(),this._languageFeaturesService=o}createModelFromProvider(o,g,h){return y.OutlineModel.create(this._languageFeaturesService.documentSymbolProvider,o,h)}createStickyModel(o,g,h,m){var C;const{stickyOutlineElement:w,providerID:D}=this._stickyModelFromOutlineModel(m,(C=this._stickyModel)===null||C===void 0?void 0:C.outlineProviderId);return new a.StickyModel(o.uri,g,w,D)}isModelValid(o){return o&&o.children.size>0}_stickyModelFromOutlineModel(o,g){let h;if(i.Iterable.first(o.children.values())instanceof y.OutlineGroup){const D=i.Iterable.find(o.children.values(),I=>I.id===g);if(D)h=D.children;else{let I="",T=-1,A;for(const[P,N]of o.children.entries()){const M=this._findSumOfRangesOfGroup(N);M>T&&(A=N,T=M,I=N.id)}g=I,h=A.children}}else h=o.children;const m=[],C=Array.from(h.values()).sort((D,I)=>{const T=new a.StickyRange(D.symbol.range.startLineNumber,D.symbol.range.endLineNumber),A=new a.StickyRange(I.symbol.range.startLineNumber,I.symbol.range.endLineNumber);return this._comparator(T,A)});for(const D of C)m.push(this._stickyModelFromOutlineElement(D,D.symbol.selectionRange.startLineNumber));return{stickyOutlineElement:new a.StickyElement(void 0,m,void 0),providerID:g}}_stickyModelFromOutlineElement(o,g){const h=[];for(const C of o.children.values())if(C.symbol.selectionRange.startLineNumber!==C.symbol.range.endLineNumber)if(C.symbol.selectionRange.startLineNumber!==g)h.push(this._stickyModelFromOutlineElement(C,C.symbol.selectionRange.startLineNumber));else for(const w of C.children.values())h.push(this._stickyModelFromOutlineElement(w,C.symbol.selectionRange.startLineNumber));h.sort((C,w)=>this._comparator(C.range,w.range));const m=new a.StickyRange(o.symbol.selectionRange.startLineNumber,o.symbol.range.endLineNumber);return new a.StickyElement(m,h,void 0)}_comparator(o,g){return o.startLineNumber!==g.startLineNumber?o.startLineNumber-g.startLineNumber:g.endLineNumber-o.endLineNumber}_findSumOfRangesOfGroup(o){let g=0;for(const h of o.children.values())g+=this._findSumOfRangesOfGroup(h);return o instanceof y.OutlineElement?g+o.symbol.range.endLineNumber-o.symbol.selectionRange.startLineNumber:g}};f=ke([ge(0,k.ILanguageFeaturesService)],f);class c extends u{constructor(o){super(),this._foldingLimitReporter=new S.RangesLimitReporter(o)}createStickyModel(o,g,h,m){const C=this._fromFoldingRegions(m);return new a.StickyModel(o.uri,g,C,void 0)}isModelValid(o){return o!==null}_fromFoldingRegions(o){const g=o.length,h=[],m=new a.StickyElement(void 0,[],void 0);for(let C=0;C0}createModelFromProvider(o,g,h){const m=S.FoldingController.getFoldingRangeProviders(this._languageFeaturesService,o);return new p.SyntaxRangeProvider(o,m,()=>this.createModelFromProvider(o,g,h),this._foldingLimitReporter,void 0).compute(h)}};s=ke([ge(1,k.ILanguageFeaturesService)],s)}),define(se[907],oe([1,0,2,18,19,14,13,6,32,906]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StickyLineCandidateProvider=e.StickyLineCandidate=void 0;class b{constructor(n,t,r){this.startLineNumber=n,this.endLineNumber=t,this.nestingDepth=r}}e.StickyLineCandidate=b;let a=class extends L.Disposable{constructor(n,t,r){super(),this._languageFeaturesService=t,this._languageConfigurationService=r,this._onDidChangeStickyScroll=this._register(new p.Emitter),this.onDidChangeStickyScroll=this._onDidChangeStickyScroll.event,this._options=null,this._model=null,this._cts=null,this._stickyModelProvider=null,this._editor=n,this._sessionStore=this._register(new L.DisposableStore),this._updateSoon=this._register(new E.RunOnceScheduler(()=>this.update(),50)),this._register(this._editor.onDidChangeConfiguration(u=>{u.hasChanged(114)&&this.readConfiguration()})),this.readConfiguration()}readConfiguration(){this._stickyModelProvider=null,this._sessionStore.clear(),this._options=this._editor.getOption(114),this._options.enabled&&(this._stickyModelProvider=this._sessionStore.add(new v.StickyModelProvider(this._editor,this._languageConfigurationService,this._languageFeaturesService,this._options.defaultModel)),this._sessionStore.add(this._editor.onDidChangeModel(()=>{this._model=null,this._onDidChangeStickyScroll.fire(),this.update()})),this._sessionStore.add(this._editor.onDidChangeHiddenAreas(()=>this.update())),this._sessionStore.add(this._editor.onDidChangeModelContent(()=>this._updateSoon.schedule())),this._sessionStore.add(this._languageFeaturesService.documentSymbolProvider.onDidChange(()=>this.update())),this.update())}getVersionId(){var n;return(n=this._model)===null||n===void 0?void 0:n.version}async update(){var n;(n=this._cts)===null||n===void 0||n.dispose(!0),this._cts=new y.CancellationTokenSource,await this.updateStickyModel(this._cts.token),this._onDidChangeStickyScroll.fire()}async updateStickyModel(n){if(!this._editor.hasModel()||!this._stickyModelProvider||this._editor.getModel().isTooLargeForTokenization()){this._model=null;return}const t=this._editor.getModel(),r=t.getVersionId(),u=await this._stickyModelProvider.update(t,r,n);n.isCancellationRequested||(this._model=u)}updateIndex(n){return n===-1?n=0:n<0&&(n=-n-2),n}getCandidateStickyLinesIntersectingFromStickyModel(n,t,r,u,f){if(t.children.length===0)return;let c=f;const d=[];for(let o=0;oo-g)),l=this.updateIndex((0,S.binarySearch)(d,n.startLineNumber+u,(o,g)=>o-g));for(let o=s;o<=l;o++){const g=t.children[o];if(!g)return;if(g.range){const h=g.range.startLineNumber,m=g.range.endLineNumber;n.startLineNumber<=m+1&&h-1<=n.endLineNumber&&h!==c&&(c=h,r.push(new b(h,m-1,u+1)),this.getCandidateStickyLinesIntersectingFromStickyModel(n,g,r,u+1,h))}else this.getCandidateStickyLinesIntersectingFromStickyModel(n,g,r,u,f)}}getCandidateStickyLinesIntersecting(n){var t,r;if(!(!((t=this._model)===null||t===void 0)&&t.element))return[];let u=[];this.getCandidateStickyLinesIntersectingFromStickyModel(n,this._model.element,u,0,-1);const f=(r=this._editor._getViewModel())===null||r===void 0?void 0:r.getHiddenAreas();if(f)for(const c of f)u=u.filter(d=>!(d.startLineNumber>=c.startLineNumber&&d.endLineNumber<=c.endLineNumber+1));return u}};e.StickyLineCandidateProvider=a,e.StickyLineCandidateProvider=a=ke([ge(1,k.ILanguageFeaturesService),ge(2,_.ILanguageConfigurationService)],a)}),define(se[908],oe([1,0,7,93,13,2,28,255,168,10,102,155,120,378,477]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StickyScrollWidget=e.StickyScrollWidgetState=void 0;class t{constructor(h,m,C,w=null){this.startLineNumbers=h,this.endLineNumbers=m,this.lastLineRelativePosition=C,this.showEndForLine=w}equals(h){return!!h&&this.lastLineRelativePosition===h.lastLineRelativePosition&&this.showEndForLine===h.showEndForLine&&(0,y.equals)(this.startLineNumbers,h.startLineNumbers)&&(0,y.equals)(this.endLineNumbers,h.endLineNumbers)}}e.StickyScrollWidgetState=t;const r=(0,k.createTrustedTypesPolicy)("stickyScrollViewLayer",{createHTML:g=>g}),u="data-sticky-line-index",f="data-sticky-is-line",c="data-sticky-is-line-number",d="data-sticky-is-folding-icon";class s extends E.Disposable{constructor(h){super(),this._editor=h,this._foldingIconStore=new E.DisposableStore,this._rootDomNode=document.createElement("div"),this._lineNumbersDomNode=document.createElement("div"),this._linesDomNodeScrollable=document.createElement("div"),this._linesDomNode=document.createElement("div"),this._lineHeight=this._editor.getOption(66),this._renderedStickyLines=[],this._lineNumbers=[],this._lastLineRelativePosition=0,this._minContentWidthInPx=0,this._isOnGlyphMargin=!1,this._lineNumbersDomNode.className="sticky-widget-line-numbers",this._lineNumbersDomNode.setAttribute("role","none"),this._linesDomNode.className="sticky-widget-lines",this._linesDomNode.setAttribute("role","list"),this._linesDomNodeScrollable.className="sticky-widget-lines-scrollable",this._linesDomNodeScrollable.appendChild(this._linesDomNode),this._rootDomNode.className="sticky-widget",this._rootDomNode.classList.toggle("peek",h instanceof _.EmbeddedCodeEditorWidget),this._rootDomNode.appendChild(this._lineNumbersDomNode),this._rootDomNode.appendChild(this._linesDomNodeScrollable);const m=()=>{this._linesDomNode.style.left=this._editor.getOption(114).scrollWithEditor?`-${this._editor.getScrollLeft()}px`:"0px"};this._register(this._editor.onDidChangeConfiguration(C=>{C.hasChanged(114)&&m(),C.hasChanged(66)&&(this._lineHeight=this._editor.getOption(66))})),this._register(this._editor.onDidScrollChange(C=>{C.scrollLeftChanged&&m(),C.scrollWidthChanged&&this._updateWidgetWidth()})),this._register(this._editor.onDidChangeModel(()=>{m(),this._updateWidgetWidth()})),this._register(this._foldingIconStore),m(),this._register(this._editor.onDidLayoutChange(C=>{this._updateWidgetWidth()})),this._updateWidgetWidth()}get lineNumbers(){return this._lineNumbers}get lineNumberCount(){return this._lineNumbers.length}getRenderedStickyLine(h){return this._renderedStickyLines.find(m=>m.lineNumber===h)}getCurrentLines(){return this._lineNumbers}setState(h,m,C){if(C===void 0&&(!this._previousState&&!h||this._previousState&&this._previousState.equals(h)))return;const w=this._isWidgetHeightZero(h),D=w?void 0:h,I=w?0:this._findLineToRebuildWidgetFrom(h,C);this._renderRootNode(D,m,I),this._previousState=h}_isWidgetHeightZero(h){if(!h)return!0;const m=h.startLineNumbers.length*this._lineHeight+h.lastLineRelativePosition;if(m>0){this._lastLineRelativePosition=h.lastLineRelativePosition;const C=[...h.startLineNumbers];h.showEndForLine!==null&&(C[h.showEndForLine]=h.endLineNumbers[h.showEndForLine]),this._lineNumbers=C}else this._lastLineRelativePosition=0,this._lineNumbers=[];return m===0}_findLineToRebuildWidgetFrom(h,m){if(!h||!this._previousState)return 0;if(m!==void 0)return m;const C=this._previousState,w=h.startLineNumbers.findIndex(D=>!C.startLineNumbers.includes(D));return w===-1?0:w}_updateWidgetWidth(){const h=this._editor.getLayoutInfo(),m=h.contentLeft;this._lineNumbersDomNode.style.width=`${m}px`,this._linesDomNodeScrollable.style.setProperty("--vscode-editorStickyScroll-scrollableWidth",`${this._editor.getScrollWidth()-h.verticalScrollbarWidth}px`),this._rootDomNode.style.width=`${h.width-h.verticalScrollbarWidth}px`}_clearStickyLinesFromLine(h){this._foldingIconStore.clear();for(let m=h;mT.scrollWidth))+w.verticalScrollbarWidth,this._editor.layoutOverlayWidget(this)}_setFoldingHoverListeners(){this._editor.getOption(109)==="mouseover"&&(this._foldingIconStore.add(L.addDisposableListener(this._lineNumbersDomNode,L.EventType.MOUSE_ENTER,()=>{this._isOnGlyphMargin=!0,this._setFoldingIconsVisibility(!0)})),this._foldingIconStore.add(L.addDisposableListener(this._lineNumbersDomNode,L.EventType.MOUSE_LEAVE,()=>{this._isOnGlyphMargin=!1,this._useFoldingOpacityTransition(!0),this._setFoldingIconsVisibility(!1)})))}_renderChildNode(h,m,C,w){const D=this._editor._getViewModel();if(!D)return;const I=D.coordinatesConverter.convertModelPositionToViewPosition(new v.Position(m,1)).lineNumber,T=D.getViewLineRenderingData(I),A=this._editor.getOption(67);let P;try{P=a.LineDecoration.filter(T.inlineDecorations,I,T.minColumn,T.maxColumn)}catch{P=[]}const N=new i.RenderLineInput(!0,!0,T.content,T.continuesWithWrappedLine,T.isBasicASCII,T.containsRTL,0,T.tokens,P,T.tabSize,T.startVisibleColumn,1,1,1,500,"none",!0,!0,null),M=new b.StringBuilder(2e3),R=(0,i.renderViewLine)(N,M);let x;r?x=r.createHTML(M.build()):x=M.build();const O=document.createElement("span");O.setAttribute(u,String(h)),O.setAttribute(f,""),O.setAttribute("role","listitem"),O.tabIndex=0,O.className="sticky-line-content",O.classList.add(`stickyLine${m}`),O.style.lineHeight=`${this._lineHeight}px`,O.innerHTML=x;const B=document.createElement("span");B.setAttribute(u,String(h)),B.setAttribute(c,""),B.className="sticky-line-number",B.style.lineHeight=`${this._lineHeight}px`;const W=w.contentLeft;B.style.width=`${W}px`;const V=document.createElement("span");A.renderType===1||A.renderType===3&&m%10===0?V.innerText=m.toString():A.renderType===2&&(V.innerText=Math.abs(m-this._editor.getPosition().lineNumber).toString()),V.className="sticky-line-number-inner",V.style.lineHeight=`${this._lineHeight}px`,V.style.width=`${w.lineNumbersWidth}px`,V.style.paddingLeft=`${w.lineNumbersLeft}px`,B.appendChild(V);const K=this._renderFoldingIconForLine(C,m);K&&B.appendChild(K.domNode),this._editor.applyFontInfo(O),this._editor.applyFontInfo(V),B.style.lineHeight=`${this._lineHeight}px`,O.style.lineHeight=`${this._lineHeight}px`,B.style.height=`${this._lineHeight}px`,O.style.height=`${this._lineHeight}px`;const F=new l(h,m,O,B,K,R.characterMapping,O.scrollWidth);return this._updateTopAndZIndexOfStickyLine(F)}_updateTopAndZIndexOfStickyLine(h){var m;const C=h.index,w=h.lineDomNode,D=h.lineNumberDomNode,I=C===this._lineNumbers.length-1,T="0",A="1";w.style.zIndex=I?T:A,D.style.zIndex=I?T:A;const P=`${C*this._lineHeight+this._lastLineRelativePosition+(!((m=h.foldingIcon)===null||m===void 0)&&m.isCollapsed?1:0)}px`,N=`${C*this._lineHeight}px`;return w.style.top=I?P:N,D.style.top=I?P:N,h}_renderFoldingIconForLine(h,m){const C=this._editor.getOption(109);if(!h||C==="never")return;const w=h.regions,D=w.findRange(m),I=w.getStartLineNumber(D);if(!(m===I))return;const A=w.isCollapsed(D),P=new o(A,I,w.getEndLineNumber(D),this._lineHeight);return P.setVisible(this._isOnGlyphMargin?!0:A||C==="always"),P.domNode.setAttribute(d,""),P}getId(){return"editor.contrib.stickyScrollWidget"}getDomNode(){return this._rootDomNode}getPosition(){return{preference:null}}getMinContentWidthInPx(){return this._minContentWidthInPx}focusLineWithIndex(h){0<=h&&h0)return null;const m=this._getRenderedStickyLineFromChildDomNode(h);if(!m)return null;const C=(0,p.getColumnOfNodeOffset)(m.characterMapping,h,0);return new v.Position(m.lineNumber,C)}getLineNumberFromChildDomNode(h){var m,C;return(C=(m=this._getRenderedStickyLineFromChildDomNode(h))===null||m===void 0?void 0:m.lineNumber)!==null&&C!==void 0?C:null}_getRenderedStickyLineFromChildDomNode(h){const m=this.getLineIndexFromChildDomNode(h);return m===null||m<0||m>=this._renderedStickyLines.length?null:this._renderedStickyLines[m]}getLineIndexFromChildDomNode(h){const m=this._getAttributeValue(h,u);return m?parseInt(m,10):null}isInStickyLine(h){return this._getAttributeValue(h,f)!==void 0}isInFoldingIconDomNode(h){return this._getAttributeValue(h,d)!==void 0}_getAttributeValue(h,m){for(;h&&h!==this._rootDomNode;){const C=h.getAttribute(m);if(C!==null)return C;h=h.parentElement}}}e.StickyScrollWidget=s;class l{constructor(h,m,C,w,D,I,T){this.index=h,this.lineNumber=m,this.lineDomNode=C,this.lineNumberDomNode=w,this.foldingIcon=D,this.characterMapping=I,this.scrollWidth=T}}class o{constructor(h,m,C,w){this.isCollapsed=h,this.foldingStartLine=m,this.foldingEndLine=C,this.dimension=w,this.domNode=document.createElement("div"),this.domNode.style.width=`${w}px`,this.domNode.style.height=`${w}px`,this.domNode.className=S.ThemeIcon.asClassName(h?n.foldingCollapsedIcon:n.foldingExpandedIcon)}setVisible(h){this.domNode.style.cursor=h?"pointer":"default",this.domNode.style.opacity=h?"1":"0"}}}),define(se[909],oe([1,0,7,119,14,12,6,2,145,11,168,877,718,15,8,92,29,89,23,225,138,355,872,106,48,177,478,254]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){"use strict";var m;Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestContentWidget=e.SuggestWidget=e.editorSuggestWidgetSelectedBackground=void 0,(0,u.registerColor)("editorSuggestWidget.background",{dark:u.editorWidgetBackground,light:u.editorWidgetBackground,hcDark:u.editorWidgetBackground,hcLight:u.editorWidgetBackground},i.localize(0,null)),(0,u.registerColor)("editorSuggestWidget.border",{dark:u.editorWidgetBorder,light:u.editorWidgetBorder,hcDark:u.editorWidgetBorder,hcLight:u.editorWidgetBorder},i.localize(1,null));const C=(0,u.registerColor)("editorSuggestWidget.foreground",{dark:u.editorForeground,light:u.editorForeground,hcDark:u.editorForeground,hcLight:u.editorForeground},i.localize(2,null));(0,u.registerColor)("editorSuggestWidget.selectedForeground",{dark:u.quickInputListFocusForeground,light:u.quickInputListFocusForeground,hcDark:u.quickInputListFocusForeground,hcLight:u.quickInputListFocusForeground},i.localize(3,null)),(0,u.registerColor)("editorSuggestWidget.selectedIconForeground",{dark:u.quickInputListFocusIconForeground,light:u.quickInputListFocusIconForeground,hcDark:u.quickInputListFocusIconForeground,hcLight:u.quickInputListFocusIconForeground},i.localize(4,null)),e.editorSuggestWidgetSelectedBackground=(0,u.registerColor)("editorSuggestWidget.selectedBackground",{dark:u.quickInputListFocusBackground,light:u.quickInputListFocusBackground,hcDark:u.quickInputListFocusBackground,hcLight:u.quickInputListFocusBackground},i.localize(5,null)),(0,u.registerColor)("editorSuggestWidget.highlightForeground",{dark:u.listHighlightForeground,light:u.listHighlightForeground,hcDark:u.listHighlightForeground,hcLight:u.listHighlightForeground},i.localize(6,null)),(0,u.registerColor)("editorSuggestWidget.focusHighlightForeground",{dark:u.listFocusHighlightForeground,light:u.listFocusHighlightForeground,hcDark:u.listFocusHighlightForeground,hcLight:u.listFocusHighlightForeground},i.localize(7,null)),(0,u.registerColor)("editorSuggestWidgetStatus.foreground",{dark:(0,u.transparent)(C,.5),light:(0,u.transparent)(C,.5),hcDark:(0,u.transparent)(C,.5),hcLight:(0,u.transparent)(C,.5)},i.localize(8,null));class w{constructor(A,P){this._service=A,this._key=`suggestWidget.size/${P.getEditorType()}/${P instanceof b.EmbeddedCodeEditorWidget}`}restore(){var A;const P=(A=this._service.get(this._key,0))!==null&&A!==void 0?A:"";try{const N=JSON.parse(P);if(L.Dimension.is(N))return L.Dimension.lift(N)}catch{}}store(A){this._service.store(this._key,JSON.stringify(A),0,1)}reset(){this._service.remove(this._key,0)}}let D=m=class{constructor(A,P,N,M,R){this.editor=A,this._storageService=P,this._state=0,this._isAuto=!1,this._pendingLayout=new p.MutableDisposable,this._pendingShowDetails=new p.MutableDisposable,this._ignoreFocusEvents=!1,this._forceRenderingAbove=!1,this._explainMode=!1,this._showTimeout=new y.TimeoutTimer,this._disposables=new p.DisposableStore,this._onDidSelect=new S.PauseableEmitter,this._onDidFocus=new S.PauseableEmitter,this._onDidHide=new S.Emitter,this._onDidShow=new S.Emitter,this.onDidSelect=this._onDidSelect.event,this.onDidFocus=this._onDidFocus.event,this.onDidHide=this._onDidHide.event,this.onDidShow=this._onDidShow.event,this._onDetailsKeydown=new S.Emitter,this.onDetailsKeyDown=this._onDetailsKeydown.event,this.element=new d.ResizableHTMLElement,this.element.domNode.classList.add("editor-widget","suggest-widget"),this._contentWidget=new I(this,A),this._persistedSize=new w(P,A);class x{constructor(q,ie,ae=!1,ne=!1){this.persistedSize=q,this.currentSize=ie,this.persistHeight=ae,this.persistWidth=ne}}let O;this._disposables.add(this.element.onDidWillResize(()=>{this._contentWidget.lockPreference(),O=new x(this._persistedSize.restore(),this.element.size)})),this._disposables.add(this.element.onDidResize(F=>{var q,ie,ae,ne;if(this._resize(F.dimension.width,F.dimension.height),O&&(O.persistHeight=O.persistHeight||!!F.north||!!F.south,O.persistWidth=O.persistWidth||!!F.east||!!F.west),!!F.done){if(O){const{itemHeight:$,defaultSize:J}=this.getLayoutInfo(),Q=Math.round($/2);let{width:re,height:de}=this.element.size;(!O.persistHeight||Math.abs(O.currentSize.height-de)<=Q)&&(de=(ie=(q=O.persistedSize)===null||q===void 0?void 0:q.height)!==null&&ie!==void 0?ie:J.height),(!O.persistWidth||Math.abs(O.currentSize.width-re)<=Q)&&(re=(ne=(ae=O.persistedSize)===null||ae===void 0?void 0:ae.width)!==null&&ne!==void 0?ne:J.width),this._persistedSize.store(new L.Dimension(re,de))}this._contentWidget.unlockPreference(),O=void 0}})),this._messageElement=L.append(this.element.domNode,L.$(".message")),this._listElement=L.append(this.element.domNode,L.$(".tree"));const B=this._disposables.add(R.createInstance(l.SuggestDetailsWidget,this.editor));B.onDidClose(this.toggleDetails,this,this._disposables),this._details=new l.SuggestDetailsOverlay(B,this.editor);const W=()=>this.element.domNode.classList.toggle("no-icons",!this.editor.getOption(117).showIcons);W();const V=R.createInstance(o.ItemRenderer,this.editor);this._disposables.add(V),this._disposables.add(V.onDidToggleDetails(()=>this.toggleDetails())),this._list=new k.List("SuggestWidget",this._listElement,{getHeight:F=>this.getLayoutInfo().itemHeight,getTemplateId:F=>"suggestion"},[V],{alwaysConsumeMouseWheel:!0,useShadows:!1,mouseSupport:!1,multipleSelectionSupport:!1,accessibilityProvider:{getRole:()=>"option",getWidgetAriaLabel:()=>i.localize(11,null),getWidgetRole:()=>"listbox",getAriaLabel:F=>{let q=F.textLabel;if(typeof F.completion.label!="string"){const{detail:$,description:J}=F.completion.label;$&&J?q=i.localize(12,null,q,$,J):$?q=i.localize(13,null,q,$):J&&(q=i.localize(14,null,q,J))}if(!F.isResolved||!this._isDetailsVisible())return q;const{documentation:ie,detail:ae}=F.completion,ne=v.format("{0}{1}",ae||"",ie?typeof ie=="string"?ie:ie.value:"");return i.localize(15,null,q,ne)}}}),this._list.style((0,g.getListStyles)({listInactiveFocusBackground:e.editorSuggestWidgetSelectedBackground,listInactiveFocusOutline:u.activeContrastBorder})),this._status=R.createInstance(a.SuggestWidgetStatus,this.element.domNode,s.suggestWidgetStatusbarMenu);const K=()=>this.element.domNode.classList.toggle("with-status-bar",this.editor.getOption(117).showStatusBar);K(),this._disposables.add(M.onDidColorThemeChange(F=>this._onThemeChange(F))),this._onThemeChange(M.getColorTheme()),this._disposables.add(this._list.onMouseDown(F=>this._onListMouseDownOrTap(F))),this._disposables.add(this._list.onTap(F=>this._onListMouseDownOrTap(F))),this._disposables.add(this._list.onDidChangeSelection(F=>this._onListSelection(F))),this._disposables.add(this._list.onDidChangeFocus(F=>this._onListFocus(F))),this._disposables.add(this.editor.onDidChangeCursorSelection(()=>this._onCursorSelectionChanged())),this._disposables.add(this.editor.onDidChangeConfiguration(F=>{F.hasChanged(117)&&(K(),W()),this._completionModel&&(F.hasChanged(50)||F.hasChanged(118)||F.hasChanged(119))&&this._list.splice(0,this._list.length,this._completionModel.items)})),this._ctxSuggestWidgetVisible=s.Context.Visible.bindTo(N),this._ctxSuggestWidgetDetailsVisible=s.Context.DetailsVisible.bindTo(N),this._ctxSuggestWidgetMultipleSuggestions=s.Context.MultipleSuggestions.bindTo(N),this._ctxSuggestWidgetHasFocusedSuggestion=s.Context.HasFocusedSuggestion.bindTo(N),this._disposables.add(L.addStandardDisposableListener(this._details.widget.domNode,"keydown",F=>{this._onDetailsKeydown.fire(F)})),this._disposables.add(this.editor.onMouseDown(F=>this._onEditorMouseDown(F)))}dispose(){var A;this._details.widget.dispose(),this._details.dispose(),this._list.dispose(),this._status.dispose(),this._disposables.dispose(),(A=this._loadingTimeout)===null||A===void 0||A.dispose(),this._pendingLayout.dispose(),this._pendingShowDetails.dispose(),this._showTimeout.dispose(),this._contentWidget.dispose(),this.element.dispose()}_onEditorMouseDown(A){this._details.widget.domNode.contains(A.target.element)?this._details.widget.domNode.focus():this.element.domNode.contains(A.target.element)&&this.editor.focus()}_onCursorSelectionChanged(){this._state!==0&&this._contentWidget.layout()}_onListMouseDownOrTap(A){typeof A.element>"u"||typeof A.index>"u"||(A.browserEvent.preventDefault(),A.browserEvent.stopPropagation(),this._select(A.element,A.index))}_onListSelection(A){A.elements.length&&this._select(A.elements[0],A.indexes[0])}_select(A,P){const N=this._completionModel;N&&(this._onDidSelect.fire({item:A,index:P,model:N}),this.editor.focus())}_onThemeChange(A){this._details.widget.borderWidth=(0,f.isHighContrast)(A.type)?2:1}_onListFocus(A){var P;if(this._ignoreFocusEvents)return;if(!A.elements.length){this._currentSuggestionDetails&&(this._currentSuggestionDetails.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=void 0),this.editor.setAriaOptions({activeDescendant:void 0}),this._ctxSuggestWidgetHasFocusedSuggestion.set(!1);return}if(!this._completionModel)return;this._ctxSuggestWidgetHasFocusedSuggestion.set(!0);const N=A.elements[0],M=A.indexes[0];N!==this._focusedItem&&((P=this._currentSuggestionDetails)===null||P===void 0||P.cancel(),this._currentSuggestionDetails=void 0,this._focusedItem=N,this._list.reveal(M),this._currentSuggestionDetails=(0,y.createCancelablePromise)(async R=>{const x=(0,y.disposableTimeout)(()=>{this._isDetailsVisible()&&this.showDetails(!0)},250),O=R.onCancellationRequested(()=>x.dispose());try{return await N.resolve(R)}finally{x.dispose(),O.dispose()}}),this._currentSuggestionDetails.then(()=>{M>=this._list.length||N!==this._list.element(M)||(this._ignoreFocusEvents=!0,this._list.splice(M,1,[N]),this._list.setFocus([M]),this._ignoreFocusEvents=!1,this._isDetailsVisible()?this.showDetails(!1):this.element.domNode.classList.remove("docs-side"),this.editor.setAriaOptions({activeDescendant:(0,o.getAriaId)(M)}))}).catch(E.onUnexpectedError)),this._onDidFocus.fire({item:N,index:M,model:this._completionModel})}_setState(A){if(this._state!==A)switch(this._state=A,this.element.domNode.classList.toggle("frozen",A===4),this.element.domNode.classList.remove("message"),A){case 0:L.hide(this._messageElement,this._listElement,this._status.element),this._details.hide(!0),this._status.hide(),this._contentWidget.hide(),this._ctxSuggestWidgetVisible.reset(),this._ctxSuggestWidgetMultipleSuggestions.reset(),this._ctxSuggestWidgetHasFocusedSuggestion.reset(),this._showTimeout.cancel(),this.element.domNode.classList.remove("visible"),this._list.splice(0,this._list.length),this._focusedItem=void 0,this._cappedHeight=void 0,this._explainMode=!1;break;case 1:this.element.domNode.classList.add("message"),this._messageElement.textContent=m.LOADING_MESSAGE,L.hide(this._listElement,this._status.element),L.show(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0,(0,h.status)(m.LOADING_MESSAGE);break;case 2:this.element.domNode.classList.add("message"),this._messageElement.textContent=m.NO_SUGGESTIONS_MESSAGE,L.hide(this._listElement,this._status.element),L.show(this._messageElement),this._details.hide(),this._show(),this._focusedItem=void 0,(0,h.status)(m.NO_SUGGESTIONS_MESSAGE);break;case 3:L.hide(this._messageElement),L.show(this._listElement,this._status.element),this._show();break;case 4:L.hide(this._messageElement),L.show(this._listElement,this._status.element),this._show();break;case 5:L.hide(this._messageElement),L.show(this._listElement,this._status.element),this._details.show(),this._show();break}}_show(){this._status.show(),this._contentWidget.show(),this._layout(this._persistedSize.restore()),this._ctxSuggestWidgetVisible.set(!0),this._showTimeout.cancelAndSet(()=>{this.element.domNode.classList.add("visible"),this._onDidShow.fire(this)},100)}showTriggered(A,P){this._state===0&&(this._contentWidget.setPosition(this.editor.getPosition()),this._isAuto=!!A,this._isAuto||(this._loadingTimeout=(0,y.disposableTimeout)(()=>this._setState(1),P)))}showSuggestions(A,P,N,M,R){var x,O;if(this._contentWidget.setPosition(this.editor.getPosition()),(x=this._loadingTimeout)===null||x===void 0||x.dispose(),(O=this._currentSuggestionDetails)===null||O===void 0||O.cancel(),this._currentSuggestionDetails=void 0,this._completionModel!==A&&(this._completionModel=A),N&&this._state!==2&&this._state!==0){this._setState(4);return}const B=this._completionModel.items.length,W=B===0;if(this._ctxSuggestWidgetMultipleSuggestions.set(B>1),W){this._setState(M?0:2),this._completionModel=void 0;return}this._focusedItem=void 0,this._onDidFocus.pause(),this._onDidSelect.pause();try{this._list.splice(0,this._list.length,this._completionModel.items),this._setState(N?4:3),this._list.reveal(P,0),this._list.setFocus(R?[]:[P])}finally{this._onDidFocus.resume(),this._onDidSelect.resume()}this._pendingLayout.value=L.runAtThisOrScheduleAtNextAnimationFrame(L.getWindow(this.element.domNode),()=>{this._pendingLayout.clear(),this._layout(this.element.size),this._details.widget.domNode.classList.remove("focused")})}focusSelected(){this._list.length>0&&this._list.setFocus([0])}selectNextPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageDown(),!0;case 1:return!this._isAuto;default:return this._list.focusNextPage(),!0}}selectNext(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusNext(1,!0),!0}}selectLast(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollBottom(),!0;case 1:return!this._isAuto;default:return this._list.focusLast(),!0}}selectPreviousPage(){switch(this._state){case 0:return!1;case 5:return this._details.widget.pageUp(),!0;case 1:return!this._isAuto;default:return this._list.focusPreviousPage(),!0}}selectPrevious(){switch(this._state){case 0:return!1;case 1:return!this._isAuto;default:return this._list.focusPrevious(1,!0),!1}}selectFirst(){switch(this._state){case 0:return!1;case 5:return this._details.widget.scrollTop(),!0;case 1:return!this._isAuto;default:return this._list.focusFirst(),!0}}getFocusedItem(){if(this._state!==0&&this._state!==2&&this._state!==1&&this._completionModel&&this._list.getFocus().length>0)return{item:this._list.getFocusedElements()[0],index:this._list.getFocus()[0],model:this._completionModel}}toggleDetailsFocus(){this._state===5?(this._setState(3),this._details.widget.domNode.classList.remove("focused")):this._state===3&&this._isDetailsVisible()&&(this._setState(5),this._details.widget.domNode.classList.add("focused"))}toggleDetails(){this._isDetailsVisible()?(this._pendingShowDetails.clear(),this._ctxSuggestWidgetDetailsVisible.set(!1),this._setDetailsVisible(!1),this._details.hide(),this.element.domNode.classList.remove("shows-details")):((0,l.canExpandCompletionItem)(this._list.getFocusedElements()[0])||this._explainMode)&&(this._state===3||this._state===5||this._state===4)&&(this._ctxSuggestWidgetDetailsVisible.set(!0),this._setDetailsVisible(!0),this.showDetails(!1))}showDetails(A){this._pendingShowDetails.value=L.runAtThisOrScheduleAtNextAnimationFrame(L.getWindow(this.element.domNode),()=>{this._pendingShowDetails.clear(),this._details.show(),A?this._details.widget.renderLoading():this._details.widget.renderItem(this._list.getFocusedElements()[0],this._explainMode),this._details.widget.isEmpty?this._details.hide():(this._positionDetails(),this.element.domNode.classList.add("shows-details")),this.editor.focus()})}toggleExplainMode(){this._list.getFocusedElements()[0]&&(this._explainMode=!this._explainMode,this._isDetailsVisible()?this.showDetails(!1):this.toggleDetails())}resetPersistedSize(){this._persistedSize.reset()}hideWidget(){var A;this._pendingLayout.clear(),this._pendingShowDetails.clear(),(A=this._loadingTimeout)===null||A===void 0||A.dispose(),this._setState(0),this._onDidHide.fire(this),this.element.clearSashHoverState();const P=this._persistedSize.restore(),N=Math.ceil(this.getLayoutInfo().itemHeight*4.3);P&&P.heightW&&(B=W);const V=this._completionModel?this._completionModel.stats.pLabelLen*x.typicalHalfwidthCharacterWidth:B,K=x.statusBarHeight+this._list.contentHeight+x.borderHeight,F=x.itemHeight+x.statusBarHeight,q=L.getDomNodePagePosition(this.editor.getDomNode()),ie=this.editor.getScrolledVisiblePosition(this.editor.getPosition()),ae=q.top+ie.top+ie.height,ne=Math.min(R.height-ae-x.verticalPadding,K),$=q.top+ie.top-x.verticalPadding,J=Math.min($,K);let Q=Math.min(Math.max(J,ne)+x.borderHeight,K);O===((P=this._cappedHeight)===null||P===void 0?void 0:P.capped)&&(O=this._cappedHeight.wanted),OQ&&(O=Q);const re=150;O>ne||this._forceRenderingAbove&&$>re?(this._contentWidget.setPreference(1),this.element.enableSashes(!0,!0,!1,!1),Q=J):(this._contentWidget.setPreference(2),this.element.enableSashes(!1,!0,!0,!1),Q=ne),this.element.preferredSize=new L.Dimension(V,x.defaultSize.height),this.element.maxSize=new L.Dimension(W,Q),this.element.minSize=new L.Dimension(220,F),this._cappedHeight=O===K?{wanted:(M=(N=this._cappedHeight)===null||N===void 0?void 0:N.wanted)!==null&&M!==void 0?M:A.height,capped:O}:void 0}this._resize(B,O)}_resize(A,P){const{width:N,height:M}=this.element.maxSize;A=Math.min(N,A),P=Math.min(M,P);const{statusBarHeight:R}=this.getLayoutInfo();this._list.layout(P-R,A),this._listElement.style.height=`${P-R}px`,this.element.layout(P,A),this._contentWidget.layout(),this._positionDetails()}_positionDetails(){var A;this._isDetailsVisible()&&this._details.placeAtAnchor(this.element.domNode,((A=this._contentWidget.getPosition())===null||A===void 0?void 0:A.preference[0])===2)}getLayoutInfo(){const A=this.editor.getOption(50),P=(0,_.clamp)(this.editor.getOption(119)||A.lineHeight,8,1e3),N=!this.editor.getOption(117).showStatusBar||this._state===2||this._state===1?0:P,M=this._details.widget.borderWidth,R=2*M;return{itemHeight:P,statusBarHeight:N,borderWidth:M,borderHeight:R,typicalHalfwidthCharacterWidth:A.typicalHalfwidthCharacterWidth,verticalPadding:22,horizontalPadding:14,defaultSize:new L.Dimension(430,N+12*P+R)}}_isDetailsVisible(){return this._storageService.getBoolean("expandSuggestionDocs",0,!1)}_setDetailsVisible(A){this._storageService.store("expandSuggestionDocs",A,0,0)}forceRenderingAbove(){this._forceRenderingAbove||(this._forceRenderingAbove=!0,this._layout(this._persistedSize.restore()))}stopForceRenderingAbove(){this._forceRenderingAbove=!1}};e.SuggestWidget=D,D.LOADING_MESSAGE=i.localize(9,null),D.NO_SUGGESTIONS_MESSAGE=i.localize(10,null),e.SuggestWidget=D=m=ke([ge(1,r.IStorageService),ge(2,n.IContextKeyService),ge(3,c.IThemeService),ge(4,t.IInstantiationService)],D);class I{constructor(A,P){this._widget=A,this._editor=P,this.allowEditorOverflow=!0,this.suppressMouseDown=!1,this._preferenceLocked=!1,this._added=!1,this._hidden=!1}dispose(){this._added&&(this._added=!1,this._editor.removeContentWidget(this))}getId(){return"editor.widget.suggestWidget"}getDomNode(){return this._widget.element.domNode}show(){this._hidden=!1,this._added||(this._added=!0,this._editor.addContentWidget(this))}hide(){this._hidden||(this._hidden=!0,this.layout())}layout(){this._editor.layoutContentWidget(this)}getPosition(){return this._hidden||!this._position||!this._preference?null:{position:this._position,preference:[this._preference]}}beforeRender(){const{height:A,width:P}=this._widget.element.size,{borderWidth:N,horizontalPadding:M}=this._widget.getLayoutInfo();return new L.Dimension(P+2*N+M,A+2*N)}afterRender(A){this._widget._afterRender(A)}setPreference(A){this._preferenceLocked||(this._preference=A)}lockPreference(){this._preferenceLocked=!0}unlockPreference(){this._preferenceLocked=!1}setPosition(A){this._position=A}}e.SuggestContentWidget=I}),define(se[381],oe([1,0,41,38,31,727,29,23,482]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.getSelectionHighlightDecorationOptions=e.getHighlightDecorationOptions=void 0;const _=(0,S.registerColor)("editor.wordHighlightBackground",{dark:"#575757B8",light:"#57575740",hcDark:null,hcLight:null},E.localize(0,null),!0);(0,S.registerColor)("editor.wordHighlightStrongBackground",{dark:"#004972B8",light:"#0e639c40",hcDark:null,hcLight:null},E.localize(1,null),!0),(0,S.registerColor)("editor.wordHighlightTextBackground",{light:_,dark:_,hcDark:_,hcLight:_},E.localize(2,null),!0);const v=(0,S.registerColor)("editor.wordHighlightBorder",{light:null,dark:null,hcDark:S.activeContrastBorder,hcLight:S.activeContrastBorder},E.localize(3,null));(0,S.registerColor)("editor.wordHighlightStrongBorder",{light:null,dark:null,hcDark:S.activeContrastBorder,hcLight:S.activeContrastBorder},E.localize(4,null)),(0,S.registerColor)("editor.wordHighlightTextBorder",{light:v,dark:v,hcDark:v,hcLight:v},E.localize(5,null));const b=(0,S.registerColor)("editorOverviewRuler.wordHighlightForeground",{dark:"#A0A0A0CC",light:"#A0A0A0CC",hcDark:"#A0A0A0CC",hcLight:"#A0A0A0CC"},E.localize(6,null),!0),a=(0,S.registerColor)("editorOverviewRuler.wordHighlightStrongForeground",{dark:"#C0A0C0CC",light:"#C0A0C0CC",hcDark:"#C0A0C0CC",hcLight:"#C0A0C0CC"},E.localize(7,null),!0),i=(0,S.registerColor)("editorOverviewRuler.wordHighlightTextForeground",{dark:S.overviewRulerSelectionHighlightForeground,light:S.overviewRulerSelectionHighlightForeground,hcDark:S.overviewRulerSelectionHighlightForeground,hcLight:S.overviewRulerSelectionHighlightForeground},E.localize(8,null),!0),n=k.ModelDecorationOptions.register({description:"word-highlight-strong",stickiness:1,className:"wordHighlightStrong",overviewRuler:{color:(0,p.themeColorFromId)(a),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}}),t=k.ModelDecorationOptions.register({description:"word-highlight-text",stickiness:1,className:"wordHighlightText",overviewRuler:{color:(0,p.themeColorFromId)(i),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}}),r=k.ModelDecorationOptions.register({description:"selection-highlight-overview",stickiness:1,className:"selectionHighlight",overviewRuler:{color:(0,p.themeColorFromId)(S.overviewRulerSelectionHighlightForeground),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}}),u=k.ModelDecorationOptions.register({description:"selection-highlight",stickiness:1,className:"selectionHighlight"}),f=k.ModelDecorationOptions.register({description:"word-highlight",stickiness:1,className:"wordHighlight",overviewRuler:{color:(0,p.themeColorFromId)(b),position:L.OverviewRulerLane.Center},minimap:{color:(0,p.themeColorFromId)(S.minimapSelectionOccurrenceHighlight),position:L.MinimapPosition.Inline}});function c(s){return s===y.DocumentHighlightKind.Write?n:s===y.DocumentHighlightKind.Text?t:f}e.getHighlightDecorationOptions=c;function d(s){return s?u:r}e.getSelectionHighlightDecorationOptions=d,(0,p.registerThemingParticipant)((s,l)=>{const o=s.getColor(S.editorSelectionHighlight);o&&l.addRule(`.monaco-editor .selectionHighlight { background-color: ${o.transparent(.5)}; }`)})}),define(se[910],oe([1,0,48,14,65,2,16,208,5,24,21,377,703,30,15,18,381,8]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){"use strict";var c;Object.defineProperty(e,"__esModule",{value:!0}),e.FocusPreviousCursor=e.FocusNextCursor=e.SelectionHighlighter=e.CompatChangeAll=e.SelectHighlightsAction=e.MoveSelectionToPreviousFindMatchAction=e.MoveSelectionToNextFindMatchAction=e.AddSelectionToPreviousFindMatchAction=e.AddSelectionToNextFindMatchAction=e.MultiCursorSelectionControllerAction=e.MultiCursorSelectionController=e.MultiCursorSession=e.MultiCursorSessionResult=e.InsertCursorBelow=e.InsertCursorAbove=void 0;function d(K,F){const q=F.filter(ie=>!K.find(ae=>ae.equals(ie)));if(q.length>=1){const ie=q.map(ne=>`line ${ne.viewState.position.lineNumber} column ${ne.viewState.position.column}`).join(", "),ae=q.length===1?i.localize(0,null,ie):i.localize(1,null,ie);(0,L.status)(ae)}}class s extends S.EditorAction{constructor(){super({id:"editor.action.insertCursorAbove",label:i.localize(2,null),alias:"Add Cursor Above",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:2576,linux:{primary:1552,secondary:[3088]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"3_multi",title:i.localize(3,null),order:2}})}run(F,q,ie){if(!q.hasModel())return;let ae=!0;ie&&ie.logicalLine===!1&&(ae=!1);const ne=q._getViewModel();if(ne.cursorConfig.readOnly)return;ne.model.pushStackElement();const $=ne.getCursorStates();ne.setCursorStates(ie.source,3,p.CursorMoveCommands.addCursorUp(ne,$,ae)),ne.revealTopMostCursor(ie.source),d($,ne.getCursorStates())}}e.InsertCursorAbove=s;class l extends S.EditorAction{constructor(){super({id:"editor.action.insertCursorBelow",label:i.localize(4,null),alias:"Add Cursor Below",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:2578,linux:{primary:1554,secondary:[3090]},weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"3_multi",title:i.localize(5,null),order:3}})}run(F,q,ie){if(!q.hasModel())return;let ae=!0;ie&&ie.logicalLine===!1&&(ae=!1);const ne=q._getViewModel();if(ne.cursorConfig.readOnly)return;ne.model.pushStackElement();const $=ne.getCursorStates();ne.setCursorStates(ie.source,3,p.CursorMoveCommands.addCursorDown(ne,$,ae)),ne.revealBottomMostCursor(ie.source),d($,ne.getCursorStates())}}e.InsertCursorBelow=l;class o extends S.EditorAction{constructor(){super({id:"editor.action.insertCursorAtEndOfEachLineSelected",label:i.localize(6,null),alias:"Add Cursors to Line Ends",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:1575,weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"3_multi",title:i.localize(7,null),order:4}})}getCursorsForSelection(F,q,ie){if(!F.isEmpty()){for(let ae=F.startLineNumber;ae1&&ie.push(new v.Selection(F.endLineNumber,F.endColumn,F.endLineNumber,F.endColumn))}}run(F,q){if(!q.hasModel())return;const ie=q.getModel(),ae=q.getSelections(),ne=q._getViewModel(),$=ne.getCursorStates(),J=[];ae.forEach(Q=>this.getCursorsForSelection(Q,ie,J)),J.length>0&&q.setSelections(J),d($,ne.getCursorStates())}}class g extends S.EditorAction{constructor(){super({id:"editor.action.addCursorsToBottom",label:i.localize(8,null),alias:"Add Cursors To Bottom",precondition:void 0})}run(F,q){if(!q.hasModel())return;const ie=q.getSelections(),ae=q.getModel().getLineCount(),ne=[];for(let Q=ie[0].startLineNumber;Q<=ae;Q++)ne.push(new v.Selection(Q,ie[0].startColumn,Q,ie[0].endColumn));const $=q._getViewModel(),J=$.getCursorStates();ne.length>0&&q.setSelections(ne),d(J,$.getCursorStates())}}class h extends S.EditorAction{constructor(){super({id:"editor.action.addCursorsToTop",label:i.localize(9,null),alias:"Add Cursors To Top",precondition:void 0})}run(F,q){if(!q.hasModel())return;const ie=q.getSelections(),ae=[];for(let J=ie[0].startLineNumber;J>=1;J--)ae.push(new v.Selection(J,ie[0].startColumn,J,ie[0].endColumn));const ne=q._getViewModel(),$=ne.getCursorStates();ae.length>0&&q.setSelections(ae),d($,ne.getCursorStates())}}class m{constructor(F,q,ie){this.selections=F,this.revealRange=q,this.revealScrollType=ie}}e.MultiCursorSessionResult=m;class C{static create(F,q){if(!F.hasModel())return null;const ie=q.getState();if(!F.hasTextFocus()&&ie.isRevealed&&ie.searchString.length>0)return new C(F,q,!1,ie.searchString,ie.wholeWord,ie.matchCase,null);let ae=!1,ne,$;const J=F.getSelections();J.length===1&&J[0].isEmpty()?(ae=!0,ne=!0,$=!0):(ne=ie.wholeWord,$=ie.matchCase);const Q=F.getSelection();let re,de=null;if(Q.isEmpty()){const he=F.getConfiguredWordAtPosition(Q.getStartPosition());if(!he)return null;re=he.word,de=new v.Selection(Q.startLineNumber,he.startColumn,Q.startLineNumber,he.endColumn)}else re=F.getModel().getValueInRange(Q).replace(/\r\n/g,` `);return new C(F,q,ae,re,ne,$,de)}constructor(F,q,ie,ae,ne,$,J){this._editor=F,this.findController=q,this.isDisconnectedFromFindController=ie,this.searchText=ae,this.wholeWord=ne,this.matchCase=$,this.currentMatch=J}addSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const F=this._getNextMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.concat(F),F,0)}moveSelectionToNextFindMatch(){if(!this._editor.hasModel())return null;const F=this._getNextMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.slice(0,q.length-1).concat(F),F,0)}_getNextMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const ae=this.currentMatch;return this.currentMatch=null,ae}this.findController.highlightFindOptions();const F=this._editor.getSelections(),q=F[F.length-1],ie=this._editor.getModel().findNextMatch(this.searchText,q.getEndPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1);return ie?new v.Selection(ie.range.startLineNumber,ie.range.startColumn,ie.range.endLineNumber,ie.range.endColumn):null}addSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const F=this._getPreviousMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.concat(F),F,0)}moveSelectionToPreviousFindMatch(){if(!this._editor.hasModel())return null;const F=this._getPreviousMatch();if(!F)return null;const q=this._editor.getSelections();return new m(q.slice(0,q.length-1).concat(F),F,0)}_getPreviousMatch(){if(!this._editor.hasModel())return null;if(this.currentMatch){const ae=this.currentMatch;return this.currentMatch=null,ae}this.findController.highlightFindOptions();const F=this._editor.getSelections(),q=F[F.length-1],ie=this._editor.getModel().findPreviousMatch(this.searchText,q.getStartPosition(),!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1);return ie?new v.Selection(ie.range.startLineNumber,ie.range.startColumn,ie.range.endLineNumber,ie.range.endColumn):null}selectAll(F){if(!this._editor.hasModel())return[];this.findController.highlightFindOptions();const q=this._editor.getModel();return F?q.findMatches(this.searchText,F,!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1,1073741824):q.findMatches(this.searchText,!0,!1,this.matchCase,this.wholeWord?this._editor.getOption(129):null,!1,1073741824)}}e.MultiCursorSession=C;class w extends E.Disposable{static get(F){return F.getContribution(w.ID)}constructor(F){super(),this._sessionDispose=this._register(new E.DisposableStore),this._editor=F,this._ignoreSelectionChange=!1,this._session=null}dispose(){this._endSession(),super.dispose()}_beginSessionIfNeeded(F){if(!this._session){const q=C.create(this._editor,F);if(!q)return;this._session=q;const ie={searchString:this._session.searchText};this._session.isDisconnectedFromFindController&&(ie.wholeWordOverride=1,ie.matchCaseOverride=1,ie.isRegexOverride=2),F.getState().change(ie,!1),this._sessionDispose.add(this._editor.onDidChangeCursorSelection(ae=>{this._ignoreSelectionChange||this._endSession()})),this._sessionDispose.add(this._editor.onDidBlurEditorText(()=>{this._endSession()})),this._sessionDispose.add(F.getState().onFindReplaceStateChange(ae=>{(ae.matchCase||ae.wholeWord)&&this._endSession()}))}}_endSession(){if(this._sessionDispose.clear(),this._session&&this._session.isDisconnectedFromFindController){const F={wholeWordOverride:0,matchCaseOverride:0,isRegexOverride:0};this._session.findController.getState().change(F,!1)}this._session=null}_setSelections(F){this._ignoreSelectionChange=!0,this._editor.setSelections(F),this._ignoreSelectionChange=!1}_expandEmptyToWord(F,q){if(!q.isEmpty())return q;const ie=this._editor.getConfiguredWordAtPosition(q.getStartPosition());return ie?new v.Selection(q.startLineNumber,ie.startColumn,q.startLineNumber,ie.endColumn):q}_applySessionResult(F){F&&(this._setSelections(F.selections),F.revealRange&&this._editor.revealRangeInCenterIfOutsideViewport(F.revealRange,F.revealScrollType))}getSession(F){return this._session}addSelectionToNextFindMatch(F){if(this._editor.hasModel()){if(!this._session){const q=this._editor.getSelections();if(q.length>1){const ae=F.getState().matchCase;if(!O(this._editor.getModel(),q,ae)){const $=this._editor.getModel(),J=[];for(let Q=0,re=q.length;Q0&&ie.isRegex){const ae=this._editor.getModel();ie.searchScope?q=ae.findMatches(ie.searchString,ie.searchScope,ie.isRegex,ie.matchCase,ie.wholeWord?this._editor.getOption(129):null,!1,1073741824):q=ae.findMatches(ie.searchString,!0,ie.isRegex,ie.matchCase,ie.wholeWord?this._editor.getOption(129):null,!1,1073741824)}else{if(this._beginSessionIfNeeded(F),!this._session)return;q=this._session.selectAll(ie.searchScope)}if(q.length>0){const ae=this._editor.getSelection();for(let ne=0,$=q.length;ne<$;ne++){const J=q[ne];if(J.range.intersectRanges(ae)){q[ne]=q[0],q[0]=J;break}}this._setSelections(q.map(ne=>new v.Selection(ne.range.startLineNumber,ne.range.startColumn,ne.range.endLineNumber,ne.range.endColumn)))}}}e.MultiCursorSelectionController=w,w.ID="editor.contrib.multiCursorController";class D extends S.EditorAction{run(F,q){const ie=w.get(q);if(!ie)return;const ae=q._getViewModel();if(ae){const ne=ae.getCursorStates(),$=a.CommonFindController.get(q);if($)this._run(ie,$);else{const J=F.get(f.IInstantiationService).createInstance(a.CommonFindController,q);this._run(ie,J),J.dispose()}d(ne,ae.getCursorStates())}}}e.MultiCursorSelectionControllerAction=D;class I extends D{constructor(){super({id:"editor.action.addSelectionToNextFindMatch",label:i.localize(10,null),alias:"Add Selection To Next Find Match",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.focus,primary:2082,weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"3_multi",title:i.localize(11,null),order:5}})}_run(F,q){F.addSelectionToNextFindMatch(q)}}e.AddSelectionToNextFindMatchAction=I;class T extends D{constructor(){super({id:"editor.action.addSelectionToPreviousFindMatch",label:i.localize(12,null),alias:"Add Selection To Previous Find Match",precondition:void 0,menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"3_multi",title:i.localize(13,null),order:6}})}_run(F,q){F.addSelectionToPreviousFindMatch(q)}}e.AddSelectionToPreviousFindMatchAction=T;class A extends D{constructor(){super({id:"editor.action.moveSelectionToNextFindMatch",label:i.localize(14,null),alias:"Move Last Selection To Next Find Match",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.focus,primary:(0,y.KeyChord)(2089,2082),weight:100}})}_run(F,q){F.moveSelectionToNextFindMatch(q)}}e.MoveSelectionToNextFindMatchAction=A;class P extends D{constructor(){super({id:"editor.action.moveSelectionToPreviousFindMatch",label:i.localize(15,null),alias:"Move Last Selection To Previous Find Match",precondition:void 0})}_run(F,q){F.moveSelectionToPreviousFindMatch(q)}}e.MoveSelectionToPreviousFindMatchAction=P;class N extends D{constructor(){super({id:"editor.action.selectHighlights",label:i.localize(16,null),alias:"Select All Occurrences of Find Match",precondition:void 0,kbOpts:{kbExpr:b.EditorContextKeys.focus,primary:3114,weight:100},menuOpts:{menuId:n.MenuId.MenubarSelectionMenu,group:"3_multi",title:i.localize(17,null),order:7}})}_run(F,q){F.selectAll(q)}}e.SelectHighlightsAction=N;class M extends D{constructor(){super({id:"editor.action.changeAll",label:i.localize(18,null),alias:"Change All Occurrences",precondition:t.ContextKeyExpr.and(b.EditorContextKeys.writable,b.EditorContextKeys.editorTextFocus),kbOpts:{kbExpr:b.EditorContextKeys.editorTextFocus,primary:2108,weight:100},contextMenuOpts:{group:"1_modification",order:1.2}})}_run(F,q){F.selectAll(q)}}e.CompatChangeAll=M;class R{constructor(F,q,ie,ae,ne){this._model=F,this._searchText=q,this._matchCase=ie,this._wordSeparators=ae,this._modelVersionId=this._model.getVersionId(),this._cachedFindMatches=null,ne&&this._model===ne._model&&this._searchText===ne._searchText&&this._matchCase===ne._matchCase&&this._wordSeparators===ne._wordSeparators&&this._modelVersionId===ne._modelVersionId&&(this._cachedFindMatches=ne._cachedFindMatches)}findMatches(){return this._cachedFindMatches===null&&(this._cachedFindMatches=this._model.findMatches(this._searchText,!0,!1,this._matchCase,this._wordSeparators,!1).map(F=>F.range),this._cachedFindMatches.sort(_.Range.compareRangesUsingStarts)),this._cachedFindMatches}}let x=c=class extends E.Disposable{constructor(F,q){super(),this._languageFeaturesService=q,this.editor=F,this._isEnabled=F.getOption(107),this._decorations=F.createDecorationsCollection(),this.updateSoon=this._register(new k.RunOnceScheduler(()=>this._update(),300)),this.state=null,this._register(F.onDidChangeConfiguration(ae=>{this._isEnabled=F.getOption(107)})),this._register(F.onDidChangeCursorSelection(ae=>{this._isEnabled&&(ae.selection.isEmpty()?ae.reason===3?(this.state&&this._setState(null),this.updateSoon.schedule()):this._setState(null):this._update())})),this._register(F.onDidChangeModel(ae=>{this._setState(null)})),this._register(F.onDidChangeModelContent(ae=>{this._isEnabled&&this.updateSoon.schedule()}));const ie=a.CommonFindController.get(F);ie&&this._register(ie.getState().onFindReplaceStateChange(ae=>{this._update()})),this.updateSoon.schedule()}_update(){this._setState(c._createState(this.state,this._isEnabled,this.editor))}static _createState(F,q,ie){if(!q||!ie.hasModel())return null;const ae=ie.getSelection();if(ae.startLineNumber!==ae.endLineNumber)return null;const ne=w.get(ie);if(!ne)return null;const $=a.CommonFindController.get(ie);if(!$)return null;let J=ne.getSession($);if(!J){const de=ie.getSelections();if(de.length>1){const me=$.getState().matchCase;if(!O(ie.getModel(),de,me))return null}J=C.create(ie,$)}if(!J||J.currentMatch||/^[ \t]+$/.test(J.searchText)||J.searchText.length>200)return null;const Q=$.getState(),re=Q.matchCase;if(Q.isRevealed){let de=Q.searchString;re||(de=de.toLowerCase());let he=J.searchText;if(re||(he=he.toLowerCase()),de===he&&J.matchCase===Q.matchCase&&J.wholeWord===Q.wholeWord&&!Q.isRegex)return null}return new R(ie.getModel(),J.searchText,J.matchCase,J.wholeWord?ie.getOption(129):null,F)}_setState(F){if(this.state=F,!this.state){this._decorations.clear();return}if(!this.editor.hasModel())return;const q=this.editor.getModel();if(q.isTooLargeForTokenization())return;const ie=this.state.findMatches(),ae=this.editor.getSelections();ae.sort(_.Range.compareRangesUsingStarts);const ne=[];for(let re=0,de=0,he=ie.length,me=ae.length;re=me)ne.push(X),re++;else{const U=_.Range.compareRangesUsingStarts(X,ae[de]);U<0?((ae[de].isEmpty()||!_.Range.areIntersecting(X,ae[de]))&&ne.push(X),re++):(U>0||re++,de++)}}const $=this.editor.getOption(80)!=="off",J=this._languageFeaturesService.documentHighlightProvider.has(q)&&$,Q=ne.map(re=>({range:re,options:(0,u.getSelectionHighlightDecorationOptions)(J)}));this._decorations.set(Q)}dispose(){this._setState(null),super.dispose()}};e.SelectionHighlighter=x,x.ID="editor.contrib.selectionHighlighter",e.SelectionHighlighter=x=c=ke([ge(1,r.ILanguageFeaturesService)],x);function O(K,F,q){const ie=B(K,F[0],!q);for(let ae=1,ne=F.length;ae()=>Promise.resolve(ie.provideDocumentHighlights(V,K,F)).then(void 0,p.onUnexpectedExternalError)),k.isNonEmptyArray).then(ie=>{if(ie){const ae=new s.ResourceMap;return ae.set(V.uri,ie),ae}return new s.ResourceMap})}e.getOccurrencesAtPosition=m;function C(W,V,K,F,q,ie){const ae=W.ordered(V);return(0,E.first)(ae.map(ne=>()=>{const $=ie.filter(J=>(0,r.shouldSynchronizeModel)(J)).filter(J=>(0,l.score)(ne.selector,J.uri,J.getLanguageId(),!0,void 0,void 0)>0);return Promise.resolve(ne.provideMultiDocumentHighlights(V,K,$,q)).then(void 0,p.onUnexpectedExternalError)}),ne=>ne instanceof s.ResourceMap&&ne.size>0)}e.getOccurrencesAcrossMultipleModels=C;class w{constructor(V,K,F){this._model=V,this._selection=K,this._wordSeparators=F,this._wordRange=this._getCurrentWordRange(V,K),this._result=null}get result(){return this._result||(this._result=(0,E.createCancelablePromise)(V=>this._compute(this._model,this._selection,this._wordSeparators,V))),this._result}_getCurrentWordRange(V,K){const F=V.getWordAtPosition(K.getPosition());return F?new i.Range(K.startLineNumber,F.startColumn,K.startLineNumber,F.endColumn):null}isValid(V,K,F){const q=K.startLineNumber,ie=K.startColumn,ae=K.endColumn,ne=this._getCurrentWordRange(V,K);let $=!!(this._wordRange&&this._wordRange.equalsRange(ne));for(let J=0,Q=F.length;!$&&J=ae&&($=!0)}return $}cancel(){this.result.cancel()}}class D extends w{constructor(V,K,F,q){super(V,K,F),this._providers=q}_compute(V,K,F,q){return m(this._providers,V,K.getPosition(),q).then(ie=>ie||new s.ResourceMap)}}class I extends w{constructor(V,K,F,q,ie){super(V,K,F),this._providers=q,this._otherModels=ie}_compute(V,K,F,q){return C(this._providers,V,K.getPosition(),F,q,this._otherModels).then(ie=>ie||new s.ResourceMap)}}class T extends w{constructor(V,K,F,q,ie){super(V,K,q),this._otherModels=ie,this._selectionIsEmpty=K.isEmpty(),this._word=F}_compute(V,K,F,q){return(0,E.timeout)(250,q).then(()=>{const ie=new s.ResourceMap;let ae;if(this._word?ae=this._word:ae=V.getWordAtPosition(K.getPosition()),!ae)return new s.ResourceMap;const ne=[V,...this._otherModels];for(const $ of ne){if($.isDisposed())continue;const Q=$.findMatches(ae.word,!0,!1,!0,F,!1).map(re=>({range:re.range,kind:t.DocumentHighlightKind.Text}));Q&&ie.set($.uri,Q)}return ie})}isValid(V,K,F){const q=K.isEmpty();return this._selectionIsEmpty!==q?!1:super.isValid(V,K,F)}}function A(W,V,K,F,q){return W.has(V)?new D(V,K,q,W):new T(V,K,F,q,[])}function P(W,V,K,F,q,ie){return W.has(V)?new I(V,K,q,W,ie):new T(V,K,F,q,ie)}(0,b.registerModelAndPositionCommand)("_executeDocumentHighlights",async(W,V,K)=>{const F=W.get(u.ILanguageFeaturesService),q=await m(F.documentHighlightProvider,V,K,S.CancellationToken.None);return q?.get(V.uri)});let N=o=class{constructor(V,K,F,q,ie){this.toUnhook=new _.DisposableStore,this.workerRequestTokenId=0,this.workerRequestCompleted=!1,this.workerRequestValue=new s.ResourceMap,this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1,this.editor=V,this.providers=K,this.multiDocumentProviders=F,this.codeEditorService=ie,this._hasWordHighlights=h.bindTo(q),this._ignorePositionChangeEvent=!1,this.occurrencesHighlight=this.editor.getOption(80),this.model=this.editor.getModel(),this.toUnhook.add(V.onDidChangeCursorPosition(ae=>{this._ignorePositionChangeEvent||this.occurrencesHighlight!=="off"&&this._onPositionChanged(ae)})),this.toUnhook.add(V.onDidChangeModelContent(ae=>{this._stopAll()})),this.toUnhook.add(V.onDidChangeModel(ae=>{!ae.newModelUrl&&ae.oldModelUrl?this._stopSingular():o.query&&this._run()})),this.toUnhook.add(V.onDidChangeConfiguration(ae=>{const ne=this.editor.getOption(80);this.occurrencesHighlight!==ne&&(this.occurrencesHighlight=ne,this._stopAll())})),this.decorations=this.editor.createDecorationsCollection(),this.workerRequestTokenId=0,this.workerRequest=null,this.workerRequestCompleted=!1,this.lastCursorPositionChangeTime=0,this.renderDecorationsTimer=-1,o.query&&this._run()}hasDecorations(){return this.decorations.length>0}restore(){this.occurrencesHighlight!=="off"&&this._run()}_getSortedHighlights(){return this.decorations.getRanges().sort(i.Range.compareRangesUsingStarts)}moveNext(){const V=this._getSortedHighlights(),F=(V.findIndex(ie=>ie.containsPosition(this.editor.getPosition()))+1)%V.length,q=V[F];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(q.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(q);const ie=this._getWord();if(ie){const ae=this.editor.getModel().getLineContent(q.startLineNumber);(0,y.alert)(`${ae}, ${F+1} of ${V.length} for '${ie.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}moveBack(){const V=this._getSortedHighlights(),F=(V.findIndex(ie=>ie.containsPosition(this.editor.getPosition()))-1+V.length)%V.length,q=V[F];try{this._ignorePositionChangeEvent=!0,this.editor.setPosition(q.getStartPosition()),this.editor.revealRangeInCenterIfOutsideViewport(q);const ie=this._getWord();if(ie){const ae=this.editor.getModel().getLineContent(q.startLineNumber);(0,y.alert)(`${ae}, ${F+1} of ${V.length} for '${ie.word}'`)}}finally{this._ignorePositionChangeEvent=!1}}_removeSingleDecorations(){if(!this.editor.hasModel())return;const V=o.storedDecorations.get(this.editor.getModel().uri);V&&(this.editor.removeDecorations(V),o.storedDecorations.delete(this.editor.getModel().uri),this.decorations.length>0&&(this.decorations.clear(),this._hasWordHighlights.set(!1)))}_removeAllDecorations(){const V=this.codeEditorService.listCodeEditors();for(const K of V){if(!K.hasModel())continue;const F=o.storedDecorations.get(K.getModel().uri);if(!F)continue;K.removeDecorations(F),o.storedDecorations.delete(K.getModel().uri);const q=M.get(K);q?.wordHighlighter&&q.wordHighlighter.decorations.length>0&&(q.wordHighlighter.decorations.clear(),q.wordHighlighter._hasWordHighlights.set(!1))}}_stopSingular(){var V,K,F,q;this._removeSingleDecorations(),this.editor.hasWidgetFocus()&&(((V=this.editor.getModel())===null||V===void 0?void 0:V.uri.scheme)!==d.Schemas.vscodeNotebookCell&&((F=(K=o.query)===null||K===void 0?void 0:K.modelInfo)===null||F===void 0?void 0:F.model.uri.scheme)!==d.Schemas.vscodeNotebookCell?(o.query=null,this._run()):!((q=o.query)===null||q===void 0)&&q.modelInfo&&(o.query.modelInfo=null)),this.renderDecorationsTimer!==-1&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1),this.workerRequest!==null&&(this.workerRequest.cancel(),this.workerRequest=null),this.workerRequestCompleted||(this.workerRequestTokenId++,this.workerRequestCompleted=!0)}_stopAll(){this._removeAllDecorations(),this.renderDecorationsTimer!==-1&&(clearTimeout(this.renderDecorationsTimer),this.renderDecorationsTimer=-1),this.workerRequest!==null&&(this.workerRequest.cancel(),this.workerRequest=null),this.workerRequestCompleted||(this.workerRequestTokenId++,this.workerRequestCompleted=!0)}_onPositionChanged(V){var K;if(this.occurrencesHighlight==="off"){this._stopAll();return}if(V.reason!==3&&((K=this.editor.getModel())===null||K===void 0?void 0:K.uri.scheme)!==d.Schemas.vscodeNotebookCell){this._stopAll();return}this._run()}_getWord(){const V=this.editor.getSelection(),K=V.startLineNumber,F=V.startColumn;return this.model.isDisposed()?null:this.model.getWordAtPosition({lineNumber:K,column:F})}getOtherModelsToHighlight(V){if(!V)return[];if(V.uri.scheme===d.Schemas.vscodeNotebookCell){const ie=[],ae=this.codeEditorService.listCodeEditors();for(const ne of ae){const $=ne.getModel();$&&$!==V&&$.uri.scheme===d.Schemas.vscodeNotebookCell&&ie.push($)}return ie}const F=[],q=this.codeEditorService.listCodeEditors();for(const ie of q){if(!(0,v.isDiffEditor)(ie))continue;const ae=ie.getModel();ae&&V===ae.modified&&F.push(ae.modified)}if(F.length)return F;if(this.occurrencesHighlight==="singleFile")return[];for(const ie of q){const ae=ie.getModel();ae&&ae!==V&&F.push(ae)}return F}_run(){var V,K;let F;if(this.editor.hasWidgetFocus()){const q=this.editor.getSelection();if(!q||q.startLineNumber!==q.endLineNumber){this._stopAll();return}const ie=q.startColumn,ae=q.endColumn,ne=this._getWord();if(!ne||ne.startColumn>ie||ne.endColumn{q===this.workerRequestTokenId&&(this.workerRequestCompleted=!0,this.workerRequestValue=ne||[],this._beginRenderDecorations())},p.onUnexpectedError)}}computeWithModel(V,K,F,q){return q.length?P(this.multiDocumentProviders,V,K,F,this.editor.getOption(129),q):A(this.providers,V,K,F,this.editor.getOption(129))}_beginRenderDecorations(){const V=new Date().getTime(),K=this.lastCursorPositionChangeTime+250;V>=K?(this.renderDecorationsTimer=-1,this.renderDecorations()):this.renderDecorationsTimer=setTimeout(()=>{this.renderDecorations()},K-V)}renderDecorations(){var V,K,F;this.renderDecorationsTimer=-1;const q=this.codeEditorService.listCodeEditors();for(const ie of q){const ae=M.get(ie);if(!ae)continue;const ne=[],$=(V=ie.getModel())===null||V===void 0?void 0:V.uri;if($&&this.workerRequestValue.has($)){const J=o.storedDecorations.get($),Q=this.workerRequestValue.get($);if(Q)for(const de of Q)ne.push({range:de.range,options:(0,f.getHighlightDecorationOptions)(de.kind)});let re=[];ie.changeDecorations(de=>{re=de.deltaDecorations(J??[],ne)}),o.storedDecorations=o.storedDecorations.set($,re),ne.length>0&&((K=ae.wordHighlighter)===null||K===void 0||K.decorations.set(ne),(F=ae.wordHighlighter)===null||F===void 0||F._hasWordHighlights.set(!0))}}}dispose(){this._stopSingular(),this.toUnhook.dispose()}};N.storedDecorations=new s.ResourceMap,N.query=null,N=o=ke([ge(4,a.ICodeEditorService)],N);let M=g=class extends _.Disposable{static get(V){return V.getContribution(g.ID)}constructor(V,K,F,q){super(),this._wordHighlighter=null;const ie=()=>{V.hasModel()&&!V.getModel().isTooLargeForTokenization()&&(this._wordHighlighter=new N(V,F.documentHighlightProvider,F.multiDocumentHighlightProvider,K,q))};this._register(V.onDidChangeModel(ae=>{this._wordHighlighter&&(this._wordHighlighter.dispose(),this._wordHighlighter=null),ie()})),ie()}get wordHighlighter(){return this._wordHighlighter}saveViewState(){return!!(this._wordHighlighter&&this._wordHighlighter.hasDecorations())}moveNext(){var V;(V=this._wordHighlighter)===null||V===void 0||V.moveNext()}moveBack(){var V;(V=this._wordHighlighter)===null||V===void 0||V.moveBack()}restoreViewState(V){this._wordHighlighter&&V&&this._wordHighlighter.restore()}dispose(){this._wordHighlighter&&(this._wordHighlighter.dispose(),this._wordHighlighter=null),super.dispose()}};e.WordHighlighterContribution=M,M.ID="editor.contrib.wordHighlighter",e.WordHighlighterContribution=M=g=ke([ge(1,c.IContextKeyService),ge(2,u.ILanguageFeaturesService),ge(3,a.ICodeEditorService)],M);class R extends b.EditorAction{constructor(V,K){super(K),this._isNext=V}run(V,K){const F=M.get(K);F&&(this._isNext?F.moveNext():F.moveBack())}}class x extends R{constructor(){super(!0,{id:"editor.action.wordHighlight.next",label:L.localize(0,null),alias:"Go to Next Symbol Highlight",precondition:h,kbOpts:{kbExpr:n.EditorContextKeys.editorTextFocus,primary:65,weight:100}})}}class O extends R{constructor(){super(!1,{id:"editor.action.wordHighlight.prev",label:L.localize(1,null),alias:"Go to Previous Symbol Highlight",precondition:h,kbOpts:{kbExpr:n.EditorContextKeys.editorTextFocus,primary:1089,weight:100}})}}class B extends b.EditorAction{constructor(){super({id:"editor.action.wordHighlight.trigger",label:L.localize(2,null),alias:"Trigger Symbol Highlight",precondition:h.toNegated(),kbOpts:{kbExpr:n.EditorContextKeys.editorTextFocus,primary:0,weight:100}})}run(V,K,F){const q=M.get(K);q&&q.restoreViewState(!0)}}(0,b.registerEditorContribution)(M.ID,M,0),(0,b.registerEditorAction)(x),(0,b.registerEditorAction)(O),(0,b.registerEditorAction)(B)}),define(se[912],oe([1,0,7,158,39,170,2,55,5,38,483]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ZoneWidget=e.OverlayWidgetDelegate=void 0;const b=new y.Color(new y.RGBA(0,122,204)),a={showArrow:!0,showFrame:!0,className:"",frameColor:b,arrowColor:b,keepEditorSelection:!1},i="vs.editor.contrib.zoneWidget";class n{constructor(c,d,s,l,o,g,h,m){this.id="",this.domNode=c,this.afterLineNumber=d,this.afterColumn=s,this.heightInLines=l,this.showInHiddenAreas=h,this.ordinal=m,this._onDomNodeTop=o,this._onComputedHeight=g}onDomNodeTop(c){this._onDomNodeTop(c)}onComputedHeight(c){this._onComputedHeight(c)}}class t{constructor(c,d){this._id=c,this._domNode=d}getId(){return this._id}getDomNode(){return this._domNode}getPosition(){return null}}e.OverlayWidgetDelegate=t;class r{constructor(c){this._editor=c,this._ruleName=r._IdGenerator.nextId(),this._decorations=this._editor.createDecorationsCollection(),this._color=null,this._height=-1}dispose(){this.hide(),L.removeCSSRulesContainingSelector(this._ruleName)}set color(c){this._color!==c&&(this._color=c,this._updateStyle())}set height(c){this._height!==c&&(this._height=c,this._updateStyle())}_updateStyle(){L.removeCSSRulesContainingSelector(this._ruleName),L.createCSSRule(`.monaco-editor ${this._ruleName}`,`border-style: solid; border-color: transparent; border-bottom-color: ${this._color}; border-width: ${this._height}px; bottom: -${this._height}px; margin-left: -${this._height}px; `)}show(c){c.column===1&&(c={lineNumber:c.lineNumber,column:2}),this._decorations.set([{range:_.Range.fromPositions(c),options:{description:"zone-widget-arrow",className:this._ruleName,stickiness:1}}])}hide(){this._decorations.clear()}}r._IdGenerator=new E.IdGenerator(".arrow-decoration-");class u{constructor(c,d={}){this._arrow=null,this._overlayWidget=null,this._resizeSash=null,this._viewZone=null,this._disposables=new S.DisposableStore,this.container=null,this._isShowing=!1,this.editor=c,this._positionMarkerId=this.editor.createDecorationsCollection(),this.options=p.deepClone(d),p.mixin(this.options,a,!1),this.domNode=document.createElement("div"),this.options.isAccessible||(this.domNode.setAttribute("aria-hidden","true"),this.domNode.setAttribute("role","presentation")),this._disposables.add(this.editor.onDidLayoutChange(s=>{const l=this._getWidth(s);this.domNode.style.width=l+"px",this.domNode.style.left=this._getLeft(s)+"px",this._onWidth(l)}))}dispose(){this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this._viewZone&&this.editor.changeViewZones(c=>{this._viewZone&&c.removeZone(this._viewZone.id),this._viewZone=null}),this._positionMarkerId.clear(),this._disposables.dispose()}create(){this.domNode.classList.add("zone-widget"),this.options.className&&this.domNode.classList.add(this.options.className),this.container=document.createElement("div"),this.container.classList.add("zone-widget-container"),this.domNode.appendChild(this.container),this.options.showArrow&&(this._arrow=new r(this.editor),this._disposables.add(this._arrow)),this._fillContainer(this.container),this._initSash(),this._applyStyles()}style(c){c.frameColor&&(this.options.frameColor=c.frameColor),c.arrowColor&&(this.options.arrowColor=c.arrowColor),this._applyStyles()}_applyStyles(){if(this.container&&this.options.frameColor){const c=this.options.frameColor.toString();this.container.style.borderTopColor=c,this.container.style.borderBottomColor=c}if(this._arrow&&this.options.arrowColor){const c=this.options.arrowColor.toString();this._arrow.color=c}}_getWidth(c){return c.width-c.minimap.minimapWidth-c.verticalScrollbarWidth}_getLeft(c){return c.minimap.minimapWidth>0&&c.minimap.minimapLeft===0?c.minimap.minimapWidth:0}_onViewZoneTop(c){this.domNode.style.top=c+"px"}_onViewZoneHeight(c){var d;if(this.domNode.style.height=`${c}px`,this.container){const s=c-this._decoratingElementsHeight();this.container.style.height=`${s}px`;const l=this.editor.getLayoutInfo();this._doLayout(s,this._getWidth(l))}(d=this._resizeSash)===null||d===void 0||d.layout()}get position(){const c=this._positionMarkerId.getRange(0);if(c)return c.getStartPosition()}show(c,d){const s=_.Range.isIRange(c)?_.Range.lift(c):_.Range.fromPositions(c);this._isShowing=!0,this._showImpl(s,d),this._isShowing=!1,this._positionMarkerId.set([{range:s,options:v.ModelDecorationOptions.EMPTY}])}hide(){var c;this._viewZone&&(this.editor.changeViewZones(d=>{this._viewZone&&d.removeZone(this._viewZone.id)}),this._viewZone=null),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),(c=this._arrow)===null||c===void 0||c.hide(),this._positionMarkerId.clear()}_decoratingElementsHeight(){const c=this.editor.getOption(66);let d=0;if(this.options.showArrow){const s=Math.round(c/3);d+=2*s}if(this.options.showFrame){const s=Math.round(c/9);d+=2*s}return d}_showImpl(c,d){const s=c.getStartPosition(),l=this.editor.getLayoutInfo(),o=this._getWidth(l);this.domNode.style.width=`${o}px`,this.domNode.style.left=this._getLeft(l)+"px";const g=document.createElement("div");g.style.overflow="hidden";const h=this.editor.getOption(66);if(!this.options.allowUnlimitedHeight){const I=Math.max(12,this.editor.getLayoutInfo().height/h*.8);d=Math.min(d,I)}let m=0,C=0;if(this._arrow&&this.options.showArrow&&(m=Math.round(h/3),this._arrow.height=m,this._arrow.show(s)),this.options.showFrame&&(C=Math.round(h/9)),this.editor.changeViewZones(I=>{this._viewZone&&I.removeZone(this._viewZone.id),this._overlayWidget&&(this.editor.removeOverlayWidget(this._overlayWidget),this._overlayWidget=null),this.domNode.style.top="-1000px",this._viewZone=new n(g,s.lineNumber,s.column,d,T=>this._onViewZoneTop(T),T=>this._onViewZoneHeight(T),this.options.showInHiddenAreas,this.options.ordinal),this._viewZone.id=I.addZone(this._viewZone),this._overlayWidget=new t(i+this._viewZone.id,this.domNode),this.editor.addOverlayWidget(this._overlayWidget)}),this.container&&this.options.showFrame){const I=this.options.frameWidth?this.options.frameWidth:C;this.container.style.borderTopWidth=I+"px",this.container.style.borderBottomWidth=I+"px"}const w=d*h-this._decoratingElementsHeight();this.container&&(this.container.style.top=m+"px",this.container.style.height=w+"px",this.container.style.overflow="hidden"),this._doLayout(w,o),this.options.keepEditorSelection||this.editor.setSelection(c);const D=this.editor.getModel();if(D){const I=D.validateRange(new _.Range(c.startLineNumber,1,c.endLineNumber+1,1));this.revealRange(I,I.startLineNumber===D.getLineCount())}}revealRange(c,d){d?this.editor.revealLineNearTop(c.endLineNumber,0):this.editor.revealRange(c,0)}setCssClass(c,d){this.container&&(d&&this.container.classList.remove(d),this.container.classList.add(c))}_onWidth(c){}_doLayout(c,d){}_relayout(c){this._viewZone&&this._viewZone.heightInLines!==c&&this.editor.changeViewZones(d=>{this._viewZone&&(this._viewZone.heightInLines=c,d.layoutZone(this._viewZone.id))})}_initSash(){if(this._resizeSash)return;this._resizeSash=this._disposables.add(new k.Sash(this.domNode,this,{orientation:1})),this.options.isResizeable||(this._resizeSash.state=0);let c;this._disposables.add(this._resizeSash.onDidStart(d=>{this._viewZone&&(c={startY:d.startY,heightInLines:this._viewZone.heightInLines})})),this._disposables.add(this._resizeSash.onDidEnd(()=>{c=void 0})),this._disposables.add(this._resizeSash.onDidChange(d=>{if(c){const s=(d.currentY-c.startY)/this.editor.getOption(66),l=s<0?Math.ceil(s):Math.floor(s),o=c.heightInLines+l;o>5&&o<35&&this._relayout(o)}}))}getHorizontalSashLeft(){return 0}getHorizontalSashTop(){return(this.domNode.style.height===null?0:parseInt(this.domNode.style.height))-this._decoratingElementsHeight()/2}getHorizontalSashWidth(){const c=this.editor.getLayoutInfo();return c.width-c.minimap.minimapWidth}}e.ZoneWidget=u}),define(se[142],oe([1,0,7,78,42,26,28,39,6,55,16,33,168,912,706,141,15,45,8,29,474]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.peekViewEditorMatchHighlightBorder=e.peekViewEditorMatchHighlight=e.peekViewResultsMatchHighlight=e.peekViewEditorStickyScrollBackground=e.peekViewEditorGutterBackground=e.peekViewEditorBackground=e.peekViewResultsSelectionForeground=e.peekViewResultsSelectionBackground=e.peekViewResultsFileForeground=e.peekViewResultsMatchForeground=e.peekViewResultsBackground=e.peekViewBorder=e.peekViewTitleInfoForeground=e.peekViewTitleForeground=e.peekViewTitleBackground=e.PeekViewWidget=e.getOuterEditor=e.PeekContext=e.IPeekViewService=void 0,e.IPeekViewService=(0,c.createDecorator)("IPeekViewService"),(0,f.registerSingleton)(e.IPeekViewService,class{constructor(){this._widgets=new Map}addExclusiveWidget(m,C){const w=this._widgets.get(m);w&&(w.listener.dispose(),w.widget.dispose());const D=()=>{const I=this._widgets.get(m);I&&I.widget===C&&(I.listener.dispose(),this._widgets.delete(m))};this._widgets.set(m,{widget:C,listener:C.onDidClose(D)})}},1);var s;(function(m){m.inPeekEditor=new u.RawContextKey("inReferenceSearchEditor",!0,t.localize(0,null)),m.notInPeekEditor=m.inPeekEditor.toNegated()})(s||(e.PeekContext=s={}));let l=class{constructor(C,w){C instanceof i.EmbeddedCodeEditorWidget&&s.inPeekEditor.bindTo(w)}dispose(){}};l.ID="editor.contrib.referenceController",l=ke([ge(1,u.IContextKeyService)],l),(0,b.registerEditorContribution)(l.ID,l,0);function o(m){const C=m.get(a.ICodeEditorService).getFocusedCodeEditor();return C instanceof i.EmbeddedCodeEditorWidget?C.getParentEditor():C}e.getOuterEditor=o;const g={headerBackgroundColor:p.Color.white,primaryHeadingColor:p.Color.fromHex("#333333"),secondaryHeadingColor:p.Color.fromHex("#6c6c6cb3")};let h=class extends n.ZoneWidget{constructor(C,w,D){super(C,w),this.instantiationService=D,this._onDidClose=new _.Emitter,this.onDidClose=this._onDidClose.event,v.mixin(this.options,g,!1)}dispose(){this.disposed||(this.disposed=!0,super.dispose(),this._onDidClose.fire(this))}style(C){const w=this.options;C.headerBackgroundColor&&(w.headerBackgroundColor=C.headerBackgroundColor),C.primaryHeadingColor&&(w.primaryHeadingColor=C.primaryHeadingColor),C.secondaryHeadingColor&&(w.secondaryHeadingColor=C.secondaryHeadingColor),super.style(C)}_applyStyles(){super._applyStyles();const C=this.options;this._headElement&&C.headerBackgroundColor&&(this._headElement.style.backgroundColor=C.headerBackgroundColor.toString()),this._primaryHeading&&C.primaryHeadingColor&&(this._primaryHeading.style.color=C.primaryHeadingColor.toString()),this._secondaryHeading&&C.secondaryHeadingColor&&(this._secondaryHeading.style.color=C.secondaryHeadingColor.toString()),this._bodyElement&&C.frameColor&&(this._bodyElement.style.borderColor=C.frameColor.toString())}_fillContainer(C){this.setCssClass("peekview-widget"),this._headElement=L.$(".head"),this._bodyElement=L.$(".body"),this._fillHead(this._headElement),this._fillBody(this._bodyElement),C.appendChild(this._headElement),C.appendChild(this._bodyElement)}_fillHead(C,w){this._titleElement=L.$(".peekview-title"),this.options.supportOnTitleClick&&(this._titleElement.classList.add("clickable"),L.addStandardDisposableListener(this._titleElement,"click",T=>this._onTitleClick(T))),L.append(this._headElement,this._titleElement),this._fillTitleIcon(this._titleElement),this._primaryHeading=L.$("span.filename"),this._secondaryHeading=L.$("span.dirname"),this._metaHeading=L.$("span.meta"),L.append(this._titleElement,this._primaryHeading,this._secondaryHeading,this._metaHeading);const D=L.$(".peekview-actions");L.append(this._headElement,D);const I=this._getActionBarOptions();this._actionbarWidget=new k.ActionBar(D,I),this._disposables.add(this._actionbarWidget),w||this._actionbarWidget.push(new y.Action("peekview.close",t.localize(1,null),S.ThemeIcon.asClassName(E.Codicon.close),!0,()=>(this.dispose(),Promise.resolve())),{label:!1,icon:!0})}_fillTitleIcon(C){}_getActionBarOptions(){return{actionViewItemProvider:r.createActionViewItem.bind(void 0,this.instantiationService),orientation:0}}_onTitleClick(C){}setTitle(C,w){this._primaryHeading&&this._secondaryHeading&&(this._primaryHeading.innerText=C,this._primaryHeading.setAttribute("title",C),w?this._secondaryHeading.innerText=w:L.clearNode(this._secondaryHeading))}setMetaTitle(C){this._metaHeading&&(C?(this._metaHeading.innerText=C,L.show(this._metaHeading)):L.hide(this._metaHeading))}_doLayout(C,w){if(!this._isShowing&&C<0){this.dispose();return}const D=Math.ceil(this.editor.getOption(66)*1.2),I=Math.round(C-(D+2));this._doLayoutHead(D,w),this._doLayoutBody(I,w)}_doLayoutHead(C,w){this._headElement&&(this._headElement.style.height=`${C}px`,this._headElement.style.lineHeight=this._headElement.style.height)}_doLayoutBody(C,w){this._bodyElement&&(this._bodyElement.style.height=`${C}px`)}};e.PeekViewWidget=h,e.PeekViewWidget=h=ke([ge(2,c.IInstantiationService)],h),e.peekViewTitleBackground=(0,d.registerColor)("peekViewTitle.background",{dark:"#252526",light:"#F3F3F3",hcDark:p.Color.black,hcLight:p.Color.white},t.localize(2,null)),e.peekViewTitleForeground=(0,d.registerColor)("peekViewTitleLabel.foreground",{dark:p.Color.white,light:p.Color.black,hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(3,null)),e.peekViewTitleInfoForeground=(0,d.registerColor)("peekViewTitleDescription.foreground",{dark:"#ccccccb3",light:"#616161",hcDark:"#FFFFFF99",hcLight:"#292929"},t.localize(4,null)),e.peekViewBorder=(0,d.registerColor)("peekView.border",{dark:d.editorInfoForeground,light:d.editorInfoForeground,hcDark:d.contrastBorder,hcLight:d.contrastBorder},t.localize(5,null)),e.peekViewResultsBackground=(0,d.registerColor)("peekViewResult.background",{dark:"#252526",light:"#F3F3F3",hcDark:p.Color.black,hcLight:p.Color.white},t.localize(6,null)),e.peekViewResultsMatchForeground=(0,d.registerColor)("peekViewResult.lineForeground",{dark:"#bbbbbb",light:"#646465",hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(7,null)),e.peekViewResultsFileForeground=(0,d.registerColor)("peekViewResult.fileForeground",{dark:p.Color.white,light:"#1E1E1E",hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(8,null)),e.peekViewResultsSelectionBackground=(0,d.registerColor)("peekViewResult.selectionBackground",{dark:"#3399ff33",light:"#3399ff33",hcDark:null,hcLight:null},t.localize(9,null)),e.peekViewResultsSelectionForeground=(0,d.registerColor)("peekViewResult.selectionForeground",{dark:p.Color.white,light:"#6C6C6C",hcDark:p.Color.white,hcLight:d.editorForeground},t.localize(10,null)),e.peekViewEditorBackground=(0,d.registerColor)("peekViewEditor.background",{dark:"#001F33",light:"#F2F8FC",hcDark:p.Color.black,hcLight:p.Color.white},t.localize(11,null)),e.peekViewEditorGutterBackground=(0,d.registerColor)("peekViewEditorGutter.background",{dark:e.peekViewEditorBackground,light:e.peekViewEditorBackground,hcDark:e.peekViewEditorBackground,hcLight:e.peekViewEditorBackground},t.localize(12,null)),e.peekViewEditorStickyScrollBackground=(0,d.registerColor)("peekViewEditorStickyScroll.background",{dark:e.peekViewEditorBackground,light:e.peekViewEditorBackground,hcDark:e.peekViewEditorBackground,hcLight:e.peekViewEditorBackground},t.localize(13,null)),e.peekViewResultsMatchHighlight=(0,d.registerColor)("peekViewResult.matchHighlightBackground",{dark:"#ea5c004d",light:"#ea5c004d",hcDark:null,hcLight:null},t.localize(14,null)),e.peekViewEditorMatchHighlight=(0,d.registerColor)("peekViewEditor.matchHighlightBackground",{dark:"#ff8f0099",light:"#f5d802de",hcDark:null,hcLight:null},t.localize(15,null)),e.peekViewEditorMatchHighlightBorder=(0,d.registerColor)("peekViewEditor.matchHighlightBorder",{dark:null,light:null,hcDark:d.activeContrastBorder,hcLight:d.activeContrastBorder},t.localize(16,null))}),define(se[913],oe([1,0,7,77,13,39,6,2,49,11,5,142,679,141,30,15,8,164,97,57,804,29,23,462]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){"use strict";var g;Object.defineProperty(e,"__esModule",{value:!0}),e.MarkerNavigationWidget=void 0;class h{constructor(O,B,W,V,K){this._openerService=V,this._labelService=K,this._lines=0,this._longestLineLength=0,this._relatedDiagnostics=new WeakMap,this._disposables=new p.DisposableStore,this._editor=B;const F=document.createElement("div");F.className="descriptioncontainer",this._messageBlock=document.createElement("div"),this._messageBlock.classList.add("message"),this._messageBlock.setAttribute("aria-live","assertive"),this._messageBlock.setAttribute("role","alert"),F.appendChild(this._messageBlock),this._relatedBlock=document.createElement("div"),F.appendChild(this._relatedBlock),this._disposables.add(L.addStandardDisposableListener(this._relatedBlock,"click",q=>{q.preventDefault();const ie=this._relatedDiagnostics.get(q.target);ie&&W(ie)})),this._scrollable=new k.ScrollableElement(F,{horizontal:1,vertical:1,useShadows:!1,horizontalScrollbarSize:6,verticalScrollbarSize:6}),O.appendChild(this._scrollable.getDomNode()),this._disposables.add(this._scrollable.onScroll(q=>{F.style.left=`-${q.scrollLeft}px`,F.style.top=`-${q.scrollTop}px`})),this._disposables.add(this._scrollable)}dispose(){(0,p.dispose)(this._disposables)}update(O){const{source:B,message:W,relatedInformation:V,code:K}=O;let F=(B?.length||0)+2;K&&(typeof K=="string"?F+=K.length:F+=K.value.length);const q=(0,v.splitLines)(W);this._lines=q.length,this._longestLineLength=0;for(const J of q)this._longestLineLength=Math.max(J.length+F,this._longestLineLength);L.clearNode(this._messageBlock),this._messageBlock.setAttribute("aria-label",this.getAriaLabel(O)),this._editor.applyFontInfo(this._messageBlock);let ie=this._messageBlock;for(const J of q)ie=document.createElement("div"),ie.innerText=J,J===""&&(ie.style.height=this._messageBlock.style.lineHeight),this._messageBlock.appendChild(ie);if(B||K){const J=document.createElement("span");if(J.classList.add("details"),ie.appendChild(J),B){const Q=document.createElement("span");Q.innerText=B,Q.classList.add("source"),J.appendChild(Q)}if(K)if(typeof K=="string"){const Q=document.createElement("span");Q.innerText=`(${K})`,Q.classList.add("code"),J.appendChild(Q)}else{this._codeLink=L.$("a.code-link"),this._codeLink.setAttribute("href",`${K.target.toString()}`),this._codeLink.onclick=re=>{this._openerService.open(K.target,{allowCommands:!0}),re.preventDefault(),re.stopPropagation()};const Q=L.append(this._codeLink,L.$("span"));Q.innerText=K.value,J.appendChild(this._codeLink)}}if(L.clearNode(this._relatedBlock),this._editor.applyFontInfo(this._relatedBlock),(0,y.isNonEmptyArray)(V)){const J=this._relatedBlock.appendChild(document.createElement("div"));J.style.paddingTop=`${Math.floor(this._editor.getOption(66)*.66)}px`,this._lines+=1;for(const Q of V){const re=document.createElement("div"),de=document.createElement("a");de.classList.add("filename"),de.innerText=`${this._labelService.getUriBasenameLabel(Q.resource)}(${Q.startLineNumber}, ${Q.startColumn}): `,de.title=this._labelService.getUriLabel(Q.resource),this._relatedDiagnostics.set(de,Q);const he=document.createElement("span");he.innerText=Q.message,re.appendChild(de),re.appendChild(he),this._lines+=1,J.appendChild(re)}}const ae=this._editor.getOption(50),ne=Math.ceil(ae.typicalFullwidthCharacterWidth*this._longestLineLength*.75),$=ae.lineHeight*this._lines;this._scrollable.setScrollDimensions({scrollWidth:ne,scrollHeight:$})}layout(O,B){this._scrollable.getDomNode().style.height=`${O}px`,this._scrollable.getDomNode().style.width=`${B}px`,this._scrollable.setScrollDimensions({width:B,height:O})}getHeightInLines(){return Math.min(17,this._lines)}getAriaLabel(O){let B="";switch(O.severity){case c.MarkerSeverity.Error:B=i.localize(0,null);break;case c.MarkerSeverity.Warning:B=i.localize(1,null);break;case c.MarkerSeverity.Info:B=i.localize(2,null);break;case c.MarkerSeverity.Hint:B=i.localize(3,null);break}let W=i.localize(4,null,B,O.startLineNumber+":"+O.startColumn);const V=this._editor.getModel();return V&&O.startLineNumber<=V.getLineCount()&&O.startLineNumber>=1&&(W=`${V.getLineContent(O.startLineNumber)}, ${W}`),W}}let m=g=class extends a.PeekViewWidget{constructor(O,B,W,V,K,F,q){super(O,{showArrow:!0,showFrame:!0,isAccessible:!0,frameWidth:1},K),this._themeService=B,this._openerService=W,this._menuService=V,this._contextKeyService=F,this._labelService=q,this._callOnDispose=new p.DisposableStore,this._onDidSelectRelatedInformation=new S.Emitter,this.onDidSelectRelatedInformation=this._onDidSelectRelatedInformation.event,this._severity=c.MarkerSeverity.Warning,this._backgroundColor=E.Color.white,this._applyTheme(B.getColorTheme()),this._callOnDispose.add(B.onDidColorThemeChange(this._applyTheme.bind(this))),this.create()}_applyTheme(O){this._backgroundColor=O.getColor(R);let B=I,W=T;this._severity===c.MarkerSeverity.Warning?(B=A,W=P):this._severity===c.MarkerSeverity.Info&&(B=N,W=M);const V=O.getColor(B),K=O.getColor(W);this.style({arrowColor:V,frameColor:V,headerBackgroundColor:K,primaryHeadingColor:O.getColor(a.peekViewTitleForeground),secondaryHeadingColor:O.getColor(a.peekViewTitleInfoForeground)})}_applyStyles(){this._parentContainer&&(this._parentContainer.style.backgroundColor=this._backgroundColor?this._backgroundColor.toString():""),super._applyStyles()}dispose(){this._callOnDispose.dispose(),super.dispose()}_fillHead(O){super._fillHead(O),this._disposables.add(this._actionbarWidget.actionRunner.onWillRun(V=>this.editor.focus()));const B=[],W=this._menuService.createMenu(g.TitleMenu,this._contextKeyService);(0,n.createAndFillInActionBarActions)(W,void 0,B),this._actionbarWidget.push(B,{label:!1,icon:!0,index:0}),W.dispose()}_fillTitleIcon(O){this._icon=L.append(O,L.$(""))}_fillBody(O){this._parentContainer=O,O.classList.add("marker-widget"),this._parentContainer.tabIndex=0,this._parentContainer.setAttribute("role","tooltip"),this._container=document.createElement("div"),O.appendChild(this._container),this._message=new h(this._container,this.editor,B=>this._onDidSelectRelatedInformation.fire(B),this._openerService,this._labelService),this._disposables.add(this._message)}show(){throw new Error("call showAtMarker")}showAtMarker(O,B,W){this._container.classList.remove("stale"),this._message.update(O),this._severity=O.severity,this._applyTheme(this._themeService.getColorTheme());const V=b.Range.lift(O),K=this.editor.getPosition(),F=K&&V.containsPosition(K)?K:V.getStartPosition();super.show(F,this.computeRequiredHeight());const q=this.editor.getModel();if(q){const ie=W>1?i.localize(5,null,B,W):i.localize(6,null,B,W);this.setTitle((0,_.basename)(q.uri),ie)}this._icon.className=`codicon ${s.SeverityIcon.className(c.MarkerSeverity.toSeverity(this._severity))}`,this.editor.revealPositionNearTop(F,0),this.editor.focus()}updateMarker(O){this._container.classList.remove("stale"),this._message.update(O)}showStale(){this._container.classList.add("stale"),this._relayout()}_doLayoutBody(O,B){super._doLayoutBody(O,B),this._heightInPixel=O,this._message.layout(O,B),this._container.style.height=`${O}px`}_onWidth(O){this._message.layout(this._heightInPixel,O)}_relayout(){super._relayout(this.computeRequiredHeight())}computeRequiredHeight(){return 3+this._message.getHeightInLines()}};e.MarkerNavigationWidget=m,m.TitleMenu=new t.MenuId("gotoErrorTitleMenu"),e.MarkerNavigationWidget=m=g=ke([ge(1,o.IThemeService),ge(2,d.IOpenerService),ge(3,t.IMenuService),ge(4,u.IInstantiationService),ge(5,r.IContextKeyService),ge(6,f.ILabelService)],m);const C=(0,l.oneOf)(l.editorErrorForeground,l.editorErrorBorder),w=(0,l.oneOf)(l.editorWarningForeground,l.editorWarningBorder),D=(0,l.oneOf)(l.editorInfoForeground,l.editorInfoBorder),I=(0,l.registerColor)("editorMarkerNavigationError.background",{dark:C,light:C,hcDark:l.contrastBorder,hcLight:l.contrastBorder},i.localize(7,null)),T=(0,l.registerColor)("editorMarkerNavigationError.headerBackground",{dark:(0,l.transparent)(I,.1),light:(0,l.transparent)(I,.1),hcDark:null,hcLight:null},i.localize(8,null)),A=(0,l.registerColor)("editorMarkerNavigationWarning.background",{dark:w,light:w,hcDark:l.contrastBorder,hcLight:l.contrastBorder},i.localize(9,null)),P=(0,l.registerColor)("editorMarkerNavigationWarning.headerBackground",{dark:(0,l.transparent)(A,.1),light:(0,l.transparent)(A,.1),hcDark:"#0C141F",hcLight:(0,l.transparent)(A,.2)},i.localize(10,null)),N=(0,l.registerColor)("editorMarkerNavigationInfo.background",{dark:D,light:D,hcDark:l.contrastBorder,hcLight:l.contrastBorder},i.localize(11,null)),M=(0,l.registerColor)("editorMarkerNavigationInfo.headerBackground",{dark:(0,l.transparent)(N,.1),light:(0,l.transparent)(N,.1),hcDark:null,hcLight:null},i.localize(12,null)),R=(0,l.registerColor)("editorMarkerNavigation.background",{dark:l.editorBackground,light:l.editorBackground,hcDark:l.editorBackground,hcLight:l.editorBackground},i.localize(13,null))}),define(se[382],oe([1,0,26,2,16,33,10,5,21,783,678,30,15,8,82,913]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";var u;Object.defineProperty(e,"__esModule",{value:!0}),e.NextMarkerAction=e.MarkerController=void 0;let f=u=class{static get(C){return C.getContribution(u.ID)}constructor(C,w,D,I,T){this._markerNavigationService=w,this._contextKeyService=D,this._editorService=I,this._instantiationService=T,this._sessionDispoables=new k.DisposableStore,this._editor=C,this._widgetVisible=g.bindTo(this._contextKeyService)}dispose(){this._cleanUp(),this._sessionDispoables.dispose()}_cleanUp(){this._widgetVisible.reset(),this._sessionDispoables.clear(),this._widget=void 0,this._model=void 0}_getOrCreateModel(C){if(this._model&&this._model.matches(C))return this._model;let w=!1;return this._model&&(w=!0,this._cleanUp()),this._model=this._markerNavigationService.getMarkerList(C),w&&this._model.move(!0,this._editor.getModel(),this._editor.getPosition()),this._widget=this._instantiationService.createInstance(r.MarkerNavigationWidget,this._editor),this._widget.onDidClose(()=>this.close(),this,this._sessionDispoables),this._widgetVisible.set(!0),this._sessionDispoables.add(this._model),this._sessionDispoables.add(this._widget),this._sessionDispoables.add(this._editor.onDidChangeCursorPosition(D=>{var I,T,A;(!(!((I=this._model)===null||I===void 0)&&I.selected)||!p.Range.containsPosition((T=this._model)===null||T===void 0?void 0:T.selected.marker,D.position))&&((A=this._model)===null||A===void 0||A.resetIndex())})),this._sessionDispoables.add(this._model.onDidChange(()=>{if(!this._widget||!this._widget.position||!this._model)return;const D=this._model.find(this._editor.getModel().uri,this._widget.position);D?this._widget.updateMarker(D.marker):this._widget.showStale()})),this._sessionDispoables.add(this._widget.onDidSelectRelatedInformation(D=>{this._editorService.openCodeEditor({resource:D.resource,options:{pinned:!0,revealIfOpened:!0,selection:p.Range.lift(D).collapseToStart()}},this._editor),this.close(!1)})),this._sessionDispoables.add(this._editor.onDidChangeModel(()=>this._cleanUp())),this._model}close(C=!0){this._cleanUp(),C&&this._editor.focus()}showAtMarker(C){if(this._editor.hasModel()){const w=this._getOrCreateModel(this._editor.getModel().uri);w.resetIndex(),w.move(!0,this._editor.getModel(),new S.Position(C.startLineNumber,C.startColumn)),w.selected&&this._widget.showAtMarker(w.selected.marker,w.selected.index,w.selected.total)}}async nagivate(C,w){var D,I;if(this._editor.hasModel()){const T=this._getOrCreateModel(w?void 0:this._editor.getModel().uri);if(T.move(C,this._editor.getModel(),this._editor.getPosition()),!T.selected)return;if(T.selected.marker.resource.toString()!==this._editor.getModel().uri.toString()){this._cleanUp();const A=await this._editorService.openCodeEditor({resource:T.selected.marker.resource,options:{pinned:!1,revealIfOpened:!0,selectionRevealType:2,selection:T.selected.marker}},this._editor);A&&((D=u.get(A))===null||D===void 0||D.close(),(I=u.get(A))===null||I===void 0||I.nagivate(C,w))}else this._widget.showAtMarker(T.selected.marker,T.selected.index,T.selected.total)}}};e.MarkerController=f,f.ID="editor.contrib.markerController",e.MarkerController=f=u=ke([ge(1,v.IMarkerNavigationService),ge(2,i.IContextKeyService),ge(3,E.ICodeEditorService),ge(4,n.IInstantiationService)],f);class c extends y.EditorAction{constructor(C,w,D){super(D),this._next=C,this._multiFile=w}async run(C,w){var D;w.hasModel()&&((D=f.get(w))===null||D===void 0||D.nagivate(this._next,this._multiFile))}}class d extends c{constructor(){super(!0,!1,{id:d.ID,label:d.LABEL,alias:"Go to Next Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:578,weight:100},menuOpts:{menuId:r.MarkerNavigationWidget.TitleMenu,title:d.LABEL,icon:(0,t.registerIcon)("marker-navigation-next",L.Codicon.arrowDown,b.localize(1,null)),group:"navigation",order:1}})}}e.NextMarkerAction=d,d.ID="editor.action.marker.next",d.LABEL=b.localize(0,null);class s extends c{constructor(){super(!1,!1,{id:s.ID,label:s.LABEL,alias:"Go to Previous Problem (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:1602,weight:100},menuOpts:{menuId:r.MarkerNavigationWidget.TitleMenu,title:s.LABEL,icon:(0,t.registerIcon)("marker-navigation-previous",L.Codicon.arrowUp,b.localize(3,null)),group:"navigation",order:2}})}}s.ID="editor.action.marker.prev",s.LABEL=b.localize(2,null);class l extends c{constructor(){super(!0,!0,{id:"editor.action.marker.nextInFiles",label:b.localize(4,null),alias:"Go to Next Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:66,weight:100},menuOpts:{menuId:a.MenuId.MenubarGoMenu,title:b.localize(5,null),group:"6_problem_nav",order:1}})}}class o extends c{constructor(){super(!1,!0,{id:"editor.action.marker.prevInFiles",label:b.localize(6,null),alias:"Go to Previous Problem in Files (Error, Warning, Info)",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.focus,primary:1090,weight:100},menuOpts:{menuId:a.MenuId.MenubarGoMenu,title:b.localize(7,null),group:"6_problem_nav",order:2}})}}(0,y.registerEditorContribution)(f.ID,f,4),(0,y.registerEditorAction)(d),(0,y.registerEditorAction)(s),(0,y.registerEditorAction)(l),(0,y.registerEditorAction)(o);const g=new i.RawContextKey("markersNavigationVisible",!1),h=y.EditorCommand.bindToContribution(f.get);(0,y.registerEditorCommand)(new h({id:"closeMarkersNavigation",precondition:g,handler:m=>m.close(),kbOpts:{weight:100+50,kbExpr:_.EditorContextKeys.focus,primary:9,secondary:[1033]}}))}),define(se[914],oe([1,0,7,322,39,6,2,47,49,168,5,38,32,80,43,68,837,142,684,8,34,164,192,23,193,161,464]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ReferenceWidget=e.LayoutData=void 0;class C{constructor(A,P){this._editor=A,this._model=P,this._decorations=new Map,this._decorationIgnoreSet=new Set,this._callOnDispose=new S.DisposableStore,this._callOnModelChange=new S.DisposableStore,this._callOnDispose.add(this._editor.onDidChangeModel(()=>this._onModelChanged())),this._onModelChanged()}dispose(){this._callOnModelChange.dispose(),this._callOnDispose.dispose(),this.removeDecorations()}_onModelChanged(){this._callOnModelChange.clear();const A=this._editor.getModel();if(A){for(const P of this._model.references)if(P.uri.toString()===A.uri.toString()){this._addDecorations(P.parent);return}}}_addDecorations(A){if(!this._editor.hasModel())return;this._callOnModelChange.add(this._editor.getModel().onDidChangeDecorations(()=>this._onDecorationChanged()));const P=[],N=[];for(let M=0,R=A.children.length;M{const R=M.deltaDecorations([],P);for(let x=0;x{R.equals(9)&&(this._keybindingService.dispatchEvent(R,R.target),R.stopPropagation())},!0)),this._tree=this._instantiationService.createInstance(D,"ReferencesWidget",this._treeContainer,new u.Delegate,[this._instantiationService.createInstance(u.FileReferencesRenderer),this._instantiationService.createInstance(u.OneReferenceRenderer)],this._instantiationService.createInstance(u.DataSource),N),this._splitView.addView({onDidChange:E.Event.None,element:this._previewContainer,minimumSize:200,maximumSize:Number.MAX_VALUE,layout:R=>{this._preview.layout({height:this._dim.height,width:R})}},k.Sizing.Distribute),this._splitView.addView({onDidChange:E.Event.None,element:this._treeContainer,minimumSize:100,maximumSize:Number.MAX_VALUE,layout:R=>{this._treeContainer.style.height=`${this._dim.height}px`,this._treeContainer.style.width=`${R}px`,this._tree.layout(this._dim.height,R)}},k.Sizing.Distribute),this._disposables.add(this._splitView.onDidSashChange(()=>{this._dim.width&&(this.layoutData.ratio=this._splitView.getViewSize(0)/this._dim.width)},void 0));const M=(R,x)=>{R instanceof m.OneReference&&(x==="show"&&this._revealReference(R,!1),this._onDidSelectReference.fire({element:R,kind:x,source:"tree"}))};this._tree.onDidOpen(R=>{R.sideBySide?M(R.element,"side"):R.editorOptions.pinned?M(R.element,"goto"):M(R.element,"show")}),L.hide(this._treeContainer)}_onWidth(A){this._dim&&this._doLayoutBody(this._dim.height,A)}_doLayoutBody(A,P){super._doLayoutBody(A,P),this._dim=new L.Dimension(P,A),this.layoutData.heightInLines=this._viewZone?this._viewZone.heightInLines:this.layoutData.heightInLines,this._splitView.layout(P),this._splitView.resizeView(0,P*this.layoutData.ratio)}setSelection(A){return this._revealReference(A,!0).then(()=>{this._model&&(this._tree.setSelection([A]),this._tree.setFocus([A]))})}setModel(A){return this._disposeOnNewModel.clear(),this._model=A,this._model?this._onNewModel():Promise.resolve()}_onNewModel(){return this._model?this._model.isEmpty?(this.setTitle(""),this._messageContainer.innerText=c.localize(1,null),L.show(this._messageContainer),Promise.resolve(void 0)):(L.hide(this._messageContainer),this._decorationsManager=new C(this._preview,this._model),this._disposeOnNewModel.add(this._decorationsManager),this._disposeOnNewModel.add(this._model.onDidChangeReferenceRange(A=>this._tree.rerender(A))),this._disposeOnNewModel.add(this._preview.onMouseDown(A=>{const{event:P,target:N}=A;if(P.detail!==2)return;const M=this._getFocusedReference();M&&this._onDidSelectReference.fire({element:{uri:M.uri,range:N.range},kind:P.ctrlKey||P.metaKey||P.altKey?"side":"open",source:"editor"})})),this.container.classList.add("results-loaded"),L.show(this._treeContainer),L.show(this._previewContainer),this._splitView.layout(this._dim.width),this.focusOnReferenceTree(),this._tree.setInput(this._model.groups.length===1?this._model.groups[0]:this._model)):Promise.resolve(void 0)}_getFocusedReference(){const[A]=this._tree.getFocus();if(A instanceof m.OneReference)return A;if(A instanceof m.FileReferences&&A.children.length>0)return A.children[0]}async revealReference(A){await this._revealReference(A,!1),this._onDidSelectReference.fire({element:A,kind:"goto",source:"tree"})}async _revealReference(A,P){if(this._revealedReference===A)return;this._revealedReference=A,A.uri.scheme!==p.Schemas.inMemory?this.setTitle((0,_.basenameOrAuthority)(A.uri),this._uriLabel.getUriLabel((0,_.dirname)(A.uri))):this.setTitle(c.localize(2,null));const N=this._textModelResolverService.createModelReference(A.uri);this._tree.getInput()===A.parent?this._tree.reveal(A):(P&&this._tree.reveal(A.parent),await this._tree.expand(A.parent),this._tree.reveal(A));const M=await N;if(!this._model){M.dispose();return}(0,S.dispose)(this._previewModelReference);const R=M.object;if(R){const x=this._preview.getModel()===R.textEditorModel?0:1,O=b.Range.lift(A.range).collapseToStart();this._previewModelReference=M,this._preview.setModel(R.textEditorModel),this._preview.setSelection(O),this._preview.revealRangeInCenter(O,x)}else this._preview.setModel(this._previewNotAvailableMessage),M.dispose()}};e.ReferenceWidget=I,e.ReferenceWidget=I=ke([ge(3,g.IThemeService),ge(4,r.ITextModelService),ge(5,d.IInstantiationService),ge(6,f.IPeekViewService),ge(7,l.ILabelService),ge(8,h.IUndoRedoService),ge(9,s.IKeybindingService),ge(10,t.ILanguageService),ge(11,i.ILanguageConfigurationService)],I)}),define(se[383],oe([1,0,14,12,65,2,33,10,5,142,682,25,27,15,8,124,192,50,92,161,914]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s){"use strict";var l;Object.defineProperty(e,"__esModule",{value:!0}),e.ReferencesController=e.ctxReferenceSearchVisible=void 0,e.ctxReferenceSearchVisible=new n.RawContextKey("referenceSearchVisible",!1,b.localize(0,null));let o=l=class{static get(m){return m.getContribution(l.ID)}constructor(m,C,w,D,I,T,A,P){this._defaultTreeKeyboardSupport=m,this._editor=C,this._editorService=D,this._notificationService=I,this._instantiationService=T,this._storageService=A,this._configurationService=P,this._disposables=new E.DisposableStore,this._requestIdPool=0,this._ignoreModelChangeEvent=!1,this._referenceSearchVisible=e.ctxReferenceSearchVisible.bindTo(w)}dispose(){var m,C;this._referenceSearchVisible.reset(),this._disposables.dispose(),(m=this._widget)===null||m===void 0||m.dispose(),(C=this._model)===null||C===void 0||C.dispose(),this._widget=void 0,this._model=void 0}toggleWidget(m,C,w){let D;if(this._widget&&(D=this._widget.position),this.closeWidget(),D&&m.containsPosition(D))return;this._peekMode=w,this._referenceSearchVisible.set(!0),this._disposables.add(this._editor.onDidChangeModelLanguage(()=>{this.closeWidget()})),this._disposables.add(this._editor.onDidChangeModel(()=>{this._ignoreModelChangeEvent||this.closeWidget()}));const I="peekViewLayout",T=s.LayoutData.fromJSON(this._storageService.get(I,0,"{}"));this._widget=this._instantiationService.createInstance(s.ReferenceWidget,this._editor,this._defaultTreeKeyboardSupport,T),this._widget.setTitle(b.localize(1,null)),this._widget.show(m),this._disposables.add(this._widget.onDidClose(()=>{C.cancel(),this._widget&&(this._storageService.store(I,JSON.stringify(this._widget.layoutData),0,1),this._widget=void 0),this.closeWidget()})),this._disposables.add(this._widget.onDidSelectReference(P=>{const{element:N,kind:M}=P;if(N)switch(M){case"open":(P.source!=="editor"||!this._configurationService.getValue("editor.stablePeek"))&&this.openReference(N,!1,!1);break;case"side":this.openReference(N,!0,!1);break;case"goto":w?this._gotoReference(N,!0):this.openReference(N,!1,!0);break}}));const A=++this._requestIdPool;C.then(P=>{var N;if(A!==this._requestIdPool||!this._widget){P.dispose();return}return(N=this._model)===null||N===void 0||N.dispose(),this._model=P,this._widget.setModel(this._model).then(()=>{if(this._widget&&this._model&&this._editor.hasModel()){this._model.isEmpty?this._widget.setMetaTitle(""):this._widget.setMetaTitle(b.localize(2,null,this._model.title,this._model.references.length));const M=this._editor.getModel().uri,R=new p.Position(m.startLineNumber,m.startColumn),x=this._model.nearestReference(M,R);if(x)return this._widget.setSelection(x).then(()=>{this._widget&&this._editor.getOption(86)==="editor"&&this._widget.focusOnPreviewEditor()})}})},P=>{this._notificationService.error(P)})}changeFocusBetweenPreviewAndReferences(){this._widget&&(this._widget.isPreviewEditorFocused()?this._widget.focusOnReferenceTree():this._widget.focusOnPreviewEditor())}async goToNextOrPreviousReference(m){if(!this._editor.hasModel()||!this._model||!this._widget)return;const C=this._widget.position;if(!C)return;const w=this._model.nearestReference(this._editor.getModel().uri,C);if(!w)return;const D=this._model.nextOrPreviousReference(w,m),I=this._editor.hasTextFocus(),T=this._widget.isPreviewEditorFocused();await this._widget.setSelection(D),await this._gotoReference(D,!1),I?this._editor.focus():this._widget&&T&&this._widget.focusOnPreviewEditor()}async revealReference(m){!this._editor.hasModel()||!this._model||!this._widget||await this._widget.revealReference(m)}closeWidget(m=!0){var C,w;(C=this._widget)===null||C===void 0||C.dispose(),(w=this._model)===null||w===void 0||w.dispose(),this._referenceSearchVisible.reset(),this._disposables.clear(),this._widget=void 0,this._model=void 0,m&&this._editor.focus(),this._requestIdPool+=1}_gotoReference(m,C){var w;(w=this._widget)===null||w===void 0||w.hide(),this._ignoreModelChangeEvent=!0;const D=_.Range.lift(m.range).collapseToStart();return this._editorService.openCodeEditor({resource:m.uri,options:{selection:D,selectionSource:"code.jump",pinned:C}},this._editor).then(I=>{var T;if(this._ignoreModelChangeEvent=!1,!I||!this._widget){this.closeWidget();return}if(this._editor===I)this._widget.show(D),this._widget.focusOnReferenceTree();else{const A=l.get(I),P=this._model.clone();this.closeWidget(),I.focus(),A?.toggleWidget(D,(0,L.createCancelablePromise)(N=>Promise.resolve(P)),(T=this._peekMode)!==null&&T!==void 0?T:!1)}},I=>{this._ignoreModelChangeEvent=!1,(0,k.onUnexpectedError)(I)})}openReference(m,C,w){C||this.closeWidget();const{uri:D,range:I}=m;this._editorService.openCodeEditor({resource:D,options:{selection:I,selectionSource:"code.jump",pinned:w}},this._editor,C)}};e.ReferencesController=o,o.ID="editor.contrib.referencesController",e.ReferencesController=o=l=ke([ge(2,n.IContextKeyService),ge(3,S.ICodeEditorService),ge(4,f.INotificationService),ge(5,t.IInstantiationService),ge(6,c.IStorageService),ge(7,i.IConfigurationService)],o);function g(h,m){const C=(0,v.getOuterEditor)(h);if(!C)return;const w=o.get(C);w&&m(w)}r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"togglePeekWidgetFocus",weight:100,primary:(0,y.KeyChord)(2089,60),when:n.ContextKeyExpr.or(e.ctxReferenceSearchVisible,v.PeekContext.inPeekEditor),handler(h){g(h,m=>{m.changeFocusBetweenPreviewAndReferences()})}}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"goToNextReference",weight:100-10,primary:62,secondary:[70],when:n.ContextKeyExpr.or(e.ctxReferenceSearchVisible,v.PeekContext.inPeekEditor),handler(h){g(h,m=>{m.goToNextOrPreviousReference(!0)})}}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"goToPreviousReference",weight:100-10,primary:1086,secondary:[1094],when:n.ContextKeyExpr.or(e.ctxReferenceSearchVisible,v.PeekContext.inPeekEditor),handler(h){g(h,m=>{m.goToNextOrPreviousReference(!1)})}}),a.CommandsRegistry.registerCommandAlias("goToNextReferenceFromEmbeddedEditor","goToNextReference"),a.CommandsRegistry.registerCommandAlias("goToPreviousReferenceFromEmbeddedEditor","goToPreviousReference"),a.CommandsRegistry.registerCommandAlias("closeReferenceSearchEditor","closeReferenceSearch"),a.CommandsRegistry.registerCommand("closeReferenceSearch",h=>g(h,m=>m.closeWidget())),r.KeybindingsRegistry.registerKeybindingRule({id:"closeReferenceSearch",weight:100-101,primary:9,secondary:[1033],when:n.ContextKeyExpr.and(v.PeekContext.inPeekEditor,n.ContextKeyExpr.not("config.editor.stablePeek"))}),r.KeybindingsRegistry.registerKeybindingRule({id:"closeReferenceSearch",weight:200+50,primary:9,secondary:[1033],when:n.ContextKeyExpr.and(e.ctxReferenceSearchVisible,n.ContextKeyExpr.not("config.editor.stablePeek"))}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"revealReference",weight:200,primary:3,mac:{primary:3,secondary:[2066]},when:n.ContextKeyExpr.and(e.ctxReferenceSearchVisible,u.WorkbenchListFocusContextKey,u.WorkbenchTreeElementCanCollapse.negate(),u.WorkbenchTreeElementCanExpand.negate()),handler(h){var m;const w=(m=h.get(u.IListService).lastFocusedList)===null||m===void 0?void 0:m.getFocus();Array.isArray(w)&&w[0]instanceof d.OneReference&&g(h,D=>D.revealReference(w[0]))}}),r.KeybindingsRegistry.registerCommandAndKeybindingRule({id:"openReferenceToSide",weight:100,primary:2051,mac:{primary:259},when:n.ContextKeyExpr.and(e.ctxReferenceSearchVisible,u.WorkbenchListFocusContextKey,u.WorkbenchTreeElementCanCollapse.negate(),u.WorkbenchTreeElementCanExpand.negate()),handler(h){var m;const w=(m=h.get(u.IListService).lastFocusedList)===null||m===void 0?void 0:m.getFocus();Array.isArray(w)&&w[0]instanceof d.OneReference&&g(h,D=>D.openReference(w[0],!0,!0))}}),a.CommandsRegistry.registerCommand("openReference",h=>{var m;const w=(m=h.get(u.IListService).lastFocusedList)===null||m===void 0?void 0:m.getFocus();Array.isArray(w)&&w[0]instanceof d.OneReference&&g(h,D=>D.openReference(w[0],!1,!0))})}),define(se[263],oe([1,0,48,14,65,20,22,105,153,16,33,168,10,5,21,31,383,161,819,166,142,680,30,25,15,8,50,88,252,18,52,242]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A){"use strict";var P,N,M,R,x,O,B,W;Object.defineProperty(e,"__esModule",{value:!0}),e.DefinitionAction=e.SymbolNavigationAction=e.SymbolNavigationAnchor=void 0,o.MenuRegistry.appendMenuItem(o.MenuId.EditorContext,{submenu:o.MenuId.EditorContextPeek,title:l.localize(0,null),group:"navigation",order:100});class V{static is(Q){return!Q||typeof Q!="object"?!1:!!(Q instanceof V||i.Position.isIPosition(Q.position)&&Q.model)}constructor(Q,re){this.model=Q,this.position=re}}e.SymbolNavigationAnchor=V;class K extends v.EditorAction2{static all(){return K._allSymbolNavigationCommands.values()}static _patchConfig(Q){const re={...Q,f1:!0};if(re.menu)for(const de of T.Iterable.wrap(re.menu))(de.id===o.MenuId.EditorContext||de.id===o.MenuId.EditorContextPeek)&&(de.when=h.ContextKeyExpr.and(Q.precondition,de.when));return re}constructor(Q,re){super(K._patchConfig(re)),this.configuration=Q,K._allSymbolNavigationCommands.set(re.id,this)}runEditorCommand(Q,re,de,he){if(!re.hasModel())return Promise.resolve(void 0);const me=Q.get(C.INotificationService),X=Q.get(b.ICodeEditorService),U=Q.get(w.IEditorProgressService),G=Q.get(c.ISymbolNavigationService),z=Q.get(I.ILanguageFeaturesService),H=Q.get(m.IInstantiationService),Y=re.getModel(),j=re.getPosition(),Z=V.is(de)?de:new V(Y,j),ee=new p.EditorStateCancellationTokenSource(re,5),le=(0,k.raceCancellation)(this._getLocationModel(z,Z.model,Z.position,ee.token),ee.token).then(async ue=>{var ce;if(!ue||ee.token.isCancellationRequested)return;(0,L.alert)(ue.ariaMessage);let pe;if(ue.referenceAt(Y.uri,j)){const Ce=this._getAlternativeCommand(re);!K._activeAlternativeCommands.has(Ce)&&K._allSymbolNavigationCommands.has(Ce)&&(pe=K._allSymbolNavigationCommands.get(Ce))}const ve=ue.references.length;if(ve===0){if(!this.configuration.muteMessage){const Ce=Y.getWordAtPosition(j);(ce=d.MessageController.get(re))===null||ce===void 0||ce.showMessage(this._getNoResultFoundMessage(Ce),j)}}else if(ve===1&&pe)K._activeAlternativeCommands.add(this.desc.id),H.invokeFunction(Ce=>pe.runEditorCommand(Ce,re,de,he).finally(()=>{K._activeAlternativeCommands.delete(this.desc.id)}));else return this._onResult(X,G,re,ue,he)},ue=>{me.error(ue)}).finally(()=>{ee.dispose()});return U.showWhile(le,250),le}async _onResult(Q,re,de,he,me){const X=this._getGoToPreference(de);if(!(de instanceof a.EmbeddedCodeEditorWidget)&&(this.configuration.openInPeek||X==="peek"&&he.references.length>1))this._openInPeek(de,he,me);else{const U=he.firstReference(),G=he.references.length>1&&X==="gotoAndPeek",z=await this._openReference(de,Q,U,this.configuration.openToSide,!G);G&&z?this._openInPeek(z,he,me):he.dispose(),X==="goto"&&re.put(U)}}async _openReference(Q,re,de,he,me){let X;if((0,r.isLocationLink)(de)&&(X=de.targetSelectionRange),X||(X=de.range),!X)return;const U=await re.openCodeEditor({resource:de.uri,options:{selection:n.Range.collapseToStart(X),selectionRevealType:3,selectionSource:"code.jump"}},Q,he);if(U){if(me){const G=U.getModel(),z=U.createDecorationsCollection([{range:X,options:{description:"symbol-navigate-action-highlight",className:"symbolHighlight"}}]);setTimeout(()=>{U.getModel()===G&&z.clear()},350)}return U}}_openInPeek(Q,re,de){const he=u.ReferencesController.get(Q);he&&Q.hasModel()?he.toggleWidget(de??Q.getSelection(),(0,k.createCancelablePromise)(me=>Promise.resolve(re)),this.configuration.openInPeek):re.dispose()}}e.SymbolNavigationAction=K,K._allSymbolNavigationCommands=new Map,K._activeAlternativeCommands=new Set;class F extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getDefinitionsAtPosition)(Q.definitionProvider,re,de,he),l.localize(1,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(2,null,Q.word):l.localize(3,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeDefinitionCommand}_getGoToPreference(Q){return Q.getOption(58).multipleDefinitions}}e.DefinitionAction=F,(0,o.registerAction2)((P=class extends F{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:P.id,title:{value:l.localize(4,null),original:"Go to Definition",mnemonicTitle:l.localize(5,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDefinitionProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:[{when:t.EditorContextKeys.editorTextFocus,primary:70,weight:100},{when:h.ContextKeyExpr.and(t.EditorContextKeys.editorTextFocus,A.IsWebContext),primary:2118,weight:100}],menu:[{id:o.MenuId.EditorContext,group:"navigation",order:1.1},{id:o.MenuId.MenubarGoMenu,precondition:null,group:"4_symbol_nav",order:2}]}),g.CommandsRegistry.registerCommandAlias("editor.action.goToDeclaration",P.id)}},P.id="editor.action.revealDefinition",P)),(0,o.registerAction2)((N=class extends F{constructor(){super({openToSide:!0,openInPeek:!1,muteMessage:!1},{id:N.id,title:{value:l.localize(6,null),original:"Open Definition to the Side"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDefinitionProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:[{when:t.EditorContextKeys.editorTextFocus,primary:(0,y.KeyChord)(2089,70),weight:100},{when:h.ContextKeyExpr.and(t.EditorContextKeys.editorTextFocus,A.IsWebContext),primary:(0,y.KeyChord)(2089,2118),weight:100}]}),g.CommandsRegistry.registerCommandAlias("editor.action.openDeclarationToTheSide",N.id)}},N.id="editor.action.revealDefinitionAside",N)),(0,o.registerAction2)((M=class extends F{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:M.id,title:{value:l.localize(7,null),original:"Peek Definition"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDefinitionProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:582,linux:{primary:3140},weight:100},menu:{id:o.MenuId.EditorContextPeek,group:"peek",order:2}}),g.CommandsRegistry.registerCommandAlias("editor.action.previewDeclaration",M.id)}},M.id="editor.action.peekDefinition",M));class q extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getDeclarationsAtPosition)(Q.declarationProvider,re,de,he),l.localize(8,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(9,null,Q.word):l.localize(10,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeDeclarationCommand}_getGoToPreference(Q){return Q.getOption(58).multipleDeclarations}}(0,o.registerAction2)((R=class extends q{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:R.id,title:{value:l.localize(11,null),original:"Go to Declaration",mnemonicTitle:l.localize(12,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDeclarationProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:[{id:o.MenuId.EditorContext,group:"navigation",order:1.3},{id:o.MenuId.MenubarGoMenu,precondition:null,group:"4_symbol_nav",order:3}]})}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(13,null,Q.word):l.localize(14,null)}},R.id="editor.action.revealDeclaration",R)),(0,o.registerAction2)(class extends q{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.peekDeclaration",title:{value:l.localize(15,null),original:"Peek Declaration"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasDeclarationProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:{id:o.MenuId.EditorContextPeek,group:"peek",order:3}})}});class ie extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getTypeDefinitionsAtPosition)(Q.typeDefinitionProvider,re,de,he),l.localize(16,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(17,null,Q.word):l.localize(18,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeTypeDefinitionCommand}_getGoToPreference(Q){return Q.getOption(58).multipleTypeDefinitions}}(0,o.registerAction2)((x=class extends ie{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:x.ID,title:{value:l.localize(19,null),original:"Go to Type Definition",mnemonicTitle:l.localize(20,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasTypeDefinitionProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:0,weight:100},menu:[{id:o.MenuId.EditorContext,group:"navigation",order:1.4},{id:o.MenuId.MenubarGoMenu,precondition:null,group:"4_symbol_nav",order:3}]})}},x.ID="editor.action.goToTypeDefinition",x)),(0,o.registerAction2)((O=class extends ie{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:O.ID,title:{value:l.localize(21,null),original:"Peek Type Definition"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasTypeDefinitionProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:{id:o.MenuId.EditorContextPeek,group:"peek",order:4}})}},O.ID="editor.action.peekTypeDefinition",O));class ae extends K{async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getImplementationsAtPosition)(Q.implementationProvider,re,de,he),l.localize(22,null))}_getNoResultFoundMessage(Q){return Q&&Q.word?l.localize(23,null,Q.word):l.localize(24,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeImplementationCommand}_getGoToPreference(Q){return Q.getOption(58).multipleImplementations}}(0,o.registerAction2)((B=class extends ae{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:B.ID,title:{value:l.localize(25,null),original:"Go to Implementations",mnemonicTitle:l.localize(26,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasImplementationProvider,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:2118,weight:100},menu:[{id:o.MenuId.EditorContext,group:"navigation",order:1.45},{id:o.MenuId.MenubarGoMenu,precondition:null,group:"4_symbol_nav",order:4}]})}},B.ID="editor.action.goToImplementation",B)),(0,o.registerAction2)((W=class extends ae{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:W.ID,title:{value:l.localize(27,null),original:"Peek Implementations"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasImplementationProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:3142,weight:100},menu:{id:o.MenuId.EditorContextPeek,group:"peek",order:5}})}},W.ID="editor.action.peekImplementation",W));class ne extends K{_getNoResultFoundMessage(Q){return Q?l.localize(28,null,Q.word):l.localize(29,null)}_getAlternativeCommand(Q){return Q.getOption(58).alternativeReferenceCommand}_getGoToPreference(Q){return Q.getOption(58).multipleReferences}}(0,o.registerAction2)(class extends ne{constructor(){super({openToSide:!1,openInPeek:!1,muteMessage:!1},{id:"editor.action.goToReferences",title:{value:l.localize(30,null),original:"Go to References",mnemonicTitle:l.localize(31,null)},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasReferenceProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),keybinding:{when:t.EditorContextKeys.editorTextFocus,primary:1094,weight:100},menu:[{id:o.MenuId.EditorContext,group:"navigation",order:1.45},{id:o.MenuId.MenubarGoMenu,precondition:null,group:"4_symbol_nav",order:5}]})}async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getReferencesAtPosition)(Q.referenceProvider,re,de,!0,he),l.localize(32,null))}}),(0,o.registerAction2)(class extends ne{constructor(){super({openToSide:!1,openInPeek:!0,muteMessage:!1},{id:"editor.action.referenceSearch.trigger",title:{value:l.localize(33,null),original:"Peek References"},precondition:h.ContextKeyExpr.and(t.EditorContextKeys.hasReferenceProvider,s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated()),menu:{id:o.MenuId.EditorContextPeek,group:"peek",order:6}})}async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(await(0,D.getReferencesAtPosition)(Q.referenceProvider,re,de,!1,he),l.localize(34,null))}});class $ extends K{constructor(Q,re,de){super(Q,{id:"editor.action.goToLocation",title:{value:l.localize(35,null),original:"Go to Any Symbol"},precondition:h.ContextKeyExpr.and(s.PeekContext.notInPeekEditor,t.EditorContextKeys.isInWalkThroughSnippet.toNegated())}),this._references=re,this._gotoMultipleBehaviour=de}async _getLocationModel(Q,re,de,he){return new f.ReferencesModel(this._references,l.localize(36,null))}_getNoResultFoundMessage(Q){return Q&&l.localize(37,null,Q.word)||""}_getGoToPreference(Q){var re;return(re=this._gotoMultipleBehaviour)!==null&&re!==void 0?re:Q.getOption(58).multipleReferences}_getAlternativeCommand(){return""}}g.CommandsRegistry.registerCommand({id:"editor.action.goToLocations",metadata:{description:"Go to locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:S.URI},{name:"position",description:"The position at which to start",constraint:i.Position.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto`"},{name:"noResultsMessage",description:"Human readable message that shows when locations is empty."}]},handler:async(J,Q,re,de,he,me,X)=>{(0,E.assertType)(S.URI.isUri(Q)),(0,E.assertType)(i.Position.isIPosition(re)),(0,E.assertType)(Array.isArray(de)),(0,E.assertType)(typeof he>"u"||typeof he=="string"),(0,E.assertType)(typeof X>"u"||typeof X=="boolean");const U=J.get(b.ICodeEditorService),G=await U.openCodeEditor({resource:Q},U.getFocusedCodeEditor());if((0,_.isCodeEditor)(G))return G.setPosition(re),G.revealPositionInCenterIfOutsideViewport(re,0),G.invokeWithinContext(z=>{const H=new class extends ${_getNoResultFoundMessage(Y){return me||super._getNoResultFoundMessage(Y)}}({muteMessage:!me,openInPeek:!!X,openToSide:!1},de,he);z.get(m.IInstantiationService).invokeFunction(H.run.bind(H),G)})}}),g.CommandsRegistry.registerCommand({id:"editor.action.peekLocations",metadata:{description:"Peek locations from a position in a file",args:[{name:"uri",description:"The text document in which to start",constraint:S.URI},{name:"position",description:"The position at which to start",constraint:i.Position.isIPosition},{name:"locations",description:"An array of locations.",constraint:Array},{name:"multiple",description:"Define what to do when having multiple results, either `peek`, `gotoAndPeek`, or `goto`"}]},handler:async(J,Q,re,de,he)=>{J.get(g.ICommandService).executeCommand("editor.action.goToLocations",Q,re,de,he,void 0,!0)}}),g.CommandsRegistry.registerCommand({id:"editor.action.findReferences",handler:(J,Q,re)=>{(0,E.assertType)(S.URI.isUri(Q)),(0,E.assertType)(i.Position.isIPosition(re));const de=J.get(I.ILanguageFeaturesService),he=J.get(b.ICodeEditorService);return he.openCodeEditor({resource:Q},he.getFocusedCodeEditor()).then(me=>{if(!(0,_.isCodeEditor)(me)||!me.hasModel())return;const X=u.ReferencesController.get(me);if(!X)return;const U=(0,k.createCancelablePromise)(z=>(0,D.getReferencesAtPosition)(de.referenceProvider,me.getModel(),i.Position.lift(re),!1,z).then(H=>new f.ReferencesModel(H,l.localize(38,null)))),G=new n.Range(re.lineNumber,re.column,re.lineNumber,re.column);return Promise.resolve(X.toggleWidget(G,U,!1))})}}),g.CommandsRegistry.registerCommandAlias("editor.action.showReferences","editor.action.peekLocations")}),define(se[384],oe([1,0,14,12,58,2,105,16,5,43,68,188,142,681,15,263,252,18,38,463]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";var d;Object.defineProperty(e,"__esModule",{value:!0}),e.GotoDefinitionAtPositionEditorContribution=void 0;let s=d=class{constructor(o,g,h,m){this.textModelResolverService=g,this.languageService=h,this.languageFeaturesService=m,this.toUnhook=new E.DisposableStore,this.toUnhookForKeyboard=new E.DisposableStore,this.currentWordAtPosition=null,this.previousPromise=null,this.editor=o,this.linkDecorations=this.editor.createDecorationsCollection();const C=new a.ClickLinkGesture(o);this.toUnhook.add(C),this.toUnhook.add(C.onMouseMoveOrRelevantKeyDown(([w,D])=>{this.startFindDefinitionFromMouse(w,D??void 0)})),this.toUnhook.add(C.onExecute(w=>{this.isEnabled(w)&&this.gotoDefinition(w.target.position,w.hasSideBySideModifier).catch(D=>{(0,k.onUnexpectedError)(D)}).finally(()=>{this.removeLinkDecorations()})})),this.toUnhook.add(C.onCancel(()=>{this.removeLinkDecorations(),this.currentWordAtPosition=null}))}static get(o){return o.getContribution(d.ID)}async startFindDefinitionFromCursor(o){await this.startFindDefinition(o),this.toUnhookForKeyboard.add(this.editor.onDidChangeCursorPosition(()=>{this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear()})),this.toUnhookForKeyboard.add(this.editor.onKeyDown(g=>{g&&(this.currentWordAtPosition=null,this.removeLinkDecorations(),this.toUnhookForKeyboard.clear())}))}startFindDefinitionFromMouse(o,g){if(o.target.type===9&&this.linkDecorations.length>0)return;if(!this.editor.hasModel()||!this.isEnabled(o,g)){this.currentWordAtPosition=null,this.removeLinkDecorations();return}const h=o.target.position;this.startFindDefinition(h)}async startFindDefinition(o){var g;this.toUnhookForKeyboard.clear();const h=o?(g=this.editor.getModel())===null||g===void 0?void 0:g.getWordAtPosition(o):null;if(!h){this.currentWordAtPosition=null,this.removeLinkDecorations();return}if(this.currentWordAtPosition&&this.currentWordAtPosition.startColumn===h.startColumn&&this.currentWordAtPosition.endColumn===h.endColumn&&this.currentWordAtPosition.word===h.word)return;this.currentWordAtPosition=h;const m=new S.EditorState(this.editor,15);this.previousPromise&&(this.previousPromise.cancel(),this.previousPromise=null),this.previousPromise=(0,L.createCancelablePromise)(D=>this.findDefinition(o,D));let C;try{C=await this.previousPromise}catch(D){(0,k.onUnexpectedError)(D);return}if(!C||!C.length||!m.validate(this.editor)){this.removeLinkDecorations();return}const w=C[0].originSelectionRange?_.Range.lift(C[0].originSelectionRange):new _.Range(o.lineNumber,h.startColumn,o.lineNumber,h.endColumn);if(C.length>1){let D=w;for(const{originSelectionRange:I}of C)I&&(D=_.Range.plusRange(D,I));this.addDecoration(D,new y.MarkdownString().appendText(n.localize(0,null,C.length)))}else{const D=C[0];if(!D.uri)return;this.textModelResolverService.createModelReference(D.uri).then(I=>{if(!I.object||!I.object.textEditorModel){I.dispose();return}const{object:{textEditorModel:T}}=I,{startLineNumber:A}=D.range;if(A<1||A>T.getLineCount()){I.dispose();return}const P=this.getPreviewValue(T,A,D),N=this.languageService.guessLanguageIdByFilepathOrFirstLine(T.uri);this.addDecoration(w,P?new y.MarkdownString().appendCodeblock(N||"",P):void 0),I.dispose()})}}getPreviewValue(o,g,h){let m=h.range;return m.endLineNumber-m.startLineNumber>=d.MAX_SOURCE_PREVIEW_LINES&&(m=this.getPreviewRangeBasedOnIndentation(o,g)),this.stripIndentationFromPreviewRange(o,g,m)}stripIndentationFromPreviewRange(o,g,h){let C=o.getLineFirstNonWhitespaceColumn(g);for(let D=g+1;D{const m=!g&&this.editor.getOption(87)&&!this.isInPeekEditor(h);return new r.DefinitionAction({openToSide:g,openInPeek:m,muteMessage:!0},{title:{value:"",original:""},id:"",precondition:void 0}).run(h)})}isInPeekEditor(o){const g=o.get(t.IContextKeyService);return i.PeekContext.inPeekEditor.getValue(g)}dispose(){this.toUnhook.dispose(),this.toUnhookForKeyboard.dispose()}};e.GotoDefinitionAtPositionEditorContribution=s,s.ID="editor.contrib.gotodefinitionatposition",s.MAX_SOURCE_PREVIEW_LINES=8,e.GotoDefinitionAtPositionEditorContribution=s=d=ke([ge(1,b.ITextModelService),ge(2,v.ILanguageService),ge(3,f.ILanguageFeaturesService)],s),(0,p.registerEditorContribution)(s.ID,s,2)}),define(se[915],oe([1,0,7,13,14,12,2,49,5,18,237,140,260,116,382,689,97,57,88]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.MarkerHoverParticipant=e.MarkerHover=void 0;const d=L.$;class s{constructor(h,m,C){this.owner=h,this.range=m,this.marker=C}isValidForHoverAnchor(h){return h.type===1&&this.range.startColumn<=h.range.startColumn&&this.range.endColumn>=h.range.endColumn}}e.MarkerHover=s;const l={type:1,filter:{include:n.CodeActionKind.QuickFix},triggerAction:n.CodeActionTriggerSource.QuickFixHover};let o=class{constructor(h,m,C,w){this._editor=h,this._markerDecorationsService=m,this._openerService=C,this._languageFeaturesService=w,this.hoverOrdinal=1,this.recentMarkerCodeActionsInfo=void 0}computeSync(h,m){if(!this._editor.hasModel()||h.type!==1&&!h.supportsMarkerHover)return[];const C=this._editor.getModel(),w=h.range.startLineNumber,D=C.getLineMaxColumn(w),I=[];for(const T of m){const A=T.range.startLineNumber===w?T.range.startColumn:1,P=T.range.endLineNumber===w?T.range.endColumn:D,N=this._markerDecorationsService.getMarker(C.uri,T);if(!N)continue;const M=new _.Range(h.range.startLineNumber,A,h.range.startLineNumber,P);I.push(new s(this,M,N))}return I}renderHoverParts(h,m){if(!m.length)return S.Disposable.None;const C=new S.DisposableStore;m.forEach(D=>h.fragment.appendChild(this.renderMarkerHover(D,C)));const w=m.length===1?m[0]:m.sort((D,I)=>u.MarkerSeverity.compare(D.marker.severity,I.marker.severity))[0];return this.renderMarkerStatusbar(h,w,C),C}renderMarkerHover(h,m){const C=d("div.hover-row"),w=L.append(C,d("div.marker.hover-contents")),{source:D,message:I,code:T,relatedInformation:A}=h.marker;this._editor.applyFontInfo(w);const P=L.append(w,d("span"));if(P.style.whiteSpace="pre-wrap",P.innerText=I,D||T)if(T&&typeof T!="string"){const N=d("span");if(D){const O=L.append(N,d("span"));O.innerText=D}const M=L.append(N,d("a.code-link"));M.setAttribute("href",T.target.toString()),m.add(L.addDisposableListener(M,"click",O=>{this._openerService.open(T.target,{allowCommands:!0}),O.preventDefault(),O.stopPropagation()}));const R=L.append(M,d("span"));R.innerText=T.value;const x=L.append(w,N);x.style.opacity="0.6",x.style.paddingLeft="6px"}else{const N=L.append(w,d("span"));N.style.opacity="0.6",N.style.paddingLeft="6px",N.innerText=D&&T?`${D}(${T})`:D||`(${T})`}if((0,k.isNonEmptyArray)(A))for(const{message:N,resource:M,startLineNumber:R,startColumn:x}of A){const O=L.append(w,d("div"));O.style.marginTop="8px";const B=L.append(O,d("a"));B.innerText=`${(0,p.basename)(M)}(${R}, ${x}): `,B.style.cursor="pointer",m.add(L.addDisposableListener(B,"click",V=>{V.stopPropagation(),V.preventDefault(),this._openerService&&this._openerService.open(M,{fromUserGesture:!0,editorOptions:{selection:{startLineNumber:R,startColumn:x}}}).catch(E.onUnexpectedError)}));const W=L.append(O,d("span"));W.innerText=N,this._editor.applyFontInfo(W)}return C}renderMarkerStatusbar(h,m,C){if((m.marker.severity===u.MarkerSeverity.Error||m.marker.severity===u.MarkerSeverity.Warning||m.marker.severity===u.MarkerSeverity.Info)&&h.statusBar.addAction({label:r.localize(0,null),commandId:t.NextMarkerAction.ID,run:()=>{var w;h.hide(),(w=t.MarkerController.get(this._editor))===null||w===void 0||w.showAtMarker(m.marker),this._editor.focus()}}),!this._editor.getOption(90)){const w=h.statusBar.append(d("div"));this.recentMarkerCodeActionsInfo&&(u.IMarkerData.makeKey(this.recentMarkerCodeActionsInfo.marker)===u.IMarkerData.makeKey(m.marker)?this.recentMarkerCodeActionsInfo.hasCodeActions||(w.textContent=r.localize(1,null)):this.recentMarkerCodeActionsInfo=void 0);const D=this.recentMarkerCodeActionsInfo&&!this.recentMarkerCodeActionsInfo.hasCodeActions?S.Disposable.None:(0,y.disposableTimeout)(()=>w.textContent=r.localize(2,null),200,C);w.textContent||(w.textContent=String.fromCharCode(160));const I=this.getCodeActions(m.marker);C.add((0,S.toDisposable)(()=>I.cancel())),I.then(T=>{if(D.dispose(),this.recentMarkerCodeActionsInfo={marker:m.marker,hasCodeActions:T.validActions.length>0},!this.recentMarkerCodeActionsInfo.hasCodeActions){T.dispose(),w.textContent=r.localize(3,null);return}w.style.display="none";let A=!1;C.add((0,S.toDisposable)(()=>{A||T.dispose()})),h.statusBar.addAction({label:r.localize(4,null),commandId:a.quickFixCommandId,run:P=>{A=!0;const N=i.CodeActionController.get(this._editor),M=L.getDomNodePagePosition(P);h.hide(),N?.showCodeActions(l,T,{x:M.left,y:M.top,width:M.width,height:M.height})}})},E.onUnexpectedError)}}getCodeActions(h){return(0,y.createCancelablePromise)(m=>(0,a.getCodeActions)(this._languageFeaturesService.codeActionProvider,this._editor.getModel(),new _.Range(h.startLineNumber,h.startColumn,h.endLineNumber,h.endColumn),l,c.Progress.None,m))}};e.MarkerHoverParticipant=o,e.MarkerHoverParticipant=o=ke([ge(1,b.IMarkerDecorationsService),ge(2,f.IOpenerService),ge(3,v.ILanguageFeaturesService)],o)}),define(se[385],oe([1,0,65,2,16,5,21,43,384,379,796,8,57,29,23,101,253,915,257,34,14,687,465]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l){"use strict";var o;Object.defineProperty(e,"__esModule",{value:!0}),e.HoverController=void 0;const g=!1;let h=o=class extends k.Disposable{constructor(O,B,W,V,K){super(),this._editor=O,this._instantiationService=B,this._openerService=W,this._languageService=V,this._keybindingService=K,this._listenersStore=new k.DisposableStore,this._hoverState={mouseDown:!1,contentHoverFocused:!1,activatedByDecoratorClick:!1},this._reactToEditorMouseMoveRunner=this._register(new s.RunOnceScheduler(()=>this._reactToEditorMouseMove(this._mouseMoveEvent),0)),this._hookListeners(),this._register(this._editor.onDidChangeConfiguration(F=>{F.hasChanged(60)&&(this._unhookListeners(),this._hookListeners())}))}static get(O){return O.getContribution(o.ID)}_hookListeners(){const O=this._editor.getOption(60);this._hoverSettings={enabled:O.enabled,sticky:O.sticky,hidingDelay:O.delay},O.enabled?(this._listenersStore.add(this._editor.onMouseDown(B=>this._onEditorMouseDown(B))),this._listenersStore.add(this._editor.onMouseUp(()=>this._onEditorMouseUp())),this._listenersStore.add(this._editor.onMouseMove(B=>this._onEditorMouseMove(B))),this._listenersStore.add(this._editor.onKeyDown(B=>this._onKeyDown(B)))):(this._listenersStore.add(this._editor.onMouseMove(B=>this._onEditorMouseMove(B))),this._listenersStore.add(this._editor.onKeyDown(B=>this._onKeyDown(B)))),this._listenersStore.add(this._editor.onMouseLeave(B=>this._onEditorMouseLeave(B))),this._listenersStore.add(this._editor.onDidChangeModel(()=>{this._cancelScheduler(),this._hideWidgets()})),this._listenersStore.add(this._editor.onDidChangeModelContent(()=>this._cancelScheduler())),this._listenersStore.add(this._editor.onDidScrollChange(B=>this._onEditorScrollChanged(B)))}_unhookListeners(){this._listenersStore.clear()}_cancelScheduler(){this._mouseMoveEvent=void 0,this._reactToEditorMouseMoveRunner.cancel()}_onEditorScrollChanged(O){(O.scrollTopChanged||O.scrollLeftChanged)&&this._hideWidgets()}_onEditorMouseDown(O){var B;this._hoverState.mouseDown=!0;const W=O.target;if(W.type===9&&W.detail===v.ContentHoverWidget.ID){this._hoverState.contentHoverFocused=!0;return}W.type===12&&W.detail===b.MarginHoverWidget.ID||(W.type!==12&&(this._hoverState.contentHoverFocused=!1),!(!((B=this._contentWidget)===null||B===void 0)&&B.widget.isResizing)&&this._hideWidgets())}_onEditorMouseUp(){this._hoverState.mouseDown=!1}_onEditorMouseLeave(O){var B,W;this._cancelScheduler();const V=O.event.browserEvent.relatedTarget;!((B=this._contentWidget)===null||B===void 0)&&B.widget.isResizing||!((W=this._contentWidget)===null||W===void 0)&&W.containsNode(V)||g||this._hideWidgets()}_isMouseOverWidget(O){var B,W,V,K,F;const q=O.target,ie=this._hoverSettings.sticky;return!!(ie&&q.type===9&&q.detail===v.ContentHoverWidget.ID||ie&&(!((B=this._contentWidget)===null||B===void 0)&&B.containsNode((W=O.event.browserEvent.view)===null||W===void 0?void 0:W.document.activeElement))&&!(!((K=(V=O.event.browserEvent.view)===null||V===void 0?void 0:V.getSelection())===null||K===void 0)&&K.isCollapsed)||!ie&&q.type===9&&q.detail===v.ContentHoverWidget.ID&&(!((F=this._contentWidget)===null||F===void 0)&&F.isColorPickerVisible)||ie&&q.type===12&&q.detail===b.MarginHoverWidget.ID)}_onEditorMouseMove(O){var B,W,V,K;if(this._mouseMoveEvent=O,!((B=this._contentWidget)===null||B===void 0)&&B.isFocused||!((W=this._contentWidget)===null||W===void 0)&&W.isResizing||this._hoverState.mouseDown&&this._hoverState.contentHoverFocused)return;const F=this._hoverSettings.sticky;if(F&&(!((V=this._contentWidget)===null||V===void 0)&&V.isVisibleFromKeyboard))return;if(this._isMouseOverWidget(O)){this._reactToEditorMouseMoveRunner.cancel();return}const ie=this._hoverSettings.hidingDelay;if(!((K=this._contentWidget)===null||K===void 0)&&K.isVisible&&F&&ie>0){this._reactToEditorMouseMoveRunner.isScheduled()||this._reactToEditorMouseMoveRunner.schedule(ie);return}this._reactToEditorMouseMove(O)}_reactToEditorMouseMove(O){var B,W,V,K;if(!O)return;const F=O.target,q=(B=F.element)===null||B===void 0?void 0:B.classList.contains("colorpicker-color-decoration"),ie=this._editor.getOption(146),ae=this._hoverSettings.enabled,ne=this._hoverState.activatedByDecoratorClick;if(q&&(ie==="click"&&!ne||ie==="hover"&&!ae&&!g||ie==="clickAndHover"&&!ae&&!ne)||!q&&!ae&&!ne){this._hideWidgets();return}if(this._getOrCreateContentWidget().showsOrWillShow(O)){(W=this._glyphWidget)===null||W===void 0||W.hide();return}if(F.type===2&&F.position&&F.detail.glyphMarginLane){(V=this._contentWidget)===null||V===void 0||V.hide(),this._getOrCreateGlyphWidget().startShowingAt(F.position.lineNumber,F.detail.glyphMarginLane);return}if(F.type===3&&F.position){(K=this._contentWidget)===null||K===void 0||K.hide(),this._getOrCreateGlyphWidget().startShowingAt(F.position.lineNumber,"lineNo");return}g||this._hideWidgets()}_onKeyDown(O){var B;if(!this._editor.hasModel())return;const W=this._keybindingService.softDispatch(O,this._editor.getDomNode()),V=W.kind===1||W.kind===2&&W.commandId==="editor.action.showHover"&&((B=this._contentWidget)===null||B===void 0?void 0:B.isVisible);O.keyCode===5||O.keyCode===6||O.keyCode===57||O.keyCode===4||V||this._hideWidgets()}_hideWidgets(){var O,B,W;g||this._hoverState.mouseDown&&this._hoverState.contentHoverFocused&&(!((O=this._contentWidget)===null||O===void 0)&&O.isColorPickerVisible)||c.InlineSuggestionHintsContentWidget.dropDownVisible||(this._hoverState.activatedByDecoratorClick=!1,this._hoverState.contentHoverFocused=!1,(B=this._glyphWidget)===null||B===void 0||B.hide(),(W=this._contentWidget)===null||W===void 0||W.hide())}_getOrCreateContentWidget(){return this._contentWidget||(this._contentWidget=this._instantiationService.createInstance(v.ContentHoverController,this._editor)),this._contentWidget}_getOrCreateGlyphWidget(){return this._glyphWidget||(this._glyphWidget=new b.MarginHoverWidget(this._editor,this._languageService,this._openerService)),this._glyphWidget}showContentHover(O,B,W,V,K=!1){this._hoverState.activatedByDecoratorClick=K,this._getOrCreateContentWidget().startShowingAtRange(O,B,W,V)}focus(){var O;(O=this._contentWidget)===null||O===void 0||O.focus()}scrollUp(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollUp()}scrollDown(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollDown()}scrollLeft(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollLeft()}scrollRight(){var O;(O=this._contentWidget)===null||O===void 0||O.scrollRight()}pageUp(){var O;(O=this._contentWidget)===null||O===void 0||O.pageUp()}pageDown(){var O;(O=this._contentWidget)===null||O===void 0||O.pageDown()}goToTop(){var O;(O=this._contentWidget)===null||O===void 0||O.goToTop()}goToBottom(){var O;(O=this._contentWidget)===null||O===void 0||O.goToBottom()}get isColorPickerVisible(){var O;return(O=this._contentWidget)===null||O===void 0?void 0:O.isColorPickerVisible}get isHoverVisible(){var O;return(O=this._contentWidget)===null||O===void 0?void 0:O.isVisible}dispose(){var O,B;super.dispose(),this._unhookListeners(),this._listenersStore.dispose(),(O=this._glyphWidget)===null||O===void 0||O.dispose(),(B=this._contentWidget)===null||B===void 0||B.dispose()}};e.HoverController=h,h.ID="editor.contrib.hover",e.HoverController=h=o=ke([ge(1,a.IInstantiationService),ge(2,i.IOpenerService),ge(3,p.ILanguageService),ge(4,d.IKeybindingService)],h);var m;(function(x){x.NoAutoFocus="noAutoFocus",x.FocusIfVisible="focusIfVisible",x.AutoFocusImmediately="autoFocusImmediately"})(m||(m={}));class C extends y.EditorAction{constructor(){super({id:"editor.action.showHover",label:l.localize(0,null),metadata:{description:"Show or Focus Hover",args:[{name:"args",schema:{type:"object",properties:{focus:{description:"Controls if and when the hover should take focus upon being triggered by this action.",enum:[m.NoAutoFocus,m.FocusIfVisible,m.AutoFocusImmediately],enumDescriptions:[l.localize(1,null),l.localize(2,null),l.localize(3,null)],default:m.FocusIfVisible}}}}]},alias:"Show or Focus Hover",precondition:void 0,kbOpts:{kbExpr:S.EditorContextKeys.editorTextFocus,primary:(0,L.KeyChord)(2089,2087),weight:100}})}run(O,B,W){if(!B.hasModel())return;const V=h.get(B);if(!V)return;const K=W?.focus;let F=m.FocusIfVisible;Object.values(m).includes(K)?F=K:typeof K=="boolean"&&K&&(F=m.AutoFocusImmediately);const q=ae=>{const ne=B.getPosition(),$=new E.Range(ne.lineNumber,ne.column,ne.lineNumber,ne.column);V.showContentHover($,1,1,ae)},ie=B.getOption(2)===2;V.isHoverVisible?F!==m.NoAutoFocus?V.focus():q(ie):q(ie||F===m.AutoFocusImmediately)}}class w extends y.EditorAction{constructor(){super({id:"editor.action.showDefinitionPreviewHover",label:l.localize(4,null),alias:"Show Definition Preview Hover",precondition:void 0})}run(O,B){const W=h.get(B);if(!W)return;const V=B.getPosition();if(!V)return;const K=new E.Range(V.lineNumber,V.column,V.lineNumber,V.column),F=_.GotoDefinitionAtPositionEditorContribution.get(B);if(!F)return;F.startFindDefinitionFromCursor(V).then(()=>{W.showContentHover(K,1,1,!0)})}}class D extends y.EditorAction{constructor(){super({id:"editor.action.scrollUpHover",label:l.localize(5,null),alias:"Scroll Up Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:16,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollUp()}}class I extends y.EditorAction{constructor(){super({id:"editor.action.scrollDownHover",label:l.localize(6,null),alias:"Scroll Down Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:18,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollDown()}}class T extends y.EditorAction{constructor(){super({id:"editor.action.scrollLeftHover",label:l.localize(7,null),alias:"Scroll Left Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:15,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollLeft()}}class A extends y.EditorAction{constructor(){super({id:"editor.action.scrollRightHover",label:l.localize(8,null),alias:"Scroll Right Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:17,weight:100}})}run(O,B){const W=h.get(B);W&&W.scrollRight()}}class P extends y.EditorAction{constructor(){super({id:"editor.action.pageUpHover",label:l.localize(9,null),alias:"Page Up Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:11,secondary:[528],weight:100}})}run(O,B){const W=h.get(B);W&&W.pageUp()}}class N extends y.EditorAction{constructor(){super({id:"editor.action.pageDownHover",label:l.localize(10,null),alias:"Page Down Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:12,secondary:[530],weight:100}})}run(O,B){const W=h.get(B);W&&W.pageDown()}}class M extends y.EditorAction{constructor(){super({id:"editor.action.goToTopHover",label:l.localize(11,null),alias:"Go To Bottom Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:14,secondary:[2064],weight:100}})}run(O,B){const W=h.get(B);W&&W.goToTop()}}class R extends y.EditorAction{constructor(){super({id:"editor.action.goToBottomHover",label:l.localize(12,null),alias:"Go To Bottom Hover",precondition:S.EditorContextKeys.hoverFocused,kbOpts:{kbExpr:S.EditorContextKeys.hoverFocused,primary:13,secondary:[2066],weight:100}})}run(O,B){const W=h.get(B);W&&W.goToBottom()}}(0,y.registerEditorContribution)(h.ID,h,2),(0,y.registerEditorAction)(C),(0,y.registerEditorAction)(w),(0,y.registerEditorAction)(D),(0,y.registerEditorAction)(I),(0,y.registerEditorAction)(T),(0,y.registerEditorAction)(A),(0,y.registerEditorAction)(P),(0,y.registerEditorAction)(N),(0,y.registerEditorAction)(M),(0,y.registerEditorAction)(R),r.HoverParticipantRegistry.register(u.MarkdownHoverParticipant),r.HoverParticipantRegistry.register(f.MarkerHoverParticipant),(0,t.registerThemingParticipant)((x,O)=>{const B=x.getColor(n.editorHoverBorder);B&&(O.addRule(`.monaco-editor .monaco-hover .hover-row:not(:first-child):not(:empty) { border-top: 1px solid ${B.transparent(.5)}; }`),O.addRule(`.monaco-editor .monaco-hover hr { border-top: 1px solid ${B.transparent(.5)}; }`),O.addRule(`.monaco-editor .monaco-hover hr { border-bottom: 0px solid ${B.transparent(.5)}; }`))})}),define(se[916],oe([1,0,2,16,5,375,376,385,101]),function(te,e,L,k,y,E,S,p,_){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ColorContribution=void 0;class v extends L.Disposable{constructor(a){super(),this._editor=a,this._register(a.onMouseDown(i=>this.onMouseDown(i)))}dispose(){super.dispose()}onMouseDown(a){const i=this._editor.getOption(146);if(i!=="click"&&i!=="clickAndHover")return;const n=a.target;if(n.type!==6||!n.detail.injectedText||n.detail.injectedText.options.attachedData!==E.ColorDecorationInjectedTextMarker||!n.range)return;const t=this._editor.getContribution(p.HoverController.ID);if(t&&!t.isColorPickerVisible){const r=new y.Range(n.range.startLineNumber,n.range.startColumn+1,n.range.endLineNumber,n.range.endColumn+1);t.showContentHover(r,1,0,!1,!0)}}}e.ColorContribution=v,v.ID="editor.contrib.colorContribution",(0,k.registerEditorContribution)(v.ID,v,2),_.HoverParticipantRegistry.register(S.ColorHoverParticipant)}),define(se[386],oe([1,0,7,42,19,175,5,68,263,142,30,25,15,59,8,50]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.goToDefinitionWithLocation=e.showGoToContextMenu=void 0;async function u(c,d,s,l){var o;const g=c.get(p.ITextModelService),h=c.get(n.IContextMenuService),m=c.get(a.ICommandService),C=c.get(t.IInstantiationService),w=c.get(r.INotificationService);if(await l.item.resolve(y.CancellationToken.None),!l.part.location)return;const D=l.part.location,I=[],T=new Set(b.MenuRegistry.getMenuItems(b.MenuId.EditorContext).map(P=>(0,b.isIMenuItem)(P)?P.command.id:(0,E.generateUuid)()));for(const P of _.SymbolNavigationAction.all())T.has(P.desc.id)&&I.push(new k.Action(P.desc.id,b.MenuItemAction.label(P.desc,{renderShortTitle:!0}),void 0,!0,async()=>{const N=await g.createModelReference(D.uri);try{const M=new _.SymbolNavigationAnchor(N.object.textEditorModel,S.Range.getStartPosition(D.range)),R=l.item.anchor.range;await C.invokeFunction(P.runEditorCommand.bind(P),d,M,R)}finally{N.dispose()}}));if(l.part.command){const{command:P}=l.part;I.push(new k.Separator),I.push(new k.Action(P.id,P.title,void 0,!0,async()=>{var N;try{await m.executeCommand(P.id,...(N=P.arguments)!==null&&N!==void 0?N:[])}catch(M){w.notify({severity:r.Severity.Error,source:l.item.provider.displayName,message:M})}}))}const A=d.getOption(126);h.showContextMenu({domForShadowRoot:A&&(o=d.getDomNode())!==null&&o!==void 0?o:void 0,getAnchor:()=>{const P=L.getDomNodePagePosition(s);return{x:P.left,y:P.top+P.height+8}},getActions:()=>I,onHide:()=>{d.focus()},autoSelectFirstItem:!0})}e.showGoToContextMenu=u;async function f(c,d,s,l){const g=await c.get(p.ITextModelService).createModelReference(l.uri);await s.invokeWithinContext(async h=>{const m=d.hasSideBySideModifier,C=h.get(i.IContextKeyService),w=v.PeekContext.inPeekEditor.getValue(C),D=!m&&s.getOption(87)&&!w;return new _.DefinitionAction({openToSide:m,openInPeek:D,muteMessage:!0},{title:{value:"",original:""},id:"",precondition:void 0}).run(h,new _.SymbolNavigationAnchor(g.object.textEditorModel,S.Range.getStartPosition(l.range)),S.Range.lift(l.range))}),g.dispose()}e.goToDefinitionWithLocation=f}),define(se[387],oe([1,0,7,13,14,19,12,2,53,20,22,167,127,36,74,5,31,41,38,79,18,68,188,333,386,25,45,8,50,29,23]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){"use strict";var A;Object.defineProperty(e,"__esModule",{value:!0}),e.InlayHintsController=e.RenderedInlayHintLabelPart=void 0;class P{constructor(){this._entries=new _.LRUCache(50)}get(W){const V=P._key(W);return this._entries.get(V)}set(W,V){const K=P._key(W);this._entries.set(K,V)}static _key(W){return`${W.uri.toString()}/${W.getVersionId()}`}}const N=(0,w.createDecorator)("IInlayHintsCache");(0,C.registerSingleton)(N,P,1);class M{constructor(W,V){this.item=W,this.index=V}get part(){const W=this.item.hint.label;return typeof W=="string"?{label:W}:W[this.index]}}e.RenderedInlayHintLabelPart=M;class R{constructor(W,V){this.part=W,this.hasTriggerModifier=V}}let x=A=class{static get(W){var V;return(V=W.getContribution(A.ID))!==null&&V!==void 0?V:void 0}constructor(W,V,K,F,q,ie,ae){this._editor=W,this._languageFeaturesService=V,this._inlayHintsCache=F,this._commandService=q,this._notificationService=ie,this._instaService=ae,this._disposables=new p.DisposableStore,this._sessionDisposables=new p.DisposableStore,this._decorationsMetadata=new Map,this._ruleFactory=new a.DynamicCssRules(this._editor),this._activeRenderMode=0,this._debounceInfo=K.for(V.inlayHintsProvider,"InlayHint",{min:25}),this._disposables.add(V.inlayHintsProvider.onDidChange(()=>this._update())),this._disposables.add(W.onDidChangeModel(()=>this._update())),this._disposables.add(W.onDidChangeModelLanguage(()=>this._update())),this._disposables.add(W.onDidChangeConfiguration(ne=>{ne.hasChanged(139)&&this._update()})),this._update()}dispose(){this._sessionDisposables.dispose(),this._removeAllDecorations(),this._disposables.dispose()}_update(){this._sessionDisposables.clear(),this._removeAllDecorations();const W=this._editor.getOption(139);if(W.enabled==="off")return;const V=this._editor.getModel();if(!V||!this._languageFeaturesService.inlayHintsProvider.has(V))return;if(W.enabled==="on")this._activeRenderMode=0;else{let ae,ne;W.enabled==="onUnlessPressed"?(ae=0,ne=1):(ae=1,ne=0),this._activeRenderMode=ae,this._sessionDisposables.add(L.ModifierKeyEmitter.getInstance().event($=>{if(!this._editor.hasModel())return;const J=$.altKey&&$.ctrlKey&&!($.shiftKey||$.metaKey)?ne:ae;if(J!==this._activeRenderMode){this._activeRenderMode=J;const Q=this._editor.getModel(),re=this._copyInlayHintsWithCurrentAnchor(Q);this._updateHintsDecorators([Q.getFullModelRange()],re),ie.schedule(0)}}))}const K=this._inlayHintsCache.get(V);K&&this._updateHintsDecorators([V.getFullModelRange()],K),this._sessionDisposables.add((0,p.toDisposable)(()=>{V.isDisposed()||this._cacheHintsForFastRestore(V)}));let F;const q=new Set,ie=new y.RunOnceScheduler(async()=>{const ae=Date.now();F?.dispose(!0),F=new E.CancellationTokenSource;const ne=V.onWillDispose(()=>F?.cancel());try{const $=F.token,J=await g.InlayHintsFragments.create(this._languageFeaturesService.inlayHintsProvider,V,this._getHintsRanges(),$);if(ie.delay=this._debounceInfo.update(V,Date.now()-ae),$.isCancellationRequested){J.dispose();return}for(const Q of J.provider)typeof Q.onDidChangeInlayHints=="function"&&!q.has(Q)&&(q.add(Q),this._sessionDisposables.add(Q.onDidChangeInlayHints(()=>{ie.isScheduled()||ie.schedule()})));this._sessionDisposables.add(J),this._updateHintsDecorators(J.ranges,J.items),this._cacheHintsForFastRestore(V)}catch($){(0,S.onUnexpectedError)($)}finally{F.dispose(),ne.dispose()}},this._debounceInfo.get(V));this._sessionDisposables.add(ie),this._sessionDisposables.add((0,p.toDisposable)(()=>F?.dispose(!0))),ie.schedule(0),this._sessionDisposables.add(this._editor.onDidScrollChange(ae=>{(ae.scrollTopChanged||!ie.isScheduled())&&ie.schedule()})),this._sessionDisposables.add(this._editor.onDidChangeModelContent(ae=>{F?.cancel();const ne=Math.max(ie.delay,1250);ie.schedule(ne)})),this._sessionDisposables.add(this._installDblClickGesture(()=>ie.schedule(0))),this._sessionDisposables.add(this._installLinkGesture()),this._sessionDisposables.add(this._installContextMenu())}_installLinkGesture(){const W=new p.DisposableStore,V=W.add(new o.ClickLinkGesture(this._editor)),K=new p.DisposableStore;return W.add(K),W.add(V.onMouseMoveOrRelevantKeyDown(F=>{const[q]=F,ie=this._getInlayHintLabelPart(q),ae=this._editor.getModel();if(!ie||!ae){K.clear();return}const ne=new E.CancellationTokenSource;K.add((0,p.toDisposable)(()=>ne.dispose(!0))),ie.item.resolve(ne.token),this._activeInlayHintPart=ie.part.command||ie.part.location?new R(ie,q.hasTriggerModifier):void 0;const $=ae.validatePosition(ie.item.hint.position).lineNumber,J=new r.Range($,1,$,ae.getLineMaxColumn($)),Q=this._getInlineHintsForRange(J);this._updateHintsDecorators([J],Q),K.add((0,p.toDisposable)(()=>{this._activeInlayHintPart=void 0,this._updateHintsDecorators([J],Q)}))})),W.add(V.onCancel(()=>K.clear())),W.add(V.onExecute(async F=>{const q=this._getInlayHintLabelPart(F);if(q){const ie=q.part;ie.location?this._instaService.invokeFunction(h.goToDefinitionWithLocation,F,this._editor,ie.location):u.Command.is(ie.command)&&await this._invokeCommand(ie.command,q.item)}})),W}_getInlineHintsForRange(W){const V=new Set;for(const K of this._decorationsMetadata.values())W.containsRange(K.item.anchor.range)&&V.add(K.item);return Array.from(V)}_installDblClickGesture(W){return this._editor.onMouseUp(async V=>{if(V.event.detail!==2)return;const K=this._getInlayHintLabelPart(V);if(K&&(V.event.preventDefault(),await K.item.resolve(E.CancellationToken.None),(0,k.isNonEmptyArray)(K.item.hint.textEdits))){const F=K.item.hint.textEdits.map(q=>t.EditOperation.replace(r.Range.lift(q.range),q.text));this._editor.executeEdits("inlayHint.default",F),W()}})}_installContextMenu(){return this._editor.onContextMenu(async W=>{if(!(W.event.target instanceof HTMLElement))return;const V=this._getInlayHintLabelPart(W);V&&await this._instaService.invokeFunction(h.showGoToContextMenu,this._editor,W.event.target,V)})}_getInlayHintLabelPart(W){var V;if(W.target.type!==6)return;const K=(V=W.target.detail.injectedText)===null||V===void 0?void 0:V.options;if(K instanceof c.ModelDecorationInjectedTextOptions&&K?.attachedData instanceof M)return K.attachedData}async _invokeCommand(W,V){var K;try{await this._commandService.executeCommand(W.id,...(K=W.arguments)!==null&&K!==void 0?K:[])}catch(F){this._notificationService.notify({severity:D.Severity.Error,source:V.provider.displayName,message:F})}}_cacheHintsForFastRestore(W){const V=this._copyInlayHintsWithCurrentAnchor(W);this._inlayHintsCache.set(W,V)}_copyInlayHintsWithCurrentAnchor(W){const V=new Map;for(const[K,F]of this._decorationsMetadata){if(V.has(F.item))continue;const q=W.getDecorationRange(K);if(q){const ie=new g.InlayHintAnchor(q,F.item.anchor.direction),ae=F.item.with({anchor:ie});V.set(F.item,ae)}}return Array.from(V.values())}_getHintsRanges(){const V=this._editor.getModel(),K=this._editor.getVisibleRangesPlusViewportAboveBelow(),F=[];for(const q of K.sort(r.Range.compareRangesUsingStarts)){const ie=V.validateRange(new r.Range(q.startLineNumber-30,q.startColumn,q.endLineNumber+30,q.endColumn));F.length===0||!r.Range.areIntersectingOrTouching(F[F.length-1],ie)?F.push(ie):F[F.length-1]=r.Range.plusRange(F[F.length-1],ie)}return F}_updateHintsDecorators(W,V){var K,F;const q=[],ie=(X,U,G,z,H)=>{const Y={content:G,inlineClassNameAffectsLetterSpacing:!0,inlineClassName:U.className,cursorStops:z,attachedData:H};q.push({item:X,classNameRef:U,decoration:{range:X.anchor.range,options:{description:"InlayHint",showIfCollapsed:X.anchor.range.isEmpty(),collapseOnReplaceEdit:!X.anchor.range.isEmpty(),stickiness:0,[X.anchor.direction]:this._activeRenderMode===0?Y:void 0}}})},ae=(X,U)=>{const G=this._ruleFactory.createClassNameRef({width:`${ne/3|0}px`,display:"inline-block"});ie(X,G,"\u200A",U?f.InjectedTextCursorStops.Right:f.InjectedTextCursorStops.None)},{fontSize:ne,fontFamily:$,padding:J,isUniform:Q}=this._getLayoutInfo(),re="--code-editorInlayHintsFontFamily";this._editor.getContainerDomNode().style.setProperty(re,$);let de={line:0,totalLen:0};for(const X of V){if(de.line!==X.anchor.range.startLineNumber&&(de={line:X.anchor.range.startLineNumber,totalLen:0}),de.totalLen>A._MAX_LABEL_LEN)continue;X.hint.paddingLeft&&ae(X,!1);const U=typeof X.hint.label=="string"?[{label:X.hint.label}]:X.hint.label;for(let G=0;G0&&(Z=Z.slice(0,-le)+"\u2026",ee=!0),ie(X,this._ruleFactory.createClassNameRef(j),O(Z),Y&&!X.hint.paddingRight?f.InjectedTextCursorStops.Right:f.InjectedTextCursorStops.None,new M(X,G)),ee)break}if(X.hint.paddingRight&&ae(X,!0),q.length>A._MAX_DECORATORS)break}const he=[];for(const[X,U]of this._decorationsMetadata){const G=(F=this._editor.getModel())===null||F===void 0?void 0:F.getDecorationRange(X);G&&W.some(z=>z.containsRange(G))&&(he.push(X),U.classNameRef.dispose(),this._decorationsMetadata.delete(X))}const me=i.StableEditorScrollState.capture(this._editor);this._editor.changeDecorations(X=>{const U=X.deltaDecorations(he,q.map(G=>G.decoration));for(let G=0;GK)&&(q=K);const ie=W.fontFamily||F;return{fontSize:q,fontFamily:ie,padding:V,isUniform:!V&&ie===F&&q===K}}_removeAllDecorations(){this._editor.removeDecorations(Array.from(this._decorationsMetadata.keys()));for(const W of this._decorationsMetadata.values())W.classNameRef.dispose();this._decorationsMetadata.clear()}};e.InlayHintsController=x,x.ID="editor.contrib.InlayHints",x._MAX_DECORATORS=1500,x._MAX_LABEL_LEN=43,e.InlayHintsController=x=A=ke([ge(1,s.ILanguageFeaturesService),ge(2,d.ILanguageFeatureDebounceService),ge(3,N),ge(4,m.ICommandService),ge(5,D.INotificationService),ge(6,w.IInstantiationService)],x);function O(B){const W="\xA0";return B.replace(/[ \t]/g,W)}m.CommandsRegistry.registerCommand("_executeInlayHintProvider",async(B,...W)=>{const[V,K]=W;(0,v.assertType)(b.URI.isUri(V)),(0,v.assertType)(r.Range.isIRange(K));const{inlayHintsProvider:F}=B.get(s.ILanguageFeaturesService),q=await B.get(l.ITextModelService).createModelReference(V);try{const ie=await g.InlayHintsFragments.create(F,q.object.textEditorModel,[r.Range.lift(K)],E.CancellationToken.None),ae=ie.items.map(ne=>ne.hint);return setTimeout(()=>ie.dispose(),0),ae}finally{q.dispose()}})}),define(se[917],oe([1,0,14,58,10,38,101,43,68,363,253,387,27,57,18,692,17,333,13]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlayHintsHover=void 0;class d extends S.HoverForeignElementAnchor{constructor(o,g,h,m){super(10,g,o.item.anchor.range,h,m,!0),this.part=o}}let s=class extends b.MarkdownHoverParticipant{constructor(o,g,h,m,C,w){super(o,g,h,m,w),this._resolverService=C,this.hoverOrdinal=6}suggestHoverAnchor(o){var g;if(!a.InlayHintsController.get(this._editor)||o.target.type!==6)return null;const m=(g=o.target.detail.injectedText)===null||g===void 0?void 0:g.options;return m instanceof E.ModelDecorationInjectedTextOptions&&m.attachedData instanceof a.RenderedInlayHintLabelPart?new d(m.attachedData,this,o.event.posx,o.event.posy):null}computeSync(){return[]}computeAsync(o,g,h){return o instanceof d?new L.AsyncIterableObject(async m=>{const{part:C}=o;if(await C.item.resolve(h),h.isCancellationRequested)return;let w;typeof C.item.hint.tooltip=="string"?w=new k.MarkdownString().appendText(C.item.hint.tooltip):C.item.hint.tooltip&&(w=C.item.hint.tooltip),w&&m.emitOne(new b.MarkdownHover(this,o.range,[w],!1,0)),(0,c.isNonEmptyArray)(C.item.hint.textEdits)&&m.emitOne(new b.MarkdownHover(this,o.range,[new k.MarkdownString().appendText((0,r.localize)(0,null))],!1,10001));let D;if(typeof C.part.tooltip=="string"?D=new k.MarkdownString().appendText(C.part.tooltip):C.part.tooltip&&(D=C.part.tooltip),D&&m.emitOne(new b.MarkdownHover(this,o.range,[D],!1,1)),C.part.location||C.part.command){let T;const P=this._editor.getOption(77)==="altKey"?u.isMacintosh?(0,r.localize)(1,null):(0,r.localize)(2,null):u.isMacintosh?(0,r.localize)(3,null):(0,r.localize)(4,null);C.part.location&&C.part.command?T=new k.MarkdownString().appendText((0,r.localize)(5,null,P)):C.part.location?T=new k.MarkdownString().appendText((0,r.localize)(6,null,P)):C.part.command&&(T=new k.MarkdownString(`[${(0,r.localize)(7,null)}](${(0,f.asCommandLink)(C.part.command)} "${C.part.command.title}") (${P})`,{isTrusted:!0})),T&&m.emitOne(new b.MarkdownHover(this,o.range,[T],!1,1e4))}const I=await this._resolveInlayHintLabelPartHover(C,h);for await(const T of I)m.emitOne(T)}):L.AsyncIterableObject.EMPTY}async _resolveInlayHintLabelPartHover(o,g){if(!o.part.location)return L.AsyncIterableObject.EMPTY;const{uri:h,range:m}=o.part.location,C=await this._resolverService.createModelReference(h);try{const w=C.object.textEditorModel;return this._languageFeaturesService.hoverProvider.has(w)?(0,v.getHover)(this._languageFeaturesService.hoverProvider,w,new y.Position(m.startLineNumber,m.startColumn),g).filter(D=>!(0,k.isEmptyMarkdownString)(D.hover.contents)).map(D=>new b.MarkdownHover(this,o.item.anchor.range,D.hover.contents,!1,2+D.ordinal)):L.AsyncIterableObject.EMPTY}finally{C.dispose()}}};e.InlayHintsHover=s,e.InlayHintsHover=s=ke([ge(1,p.ILanguageService),ge(2,n.IOpenerService),ge(3,i.IConfigurationService),ge(4,_.ITextModelService),ge(5,t.ILanguageFeaturesService)],s)}),define(se[918],oe([1,0,16,101,387,917]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),(0,L.registerEditorContribution)(y.InlayHintsController.ID,y.InlayHintsController,1),k.HoverParticipantRegistry.register(E.InlayHintsHover)}),define(se[388],oe([1,0,2,18,908,907,8,59,30,15,21,188,5,252,386,10,19,32,79,7,310,67,261,302]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){"use strict";var h;Object.defineProperty(e,"__esModule",{value:!0}),e.StickyScrollController=void 0;let m=h=class extends L.Disposable{constructor(w,D,I,T,A,P,N){super(),this._editor=w,this._contextMenuService=D,this._languageFeaturesService=I,this._instaService=T,this._contextKeyService=N,this._sessionStore=new L.DisposableStore,this._foldingModel=null,this._maxStickyLines=Number.MAX_SAFE_INTEGER,this._candidateDefinitionsLength=-1,this._focusedStickyElementIndex=-1,this._enabled=!1,this._focused=!1,this._positionRevealed=!1,this._onMouseDown=!1,this._endLineNumbers=[],this._showEndForLine=null,this._stickyScrollWidget=new y.StickyScrollWidget(this._editor),this._stickyLineCandidateProvider=new E.StickyLineCandidateProvider(this._editor,I,A),this._register(this._stickyScrollWidget),this._register(this._stickyLineCandidateProvider),this._widgetState=new y.StickyScrollWidgetState([],[],0),this._readConfiguration();const M=this._stickyScrollWidget.getDomNode();this._register(this._editor.onDidChangeConfiguration(x=>{(x.hasChanged(114)||x.hasChanged(72)||x.hasChanged(66)||x.hasChanged(109))&&this._readConfiguration()})),this._register(d.addDisposableListener(M,d.EventType.CONTEXT_MENU,async x=>{this._onContextMenu(d.getWindow(M),x)})),this._stickyScrollFocusedContextKey=b.EditorContextKeys.stickyScrollFocused.bindTo(this._contextKeyService),this._stickyScrollVisibleContextKey=b.EditorContextKeys.stickyScrollVisible.bindTo(this._contextKeyService);const R=this._register(d.trackFocus(M));this._register(R.onDidBlur(x=>{this._positionRevealed===!1&&M.clientHeight===0?(this._focusedStickyElementIndex=-1,this.focus()):this._disposeFocusStickyScrollStore()})),this._register(R.onDidFocus(x=>{this.focus()})),this._registerMouseListeners(),this._register(d.addDisposableListener(M,d.EventType.MOUSE_DOWN,x=>{this._onMouseDown=!0}))}static get(w){return w.getContribution(h.ID)}_disposeFocusStickyScrollStore(){var w;this._stickyScrollFocusedContextKey.set(!1),(w=this._focusDisposableStore)===null||w===void 0||w.dispose(),this._focused=!1,this._positionRevealed=!1,this._onMouseDown=!1}focus(){if(this._onMouseDown){this._onMouseDown=!1,this._editor.focus();return}this._stickyScrollFocusedContextKey.get()!==!0&&(this._focused=!0,this._focusDisposableStore=new L.DisposableStore,this._stickyScrollFocusedContextKey.set(!0),this._focusedStickyElementIndex=this._stickyScrollWidget.lineNumbers.length-1,this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex))}focusNext(){this._focusedStickyElementIndex0&&this._focusNav(!1)}selectEditor(){this._editor.focus()}_focusNav(w){this._focusedStickyElementIndex=w?this._focusedStickyElementIndex+1:this._focusedStickyElementIndex-1,this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex)}goToFocused(){const w=this._stickyScrollWidget.lineNumbers;this._disposeFocusStickyScrollStore(),this._revealPosition({lineNumber:w[this._focusedStickyElementIndex],column:1})}_revealPosition(w){this._reveaInEditor(w,()=>this._editor.revealPosition(w))}_revealLineInCenterIfOutsideViewport(w){this._reveaInEditor(w,()=>this._editor.revealLineInCenterIfOutsideViewport(w.lineNumber,0))}_reveaInEditor(w,D){this._focused&&this._disposeFocusStickyScrollStore(),this._positionRevealed=!0,D(),this._editor.setSelection(i.Range.fromPositions(w)),this._editor.focus()}_registerMouseListeners(){const w=this._register(new L.DisposableStore),D=this._register(new a.ClickLinkGesture(this._editor,{extractLineNumberFromMouseEvent:A=>{const P=this._stickyScrollWidget.getEditorPositionFromNode(A.target.element);return P?P.lineNumber:0}})),I=A=>{if(!this._editor.hasModel()||A.target.type!==12||A.target.detail!==this._stickyScrollWidget.getId())return null;const P=A.target.element;if(!P||P.innerText!==P.innerHTML)return null;const N=this._stickyScrollWidget.getEditorPositionFromNode(P);return N?{range:new i.Range(N.lineNumber,N.column,N.lineNumber,N.column+P.innerText.length),textElement:P}:null},T=this._stickyScrollWidget.getDomNode();this._register(d.addStandardDisposableListener(T,d.EventType.CLICK,A=>{if(A.ctrlKey||A.altKey||A.metaKey||!A.leftButton)return;if(A.shiftKey){const R=this._stickyScrollWidget.getLineIndexFromChildDomNode(A.target);if(R===null)return;const x=new r.Position(this._endLineNumbers[R],1);this._revealLineInCenterIfOutsideViewport(x);return}if(this._stickyScrollWidget.isInFoldingIconDomNode(A.target)){const R=this._stickyScrollWidget.getLineNumberFromChildDomNode(A.target);this._toggleFoldingRegionForLine(R);return}if(!this._stickyScrollWidget.isInStickyLine(A.target))return;let M=this._stickyScrollWidget.getEditorPositionFromNode(A.target);if(!M){const R=this._stickyScrollWidget.getLineNumberFromChildDomNode(A.target);if(R===null)return;M=new r.Position(R,1)}this._revealPosition(M)})),this._register(d.addStandardDisposableListener(T,d.EventType.MOUSE_MOVE,A=>{if(A.shiftKey){const P=this._stickyScrollWidget.getLineIndexFromChildDomNode(A.target);if(P===null||this._showEndForLine!==null&&this._showEndForLine===P)return;this._showEndForLine=P,this._renderStickyScroll();return}this._showEndForLine!==null&&(this._showEndForLine=null,this._renderStickyScroll())})),this._register(d.addDisposableListener(T,d.EventType.MOUSE_LEAVE,A=>{this._showEndForLine!==null&&(this._showEndForLine=null,this._renderStickyScroll())})),this._register(D.onMouseMoveOrRelevantKeyDown(([A,P])=>{const N=I(A);if(!N||!A.hasTriggerModifier||!this._editor.hasModel()){w.clear();return}const{range:M,textElement:R}=N;if(!M.equalsRange(this._stickyRangeProjectedOnEditor))this._stickyRangeProjectedOnEditor=M,w.clear();else if(R.style.textDecoration==="underline")return;const x=new u.CancellationTokenSource;w.add((0,L.toDisposable)(()=>x.dispose(!0)));let O;(0,n.getDefinitionsAtPosition)(this._languageFeaturesService.definitionProvider,this._editor.getModel(),new r.Position(M.startLineNumber,M.startColumn+1),x.token).then(B=>{if(!x.token.isCancellationRequested)if(B.length!==0){this._candidateDefinitionsLength=B.length;const W=R;O!==W?(w.clear(),O=W,O.style.textDecoration="underline",w.add((0,L.toDisposable)(()=>{O.style.textDecoration="none"}))):O||(O=W,O.style.textDecoration="underline",w.add((0,L.toDisposable)(()=>{O.style.textDecoration="none"})))}else w.clear()})})),this._register(D.onCancel(()=>{w.clear()})),this._register(D.onExecute(async A=>{if(A.target.type!==12||A.target.detail!==this._stickyScrollWidget.getId())return;const P=this._stickyScrollWidget.getEditorPositionFromNode(A.target.element);P&&(!this._editor.hasModel()||!this._stickyRangeProjectedOnEditor||(this._candidateDefinitionsLength>1&&(this._focused&&this._disposeFocusStickyScrollStore(),this._revealPosition({lineNumber:P.lineNumber,column:1})),this._instaService.invokeFunction(t.goToDefinitionWithLocation,A,this._editor,{uri:this._editor.getModel().uri,range:this._stickyRangeProjectedOnEditor})))}))}_onContextMenu(w,D){const I=new l.StandardMouseEvent(w,D);this._contextMenuService.showContextMenu({menuId:_.MenuId.StickyScrollContext,getAnchor:()=>I})}_toggleFoldingRegionForLine(w){if(!this._foldingModel||w===null)return;const D=this._stickyScrollWidget.getRenderedStickyLine(w),I=D?.foldingIcon;if(!I)return;(0,g.toggleCollapseState)(this._foldingModel,Number.MAX_VALUE,[w]),I.isCollapsed=!I.isCollapsed;const T=(I.isCollapsed?this._editor.getTopForLineNumber(I.foldingEndLine):this._editor.getTopForLineNumber(I.foldingStartLine))-this._editor.getOption(66)*D.index+1;this._editor.setScrollTop(T),this._renderStickyScroll(w)}_readConfiguration(){const w=this._editor.getOption(114);if(w.enabled===!1){this._editor.removeOverlayWidget(this._stickyScrollWidget),this._sessionStore.clear(),this._enabled=!1;return}else w.enabled&&!this._enabled&&(this._editor.addOverlayWidget(this._stickyScrollWidget),this._sessionStore.add(this._editor.onDidScrollChange(I=>{I.scrollTopChanged&&(this._showEndForLine=null,this._renderStickyScroll())})),this._sessionStore.add(this._editor.onDidLayoutChange(()=>this._onDidResize())),this._sessionStore.add(this._editor.onDidChangeModelTokens(I=>this._onTokensChange(I))),this._sessionStore.add(this._stickyLineCandidateProvider.onDidChangeStickyScroll(()=>{this._showEndForLine=null,this._renderStickyScroll()})),this._enabled=!0);this._editor.getOption(67).renderType===2&&this._sessionStore.add(this._editor.onDidChangeCursorPosition(()=>{this._showEndForLine=null,this._renderStickyScroll(0)}))}_needsUpdate(w){const D=this._stickyScrollWidget.getCurrentLines();for(const I of D)for(const T of w.ranges)if(I>=T.fromLineNumber&&I<=T.toLineNumber)return!0;return!1}_onTokensChange(w){this._needsUpdate(w)&&this._renderStickyScroll(0)}_onDidResize(){const D=this._editor.getLayoutInfo().height/this._editor.getOption(66);this._maxStickyLines=Math.round(D*.25)}async _renderStickyScroll(w){var D,I;const T=this._editor.getModel();if(!T||T.isTooLargeForTokenization()){this._foldingModel=null,this._stickyScrollWidget.setState(void 0,null);return}const A=this._stickyLineCandidateProvider.getVersionId();if(A===void 0||A===T.getVersionId())if(this._foldingModel=(I=await((D=o.FoldingController.get(this._editor))===null||D===void 0?void 0:D.getFoldingModel()))!==null&&I!==void 0?I:null,this._widgetState=this.findScrollWidgetState(),this._stickyScrollVisibleContextKey.set(this._widgetState.startLineNumbers.length!==0),!this._focused)this._stickyScrollWidget.setState(this._widgetState,this._foldingModel,w);else if(this._focusedStickyElementIndex===-1)this._stickyScrollWidget.setState(this._widgetState,this._foldingModel,w),this._focusedStickyElementIndex=this._stickyScrollWidget.lineNumberCount-1,this._focusedStickyElementIndex!==-1&&this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex);else{const P=this._stickyScrollWidget.lineNumbers[this._focusedStickyElementIndex];this._stickyScrollWidget.setState(this._widgetState,this._foldingModel,w),this._stickyScrollWidget.lineNumberCount===0?this._focusedStickyElementIndex=-1:(this._stickyScrollWidget.lineNumbers.includes(P)||(this._focusedStickyElementIndex=this._stickyScrollWidget.lineNumberCount-1),this._stickyScrollWidget.focusLineWithIndex(this._focusedStickyElementIndex))}}findScrollWidgetState(){const w=this._editor.getOption(66),D=Math.min(this._maxStickyLines,this._editor.getOption(114).maxLineCount),I=this._editor.getScrollTop();let T=0;const A=[],P=[],N=this._editor.getVisibleRanges();if(N.length!==0){const M=new s.StickyRange(N[0].startLineNumber,N[N.length-1].endLineNumber),R=this._stickyLineCandidateProvider.getCandidateStickyLinesIntersecting(M);for(const x of R){const O=x.startLineNumber,B=x.endLineNumber,W=x.nestingDepth;if(B-O>0){const V=(W-1)*w,K=W*w,F=this._editor.getBottomForLineNumber(O)-I,q=this._editor.getTopForLineNumber(B)-I,ie=this._editor.getBottomForLineNumber(B)-I;if(V>q&&V<=ie){A.push(O),P.push(B+1),T=ie-K;break}else K>F&&K<=ie&&(A.push(O),P.push(B+1));if(A.length===D)break}}}return this._endLineNumbers=P,new y.StickyScrollWidgetState(A,P,T,this._showEndForLine)}dispose(){super.dispose(),this._sessionStore.dispose()}};e.StickyScrollController=m,m.ID="store.contrib.stickyScrollController",e.StickyScrollController=m=h=ke([ge(1,p.IContextMenuService),ge(2,k.ILanguageFeaturesService),ge(3,S.IInstantiationService),ge(4,f.ILanguageConfigurationService),ge(5,c.ILanguageFeatureDebounceService),ge(6,v.IContextKeyService)],m)}),define(se[919],oe([1,0,16,715,757,30,27,15,21,388]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SelectEditor=e.GoToStickyScrollLine=e.SelectPreviousStickyScrollLine=e.SelectNextStickyScrollLine=e.FocusStickyScroll=e.ToggleStickyScroll=void 0;class b extends E.Action2{constructor(){super({id:"editor.action.toggleStickyScroll",title:{value:(0,k.localize)(0,null),mnemonicTitle:(0,k.localize)(1,null),original:"Toggle Editor Sticky Scroll"},category:y.Categories.View,toggled:{condition:p.ContextKeyExpr.equals("config.editor.stickyScroll.enabled",!0),title:(0,k.localize)(2,null),mnemonicTitle:(0,k.localize)(3,null)},menu:[{id:E.MenuId.CommandPalette},{id:E.MenuId.MenubarAppearanceMenu,group:"4_editor",order:3},{id:E.MenuId.StickyScrollContext}]})}async run(c){const d=c.get(S.IConfigurationService),s=!d.getValue("editor.stickyScroll.enabled");return d.updateValue("editor.stickyScroll.enabled",s)}}e.ToggleStickyScroll=b;const a=100;class i extends L.EditorAction2{constructor(){super({id:"editor.action.focusStickyScroll",title:{value:(0,k.localize)(4,null),mnemonicTitle:(0,k.localize)(5,null),original:"Focus Sticky Scroll"},precondition:p.ContextKeyExpr.and(p.ContextKeyExpr.has("config.editor.stickyScroll.enabled"),_.EditorContextKeys.stickyScrollVisible),menu:[{id:E.MenuId.CommandPalette}]})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.focus()}}e.FocusStickyScroll=i;class n extends L.EditorAction2{constructor(){super({id:"editor.action.selectNextStickyScrollLine",title:{value:(0,k.localize)(6,null),original:"Select next sticky scroll line"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:18}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.focusNext()}}e.SelectNextStickyScrollLine=n;class t extends L.EditorAction2{constructor(){super({id:"editor.action.selectPreviousStickyScrollLine",title:{value:(0,k.localize)(7,null),original:"Select previous sticky scroll line"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:16}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.focusPrevious()}}e.SelectPreviousStickyScrollLine=t;class r extends L.EditorAction2{constructor(){super({id:"editor.action.goToFocusedStickyScrollLine",title:{value:(0,k.localize)(8,null),original:"Go to focused sticky scroll line"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:3}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.goToFocused()}}e.GoToStickyScrollLine=r;class u extends L.EditorAction2{constructor(){super({id:"editor.action.selectEditor",title:{value:(0,k.localize)(9,null),original:"Select Editor"},precondition:_.EditorContextKeys.stickyScrollFocused.isEqualTo(!0),keybinding:{weight:a,primary:9}})}runEditorCommand(c,d){var s;(s=v.StickyScrollController.get(d))===null||s===void 0||s.selectEditor()}}e.SelectEditor=u}),define(se[920],oe([1,0,16,919,388,30]),function(te,e,L,k,y,E){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),(0,L.registerEditorContribution)(y.StickyScrollController.ID,y.StickyScrollController,1),(0,E.registerAction2)(k.ToggleStickyScroll),(0,E.registerAction2)(k.FocusStickyScroll),(0,E.registerAction2)(k.SelectPreviousStickyScrollLine),(0,E.registerAction2)(k.SelectNextStickyScrollLine),(0,E.registerAction2)(k.GoToStickyScrollLine),(0,E.registerAction2)(k.SelectEditor)}),define(se[921],oe([1,0,16,33,383,27,15,8,50,92]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneReferencesController=void 0;let b=class extends y.ReferencesController{constructor(i,n,t,r,u,f,c){super(!0,i,n,t,r,u,f,c)}};e.StandaloneReferencesController=b,e.StandaloneReferencesController=b=ke([ge(1,S.IContextKeyService),ge(2,k.ICodeEditorService),ge(3,_.INotificationService),ge(4,p.IInstantiationService),ge(5,v.IStorageService),ge(6,E.IConfigurationService)],b),(0,L.registerEditorContribution)(y.ReferencesController.ID,b,4)}),define(se[922],oe([1,0,12,2,47,100,754,162,45,50,193]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.UndoRedoService=void 0;const a=!1;function i(g){return g.scheme===y.Schemas.file?g.fsPath:g.path}let n=0;class t{constructor(h,m,C,w,D,I,T){this.id=++n,this.type=0,this.actual=h,this.label=h.label,this.confirmBeforeUndo=h.confirmBeforeUndo||!1,this.resourceLabel=m,this.strResource=C,this.resourceLabels=[this.resourceLabel],this.strResources=[this.strResource],this.groupId=w,this.groupOrder=D,this.sourceId=I,this.sourceOrder=T,this.isValid=!0}setValid(h){this.isValid=h}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.isValid?" VALID":"INVALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class r{constructor(h,m){this.resourceLabel=h,this.reason=m}}class u{constructor(){this.elements=new Map}createMessage(){const h=[],m=[];for(const[,w]of this.elements)(w.reason===0?h:m).push(w.resourceLabel);const C=[];return h.length>0&&C.push(S.localize(0,null,h.join(", "))),m.length>0&&C.push(S.localize(1,null,m.join(", "))),C.join(` `)}get size(){return this.elements.size}has(h){return this.elements.has(h)}set(h,m){this.elements.set(h,m)}delete(h){return this.elements.delete(h)}}class f{constructor(h,m,C,w,D,I,T){this.id=++n,this.type=1,this.actual=h,this.label=h.label,this.confirmBeforeUndo=h.confirmBeforeUndo||!1,this.resourceLabels=m,this.strResources=C,this.groupId=w,this.groupOrder=D,this.sourceId=I,this.sourceOrder=T,this.removedResources=null,this.invalidatedResources=null}canSplit(){return typeof this.actual.split=="function"}removeResource(h,m,C){this.removedResources||(this.removedResources=new u),this.removedResources.has(m)||this.removedResources.set(m,new r(h,C))}setValid(h,m,C){C?this.invalidatedResources&&(this.invalidatedResources.delete(m),this.invalidatedResources.size===0&&(this.invalidatedResources=null)):(this.invalidatedResources||(this.invalidatedResources=new u),this.invalidatedResources.has(m)||this.invalidatedResources.set(m,new r(h,0)))}toString(){return`[id:${this.id}] [group:${this.groupId}] [${this.invalidatedResources?"INVALID":" VALID"}] ${this.actual.constructor.name} - ${this.actual}`}}class c{constructor(h,m){this.resourceLabel=h,this.strResource=m,this._past=[],this._future=[],this.locked=!1,this.versionId=1}dispose(){for(const h of this._past)h.type===1&&h.removeResource(this.resourceLabel,this.strResource,0);for(const h of this._future)h.type===1&&h.removeResource(this.resourceLabel,this.strResource,0);this.versionId++}toString(){const h=[];h.push(`* ${this.strResource}:`);for(let m=0;m=0;m--)h.push(` * [REDO] ${this._future[m]}`);return h.join(` `)}flushAllElements(){this._past=[],this._future=[],this.versionId++}_setElementValidFlag(h,m){h.type===1?h.setValid(this.resourceLabel,this.strResource,m):h.setValid(m)}setElementsValidFlag(h,m){for(const C of this._past)m(C.actual)&&this._setElementValidFlag(C,h);for(const C of this._future)m(C.actual)&&this._setElementValidFlag(C,h)}pushElement(h){for(const m of this._future)m.type===1&&m.removeResource(this.resourceLabel,this.strResource,1);this._future=[],this._past.push(h),this.versionId++}createSnapshot(h){const m=[];for(let C=0,w=this._past.length;C=0;C--)m.push(this._future[C].id);return new b.ResourceEditStackSnapshot(h,m)}restoreSnapshot(h){const m=h.elements.length;let C=!0,w=0,D=-1;for(let T=0,A=this._past.length;T=m||P.id!==h.elements[w])&&(C=!1,D=0),!C&&P.type===1&&P.removeResource(this.resourceLabel,this.strResource,0)}let I=-1;for(let T=this._future.length-1;T>=0;T--,w++){const A=this._future[T];C&&(w>=m||A.id!==h.elements[w])&&(C=!1,I=T),!C&&A.type===1&&A.removeResource(this.resourceLabel,this.strResource,0)}D!==-1&&(this._past=this._past.slice(0,D)),I!==-1&&(this._future=this._future.slice(I+1)),this.versionId++}getElements(){const h=[],m=[];for(const C of this._past)h.push(C.actual);for(const C of this._future)m.push(C.actual);return{past:h,future:m}}getClosestPastElement(){return this._past.length===0?null:this._past[this._past.length-1]}getSecondClosestPastElement(){return this._past.length<2?null:this._past[this._past.length-2]}getClosestFutureElement(){return this._future.length===0?null:this._future[this._future.length-1]}hasPastElements(){return this._past.length>0}hasFutureElements(){return this._future.length>0}splitPastWorkspaceElement(h,m){for(let C=this._past.length-1;C>=0;C--)if(this._past[C]===h){m.has(this.strResource)?this._past[C]=m.get(this.strResource):this._past.splice(C,1);break}this.versionId++}splitFutureWorkspaceElement(h,m){for(let C=this._future.length-1;C>=0;C--)if(this._future[C]===h){m.has(this.strResource)?this._future[C]=m.get(this.strResource):this._future.splice(C,1);break}this.versionId++}moveBackward(h){this._past.pop(),this._future.push(h),this.versionId++}moveForward(h){this._future.pop(),this._past.push(h),this.versionId++}}class d{constructor(h){this.editStacks=h,this._versionIds=[];for(let m=0,C=this.editStacks.length;mm.sourceOrder)&&(m=I,C=w)}return[m,C]}canUndo(h){if(h instanceof b.UndoRedoSource){const[,C]=this._findClosestUndoElementWithSource(h.id);return!!C}const m=this.getUriComparisonKey(h);return this._editStacks.has(m)?this._editStacks.get(m).hasPastElements():!1}_onError(h,m){(0,L.onUnexpectedError)(h);for(const C of m.strResources)this.removeElements(C);this._notificationService.error(h)}_acquireLocks(h){for(const m of h.editStacks)if(m.locked)throw new Error("Cannot acquire edit stack lock");for(const m of h.editStacks)m.locked=!0;return()=>{for(const m of h.editStacks)m.locked=!1}}_safeInvokeWithLocks(h,m,C,w,D){const I=this._acquireLocks(C);let T;try{T=m()}catch(A){return I(),w.dispose(),this._onError(A,h)}return T?T.then(()=>(I(),w.dispose(),D()),A=>(I(),w.dispose(),this._onError(A,h))):(I(),w.dispose(),D())}async _invokeWorkspacePrepare(h){if(typeof h.actual.prepareUndoRedo>"u")return k.Disposable.None;const m=h.actual.prepareUndoRedo();return typeof m>"u"?k.Disposable.None:m}_invokeResourcePrepare(h,m){if(h.actual.type!==1||typeof h.actual.prepareUndoRedo>"u")return m(k.Disposable.None);const C=h.actual.prepareUndoRedo();return C?(0,k.isDisposable)(C)?m(C):C.then(w=>m(w)):m(k.Disposable.None)}_getAffectedEditStacks(h){const m=[];for(const C of h.strResources)m.push(this._editStacks.get(C)||s);return new d(m)}_tryToSplitAndUndo(h,m,C,w){if(m.canSplit())return this._splitPastWorkspaceElement(m,C),this._notificationService.warn(w),new o(this._undo(h,0,!0));for(const D of m.strResources)this.removeElements(D);return this._notificationService.warn(w),new o}_checkWorkspaceUndo(h,m,C,w){if(m.removedResources)return this._tryToSplitAndUndo(h,m,m.removedResources,S.localize(2,null,m.label,m.removedResources.createMessage()));if(w&&m.invalidatedResources)return this._tryToSplitAndUndo(h,m,m.invalidatedResources,S.localize(3,null,m.label,m.invalidatedResources.createMessage()));const D=[];for(const T of C.editStacks)T.getClosestPastElement()!==m&&D.push(T.resourceLabel);if(D.length>0)return this._tryToSplitAndUndo(h,m,null,S.localize(4,null,m.label,D.join(", ")));const I=[];for(const T of C.editStacks)T.locked&&I.push(T.resourceLabel);return I.length>0?this._tryToSplitAndUndo(h,m,null,S.localize(5,null,m.label,I.join(", "))):C.isValid()?null:this._tryToSplitAndUndo(h,m,null,S.localize(6,null,m.label))}_workspaceUndo(h,m,C){const w=this._getAffectedEditStacks(m),D=this._checkWorkspaceUndo(h,m,w,!1);return D?D.returnValue:this._confirmAndExecuteWorkspaceUndo(h,m,w,C)}_isPartOfUndoGroup(h){if(!h.groupId)return!1;for(const[,m]of this._editStacks){const C=m.getClosestPastElement();if(C){if(C===h){const w=m.getSecondClosestPastElement();if(w&&w.groupId===h.groupId)return!0}if(C.groupId===h.groupId)return!0}}return!1}async _confirmAndExecuteWorkspaceUndo(h,m,C,w){if(m.canSplit()&&!this._isPartOfUndoGroup(m)){let T;(function(N){N[N.All=0]="All",N[N.This=1]="This",N[N.Cancel=2]="Cancel"})(T||(T={}));const{result:A}=await this._dialogService.prompt({type:E.default.Info,message:S.localize(7,null,m.label),buttons:[{label:S.localize(8,null,C.editStacks.length),run:()=>T.All},{label:S.localize(9,null),run:()=>T.This}],cancelButton:{run:()=>T.Cancel}});if(A===T.Cancel)return;if(A===T.This)return this._splitPastWorkspaceElement(m,null),this._undo(h,0,!0);const P=this._checkWorkspaceUndo(h,m,C,!1);if(P)return P.returnValue;w=!0}let D;try{D=await this._invokeWorkspacePrepare(m)}catch(T){return this._onError(T,m)}const I=this._checkWorkspaceUndo(h,m,C,!0);if(I)return D.dispose(),I.returnValue;for(const T of C.editStacks)T.moveBackward(m);return this._safeInvokeWithLocks(m,()=>m.actual.undo(),C,D,()=>this._continueUndoInGroup(m.groupId,w))}_resourceUndo(h,m,C){if(!m.isValid){h.flushAllElements();return}if(h.locked){const w=S.localize(10,null,m.label);this._notificationService.warn(w);return}return this._invokeResourcePrepare(m,w=>(h.moveBackward(m),this._safeInvokeWithLocks(m,()=>m.actual.undo(),new d([h]),w,()=>this._continueUndoInGroup(m.groupId,C))))}_findClosestUndoElementInGroup(h){if(!h)return[null,null];let m=null,C=null;for(const[w,D]of this._editStacks){const I=D.getClosestPastElement();I&&I.groupId===h&&(!m||I.groupOrder>m.groupOrder)&&(m=I,C=w)}return[m,C]}_continueUndoInGroup(h,m){if(!h)return;const[,C]=this._findClosestUndoElementInGroup(h);if(C)return this._undo(C,0,m)}undo(h){if(h instanceof b.UndoRedoSource){const[,m]=this._findClosestUndoElementWithSource(h.id);return m?this._undo(m,h.id,!1):void 0}return typeof h=="string"?this._undo(h,0,!1):this._undo(this.getUriComparisonKey(h),0,!1)}_undo(h,m=0,C){if(!this._editStacks.has(h))return;const w=this._editStacks.get(h),D=w.getClosestPastElement();if(!D)return;if(D.groupId){const[T,A]=this._findClosestUndoElementInGroup(D.groupId);if(D!==T&&A)return this._undo(A,m,C)}if((D.sourceId!==m||D.confirmBeforeUndo)&&!C)return this._confirmAndContinueUndo(h,m,D);try{return D.type===1?this._workspaceUndo(h,D,C):this._resourceUndo(w,D,C)}finally{a&&this._print("undo")}}async _confirmAndContinueUndo(h,m,C){if((await this._dialogService.confirm({message:S.localize(11,null,C.label),primaryButton:S.localize(12,null),cancelButton:S.localize(13,null)})).confirmed)return this._undo(h,m,!0)}_findClosestRedoElementWithSource(h){if(!h)return[null,null];let m=null,C=null;for(const[w,D]of this._editStacks){const I=D.getClosestFutureElement();I&&I.sourceId===h&&(!m||I.sourceOrder0)return this._tryToSplitAndRedo(h,m,null,S.localize(16,null,m.label,D.join(", ")));const I=[];for(const T of C.editStacks)T.locked&&I.push(T.resourceLabel);return I.length>0?this._tryToSplitAndRedo(h,m,null,S.localize(17,null,m.label,I.join(", "))):C.isValid()?null:this._tryToSplitAndRedo(h,m,null,S.localize(18,null,m.label))}_workspaceRedo(h,m){const C=this._getAffectedEditStacks(m),w=this._checkWorkspaceRedo(h,m,C,!1);return w?w.returnValue:this._executeWorkspaceRedo(h,m,C)}async _executeWorkspaceRedo(h,m,C){let w;try{w=await this._invokeWorkspacePrepare(m)}catch(I){return this._onError(I,m)}const D=this._checkWorkspaceRedo(h,m,C,!0);if(D)return w.dispose(),D.returnValue;for(const I of C.editStacks)I.moveForward(m);return this._safeInvokeWithLocks(m,()=>m.actual.redo(),C,w,()=>this._continueRedoInGroup(m.groupId))}_resourceRedo(h,m){if(!m.isValid){h.flushAllElements();return}if(h.locked){const C=S.localize(19,null,m.label);this._notificationService.warn(C);return}return this._invokeResourcePrepare(m,C=>(h.moveForward(m),this._safeInvokeWithLocks(m,()=>m.actual.redo(),new d([h]),C,()=>this._continueRedoInGroup(m.groupId))))}_findClosestRedoElementInGroup(h){if(!h)return[null,null];let m=null,C=null;for(const[w,D]of this._editStacks){const I=D.getClosestFutureElement();I&&I.groupId===h&&(!m||I.groupOrder"u")return typeof t=="string"?{id:(0,k.basename)(t)}:r?e.EXTENSION_DEVELOPMENT_EMPTY_WINDOW_WORKSPACE:e.UNKNOWN_EMPTY_WINDOW_WORKSPACE;const u=t;return u.configuration?{id:u.id,configPath:u.configuration}:u.folders.length===1?{id:u.id,uri:u.folders[0].uri}:{id:u.id}}e.toWorkspaceIdentifier=v;function b(t){const r=t;return typeof r?.id=="string"&&E.URI.isUri(r.configPath)}e.isWorkspaceIdentifier=b;class a{constructor(r,u,f,c,d){this._id=r,this._transient=f,this._configuration=c,this._ignorePathCasing=d,this._foldersMap=y.TernarySearchTree.forUris(this._ignorePathCasing,()=>!0),this.folders=u}get folders(){return this._folders}set folders(r){this._folders=r,this.updateFoldersMap()}get id(){return this._id}get transient(){return this._transient}get configuration(){return this._configuration}set configuration(r){this._configuration=r}getFolder(r){return r&&this._foldersMap.findSubstr(r)||null}updateFoldersMap(){this._foldersMap=y.TernarySearchTree.forUris(this._ignorePathCasing,()=>!0);for(const r of this.folders)this._foldersMap.set(r.uri,r)}toJSON(){return{id:this.id,folders:this.folders,transient:this.transient,configuration:this.configuration}}}e.Workspace=a;class i{constructor(r,u){this.raw=u,this.uri=r.uri,this.index=r.index,this.name=r.name}toJSON(){return{uri:this.uri,name:this.name,index:this.index}}}e.WorkspaceFolder=i,e.WORKSPACE_EXTENSION="code-workspace",e.WORKSPACE_FILTER=[{name:(0,L.localize)(0,null),extensions:[e.WORKSPACE_EXTENSION]}],e.STANDALONE_EDITOR_WORKSPACE_ID="4064f6ec-cb38-4ad0-af64-ee6467e63c82";function n(t){return t.id===e.STANDALONE_EDITOR_WORKSPACE_ID}e.isStandaloneEditorWorkspace=n}),define(se[923],oe([1,0,7,135,42,2,17,16,21,664,30,15,59,34,27,169]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";var u;Object.defineProperty(e,"__esModule",{value:!0}),e.ContextMenuController=void 0;let f=u=class{static get(s){return s.getContribution(u.ID)}constructor(s,l,o,g,h,m,C,w){this._contextMenuService=l,this._contextViewService=o,this._contextKeyService=g,this._keybindingService=h,this._menuService=m,this._configurationService=C,this._workspaceContextService=w,this._toDispose=new E.DisposableStore,this._contextMenuIsBeingShownCount=0,this._editor=s,this._toDispose.add(this._editor.onContextMenu(D=>this._onContextMenu(D))),this._toDispose.add(this._editor.onMouseWheel(D=>{if(this._contextMenuIsBeingShownCount>0){const I=this._contextViewService.getContextViewElement(),T=D.srcElement;T.shadowRoot&&L.getShadowRoot(I)===T.shadowRoot||this._contextViewService.hideContextView()}})),this._toDispose.add(this._editor.onKeyDown(D=>{this._editor.getOption(24)&&D.keyCode===58&&(D.preventDefault(),D.stopPropagation(),this.showContextMenu())}))}_onContextMenu(s){if(!this._editor.hasModel())return;if(!this._editor.getOption(24)){this._editor.focus(),s.target.position&&!this._editor.getSelection().containsPosition(s.target.position)&&this._editor.setPosition(s.target.position);return}if(s.target.type===12||s.target.type===6&&s.target.detail.injectedText)return;if(s.event.preventDefault(),s.event.stopPropagation(),s.target.type===11)return this._showScrollbarContextMenu(s.event);if(s.target.type!==6&&s.target.type!==7&&s.target.type!==1)return;if(this._editor.focus(),s.target.position){let o=!1;for(const g of this._editor.getSelections())if(g.containsPosition(s.target.position)){o=!0;break}o||this._editor.setPosition(s.target.position)}let l=null;s.target.type!==1&&(l=s.event),this.showContextMenu(l)}showContextMenu(s){if(!this._editor.getOption(24)||!this._editor.hasModel())return;const l=this._getMenuActions(this._editor.getModel(),this._editor.isSimpleWidget?b.MenuId.SimpleEditorContext:b.MenuId.EditorContext);l.length>0&&this._doShowContextMenu(l,s)}_getMenuActions(s,l){const o=[],g=this._menuService.createMenu(l,this._contextKeyService),h=g.getActions({arg:s.uri});g.dispose();for(const m of h){const[,C]=m;let w=0;for(const D of C)if(D instanceof b.SubmenuItemAction){const I=this._getMenuActions(s,D.item.submenu);I.length>0&&(o.push(new y.SubmenuAction(D.id,D.label,I)),w++)}else o.push(D),w++;w&&o.push(new y.Separator)}return o.length&&o.pop(),o}_doShowContextMenu(s,l=null){if(!this._editor.hasModel())return;const o=this._editor.getOption(60);this._editor.updateOptions({hover:{enabled:!1}});let g=l;if(!g){this._editor.revealPosition(this._editor.getPosition(),1),this._editor.render();const m=this._editor.getScrolledVisiblePosition(this._editor.getPosition()),C=L.getDomNodePagePosition(this._editor.getDomNode()),w=C.left+m.left,D=C.top+m.top+m.height;g={x:w,y:D}}const h=this._editor.getOption(126)&&!S.isIOS;this._contextMenuIsBeingShownCount++,this._contextMenuService.showContextMenu({domForShadowRoot:h?this._editor.getDomNode():void 0,getAnchor:()=>g,getActions:()=>s,getActionViewItem:m=>{const C=this._keybindingFor(m);if(C)return new k.ActionViewItem(m,m,{label:!0,keybinding:C.getLabel(),isMenu:!0});const w=m;return typeof w.getActionViewItem=="function"?w.getActionViewItem():new k.ActionViewItem(m,m,{icon:!0,label:!0,isMenu:!0})},getKeyBinding:m=>this._keybindingFor(m),onHide:m=>{this._contextMenuIsBeingShownCount--,this._editor.updateOptions({hover:o})}})}_showScrollbarContextMenu(s){if(!this._editor.hasModel()||(0,r.isStandaloneEditorWorkspace)(this._workspaceContextService.getWorkspace()))return;const l=this._editor.getOption(72);let o=0;const g=D=>({id:`menu-action-${++o}`,label:D.label,tooltip:"",class:void 0,enabled:typeof D.enabled>"u"?!0:D.enabled,checked:D.checked,run:D.run}),h=(D,I)=>new y.SubmenuAction(`menu-action-${++o}`,D,I,void 0),m=(D,I,T,A,P)=>{if(!I)return g({label:D,enabled:I,run:()=>{}});const N=R=>()=>{this._configurationService.updateValue(T,R)},M=[];for(const R of P)M.push(g({label:R.label,checked:A===R.value,run:N(R.value)}));return h(D,M)},C=[];C.push(g({label:v.localize(0,null),checked:l.enabled,run:()=>{this._configurationService.updateValue("editor.minimap.enabled",!l.enabled)}})),C.push(new y.Separator),C.push(g({label:v.localize(1,null),enabled:l.enabled,checked:l.renderCharacters,run:()=>{this._configurationService.updateValue("editor.minimap.renderCharacters",!l.renderCharacters)}})),C.push(m(v.localize(2,null),l.enabled,"editor.minimap.size",l.size,[{label:v.localize(3,null),value:"proportional"},{label:v.localize(4,null),value:"fill"},{label:v.localize(5,null),value:"fit"}])),C.push(m(v.localize(6,null),l.enabled,"editor.minimap.showSlider",l.showSlider,[{label:v.localize(7,null),value:"mouseover"},{label:v.localize(8,null),value:"always"}]));const w=this._editor.getOption(126)&&!S.isIOS;this._contextMenuIsBeingShownCount++,this._contextMenuService.showContextMenu({domForShadowRoot:w?this._editor.getDomNode():void 0,getAnchor:()=>s,getActions:()=>C,onHide:D=>{this._contextMenuIsBeingShownCount--,this._editor.focus()}})}_keybindingFor(s){return this._keybindingService.lookupKeybinding(s.id)}dispose(){this._contextMenuIsBeingShownCount>0&&this._contextViewService.hideContextView(),this._toDispose.dispose()}};e.ContextMenuController=f,f.ID="editor.contrib.contextmenu",e.ContextMenuController=f=u=ke([ge(1,i.IContextMenuService),ge(2,i.IContextViewService),ge(3,a.IContextKeyService),ge(4,n.IKeybindingService),ge(5,b.IMenuService),ge(6,t.IConfigurationService),ge(7,r.IWorkspaceContextService)],f);class c extends p.EditorAction{constructor(){super({id:"editor.action.showContextMenu",label:v.localize(9,null),alias:"Show Editor Context Menu",precondition:void 0,kbOpts:{kbExpr:_.EditorContextKeys.textInputFocus,primary:1092,weight:100}})}run(s,l){var o;(o=f.get(l))===null||o===void 0||o.showContextMenu()}}(0,p.registerEditorContribution)(f.ID,f,2),(0,p.registerEditorAction)(c)}),define(se[389],oe([1,0,13,176,2,109,47,49,22,18,668,169]),function(te,e,L,k,y,E,S,p,_,v,b,a){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.DefaultPasteProvidersFeature=e.DefaultDropProvidersFeature=void 0;const i=(0,b.localize)(0,null);class n{async provideDocumentPasteEdits(o,g,h,m,C){const w=await this.getEdit(h,C);return w?{insertText:w.insertText,label:w.label,detail:w.detail,handledMimeType:w.handledMimeType,yieldTo:w.yieldTo}:void 0}async provideDocumentOnDropEdits(o,g,h,m){const C=await this.getEdit(h,m);return C?{insertText:C.insertText,label:C.label,handledMimeType:C.handledMimeType,yieldTo:C.yieldTo}:void 0}}class t extends n{constructor(){super(...arguments),this.id="text",this.dropMimeTypes=[E.Mimes.text],this.pasteMimeTypes=[E.Mimes.text]}async getEdit(o,g){const h=o.get(E.Mimes.text);if(!h||o.has(E.Mimes.uriList))return;const m=await h.asString();return{handledMimeType:E.Mimes.text,label:(0,b.localize)(1,null),detail:i,insertText:m}}}class r extends n{constructor(){super(...arguments),this.id="uri",this.dropMimeTypes=[E.Mimes.uriList],this.pasteMimeTypes=[E.Mimes.uriList]}async getEdit(o,g){const h=await c(o);if(!h.length||g.isCancellationRequested)return;let m=0;const C=h.map(({uri:D,originalText:I})=>D.scheme===S.Schemas.file?D.fsPath:(m++,I)).join(" ");let w;return m>0?w=h.length>1?(0,b.localize)(2,null):(0,b.localize)(3,null):w=h.length>1?(0,b.localize)(4,null):(0,b.localize)(5,null),{handledMimeType:E.Mimes.uriList,insertText:C,label:w,detail:i}}}let u=class extends n{constructor(o){super(),this._workspaceContextService=o,this.id="relativePath",this.dropMimeTypes=[E.Mimes.uriList],this.pasteMimeTypes=[E.Mimes.uriList]}async getEdit(o,g){const h=await c(o);if(!h.length||g.isCancellationRequested)return;const m=(0,L.coalesce)(h.map(({uri:C})=>{const w=this._workspaceContextService.getWorkspaceFolder(C);return w?(0,p.relativePath)(w.uri,C):void 0}));if(m.length)return{handledMimeType:E.Mimes.uriList,insertText:m.join(" "),label:h.length>1?(0,b.localize)(6,null):(0,b.localize)(7,null),detail:i}}};u=ke([ge(0,a.IWorkspaceContextService)],u);class f{constructor(){this.id="html",this.pasteMimeTypes=["text/html"],this._yieldTo=[{mimeType:E.Mimes.text}]}async provideDocumentPasteEdits(o,g,h,m,C){if(m.trigger!=="explicit"&&m.only!==this.id)return;const w=h.get("text/html"),D=await w?.asString();if(!(!D||C.isCancellationRequested))return{insertText:D,yieldTo:this._yieldTo,label:(0,b.localize)(8,null),detail:i}}}async function c(l){const o=l.get(E.Mimes.uriList);if(!o)return[];const g=await o.asString(),h=[];for(const m of k.UriList.parse(g))try{h.push({uri:_.URI.parse(m),originalText:m})}catch{}return h}let d=class extends y.Disposable{constructor(o,g){super(),this._register(o.documentOnDropEditProvider.register("*",new t)),this._register(o.documentOnDropEditProvider.register("*",new r)),this._register(o.documentOnDropEditProvider.register("*",new u(g)))}};e.DefaultDropProvidersFeature=d,e.DefaultDropProvidersFeature=d=ke([ge(0,v.ILanguageFeaturesService),ge(1,a.IWorkspaceContextService)],d);let s=class extends y.Disposable{constructor(o,g){super(),this._register(o.documentPasteEditProvider.register("*",new t)),this._register(o.documentPasteEditProvider.register("*",new r)),this._register(o.documentPasteEditProvider.register("*",new u(g))),this._register(o.documentPasteEditProvider.register("*",new f))}};e.DefaultPasteProvidersFeature=s,e.DefaultPasteProvidersFeature=s=ke([ge(0,v.ILanguageFeaturesService),ge(1,a.IWorkspaceContextService)],s)}),define(se[924],oe([1,0,16,21,131,380,389,666]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),(0,L.registerEditorContribution)(E.CopyPasteController.ID,E.CopyPasteController,0),(0,y.registerEditorFeature)(S.DefaultPasteProvidersFeature),(0,L.registerEditorCommand)(new class extends L.EditorCommand{constructor(){super({id:E.changePasteTypeCommandId,precondition:E.pasteWidgetVisibleCtx,kbOpts:{weight:100,primary:2137}})}runEditorCommand(_,v,b){var a;return(a=E.CopyPasteController.get(v))===null||a===void 0?void 0:a.changePasteType()}}),(0,L.registerEditorAction)(class extends L.EditorAction{constructor(){super({id:"editor.action.pasteAs",label:p.localize(0,null),alias:"Paste As...",precondition:k.EditorContextKeys.writable,metadata:{description:"Paste as",args:[{name:"args",schema:{type:"object",properties:{id:{type:"string",description:p.localize(1,null)}}}}]}})}run(_,v,b){var a;const i=typeof b?.id=="string"?b.id:void 0;return(a=E.CopyPasteController.get(v))===null||a===void 0?void 0:a.pasteAs(i)}}),(0,L.registerEditorAction)(class extends L.EditorAction{constructor(){super({id:"editor.action.pasteAsText",label:p.localize(2,null),alias:"Paste as Text",precondition:k.EditorContextKeys.writable})}run(_,v,b){var a;return(a=E.CopyPasteController.get(v))===null||a===void 0?void 0:a.pasteAs("text")}})}),define(se[925],oe([1,0,16,246,131,389,669,98,37,903]),function(te,e,L,k,y,E,S,p,_,v){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),(0,L.registerEditorContribution)(v.DropIntoEditorController.ID,v.DropIntoEditorController,2),(0,L.registerEditorCommand)(new class extends L.EditorCommand{constructor(){super({id:v.changeDropTypeCommandId,precondition:v.dropWidgetVisibleCtx,kbOpts:{weight:100,primary:2137}})}runEditorCommand(b,a,i){var n;(n=v.DropIntoEditorController.get(a))===null||n===void 0||n.changeDropType()}}),(0,y.registerEditorFeature)(E.DefaultDropProvidersFeature),_.Registry.as(p.Extensions.Configuration).registerConfiguration({...k.editorConfigurationBaseNode,properties:{[v.defaultProviderConfig]:{type:"object",scope:5,description:S.localize(0,null),default:{},additionalProperties:{type:"string"}}}})}),define(se[926],oe([1,0,587,95,49,11,175,32,117,714,169]),function(te,e,L,k,y,E,S,p,_,v,b){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.RandomBasedVariableResolver=e.WorkspaceBasedVariableResolver=e.TimeBasedVariableResolver=e.CommentBasedVariableResolver=e.ClipboardBasedVariableResolver=e.ModelBasedVariableResolver=e.SelectionBasedVariableResolver=e.CompositeSnippetVariableResolver=e.KnownSnippetVariableNames=void 0,e.KnownSnippetVariableNames=Object.freeze({CURRENT_YEAR:!0,CURRENT_YEAR_SHORT:!0,CURRENT_MONTH:!0,CURRENT_DATE:!0,CURRENT_HOUR:!0,CURRENT_MINUTE:!0,CURRENT_SECOND:!0,CURRENT_DAY_NAME:!0,CURRENT_DAY_NAME_SHORT:!0,CURRENT_MONTH_NAME:!0,CURRENT_MONTH_NAME_SHORT:!0,CURRENT_SECONDS_UNIX:!0,CURRENT_TIMEZONE_OFFSET:!0,SELECTION:!0,CLIPBOARD:!0,TM_SELECTED_TEXT:!0,TM_CURRENT_LINE:!0,TM_CURRENT_WORD:!0,TM_LINE_INDEX:!0,TM_LINE_NUMBER:!0,TM_FILENAME:!0,TM_FILENAME_BASE:!0,TM_DIRECTORY:!0,TM_FILEPATH:!0,CURSOR_INDEX:!0,CURSOR_NUMBER:!0,RELATIVE_FILEPATH:!0,BLOCK_COMMENT_START:!0,BLOCK_COMMENT_END:!0,LINE_COMMENT:!0,WORKSPACE_NAME:!0,WORKSPACE_FOLDER:!0,RANDOM:!0,RANDOM_HEX:!0,UUID:!0});class a{constructor(s){this._delegates=s}resolve(s){for(const l of this._delegates){const o=l.resolve(s);if(o!==void 0)return o}}}e.CompositeSnippetVariableResolver=a;class i{constructor(s,l,o,g){this._model=s,this._selection=l,this._selectionIdx=o,this._overtypingCapturer=g}resolve(s){const{name:l}=s;if(l==="SELECTION"||l==="TM_SELECTED_TEXT"){let o=this._model.getValueInRange(this._selection)||void 0,g=this._selection.startLineNumber!==this._selection.endLineNumber;if(!o&&this._overtypingCapturer){const h=this._overtypingCapturer.getLastOvertypedInfo(this._selectionIdx);h&&(o=h.value,g=h.multiline)}if(o&&g&&s.snippet){const h=this._model.getLineContent(this._selection.startLineNumber),m=(0,E.getLeadingWhitespace)(h,0,this._selection.startColumn-1);let C=m;s.snippet.walk(D=>D===s?!1:(D instanceof _.Text&&(C=(0,E.getLeadingWhitespace)((0,E.splitLines)(D.value).pop())),!0));const w=(0,E.commonPrefixLength)(C,m);o=o.replace(/(\r\n|\r|\n)(.*)/g,(D,I,T)=>`${I}${C.substr(w)}${T}`)}return o}else{if(l==="TM_CURRENT_LINE")return this._model.getLineContent(this._selection.positionLineNumber);if(l==="TM_CURRENT_WORD"){const o=this._model.getWordAtPosition({lineNumber:this._selection.positionLineNumber,column:this._selection.positionColumn});return o&&o.word||void 0}else{if(l==="TM_LINE_INDEX")return String(this._selection.positionLineNumber-1);if(l==="TM_LINE_NUMBER")return String(this._selection.positionLineNumber);if(l==="CURSOR_INDEX")return String(this._selectionIdx);if(l==="CURSOR_NUMBER")return String(this._selectionIdx+1)}}}}e.SelectionBasedVariableResolver=i;class n{constructor(s,l){this._labelService=s,this._model=l}resolve(s){const{name:l}=s;if(l==="TM_FILENAME")return k.basename(this._model.uri.fsPath);if(l==="TM_FILENAME_BASE"){const o=k.basename(this._model.uri.fsPath),g=o.lastIndexOf(".");return g<=0?o:o.slice(0,g)}else{if(l==="TM_DIRECTORY")return k.dirname(this._model.uri.fsPath)==="."?"":this._labelService.getUriLabel((0,y.dirname)(this._model.uri));if(l==="TM_FILEPATH")return this._labelService.getUriLabel(this._model.uri);if(l==="RELATIVE_FILEPATH")return this._labelService.getUriLabel(this._model.uri,{relative:!0,noPrefix:!0})}}}e.ModelBasedVariableResolver=n;class t{constructor(s,l,o,g){this._readClipboardText=s,this._selectionIdx=l,this._selectionCount=o,this._spread=g}resolve(s){if(s.name!=="CLIPBOARD")return;const l=this._readClipboardText();if(l){if(this._spread){const o=l.split(/\r\n|\n|\r/).filter(g=>!(0,E.isFalsyOrWhitespace)(g));if(o.length===this._selectionCount)return o[this._selectionIdx]}return l}}}e.ClipboardBasedVariableResolver=t;let r=class{constructor(s,l,o){this._model=s,this._selection=l,this._languageConfigurationService=o}resolve(s){const{name:l}=s,o=this._model.getLanguageIdAtPosition(this._selection.selectionStartLineNumber,this._selection.selectionStartColumn),g=this._languageConfigurationService.getLanguageConfiguration(o).comments;if(g){if(l==="LINE_COMMENT")return g.lineCommentToken||void 0;if(l==="BLOCK_COMMENT_START")return g.blockCommentStartToken||void 0;if(l==="BLOCK_COMMENT_END")return g.blockCommentEndToken||void 0}}};e.CommentBasedVariableResolver=r,e.CommentBasedVariableResolver=r=ke([ge(2,p.ILanguageConfigurationService)],r);class u{constructor(){this._date=new Date}resolve(s){const{name:l}=s;if(l==="CURRENT_YEAR")return String(this._date.getFullYear());if(l==="CURRENT_YEAR_SHORT")return String(this._date.getFullYear()).slice(-2);if(l==="CURRENT_MONTH")return String(this._date.getMonth().valueOf()+1).padStart(2,"0");if(l==="CURRENT_DATE")return String(this._date.getDate().valueOf()).padStart(2,"0");if(l==="CURRENT_HOUR")return String(this._date.getHours().valueOf()).padStart(2,"0");if(l==="CURRENT_MINUTE")return String(this._date.getMinutes().valueOf()).padStart(2,"0");if(l==="CURRENT_SECOND")return String(this._date.getSeconds().valueOf()).padStart(2,"0");if(l==="CURRENT_DAY_NAME")return u.dayNames[this._date.getDay()];if(l==="CURRENT_DAY_NAME_SHORT")return u.dayNamesShort[this._date.getDay()];if(l==="CURRENT_MONTH_NAME")return u.monthNames[this._date.getMonth()];if(l==="CURRENT_MONTH_NAME_SHORT")return u.monthNamesShort[this._date.getMonth()];if(l==="CURRENT_SECONDS_UNIX")return String(Math.floor(this._date.getTime()/1e3));if(l==="CURRENT_TIMEZONE_OFFSET"){const o=this._date.getTimezoneOffset(),g=o>0?"-":"+",h=Math.trunc(Math.abs(o/60)),m=h<10?"0"+h:h,C=Math.abs(o)-h*60,w=C<10?"0"+C:C;return g+m+":"+w}}}e.TimeBasedVariableResolver=u,u.dayNames=[v.localize(0,null),v.localize(1,null),v.localize(2,null),v.localize(3,null),v.localize(4,null),v.localize(5,null),v.localize(6,null)],u.dayNamesShort=[v.localize(7,null),v.localize(8,null),v.localize(9,null),v.localize(10,null),v.localize(11,null),v.localize(12,null),v.localize(13,null)],u.monthNames=[v.localize(14,null),v.localize(15,null),v.localize(16,null),v.localize(17,null),v.localize(18,null),v.localize(19,null),v.localize(20,null),v.localize(21,null),v.localize(22,null),v.localize(23,null),v.localize(24,null),v.localize(25,null)],u.monthNamesShort=[v.localize(26,null),v.localize(27,null),v.localize(28,null),v.localize(29,null),v.localize(30,null),v.localize(31,null),v.localize(32,null),v.localize(33,null),v.localize(34,null),v.localize(35,null),v.localize(36,null),v.localize(37,null)];class f{constructor(s){this._workspaceService=s}resolve(s){if(!this._workspaceService)return;const l=(0,b.toWorkspaceIdentifier)(this._workspaceService.getWorkspace());if(!(0,b.isEmptyWorkspaceIdentifier)(l)){if(s.name==="WORKSPACE_NAME")return this._resolveWorkspaceName(l);if(s.name==="WORKSPACE_FOLDER")return this._resoveWorkspacePath(l)}}_resolveWorkspaceName(s){if((0,b.isSingleFolderWorkspaceIdentifier)(s))return k.basename(s.uri.path);let l=k.basename(s.configPath.path);return l.endsWith(b.WORKSPACE_EXTENSION)&&(l=l.substr(0,l.length-b.WORKSPACE_EXTENSION.length-1)),l}_resoveWorkspacePath(s){if((0,b.isSingleFolderWorkspaceIdentifier)(s))return(0,L.normalizeDriveLetter)(s.uri.fsPath);const l=k.basename(s.configPath.path);let o=s.configPath.fsPath;return o.endsWith(l)&&(o=o.substr(0,o.length-l.length-1)),o?(0,L.normalizeDriveLetter)(o):"/"}}e.WorkspaceBasedVariableResolver=f;class c{resolve(s){const{name:l}=s;if(l==="RANDOM")return Math.random().toString().slice(-6);if(l==="RANDOM_HEX")return Math.random().toString(16).slice(-6);if(l==="UUID")return(0,S.generateUuid)()}}e.RandomBasedVariableResolver=c}),define(se[390],oe([1,0,13,2,11,74,5,24,32,38,164,169,117,926,476]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";var t;Object.defineProperty(e,"__esModule",{value:!0}),e.SnippetSession=e.OneSnippet=void 0;class r{constructor(d,s,l){this._editor=d,this._snippet=s,this._snippetLineLeadingWhitespace=l,this._offset=-1,this._nestingLevel=1,this._placeholderGroups=(0,L.groupBy)(s.placeholders,i.Placeholder.compareByIndex),this._placeholderGroupsIdx=-1}initialize(d){this._offset=d.newPosition}dispose(){this._placeholderDecorations&&this._editor.removeDecorations([...this._placeholderDecorations.values()]),this._placeholderGroups.length=0}_initDecorations(){if(this._offset===-1)throw new Error("Snippet not initialized!");if(this._placeholderDecorations)return;this._placeholderDecorations=new Map;const d=this._editor.getModel();this._editor.changeDecorations(s=>{for(const l of this._snippet.placeholders){const o=this._snippet.offset(l),g=this._snippet.fullLen(l),h=S.Range.fromPositions(d.getPositionAt(this._offset+o),d.getPositionAt(this._offset+o+g)),m=l.isFinalTabstop?r._decor.inactiveFinal:r._decor.inactive,C=s.addDecoration(h,m);this._placeholderDecorations.set(l,C)}})}move(d){if(!this._editor.hasModel())return[];if(this._initDecorations(),this._placeholderGroupsIdx>=0){const o=[];for(const g of this._placeholderGroups[this._placeholderGroupsIdx])if(g.transform){const h=this._placeholderDecorations.get(g),m=this._editor.getModel().getDecorationRange(h),C=this._editor.getModel().getValueInRange(m),w=g.transform.resolve(C).split(/\r\n|\r|\n/);for(let D=1;D0&&this._editor.executeEdits("snippet.placeholderTransform",o)}let s=!1;d===!0&&this._placeholderGroupsIdx0&&(this._placeholderGroupsIdx-=1,s=!0);const l=this._editor.getModel().changeDecorations(o=>{const g=new Set,h=[];for(const m of this._placeholderGroups[this._placeholderGroupsIdx]){const C=this._placeholderDecorations.get(m),w=this._editor.getModel().getDecorationRange(C);h.push(new p.Selection(w.startLineNumber,w.startColumn,w.endLineNumber,w.endColumn)),s=s&&this._hasPlaceholderBeenCollapsed(m),o.changeDecorationOptions(C,m.isFinalTabstop?r._decor.activeFinal:r._decor.active),g.add(m);for(const D of this._snippet.enclosingPlaceholders(m)){const I=this._placeholderDecorations.get(D);o.changeDecorationOptions(I,D.isFinalTabstop?r._decor.activeFinal:r._decor.active),g.add(D)}}for(const[m,C]of this._placeholderDecorations)g.has(m)||o.changeDecorationOptions(C,m.isFinalTabstop?r._decor.inactiveFinal:r._decor.inactive);return h});return s?this.move(d):l??[]}_hasPlaceholderBeenCollapsed(d){let s=d;for(;s;){if(s instanceof i.Placeholder){const l=this._placeholderDecorations.get(s);if(this._editor.getModel().getDecorationRange(l).isEmpty()&&s.toString().length>0)return!0}s=s.parent}return!1}get isAtFirstPlaceholder(){return this._placeholderGroupsIdx<=0||this._placeholderGroups.length===0}get isAtLastPlaceholder(){return this._placeholderGroupsIdx===this._placeholderGroups.length-1}get hasPlaceholder(){return this._snippet.placeholders.length>0}get isTrivialSnippet(){if(this._snippet.placeholders.length===0)return!0;if(this._snippet.placeholders.length===1){const[d]=this._snippet.placeholders;if(d.isFinalTabstop&&this._snippet.rightMostDescendant===d)return!0}return!1}computePossibleSelections(){const d=new Map;for(const s of this._placeholderGroups){let l;for(const o of s){if(o.isFinalTabstop)break;l||(l=[],d.set(o.index,l));const g=this._placeholderDecorations.get(o),h=this._editor.getModel().getDecorationRange(g);if(!h){d.delete(o.index);break}l.push(h)}}return d}get activeChoice(){if(!this._placeholderDecorations)return;const d=this._placeholderGroups[this._placeholderGroupsIdx][0];if(!d?.choice)return;const s=this._placeholderDecorations.get(d);if(!s)return;const l=this._editor.getModel().getDecorationRange(s);if(l)return{range:l,choice:d.choice}}get hasChoice(){let d=!1;return this._snippet.walk(s=>(d=s instanceof i.Choice,!d)),d}merge(d){const s=this._editor.getModel();this._nestingLevel*=10,this._editor.changeDecorations(l=>{for(const o of this._placeholderGroups[this._placeholderGroupsIdx]){const g=d.shift();console.assert(g._offset!==-1),console.assert(!g._placeholderDecorations);const h=g._snippet.placeholderInfo.last.index;for(const C of g._snippet.placeholderInfo.all)C.isFinalTabstop?C.index=o.index+(h+1)/this._nestingLevel:C.index=o.index+C.index/this._nestingLevel;this._snippet.replace(o,g._snippet.children);const m=this._placeholderDecorations.get(o);l.removeDecoration(m),this._placeholderDecorations.delete(o);for(const C of g._snippet.placeholders){const w=g._snippet.offset(C),D=g._snippet.fullLen(C),I=S.Range.fromPositions(s.getPositionAt(g._offset+w),s.getPositionAt(g._offset+w+D)),T=l.addDecoration(I,r._decor.inactive);this._placeholderDecorations.set(C,T)}}this._placeholderGroups=(0,L.groupBy)(this._snippet.placeholders,i.Placeholder.compareByIndex)})}}e.OneSnippet=r,r._decor={active:v.ModelDecorationOptions.register({description:"snippet-placeholder-1",stickiness:0,className:"snippet-placeholder"}),inactive:v.ModelDecorationOptions.register({description:"snippet-placeholder-2",stickiness:1,className:"snippet-placeholder"}),activeFinal:v.ModelDecorationOptions.register({description:"snippet-placeholder-3",stickiness:1,className:"finish-snippet-placeholder"}),inactiveFinal:v.ModelDecorationOptions.register({description:"snippet-placeholder-4",stickiness:1,className:"finish-snippet-placeholder"})};const u={overwriteBefore:0,overwriteAfter:0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};let f=t=class{static adjustWhitespace(d,s,l,o,g){const h=d.getLineContent(s.lineNumber),m=(0,y.getLeadingWhitespace)(h,0,s.column-1);let C;return o.walk(w=>{if(!(w instanceof i.Text)||w.parent instanceof i.Choice||g&&!g.has(w))return!0;const D=w.value.split(/\r\n|\r|\n/);if(l){const T=o.offset(w);if(T===0)D[0]=d.normalizeIndentation(D[0]);else{C=C??o.toString();const A=C.charCodeAt(T-1);(A===10||A===13)&&(D[0]=d.normalizeIndentation(m+D[0]))}for(let A=1;AB.get(a.IWorkspaceContextService)),P=d.invokeWithinContext(B=>new n.ModelBasedVariableResolver(B.get(b.ILabelService),T)),N=()=>m,M=T.getValueInRange(t.adjustSelection(T,d.getSelection(),l,0)),R=T.getValueInRange(t.adjustSelection(T,d.getSelection(),0,o)),x=T.getLineFirstNonWhitespaceColumn(d.getSelection().positionLineNumber),O=d.getSelections().map((B,W)=>({selection:B,idx:W})).sort((B,W)=>S.Range.compareRangesUsingStarts(B.selection,W.selection));for(const{selection:B,idx:W}of O){let V=t.adjustSelection(T,B,l,0),K=t.adjustSelection(T,B,0,o);M!==T.getValueInRange(V)&&(V=B),R!==T.getValueInRange(K)&&(K=B);const F=B.setStartPosition(V.startLineNumber,V.startColumn).setEndPosition(K.endLineNumber,K.endColumn),q=new i.SnippetParser().parse(s,!0,g),ie=F.getStartPosition(),ae=t.adjustWhitespace(T,ie,h||W>0&&x!==T.getLineFirstNonWhitespaceColumn(B.positionLineNumber),q);q.resolveVariables(new n.CompositeSnippetVariableResolver([P,new n.ClipboardBasedVariableResolver(N,W,O.length,d.getOption(78)==="spread"),new n.SelectionBasedVariableResolver(T,B,W,C),new n.CommentBasedVariableResolver(T,B,w),new n.TimeBasedVariableResolver,new n.WorkspaceBasedVariableResolver(A),new n.RandomBasedVariableResolver])),D[W]=E.EditOperation.replace(F,q.toString()),D[W].identifier={major:W,minor:0},D[W]._isTracked=!0,I[W]=new r(d,q,ae)}return{edits:D,snippets:I}}static createEditsAndSnippetsFromEdits(d,s,l,o,g,h,m){if(!d.hasModel()||s.length===0)return{edits:[],snippets:[]};const C=[],w=d.getModel(),D=new i.SnippetParser,I=new i.TextmateSnippet,T=new n.CompositeSnippetVariableResolver([d.invokeWithinContext(P=>new n.ModelBasedVariableResolver(P.get(b.ILabelService),w)),new n.ClipboardBasedVariableResolver(()=>g,0,d.getSelections().length,d.getOption(78)==="spread"),new n.SelectionBasedVariableResolver(w,d.getSelection(),0,h),new n.CommentBasedVariableResolver(w,d.getSelection(),m),new n.TimeBasedVariableResolver,new n.WorkspaceBasedVariableResolver(d.invokeWithinContext(P=>P.get(a.IWorkspaceContextService))),new n.RandomBasedVariableResolver]);s=s.sort((P,N)=>S.Range.compareRangesUsingStarts(P.range,N.range));let A=0;for(let P=0;P0){const W=s[P-1].range,V=S.Range.fromPositions(W.getEndPosition(),N.getStartPosition()),K=new i.Text(w.getValueInRange(V));I.appendChild(K),A+=K.value.length}const R=D.parseFragment(M,I);t.adjustWhitespace(w,N.getStartPosition(),!0,I,new Set(R)),I.resolveVariables(T);const x=I.toString(),O=x.slice(A);A=x.length;const B=E.EditOperation.replace(N,O);B.identifier={major:P,minor:0},B._isTracked=!0,C.push(B)}return D.ensureFinalTabstop(I,l,!0),{edits:C,snippets:[new r(d,I,"")]}}constructor(d,s,l=u,o){this._editor=d,this._template=s,this._options=l,this._languageConfigurationService=o,this._templateMerges=[],this._snippets=[]}dispose(){(0,k.dispose)(this._snippets)}_logInfo(){return`template="${this._template}", merged_templates="${this._templateMerges.join(" -> ")}"`}insert(){if(!this._editor.hasModel())return;const{edits:d,snippets:s}=typeof this._template=="string"?t.createEditsAndSnippetsFromSelections(this._editor,this._template,this._options.overwriteBefore,this._options.overwriteAfter,!1,this._options.adjustWhitespace,this._options.clipboardText,this._options.overtypingCapturer,this._languageConfigurationService):t.createEditsAndSnippetsFromEdits(this._editor,this._template,!1,this._options.adjustWhitespace,this._options.clipboardText,this._options.overtypingCapturer,this._languageConfigurationService);this._snippets=s,this._editor.executeEdits("snippet",d,l=>{const o=l.filter(g=>!!g.identifier);for(let g=0;gp.Selection.fromPositions(g.range.getEndPosition()))}),this._editor.revealRange(this._editor.getSelections()[0])}merge(d,s=u){if(!this._editor.hasModel())return;this._templateMerges.push([this._snippets[0]._nestingLevel,this._snippets[0]._placeholderGroupsIdx,d]);const{edits:l,snippets:o}=t.createEditsAndSnippetsFromSelections(this._editor,d,s.overwriteBefore,s.overwriteAfter,!0,s.adjustWhitespace,s.clipboardText,s.overtypingCapturer,this._languageConfigurationService);this._editor.executeEdits("snippet",l,g=>{const h=g.filter(C=>!!C.identifier);for(let C=0;Cp.Selection.fromPositions(C.range.getEndPosition()))})}next(){const d=this._move(!0);this._editor.setSelections(d),this._editor.revealPositionInCenterIfOutsideViewport(d[0].getPosition())}prev(){const d=this._move(!1);this._editor.setSelections(d),this._editor.revealPositionInCenterIfOutsideViewport(d[0].getPosition())}_move(d){const s=[];for(const l of this._snippets){const o=l.move(d);s.push(...o)}return s}get isAtFirstPlaceholder(){return this._snippets[0].isAtFirstPlaceholder}get isAtLastPlaceholder(){return this._snippets[0].isAtLastPlaceholder}get hasPlaceholder(){return this._snippets[0].hasPlaceholder}get hasChoice(){return this._snippets[0].hasChoice}get activeChoice(){return this._snippets[0].activeChoice}isSelectionWithinPlaceholders(){if(!this.hasPlaceholder)return!1;const d=this._editor.getSelections();if(d.length{g.push(...o.get(h))})}d.sort(S.Range.compareRangesUsingStarts);for(const[l,o]of s){if(o.length!==d.length){s.delete(l);continue}o.sort(S.Range.compareRangesUsingStarts);for(let g=0;g0}};e.SnippetSession=f,e.SnippetSession=f=t=ke([ge(3,_.ILanguageConfigurationService)],f)}),define(se[196],oe([1,0,2,20,16,10,21,32,18,138,713,15,64,390]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";var t;Object.defineProperty(e,"__esModule",{value:!0}),e.SnippetController2=void 0;const r={overwriteBefore:0,overwriteAfter:0,undoStopBefore:!0,undoStopAfter:!0,adjustWhitespace:!0,clipboardText:void 0,overtypingCapturer:void 0};let u=t=class{static get(d){return d.getContribution(t.ID)}constructor(d,s,l,o,g){this._editor=d,this._logService=s,this._languageFeaturesService=l,this._languageConfigurationService=g,this._snippetListener=new L.DisposableStore,this._modelVersionId=-1,this._inSnippet=t.InSnippetMode.bindTo(o),this._hasNextTabstop=t.HasNextTabstop.bindTo(o),this._hasPrevTabstop=t.HasPrevTabstop.bindTo(o)}dispose(){var d;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),(d=this._session)===null||d===void 0||d.dispose(),this._snippetListener.dispose()}insert(d,s){try{this._doInsert(d,typeof s>"u"?r:{...r,...s})}catch(l){this.cancel(),this._logService.error(l),this._logService.error("snippet_error"),this._logService.error("insert_template=",d),this._logService.error("existing_template=",this._session?this._session._logInfo():"")}}_doInsert(d,s){var l;if(this._editor.hasModel()){if(this._snippetListener.clear(),s.undoStopBefore&&this._editor.getModel().pushStackElement(),this._session&&typeof d!="string"&&this.cancel(),this._session?((0,k.assertType)(typeof d=="string"),this._session.merge(d,s)):(this._modelVersionId=this._editor.getModel().getAlternativeVersionId(),this._session=new n.SnippetSession(this._editor,d,s,this._languageConfigurationService),this._session.insert()),s.undoStopAfter&&this._editor.getModel().pushStackElement(),!((l=this._session)===null||l===void 0)&&l.hasChoice){const o={_debugDisplayName:"snippetChoiceCompletions",provideCompletionItems:(D,I)=>{if(!this._session||D!==this._editor.getModel()||!E.Position.equals(this._editor.getPosition(),I))return;const{activeChoice:T}=this._session;if(!T||T.choice.options.length===0)return;const A=D.getValueInRange(T.range),P=!!T.choice.options.find(M=>M.value===A),N=[];for(let M=0;M{h?.dispose(),m=!1},w=()=>{m||(h=this._languageFeaturesService.completionProvider.register({language:g.getLanguageId(),pattern:g.uri.fsPath,scheme:g.uri.scheme,exclusive:!0},o),this._snippetListener.add(h),m=!0)};this._choiceCompletions={provider:o,enable:w,disable:C}}this._updateState(),this._snippetListener.add(this._editor.onDidChangeModelContent(o=>o.isFlush&&this.cancel())),this._snippetListener.add(this._editor.onDidChangeModel(()=>this.cancel())),this._snippetListener.add(this._editor.onDidChangeCursorSelection(()=>this._updateState()))}}_updateState(){if(!(!this._session||!this._editor.hasModel())){if(this._modelVersionId===this._editor.getModel().getAlternativeVersionId())return this.cancel();if(!this._session.hasPlaceholder)return this.cancel();if(this._session.isAtLastPlaceholder||!this._session.isSelectionWithinPlaceholders())return this._editor.getModel().pushStackElement(),this.cancel();this._inSnippet.set(!0),this._hasPrevTabstop.set(!this._session.isAtFirstPlaceholder),this._hasNextTabstop.set(!this._session.isAtLastPlaceholder),this._handleChoice()}}_handleChoice(){var d;if(!this._session||!this._editor.hasModel()){this._currentChoice=void 0;return}const{activeChoice:s}=this._session;if(!s||!this._choiceCompletions){(d=this._choiceCompletions)===null||d===void 0||d.disable(),this._currentChoice=void 0;return}this._currentChoice!==s.choice&&(this._currentChoice=s.choice,this._choiceCompletions.enable(),queueMicrotask(()=>{(0,v.showSimpleSuggestions)(this._editor,this._choiceCompletions.provider)}))}finish(){for(;this._inSnippet.get();)this.next()}cancel(d=!1){var s;this._inSnippet.reset(),this._hasPrevTabstop.reset(),this._hasNextTabstop.reset(),this._snippetListener.clear(),this._currentChoice=void 0,(s=this._session)===null||s===void 0||s.dispose(),this._session=void 0,this._modelVersionId=-1,d&&this._editor.setSelections([this._editor.getSelection()])}prev(){var d;(d=this._session)===null||d===void 0||d.prev(),this._updateState()}next(){var d;(d=this._session)===null||d===void 0||d.next(),this._updateState()}isInSnippet(){return!!this._inSnippet.get()}};e.SnippetController2=u,u.ID="snippetController2",u.InSnippetMode=new a.RawContextKey("inSnippetMode",!1,(0,b.localize)(0,null)),u.HasNextTabstop=new a.RawContextKey("hasNextTabstop",!1,(0,b.localize)(1,null)),u.HasPrevTabstop=new a.RawContextKey("hasPrevTabstop",!1,(0,b.localize)(2,null)),e.SnippetController2=u=t=ke([ge(1,i.ILogService),ge(2,_.ILanguageFeaturesService),ge(3,a.IContextKeyService),ge(4,p.ILanguageConfigurationService)],u),(0,y.registerEditorContribution)(u.ID,u,4);const f=y.EditorCommand.bindToContribution(u.get);(0,y.registerEditorCommand)(new f({id:"jumpToNextSnippetPlaceholder",precondition:a.ContextKeyExpr.and(u.InSnippetMode,u.HasNextTabstop),handler:c=>c.next(),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:2}})),(0,y.registerEditorCommand)(new f({id:"jumpToPrevSnippetPlaceholder",precondition:a.ContextKeyExpr.and(u.InSnippetMode,u.HasPrevTabstop),handler:c=>c.prev(),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:1026}})),(0,y.registerEditorCommand)(new f({id:"leaveSnippet",precondition:u.InSnippetMode,handler:c=>c.cancel(!0),kbOpts:{weight:100+30,kbExpr:S.EditorContextKeys.editorTextFocus,primary:9,secondary:[1033]}})),(0,y.registerEditorCommand)(new f({id:"acceptSnippet",precondition:u.InSnippetMode,handler:c=>c.finish()}))}),define(se[927],oe([1,0,60,12,2,35,20,74,10,5,31,32,217,797,156,196,25,8]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlineCompletionsModel=e.VersionIdChangeReason=void 0;var c;(function(s){s[s.Undo=0]="Undo",s[s.Redo=1]="Redo",s[s.AcceptWord=2]="AcceptWord",s[s.Other=3]="Other"})(c||(e.VersionIdChangeReason=c={}));let d=class extends y.Disposable{get isAcceptingPartially(){return this._isAcceptingPartially}constructor(l,o,g,h,m,C,w,D,I,T,A,P){super(),this.textModel=l,this.selectedSuggestItem=o,this.cursorPosition=g,this.textModelVersionId=h,this._debounceValue=m,this._suggestPreviewEnabled=C,this._suggestPreviewMode=w,this._inlineSuggestMode=D,this._enabled=I,this._instantiationService=T,this._commandService=A,this._languageConfigurationService=P,this._source=this._register(this._instantiationService.createInstance(n.InlineCompletionsSource,this.textModel,this.textModelVersionId,this._debounceValue)),this._isActive=(0,E.observableValue)(this,!1),this._forceUpdateSignal=(0,E.observableSignal)("forceUpdate"),this._selectedInlineCompletionId=(0,E.observableValue)(this,void 0),this._isAcceptingPartially=!1,this._preserveCurrentCompletionReasons=new Set([c.Redo,c.Undo,c.AcceptWord]),this._fetchInlineCompletions=(0,E.derivedHandleChanges)({owner:this,createEmptyChangeSummary:()=>({preserveCurrentCompletion:!1,inlineCompletionTriggerKind:b.InlineCompletionTriggerKind.Automatic}),handleChange:(M,R)=>(M.didChange(this.textModelVersionId)&&this._preserveCurrentCompletionReasons.has(M.change)?R.preserveCurrentCompletion=!0:M.didChange(this._forceUpdateSignal)&&(R.inlineCompletionTriggerKind=M.change),!0)},(M,R)=>{if(this._forceUpdateSignal.read(M),!(this._enabled.read(M)&&this.selectedSuggestItem.read(M)||this._isActive.read(M))){this._source.cancelUpdate();return}this.textModelVersionId.read(M);const O=this.selectedInlineCompletion.get(),B=R.preserveCurrentCompletion||O?.forwardStable?O:void 0,W=this._source.suggestWidgetInlineCompletions.get(),V=this.selectedSuggestItem.read(M);if(W&&!V){const q=this._source.inlineCompletions.get();(0,E.transaction)(ie=>{(!q||W.request.versionId>q.request.versionId)&&this._source.inlineCompletions.set(W.clone(),ie),this._source.clearSuggestWidgetInlineCompletions(ie)})}const K=this.cursorPosition.read(M),F={triggerKind:R.inlineCompletionTriggerKind,selectedSuggestionInfo:V?.toSelectedSuggestionInfo()};return this._source.fetch(K,F,B)}),this._filteredInlineCompletionItems=(0,E.derived)(this,M=>{const R=this._source.inlineCompletions.read(M);if(!R)return[];const x=this.cursorPosition.read(M);return R.inlineCompletions.filter(B=>B.isVisible(this.textModel,x,M))}),this.selectedInlineCompletionIndex=(0,E.derived)(this,M=>{const R=this._selectedInlineCompletionId.read(M),x=this._filteredInlineCompletionItems.read(M),O=this._selectedInlineCompletionId===void 0?-1:x.findIndex(B=>B.semanticId===R);return O===-1?(this._selectedInlineCompletionId.set(void 0,void 0),0):O}),this.selectedInlineCompletion=(0,E.derived)(this,M=>{const R=this._filteredInlineCompletionItems.read(M),x=this.selectedInlineCompletionIndex.read(M);return R[x]}),this.lastTriggerKind=this._source.inlineCompletions.map(this,M=>M?.request.context.triggerKind),this.inlineCompletionsCount=(0,E.derived)(this,M=>{if(this.lastTriggerKind.read(M)===b.InlineCompletionTriggerKind.Explicit)return this._filteredInlineCompletionItems.read(M).length}),this.state=(0,E.derivedOpts)({owner:this,equalityComparer:(M,R)=>!M||!R?M===R:(0,i.ghostTextOrReplacementEquals)(M.ghostText,R.ghostText)&&M.inlineCompletion===R.inlineCompletion&&M.suggestItem===R.suggestItem},M=>{var R;const x=this.textModel,O=this.selectedSuggestItem.read(M);if(O){const B=O.toSingleTextEdit().removeCommonPrefix(x),W=this._computeAugmentedCompletion(B,M);if(!this._suggestPreviewEnabled.read(M)&&!W)return;const K=(R=W?.edit)!==null&&R!==void 0?R:B,F=W?W.edit.text.length-B.text.length:0,q=this._suggestPreviewMode.read(M),ie=this.cursorPosition.read(M),ae=K.computeGhostText(x,q,ie,F);return{ghostText:ae??new i.GhostText(K.range.endLineNumber,[]),inlineCompletion:W?.completion,suggestItem:O}}else{if(!this._isActive.read(M))return;const B=this.selectedInlineCompletion.read(M);if(!B)return;const W=B.toSingleTextEdit(M),V=this._inlineSuggestMode.read(M),K=this.cursorPosition.read(M),F=W.computeGhostText(x,V,K);return F?{ghostText:F,inlineCompletion:B,suggestItem:void 0}:void 0}}),this.ghostText=(0,E.derivedOpts)({owner:this,equalityComparer:i.ghostTextOrReplacementEquals},M=>{const R=this.state.read(M);if(R)return R.ghostText}),this._register((0,E.recomputeInitiallyAndOnChange)(this._fetchInlineCompletions));let N;this._register((0,E.autorun)(M=>{var R,x;const O=this.state.read(M),B=O?.inlineCompletion;if(B?.semanticId!==N?.semanticId&&(N=B,B)){const W=B.inlineCompletion,V=W.source;(x=(R=V.provider).handleItemDidShow)===null||x===void 0||x.call(R,V.inlineCompletions,W.sourceInlineCompletion,W.insertText)}}))}async trigger(l){this._isActive.set(!0,l),await this._fetchInlineCompletions.get()}async triggerExplicitly(l){(0,E.subtransaction)(l,o=>{this._isActive.set(!0,o),this._forceUpdateSignal.trigger(o,b.InlineCompletionTriggerKind.Explicit)}),await this._fetchInlineCompletions.get()}stop(l){(0,E.subtransaction)(l,o=>{this._isActive.set(!1,o),this._source.clear(o)})}_computeAugmentedCompletion(l,o){const g=this.textModel,h=this._source.suggestWidgetInlineCompletions.read(o),m=h?h.inlineCompletions:[this.selectedInlineCompletion.read(o)].filter(S.isDefined);return(0,L.mapFindFirst)(m,w=>{let D=w.toSingleTextEdit(o);return D=D.removeCommonPrefix(g,v.Range.fromPositions(D.range.getStartPosition(),l.range.getEndPosition())),D.augments(l)?{edit:D,completion:w}:void 0})}async _deltaSelectedInlineCompletionIndex(l){await this.triggerExplicitly();const o=this._filteredInlineCompletionItems.get()||[];if(o.length>0){const g=(this.selectedInlineCompletionIndex.get()+l+o.length)%o.length;this._selectedInlineCompletionId.set(o[g].semanticId,void 0)}else this._selectedInlineCompletionId.set(void 0,void 0)}async next(){await this._deltaSelectedInlineCompletionIndex(1)}async previous(){await this._deltaSelectedInlineCompletionIndex(-1)}async accept(l){var o;if(l.getModel()!==this.textModel)throw new k.BugIndicatingError;const g=this.state.get();if(!g||g.ghostText.isEmpty()||!g.inlineCompletion)return;const h=g.inlineCompletion.toInlineCompletion(void 0);l.pushUndoStop(),h.snippetInfo?(l.executeEdits("inlineSuggestion.accept",[p.EditOperation.replaceMove(h.range,""),...h.additionalTextEdits]),l.setPosition(h.snippetInfo.range.getStartPosition(),"inlineCompletionAccept"),(o=r.SnippetController2.get(l))===null||o===void 0||o.insert(h.snippetInfo.snippet,{undoStopBefore:!1})):l.executeEdits("inlineSuggestion.accept",[p.EditOperation.replaceMove(h.range,h.insertText),...h.additionalTextEdits]),h.command&&h.source.addRef(),(0,E.transaction)(m=>{this._source.clear(m),this._isActive.set(!1,m)}),h.command&&(await this._commandService.executeCommand(h.command.id,...h.command.arguments||[]).then(void 0,k.onUnexpectedExternalError),h.source.removeRef())}async acceptNextWord(l){await this._acceptNext(l,(o,g)=>{const h=this.textModel.getLanguageIdAtPosition(o.lineNumber,o.column),m=this._languageConfigurationService.getLanguageConfiguration(h),C=new RegExp(m.wordDefinition.source,m.wordDefinition.flags.replace("g","")),w=g.match(C);let D=0;w&&w.index!==void 0?w.index===0?D=w[0].length:D=w.index:D=g.length;const T=/\s+/g.exec(g);return T&&T.index!==void 0&&T.index+T[0].length{const h=g.match(/\n/);return h&&h.index!==void 0?h.index+1:g.length})}async _acceptNext(l,o){if(l.getModel()!==this.textModel)throw new k.BugIndicatingError;const g=this.state.get();if(!g||g.ghostText.isEmpty()||!g.inlineCompletion)return;const h=g.ghostText,m=g.inlineCompletion.toInlineCompletion(void 0);if(m.snippetInfo||m.filterText!==m.insertText){await this.accept(l);return}const C=h.parts[0],w=new _.Position(h.lineNumber,C.column),D=C.lines.join(` `),I=o(w,D);if(I===D.length&&h.parts.length===1){this.accept(l);return}const T=D.substring(0,I);m.source.addRef();try{this._isAcceptingPartially=!0;try{l.pushUndoStop(),l.executeEdits("inlineSuggestion.accept",[p.EditOperation.replace(v.Range.fromPositions(w),T)]);const A=(0,t.lengthOfText)(T);l.setPosition((0,t.addPositions)(w,A),"inlineCompletionPartialAccept")}finally{this._isAcceptingPartially=!1}if(m.source.provider.handlePartialAccept){const A=v.Range.fromPositions(m.range.getStartPosition(),(0,t.addPositions)(w,(0,t.lengthOfText)(T))),P=l.getModel().getValueInRange(A,1);m.source.provider.handlePartialAccept(m.source.inlineCompletions,m.sourceInlineCompletion,P.length)}}finally{m.source.removeRef()}}handleSuggestAccepted(l){var o,g;const h=l.toSingleTextEdit().removeCommonPrefix(this.textModel),m=this._computeAugmentedCompletion(h,void 0);if(!m)return;const C=m.completion.inlineCompletion;(g=(o=C.source.provider).handlePartialAccept)===null||g===void 0||g.call(o,C.source.inlineCompletions,C.sourceInlineCompletion,h.text.length)}};e.InlineCompletionsModel=d,e.InlineCompletionsModel=d=ke([ge(9,f.IInstantiationService),ge(10,u.ICommandService),ge(11,a.ILanguageConfigurationService)],d)}),define(se[391],oe([1,0,14,19,12,6,2,11,24,121,312,103,27,15,64,81,311,138,18,71,20,240,196,243]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g){"use strict";var h;Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestModel=e.LineContext=void 0;class m{static shouldAutoTrigger(T){if(!T.hasModel())return!1;const A=T.getModel(),P=T.getPosition();A.tokenization.tokenizeIfCheap(P.lineNumber);const N=A.getWordAtPosition(P);return!(!N||N.endColumn!==P.column&&N.startColumn+1!==P.column||!isNaN(Number(N.word)))}constructor(T,A,P){this.leadingLineContent=T.getLineContent(A.lineNumber).substr(0,A.column-1),this.leadingWord=T.getWordUntilPosition(A),this.lineNumber=A.lineNumber,this.column=A.column,this.triggerOptions=P}}e.LineContext=m;function C(I,T,A){if(!T.getContextKeyValue(l.InlineCompletionContextKeys.inlineSuggestionVisible.key))return!0;const P=T.getContextKeyValue(l.InlineCompletionContextKeys.suppressSuggestions.key);return P!==void 0?!P:!I.getOption(62).suppressSuggestions}function w(I,T,A){if(!T.getContextKeyValue("inlineSuggestionVisible"))return!0;const P=T.getContextKeyValue(l.InlineCompletionContextKeys.suppressSuggestions.key);return P!==void 0?!P:!I.getOption(62).suppressSuggestions}let D=h=class{constructor(T,A,P,N,M,R,x,O,B){this._editor=T,this._editorWorkerService=A,this._clipboardService=P,this._telemetryService=N,this._logService=M,this._contextKeyService=R,this._configurationService=x,this._languageFeaturesService=O,this._envService=B,this._toDispose=new S.DisposableStore,this._triggerCharacterListener=new S.DisposableStore,this._triggerQuickSuggest=new L.TimeoutTimer,this._triggerState=void 0,this._completionDisposables=new S.DisposableStore,this._onDidCancel=new E.Emitter,this._onDidTrigger=new E.Emitter,this._onDidSuggest=new E.Emitter,this.onDidCancel=this._onDidCancel.event,this.onDidTrigger=this._onDidTrigger.event,this.onDidSuggest=this._onDidSuggest.event,this._telemetryGate=0,this._currentSelection=this._editor.getSelection()||new _.Selection(1,1,1,1),this._toDispose.add(this._editor.onDidChangeModel(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeModelLanguage(()=>{this._updateTriggerCharacters(),this.cancel()})),this._toDispose.add(this._editor.onDidChangeConfiguration(()=>{this._updateTriggerCharacters()})),this._toDispose.add(this._languageFeaturesService.completionProvider.onDidChange(()=>{this._updateTriggerCharacters(),this._updateActiveSuggestSession()}));let W=!1;this._toDispose.add(this._editor.onDidCompositionStart(()=>{W=!0})),this._toDispose.add(this._editor.onDidCompositionEnd(()=>{W=!1,this._onCompositionEnd()})),this._toDispose.add(this._editor.onDidChangeCursorSelection(V=>{W||this._onCursorChange(V)})),this._toDispose.add(this._editor.onDidChangeModelContent(()=>{!W&&this._triggerState!==void 0&&this._refilterCompletionItems()})),this._updateTriggerCharacters()}dispose(){(0,S.dispose)(this._triggerCharacterListener),(0,S.dispose)([this._onDidCancel,this._onDidSuggest,this._onDidTrigger,this._triggerQuickSuggest]),this._toDispose.dispose(),this._completionDisposables.dispose(),this.cancel()}_updateTriggerCharacters(){if(this._triggerCharacterListener.clear(),this._editor.getOption(90)||!this._editor.hasModel()||!this._editor.getOption(120))return;const T=new Map;for(const P of this._languageFeaturesService.completionProvider.all(this._editor.getModel()))for(const N of P.triggerCharacters||[]){let M=T.get(N);M||(M=new Set,M.add((0,f.getSnippetSuggestSupport)()),T.set(N,M)),M.add(P)}const A=P=>{var N;if(!w(this._editor,this._contextKeyService,this._configurationService)||m.shouldAutoTrigger(this._editor))return;if(!P){const x=this._editor.getPosition();P=this._editor.getModel().getLineContent(x.lineNumber).substr(0,x.column-1)}let M="";(0,p.isLowSurrogate)(P.charCodeAt(P.length-1))?(0,p.isHighSurrogate)(P.charCodeAt(P.length-2))&&(M=P.substr(P.length-2)):M=P.charAt(P.length-1);const R=T.get(M);if(R){const x=new Map;if(this._completionModel)for(const[O,B]of this._completionModel.getItemsByProvider())R.has(O)||x.set(O,B);this.trigger({auto:!0,triggerKind:1,triggerCharacter:M,retrigger:!!this._completionModel,clipboardText:(N=this._completionModel)===null||N===void 0?void 0:N.clipboardText,completionOptions:{providerFilter:R,providerItemsToReuse:x}})}};this._triggerCharacterListener.add(this._editor.onDidType(A)),this._triggerCharacterListener.add(this._editor.onDidCompositionEnd(()=>A()))}get state(){return this._triggerState?this._triggerState.auto?2:1:0}cancel(T=!1){var A;this._triggerState!==void 0&&(this._triggerQuickSuggest.cancel(),(A=this._requestToken)===null||A===void 0||A.cancel(),this._requestToken=void 0,this._triggerState=void 0,this._completionModel=void 0,this._context=void 0,this._onDidCancel.fire({retrigger:T}))}clear(){this._completionDisposables.clear()}_updateActiveSuggestSession(){this._triggerState!==void 0&&(!this._editor.hasModel()||!this._languageFeaturesService.completionProvider.has(this._editor.getModel())?this.cancel():this.trigger({auto:this._triggerState.auto,retrigger:!0}))}_onCursorChange(T){if(!this._editor.hasModel())return;const A=this._currentSelection;if(this._currentSelection=this._editor.getSelection(),!T.selection.isEmpty()||T.reason!==0&&T.reason!==3||T.source!=="keyboard"&&T.source!=="deleteLeft"){this.cancel();return}this._triggerState===void 0&&T.reason===0?(A.containsRange(this._currentSelection)||A.getEndPosition().isBeforeOrEqual(this._currentSelection.getPosition()))&&this._doTriggerQuickSuggest():this._triggerState!==void 0&&T.reason===3&&this._refilterCompletionItems()}_onCompositionEnd(){this._triggerState===void 0?this._doTriggerQuickSuggest():this._refilterCompletionItems()}_doTriggerQuickSuggest(){var T;f.QuickSuggestionsOptions.isAllOff(this._editor.getOption(88))||this._editor.getOption(117).snippetsPreventQuickSuggestions&&(!((T=o.SnippetController2.get(this._editor))===null||T===void 0)&&T.isInSnippet())||(this.cancel(),this._triggerQuickSuggest.cancelAndSet(()=>{if(this._triggerState!==void 0||!m.shouldAutoTrigger(this._editor)||!this._editor.hasModel()||!this._editor.hasWidgetFocus())return;const A=this._editor.getModel(),P=this._editor.getPosition(),N=this._editor.getOption(88);if(!f.QuickSuggestionsOptions.isAllOff(N)){if(!f.QuickSuggestionsOptions.isAllOn(N)){A.tokenization.tokenizeIfCheap(P.lineNumber);const M=A.tokenization.getLineTokens(P.lineNumber),R=M.getStandardTokenType(M.findTokenIndexAtOffset(Math.max(P.column-1-1,0)));if(f.QuickSuggestionsOptions.valueFor(N,R)!=="on")return}C(this._editor,this._contextKeyService,this._configurationService)&&this._languageFeaturesService.completionProvider.has(A)&&this.trigger({auto:!0})}},this._editor.getOption(89)))}_refilterCompletionItems(){(0,s.assertType)(this._editor.hasModel()),(0,s.assertType)(this._triggerState!==void 0);const T=this._editor.getModel(),A=this._editor.getPosition(),P=new m(T,A,{...this._triggerState,refilter:!0});this._onNewContext(P)}trigger(T){var A,P,N,M,R,x;if(!this._editor.hasModel())return;const O=this._editor.getModel(),B=new m(O,this._editor.getPosition(),T);this.cancel(T.retrigger),this._triggerState=T,this._onDidTrigger.fire({auto:T.auto,shy:(A=T.shy)!==null&&A!==void 0?A:!1,position:this._editor.getPosition()}),this._context=B;let W={triggerKind:(P=T.triggerKind)!==null&&P!==void 0?P:0};T.triggerCharacter&&(W={triggerKind:1,triggerCharacter:T.triggerCharacter}),this._requestToken=new k.CancellationTokenSource;const V=this._editor.getOption(111);let K=1;switch(V){case"top":K=0;break;case"bottom":K=2;break}const{itemKind:F,showDeprecated:q}=h.createSuggestFilter(this._editor),ie=new f.CompletionOptions(K,(M=(N=T.completionOptions)===null||N===void 0?void 0:N.kindFilter)!==null&&M!==void 0?M:F,(R=T.completionOptions)===null||R===void 0?void 0:R.providerFilter,(x=T.completionOptions)===null||x===void 0?void 0:x.providerItemsToReuse,q),ae=b.WordDistance.create(this._editorWorkerService,this._editor),ne=(0,f.provideSuggestionItems)(this._languageFeaturesService.completionProvider,O,this._editor.getPosition(),ie,W,this._requestToken.token);Promise.all([ne,ae]).then(async([$,J])=>{var Q;if((Q=this._requestToken)===null||Q===void 0||Q.dispose(),!this._editor.hasModel())return;let re=T?.clipboardText;if(!re&&$.needsClipboard&&(re=await this._clipboardService.readText()),this._triggerState===void 0)return;const de=this._editor.getModel(),he=new m(de,this._editor.getPosition(),T),me={...d.FuzzyScoreOptions.default,firstMatchCanBeWeak:!this._editor.getOption(117).matchOnWordStartOnly};if(this._completionModel=new u.CompletionModel($.items,this._context.column,{leadingLineContent:he.leadingLineContent,characterCountDelta:he.column-this._context.column},J,this._editor.getOption(117),this._editor.getOption(111),me,re),this._completionDisposables.add($.disposable),this._onNewContext(he),this._reportDurationsTelemetry($.durations),!this._envService.isBuilt||this._envService.isExtensionDevelopment)for(const X of $.items)X.isInvalid&&this._logService.warn(`[suggest] did IGNORE invalid completion item from ${X.provider._debugDisplayName}`,X.completion)}).catch(y.onUnexpectedError)}_reportDurationsTelemetry(T){this._telemetryGate++%230===0&&setTimeout(()=>{this._telemetryService.publicLog2("suggest.durations.json",{data:JSON.stringify(T)}),this._logService.debug("suggest.durations.json",T)})}static createSuggestFilter(T){const A=new Set;T.getOption(111)==="none"&&A.add(27);const N=T.getOption(117);return N.showMethods||A.add(0),N.showFunctions||A.add(1),N.showConstructors||A.add(2),N.showFields||A.add(3),N.showVariables||A.add(4),N.showClasses||A.add(5),N.showStructs||A.add(6),N.showInterfaces||A.add(7),N.showModules||A.add(8),N.showProperties||A.add(9),N.showEvents||A.add(10),N.showOperators||A.add(11),N.showUnits||A.add(12),N.showValues||A.add(13),N.showConstants||A.add(14),N.showEnums||A.add(15),N.showEnumMembers||A.add(16),N.showKeywords||A.add(17),N.showWords||A.add(18),N.showColors||A.add(19),N.showFiles||A.add(20),N.showReferences||A.add(21),N.showColors||A.add(22),N.showFolders||A.add(23),N.showTypeParameters||A.add(24),N.showSnippets||A.add(27),N.showUsers||A.add(25),N.showIssues||A.add(26),{itemKind:A,showDeprecated:N.showDeprecated}}_onNewContext(T){if(this._context){if(T.lineNumber!==this._context.lineNumber){this.cancel();return}if((0,p.getLeadingWhitespace)(T.leadingLineContent)!==(0,p.getLeadingWhitespace)(this._context.leadingLineContent)){this.cancel();return}if(T.columnthis._context.leadingWord.startColumn){if(m.shouldAutoTrigger(this._editor)&&this._context){const P=this._completionModel.getItemsByProvider();this.trigger({auto:this._context.triggerOptions.auto,retrigger:!0,clipboardText:this._completionModel.clipboardText,completionOptions:{providerItemsToReuse:P}})}return}if(T.column>this._context.column&&this._completionModel.getIncompleteProvider().size>0&&T.leadingWord.word.length!==0){const A=new Map,P=new Set;for(const[N,M]of this._completionModel.getItemsByProvider())M.length>0&&M[0].container.incomplete?P.add(N):A.set(N,M);this.trigger({auto:this._context.triggerOptions.auto,triggerKind:2,retrigger:!0,clipboardText:this._completionModel.clipboardText,completionOptions:{providerFilter:P,providerItemsToReuse:A}})}else{const A=this._completionModel.lineContext;let P=!1;if(this._completionModel.lineContext={leadingLineContent:T.leadingLineContent,characterCountDelta:T.column-this._context.column},this._completionModel.items.length===0){const N=m.shouldAutoTrigger(this._editor);if(!this._context){this.cancel();return}if(N&&this._context.leadingWord.endColumn0,P&&T.leadingWord.word.length===0){this.cancel();return}}this._onDidSuggest.fire({completionModel:this._completionModel,triggerOptions:T.triggerOptions,isFrozen:P})}}}}};e.SuggestModel=D,e.SuggestModel=D=h=ke([ge(1,v.IEditorWorkerService),ge(2,a.IClipboardService),ge(3,r.ITelemetryService),ge(4,t.ILogService),ge(5,n.IContextKeyService),ge(6,i.IConfigurationService),ge(7,c.ILanguageFeaturesService),ge(8,g.IEnvironmentService)],D)}),define(se[392],oe([1,0,48,13,19,12,6,125,2,17,61,20,127,16,74,10,5,21,196,117,358,770,717,25,15,8,64,138,769,563,391,564,909,81,49,111,7,38]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M,R,x,O){"use strict";var B;Object.defineProperty(e,"__esModule",{value:!0}),e.TriggerSuggestAction=e.SuggestController=void 0;const W=!1;class V{constructor($,J){if(this._model=$,this._position=J,this._decorationOptions=O.ModelDecorationOptions.register({description:"suggest-line-suffix",stickiness:1}),$.getLineMaxColumn(J.lineNumber)!==J.column){const re=$.getOffsetAt(J),de=$.getPositionAt(re+1);$.changeDecorations(he=>{this._marker&&he.removeDecoration(this._marker),this._marker=he.addDecoration(u.Range.fromPositions(J,de),this._decorationOptions)})}}dispose(){this._marker&&!this._model.isDisposed()&&this._model.changeDecorations($=>{$.removeDecoration(this._marker),this._marker=void 0})}delta($){if(this._model.isDisposed()||this._position.lineNumber!==$.lineNumber)return 0;if(this._marker){const J=this._model.getDecorationRange(this._marker);return this._model.getOffsetAt(J.getStartPosition())-this._model.getOffsetAt($)}else return this._model.getLineMaxColumn($.lineNumber)-$.column}}let K=B=class{static get($){return $.getContribution(B.ID)}constructor($,J,Q,re,de,he,me){this._memoryService=J,this._commandService=Q,this._contextKeyService=re,this._instantiationService=de,this._logService=he,this._telemetryService=me,this._lineSuffix=new _.MutableDisposable,this._toDispose=new _.DisposableStore,this._selectors=new F(z=>z.priority),this._onWillInsertSuggestItem=new S.Emitter,this.onWillInsertSuggestItem=this._onWillInsertSuggestItem.event,this.editor=$,this.model=de.createInstance(T.SuggestModel,this.editor),this._selectors.register({priority:0,select:(z,H,Y)=>this._memoryService.select(z,H,Y)});const X=w.Context.InsertMode.bindTo(re);X.set($.getOption(117).insertMode),this._toDispose.add(this.model.onDidTrigger(()=>X.set($.getOption(117).insertMode))),this.widget=this._toDispose.add(new x.WindowIdleValue((0,x.getWindow)($.getDomNode()),()=>{const z=this._instantiationService.createInstance(P.SuggestWidget,this.editor);this._toDispose.add(z),this._toDispose.add(z.onDidSelect(ee=>this._insertSuggestion(ee,0),this));const H=new I.CommitCharacterController(this.editor,z,this.model,ee=>this._insertSuggestion(ee,2));this._toDispose.add(H);const Y=w.Context.MakesTextEdit.bindTo(this._contextKeyService),j=w.Context.HasInsertAndReplaceRange.bindTo(this._contextKeyService),Z=w.Context.CanResolve.bindTo(this._contextKeyService);return this._toDispose.add((0,_.toDisposable)(()=>{Y.reset(),j.reset(),Z.reset()})),this._toDispose.add(z.onDidFocus(({item:ee})=>{const le=this.editor.getPosition(),ue=ee.editStart.column,ce=le.column;let pe=!0;this.editor.getOption(1)==="smart"&&this.model.state===2&&!ee.completion.additionalTextEdits&&!(ee.completion.insertTextRules&4)&&ce-ue===ee.completion.insertText.length&&(pe=this.editor.getModel().getValueInRange({startLineNumber:le.lineNumber,startColumn:ue,endLineNumber:le.lineNumber,endColumn:ce})!==ee.completion.insertText),Y.set(pe),j.set(!r.Position.equals(ee.editInsertEnd,ee.editReplaceEnd)),Z.set(!!ee.provider.resolveCompletionItem||!!ee.completion.documentation||ee.completion.detail!==ee.completion.label)})),this._toDispose.add(z.onDetailsKeyDown(ee=>{if(ee.toKeyCodeChord().equals(new p.KeyCodeChord(!0,!1,!1,!1,33))||v.isMacintosh&&ee.toKeyCodeChord().equals(new p.KeyCodeChord(!1,!1,!1,!0,33))){ee.stopPropagation();return}ee.toKeyCodeChord().isModifierKey()||this.editor.focus()})),z})),this._overtypingCapturer=this._toDispose.add(new x.WindowIdleValue((0,x.getWindow)($.getDomNode()),()=>this._toDispose.add(new A.OvertypingCapturer(this.editor,this.model)))),this._alternatives=this._toDispose.add(new x.WindowIdleValue((0,x.getWindow)($.getDomNode()),()=>this._toDispose.add(new D.SuggestAlternatives(this.editor,this._contextKeyService)))),this._toDispose.add(de.createInstance(l.WordContextKey,$)),this._toDispose.add(this.model.onDidTrigger(z=>{this.widget.value.showTriggered(z.auto,z.shy?250:50),this._lineSuffix.value=new V(this.editor.getModel(),z.position)})),this._toDispose.add(this.model.onDidSuggest(z=>{if(z.triggerOptions.shy)return;let H=-1;for(const j of this._selectors.itemsOrderedByPriorityDesc)if(H=j.select(this.editor.getModel(),this.editor.getPosition(),z.completionModel.items),H!==-1)break;if(H===-1&&(H=0),this.model.state===0)return;let Y=!1;if(z.triggerOptions.auto){const j=this.editor.getOption(117);j.selectionMode==="never"||j.selectionMode==="always"?Y=j.selectionMode==="never":j.selectionMode==="whenTriggerCharacter"?Y=z.triggerOptions.triggerKind!==1:j.selectionMode==="whenQuickSuggestion"&&(Y=z.triggerOptions.triggerKind===1&&!z.triggerOptions.refilter)}this.widget.value.showSuggestions(z.completionModel,H,z.isFrozen,z.triggerOptions.auto,Y)})),this._toDispose.add(this.model.onDidCancel(z=>{z.retrigger||this.widget.value.hideWidget()})),this._toDispose.add(this.editor.onDidBlurEditorWidget(()=>{W||(this.model.cancel(),this.model.clear())}));const U=w.Context.AcceptSuggestionsOnEnter.bindTo(re),G=()=>{const z=this.editor.getOption(1);U.set(z==="on"||z==="smart")};this._toDispose.add(this.editor.onDidChangeConfiguration(()=>G())),G()}dispose(){this._alternatives.dispose(),this._toDispose.dispose(),this.widget.dispose(),this.model.dispose(),this._lineSuffix.dispose(),this._onWillInsertSuggestItem.dispose()}_insertSuggestion($,J){if(!$||!$.item){this._alternatives.value.reset(),this.model.cancel(),this.model.clear();return}if(!this.editor.hasModel())return;const Q=c.SnippetController2.get(this.editor);if(!Q)return;this._onWillInsertSuggestItem.fire({item:$.item});const re=this.editor.getModel(),de=re.getAlternativeVersionId(),{item:he}=$,me=[],X=new y.CancellationTokenSource;J&1||this.editor.pushUndoStop();const U=this.getOverwriteInfo(he,!!(J&8));this._memoryService.memorize(re,this.editor.getPosition(),he);const G=he.isResolved;let z=-1,H=-1;if(Array.isArray(he.completion.additionalTextEdits)){this.model.cancel();const j=i.StableEditorScrollState.capture(this.editor);this.editor.executeEdits("suggestController.additionalTextEdits.sync",he.completion.additionalTextEdits.map(Z=>{let ee=u.Range.lift(Z.range);if(ee.startLineNumber===he.position.lineNumber&&ee.startColumn>he.position.column){const le=this.editor.getPosition().column-he.position.column,ue=le,ce=u.Range.spansMultipleLines(ee)?0:le;ee=new u.Range(ee.startLineNumber,ee.startColumn+ue,ee.endLineNumber,ee.endColumn+ce)}return t.EditOperation.replaceMove(ee,Z.text)})),j.restoreRelativeVerticalPositionOfCursor(this.editor)}else if(!G){const j=new b.StopWatch;let Z;const ee=re.onDidChangeContent(pe=>{if(pe.isFlush){X.cancel(),ee.dispose();return}for(const ve of pe.changes){const Ce=u.Range.getEndPosition(ve.range);(!Z||r.Position.isBefore(Ce,Z))&&(Z=Ce)}}),le=J;J|=2;let ue=!1;const ce=this.editor.onWillType(()=>{ce.dispose(),ue=!0,le&2||this.editor.pushUndoStop()});me.push(he.resolve(X.token).then(()=>{if(!he.completion.additionalTextEdits||X.token.isCancellationRequested)return;if(Z&&he.completion.additionalTextEdits.some(ve=>r.Position.isBefore(Z,u.Range.getStartPosition(ve.range))))return!1;ue&&this.editor.pushUndoStop();const pe=i.StableEditorScrollState.capture(this.editor);return this.editor.executeEdits("suggestController.additionalTextEdits.async",he.completion.additionalTextEdits.map(ve=>t.EditOperation.replaceMove(u.Range.lift(ve.range),ve.text))),pe.restoreRelativeVerticalPositionOfCursor(this.editor),(ue||!(le&2))&&this.editor.pushUndoStop(),!0}).then(pe=>{this._logService.trace("[suggest] async resolving of edits DONE (ms, applied?)",j.elapsed(),pe),H=pe===!0?1:pe===!1?0:-2}).finally(()=>{ee.dispose(),ce.dispose()}))}let{insertText:Y}=he.completion;if(he.completion.insertTextRules&4||(Y=d.SnippetParser.escape(Y)),this.model.cancel(),Q.insert(Y,{overwriteBefore:U.overwriteBefore,overwriteAfter:U.overwriteAfter,undoStopBefore:!1,undoStopAfter:!1,adjustWhitespace:!(he.completion.insertTextRules&1),clipboardText:$.model.clipboardText,overtypingCapturer:this._overtypingCapturer.value}),J&2||this.editor.pushUndoStop(),he.completion.command)if(he.completion.command.id===q.id)this.model.trigger({auto:!0,retrigger:!0});else{const j=new b.StopWatch;me.push(this._commandService.executeCommand(he.completion.command.id,...he.completion.command.arguments?[...he.completion.command.arguments]:[]).catch(Z=>{he.completion.extensionId?(0,E.onUnexpectedExternalError)(Z):(0,E.onUnexpectedError)(Z)}).finally(()=>{z=j.elapsed()}))}J&4&&this._alternatives.value.set($,j=>{for(X.cancel();re.canUndo();){de!==re.getAlternativeVersionId()&&re.undo(),this._insertSuggestion(j,3|(J&8?8:0));break}}),this._alertCompletionItem(he),Promise.all(me).finally(()=>{this._reportSuggestionAcceptedTelemetry(he,re,G,z,H),this.model.clear(),X.dispose()})}_reportSuggestionAcceptedTelemetry($,J,Q,re,de){var he,me,X;Math.floor(Math.random()*100)!==0&&this._telemetryService.publicLog2("suggest.acceptedSuggestion",{extensionId:(me=(he=$.extensionId)===null||he===void 0?void 0:he.value)!==null&&me!==void 0?me:"unknown",providerId:(X=$.provider._debugDisplayName)!==null&&X!==void 0?X:"unknown",kind:$.completion.kind,basenameHash:(0,R.hash)((0,M.basename)(J.uri)).toString(16),languageId:J.getLanguageId(),fileExtension:(0,M.extname)(J.uri),resolveInfo:$.provider.resolveCompletionItem?Q?1:0:-1,resolveDuration:$.resolveDuration,commandDuration:re,additionalEditsAsync:de})}getOverwriteInfo($,J){(0,a.assertType)(this.editor.hasModel());let Q=this.editor.getOption(117).insertMode==="replace";J&&(Q=!Q);const re=$.position.column-$.editStart.column,de=(Q?$.editReplaceEnd.column:$.editInsertEnd.column)-$.position.column,he=this.editor.getPosition().column-$.position.column,me=this._lineSuffix.value?this._lineSuffix.value.delta(this.editor.getPosition()):0;return{overwriteBefore:re+he,overwriteAfter:de+me}}_alertCompletionItem($){if((0,k.isNonEmptyArray)($.completion.additionalTextEdits)){const J=o.localize(0,null,$.textLabel,$.completion.additionalTextEdits.length);(0,L.alert)(J)}}triggerSuggest($,J,Q){this.editor.hasModel()&&(this.model.trigger({auto:J??!1,completionOptions:{providerFilter:$,kindFilter:Q?new Set:void 0}}),this.editor.revealPosition(this.editor.getPosition(),0),this.editor.focus())}triggerSuggestAndAcceptBest($){if(!this.editor.hasModel())return;const J=this.editor.getPosition(),Q=()=>{J.equals(this.editor.getPosition())&&this._commandService.executeCommand($.fallback)},re=de=>{if(de.completion.insertTextRules&4||de.completion.additionalTextEdits)return!0;const he=this.editor.getPosition(),me=de.editStart.column,X=he.column;return X-me!==de.completion.insertText.length?!0:this.editor.getModel().getValueInRange({startLineNumber:he.lineNumber,startColumn:me,endLineNumber:he.lineNumber,endColumn:X})!==de.completion.insertText};S.Event.once(this.model.onDidTrigger)(de=>{const he=[];S.Event.any(this.model.onDidTrigger,this.model.onDidCancel)(()=>{(0,_.dispose)(he),Q()},void 0,he),this.model.onDidSuggest(({completionModel:me})=>{if((0,_.dispose)(he),me.items.length===0){Q();return}const X=this._memoryService.select(this.editor.getModel(),this.editor.getPosition(),me.items),U=me.items[X];if(!re(U)){Q();return}this.editor.pushUndoStop(),this._insertSuggestion({index:X,item:U,model:me},7)},void 0,he)}),this.model.trigger({auto:!1,shy:!0}),this.editor.revealPosition(J,0),this.editor.focus()}acceptSelectedSuggestion($,J){const Q=this.widget.value.getFocusedItem();let re=0;$&&(re|=4),J&&(re|=8),this._insertSuggestion(Q,re)}acceptNextSuggestion(){this._alternatives.value.next()}acceptPrevSuggestion(){this._alternatives.value.prev()}cancelSuggestWidget(){this.model.cancel(),this.model.clear(),this.widget.value.hideWidget()}focusSuggestion(){this.widget.value.focusSelected()}selectNextSuggestion(){this.widget.value.selectNext()}selectNextPageSuggestion(){this.widget.value.selectNextPage()}selectLastSuggestion(){this.widget.value.selectLast()}selectPrevSuggestion(){this.widget.value.selectPrevious()}selectPrevPageSuggestion(){this.widget.value.selectPreviousPage()}selectFirstSuggestion(){this.widget.value.selectFirst()}toggleSuggestionDetails(){this.widget.value.toggleDetails()}toggleExplainMode(){this.widget.value.toggleExplainMode()}toggleSuggestionFocus(){this.widget.value.toggleDetailsFocus()}resetWidgetSize(){this.widget.value.resetPersistedSize()}forceRenderingAbove(){this.widget.value.forceRenderingAbove()}stopForceRenderingAbove(){this.widget.isInitialized&&this.widget.value.stopForceRenderingAbove()}registerSelector($){return this._selectors.register($)}};e.SuggestController=K,K.ID="editor.contrib.suggestController",e.SuggestController=K=B=ke([ge(1,s.ISuggestMemoryService),ge(2,g.ICommandService),ge(3,h.IContextKeyService),ge(4,m.IInstantiationService),ge(5,C.ILogService),ge(6,N.ITelemetryService)],K);class F{constructor($){this.prioritySelector=$,this._items=new Array}register($){if(this._items.indexOf($)!==-1)throw new Error("Value is already registered");return this._items.push($),this._items.sort((J,Q)=>this.prioritySelector(Q)-this.prioritySelector(J)),{dispose:()=>{const J=this._items.indexOf($);J>=0&&this._items.splice(J,1)}}}get itemsOrderedByPriorityDesc(){return this._items}}class q extends n.EditorAction{constructor(){super({id:q.id,label:o.localize(1,null),alias:"Trigger Suggest",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.writable,f.EditorContextKeys.hasCompletionItemProvider,w.Context.Visible.toNegated()),kbOpts:{kbExpr:f.EditorContextKeys.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[521,2087]},weight:100}})}run($,J,Q){const re=K.get(J);if(!re)return;let de;Q&&typeof Q=="object"&&Q.auto===!0&&(de=!0),re.triggerSuggest(void 0,de,void 0)}}e.TriggerSuggestAction=q,q.id="editor.action.triggerSuggest",(0,n.registerEditorContribution)(K.ID,K,2),(0,n.registerEditorAction)(q);const ie=100+90,ae=n.EditorCommand.bindToContribution(K.get);(0,n.registerEditorCommand)(new ae({id:"acceptSelectedSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion),handler(ne){ne.acceptSelectedSuggestion(!0,!1)},kbOpts:[{primary:2,kbExpr:h.ContextKeyExpr.and(w.Context.Visible,f.EditorContextKeys.textInputFocus),weight:ie},{primary:3,kbExpr:h.ContextKeyExpr.and(w.Context.Visible,f.EditorContextKeys.textInputFocus,w.Context.AcceptSuggestionsOnEnter,w.Context.MakesTextEdit),weight:ie}],menuOpts:[{menuId:w.suggestWidgetStatusbarMenu,title:o.localize(2,null),group:"left",order:1,when:w.Context.HasInsertAndReplaceRange.toNegated()},{menuId:w.suggestWidgetStatusbarMenu,title:o.localize(3,null),group:"left",order:1,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo("insert"))},{menuId:w.suggestWidgetStatusbarMenu,title:o.localize(4,null),group:"left",order:1,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo("replace"))}]})),(0,n.registerEditorCommand)(new ae({id:"acceptAlternativeSelectedSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,f.EditorContextKeys.textInputFocus,w.Context.HasFocusedSuggestion),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:1027,secondary:[1026]},handler(ne){ne.acceptSelectedSuggestion(!1,!0)},menuOpts:[{menuId:w.suggestWidgetStatusbarMenu,group:"left",order:2,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo("insert")),title:o.localize(5,null)},{menuId:w.suggestWidgetStatusbarMenu,group:"left",order:2,when:h.ContextKeyExpr.and(w.Context.HasInsertAndReplaceRange,w.Context.InsertMode.isEqualTo("replace")),title:o.localize(6,null)}]})),g.CommandsRegistry.registerCommandAlias("acceptSelectedSuggestionOnEnter","acceptSelectedSuggestion"),(0,n.registerEditorCommand)(new ae({id:"hideSuggestWidget",precondition:w.Context.Visible,handler:ne=>ne.cancelSuggestWidget(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:9,secondary:[1033]}})),(0,n.registerEditorCommand)(new ae({id:"selectNextSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectNextSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:18,secondary:[2066],mac:{primary:18,secondary:[2066,300]}}})),(0,n.registerEditorCommand)(new ae({id:"selectNextPageSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectNextPageSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:12,secondary:[2060]}})),(0,n.registerEditorCommand)(new ae({id:"selectLastSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectLastSuggestion()})),(0,n.registerEditorCommand)(new ae({id:"selectPrevSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectPrevSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:16,secondary:[2064],mac:{primary:16,secondary:[2064,302]}}})),(0,n.registerEditorCommand)(new ae({id:"selectPrevPageSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectPrevPageSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:11,secondary:[2059]}})),(0,n.registerEditorCommand)(new ae({id:"selectFirstSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,h.ContextKeyExpr.or(w.Context.MultipleSuggestions,w.Context.HasFocusedSuggestion.negate())),handler:ne=>ne.selectFirstSuggestion()})),(0,n.registerEditorCommand)(new ae({id:"focusSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion.negate()),handler:ne=>ne.focusSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[2087]}}})),(0,n.registerEditorCommand)(new ae({id:"focusAndAcceptSuggestion",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion.negate()),handler:ne=>{ne.focusSuggestion(),ne.acceptSelectedSuggestion(!0,!1)}})),(0,n.registerEditorCommand)(new ae({id:"toggleSuggestionDetails",precondition:h.ContextKeyExpr.and(w.Context.Visible,w.Context.HasFocusedSuggestion),handler:ne=>ne.toggleSuggestionDetails(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2058,secondary:[2087],mac:{primary:266,secondary:[2087]}},menuOpts:[{menuId:w.suggestWidgetStatusbarMenu,group:"right",order:1,when:h.ContextKeyExpr.and(w.Context.DetailsVisible,w.Context.CanResolve),title:o.localize(7,null)},{menuId:w.suggestWidgetStatusbarMenu,group:"right",order:1,when:h.ContextKeyExpr.and(w.Context.DetailsVisible.toNegated(),w.Context.CanResolve),title:o.localize(8,null)}]})),(0,n.registerEditorCommand)(new ae({id:"toggleExplainMode",precondition:w.Context.Visible,handler:ne=>ne.toggleExplainMode(),kbOpts:{weight:100,primary:2138}})),(0,n.registerEditorCommand)(new ae({id:"toggleSuggestionFocus",precondition:w.Context.Visible,handler:ne=>ne.toggleSuggestionFocus(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2570,mac:{primary:778}}})),(0,n.registerEditorCommand)(new ae({id:"insertBestCompletion",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.textInputFocus,h.ContextKeyExpr.equals("config.editor.tabCompletion","on"),l.WordContextKey.AtEnd,w.Context.Visible.toNegated(),D.SuggestAlternatives.OtherSuggestions.toNegated(),c.SnippetController2.InSnippetMode.toNegated()),handler:(ne,$)=>{ne.triggerSuggestAndAcceptBest((0,a.isObject)($)?{fallback:"tab",...$}:{fallback:"tab"})},kbOpts:{weight:ie,primary:2}})),(0,n.registerEditorCommand)(new ae({id:"insertNextSuggestion",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.textInputFocus,h.ContextKeyExpr.equals("config.editor.tabCompletion","on"),D.SuggestAlternatives.OtherSuggestions,w.Context.Visible.toNegated(),c.SnippetController2.InSnippetMode.toNegated()),handler:ne=>ne.acceptNextSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:2}})),(0,n.registerEditorCommand)(new ae({id:"insertPrevSuggestion",precondition:h.ContextKeyExpr.and(f.EditorContextKeys.textInputFocus,h.ContextKeyExpr.equals("config.editor.tabCompletion","on"),D.SuggestAlternatives.OtherSuggestions,w.Context.Visible.toNegated(),c.SnippetController2.InSnippetMode.toNegated()),handler:ne=>ne.acceptPrevSuggestion(),kbOpts:{weight:ie,kbExpr:f.EditorContextKeys.textInputFocus,primary:1026}})),(0,n.registerEditorAction)(class extends n.EditorAction{constructor(){super({id:"editor.action.resetSuggestSize",label:o.localize(9,null),alias:"Reset Suggest Widget Size",precondition:void 0})}run(ne,$){var J;(J=K.get($))===null||J===void 0||J.resetWidgetSize()}})}),define(se[928],oe([1,0,6,2,10,5,31,117,390,392,35,307,13,60]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestItemInfo=e.SuggestWidgetAdaptor=void 0;class t extends k.Disposable{get selectedItem(){return this._selectedItem}constructor(c,d,s,l){super(),this.editor=c,this.suggestControllerPreselector=d,this.checkModelVersion=s,this.onWillAccept=l,this.isSuggestWidgetVisible=!1,this.isShiftKeyPressed=!1,this._isActive=!1,this._currentSuggestItemInfo=void 0,this._selectedItem=(0,b.observableValue)(this,void 0),this._register(c.onKeyDown(g=>{g.shiftKey&&!this.isShiftKeyPressed&&(this.isShiftKeyPressed=!0,this.update(this._isActive))})),this._register(c.onKeyUp(g=>{g.shiftKey&&this.isShiftKeyPressed&&(this.isShiftKeyPressed=!1,this.update(this._isActive))}));const o=v.SuggestController.get(this.editor);if(o){this._register(o.registerSelector({priority:100,select:(m,C,w)=>{var D;(0,b.transaction)(M=>this.checkModelVersion(M));const I=this.editor.getModel();if(!I)return-1;const T=(D=this.suggestControllerPreselector())===null||D===void 0?void 0:D.removeCommonPrefix(I);if(!T)return-1;const A=y.Position.lift(C),P=w.map((M,R)=>{const O=r.fromSuggestion(o,I,A,M,this.isShiftKeyPressed).toSingleTextEdit().removeCommonPrefix(I),B=T.augments(O);return{index:R,valid:B,prefixLength:O.text.length,suggestItem:M}}).filter(M=>M&&M.valid&&M.prefixLength>0),N=(0,n.findFirstMaxBy)(P,(0,i.compareBy)(M=>M.prefixLength,i.numberComparator));return N?N.index:-1}}));let g=!1;const h=()=>{g||(g=!0,this._register(o.widget.value.onDidShow(()=>{this.isSuggestWidgetVisible=!0,this.update(!0)})),this._register(o.widget.value.onDidHide(()=>{this.isSuggestWidgetVisible=!1,this.update(!1)})),this._register(o.widget.value.onDidFocus(()=>{this.isSuggestWidgetVisible=!0,this.update(!0)})))};this._register(L.Event.once(o.model.onDidTrigger)(m=>{h()})),this._register(o.onWillInsertSuggestItem(m=>{const C=this.editor.getPosition(),w=this.editor.getModel();if(!C||!w)return;const D=r.fromSuggestion(o,w,C,m.item,this.isShiftKeyPressed);this.onWillAccept(D)}))}this.update(this._isActive)}update(c){const d=this.getSuggestItemInfo();(this._isActive!==c||!u(this._currentSuggestItemInfo,d))&&(this._isActive=c,this._currentSuggestItemInfo=d,(0,b.transaction)(s=>{this.checkModelVersion(s),this._selectedItem.set(this._isActive?this._currentSuggestItemInfo:void 0,s)}))}getSuggestItemInfo(){const c=v.SuggestController.get(this.editor);if(!c||!this.isSuggestWidgetVisible)return;const d=c.widget.value.getFocusedItem(),s=this.editor.getPosition(),l=this.editor.getModel();if(!(!d||!s||!l))return r.fromSuggestion(c,l,s,d.item,this.isShiftKeyPressed)}stopForceRenderingAbove(){const c=v.SuggestController.get(this.editor);c?.stopForceRenderingAbove()}forceRenderingAbove(){const c=v.SuggestController.get(this.editor);c?.forceRenderingAbove()}}e.SuggestWidgetAdaptor=t;class r{static fromSuggestion(c,d,s,l,o){let{insertText:g}=l.completion,h=!1;if(l.completion.insertTextRules&4){const C=new p.SnippetParser().parse(g);C.children.length<100&&_.SnippetSession.adjustWhitespace(d,s,!0,C),g=C.toString(),h=!0}const m=c.getOverwriteInfo(l,o);return new r(E.Range.fromPositions(s.delta(0,-m.overwriteBefore),s.delta(0,Math.max(m.overwriteAfter,0))),g,l.completion.kind,h)}constructor(c,d,s,l){this.range=c,this.insertText=d,this.completionItemKind=s,this.isSnippetText=l}equals(c){return this.range.equalsRange(c.range)&&this.insertText===c.insertText&&this.completionItemKind===c.completionItemKind&&this.isSnippetText===c.isSnippetText}toSelectedSuggestionInfo(){return new S.SelectedSuggestionInfo(this.range,this.insertText,this.completionItemKind,this.isSnippetText)}toSingleTextEdit(){return new a.SingleTextEdit(this.range,this.insertText)}}e.SuggestItemInfo=r;function u(f,c){return f===c?!0:!f||!c?!1:f.equals(c)}}),define(se[264],oe([1,0,7,48,2,35,191,10,79,18,216,765,240,257,927,928,696,122,25,27,15,8,34]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o){"use strict";var g;Object.defineProperty(e,"__esModule",{value:!0}),e.InlineCompletionsController=void 0;let h=g=class extends y.Disposable{static get(C){return C.getContribution(g.ID)}constructor(C,w,D,I,T,A,P,N,M){super(),this.editor=C,this._instantiationService=w,this._contextKeyService=D,this._configurationService=I,this._commandService=T,this._debounceService=A,this._languageFeaturesService=P,this._audioCueService=N,this._keybindingService=M,this.model=(0,E.disposableObservableValue)("inlineCompletionModel",void 0),this._textModelVersionId=(0,E.observableValue)(this,-1),this._cursorPosition=(0,E.observableValue)(this,new p.Position(1,1)),this._suggestWidgetAdaptor=this._register(new r.SuggestWidgetAdaptor(this.editor,()=>{var B,W;return(W=(B=this.model.get())===null||B===void 0?void 0:B.selectedInlineCompletion.get())===null||W===void 0?void 0:W.toSingleTextEdit(void 0)},B=>this.updateObservables(B,t.VersionIdChangeReason.Other),B=>{(0,E.transaction)(W=>{var V;this.updateObservables(W,t.VersionIdChangeReason.Other),(V=this.model.get())===null||V===void 0||V.handleSuggestAccepted(B)})})),this._enabled=(0,E.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(62).enabled),this._fontFamily=(0,E.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(62).fontFamily),this._ghostTextWidget=this._register(this._instantiationService.createInstance(a.GhostTextWidget,this.editor,{ghostText:this.model.map((B,W)=>B?.ghostText.read(W)),minReservedLineCount:(0,E.constObservable)(0),targetTextModel:this.model.map(B=>B?.textModel)})),this._debounceValue=this._debounceService.for(this._languageFeaturesService.inlineCompletionsProvider,"InlineCompletionsDebounce",{min:50,max:50}),this._playAudioCueSignal=(0,E.observableSignal)(this),this._isReadonly=(0,E.observableFromEvent)(this.editor.onDidChangeConfiguration,()=>this.editor.getOption(90)),this._textModel=(0,E.observableFromEvent)(this.editor.onDidChangeModel,()=>this.editor.getModel()),this._textModelIfWritable=(0,E.derived)(B=>this._isReadonly.read(B)?void 0:this._textModel.read(B)),this._register(new i.InlineCompletionContextKeys(this._contextKeyService,this.model)),this._register((0,E.autorun)(B=>{const W=this._textModelIfWritable.read(B);(0,E.transaction)(V=>{if(this.model.set(void 0,V),this.updateObservables(V,t.VersionIdChangeReason.Other),W){const K=w.createInstance(t.InlineCompletionsModel,W,this._suggestWidgetAdaptor.selectedItem,this._cursorPosition,this._textModelVersionId,this._debounceValue,(0,E.observableFromEvent)(C.onDidChangeConfiguration,()=>C.getOption(117).preview),(0,E.observableFromEvent)(C.onDidChangeConfiguration,()=>C.getOption(117).previewMode),(0,E.observableFromEvent)(C.onDidChangeConfiguration,()=>C.getOption(62).mode),this._enabled);this.model.set(K,V)}})}));const R=this._register((0,L.createStyleSheet2)());this._register((0,E.autorun)(B=>{const W=this._fontFamily.read(B);R.setStyle(W===""||W==="default"?"":` .monaco-editor .ghost-text-decoration, .monaco-editor .ghost-text-decoration-preview, .monaco-editor .ghost-text { font-family: ${W}; }`)}));const x=B=>{var W;return B.isUndoing?t.VersionIdChangeReason.Undo:B.isRedoing?t.VersionIdChangeReason.Redo:!((W=this.model.get())===null||W===void 0)&&W.isAcceptingPartially?t.VersionIdChangeReason.AcceptWord:t.VersionIdChangeReason.Other};this._register(C.onDidChangeModelContent(B=>(0,E.transaction)(W=>this.updateObservables(W,x(B))))),this._register(C.onDidChangeCursorPosition(B=>(0,E.transaction)(W=>{var V;this.updateObservables(W,t.VersionIdChangeReason.Other),(B.reason===3||B.source==="api")&&((V=this.model.get())===null||V===void 0||V.stop(W))}))),this._register(C.onDidType(()=>(0,E.transaction)(B=>{var W;this.updateObservables(B,t.VersionIdChangeReason.Other),this._enabled.get()&&((W=this.model.get())===null||W===void 0||W.trigger(B))}))),this._register(this._commandService.onDidExecuteCommand(B=>{new Set([S.CoreEditingCommands.Tab.id,S.CoreEditingCommands.DeleteLeft.id,S.CoreEditingCommands.DeleteRight.id,b.inlineSuggestCommitId,"acceptSelectedSuggestion"]).has(B.commandId)&&C.hasTextFocus()&&this._enabled.get()&&(0,E.transaction)(V=>{var K;(K=this.model.get())===null||K===void 0||K.trigger(V)})})),this._register(this.editor.onDidBlurEditorWidget(()=>{this._contextKeyService.getContextKeyValue("accessibleViewIsShown")||this._configurationService.getValue("editor.inlineSuggest.keepOnBlur")||C.getOption(62).keepOnBlur||n.InlineSuggestionHintsContentWidget.dropDownVisible||(0,E.transaction)(B=>{var W;(W=this.model.get())===null||W===void 0||W.stop(B)})})),this._register((0,E.autorun)(B=>{var W;const V=(W=this.model.read(B))===null||W===void 0?void 0:W.state.read(B);V?.suggestItem?V.ghostText.lineCount>=2&&this._suggestWidgetAdaptor.forceRenderingAbove():this._suggestWidgetAdaptor.stopForceRenderingAbove()})),this._register((0,y.toDisposable)(()=>{this._suggestWidgetAdaptor.stopForceRenderingAbove()}));let O;this._register((0,E.autorunHandleChanges)({handleChange:(B,W)=>(B.didChange(this._playAudioCueSignal)&&(O=void 0),!0)},async B=>{this._playAudioCueSignal.read(B);const W=this.model.read(B),V=W?.state.read(B);if(!W||!V||!V.inlineCompletion){O=void 0;return}if(V.inlineCompletion.semanticId!==O){O=V.inlineCompletion.semanticId;const K=W.textModel.getLineContent(V.ghostText.lineNumber);this._audioCueService.playAudioCue(f.AudioCue.inlineSuggestion).then(()=>{this.editor.getOption(8)&&this.provideScreenReaderUpdate(V.ghostText.renderForScreenReader(K))})}})),this._register(new n.InlineCompletionsHintsWidget(this.editor,this.model,this._instantiationService)),this._register(this._configurationService.onDidChangeConfiguration(B=>{B.affectsConfiguration("accessibility.verbosity.inlineCompletions")&&this.editor.updateOptions({inlineCompletionsAccessibilityVerbose:this._configurationService.getValue("accessibility.verbosity.inlineCompletions")})})),this.editor.updateOptions({inlineCompletionsAccessibilityVerbose:this._configurationService.getValue("accessibility.verbosity.inlineCompletions")})}playAudioCue(C){this._playAudioCueSignal.trigger(C)}provideScreenReaderUpdate(C){const w=this._contextKeyService.getContextKeyValue("accessibleViewIsShown"),D=this._keybindingService.lookupKeybinding("editor.action.accessibleView");let I;!w&&D&&this.editor.getOption(147)&&(I=(0,u.localize)(0,null,D.getAriaLabel())),I?(0,k.alert)(C+", "+I):(0,k.alert)(C)}updateObservables(C,w){var D,I;const T=this.editor.getModel();this._textModelVersionId.set((D=T?.getVersionId())!==null&&D!==void 0?D:-1,C,w),this._cursorPosition.set((I=this.editor.getPosition())!==null&&I!==void 0?I:new p.Position(1,1),C)}shouldShowHoverAt(C){var w;const D=(w=this.model.get())===null||w===void 0?void 0:w.ghostText.get();return D?D.parts.some(I=>C.containsPosition(new p.Position(D.lineNumber,I.column))):!1}shouldShowHoverAtViewZone(C){return this._ghostTextWidget.ownsViewZone(C)}};e.InlineCompletionsController=h,h.ID="editor.contrib.inlineCompletionsController",e.InlineCompletionsController=h=g=ke([ge(1,l.IInstantiationService),ge(2,s.IContextKeyService),ge(3,d.IConfigurationService),ge(4,c.ICommandService),ge(5,_.ILanguageFeatureDebounceService),ge(6,v.ILanguageFeaturesService),ge(7,f.IAudioCueService),ge(8,o.IKeybindingService)],h)}),define(se[929],oe([1,0,35,110,16,21,216,240,264,138,693,30,27,15]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ToggleAlwaysShowInlineSuggestionToolbar=e.HideInlineCompletion=e.AcceptInlineCompletion=e.AcceptNextLineOfInlineCompletion=e.AcceptNextWordOfInlineCompletion=e.TriggerInlineSuggestionAction=e.ShowPreviousInlineSuggestionAction=e.ShowNextInlineSuggestionAction=void 0;class t extends y.EditorAction{constructor(){super({id:t.ID,label:b.localize(0,null),alias:"Show Next Inline Suggestion",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100,primary:606}})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);(m=C?.model.get())===null||m===void 0||m.next()}}e.ShowNextInlineSuggestionAction=t,t.ID=S.showNextInlineSuggestionActionId;class r extends y.EditorAction{constructor(){super({id:r.ID,label:b.localize(1,null),alias:"Show Previous Inline Suggestion",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100,primary:604}})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);(m=C?.model.get())===null||m===void 0||m.previous()}}e.ShowPreviousInlineSuggestionAction=r,r.ID=S.showPreviousInlineSuggestionActionId;class u extends y.EditorAction{constructor(){super({id:"editor.action.inlineSuggest.trigger",label:b.localize(2,null),alias:"Trigger Inline Suggestion",precondition:E.EditorContextKeys.writable})}async run(g,h){const m=_.InlineCompletionsController.get(h);await(0,k.asyncTransaction)(async C=>{var w;await((w=m?.model.get())===null||w===void 0?void 0:w.triggerExplicitly(C)),m?.playAudioCue(C)})}}e.TriggerInlineSuggestionAction=u;class f extends y.EditorAction{constructor(){super({id:"editor.action.inlineSuggest.acceptNextWord",label:b.localize(3,null),alias:"Accept Next Word Of Inline Suggestion",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100+1,primary:2065,kbExpr:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible)},menuOpts:[{menuId:a.MenuId.InlineSuggestionToolbar,title:b.localize(4,null),group:"primary",order:2}]})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);await((m=C?.model.get())===null||m===void 0?void 0:m.acceptNextWord(C.editor))}}e.AcceptNextWordOfInlineCompletion=f;class c extends y.EditorAction{constructor(){super({id:"editor.action.inlineSuggest.acceptNextLine",label:b.localize(5,null),alias:"Accept Next Line Of Inline Suggestion",precondition:n.ContextKeyExpr.and(E.EditorContextKeys.writable,p.InlineCompletionContextKeys.inlineSuggestionVisible),kbOpts:{weight:100+1},menuOpts:[{menuId:a.MenuId.InlineSuggestionToolbar,title:b.localize(6,null),group:"secondary",order:2}]})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);await((m=C?.model.get())===null||m===void 0?void 0:m.acceptNextLine(C.editor))}}e.AcceptNextLineOfInlineCompletion=c;class d extends y.EditorAction{constructor(){super({id:S.inlineSuggestCommitId,label:b.localize(7,null),alias:"Accept Inline Suggestion",precondition:p.InlineCompletionContextKeys.inlineSuggestionVisible,menuOpts:[{menuId:a.MenuId.InlineSuggestionToolbar,title:b.localize(8,null),group:"primary",order:1}],kbOpts:{primary:2,weight:200,kbExpr:n.ContextKeyExpr.and(p.InlineCompletionContextKeys.inlineSuggestionVisible,E.EditorContextKeys.tabMovesFocus.toNegated(),p.InlineCompletionContextKeys.inlineSuggestionHasIndentationLessThanTabSize,v.Context.Visible.toNegated(),E.EditorContextKeys.hoverFocused.toNegated())}})}async run(g,h){var m;const C=_.InlineCompletionsController.get(h);C&&((m=C.model.get())===null||m===void 0||m.accept(C.editor),C.editor.focus())}}e.AcceptInlineCompletion=d;class s extends y.EditorAction{constructor(){super({id:s.ID,label:b.localize(9,null),alias:"Hide Inline Suggestion",precondition:p.InlineCompletionContextKeys.inlineSuggestionVisible,kbOpts:{weight:100,primary:9}})}async run(g,h){const m=_.InlineCompletionsController.get(h);(0,L.transaction)(C=>{var w;(w=m?.model.get())===null||w===void 0||w.stop(C)})}}e.HideInlineCompletion=s,s.ID="editor.action.inlineSuggest.hide";class l extends a.Action2{constructor(){super({id:l.ID,title:b.localize(10,null),f1:!1,precondition:void 0,menu:[{id:a.MenuId.InlineSuggestionToolbar,group:"secondary",order:10}],toggled:n.ContextKeyExpr.equals("config.editor.inlineSuggest.showToolbar","always")})}async run(g,h){const m=g.get(i.IConfigurationService),w=m.getValue("editor.inlineSuggest.showToolbar")==="always"?"onHover":"always";m.updateValue("editor.inlineSuggest.showToolbar",w)}}e.ToggleAlwaysShowInlineSuggestionToolbar=l,l.ID="editor.action.inlineSuggest.toggleAlwaysShowToolbar"}),define(se[930],oe([1,0,7,58,2,35,5,43,101,264,257,104,694,69,8,57,81]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.InlineCompletionsHoverParticipant=e.InlineCompletionsHover=void 0;class f{constructor(s,l,o){this.owner=s,this.range=l,this.controller=o}isValidForHoverAnchor(s){return s.type===1&&this.range.startColumn<=s.range.startColumn&&this.range.endColumn>=s.range.endColumn}}e.InlineCompletionsHover=f;let c=class{constructor(s,l,o,g,h,m){this._editor=s,this._languageService=l,this._openerService=o,this.accessibilityService=g,this._instantiationService=h,this._telemetryService=m,this.hoverOrdinal=4}suggestHoverAnchor(s){const l=v.InlineCompletionsController.get(this._editor);if(!l)return null;const o=s.target;if(o.type===8){const g=o.detail;if(l.shouldShowHoverAtViewZone(g.viewZoneId))return new _.HoverForeignElementAnchor(1e3,this,S.Range.fromPositions(this._editor.getModel().validatePosition(g.positionBefore||g.position)),s.event.posx,s.event.posy,!1)}return o.type===7&&l.shouldShowHoverAt(o.range)?new _.HoverForeignElementAnchor(1e3,this,o.range,s.event.posx,s.event.posy,!1):o.type===6&&o.detail.mightBeForeignElement&&l.shouldShowHoverAt(o.range)?new _.HoverForeignElementAnchor(1e3,this,o.range,s.event.posx,s.event.posy,!1):null}computeSync(s,l){if(this._editor.getOption(62).showToolbar!=="onHover")return[];const o=v.InlineCompletionsController.get(this._editor);return o&&o.shouldShowHoverAt(s.range)?[new f(this,s.range,o)]:[]}renderHoverParts(s,l){const o=new y.DisposableStore,g=l[0];this._telemetryService.publicLog2("inlineCompletionHover.shown"),this.accessibilityService.isScreenReaderOptimized()&&!this._editor.getOption(8)&&this.renderScreenReaderText(s,g,o);const h=g.controller.model.get(),m=this._instantiationService.createInstance(b.InlineSuggestionHintsContentWidget,this._editor,!1,(0,E.constObservable)(null),h.selectedInlineCompletionIndex,h.inlineCompletionsCount,h.selectedInlineCompletion.map(C=>{var w;return(w=C?.inlineCompletion.source.inlineCompletions.commands)!==null&&w!==void 0?w:[]}));return s.fragment.appendChild(m.getDomNode()),h.triggerExplicitly(),o.add(m),o}renderScreenReaderText(s,l,o){const g=L.$,h=g("div.hover-row.markdown-hover"),m=L.append(h,g("div.hover-contents",{["aria-live"]:"assertive"})),C=o.add(new a.MarkdownRenderer({editor:this._editor},this._languageService,this._openerService)),w=D=>{o.add(C.onDidRenderAsync(()=>{m.className="hover-contents code-hover-contents",s.onContentsChanged()}));const I=i.localize(0,null),T=o.add(C.render(new k.MarkdownString().appendText(I).appendCodeblock("text",D)));m.replaceChildren(T.element)};o.add((0,E.autorun)(D=>{var I;const T=(I=l.controller.model.read(D))===null||I===void 0?void 0:I.ghostText.read(D);if(T){const A=this._editor.getModel().getLineContent(T.lineNumber);w(T.renderForScreenReader(A))}else L.reset(m)})),s.fragment.appendChild(h)}};e.InlineCompletionsHoverParticipant=c,e.InlineCompletionsHoverParticipant=c=ke([ge(1,p.ILanguageService),ge(2,r.IOpenerService),ge(3,n.IAccessibilityService),ge(4,t.IInstantiationService),ge(5,u.ITelemetryService)],c)}),define(se[931],oe([1,0,16,101,929,930,264,30]),function(te,e,L,k,y,E,S,p){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),(0,L.registerEditorContribution)(S.InlineCompletionsController.ID,S.InlineCompletionsController,3),(0,L.registerEditorAction)(y.TriggerInlineSuggestionAction),(0,L.registerEditorAction)(y.ShowNextInlineSuggestionAction),(0,L.registerEditorAction)(y.ShowPreviousInlineSuggestionAction),(0,L.registerEditorAction)(y.AcceptNextWordOfInlineCompletion),(0,L.registerEditorAction)(y.AcceptNextLineOfInlineCompletion),(0,L.registerEditorAction)(y.AcceptInlineCompletion),(0,L.registerEditorAction)(y.HideInlineCompletion),(0,p.registerAction2)(y.ToggleAlwaysShowInlineSuggestionToolbar),k.HoverParticipantRegistry.register(E.InlineCompletionsHoverParticipant)}),define(se[932],oe([1,0,19,71,52,2,33,5,131,18,311,138,358,391,312,103]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.SuggestInlineCompletions=void 0;class u{constructor(s,l,o,g,h,m){this.range=s,this.insertText=l,this.filterText=o,this.additionalTextEdits=g,this.command=h,this.completion=m}}let f=class extends E.RefCountedDisposable{constructor(s,l,o,g,h,m){super(h.disposable),this.model=s,this.line=l,this.word=o,this.completionModel=g,this._suggestMemoryService=m}canBeReused(s,l,o){return this.model===s&&this.line===l&&this.word.word.length>0&&this.word.startColumn===o.startColumn&&this.word.endColumn=0&&w.resolve(L.CancellationToken.None)}return l}};f=ke([ge(5,i.ISuggestMemoryService)],f);let c=class extends E.Disposable{constructor(s,l,o,g){super(),this._languageFeatureService=s,this._clipboardService=l,this._suggestMemoryService=o,this._editorService=g,this._store.add(s.inlineCompletionsProvider.register("*",this))}async provideInlineCompletions(s,l,o,g){var h;if(o.selectedSuggestionInfo)return;let m;for(const N of this._editorService.listCodeEditors())if(N.getModel()===s){m=N;break}if(!m)return;const C=m.getOption(88);if(a.QuickSuggestionsOptions.isAllOff(C))return;s.tokenization.tokenizeIfCheap(l.lineNumber);const w=s.tokenization.getLineTokens(l.lineNumber),D=w.getStandardTokenType(w.findTokenIndexAtOffset(Math.max(l.column-1-1,0)));if(a.QuickSuggestionsOptions.valueFor(C,D)!=="inline")return;let I=s.getWordAtPosition(l),T;if(I?.word||(T=this._getTriggerCharacterInfo(s,l)),!I?.word&&!T||(I||(I=s.getWordUntilPosition(l)),I.endColumn!==l.column))return;let A;const P=s.getValueInRange(new p.Range(l.lineNumber,1,l.lineNumber,l.column));if(!T&&(!((h=this._lastResult)===null||h===void 0)&&h.canBeReused(s,l.lineNumber,I))){const N=new b.LineContext(P,l.column-this._lastResult.word.endColumn);this._lastResult.completionModel.lineContext=N,this._lastResult.acquire(),A=this._lastResult}else{const N=await(0,a.provideSuggestionItems)(this._languageFeatureService.completionProvider,s,l,new a.CompletionOptions(void 0,n.SuggestModel.createSuggestFilter(m).itemKind,T?.providers),T&&{triggerKind:1,triggerCharacter:T.ch},g);let M;N.needsClipboard&&(M=await this._clipboardService.readText());const R=new b.CompletionModel(N.items,l.column,new b.LineContext(P,0),t.WordDistance.None,m.getOption(117),m.getOption(111),{boostFullMatch:!1,firstMatchCanBeWeak:!1},M);A=new f(s,l.lineNumber,I,R,N,this._suggestMemoryService)}return this._lastResult=A,A}handleItemDidShow(s,l){l.completion.resolve(L.CancellationToken.None)}freeInlineCompletions(s){s.release()}_getTriggerCharacterInfo(s,l){var o;const g=s.getValueInRange(p.Range.fromPositions({lineNumber:l.lineNumber,column:l.column-1},l)),h=new Set;for(const m of this._languageFeatureService.completionProvider.all(s))!((o=m.triggerCharacters)===null||o===void 0)&&o.includes(g)&&h.add(m);if(h.size!==0)return{providers:h,ch:g}}};e.SuggestInlineCompletions=c,e.SuggestInlineCompletions=c=ke([ge(0,v.ILanguageFeaturesService),ge(1,r.IClipboardService),ge(2,i.ISuggestMemoryService),ge(3,S.ICodeEditorService)],c),(0,_.registerEditorFeature)(c)}),define(se[393],oe([1,0,8]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.IWorkspaceTrustManagementService=void 0,e.IWorkspaceTrustManagementService=(0,L.createDecorator)("workspaceTrustManagementService")}),define(se[933],oe([1,0,14,26,58,2,17,11,16,36,38,296,121,43,336,101,253,845,725,27,8,57,70,82,393,481]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.ShowExcludeOptions=e.DisableHighlightingOfNonBasicAsciiCharactersAction=e.DisableHighlightingOfInvisibleCharactersAction=e.DisableHighlightingOfAmbiguousCharactersAction=e.DisableHighlightingInStringsAction=e.DisableHighlightingInCommentsAction=e.UnicodeHighlighterHoverParticipant=e.UnicodeHighlighter=e.warningIcon=void 0,e.warningIcon=(0,g.registerIcon)("extensions-warning-message",k.Codicon.warning,c.localize(0,null));let m=class extends E.Disposable{constructor(ne,$,J,Q){super(),this._editor=ne,this._editorWorkerService=$,this._workspaceTrustService=J,this._highlighter=null,this._bannerClosed=!1,this._updateState=re=>{if(re&&re.hasMore){if(this._bannerClosed)return;const de=Math.max(re.ambiguousCharacterCount,re.nonBasicAsciiCharacterCount,re.invisibleCharacterCount);let he;if(re.nonBasicAsciiCharacterCount>=de)he={message:c.localize(1,null),command:new V};else if(re.ambiguousCharacterCount>=de)he={message:c.localize(2,null),command:new B};else if(re.invisibleCharacterCount>=de)he={message:c.localize(3,null),command:new W};else throw new Error("Unreachable");this._bannerController.show({id:"unicodeHighlightBanner",message:he.message,icon:e.warningIcon,actions:[{label:he.command.shortLabel,href:`command:${he.command.id}`}],onClose:()=>{this._bannerClosed=!0}})}else this._bannerController.hide()},this._bannerController=this._register(Q.createInstance(f.BannerController,ne)),this._register(this._editor.onDidChangeModel(()=>{this._bannerClosed=!1,this._updateHighlighter()})),this._options=ne.getOption(124),this._register(J.onDidChangeTrust(re=>{this._updateHighlighter()})),this._register(ne.onDidChangeConfiguration(re=>{re.hasChanged(124)&&(this._options=ne.getOption(124),this._updateHighlighter())})),this._updateHighlighter()}dispose(){this._highlighter&&(this._highlighter.dispose(),this._highlighter=null),super.dispose()}_updateHighlighter(){if(this._updateState(null),this._highlighter&&(this._highlighter.dispose(),this._highlighter=null),!this._editor.hasModel())return;const ne=C(this._workspaceTrustService.isWorkspaceTrusted(),this._options);if([ne.nonBasicASCII,ne.ambiguousCharacters,ne.invisibleCharacters].every(J=>J===!1))return;const $={nonBasicASCII:ne.nonBasicASCII,ambiguousCharacters:ne.ambiguousCharacters,invisibleCharacters:ne.invisibleCharacters,includeComments:ne.includeComments,includeStrings:ne.includeStrings,allowedCodePoints:Object.keys(ne.allowedCharacters).map(J=>J.codePointAt(0)),allowedLocales:Object.keys(ne.allowedLocales).map(J=>J==="_os"?new Intl.NumberFormat().resolvedOptions().locale:J==="_vscode"?S.language:J)};this._editorWorkerService.canComputeUnicodeHighlights(this._editor.getModel().uri)?this._highlighter=new w(this._editor,$,this._updateState,this._editorWorkerService):this._highlighter=new D(this._editor,$,this._updateState)}getDecorationInfo(ne){return this._highlighter?this._highlighter.getDecorationInfo(ne):null}};e.UnicodeHighlighter=m,m.ID="editor.contrib.unicodeHighlighter",e.UnicodeHighlighter=m=ke([ge(1,i.IEditorWorkerService),ge(2,h.IWorkspaceTrustManagementService),ge(3,s.IInstantiationService)],m);function C(ae,ne){return{nonBasicASCII:ne.nonBasicASCII===v.inUntrustedWorkspace?!ae:ne.nonBasicASCII,ambiguousCharacters:ne.ambiguousCharacters,invisibleCharacters:ne.invisibleCharacters,includeComments:ne.includeComments===v.inUntrustedWorkspace?!ae:ne.includeComments,includeStrings:ne.includeStrings===v.inUntrustedWorkspace?!ae:ne.includeStrings,allowedCharacters:ne.allowedCharacters,allowedLocales:ne.allowedLocales}}let w=class extends E.Disposable{constructor(ne,$,J,Q){super(),this._editor=ne,this._options=$,this._updateState=J,this._editorWorkerService=Q,this._model=this._editor.getModel(),this._decorations=this._editor.createDecorationsCollection(),this._updateSoon=this._register(new L.RunOnceScheduler(()=>this._update(),250)),this._register(this._editor.onDidChangeModelContent(()=>{this._updateSoon.schedule()})),this._updateSoon.schedule()}dispose(){this._decorations.clear(),super.dispose()}_update(){if(this._model.isDisposed())return;if(!this._model.mightContainNonBasicASCII()){this._decorations.clear();return}const ne=this._model.getVersionId();this._editorWorkerService.computedUnicodeHighlights(this._model.uri,this._options).then($=>{if(this._model.isDisposed()||this._model.getVersionId()!==ne)return;this._updateState($);const J=[];if(!$.hasMore)for(const Q of $.ranges)J.push({range:Q,options:R.instance.getDecorationFromOptions(this._options)});this._decorations.set(J)})}getDecorationInfo(ne){if(!this._decorations.has(ne))return null;const $=this._editor.getModel();if(!(0,t.isModelDecorationVisible)($,ne))return null;const J=$.getValueInRange(ne.range);return{reason:M(J,this._options),inComment:(0,t.isModelDecorationInComment)($,ne),inString:(0,t.isModelDecorationInString)($,ne)}}};w=ke([ge(3,i.IEditorWorkerService)],w);class D extends E.Disposable{constructor(ne,$,J){super(),this._editor=ne,this._options=$,this._updateState=J,this._model=this._editor.getModel(),this._decorations=this._editor.createDecorationsCollection(),this._updateSoon=this._register(new L.RunOnceScheduler(()=>this._update(),250)),this._register(this._editor.onDidLayoutChange(()=>{this._updateSoon.schedule()})),this._register(this._editor.onDidScrollChange(()=>{this._updateSoon.schedule()})),this._register(this._editor.onDidChangeHiddenAreas(()=>{this._updateSoon.schedule()})),this._register(this._editor.onDidChangeModelContent(()=>{this._updateSoon.schedule()})),this._updateSoon.schedule()}dispose(){this._decorations.clear(),super.dispose()}_update(){if(this._model.isDisposed())return;if(!this._model.mightContainNonBasicASCII()){this._decorations.clear();return}const ne=this._editor.getVisibleRanges(),$=[],J={ranges:[],ambiguousCharacterCount:0,invisibleCharacterCount:0,nonBasicAsciiCharacterCount:0,hasMore:!1};for(const Q of ne){const re=a.UnicodeTextModelHighlighter.computeUnicodeHighlights(this._model,this._options,Q);for(const de of re.ranges)J.ranges.push(de);J.ambiguousCharacterCount+=J.ambiguousCharacterCount,J.invisibleCharacterCount+=J.invisibleCharacterCount,J.nonBasicAsciiCharacterCount+=J.nonBasicAsciiCharacterCount,J.hasMore=J.hasMore||re.hasMore}if(!J.hasMore)for(const Q of J.ranges)$.push({range:Q,options:R.instance.getDecorationFromOptions(this._options)});this._updateState(J),this._decorations.set($)}getDecorationInfo(ne){if(!this._decorations.has(ne))return null;const $=this._editor.getModel(),J=$.getValueInRange(ne.range);return(0,t.isModelDecorationVisible)($,ne)?{reason:M(J,this._options),inComment:(0,t.isModelDecorationInComment)($,ne),inString:(0,t.isModelDecorationInString)($,ne)}:null}}const I=c.localize(4,null);let T=class{constructor(ne,$,J){this._editor=ne,this._languageService=$,this._openerService=J,this.hoverOrdinal=5}computeSync(ne,$){if(!this._editor.hasModel()||ne.type!==1)return[];const J=this._editor.getModel(),Q=this._editor.getContribution(m.ID);if(!Q)return[];const re=[],de=new Set;let he=300;for(const me of $){const X=Q.getDecorationInfo(me);if(!X)continue;const G=J.getValueInRange(me.range).codePointAt(0),z=P(G);let H;switch(X.reason.kind){case 0:{(0,p.isBasicASCII)(X.reason.confusableWith)?H=c.localize(5,null,z,P(X.reason.confusableWith.codePointAt(0))):H=c.localize(6,null,z,P(X.reason.confusableWith.codePointAt(0)));break}case 1:H=c.localize(7,null,z);break;case 2:H=c.localize(8,null,z);break}if(de.has(H))continue;de.add(H);const Y={codePoint:G,reason:X.reason,inComment:X.inComment,inString:X.inString},j=c.localize(9,null),Z=`command:${K.ID}?${encodeURIComponent(JSON.stringify(Y))}`,ee=new y.MarkdownString("",!0).appendMarkdown(H).appendText(" ").appendLink(Z,j,I);re.push(new u.MarkdownHover(this,me.range,[ee],!1,he++))}return re}renderHoverParts(ne,$){return(0,u.renderMarkdownHovers)(ne,$,this._editor,this._languageService,this._openerService)}};e.UnicodeHighlighterHoverParticipant=T,e.UnicodeHighlighterHoverParticipant=T=ke([ge(1,n.ILanguageService),ge(2,l.IOpenerService)],T);function A(ae){return`U+${ae.toString(16).padStart(4,"0")}`}function P(ae){let ne=`\`${A(ae)}\``;return p.InvisibleCharacters.isInvisibleCharacter(ae)||(ne+=` "${`${N(ae)}`}"`),ne}function N(ae){return ae===96?"`` ` ``":"`"+String.fromCodePoint(ae)+"`"}function M(ae,ne){return a.UnicodeTextModelHighlighter.computeUnicodeHighlightReason(ae,ne)}class R{constructor(){this.map=new Map}getDecorationFromOptions(ne){return this.getDecoration(!ne.includeComments,!ne.includeStrings)}getDecoration(ne,$){const J=`${ne}${$}`;let Q=this.map.get(J);return Q||(Q=b.ModelDecorationOptions.createDynamic({description:"unicode-highlight",stickiness:1,className:"unicode-highlight",showIfCollapsed:!0,overviewRuler:null,minimap:null,hideInCommentTokens:ne,hideInStringTokens:$}),this.map.set(J,Q)),Q}}R.instance=new R;class x extends _.EditorAction{constructor(){super({id:B.ID,label:c.localize(11,null),alias:"Disable highlighting of characters in comments",precondition:void 0}),this.shortLabel=c.localize(10,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.includeComments,!1,2)}}e.DisableHighlightingInCommentsAction=x;class O extends _.EditorAction{constructor(){super({id:B.ID,label:c.localize(13,null),alias:"Disable highlighting of characters in strings",precondition:void 0}),this.shortLabel=c.localize(12,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.includeStrings,!1,2)}}e.DisableHighlightingInStringsAction=O;class B extends _.EditorAction{constructor(){super({id:B.ID,label:c.localize(15,null),alias:"Disable highlighting of ambiguous characters",precondition:void 0}),this.shortLabel=c.localize(14,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.ambiguousCharacters,!1,2)}}e.DisableHighlightingOfAmbiguousCharactersAction=B,B.ID="editor.action.unicodeHighlight.disableHighlightingOfAmbiguousCharacters";class W extends _.EditorAction{constructor(){super({id:W.ID,label:c.localize(17,null),alias:"Disable highlighting of invisible characters",precondition:void 0}),this.shortLabel=c.localize(16,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.invisibleCharacters,!1,2)}}e.DisableHighlightingOfInvisibleCharactersAction=W,W.ID="editor.action.unicodeHighlight.disableHighlightingOfInvisibleCharacters";class V extends _.EditorAction{constructor(){super({id:V.ID,label:c.localize(19,null),alias:"Disable highlighting of non basic ASCII characters",precondition:void 0}),this.shortLabel=c.localize(18,null)}async run(ne,$,J){const Q=ne?.get(d.IConfigurationService);Q&&this.runAction(Q)}async runAction(ne){await ne.updateValue(v.unicodeHighlightConfigKeys.nonBasicASCII,!1,2)}}e.DisableHighlightingOfNonBasicAsciiCharactersAction=V,V.ID="editor.action.unicodeHighlight.disableHighlightingOfNonBasicAsciiCharacters";class K extends _.EditorAction{constructor(){super({id:K.ID,label:c.localize(20,null),alias:"Show Exclude Options",precondition:void 0})}async run(ne,$,J){const{codePoint:Q,reason:re,inString:de,inComment:he}=J,me=String.fromCodePoint(Q),X=ne.get(o.IQuickInputService),U=ne.get(d.IConfigurationService);function G(Y){return p.InvisibleCharacters.isInvisibleCharacter(Y)?c.localize(21,null,A(Y)):c.localize(22,null,`${A(Y)} "${me}"`)}const z=[];if(re.kind===0)for(const Y of re.notAmbiguousInLocales)z.push({label:c.localize(23,null,Y),run:async()=>{q(U,[Y])}});if(z.push({label:G(Q),run:()=>F(U,[Q])}),he){const Y=new x;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else if(de){const Y=new O;z.push({label:Y.label,run:async()=>Y.runAction(U)})}if(re.kind===0){const Y=new B;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else if(re.kind===1){const Y=new W;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else if(re.kind===2){const Y=new V;z.push({label:Y.label,run:async()=>Y.runAction(U)})}else ie(re);const H=await X.pick(z,{title:I});H&&await H.run()}}e.ShowExcludeOptions=K,K.ID="editor.action.unicodeHighlight.showExcludeOptions";async function F(ae,ne){const $=ae.getValue(v.unicodeHighlightConfigKeys.allowedCharacters);let J;typeof $=="object"&&$?J=$:J={};for(const Q of ne)J[String.fromCodePoint(Q)]=!0;await ae.updateValue(v.unicodeHighlightConfigKeys.allowedCharacters,J,2)}async function q(ae,ne){var $;const J=($=ae.inspect(v.unicodeHighlightConfigKeys.allowedLocales).user)===null||$===void 0?void 0:$.value;let Q;typeof J=="object"&&J?Q=Object.assign({},J):Q={};for(const re of ne)Q[re]=!0;await ae.updateValue(v.unicodeHighlightConfigKeys.allowedLocales,Q,2)}function ie(ae){throw new Error(`Unexpected value: ${ae}`)}(0,_.registerEditorAction)(B),(0,_.registerEditorAction)(W),(0,_.registerEditorAction)(V),(0,_.registerEditorAction)(K),(0,_.registerEditorContribution)(m.ID,m,1),r.HoverParticipantRegistry.register(T)}),define(se[934],oe([1,0,191,194,886,810,889,811,812,902,891,893,916,900,813,923,814,894,924,925,377,261,817,818,780,931,262,263,384,382,385,820,918,901,821,822,904,905,823,910,844,869,870,871,825,196,920,392,932,826,800,933,827,911,364,828,824,779,96,177]),function(te,e){"use strict";Object.defineProperty(e,"__esModule",{value:!0})}),define(se[265],oe([1,0,11,7,46,6,125,2,17,100,22,136,246,74,10,5,51,68,189,25,27,356,15,162,8,775,34,347,124,348,776,164,50,88,81,169,123,96,49,33,64,393,59,778,795,878,45,785,121,247,43,864,237,883,880,372,137,777,69,30,806,781,103,772,236,773,163,192,97,784,57,70,92,799,122,782,131,12,243,44,32,371,349,922,79,865,763,852]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P,N,M,R,x,O,B,W,V,K,F,q,ie,ae,ne,$,J,Q,re,de,he,me,X,U,G,z,H,Y,j,Z,ee,le,ue,ce,pe,ve,Ce,Se,_e,Ee,Ae,xe,Be,De,Ie,fe,be,Ne){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.StandaloneServices=e.updateConfigurationService=e.StandaloneConfigurationService=e.StandaloneKeybindingService=e.StandaloneCommandService=e.StandaloneNotificationService=void 0;class Pe{constructor(Fe){this.disposed=!1,this.model=Fe,this._onWillDispose=new E.Emitter}get textEditorModel(){return this.model}dispose(){this.disposed=!0,this._onWillDispose.fire()}}let ze=class{constructor(Fe){this.modelService=Fe}createModelReference(Fe){const We=this.modelService.getModel(Fe);return We?Promise.resolve(new p.ImmortalReference(new Pe(We))):Promise.reject(new Error("Model not found"))}};ze=ke([ge(0,u.IModelService)],ze);class Ke{show(){return Ke.NULL_PROGRESS_RUNNER}async showWhile(Fe,We){await Fe}}Ke.NULL_PROGRESS_RUNNER={done:()=>{},total:()=>{},worked:()=>{}};class je{withProgress(Fe,We,He){return We({report:()=>{}})}}class Je{constructor(){this.isExtensionDevelopment=!1,this.isBuilt=!1}}class rt{async confirm(Fe){return{confirmed:this.doConfirm(Fe.message,Fe.detail),checkboxChecked:!1}}doConfirm(Fe,We){let He=Fe;return We&&(He=He+` `+We),Ne.mainWindow.confirm(He)}async prompt(Fe){var We,He;let Ue;if(this.doConfirm(Fe.message,Fe.detail)){const Xe=[...(We=Fe.buttons)!==null&&We!==void 0?We:[]];Fe.cancelButton&&typeof Fe.cancelButton!="string"&&typeof Fe.cancelButton!="boolean"&&Xe.push(Fe.cancelButton),Ue=await((He=Xe[0])===null||He===void 0?void 0:He.run({checkboxChecked:!1}))}return{result:Ue}}async error(Fe,We){await this.prompt({type:v.default.Error,message:Fe,detail:We})}}class et{info(Fe){return this.notify({severity:v.default.Info,message:Fe})}warn(Fe){return this.notify({severity:v.default.Warning,message:Fe})}error(Fe){return this.notify({severity:v.default.Error,message:Fe})}notify(Fe){switch(Fe.severity){case v.default.Error:console.error(Fe.message);break;case v.default.Warning:console.warn(Fe.message);break;default:console.log(Fe.message);break}return et.NO_OP}prompt(Fe,We,He,Ue){return et.NO_OP}status(Fe,We){return p.Disposable.None}}e.StandaloneNotificationService=et,et.NO_OP=new P.NoOpNotification;let st=class{constructor(Fe){this._onWillExecuteCommand=new E.Emitter,this._onDidExecuteCommand=new E.Emitter,this.onDidExecuteCommand=this._onDidExecuteCommand.event,this._instantiationService=Fe}executeCommand(Fe,...We){const He=d.CommandsRegistry.getCommand(Fe);if(!He)return Promise.reject(new Error(`command '${Fe}' not found`));try{this._onWillExecuteCommand.fire({commandId:Fe,args:We});const Ue=this._instantiationService.invokeFunction.apply(this._instantiationService,[He.handler,...We]);return this._onDidExecuteCommand.fire({commandId:Fe,args:We}),Promise.resolve(Ue)}catch(Ue){return Promise.reject(Ue)}}};e.StandaloneCommandService=st,e.StandaloneCommandService=st=ke([ge(0,h.IInstantiationService)],st);let Qe=class extends m.AbstractKeybindingService{constructor(Fe,We,He,Ue,tt,Xe){super(Fe,We,He,Ue,tt),this._cachedResolver=null,this._dynamicKeybindings=[],this._domNodeListeners=[];const dt=ut=>{const wt=new p.DisposableStore;wt.add(k.addDisposableListener(ut,k.EventType.KEY_DOWN,Dt=>{const yt=new y.StandardKeyboardEvent(Dt);this._dispatch(yt,yt.target)&&(yt.preventDefault(),yt.stopPropagation())})),wt.add(k.addDisposableListener(ut,k.EventType.KEY_UP,Dt=>{const yt=new y.StandardKeyboardEvent(Dt);this._singleModifierDispatch(yt,yt.target)&&yt.preventDefault()})),this._domNodeListeners.push(new ft(ut,wt))},it=ut=>{for(let wt=0;wt{ut.getOption(61)||dt(ut.getContainerDomNode())},ot=ut=>{ut.getOption(61)||it(ut.getContainerDomNode())};this._register(Xe.onCodeEditorAdd(nt)),this._register(Xe.onCodeEditorRemove(ot)),Xe.listCodeEditors().forEach(nt);const ht=ut=>{dt(ut.getContainerDomNode())},St=ut=>{it(ut.getContainerDomNode())};this._register(Xe.onDiffEditorAdd(ht)),this._register(Xe.onDiffEditorRemove(St)),Xe.listDiffEditors().forEach(ht)}addDynamicKeybinding(Fe,We,He,Ue){return(0,p.combinedDisposable)(d.CommandsRegistry.registerCommand(Fe,He),this.addDynamicKeybindings([{keybinding:We,command:Fe,when:Ue}]))}addDynamicKeybindings(Fe){const We=Fe.map(He=>{var Ue;return{keybinding:(0,S.decodeKeybinding)(He.keybinding,_.OS),command:(Ue=He.command)!==null&&Ue!==void 0?Ue:null,commandArgs:He.commandArgs,when:He.when,weight1:1e3,weight2:0,extensionId:null,isBuiltinExtension:!1}});return this._dynamicKeybindings=this._dynamicKeybindings.concat(We),this.updateResolver(),(0,p.toDisposable)(()=>{for(let He=0;Hethis._log(He))}return this._cachedResolver}_documentHasFocus(){return Ne.mainWindow.document.hasFocus()}_toNormalizedKeybindingItems(Fe,We){const He=[];let Ue=0;for(const tt of Fe){const Xe=tt.when||void 0,dt=tt.keybinding;if(!dt)He[Ue++]=new I.ResolvedKeybindingItem(void 0,tt.command,tt.commandArgs,Xe,We,null,!1);else{const it=T.USLayoutResolvedKeybinding.resolveKeybinding(dt,_.OS);for(const nt of it)He[Ue++]=new I.ResolvedKeybindingItem(nt,tt.command,tt.commandArgs,Xe,We,null,!1)}}return He}resolveKeyboardEvent(Fe){const We=new S.KeyCodeChord(Fe.ctrlKey,Fe.shiftKey,Fe.altKey,Fe.metaKey,Fe.keyCode);return new T.USLayoutResolvedKeybinding([We],_.OS)}};e.StandaloneKeybindingService=Qe,e.StandaloneKeybindingService=Qe=ke([ge(0,o.IContextKeyService),ge(1,d.ICommandService),ge(2,M.ITelemetryService),ge(3,P.INotificationService),ge(4,V.ILogService),ge(5,W.ICodeEditorService)],Qe);class ft extends p.Disposable{constructor(Fe,We){super(),this.domNode=Fe,this._register(We)}}function at(qe){return qe&&typeof qe=="object"&&(!qe.overrideIdentifier||typeof qe.overrideIdentifier=="string")&&(!qe.resource||qe.resource instanceof b.URI)}class ct{constructor(){this._onDidChangeConfiguration=new E.Emitter,this.onDidChangeConfiguration=this._onDidChangeConfiguration.event;const Fe=new xe.DefaultConfiguration;this._configuration=new l.Configuration(Fe.reload(),new l.ConfigurationModel,new l.ConfigurationModel,new l.ConfigurationModel),Fe.dispose()}getValue(Fe,We){const He=typeof Fe=="string"?Fe:void 0,Ue=at(Fe)?Fe:at(We)?We:{};return this._configuration.getValue(He,Ue,void 0)}updateValues(Fe){const We={data:this._configuration.toData()},He=[];for(const Ue of Fe){const[tt,Xe]=Ue;this.getValue(tt)!==Xe&&(this._configuration.updateValue(tt,Xe),He.push(tt))}if(He.length>0){const Ue=new l.ConfigurationChangeEvent({keys:He,overrides:[]},We,this._configuration);Ue.source=8,this._onDidChangeConfiguration.fire(Ue)}return Promise.resolve()}updateValue(Fe,We,He,Ue){return this.updateValues([[Fe,We]])}inspect(Fe,We={}){return this._configuration.inspect(Fe,We,void 0)}}e.StandaloneConfigurationService=ct;let lt=class{constructor(Fe,We,He){this.configurationService=Fe,this.modelService=We,this.languageService=He,this._onDidChangeConfiguration=new E.Emitter,this.configurationService.onDidChangeConfiguration(Ue=>{this._onDidChangeConfiguration.fire({affectedKeys:Ue.affectedKeys,affectsConfiguration:(tt,Xe)=>Ue.affectsConfiguration(Xe)})})}getValue(Fe,We,He){const Ue=t.Position.isIPosition(We)?We:null,tt=Ue?typeof He=="string"?He:void 0:typeof We=="string"?We:void 0,Xe=Fe?this.getLanguage(Fe,Ue):void 0;return typeof tt>"u"?this.configurationService.getValue({resource:Fe,overrideIdentifier:Xe}):this.configurationService.getValue(tt,{resource:Fe,overrideIdentifier:Xe})}getLanguage(Fe,We){const He=this.modelService.getModel(Fe);return He?We?He.getLanguageIdAtPosition(We.lineNumber,We.column):He.getLanguageId():this.languageService.guessLanguageIdByFilepathOrFirstLine(Fe)}};lt=ke([ge(0,s.IConfigurationService),ge(1,u.IModelService),ge(2,re.ILanguageService)],lt);let mt=class{constructor(Fe){this.configurationService=Fe}getEOL(Fe,We){const He=this.configurationService.getValue("files.eol",{overrideIdentifier:We,resource:Fe});return He&&typeof He=="string"&&He!=="auto"?He:_.isLinux||_.isMacintosh?` `:`\r `}};mt=ke([ge(0,s.IConfigurationService)],mt);class pt{publicLog2(){}}class Le{constructor(){const Fe=b.URI.from({scheme:Le.SCHEME,authority:"model",path:"/"});this.workspace={id:R.STANDALONE_EDITOR_WORKSPACE_ID,folders:[new R.WorkspaceFolder({uri:Fe,name:"",index:0})]}}getWorkspace(){return this.workspace}getWorkspaceFolder(Fe){return Fe&&Fe.scheme===Le.SCHEME?this.workspace.folders[0]:null}}Le.SCHEME="inmemory";function ye(qe,Fe,We){if(!Fe||!(qe instanceof ct))return;const He=[];Object.keys(Fe).forEach(Ue=>{(0,i.isEditorConfigurationKey)(Ue)&&He.push([`editor.${Ue}`,Fe[Ue]]),We&&(0,i.isDiffEditorConfigurationKey)(Ue)&&He.push([`diffEditor.${Ue}`,Fe[Ue]])}),He.length>0&&qe.updateValues(He)}e.updateConfigurationService=ye;let Me=class{constructor(Fe){this._modelService=Fe}hasPreviewHandler(){return!1}async apply(Fe,We){const He=Array.isArray(Fe)?Fe:a.ResourceEdit.convert(Fe),Ue=new Map;for(const dt of He){if(!(dt instanceof a.ResourceTextEdit))throw new Error("bad edit - only text edits are supported");const it=this._modelService.getModel(dt.resource);if(!it)throw new Error("bad edit - model not found");if(typeof dt.versionId=="number"&&it.getVersionId()!==dt.versionId)throw new Error("bad state - model changed in the meantime");let nt=Ue.get(it);nt||(nt=[],Ue.set(it,nt)),nt.push(n.EditOperation.replaceMove(r.Range.lift(dt.textEdit.range),dt.textEdit.text))}let tt=0,Xe=0;for(const[dt,it]of Ue)dt.pushStackElement(),dt.pushEditOperations([],it,()=>[]),dt.pushStackElement(),Xe+=1,tt+=it.length;return{ariaSummary:L.format(O.StandaloneServicesNLS.bulkEditServiceSummary,tt,Xe),isApplied:tt>0}}};Me=ke([ge(0,u.IModelService)],Me);class Te{getUriLabel(Fe,We){return Fe.scheme==="file"?Fe.fsPath:Fe.path}getUriBasenameLabel(Fe){return(0,B.basename)(Fe)}}let we=class extends q.ContextViewService{constructor(Fe,We){super(Fe),this._codeEditorService=We}showContextView(Fe,We,He){if(!We){const Ue=this._codeEditorService.getFocusedCodeEditor()||this._codeEditorService.getActiveCodeEditor();Ue&&(We=Ue.getContainerDomNode())}return super.showContextView(Fe,We,He)}};we=ke([ge(0,x.ILayoutService),ge(1,W.ICodeEditorService)],we);class Re{constructor(){this._neverEmitter=new E.Emitter,this.onDidChangeTrust=this._neverEmitter.event}isWorkspaceTrusted(){return!0}}class Oe extends ie.LanguageService{constructor(){super()}}class Ve extends De.LogService{constructor(){super(new V.ConsoleLogger)}}let $e=class extends ae.ContextMenuService{constructor(Fe,We,He,Ue,tt,Xe){super(Fe,We,He,Ue,tt,Xe),this.configure({blockMouse:!1})}};$e=ke([ge(0,M.ITelemetryService),ge(1,P.INotificationService),ge(2,F.IContextViewService),ge(3,C.IKeybindingService),ge(4,Y.IMenuService),ge(5,o.IContextKeyService)],$e);class Ze{async playAudioCue(Fe,We){}}(0,ne.registerSingleton)(s.IConfigurationService,ct,0),(0,ne.registerSingleton)(c.ITextResourceConfigurationService,lt,0),(0,ne.registerSingleton)(c.ITextResourcePropertiesService,mt,0),(0,ne.registerSingleton)(R.IWorkspaceContextService,Le,0),(0,ne.registerSingleton)(A.ILabelService,Te,0),(0,ne.registerSingleton)(M.ITelemetryService,pt,0),(0,ne.registerSingleton)(g.IDialogService,rt,0),(0,ne.registerSingleton)(be.IEnvironmentService,Je,0),(0,ne.registerSingleton)(P.INotificationService,et,0),(0,ne.registerSingleton)(Ce.IMarkerService,Se.MarkerService,0),(0,ne.registerSingleton)(re.ILanguageService,Oe,0),(0,ne.registerSingleton)(G.IStandaloneThemeService,U.StandaloneThemeService,0),(0,ne.registerSingleton)(V.ILogService,Ve,0),(0,ne.registerSingleton)(u.IModelService,me.ModelService,0),(0,ne.registerSingleton)(he.IMarkerDecorationsService,de.MarkerDecorationsService,0),(0,ne.registerSingleton)(o.IContextKeyService,le.ContextKeyService,0),(0,ne.registerSingleton)(N.IProgressService,je,0),(0,ne.registerSingleton)(N.IEditorProgressService,Ke,0),(0,ne.registerSingleton)(Ae.IStorageService,Ae.InMemoryStorageService,0),(0,ne.registerSingleton)(J.IEditorWorkerService,Q.EditorWorkerService,0),(0,ne.registerSingleton)(a.IBulkEditService,Me,0),(0,ne.registerSingleton)(K.IWorkspaceTrustManagementService,Re,0),(0,ne.registerSingleton)(f.ITextModelService,ze,0),(0,ne.registerSingleton)(H.IAccessibilityService,z.AccessibilityService,0),(0,ne.registerSingleton)(ve.IListService,ve.ListService,0),(0,ne.registerSingleton)(d.ICommandService,st,0),(0,ne.registerSingleton)(C.IKeybindingService,Qe,0),(0,ne.registerSingleton)(Ee.IQuickInputService,X.StandaloneQuickInputService,0),(0,ne.registerSingleton)(F.IContextViewService,we,0),(0,ne.registerSingleton)(_e.IOpenerService,$.OpenerService,0),(0,ne.registerSingleton)(ee.IClipboardService,Z.BrowserClipboardService,0),(0,ne.registerSingleton)(F.IContextMenuService,$e,0),(0,ne.registerSingleton)(Y.IMenuService,j.MenuService,0),(0,ne.registerSingleton)(Be.IAudioCueService,Ze,0);var Ge;(function(qe){const Fe=new pe.ServiceCollection;for(const[it,nt]of(0,ne.getSingletonServiceDescriptors)())Fe.set(it,nt);const We=new ce.InstantiationService(Fe,!0);Fe.set(h.IInstantiationService,We);function He(it){Ue||Xe({});const nt=Fe.get(it);if(!nt)throw new Error("Missing service "+it);return nt instanceof ue.SyncDescriptor?We.invokeFunction(ot=>ot.get(it)):nt}qe.get=He;let Ue=!1;const tt=new E.Emitter;function Xe(it){if(Ue)return We;Ue=!0;for(const[ot,ht]of(0,ne.getSingletonServiceDescriptors)())Fe.get(ot)||Fe.set(ot,ht);for(const ot in it)if(it.hasOwnProperty(ot)){const ht=(0,h.createDecorator)(ot);Fe.get(ht)instanceof ue.SyncDescriptor&&Fe.set(ht,it[ot])}const nt=(0,Ie.getEditorFeatures)();for(const ot of nt)try{We.createInstance(ot)}catch(ht){(0,fe.onUnexpectedError)(ht)}return tt.fire(),We}qe.initialize=Xe;function dt(it){if(Ue)return it();const nt=new p.DisposableStore,ot=nt.add(tt.event(()=>{ot.dispose(),nt.add(it())}));return nt}qe.withServices=dt})(Ge||(e.StandaloneServices=Ge={}))}),define(se[935],oe([1,0,48,2,33,194,287,265,137,30,25,27,15,59,8,34,50,23,69,96,103,88,51,43,371,80,32,18,259,122,44]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createTextModel=e.StandaloneDiffEditor2=e.StandaloneEditor=e.StandaloneCodeEditor=void 0;let A=0,P=!1;function N(W){if(!W){if(P)return;P=!0}L.setARIAContainer(W||T.mainWindow.document.body)}let M=class extends E.CodeEditorWidget{constructor(V,K,F,q,ie,ae,ne,$,J,Q,re,de){const he={...K};he.ariaLabel=he.ariaLabel||d.StandaloneCodeEditorNLS.editorViewAccessibleLabel,he.ariaLabel=he.ariaLabel+";"+d.StandaloneCodeEditorNLS.accessibilityHelpMessage,super(V,he,{},F,q,ie,ae,$,J,Q,re,de),ne instanceof p.StandaloneKeybindingService?this._standaloneKeybindingService=ne:this._standaloneKeybindingService=null,N(he.ariaContainerElement)}addCommand(V,K,F){if(!this._standaloneKeybindingService)return console.warn("Cannot add command because the editor is configured with an unrecognized KeybindingService"),null;const q="DYNAMIC_"+ ++A,ie=i.ContextKeyExpr.deserialize(F);return this._standaloneKeybindingService.addDynamicKeybinding(q,V,K,ie),q}createContextKey(V,K){return this._contextKeyService.createKey(V,K)}addAction(V){if(typeof V.id!="string"||typeof V.label!="string"||typeof V.run!="function")throw new Error("Invalid action descriptor, `id`, `label` and `run` are required properties!");if(!this._standaloneKeybindingService)return console.warn("Cannot add keybinding because the editor is configured with an unrecognized KeybindingService"),k.Disposable.None;const K=V.id,F=V.label,q=i.ContextKeyExpr.and(i.ContextKeyExpr.equals("editorId",this.getId()),i.ContextKeyExpr.deserialize(V.precondition)),ie=V.keybindings,ae=i.ContextKeyExpr.and(q,i.ContextKeyExpr.deserialize(V.keybindingContext)),ne=V.contextMenuGroupId||null,$=V.contextMenuOrder||0,J=(he,...me)=>Promise.resolve(V.run(this,...me)),Q=new k.DisposableStore,re=this.getId()+":"+K;if(Q.add(b.CommandsRegistry.registerCommand(re,J)),ne){const he={command:{id:re,title:F},when:q,group:ne,order:$};Q.add(v.MenuRegistry.appendMenuItem(v.MenuId.EditorContext,he))}if(Array.isArray(ie))for(const he of ie)Q.add(this._standaloneKeybindingService.addDynamicKeybinding(re,he,J,ae));const de=new S.InternalEditorAction(re,F,F,void 0,q,(...he)=>Promise.resolve(V.run(this,...he)),this._contextKeyService);return this._actions.set(K,de),Q.add((0,k.toDisposable)(()=>{this._actions.delete(K)})),Q}_triggerCommand(V,K){if(this._codeEditorService instanceof h.StandaloneCodeEditorService)try{this._codeEditorService.setActiveCodeEditor(this),super._triggerCommand(V,K)}finally{this._codeEditorService.setActiveCodeEditor(null)}else super._triggerCommand(V,K)}};e.StandaloneCodeEditor=M,e.StandaloneCodeEditor=M=ke([ge(2,t.IInstantiationService),ge(3,y.ICodeEditorService),ge(4,b.ICommandService),ge(5,i.IContextKeyService),ge(6,r.IKeybindingService),ge(7,f.IThemeService),ge(8,u.INotificationService),ge(9,c.IAccessibilityService),ge(10,C.ILanguageConfigurationService),ge(11,w.ILanguageFeaturesService)],M);let R=class extends M{constructor(V,K,F,q,ie,ae,ne,$,J,Q,re,de,he,me,X){const U={...K};(0,p.updateConfigurationService)(Q,U,!1);const G=$.registerEditorContainer(V);typeof U.theme=="string"&&$.setTheme(U.theme),typeof U.autoDetectHighContrast<"u"&&$.setAutoDetectHighContrast(!!U.autoDetectHighContrast);const z=U.model;delete U.model,super(V,U,F,q,ie,ae,ne,$,J,re,me,X),this._configurationService=Q,this._standaloneThemeService=$,this._register(G);let H;if(typeof z>"u"){const Y=he.getLanguageIdByMimeType(U.language)||U.language||m.PLAINTEXT_LANGUAGE_ID;H=O(de,he,U.value||"",Y,void 0),this._ownsModel=!0}else H=z,this._ownsModel=!1;if(this._attachModel(H),H){const Y={oldModelUrl:null,newModelUrl:H.uri};this._onDidChangeModel.fire(Y)}}dispose(){super.dispose()}updateOptions(V){(0,p.updateConfigurationService)(this._configurationService,V,!1),typeof V.theme=="string"&&this._standaloneThemeService.setTheme(V.theme),typeof V.autoDetectHighContrast<"u"&&this._standaloneThemeService.setAutoDetectHighContrast(!!V.autoDetectHighContrast),super.updateOptions(V)}_postDetachModelCleanup(V){super._postDetachModelCleanup(V),V&&this._ownsModel&&(V.dispose(),this._ownsModel=!1)}};e.StandaloneEditor=R,e.StandaloneEditor=R=ke([ge(2,t.IInstantiationService),ge(3,y.ICodeEditorService),ge(4,b.ICommandService),ge(5,i.IContextKeyService),ge(6,r.IKeybindingService),ge(7,_.IStandaloneThemeService),ge(8,u.INotificationService),ge(9,a.IConfigurationService),ge(10,c.IAccessibilityService),ge(11,o.IModelService),ge(12,g.ILanguageService),ge(13,C.ILanguageConfigurationService),ge(14,w.ILanguageFeaturesService)],R);let x=class extends D.DiffEditorWidget{constructor(V,K,F,q,ie,ae,ne,$,J,Q,re,de){const he={...K};(0,p.updateConfigurationService)($,he,!0);const me=ae.registerEditorContainer(V);typeof he.theme=="string"&&ae.setTheme(he.theme),typeof he.autoDetectHighContrast<"u"&&ae.setAutoDetectHighContrast(!!he.autoDetectHighContrast),super(V,he,{},q,F,ie,de,Q),this._configurationService=$,this._standaloneThemeService=ae,this._register(me)}dispose(){super.dispose()}updateOptions(V){(0,p.updateConfigurationService)(this._configurationService,V,!0),typeof V.theme=="string"&&this._standaloneThemeService.setTheme(V.theme),typeof V.autoDetectHighContrast<"u"&&this._standaloneThemeService.setAutoDetectHighContrast(!!V.autoDetectHighContrast),super.updateOptions(V)}_createInnerEditor(V,K,F){return V.createInstance(M,K,F)}getOriginalEditor(){return super.getOriginalEditor()}getModifiedEditor(){return super.getModifiedEditor()}addCommand(V,K,F){return this.getModifiedEditor().addCommand(V,K,F)}createContextKey(V,K){return this.getModifiedEditor().createContextKey(V,K)}addAction(V){return this.getModifiedEditor().addAction(V)}};e.StandaloneDiffEditor2=x,e.StandaloneDiffEditor2=x=ke([ge(2,t.IInstantiationService),ge(3,i.IContextKeyService),ge(4,y.ICodeEditorService),ge(5,_.IStandaloneThemeService),ge(6,u.INotificationService),ge(7,a.IConfigurationService),ge(8,n.IContextMenuService),ge(9,l.IEditorProgressService),ge(10,s.IClipboardService),ge(11,I.IAudioCueService)],x);function O(W,V,K,F,q){if(K=K||"",!F){const ie=K.indexOf(` `);let ae=K;return ie!==-1&&(ae=K.substring(0,ie)),B(W,K,V.createByFilepathOrFirstLine(q||null,ae),q)}return B(W,K,V.createById(F),q)}e.createTextModel=O;function B(W,V,K,F){return W.createModel(V,K,F)}}),define(se[936],oe([1,0,44,2,11,22,335,16,33,790,36,149,235,180,31,43,32,80,160,41,51,211,767,935,265,137,30,25,15,34,97,57,888,487]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r,u,f,c,d,s,l,o,g,h,m,C,w,D,I,T,A,P){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createMonacoEditorAPI=e.registerEditorOpener=e.registerLinkOpener=e.registerCommand=e.remeasureFonts=e.setTheme=e.defineTheme=e.tokenize=e.colorizeModelLine=e.colorize=e.colorizeElement=e.createWebWorker=e.onDidChangeModelLanguage=e.onWillDisposeModel=e.onDidCreateModel=e.getModels=e.getModel=e.onDidChangeMarkers=e.getModelMarkers=e.removeAllMarkers=e.setModelMarkers=e.setModelLanguage=e.createModel=e.addKeybindingRules=e.addKeybindingRule=e.addEditorAction=e.addCommand=e.createMultiFileDiffEditor=e.createDiffEditor=e.getDiffEditors=e.getEditors=e.onDidCreateDiffEditor=e.onDidCreateEditor=e.create=void 0;function N(Ce,Se,_e){return h.StandaloneServices.initialize(_e||{}).createInstance(g.StandaloneEditor,Ce,Se)}e.create=N;function M(Ce){return h.StandaloneServices.get(_.ICodeEditorService).onCodeEditorAdd(_e=>{Ce(_e)})}e.onDidCreateEditor=M;function R(Ce){return h.StandaloneServices.get(_.ICodeEditorService).onDiffEditorAdd(_e=>{Ce(_e)})}e.onDidCreateDiffEditor=R;function x(){return h.StandaloneServices.get(_.ICodeEditorService).listCodeEditors()}e.getEditors=x;function O(){return h.StandaloneServices.get(_.ICodeEditorService).listDiffEditors()}e.getDiffEditors=O;function B(Ce,Se,_e){return h.StandaloneServices.initialize(_e||{}).createInstance(g.StandaloneDiffEditor2,Ce,Se)}e.createDiffEditor=B;function W(Ce,Se){const _e=h.StandaloneServices.initialize(Se||{});return new P.MultiDiffEditorWidget(Ce,{},_e)}e.createMultiFileDiffEditor=W;function V(Ce){if(typeof Ce.id!="string"||typeof Ce.run!="function")throw new Error("Invalid command descriptor, `id` and `run` are required properties!");return w.CommandsRegistry.registerCommand(Ce.id,Ce.run)}e.addCommand=V;function K(Ce){if(typeof Ce.id!="string"||typeof Ce.label!="string"||typeof Ce.run!="function")throw new Error("Invalid action descriptor, `id`, `label` and `run` are required properties!");const Se=D.ContextKeyExpr.deserialize(Ce.precondition),_e=(Ae,...xe)=>p.EditorCommand.runEditorCommand(Ae,xe,Se,(Be,De,Ie)=>Promise.resolve(Ce.run(De,...Ie))),Ee=new k.DisposableStore;if(Ee.add(w.CommandsRegistry.registerCommand(Ce.id,_e)),Ce.contextMenuGroupId){const Ae={command:{id:Ce.id,title:Ce.label},when:Se,group:Ce.contextMenuGroupId,order:Ce.contextMenuOrder||0};Ee.add(C.MenuRegistry.appendMenuItem(C.MenuId.EditorContext,Ae))}if(Array.isArray(Ce.keybindings)){const Ae=h.StandaloneServices.get(I.IKeybindingService);if(!(Ae instanceof h.StandaloneKeybindingService))console.warn("Cannot add keybinding because the editor is configured with an unrecognized KeybindingService");else{const xe=D.ContextKeyExpr.and(Se,D.ContextKeyExpr.deserialize(Ce.keybindingContext));Ee.add(Ae.addDynamicKeybindings(Ce.keybindings.map(Be=>({keybinding:Be,command:Ce.id,when:xe}))))}}return Ee}e.addEditorAction=K;function F(Ce){return q([Ce])}e.addKeybindingRule=F;function q(Ce){const Se=h.StandaloneServices.get(I.IKeybindingService);return Se instanceof h.StandaloneKeybindingService?Se.addDynamicKeybindings(Ce.map(_e=>({keybinding:_e.keybinding,command:_e.command,commandArgs:_e.commandArgs,when:D.ContextKeyExpr.deserialize(_e.when)}))):(console.warn("Cannot add keybinding because the editor is configured with an unrecognized KeybindingService"),k.Disposable.None)}e.addKeybindingRules=q;function ie(Ce,Se,_e){const Ee=h.StandaloneServices.get(r.ILanguageService),Ae=Ee.getLanguageIdByMimeType(Se)||Se;return(0,g.createTextModel)(h.StandaloneServices.get(s.IModelService),Ee,Ce,Ae,_e)}e.createModel=ie;function ae(Ce,Se){const _e=h.StandaloneServices.get(r.ILanguageService),Ee=_e.getLanguageIdByMimeType(Se)||Se||f.PLAINTEXT_LANGUAGE_ID;Ce.setLanguage(_e.createById(Ee))}e.setModelLanguage=ae;function ne(Ce,Se,_e){Ce&&h.StandaloneServices.get(T.IMarkerService).changeOne(Se,Ce.uri,_e)}e.setModelMarkers=ne;function $(Ce){h.StandaloneServices.get(T.IMarkerService).changeAll(Ce,[])}e.removeAllMarkers=$;function J(Ce){return h.StandaloneServices.get(T.IMarkerService).read(Ce)}e.getModelMarkers=J;function Q(Ce){return h.StandaloneServices.get(T.IMarkerService).onMarkerChanged(Ce)}e.onDidChangeMarkers=Q;function re(Ce){return h.StandaloneServices.get(s.IModelService).getModel(Ce)}e.getModel=re;function de(){return h.StandaloneServices.get(s.IModelService).getModels()}e.getModels=de;function he(Ce){return h.StandaloneServices.get(s.IModelService).onModelAdded(Ce)}e.onDidCreateModel=he;function me(Ce){return h.StandaloneServices.get(s.IModelService).onModelRemoved(Ce)}e.onWillDisposeModel=me;function X(Ce){return h.StandaloneServices.get(s.IModelService).onModelLanguageChanged(_e=>{Ce({model:_e.model,oldLanguage:_e.oldLanguageId})})}e.onDidChangeModelLanguage=X;function U(Ce){return(0,v.createWebWorker)(h.StandaloneServices.get(s.IModelService),h.StandaloneServices.get(u.ILanguageConfigurationService),Ce)}e.createWebWorker=U;function G(Ce,Se){const _e=h.StandaloneServices.get(r.ILanguageService),Ee=h.StandaloneServices.get(m.IStandaloneThemeService);return o.Colorizer.colorizeElement(Ee,_e,Ce,Se).then(()=>{Ee.registerEditorContainer(Ce)})}e.colorizeElement=G;function z(Ce,Se,_e){const Ee=h.StandaloneServices.get(r.ILanguageService);return h.StandaloneServices.get(m.IStandaloneThemeService).registerEditorContainer(L.mainWindow.document.body),o.Colorizer.colorize(Ee,Ce,Se,_e)}e.colorize=z;function H(Ce,Se,_e=4){return h.StandaloneServices.get(m.IStandaloneThemeService).registerEditorContainer(L.mainWindow.document.body),o.Colorizer.colorizeModelLine(Ce,Se,_e)}e.colorizeModelLine=H;function Y(Ce){const Se=t.TokenizationRegistry.get(Ce);return Se||{getInitialState:()=>c.NullState,tokenize:(_e,Ee,Ae)=>(0,c.nullTokenize)(Ce,Ae)}}function j(Ce,Se){t.TokenizationRegistry.getOrCreate(Se);const _e=Y(Se),Ee=(0,y.splitLines)(Ce),Ae=[];let xe=_e.getInitialState();for(let Be=0,De=Ee.length;Be{var xe;if(!Ee)return null;const Be=(xe=_e.options)===null||xe===void 0?void 0:xe.selection;let De;return Be&&typeof Be.endLineNumber=="number"&&typeof Be.endColumn=="number"?De=Be:Be&&(De={lineNumber:Be.startLineNumber,column:Be.startColumn}),await Ce.openCodeEditor(Ee,_e.resource,De)?Ee:null})}e.registerEditorOpener=pe;function ve(){return{create:N,getEditors:x,getDiffEditors:O,onDidCreateEditor:M,onDidCreateDiffEditor:R,createDiffEditor:B,addCommand:V,addEditorAction:K,addKeybindingRule:F,addKeybindingRules:q,createModel:ie,setModelLanguage:ae,setModelMarkers:ne,getModelMarkers:J,removeAllMarkers:$,onDidChangeMarkers:Q,getModels:de,getModel:re,onDidCreateModel:he,onWillDisposeModel:me,onDidChangeModelLanguage:X,createWebWorker:U,colorizeElement:G,colorize:z,colorizeModelLine:H,tokenize:j,defineTheme:Z,setTheme:ee,remeasureFonts:le,registerCommand:ue,registerLinkOpener:ce,registerEditorOpener:pe,AccessibilitySupport:l.AccessibilitySupport,ContentWidgetPositionPreference:l.ContentWidgetPositionPreference,CursorChangeReason:l.CursorChangeReason,DefaultEndOfLine:l.DefaultEndOfLine,EditorAutoIndentStrategy:l.EditorAutoIndentStrategy,EditorOption:l.EditorOption,EndOfLinePreference:l.EndOfLinePreference,EndOfLineSequence:l.EndOfLineSequence,MinimapPosition:l.MinimapPosition,MouseTargetType:l.MouseTargetType,OverlayWidgetPositionPreference:l.OverlayWidgetPositionPreference,OverviewRulerLane:l.OverviewRulerLane,GlyphMarginLane:l.GlyphMarginLane,RenderLineNumbersType:l.RenderLineNumbersType,RenderMinimap:l.RenderMinimap,ScrollbarVisibility:l.ScrollbarVisibility,ScrollType:l.ScrollType,TextEditorCursorBlinkingStyle:l.TextEditorCursorBlinkingStyle,TextEditorCursorStyle:l.TextEditorCursorStyle,TrackedRangeStickiness:l.TrackedRangeStickiness,WrappingIndent:l.WrappingIndent,InjectedTextCursorStops:l.InjectedTextCursorStops,PositionAffinity:l.PositionAffinity,ShowLightbulbIconMode:l.ShowLightbulbIconMode,ConfigurationChangedEvent:b.ConfigurationChangedEvent,BareFontInfo:i.BareFontInfo,FontInfo:i.FontInfo,TextModelResolvedOptions:d.TextModelResolvedOptions,FindMatch:d.FindMatch,ApplyUpdateResult:b.ApplyUpdateResult,EditorZoom:a.EditorZoom,createMultiFileDiffEditor:W,EditorType:n.EditorType,EditorOptions:b.EditorOptions}}e.createMonacoEditorAPI=ve}),define(se[937],oe([1,0,39,5,31,32,80,43,211,265,565,345,137,97,18,27]),function(te,e,L,k,y,E,S,p,_,v,b,a,i,n,t,r){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.createMonacoLanguagesAPI=e.registerInlayHintsProvider=e.registerInlineCompletionsProvider=e.registerDocumentRangeSemanticTokensProvider=e.registerDocumentSemanticTokensProvider=e.registerSelectionRangeProvider=e.registerDeclarationProvider=e.registerFoldingRangeProvider=e.registerColorProvider=e.registerCompletionItemProvider=e.registerLinkProvider=e.registerOnTypeFormattingEditProvider=e.registerDocumentRangeFormattingEditProvider=e.registerDocumentFormattingEditProvider=e.registerCodeActionProvider=e.registerCodeLensProvider=e.registerTypeDefinitionProvider=e.registerImplementationProvider=e.registerDefinitionProvider=e.registerLinkedEditingRangeProvider=e.registerDocumentHighlightProvider=e.registerDocumentSymbolProvider=e.registerHoverProvider=e.registerSignatureHelpProvider=e.registerRenameProvider=e.registerReferenceProvider=e.setMonarchTokensProvider=e.setTokensProvider=e.registerTokensProviderFactory=e.setColorMap=e.TokenizationSupportAdapter=e.EncodedTokenizationSupportAdapter=e.setLanguageConfiguration=e.onLanguageEncountered=e.onLanguage=e.getEncodedLanguageId=e.getLanguages=e.register=void 0;function u(H){S.ModesRegistry.registerLanguage(H)}e.register=u;function f(){let H=[];return H=H.concat(S.ModesRegistry.getLanguages()),H}e.getLanguages=f;function c(H){return v.StandaloneServices.get(p.ILanguageService).languageIdCodec.encodeLanguageId(H)}e.getEncodedLanguageId=c;function d(H,Y){return v.StandaloneServices.withServices(()=>{const Z=v.StandaloneServices.get(p.ILanguageService).onDidRequestRichLanguageFeatures(ee=>{ee===H&&(Z.dispose(),Y())});return Z})}e.onLanguage=d;function s(H,Y){return v.StandaloneServices.withServices(()=>{const Z=v.StandaloneServices.get(p.ILanguageService).onDidRequestBasicLanguageFeatures(ee=>{ee===H&&(Z.dispose(),Y())});return Z})}e.onLanguageEncountered=s;function l(H,Y){if(!v.StandaloneServices.get(p.ILanguageService).isRegisteredLanguageId(H))throw new Error(`Cannot set configuration for unknown language ${H}`);return v.StandaloneServices.get(E.ILanguageConfigurationService).register(H,Y,100)}e.setLanguageConfiguration=l;class o{constructor(Y,j){this._languageId=Y,this._actual=j}dispose(){}getInitialState(){return this._actual.getInitialState()}tokenize(Y,j,Z){if(typeof this._actual.tokenize=="function")return g.adaptTokenize(this._languageId,this._actual,Y,Z);throw new Error("Not supported!")}tokenizeEncoded(Y,j,Z){const ee=this._actual.tokenizeEncoded(Y,Z);return new y.EncodedTokenizationResult(ee.tokens,ee.endState)}}e.EncodedTokenizationSupportAdapter=o;class g{constructor(Y,j,Z,ee){this._languageId=Y,this._actual=j,this._languageService=Z,this._standaloneThemeService=ee}dispose(){}getInitialState(){return this._actual.getInitialState()}static _toClassicTokens(Y,j){const Z=[];let ee=0;for(let le=0,ue=Y.length;le0&&le[ue-1]===_e)continue;let Ee=Se.startIndex;ve===0?Ee=0:Ee{const Z=await Promise.resolve(Y.create());return Z?h(Z)?D(H,Z):new a.MonarchTokenizer(v.StandaloneServices.get(p.ILanguageService),v.StandaloneServices.get(i.IStandaloneThemeService),H,(0,b.compile)(H,Z),v.StandaloneServices.get(r.IConfigurationService)):null});return y.TokenizationRegistry.registerFactory(H,j)}e.registerTokensProviderFactory=I;function T(H,Y){if(!v.StandaloneServices.get(p.ILanguageService).isRegisteredLanguageId(H))throw new Error(`Cannot set tokens provider for unknown language ${H}`);return C(Y)?I(H,{create:()=>Y}):y.TokenizationRegistry.register(H,D(H,Y))}e.setTokensProvider=T;function A(H,Y){const j=Z=>new a.MonarchTokenizer(v.StandaloneServices.get(p.ILanguageService),v.StandaloneServices.get(i.IStandaloneThemeService),H,(0,b.compile)(H,Z),v.StandaloneServices.get(r.IConfigurationService));return C(Y)?I(H,{create:()=>Y}):y.TokenizationRegistry.register(H,j(Y))}e.setMonarchTokensProvider=A;function P(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).referenceProvider.register(H,Y)}e.registerReferenceProvider=P;function N(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).renameProvider.register(H,Y)}e.registerRenameProvider=N;function M(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).signatureHelpProvider.register(H,Y)}e.registerSignatureHelpProvider=M;function R(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).hoverProvider.register(H,{provideHover:(Z,ee,le)=>{const ue=Z.getWordAtPosition(ee);return Promise.resolve(Y.provideHover(Z,ee,le)).then(ce=>{if(ce)return!ce.range&&ue&&(ce.range=new k.Range(ee.lineNumber,ue.startColumn,ee.lineNumber,ue.endColumn)),ce.range||(ce.range=new k.Range(ee.lineNumber,ee.column,ee.lineNumber,ee.column)),ce})}})}e.registerHoverProvider=R;function x(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentSymbolProvider.register(H,Y)}e.registerDocumentSymbolProvider=x;function O(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentHighlightProvider.register(H,Y)}e.registerDocumentHighlightProvider=O;function B(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).linkedEditingRangeProvider.register(H,Y)}e.registerLinkedEditingRangeProvider=B;function W(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).definitionProvider.register(H,Y)}e.registerDefinitionProvider=W;function V(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).implementationProvider.register(H,Y)}e.registerImplementationProvider=V;function K(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).typeDefinitionProvider.register(H,Y)}e.registerTypeDefinitionProvider=K;function F(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).codeLensProvider.register(H,Y)}e.registerCodeLensProvider=F;function q(H,Y,j){return v.StandaloneServices.get(t.ILanguageFeaturesService).codeActionProvider.register(H,{providedCodeActionKinds:j?.providedCodeActionKinds,documentation:j?.documentation,provideCodeActions:(ee,le,ue,ce)=>{const ve=v.StandaloneServices.get(n.IMarkerService).read({resource:ee.uri}).filter(Ce=>k.Range.areIntersectingOrTouching(Ce,le));return Y.provideCodeActions(ee,le,{markers:ve,only:ue.only,trigger:ue.trigger},ce)},resolveCodeAction:Y.resolveCodeAction})}e.registerCodeActionProvider=q;function ie(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentFormattingEditProvider.register(H,Y)}e.registerDocumentFormattingEditProvider=ie;function ae(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentRangeFormattingEditProvider.register(H,Y)}e.registerDocumentRangeFormattingEditProvider=ae;function ne(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).onTypeFormattingEditProvider.register(H,Y)}e.registerOnTypeFormattingEditProvider=ne;function $(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).linkProvider.register(H,Y)}e.registerLinkProvider=$;function J(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).completionProvider.register(H,Y)}e.registerCompletionItemProvider=J;function Q(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).colorProvider.register(H,Y)}e.registerColorProvider=Q;function re(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).foldingRangeProvider.register(H,Y)}e.registerFoldingRangeProvider=re;function de(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).declarationProvider.register(H,Y)}e.registerDeclarationProvider=de;function he(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).selectionRangeProvider.register(H,Y)}e.registerSelectionRangeProvider=he;function me(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentSemanticTokensProvider.register(H,Y)}e.registerDocumentSemanticTokensProvider=me;function X(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).documentRangeSemanticTokensProvider.register(H,Y)}e.registerDocumentRangeSemanticTokensProvider=X;function U(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).inlineCompletionsProvider.register(H,Y)}e.registerInlineCompletionsProvider=U;function G(H,Y){return v.StandaloneServices.get(t.ILanguageFeaturesService).inlayHintsProvider.register(H,Y)}e.registerInlayHintsProvider=G;function z(){return{register:u,getLanguages:f,onLanguage:d,onLanguageEncountered:s,getEncodedLanguageId:c,setLanguageConfiguration:l,setColorMap:w,registerTokensProviderFactory:I,setTokensProvider:T,setMonarchTokensProvider:A,registerReferenceProvider:P,registerRenameProvider:N,registerCompletionItemProvider:J,registerSignatureHelpProvider:M,registerHoverProvider:R,registerDocumentSymbolProvider:x,registerDocumentHighlightProvider:O,registerLinkedEditingRangeProvider:B,registerDefinitionProvider:W,registerImplementationProvider:V,registerTypeDefinitionProvider:K,registerCodeLensProvider:F,registerCodeActionProvider:q,registerDocumentFormattingEditProvider:ie,registerDocumentRangeFormattingEditProvider:ae,registerOnTypeFormattingEditProvider:ne,registerLinkProvider:$,registerColorProvider:Q,registerFoldingRangeProvider:re,registerDeclarationProvider:de,registerSelectionRangeProvider:he,registerDocumentSemanticTokensProvider:me,registerDocumentRangeSemanticTokensProvider:X,registerInlineCompletionsProvider:U,registerInlayHintsProvider:G,DocumentHighlightKind:_.DocumentHighlightKind,CompletionItemKind:_.CompletionItemKind,CompletionItemTag:_.CompletionItemTag,CompletionItemInsertTextRule:_.CompletionItemInsertTextRule,SymbolKind:_.SymbolKind,SymbolTag:_.SymbolTag,IndentAction:_.IndentAction,CompletionTriggerKind:_.CompletionTriggerKind,SignatureHelpTriggerKind:_.SignatureHelpTriggerKind,InlayHintKind:_.InlayHintKind,InlineCompletionTriggerKind:_.InlineCompletionTriggerKind,CodeActionTriggerType:_.CodeActionTriggerType,FoldingRangeKind:y.FoldingRangeKind,SelectedSuggestionInfo:y.SelectedSuggestionInfo}}e.createMonacoLanguagesAPI=z}),define(se[938],oe([1,0,36,338,936,937,362]),function(te,e,L,k,y,E,S){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.languages=e.editor=e.Token=e.Uri=e.MarkerTag=e.MarkerSeverity=e.SelectionDirection=e.Selection=e.Range=e.Position=e.KeyMod=e.KeyCode=e.Emitter=e.CancellationTokenSource=void 0,L.EditorOptions.wrappingIndent.defaultValue=0,L.EditorOptions.glyphMargin.defaultValue=!1,L.EditorOptions.autoIndent.defaultValue=3,L.EditorOptions.overviewRulerLanes.defaultValue=2,S.FormattingConflicts.setFormatterSelector((v,b,a)=>Promise.resolve(v[0]));const p=(0,k.createMonacoBaseAPI)();p.editor=(0,y.createMonacoEditorAPI)(),p.languages=(0,E.createMonacoLanguagesAPI)(),e.CancellationTokenSource=p.CancellationTokenSource,e.Emitter=p.Emitter,e.KeyCode=p.KeyCode,e.KeyMod=p.KeyMod,e.Position=p.Position,e.Range=p.Range,e.Selection=p.Selection,e.SelectionDirection=p.SelectionDirection,e.MarkerSeverity=p.MarkerSeverity,e.MarkerTag=p.MarkerTag,e.Uri=p.Uri,e.Token=p.Token,e.editor=p.editor,e.languages=p.languages;const _=globalThis.MonacoEnvironment;(_?.globalAPI||typeof define=="function"&&define.amd)&&(globalThis.monaco=p),typeof globalThis.require<"u"&&typeof globalThis.require.config=="function"&&globalThis.require.config({ignoreDuplicateModules:["vscode-languageserver-types","vscode-languageserver-types/main","vscode-languageserver-textdocument","vscode-languageserver-textdocument/main","vscode-nls","vscode-nls/vscode-nls","jsonc-parser","jsonc-parser/main","vscode-uri","vscode-uri/index","vs/basic-languages/typescript/typescript"]})});var pi=this&&this.__createBinding||(Object.create?function(te,e,L,k){k===void 0&&(k=L);var y=Object.getOwnPropertyDescriptor(e,L);(!y||("get"in y?!e.__esModule:y.writable||y.configurable))&&(y={enumerable:!0,get:function(){return e[L]}}),Object.defineProperty(te,k,y)}:function(te,e,L,k){k===void 0&&(k=L),te[k]=e[L]}),vi=this&&this.__exportStar||function(te,e){for(var L in te)L!=="default"&&!Object.prototype.hasOwnProperty.call(e,L)&&pi(e,te,L)};define(se[940],oe([1,0,938,934,829,830,802,873,874,833,921,876]),function(te,e,L){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),vi(L,e)})}).call(this); /*!----------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt *-----------------------------------------------------------------------------*/ define("vs/basic-languages/monaco.contribution", ["require","require","vs/editor/editor.api"],(require)=>{ "use strict";var moduleExports=(()=>{var y=Object.create;var g=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var A=Object.getPrototypeOf,M=Object.prototype.hasOwnProperty;var a=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,s)=>(typeof require<"u"?require:r)[s]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var D=(e,r)=>()=>(r||e((r={exports:{}}).exports,r),r.exports);var l=(e,r,s,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let o of q(r))!M.call(e,o)&&o!==s&&g(e,o,{get:()=>r[o],enumerable:!(n=x(r,o))||n.enumerable});return e},p=(e,r,s)=>(l(e,r,"default"),s&&l(s,r,"default")),c=(e,r,s)=>(s=e!=null?y(A(e)):{},l(r||!e||!e.__esModule?g(s,"default",{value:e,enumerable:!0}):s,e));var v=D((w,d)=>{var b=c(a("vs/editor/editor.api"));d.exports=b});var t={};p(t,c(v()));var f={},m={},u=class e{static getOrCreate(r){return m[r]||(m[r]=new e(r)),m[r]}constructor(r){this._languageId=r,this._loadingTriggered=!1,this._lazyLoadPromise=new Promise((s,n)=>{this._lazyLoadPromiseResolve=s,this._lazyLoadPromiseReject=n})}load(){return this._loadingTriggered||(this._loadingTriggered=!0,f[this._languageId].loader().then(r=>this._lazyLoadPromiseResolve(r),r=>this._lazyLoadPromiseReject(r))),this._lazyLoadPromise}};function i(e){let r=e.id;f[r]=e,t.languages.register(e);let s=u.getOrCreate(r);t.languages.registerTokensProviderFactory(r,{create:async()=>(await s.load()).language}),t.languages.onLanguageEncountered(r,async()=>{let n=await s.load();t.languages.setLanguageConfiguration(r,n.conf)})}i({id:"abap",extensions:[".abap"],aliases:["abap","ABAP"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/abap/abap"],e,r)})});i({id:"apex",extensions:[".cls"],aliases:["Apex","apex"],mimetypes:["text/x-apex-source","text/x-apex"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/apex/apex"],e,r)})});i({id:"azcli",extensions:[".azcli"],aliases:["Azure CLI","azcli"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/azcli/azcli"],e,r)})});i({id:"bat",extensions:[".bat",".cmd"],aliases:["Batch","bat"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/bat/bat"],e,r)})});i({id:"bicep",extensions:[".bicep"],aliases:["Bicep"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/bicep/bicep"],e,r)})});i({id:"cameligo",extensions:[".mligo"],aliases:["Cameligo"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/cameligo/cameligo"],e,r)})});i({id:"clojure",extensions:[".clj",".cljs",".cljc",".edn"],aliases:["clojure","Clojure"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/clojure/clojure"],e,r)})});i({id:"coffeescript",extensions:[".coffee"],aliases:["CoffeeScript","coffeescript","coffee"],mimetypes:["text/x-coffeescript","text/coffeescript"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/coffee/coffee"],e,r)})});i({id:"c",extensions:[".c",".h"],aliases:["C","c"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/cpp/cpp"],e,r)})});i({id:"cpp",extensions:[".cpp",".cc",".cxx",".hpp",".hh",".hxx"],aliases:["C++","Cpp","cpp"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/cpp/cpp"],e,r)})});i({id:"csharp",extensions:[".cs",".csx",".cake"],aliases:["C#","csharp"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/csharp/csharp"],e,r)})});i({id:"csp",extensions:[],aliases:["CSP","csp"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/csp/csp"],e,r)})});i({id:"css",extensions:[".css"],aliases:["CSS","css"],mimetypes:["text/css"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/css/css"],e,r)})});i({id:"cypher",extensions:[".cypher",".cyp"],aliases:["Cypher","OpenCypher"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/cypher/cypher"],e,r)})});i({id:"dart",extensions:[".dart"],aliases:["Dart","dart"],mimetypes:["text/x-dart-source","text/x-dart"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/dart/dart"],e,r)})});i({id:"dockerfile",extensions:[".dockerfile"],filenames:["Dockerfile"],aliases:["Dockerfile"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/dockerfile/dockerfile"],e,r)})});i({id:"ecl",extensions:[".ecl"],aliases:["ECL","Ecl","ecl"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/ecl/ecl"],e,r)})});i({id:"elixir",extensions:[".ex",".exs"],aliases:["Elixir","elixir","ex"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/elixir/elixir"],e,r)})});i({id:"flow9",extensions:[".flow"],aliases:["Flow9","Flow","flow9","flow"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/flow9/flow9"],e,r)})});i({id:"fsharp",extensions:[".fs",".fsi",".ml",".mli",".fsx",".fsscript"],aliases:["F#","FSharp","fsharp"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/fsharp/fsharp"],e,r)})});i({id:"freemarker2",extensions:[".ftl",".ftlh",".ftlx"],aliases:["FreeMarker2","Apache FreeMarker2"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/freemarker2/freemarker2"],e,r)}).then(e=>e.TagAngleInterpolationDollar)});i({id:"freemarker2.tag-angle.interpolation-dollar",aliases:["FreeMarker2 (Angle/Dollar)","Apache FreeMarker2 (Angle/Dollar)"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/freemarker2/freemarker2"],e,r)}).then(e=>e.TagAngleInterpolationDollar)});i({id:"freemarker2.tag-bracket.interpolation-dollar",aliases:["FreeMarker2 (Bracket/Dollar)","Apache FreeMarker2 (Bracket/Dollar)"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/freemarker2/freemarker2"],e,r)}).then(e=>e.TagBracketInterpolationDollar)});i({id:"freemarker2.tag-angle.interpolation-bracket",aliases:["FreeMarker2 (Angle/Bracket)","Apache FreeMarker2 (Angle/Bracket)"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/freemarker2/freemarker2"],e,r)}).then(e=>e.TagAngleInterpolationBracket)});i({id:"freemarker2.tag-bracket.interpolation-bracket",aliases:["FreeMarker2 (Bracket/Bracket)","Apache FreeMarker2 (Bracket/Bracket)"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/freemarker2/freemarker2"],e,r)}).then(e=>e.TagBracketInterpolationBracket)});i({id:"freemarker2.tag-auto.interpolation-dollar",aliases:["FreeMarker2 (Auto/Dollar)","Apache FreeMarker2 (Auto/Dollar)"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/freemarker2/freemarker2"],e,r)}).then(e=>e.TagAutoInterpolationDollar)});i({id:"freemarker2.tag-auto.interpolation-bracket",aliases:["FreeMarker2 (Auto/Bracket)","Apache FreeMarker2 (Auto/Bracket)"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/freemarker2/freemarker2"],e,r)}).then(e=>e.TagAutoInterpolationBracket)});i({id:"go",extensions:[".go"],aliases:["Go"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/go/go"],e,r)})});i({id:"graphql",extensions:[".graphql",".gql"],aliases:["GraphQL","graphql","gql"],mimetypes:["application/graphql"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/graphql/graphql"],e,r)})});i({id:"handlebars",extensions:[".handlebars",".hbs"],aliases:["Handlebars","handlebars","hbs"],mimetypes:["text/x-handlebars-template"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/handlebars/handlebars"],e,r)})});i({id:"hcl",extensions:[".tf",".tfvars",".hcl"],aliases:["Terraform","tf","HCL","hcl"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/hcl/hcl"],e,r)})});i({id:"html",extensions:[".html",".htm",".shtml",".xhtml",".mdoc",".jsp",".asp",".aspx",".jshtm"],aliases:["HTML","htm","html","xhtml"],mimetypes:["text/html","text/x-jshtm","text/template","text/ng-template"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/html/html"],e,r)})});i({id:"ini",extensions:[".ini",".properties",".gitconfig"],filenames:["config",".gitattributes",".gitconfig",".editorconfig"],aliases:["Ini","ini"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/ini/ini"],e,r)})});i({id:"java",extensions:[".java",".jav"],aliases:["Java","java"],mimetypes:["text/x-java-source","text/x-java"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/java/java"],e,r)})});i({id:"javascript",extensions:[".js",".es6",".jsx",".mjs",".cjs"],firstLine:"^#!.*\\bnode",filenames:["jakefile"],aliases:["JavaScript","javascript","js"],mimetypes:["text/javascript"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/javascript/javascript"],e,r)})});i({id:"julia",extensions:[".jl"],aliases:["julia","Julia"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/julia/julia"],e,r)})});i({id:"kotlin",extensions:[".kt",".kts"],aliases:["Kotlin","kotlin"],mimetypes:["text/x-kotlin-source","text/x-kotlin"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/kotlin/kotlin"],e,r)})});i({id:"less",extensions:[".less"],aliases:["Less","less"],mimetypes:["text/x-less","text/less"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/less/less"],e,r)})});i({id:"lexon",extensions:[".lex"],aliases:["Lexon"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/lexon/lexon"],e,r)})});i({id:"lua",extensions:[".lua"],aliases:["Lua","lua"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/lua/lua"],e,r)})});i({id:"liquid",extensions:[".liquid",".html.liquid"],aliases:["Liquid","liquid"],mimetypes:["application/liquid"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/liquid/liquid"],e,r)})});i({id:"m3",extensions:[".m3",".i3",".mg",".ig"],aliases:["Modula-3","Modula3","modula3","m3"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/m3/m3"],e,r)})});i({id:"markdown",extensions:[".md",".markdown",".mdown",".mkdn",".mkd",".mdwn",".mdtxt",".mdtext"],aliases:["Markdown","markdown"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/markdown/markdown"],e,r)})});i({id:"mdx",extensions:[".mdx"],aliases:["MDX","mdx"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/mdx/mdx"],e,r)})});i({id:"mips",extensions:[".s"],aliases:["MIPS","MIPS-V"],mimetypes:["text/x-mips","text/mips","text/plaintext"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/mips/mips"],e,r)})});i({id:"msdax",extensions:[".dax",".msdax"],aliases:["DAX","MSDAX"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/msdax/msdax"],e,r)})});i({id:"mysql",extensions:[],aliases:["MySQL","mysql"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/mysql/mysql"],e,r)})});i({id:"objective-c",extensions:[".m"],aliases:["Objective-C"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/objective-c/objective-c"],e,r)})});i({id:"pascal",extensions:[".pas",".p",".pp"],aliases:["Pascal","pas"],mimetypes:["text/x-pascal-source","text/x-pascal"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/pascal/pascal"],e,r)})});i({id:"pascaligo",extensions:[".ligo"],aliases:["Pascaligo","ligo"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/pascaligo/pascaligo"],e,r)})});i({id:"perl",extensions:[".pl",".pm"],aliases:["Perl","pl"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/perl/perl"],e,r)})});i({id:"pgsql",extensions:[],aliases:["PostgreSQL","postgres","pg","postgre"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/pgsql/pgsql"],e,r)})});i({id:"php",extensions:[".php",".php4",".php5",".phtml",".ctp"],aliases:["PHP","php"],mimetypes:["application/x-php"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/php/php"],e,r)})});i({id:"pla",extensions:[".pla"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/pla/pla"],e,r)})});i({id:"postiats",extensions:[".dats",".sats",".hats"],aliases:["ATS","ATS/Postiats"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/postiats/postiats"],e,r)})});i({id:"powerquery",extensions:[".pq",".pqm"],aliases:["PQ","M","Power Query","Power Query M"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/powerquery/powerquery"],e,r)})});i({id:"powershell",extensions:[".ps1",".psm1",".psd1"],aliases:["PowerShell","powershell","ps","ps1"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/powershell/powershell"],e,r)})});i({id:"proto",extensions:[".proto"],aliases:["protobuf","Protocol Buffers"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/protobuf/protobuf"],e,r)})});i({id:"pug",extensions:[".jade",".pug"],aliases:["Pug","Jade","jade"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/pug/pug"],e,r)})});i({id:"python",extensions:[".py",".rpy",".pyw",".cpy",".gyp",".gypi"],aliases:["Python","py"],firstLine:"^#!/.*\\bpython[0-9.-]*\\b",loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/python/python"],e,r)})});i({id:"qsharp",extensions:[".qs"],aliases:["Q#","qsharp"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/qsharp/qsharp"],e,r)})});i({id:"r",extensions:[".r",".rhistory",".rmd",".rprofile",".rt"],aliases:["R","r"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/r/r"],e,r)})});i({id:"razor",extensions:[".cshtml"],aliases:["Razor","razor"],mimetypes:["text/x-cshtml"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/razor/razor"],e,r)})});i({id:"redis",extensions:[".redis"],aliases:["redis"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/redis/redis"],e,r)})});i({id:"redshift",extensions:[],aliases:["Redshift","redshift"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/redshift/redshift"],e,r)})});i({id:"restructuredtext",extensions:[".rst"],aliases:["reStructuredText","restructuredtext"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/restructuredtext/restructuredtext"],e,r)})});i({id:"ruby",extensions:[".rb",".rbx",".rjs",".gemspec",".pp"],filenames:["rakefile","Gemfile"],aliases:["Ruby","rb"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/ruby/ruby"],e,r)})});i({id:"rust",extensions:[".rs",".rlib"],aliases:["Rust","rust"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/rust/rust"],e,r)})});i({id:"sb",extensions:[".sb"],aliases:["Small Basic","sb"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/sb/sb"],e,r)})});i({id:"scala",extensions:[".scala",".sc",".sbt"],aliases:["Scala","scala","SBT","Sbt","sbt","Dotty","dotty"],mimetypes:["text/x-scala-source","text/x-scala","text/x-sbt","text/x-dotty"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/scala/scala"],e,r)})});i({id:"scheme",extensions:[".scm",".ss",".sch",".rkt"],aliases:["scheme","Scheme"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/scheme/scheme"],e,r)})});i({id:"scss",extensions:[".scss"],aliases:["Sass","sass","scss"],mimetypes:["text/x-scss","text/scss"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/scss/scss"],e,r)})});i({id:"shell",extensions:[".sh",".bash"],aliases:["Shell","sh"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/shell/shell"],e,r)})});i({id:"sol",extensions:[".sol"],aliases:["sol","solidity","Solidity"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/solidity/solidity"],e,r)})});i({id:"aes",extensions:[".aes"],aliases:["aes","sophia","Sophia"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/sophia/sophia"],e,r)})});i({id:"sparql",extensions:[".rq"],aliases:["sparql","SPARQL"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/sparql/sparql"],e,r)})});i({id:"sql",extensions:[".sql"],aliases:["SQL"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/sql/sql"],e,r)})});i({id:"st",extensions:[".st",".iecst",".iecplc",".lc3lib",".TcPOU",".TcDUT",".TcGVL",".TcIO"],aliases:["StructuredText","scl","stl"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/st/st"],e,r)})});i({id:"swift",aliases:["Swift","swift"],extensions:[".swift"],mimetypes:["text/swift"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/swift/swift"],e,r)})});i({id:"systemverilog",extensions:[".sv",".svh"],aliases:["SV","sv","SystemVerilog","systemverilog"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/systemverilog/systemverilog"],e,r)})});i({id:"verilog",extensions:[".v",".vh"],aliases:["V","v","Verilog","verilog"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/systemverilog/systemverilog"],e,r)})});i({id:"tcl",extensions:[".tcl"],aliases:["tcl","Tcl","tcltk","TclTk","tcl/tk","Tcl/Tk"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/tcl/tcl"],e,r)})});i({id:"twig",extensions:[".twig"],aliases:["Twig","twig"],mimetypes:["text/x-twig"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/twig/twig"],e,r)})});i({id:"typescript",extensions:[".ts",".tsx",".cts",".mts"],aliases:["TypeScript","ts","typescript"],mimetypes:["text/typescript"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/typescript/typescript"],e,r)})});i({id:"vb",extensions:[".vb"],aliases:["Visual Basic","vb"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/vb/vb"],e,r)})});i({id:"wgsl",extensions:[".wgsl"],aliases:["WebGPU Shading Language","WGSL","wgsl"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/wgsl/wgsl"],e,r)})});i({id:"xml",extensions:[".xml",".xsd",".dtd",".ascx",".csproj",".config",".props",".targets",".wxi",".wxl",".wxs",".xaml",".svg",".svgz",".opf",".xslt",".xsl"],firstLine:"(\\<\\?xml.*)|(\\new Promise((e,r)=>{a(["vs/basic-languages/xml/xml"],e,r)})});i({id:"yaml",extensions:[".yaml",".yml"],aliases:["YAML","yaml","YML","yml"],mimetypes:["application/x-yaml","text/x-yaml"],loader:()=>new Promise((e,r)=>{a(["vs/basic-languages/yaml/yaml"],e,r)})});})(); return moduleExports; }); /*!----------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt *-----------------------------------------------------------------------------*/ define("vs/language/css/monaco.contribution", ["require","require","vs/editor/editor.api"],(require)=>{ "use strict";var moduleExports=(()=>{var C=Object.create;var g=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var b=Object.getOwnPropertyNames;var x=Object.getPrototypeOf,h=Object.prototype.hasOwnProperty;var l=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,r)=>(typeof require<"u"?require:n)[r]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var I=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),M=(e,n)=>{for(var r in n)g(e,r,{get:n[r],enumerable:!0})},s=(e,n,r,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of b(n))!h.call(e,t)&&t!==r&&g(e,t,{get:()=>n[t],enumerable:!(a=S(n,t))||a.enumerable});return e},y=(e,n,r)=>(s(e,n,"default"),r&&s(r,n,"default")),w=(e,n,r)=>(r=e!=null?C(x(e)):{},s(n||!e||!e.__esModule?g(r,"default",{value:e,enumerable:!0}):r,e)),P=e=>s(g({},"__esModule",{value:!0}),e);var v=I((k,D)=>{var O=w(l("vs/editor/editor.api"));D.exports=O});var R={};M(R,{cssDefaults:()=>p,lessDefaults:()=>f,scssDefaults:()=>c});var o={};y(o,w(v()));var i=class{constructor(n,r,a){this._onDidChange=new o.Emitter;this._languageId=n,this.setOptions(r),this.setModeConfiguration(a)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this.options}get options(){return this._options}setOptions(n){this._options=n||Object.create(null),this._onDidChange.fire(this)}setDiagnosticsOptions(n){this.setOptions(n)}setModeConfiguration(n){this._modeConfiguration=n||Object.create(null),this._onDidChange.fire(this)}},d={validate:!0,lint:{compatibleVendorPrefixes:"ignore",vendorPrefix:"warning",duplicateProperties:"warning",emptyRules:"warning",importStatement:"ignore",boxModel:"ignore",universalSelector:"ignore",zeroUnits:"ignore",fontFaceProperties:"warning",hexColorLength:"error",argumentsInColorFunction:"error",unknownProperties:"warning",ieHack:"ignore",unknownVendorSpecificProperties:"ignore",propertyIgnoredDueToDisplay:"warning",important:"ignore",float:"ignore",idSelector:"ignore"},data:{useDefaultDataProvider:!0},format:{newlineBetweenSelectors:!0,newlineBetweenRules:!0,spaceAroundSelectorSeparator:!1,braceStyle:"collapse",maxPreserveNewLines:void 0,preserveNewLines:!0}},u={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0,documentFormattingEdits:!0,documentRangeFormattingEdits:!0},p=new i("css",d,u),c=new i("scss",d,u),f=new i("less",d,u);o.languages.css={cssDefaults:p,lessDefaults:f,scssDefaults:c};function m(){return new Promise((e,n)=>{l(["vs/language/css/cssMode"],e,n)})}o.languages.onLanguage("less",()=>{m().then(e=>e.setupMode(f))});o.languages.onLanguage("scss",()=>{m().then(e=>e.setupMode(c))});o.languages.onLanguage("css",()=>{m().then(e=>e.setupMode(p))});return P(R);})(); return moduleExports; }); /*!----------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt *-----------------------------------------------------------------------------*/ define("vs/language/html/monaco.contribution", ["require","require","vs/editor/editor.api"],(require)=>{ "use strict";var moduleExports=(()=>{var w=Object.create;var l=Object.defineProperty;var R=Object.getOwnPropertyDescriptor;var H=Object.getOwnPropertyNames;var O=Object.getPrototypeOf,_=Object.prototype.hasOwnProperty;var f=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,t)=>(typeof require<"u"?require:n)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var k=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),T=(e,n)=>{for(var t in n)l(e,t,{get:n[t],enumerable:!0})},d=(e,n,t,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of H(n))!_.call(e,o)&&o!==t&&l(e,o,{get:()=>n[o],enumerable:!(r=R(n,o))||r.enumerable});return e},b=(e,n,t)=>(d(e,n,"default"),t&&d(t,n,"default")),v=(e,n,t)=>(t=e!=null?w(O(e)):{},d(n||!e||!e.__esModule?l(t,"default",{value:e,enumerable:!0}):t,e)),A=e=>d(l({},"__esModule",{value:!0}),e);var C=k((z,h)=>{var E=v(f("vs/editor/editor.api"));h.exports=E});var V={};T(V,{handlebarDefaults:()=>M,handlebarLanguageService:()=>m,htmlDefaults:()=>x,htmlLanguageService:()=>c,razorDefaults:()=>I,razorLanguageService:()=>y,registerHTMLLanguageService:()=>s});var a={};b(a,v(C()));var p=class{constructor(n,t,r){this._onDidChange=new a.Emitter;this._languageId=n,this.setOptions(t),this.setModeConfiguration(r)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get options(){return this._options}get modeConfiguration(){return this._modeConfiguration}setOptions(n){this._options=n||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(n){this._modeConfiguration=n||Object.create(null),this._onDidChange.fire(this)}},F={tabSize:4,insertSpaces:!1,wrapLineLength:120,unformatted:'default": "a, abbr, acronym, b, bdo, big, br, button, cite, code, dfn, em, i, img, input, kbd, label, map, object, q, samp, select, small, span, strong, sub, sup, textarea, tt, var',contentUnformatted:"pre",indentInnerHtml:!1,preserveNewLines:!0,maxPreserveNewLines:void 0,indentHandlebars:!1,endWithNewline:!1,extraLiners:"head, body, /html",wrapAttributes:"auto"},u={format:F,suggest:{},data:{useDefaultDataProvider:!0}};function g(e){return{completionItems:!0,hovers:!0,documentSymbols:!0,links:!0,documentHighlights:!0,rename:!0,colors:!0,foldingRanges:!0,selectionRanges:!0,diagnostics:e===i,documentFormattingEdits:e===i,documentRangeFormattingEdits:e===i}}var i="html",D="handlebars",L="razor",c=s(i,u,g(i)),x=c.defaults,m=s(D,u,g(D)),M=m.defaults,y=s(L,u,g(L)),I=y.defaults;a.languages.html={htmlDefaults:x,razorDefaults:I,handlebarDefaults:M,htmlLanguageService:c,handlebarLanguageService:m,razorLanguageService:y,registerHTMLLanguageService:s};function P(){return new Promise((e,n)=>{f(["vs/language/html/htmlMode"],e,n)})}function s(e,n=u,t=g(e)){let r=new p(e,n,t),o,S=a.languages.onLanguage(e,async()=>{o=(await P()).setupMode(r)});return{defaults:r,dispose(){S.dispose(),o?.dispose(),o=void 0}}}return A(V);})(); return moduleExports; }); /*!----------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt *-----------------------------------------------------------------------------*/ define("vs/language/json/monaco.contribution", ["require","require","vs/editor/editor.api"],(require)=>{ "use strict";var moduleExports=(()=>{var y=Object.create;var i=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var N=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var s=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(n,o)=>(typeof require<"u"?require:n)[o]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var O=(e,n)=>()=>(n||e((n={exports:{}}).exports,n),n.exports),v=(e,n)=>{for(var o in n)i(e,o,{get:n[o],enumerable:!0})},g=(e,n,o,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let r of h(n))!b.call(e,r)&&r!==o&&i(e,r,{get:()=>n[r],enumerable:!(a=f(n,r))||a.enumerable});return e};var m=(e,n,o)=>(o=e!=null?y(N(e)):{},g(n||!e||!e.__esModule?i(o,"default",{value:e,enumerable:!0}):o,e)),x=e=>g(i({},"__esModule",{value:!0}),e);var u=O((J,c)=>{var A=m(s("vs/editor/editor.api"));c.exports=A});var C={};v(C,{getWorker:()=>S,jsonDefaults:()=>l});var t=m(u());var d=class{constructor(n,o,a){this._onDidChange=new t.Emitter;this._languageId=n,this.setDiagnosticsOptions(o),this.setModeConfiguration(a)}get onDidChange(){return this._onDidChange.event}get languageId(){return this._languageId}get modeConfiguration(){return this._modeConfiguration}get diagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(n){this._diagnosticsOptions=n||Object.create(null),this._onDidChange.fire(this)}setModeConfiguration(n){this._modeConfiguration=n||Object.create(null),this._onDidChange.fire(this)}},T={validate:!0,allowComments:!0,schemas:[],enableSchemaRequest:!1,schemaRequest:"warning",schemaValidation:"warning",comments:"error",trailingCommas:"error"},D={documentFormattingEdits:!0,documentRangeFormattingEdits:!0,completionItems:!0,hovers:!0,documentSymbols:!0,tokens:!0,colors:!0,foldingRanges:!0,diagnostics:!0,selectionRanges:!0},l=new d("json",T,D),S=()=>p().then(e=>e.getWorker());t.languages.json={jsonDefaults:l,getWorker:S};function p(){return new Promise((e,n)=>{s(["vs/language/json/jsonMode"],e,n)})}t.languages.register({id:"json",extensions:[".json",".bowerrc",".jshintrc",".jscsrc",".eslintrc",".babelrc",".har"],aliases:["JSON","json"],mimetypes:["application/json"]});t.languages.onLanguage("json",()=>{p().then(e=>e.setupMode(l))});return x(C);})(); return moduleExports; }); /*!----------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt *-----------------------------------------------------------------------------*/ define("vs/language/typescript/monaco.contribution", ["require","require","vs/editor/editor.api"],(require)=>{ "use strict";var moduleExports=(()=>{var N=Object.create;var d=Object.defineProperty;var H=Object.getOwnPropertyDescriptor;var M=Object.getOwnPropertyNames;var R=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var c=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var w=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),A=(n,e)=>{for(var t in e)d(n,t,{get:e[t],enumerable:!0})},g=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of M(e))!F.call(n,r)&&r!==t&&d(n,r,{get:()=>e[r],enumerable:!(i=H(e,r))||i.enumerable});return n},D=(n,e,t)=>(g(n,e,"default"),t&&g(t,e,"default")),C=(n,e,t)=>(t=n!=null?N(R(n)):{},g(e||!n||!n.__esModule?d(t,"default",{value:n,enumerable:!0}):t,n)),W=n=>g(d({},"__esModule",{value:!0}),n);var _=w((B,E)=>{var V=C(c("vs/editor/editor.api"));E.exports=V});var T={};A(T,{JsxEmit:()=>f,ModuleKind:()=>b,ModuleResolutionKind:()=>O,NewLineKind:()=>y,ScriptTarget:()=>h,getJavaScriptWorker:()=>k,getTypeScriptWorker:()=>P,javascriptDefaults:()=>v,typescriptDefaults:()=>x,typescriptVersion:()=>I});var L="5.0.2";var l={};D(l,C(_()));var b=(s=>(s[s.None=0]="None",s[s.CommonJS=1]="CommonJS",s[s.AMD=2]="AMD",s[s.UMD=3]="UMD",s[s.System=4]="System",s[s.ES2015=5]="ES2015",s[s.ESNext=99]="ESNext",s))(b||{}),f=(a=>(a[a.None=0]="None",a[a.Preserve=1]="Preserve",a[a.React=2]="React",a[a.ReactNative=3]="ReactNative",a[a.ReactJSX=4]="ReactJSX",a[a.ReactJSXDev=5]="ReactJSXDev",a))(f||{}),y=(t=>(t[t.CarriageReturnLineFeed=0]="CarriageReturnLineFeed",t[t.LineFeed=1]="LineFeed",t))(y||{}),h=(o=>(o[o.ES3=0]="ES3",o[o.ES5=1]="ES5",o[o.ES2015=2]="ES2015",o[o.ES2016=3]="ES2016",o[o.ES2017=4]="ES2017",o[o.ES2018=5]="ES2018",o[o.ES2019=6]="ES2019",o[o.ES2020=7]="ES2020",o[o.ESNext=99]="ESNext",o[o.JSON=100]="JSON",o[o.Latest=99]="Latest",o))(h||{}),O=(t=>(t[t.Classic=1]="Classic",t[t.NodeJs=2]="NodeJs",t))(O||{}),m=class{constructor(e,t,i,r,p){this._onDidChange=new l.Emitter;this._onDidExtraLibsChange=new l.Emitter;this._extraLibs=Object.create(null),this._removedExtraLibs=Object.create(null),this._eagerModelSync=!1,this.setCompilerOptions(e),this.setDiagnosticsOptions(t),this.setWorkerOptions(i),this.setInlayHintsOptions(r),this.setModeConfiguration(p),this._onDidExtraLibsChangeTimeout=-1}get onDidChange(){return this._onDidChange.event}get onDidExtraLibsChange(){return this._onDidExtraLibsChange.event}get modeConfiguration(){return this._modeConfiguration}get workerOptions(){return this._workerOptions}get inlayHintsOptions(){return this._inlayHintsOptions}getExtraLibs(){return this._extraLibs}addExtraLib(e,t){let i;if(typeof t>"u"?i=`ts:extralib-${Math.random().toString(36).substring(2,15)}`:i=t,this._extraLibs[i]&&this._extraLibs[i].content===e)return{dispose:()=>{}};let r=1;return this._removedExtraLibs[i]&&(r=this._removedExtraLibs[i]+1),this._extraLibs[i]&&(r=this._extraLibs[i].version+1),this._extraLibs[i]={content:e,version:r},this._fireOnDidExtraLibsChangeSoon(),{dispose:()=>{let p=this._extraLibs[i];p&&p.version===r&&(delete this._extraLibs[i],this._removedExtraLibs[i]=r,this._fireOnDidExtraLibsChangeSoon())}}}setExtraLibs(e){for(let t in this._extraLibs)this._removedExtraLibs[t]=this._extraLibs[t].version;if(this._extraLibs=Object.create(null),e&&e.length>0)for(let t of e){let i=t.filePath||`ts:extralib-${Math.random().toString(36).substring(2,15)}`,r=t.content,p=1;this._removedExtraLibs[i]&&(p=this._removedExtraLibs[i]+1),this._extraLibs[i]={content:r,version:p}}this._fireOnDidExtraLibsChangeSoon()}_fireOnDidExtraLibsChangeSoon(){this._onDidExtraLibsChangeTimeout===-1&&(this._onDidExtraLibsChangeTimeout=window.setTimeout(()=>{this._onDidExtraLibsChangeTimeout=-1,this._onDidExtraLibsChange.fire(void 0)},0))}getCompilerOptions(){return this._compilerOptions}setCompilerOptions(e){this._compilerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}getDiagnosticsOptions(){return this._diagnosticsOptions}setDiagnosticsOptions(e){this._diagnosticsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setWorkerOptions(e){this._workerOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setInlayHintsOptions(e){this._inlayHintsOptions=e||Object.create(null),this._onDidChange.fire(void 0)}setMaximumWorkerIdleTime(e){}setEagerModelSync(e){this._eagerModelSync=e}getEagerModelSync(){return this._eagerModelSync}setModeConfiguration(e){this._modeConfiguration=e||Object.create(null),this._onDidChange.fire(void 0)}},I=L,S={completionItems:!0,hovers:!0,documentSymbols:!0,definitions:!0,references:!0,documentHighlights:!0,rename:!0,diagnostics:!0,documentRangeFormattingEdits:!0,signatureHelp:!0,onTypeFormattingEdits:!0,codeActions:!0,inlayHints:!0},x=new m({allowNonTsExtensions:!0,target:99},{noSemanticValidation:!1,noSyntaxValidation:!1,onlyVisible:!1},{},{},S),v=new m({allowNonTsExtensions:!0,allowJs:!0,target:99},{noSemanticValidation:!0,noSyntaxValidation:!1,onlyVisible:!1},{},{},S),P=()=>u().then(n=>n.getTypeScriptWorker()),k=()=>u().then(n=>n.getJavaScriptWorker());l.languages.typescript={ModuleKind:b,JsxEmit:f,NewLineKind:y,ScriptTarget:h,ModuleResolutionKind:O,typescriptVersion:I,typescriptDefaults:x,javascriptDefaults:v,getTypeScriptWorker:P,getJavaScriptWorker:k};function u(){return new Promise((n,e)=>{c(["vs/language/typescript/tsMode"],n,e)})}l.languages.onLanguage("typescript",()=>u().then(n=>n.setupTypeScript(x)));l.languages.onLanguage("javascript",()=>u().then(n=>n.setupJavaScript(v)));return W(T);})(); return moduleExports; }); define("vs/editor/editor.main", ["vs/editor/edcore.main","vs/basic-languages/monaco.contribution","vs/language/css/monaco.contribution","vs/language/html/monaco.contribution","vs/language/json/monaco.contribution","vs/language/typescript/monaco.contribution"], function(api) { return api; }); //# sourceMappingURL=../../../min-maps/vs/editor/editor.main.js.map ================================================ FILE: modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/editor/editor.main.nls.js ================================================ /*!----------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/vscode/blob/main/LICENSE.txt *-----------------------------------------------------------*/define("vs/editor/editor.main.nls",{"vs/base/browser/ui/actionbar/actionViewItems":["{0} ({1})"],"vs/base/browser/ui/findinput/findInput":["input"],"vs/base/browser/ui/findinput/findInputToggles":["Match Case","Match Whole Word","Use Regular Expression"],"vs/base/browser/ui/findinput/replaceInput":["input","Preserve Case"],"vs/base/browser/ui/hover/hoverWidget":["Inspect this in the accessible view with {0}.","Inspect this in the accessible view via the command Open Accessible View which is currently not triggerable via keybinding."],"vs/base/browser/ui/iconLabel/iconLabelHover":["Loading..."],"vs/base/browser/ui/inputbox/inputBox":["Error: {0}","Warning: {0}","Info: {0}"," or {0} for history"," ({0} for history)","Cleared Input"],"vs/base/browser/ui/keybindingLabel/keybindingLabel":["Unbound"],"vs/base/browser/ui/selectBox/selectBoxCustom":["Select Box"],"vs/base/browser/ui/toolbar/toolbar":["More Actions..."],"vs/base/browser/ui/tree/abstractTree":["Filter","Fuzzy Match","Type to filter","Type to search","Type to search","Close","No elements found."],"vs/base/common/actions":["(empty)"],"vs/base/common/errorMessage":["{0}: {1}","A system error occurred ({0})","An unknown error occurred. Please consult the log for more details.","An unknown error occurred. Please consult the log for more details.","{0} ({1} errors in total)","An unknown error occurred. Please consult the log for more details."],"vs/base/common/keybindingLabels":["Ctrl","Shift","Alt","Windows","Ctrl","Shift","Alt","Super","Control","Shift","Option","Command","Control","Shift","Alt","Windows","Control","Shift","Alt","Super"],"vs/base/common/platform":["_"],"vs/editor/browser/controller/textAreaHandler":["editor","The editor is not accessible at this time.","{0} To enable screen reader optimized mode, use {1}","{0} To enable screen reader optimized mode, open the quick pick with {1} and run the command Toggle Screen Reader Accessibility Mode, which is currently not triggerable via keyboard.","{0} Please assign a keybinding for the command Toggle Screen Reader Accessibility Mode by accessing the keybindings editor with {1} and run it."],"vs/editor/browser/coreCommands":["Stick to the end even when going to longer lines","Stick to the end even when going to longer lines","Removed secondary cursors"],"vs/editor/browser/editorExtensions":["&&Undo","Undo","&&Redo","Redo","&&Select All","Select All"],"vs/editor/browser/widget/codeEditorWidget":["The number of cursors has been limited to {0}. Consider using [find and replace](https://code.visualstudio.com/docs/editor/codebasics#_find-and-replace) for larger changes or increase the editor multi cursor limit setting.","Increase Multi Cursor Limit"],"vs/editor/browser/widget/diffEditor/components/accessibleDiffViewer":["Icon for 'Insert' in accessible diff viewer.","Icon for 'Remove' in accessible diff viewer.","Icon for 'Close' in accessible diff viewer.","Close","Accessible Diff Viewer. Use arrow up and down to navigate.","no lines changed","1 line changed","{0} lines changed","Difference {0} of {1}: original line {2}, {3}, modified line {4}, {5}","blank","{0} unchanged line {1}","{0} original line {1} modified line {2}","+ {0} modified line {1}","- {0} original line {1}"],"vs/editor/browser/widget/diffEditor/components/diffEditorEditors":[" use {0} to open the accessibility help."],"vs/editor/browser/widget/diffEditor/components/diffEditorViewZones/inlineDiffDeletedCodeMargin":["Copy deleted lines","Copy deleted line","Copy changed lines","Copy changed line","Copy deleted line ({0})","Copy changed line ({0})","Revert this change"],"vs/editor/browser/widget/diffEditor/diffEditor.contribution":["Use Inline View When Space Is Limited","Show Moved Code Blocks","Diff Editor","Accessible Diff Viewer","Open Accessible Diff Viewer","Toggle Collapse Unchanged Regions","Toggle Show Moved Code Blocks","Toggle Use Inline View When Space Is Limited","Switch Side","Exit Compare Move","Collapse All Unchanged Regions","Show All Unchanged Regions","Go to Next Difference","Go to Previous Difference"],"vs/editor/browser/widget/diffEditor/features/hideUnchangedRegionsFeature":["Fold Unchanged Region","Click or drag to show more above","Show Unchanged Region","Click or drag to show more below","{0} hidden lines","Double click to unfold"],"vs/editor/browser/widget/diffEditor/features/movedBlocksLinesFeature":["Code moved with changes to line {0}-{1}","Code moved with changes from line {0}-{1}","Code moved to line {0}-{1}","Code moved from line {0}-{1}"],"vs/editor/browser/widget/diffEditor/features/revertButtonsFeature":["Revert Selected Changes","Revert Change"],"vs/editor/browser/widget/diffEditor/registrations.contribution":["The border color for text that got moved in the diff editor.","The active border color for text that got moved in the diff editor.","The color of the shadow around unchanged region widgets.","Line decoration for inserts in the diff editor.","Line decoration for removals in the diff editor."],"vs/editor/browser/widget/hoverWidget/hoverWidget":["Hold {0} key to mouse over"],"vs/editor/browser/widget/multiDiffEditorWidget/colors":["The background color of the diff editor's header","The background color of the multi file diff editor","The border color of the multi file diff editor"],"vs/editor/common/config/editorConfigurationSchema":["Editor","The number of spaces a tab is equal to. This setting is overridden based on the file contents when {0} is on.",'The number of spaces used for indentation or `"tabSize"` to use the value from `#editor.tabSize#`. This setting is overridden based on the file contents when `#editor.detectIndentation#` is on.',"Insert spaces when pressing `Tab`. This setting is overridden based on the file contents when {0} is on.","Controls whether {0} and {1} will be automatically detected when a file is opened based on the file contents.","Remove trailing auto inserted whitespace.","Special handling for large files to disable certain memory intensive features.","Turn off Word Based Suggestions.","Only suggest words from the active document.","Suggest words from all open documents of the same language.","Suggest words from all open documents.","Controls whether completions should be computed based on words in the document and from which documents they are computed.","Semantic highlighting enabled for all color themes.","Semantic highlighting disabled for all color themes.","Semantic highlighting is configured by the current color theme's `semanticHighlighting` setting.","Controls whether the semanticHighlighting is shown for the languages that support it.","Keep peek editors open even when double-clicking their content or when hitting `Escape`.","Lines above this length will not be tokenized for performance reasons","Controls whether the tokenization should happen asynchronously on a web worker.","Controls whether async tokenization should be logged. For debugging only.","Controls whether async tokenization should be verified against legacy background tokenization. Might slow down tokenization. For debugging only.","Defines the bracket symbols that increase or decrease the indentation.","The opening bracket character or string sequence.","The closing bracket character or string sequence.","Defines the bracket pairs that are colorized by their nesting level if bracket pair colorization is enabled.","The opening bracket character or string sequence.","The closing bracket character or string sequence.","Timeout in milliseconds after which diff computation is cancelled. Use 0 for no timeout.","Maximum file size in MB for which to compute diffs. Use 0 for no limit.","Controls whether the diff editor shows the diff side by side or inline.","If the diff editor width is smaller than this value, the inline view is used.","If enabled and the editor width is too small, the inline view is used.","When enabled, the diff editor shows arrows in its glyph margin to revert changes.","When enabled, the diff editor ignores changes in leading or trailing whitespace.","Controls whether the diff editor shows +/- indicators for added/removed changes.","Controls whether the editor shows CodeLens.","Lines will never wrap.","Lines will wrap at the viewport width.","Lines will wrap according to the {0} setting.","Uses the legacy diffing algorithm.","Uses the advanced diffing algorithm.","Controls whether the diff editor shows unchanged regions.","Controls how many lines are used for unchanged regions.","Controls how many lines are used as a minimum for unchanged regions.","Controls how many lines are used as context when comparing unchanged regions.","Controls whether the diff editor should show detected code moves.","Controls whether the diff editor shows empty decorations to see where characters got inserted or deleted."],"vs/editor/common/config/editorOptions":["Use platform APIs to detect when a Screen Reader is attached.","Optimize for usage with a Screen Reader.","Assume a screen reader is not attached.","Controls if the UI should run in a mode where it is optimized for screen readers.","Controls whether a space character is inserted when commenting.","Controls if empty lines should be ignored with toggle, add or remove actions for line comments.","Controls whether copying without a selection copies the current line.","Controls whether the cursor should jump to find matches while typing.","Never seed search string from the editor selection.","Always seed search string from the editor selection, including word at cursor position.","Only seed search string from the editor selection.","Controls whether the search string in the Find Widget is seeded from the editor selection.","Never turn on Find in Selection automatically (default).","Always turn on Find in Selection automatically.","Turn on Find in Selection automatically when multiple lines of content are selected.","Controls the condition for turning on Find in Selection automatically.","Controls whether the Find Widget should read or modify the shared find clipboard on macOS.","Controls whether the Find Widget should add extra lines on top of the editor. When true, you can scroll beyond the first line when the Find Widget is visible.","Controls whether the search automatically restarts from the beginning (or the end) when no further matches can be found.","Enables/Disables font ligatures ('calt' and 'liga' font features). Change this to a string for fine-grained control of the 'font-feature-settings' CSS property.","Explicit 'font-feature-settings' CSS property. A boolean can be passed instead if one only needs to turn on/off ligatures.","Configures font ligatures or font features. Can be either a boolean to enable/disable ligatures or a string for the value of the CSS 'font-feature-settings' property.","Enables/Disables the translation from font-weight to font-variation-settings. Change this to a string for fine-grained control of the 'font-variation-settings' CSS property.","Explicit 'font-variation-settings' CSS property. A boolean can be passed instead if one only needs to translate font-weight to font-variation-settings.","Configures font variations. Can be either a boolean to enable/disable the translation from font-weight to font-variation-settings or a string for the value of the CSS 'font-variation-settings' property.","Controls the font size in pixels.",'Only "normal" and "bold" keywords or numbers between 1 and 1000 are allowed.','Controls the font weight. Accepts "normal" and "bold" keywords or numbers between 1 and 1000.',"Show Peek view of the results (default)","Go to the primary result and show a Peek view","Go to the primary result and enable Peek-less navigation to others","This setting is deprecated, please use separate settings like 'editor.editor.gotoLocation.multipleDefinitions' or 'editor.editor.gotoLocation.multipleImplementations' instead.","Controls the behavior the 'Go to Definition'-command when multiple target locations exist.","Controls the behavior the 'Go to Type Definition'-command when multiple target locations exist.","Controls the behavior the 'Go to Declaration'-command when multiple target locations exist.","Controls the behavior the 'Go to Implementations'-command when multiple target locations exist.","Controls the behavior the 'Go to References'-command when multiple target locations exist.","Alternative command id that is being executed when the result of 'Go to Definition' is the current location.","Alternative command id that is being executed when the result of 'Go to Type Definition' is the current location.","Alternative command id that is being executed when the result of 'Go to Declaration' is the current location.","Alternative command id that is being executed when the result of 'Go to Implementation' is the current location.","Alternative command id that is being executed when the result of 'Go to Reference' is the current location.","Controls whether the hover is shown.","Controls the delay in milliseconds after which the hover is shown.","Controls whether the hover should remain visible when mouse is moved over it.","Controls the delay in milliseconds after which the hover is hidden. Requires `editor.hover.sticky` to be enabled.","Prefer showing hovers above the line, if there's space.","Assumes that all characters are of the same width. This is a fast algorithm that works correctly for monospace fonts and certain scripts (like Latin characters) where glyphs are of equal width.","Delegates wrapping points computation to the browser. This is a slow algorithm, that might cause freezes for large files, but it works correctly in all cases.","Controls the algorithm that computes wrapping points. Note that when in accessibility mode, advanced will be used for the best experience.","Disable the code action menu.","Show the code action menu when the cursor is on lines with code.","Show the code action menu when the cursor is on lines with code or on empty lines.","Enables the Code Action lightbulb in the editor.","Shows the nested current scopes during the scroll at the top of the editor.","Defines the maximum number of sticky lines to show.","Defines the model to use for determining which lines to stick. If the outline model does not exist, it will fall back on the folding provider model which falls back on the indentation model. This order is respected in all three cases.","Enable scrolling of Sticky Scroll with the editor's horizontal scrollbar.","Enables the inlay hints in the editor.","Inlay hints are enabled","Inlay hints are showing by default and hide when holding {0}","Inlay hints are hidden by default and show when holding {0}","Inlay hints are disabled","Controls font size of inlay hints in the editor. As default the {0} is used when the configured value is less than {1} or greater than the editor font size.","Controls font family of inlay hints in the editor. When set to empty, the {0} is used.","Enables the padding around the inlay hints in the editor.",`Controls the line height. - Use 0 to automatically compute the line height from the font size. - Values between 0 and 8 will be used as a multiplier with the font size. - Values greater than or equal to 8 will be used as effective values.`,"Controls whether the minimap is shown.","Controls whether the minimap is hidden automatically.","The minimap has the same size as the editor contents (and might scroll).","The minimap will stretch or shrink as necessary to fill the height of the editor (no scrolling).","The minimap will shrink as necessary to never be larger than the editor (no scrolling).","Controls the size of the minimap.","Controls the side where to render the minimap.","Controls when the minimap slider is shown.","Scale of content drawn in the minimap: 1, 2 or 3.","Render the actual characters on a line as opposed to color blocks.","Limit the width of the minimap to render at most a certain number of columns.","Controls the amount of space between the top edge of the editor and the first line.","Controls the amount of space between the bottom edge of the editor and the last line.","Enables a pop-up that shows parameter documentation and type information as you type.","Controls whether the parameter hints menu cycles or closes when reaching the end of the list.","Quick suggestions show inside the suggest widget","Quick suggestions show as ghost text","Quick suggestions are disabled","Enable quick suggestions inside strings.","Enable quick suggestions inside comments.","Enable quick suggestions outside of strings and comments.","Controls whether suggestions should automatically show up while typing. This can be controlled for typing in comments, strings, and other code. Quick suggestion can be configured to show as ghost text or with the suggest widget. Also be aware of the '{0}'-setting which controls if suggestions are triggered by special characters.","Line numbers are not rendered.","Line numbers are rendered as absolute number.","Line numbers are rendered as distance in lines to cursor position.","Line numbers are rendered every 10 lines.","Controls the display of line numbers.","Number of monospace characters at which this editor ruler will render.","Color of this editor ruler.","Render vertical rulers after a certain number of monospace characters. Use multiple values for multiple rulers. No rulers are drawn if array is empty.","The vertical scrollbar will be visible only when necessary.","The vertical scrollbar will always be visible.","The vertical scrollbar will always be hidden.","Controls the visibility of the vertical scrollbar.","The horizontal scrollbar will be visible only when necessary.","The horizontal scrollbar will always be visible.","The horizontal scrollbar will always be hidden.","Controls the visibility of the horizontal scrollbar.","The width of the vertical scrollbar.","The height of the horizontal scrollbar.","Controls whether clicks scroll by page or jump to click position.","When set, the horizontal scrollbar will not increase the size of the editor's content.","Controls whether all non-basic ASCII characters are highlighted. Only characters between U+0020 and U+007E, tab, line-feed and carriage-return are considered basic ASCII.","Controls whether characters that just reserve space or have no width at all are highlighted.","Controls whether characters are highlighted that can be confused with basic ASCII characters, except those that are common in the current user locale.","Controls whether characters in comments should also be subject to Unicode highlighting.","Controls whether characters in strings should also be subject to Unicode highlighting.","Defines allowed characters that are not being highlighted.","Unicode characters that are common in allowed locales are not being highlighted.","Controls whether to automatically show inline suggestions in the editor.","Show the inline suggestion toolbar whenever an inline suggestion is shown.","Show the inline suggestion toolbar when hovering over an inline suggestion.","Never show the inline suggestion toolbar.","Controls when to show the inline suggestion toolbar.","Controls how inline suggestions interact with the suggest widget. If enabled, the suggest widget is not shown automatically when inline suggestions are available.","Controls the font family of the inline suggestions.","Controls whether bracket pair colorization is enabled or not. Use {0} to override the bracket highlight colors.","Controls whether each bracket type has its own independent color pool.","Enables bracket pair guides.","Enables bracket pair guides only for the active bracket pair.","Disables bracket pair guides.","Controls whether bracket pair guides are enabled or not.","Enables horizontal guides as addition to vertical bracket pair guides.","Enables horizontal guides only for the active bracket pair.","Disables horizontal bracket pair guides.","Controls whether horizontal bracket pair guides are enabled or not.","Controls whether the editor should highlight the active bracket pair.","Controls whether the editor should render indent guides.","Highlights the active indent guide.","Highlights the active indent guide even if bracket guides are highlighted.","Do not highlight the active indent guide.","Controls whether the editor should highlight the active indent guide.","Insert suggestion without overwriting text right of the cursor.","Insert suggestion and overwrite text right of the cursor.","Controls whether words are overwritten when accepting completions. Note that this depends on extensions opting into this feature.","Controls whether filtering and sorting suggestions accounts for small typos.","Controls whether sorting favors words that appear close to the cursor.","Controls whether remembered suggestion selections are shared between multiple workspaces and windows (needs `#editor.suggestSelection#`).","Always select a suggestion when automatically triggering IntelliSense.","Never select a suggestion when automatically triggering IntelliSense.","Select a suggestion only when triggering IntelliSense from a trigger character.","Select a suggestion only when triggering IntelliSense as you type.","Controls whether a suggestion is selected when the widget shows. Note that this only applies to automatically triggered suggestions (`#editor.quickSuggestions#` and `#editor.suggestOnTriggerCharacters#`) and that a suggestion is always selected when explicitly invoked, e.g via `Ctrl+Space`.","Controls whether an active snippet prevents quick suggestions.","Controls whether to show or hide icons in suggestions.","Controls the visibility of the status bar at the bottom of the suggest widget.","Controls whether to preview the suggestion outcome in the editor.","Controls whether suggest details show inline with the label or only in the details widget.","This setting is deprecated. The suggest widget can now be resized.","This setting is deprecated, please use separate settings like 'editor.suggest.showKeywords' or 'editor.suggest.showSnippets' instead.","When enabled IntelliSense shows `method`-suggestions.","When enabled IntelliSense shows `function`-suggestions.","When enabled IntelliSense shows `constructor`-suggestions.","When enabled IntelliSense shows `deprecated`-suggestions.","When enabled IntelliSense filtering requires that the first character matches on a word start. For example, `c` on `Console` or `WebContext` but _not_ on `description`. When disabled IntelliSense will show more results but still sorts them by match quality.","When enabled IntelliSense shows `field`-suggestions.","When enabled IntelliSense shows `variable`-suggestions.","When enabled IntelliSense shows `class`-suggestions.","When enabled IntelliSense shows `struct`-suggestions.","When enabled IntelliSense shows `interface`-suggestions.","When enabled IntelliSense shows `module`-suggestions.","When enabled IntelliSense shows `property`-suggestions.","When enabled IntelliSense shows `event`-suggestions.","When enabled IntelliSense shows `operator`-suggestions.","When enabled IntelliSense shows `unit`-suggestions.","When enabled IntelliSense shows `value`-suggestions.","When enabled IntelliSense shows `constant`-suggestions.","When enabled IntelliSense shows `enum`-suggestions.","When enabled IntelliSense shows `enumMember`-suggestions.","When enabled IntelliSense shows `keyword`-suggestions.","When enabled IntelliSense shows `text`-suggestions.","When enabled IntelliSense shows `color`-suggestions.","When enabled IntelliSense shows `file`-suggestions.","When enabled IntelliSense shows `reference`-suggestions.","When enabled IntelliSense shows `customcolor`-suggestions.","When enabled IntelliSense shows `folder`-suggestions.","When enabled IntelliSense shows `typeParameter`-suggestions.","When enabled IntelliSense shows `snippet`-suggestions.","When enabled IntelliSense shows `user`-suggestions.","When enabled IntelliSense shows `issues`-suggestions.","Whether leading and trailing whitespace should always be selected.","Whether subwords (like 'foo' in 'fooBar' or 'foo_bar') should be selected.","No indentation. Wrapped lines begin at column 1.","Wrapped lines get the same indentation as the parent.","Wrapped lines get +1 indentation toward the parent.","Wrapped lines get +2 indentation toward the parent.","Controls the indentation of wrapped lines.","Controls whether you can drag and drop a file into a text editor by holding down the `Shift` key (instead of opening the file in an editor).","Controls if a widget is shown when dropping files into the editor. This widget lets you control how the file is dropped.","Show the drop selector widget after a file is dropped into the editor.","Never show the drop selector widget. Instead the default drop provider is always used.","Controls whether you can paste content in different ways.","Controls if a widget is shown when pasting content in to the editor. This widget lets you control how the file is pasted.","Show the paste selector widget after content is pasted into the editor.","Never show the paste selector widget. Instead the default pasting behavior is always used.","Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character.","Only accept a suggestion with `Enter` when it makes a textual change.","Controls whether suggestions should be accepted on `Enter`, in addition to `Tab`. Helps to avoid ambiguity between inserting new lines or accepting suggestions.","Controls the number of lines in the editor that can be read out by a screen reader at once. When we detect a screen reader we automatically set the default to be 500. Warning: this has a performance implication for numbers larger than the default.","Editor content","Control whether inline suggestions are announced by a screen reader.","Use language configurations to determine when to autoclose brackets.","Autoclose brackets only when the cursor is to the left of whitespace.","Controls whether the editor should automatically close brackets after the user adds an opening bracket.","Use language configurations to determine when to autoclose comments.","Autoclose comments only when the cursor is to the left of whitespace.","Controls whether the editor should automatically close comments after the user adds an opening comment.","Remove adjacent closing quotes or brackets only if they were automatically inserted.","Controls whether the editor should remove adjacent closing quotes or brackets when deleting.","Type over closing quotes or brackets only if they were automatically inserted.","Controls whether the editor should type over closing quotes or brackets.","Use language configurations to determine when to autoclose quotes.","Autoclose quotes only when the cursor is to the left of whitespace.","Controls whether the editor should automatically close quotes after the user adds an opening quote.","The editor will not insert indentation automatically.","The editor will keep the current line's indentation.","The editor will keep the current line's indentation and honor language defined brackets.","The editor will keep the current line's indentation, honor language defined brackets and invoke special onEnterRules defined by languages.","The editor will keep the current line's indentation, honor language defined brackets, invoke special onEnterRules defined by languages, and honor indentationRules defined by languages.","Controls whether the editor should automatically adjust the indentation when users type, paste, move or indent lines.","Use language configurations to determine when to automatically surround selections.","Surround with quotes but not brackets.","Surround with brackets but not quotes.","Controls whether the editor should automatically surround selections when typing quotes or brackets.","Emulate selection behavior of tab characters when using spaces for indentation. Selection will stick to tab stops.","Controls whether the editor shows CodeLens.","Controls the font family for CodeLens.","Controls the font size in pixels for CodeLens. When set to 0, 90% of `#editor.fontSize#` is used.","Controls whether the editor should render the inline color decorators and color picker.","Make the color picker appear both on click and hover of the color decorator","Make the color picker appear on hover of the color decorator","Make the color picker appear on click of the color decorator","Controls the condition to make a color picker appear from a color decorator","Controls the max number of color decorators that can be rendered in an editor at once.","Enable that the selection with the mouse and keys is doing column selection.","Controls whether syntax highlighting should be copied into the clipboard.","Control the cursor animation style.","Smooth caret animation is disabled.","Smooth caret animation is enabled only when the user moves the cursor with an explicit gesture.","Smooth caret animation is always enabled.","Controls whether the smooth caret animation should be enabled.","Controls the cursor style.","Controls the minimal number of visible leading lines (minimum 0) and trailing lines (minimum 1) surrounding the cursor. Known as 'scrollOff' or 'scrollOffset' in some other editors.","`cursorSurroundingLines` is enforced only when triggered via the keyboard or API.","`cursorSurroundingLines` is enforced always.","Controls when `#cursorSurroundingLines#` should be enforced.","Controls the width of the cursor when `#editor.cursorStyle#` is set to `line`.","Controls whether the editor should allow moving selections via drag and drop.","Use a new rendering method with svgs.","Use a new rendering method with font characters.","Use the stable rendering method.","Controls whether whitespace is rendered with a new, experimental method.","Scrolling speed multiplier when pressing `Alt`.","Controls whether the editor has code folding enabled.","Use a language-specific folding strategy if available, else the indentation-based one.","Use the indentation-based folding strategy.","Controls the strategy for computing folding ranges.","Controls whether the editor should highlight folded ranges.","Controls whether the editor automatically collapses import ranges.","The maximum number of foldable regions. Increasing this value may result in the editor becoming less responsive when the current source has a large number of foldable regions.","Controls whether clicking on the empty content after a folded line will unfold the line.","Controls the font family.","Controls whether the editor should automatically format the pasted content. A formatter must be available and the formatter should be able to format a range in a document.","Controls whether the editor should automatically format the line after typing.","Controls whether the editor should render the vertical glyph margin. Glyph margin is mostly used for debugging.","Controls whether the cursor should be hidden in the overview ruler.","Controls the letter spacing in pixels.","Controls whether the editor has linked editing enabled. Depending on the language, related symbols such as HTML tags, are updated while editing.","Controls whether the editor should detect links and make them clickable.","Highlight matching brackets.","A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.","Zoom the font of the editor when using mouse wheel and holding `Cmd`.","Zoom the font of the editor when using mouse wheel and holding `Ctrl`.","Merge multiple cursors when they are overlapping.","Maps to `Control` on Windows and Linux and to `Command` on macOS.","Maps to `Alt` on Windows and Linux and to `Option` on macOS.","The modifier to be used to add multiple cursors with the mouse. The Go to Definition and Open Link mouse gestures will adapt such that they do not conflict with the [multicursor modifier](https://code.visualstudio.com/docs/editor/codebasics#_multicursor-modifier).","Each cursor pastes a single line of the text.","Each cursor pastes the full text.","Controls pasting when the line count of the pasted text matches the cursor count.","Controls the max number of cursors that can be in an active editor at once.","Does not highlight occurrences.","Highlights occurrences only in the current file.","Experimental: Highlights occurrences across all valid open files.","Controls whether occurrences should be highlighted across open files.","Controls whether a border should be drawn around the overview ruler.","Focus the tree when opening peek","Focus the editor when opening peek","Controls whether to focus the inline editor or the tree in the peek widget.","Controls whether the Go to Definition mouse gesture always opens the peek widget.","Controls the delay in milliseconds after which quick suggestions will show up.","Controls whether the editor auto renames on type.","Deprecated, use `editor.linkedEditing` instead.","Controls whether the editor should render control characters.","Render last line number when the file ends with a newline.","Highlights both the gutter and the current line.","Controls how the editor should render the current line highlight.","Controls if the editor should render the current line highlight only when the editor is focused.","Render whitespace characters except for single spaces between words.","Render whitespace characters only on selected text.","Render only trailing whitespace characters.","Controls how the editor should render whitespace characters.","Controls whether selections should have rounded corners.","Controls the number of extra characters beyond which the editor will scroll horizontally.","Controls whether the editor will scroll beyond the last line.","Scroll only along the predominant axis when scrolling both vertically and horizontally at the same time. Prevents horizontal drift when scrolling vertically on a trackpad.","Controls whether the Linux primary clipboard should be supported.","Controls whether the editor should highlight matches similar to the selection.","Always show the folding controls.","Never show the folding controls and reduce the gutter size.","Only show the folding controls when the mouse is over the gutter.","Controls when the folding controls on the gutter are shown.","Controls fading out of unused code.","Controls strikethrough deprecated variables.","Show snippet suggestions on top of other suggestions.","Show snippet suggestions below other suggestions.","Show snippets suggestions with other suggestions.","Do not show snippet suggestions.","Controls whether snippets are shown with other suggestions and how they are sorted.","Controls whether the editor will scroll using an animation.","Controls whether the accessibility hint should be provided to screen reader users when an inline completion is shown.","Font size for the suggest widget. When set to {0}, the value of {1} is used.","Line height for the suggest widget. When set to {0}, the value of {1} is used. The minimum value is 8.","Controls whether suggestions should automatically show up when typing trigger characters.","Always select the first suggestion.","Select recent suggestions unless further typing selects one, e.g. `console.| -> console.log` because `log` has been completed recently.","Select suggestions based on previous prefixes that have completed those suggestions, e.g. `co -> console` and `con -> const`.","Controls how suggestions are pre-selected when showing the suggest list.","Tab complete will insert the best matching suggestion when pressing tab.","Disable tab completions.","Tab complete snippets when their prefix match. Works best when 'quickSuggestions' aren't enabled.","Enables tab completions.","Unusual line terminators are automatically removed.","Unusual line terminators are ignored.","Unusual line terminators prompt to be removed.","Remove unusual line terminators that might cause problems.","Inserting and deleting whitespace follows tab stops.","Use the default line break rule.","Word breaks should not be used for Chinese/Japanese/Korean (CJK) text. Non-CJK text behavior is the same as for normal.","Controls the word break rules used for Chinese/Japanese/Korean (CJK) text.","Characters that will be used as word separators when doing word related navigations or operations.","Lines will never wrap.","Lines will wrap at the viewport width.","Lines will wrap at `#editor.wordWrapColumn#`.","Lines will wrap at the minimum of viewport and `#editor.wordWrapColumn#`.","Controls how lines should wrap.","Controls the wrapping column of the editor when `#editor.wordWrap#` is `wordWrapColumn` or `bounded`.","Controls whether inline color decorations should be shown using the default document color provider","Controls whether the editor receives tabs or defers them to the workbench for navigation."],"vs/editor/common/core/editorColorRegistry":["Background color for the highlight of line at the cursor position.","Background color for the border around the line at the cursor position.","Background color of highlighted ranges, like by quick open and find features. The color must not be opaque so as not to hide underlying decorations.","Background color of the border around highlighted ranges.","Background color of highlighted symbol, like for go to definition or go next/previous symbol. The color must not be opaque so as not to hide underlying decorations.","Background color of the border around highlighted symbols.","Color of the editor cursor.","The background color of the editor cursor. Allows customizing the color of a character overlapped by a block cursor.","Color of whitespace characters in the editor.","Color of editor line numbers.","Color of the editor indentation guides.","'editorIndentGuide.background' is deprecated. Use 'editorIndentGuide.background1' instead.","Color of the active editor indentation guides.","'editorIndentGuide.activeBackground' is deprecated. Use 'editorIndentGuide.activeBackground1' instead.","Color of the editor indentation guides (1).","Color of the editor indentation guides (2).","Color of the editor indentation guides (3).","Color of the editor indentation guides (4).","Color of the editor indentation guides (5).","Color of the editor indentation guides (6).","Color of the active editor indentation guides (1).","Color of the active editor indentation guides (2).","Color of the active editor indentation guides (3).","Color of the active editor indentation guides (4).","Color of the active editor indentation guides (5).","Color of the active editor indentation guides (6).","Color of editor active line number","Id is deprecated. Use 'editorLineNumber.activeForeground' instead.","Color of editor active line number","Color of the final editor line when editor.renderFinalNewline is set to dimmed.","Color of the editor rulers.","Foreground color of editor CodeLens","Background color behind matching brackets","Color for matching brackets boxes","Color of the overview ruler border.","Background color of the editor overview ruler.","Background color of the editor gutter. The gutter contains the glyph margins and the line numbers.","Border color of unnecessary (unused) source code in the editor.",`Opacity of unnecessary (unused) source code in the editor. For example, "#000000c0" will render the code with 75% opacity. For high contrast themes, use the 'editorUnnecessaryCode.border' theme color to underline unnecessary code instead of fading it out.`,"Border color of ghost text in the editor.","Foreground color of the ghost text in the editor.","Background color of the ghost text in the editor.","Overview ruler marker color for range highlights. The color must not be opaque so as not to hide underlying decorations.","Overview ruler marker color for errors.","Overview ruler marker color for warnings.","Overview ruler marker color for infos.","Foreground color of brackets (1). Requires enabling bracket pair colorization.","Foreground color of brackets (2). Requires enabling bracket pair colorization.","Foreground color of brackets (3). Requires enabling bracket pair colorization.","Foreground color of brackets (4). Requires enabling bracket pair colorization.","Foreground color of brackets (5). Requires enabling bracket pair colorization.","Foreground color of brackets (6). Requires enabling bracket pair colorization.","Foreground color of unexpected brackets.","Background color of inactive bracket pair guides (1). Requires enabling bracket pair guides.","Background color of inactive bracket pair guides (2). Requires enabling bracket pair guides.","Background color of inactive bracket pair guides (3). Requires enabling bracket pair guides.","Background color of inactive bracket pair guides (4). Requires enabling bracket pair guides.","Background color of inactive bracket pair guides (5). Requires enabling bracket pair guides.","Background color of inactive bracket pair guides (6). Requires enabling bracket pair guides.","Background color of active bracket pair guides (1). Requires enabling bracket pair guides.","Background color of active bracket pair guides (2). Requires enabling bracket pair guides.","Background color of active bracket pair guides (3). Requires enabling bracket pair guides.","Background color of active bracket pair guides (4). Requires enabling bracket pair guides.","Background color of active bracket pair guides (5). Requires enabling bracket pair guides.","Background color of active bracket pair guides (6). Requires enabling bracket pair guides.","Border color used to highlight unicode characters.","Background color used to highlight unicode characters."],"vs/editor/common/editorContextKeys":["Whether the editor text has focus (cursor is blinking)","Whether the editor or an editor widget has focus (e.g. focus is in the find widget)","Whether an editor or a rich text input has focus (cursor is blinking)","Whether the editor is read-only","Whether the context is a diff editor","Whether the context is an embedded diff editor","Whether the context is a multi diff editor","Whether all files in multi diff editor are collapsed","Whether the diff editor has changes","Whether a moved code block is selected for comparison","Whether the accessible diff viewer is visible","Whether the diff editor render side by side inline breakpoint is reached","Whether `editor.columnSelection` is enabled","Whether the editor has text selected","Whether the editor has multiple selections","Whether `Tab` will move focus out of the editor","Whether the editor hover is visible","Whether the editor hover is focused","Whether the sticky scroll is focused","Whether the sticky scroll is visible","Whether the standalone color picker is visible","Whether the standalone color picker is focused","Whether the editor is part of a larger editor (e.g. notebooks)","The language identifier of the editor","Whether the editor has a completion item provider","Whether the editor has a code actions provider","Whether the editor has a code lens provider","Whether the editor has a definition provider","Whether the editor has a declaration provider","Whether the editor has an implementation provider","Whether the editor has a type definition provider","Whether the editor has a hover provider","Whether the editor has a document highlight provider","Whether the editor has a document symbol provider","Whether the editor has a reference provider","Whether the editor has a rename provider","Whether the editor has a signature help provider","Whether the editor has an inline hints provider","Whether the editor has a document formatting provider","Whether the editor has a document selection formatting provider","Whether the editor has multiple document formatting providers","Whether the editor has multiple document selection formatting providers"],"vs/editor/common/languages":["array","boolean","class","constant","constructor","enumeration","enumeration member","event","field","file","function","interface","key","method","module","namespace","null","number","object","operator","package","property","string","struct","type parameter","variable","{0} ({1})"],"vs/editor/common/languages/modesRegistry":["Plain Text"],"vs/editor/common/model/editStack":["Typing"],"vs/editor/common/standaloneStrings":["Developer: Inspect Tokens","Go to Line/Column...","Show all Quick Access Providers","Command Palette","Show And Run Commands","Go to Symbol...","Go to Symbol by Category...","Editor content","Press Alt+F1 for Accessibility Options.","Toggle High Contrast Theme","Made {0} edits in {1} files"],"vs/editor/common/viewLayout/viewLineRenderer":["Show more ({0})","{0} chars"],"vs/editor/contrib/anchorSelect/browser/anchorSelect":["Selection Anchor","Anchor set at {0}:{1}","Set Selection Anchor","Go to Selection Anchor","Select from Anchor to Cursor","Cancel Selection Anchor"],"vs/editor/contrib/bracketMatching/browser/bracketMatching":["Overview ruler marker color for matching brackets.","Go to Bracket","Select to Bracket","Remove Brackets","Go to &&Bracket","Select the text inside and including the brackets or curly braces"],"vs/editor/contrib/caretOperations/browser/caretOperations":["Move Selected Text Left","Move Selected Text Right"],"vs/editor/contrib/caretOperations/browser/transpose":["Transpose Letters"],"vs/editor/contrib/clipboard/browser/clipboard":["Cu&&t","Cut","Cut","Cut","&&Copy","Copy","Copy","Copy","Copy As","Copy As","Share","Share","Share","&&Paste","Paste","Paste","Paste","Copy With Syntax Highlighting"],"vs/editor/contrib/codeAction/browser/codeAction":["An unknown error occurred while applying the code action"],"vs/editor/contrib/codeAction/browser/codeActionCommands":["Kind of the code action to run.","Controls when the returned actions are applied.","Always apply the first returned code action.","Apply the first returned code action if it is the only one.","Do not apply the returned code actions.","Controls if only preferred code actions should be returned.","Quick Fix...","No code actions available","No preferred code actions for '{0}' available","No code actions for '{0}' available","No preferred code actions available","No code actions available","Refactor...","No preferred refactorings for '{0}' available","No refactorings for '{0}' available","No preferred refactorings available","No refactorings available","Source Action...","No preferred source actions for '{0}' available","No source actions for '{0}' available","No preferred source actions available","No source actions available","Organize Imports","No organize imports action available","Fix All","No fix all action available","Auto Fix...","No auto fixes available"],"vs/editor/contrib/codeAction/browser/codeActionContributions":["Enable/disable showing group headers in the Code Action menu.","Enable/disable showing nearest Quick Fix within a line when not currently on a diagnostic."],"vs/editor/contrib/codeAction/browser/codeActionController":["Context: {0} at line {1} and column {2}.","Hide Disabled","Show Disabled"],"vs/editor/contrib/codeAction/browser/codeActionMenu":["More Actions...","Quick Fix","Extract","Inline","Rewrite","Move","Surround With","Source Action"],"vs/editor/contrib/codeAction/browser/lightBulbWidget":["Run: {0}","Show Code Actions. Preferred Quick Fix Available ({0})","Show Code Actions ({0})","Show Code Actions"],"vs/editor/contrib/codelens/browser/codelensController":["Show CodeLens Commands For Current Line","Select a command"],"vs/editor/contrib/colorPicker/browser/colorPickerWidget":["Click to toggle color options (rgb/hsl/hex)","Icon to close the color picker"],"vs/editor/contrib/colorPicker/browser/standaloneColorPickerActions":["Show or Focus Standalone Color Picker","&&Show or Focus Standalone Color Picker","Hide the Color Picker","Insert Color with Standalone Color Picker"],"vs/editor/contrib/comment/browser/comment":["Toggle Line Comment","&&Toggle Line Comment","Add Line Comment","Remove Line Comment","Toggle Block Comment","Toggle &&Block Comment"],"vs/editor/contrib/contextmenu/browser/contextmenu":["Minimap","Render Characters","Vertical size","Proportional","Fill","Fit","Slider","Mouse Over","Always","Show Editor Context Menu"],"vs/editor/contrib/cursorUndo/browser/cursorUndo":["Cursor Undo","Cursor Redo"],"vs/editor/contrib/dropOrPasteInto/browser/copyPasteContribution":["Paste As...","The id of the paste edit to try applying. If not provided, the editor will show a picker.","Paste as Text"],"vs/editor/contrib/dropOrPasteInto/browser/copyPasteController":["Whether the paste widget is showing","Show paste options...","No paste edits for '{0}' found","Running paste handlers. Click to cancel","Select Paste Action","Running paste handlers"],"vs/editor/contrib/dropOrPasteInto/browser/defaultProviders":["Built-in","Insert Plain Text","Insert Uris","Insert Uri","Insert Paths","Insert Path","Insert Relative Paths","Insert Relative Path","Insert HTML"],"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorContribution":["Configures the default drop provider to use for content of a given mime type."],"vs/editor/contrib/dropOrPasteInto/browser/dropIntoEditorController":["Whether the drop widget is showing","Show drop options...","Running drop handlers. Click to cancel"],"vs/editor/contrib/editorState/browser/keybindingCancellation":["Whether the editor runs a cancellable operation, e.g. like 'Peek References'"],"vs/editor/contrib/find/browser/findController":["The file is too large to perform a replace all operation.","Find","&&Find","Find With Arguments","Find With Selection","Find Next","Find Previous","Go to Match...","No matches. Try searching for something else.","Type a number to go to a specific match (between 1 and {0})","Please type a number between 1 and {0}","Please type a number between 1 and {0}","Find Next Selection","Find Previous Selection","Replace","&&Replace"],"vs/editor/contrib/find/browser/findWidget":["Icon for 'Find in Selection' in the editor find widget.","Icon to indicate that the editor find widget is collapsed.","Icon to indicate that the editor find widget is expanded.","Icon for 'Replace' in the editor find widget.","Icon for 'Replace All' in the editor find widget.","Icon for 'Find Previous' in the editor find widget.","Icon for 'Find Next' in the editor find widget.","Find / Replace","Find","Find","Previous Match","Next Match","Find in Selection","Close","Replace","Replace","Replace","Replace All","Toggle Replace","Only the first {0} results are highlighted, but all find operations work on the entire text.","{0} of {1}","No results","{0} found","{0} found for '{1}'","{0} found for '{1}', at {2}","{0} found for '{1}'","Ctrl+Enter now inserts line break instead of replacing all. You can modify the keybinding for editor.action.replaceAll to override this behavior."],"vs/editor/contrib/folding/browser/folding":["Unfold","Unfold Recursively","Fold","Toggle Fold","Fold Recursively","Fold All Block Comments","Fold All Regions","Unfold All Regions","Fold All Except Selected","Unfold All Except Selected","Fold All","Unfold All","Go to Parent Fold","Go to Previous Folding Range","Go to Next Folding Range","Create Folding Range from Selection","Remove Manual Folding Ranges","Fold Level {0}"],"vs/editor/contrib/folding/browser/foldingDecorations":["Background color behind folded ranges. The color must not be opaque so as not to hide underlying decorations.","Color of the folding control in the editor gutter.","Icon for expanded ranges in the editor glyph margin.","Icon for collapsed ranges in the editor glyph margin.","Icon for manually collapsed ranges in the editor glyph margin.","Icon for manually expanded ranges in the editor glyph margin.","Click to expand the range.","Click to collapse the range."],"vs/editor/contrib/fontZoom/browser/fontZoom":["Increase Editor Font Size","Decrease Editor Font Size","Reset Editor Font Size"],"vs/editor/contrib/format/browser/formatActions":["Format Document","Format Selection"],"vs/editor/contrib/gotoError/browser/gotoError":["Go to Next Problem (Error, Warning, Info)","Icon for goto next marker.","Go to Previous Problem (Error, Warning, Info)","Icon for goto previous marker.","Go to Next Problem in Files (Error, Warning, Info)","Next &&Problem","Go to Previous Problem in Files (Error, Warning, Info)","Previous &&Problem"],"vs/editor/contrib/gotoError/browser/gotoErrorWidget":["Error","Warning","Info","Hint","{0} at {1}. ","{0} of {1} problems","{0} of {1} problem","Editor marker navigation widget error color.","Editor marker navigation widget error heading background.","Editor marker navigation widget warning color.","Editor marker navigation widget warning heading background.","Editor marker navigation widget info color.","Editor marker navigation widget info heading background.","Editor marker navigation widget background."],"vs/editor/contrib/gotoSymbol/browser/goToCommands":["Peek","Definitions","No definition found for '{0}'","No definition found","Go to Definition","Go to &&Definition","Open Definition to the Side","Peek Definition","Declarations","No declaration found for '{0}'","No declaration found","Go to Declaration","Go to &&Declaration","No declaration found for '{0}'","No declaration found","Peek Declaration","Type Definitions","No type definition found for '{0}'","No type definition found","Go to Type Definition","Go to &&Type Definition","Peek Type Definition","Implementations","No implementation found for '{0}'","No implementation found","Go to Implementations","Go to &&Implementations","Peek Implementations","No references found for '{0}'","No references found","Go to References","Go to &&References","References","Peek References","References","Go to Any Symbol","Locations","No results for '{0}'","References"],"vs/editor/contrib/gotoSymbol/browser/link/goToDefinitionAtPosition":["Click to show {0} definitions."],"vs/editor/contrib/gotoSymbol/browser/peek/referencesController":["Whether reference peek is visible, like 'Peek References' or 'Peek Definition'","Loading...","{0} ({1})"],"vs/editor/contrib/gotoSymbol/browser/peek/referencesTree":["{0} references","{0} reference","References"],"vs/editor/contrib/gotoSymbol/browser/peek/referencesWidget":["no preview available","No results","References"],"vs/editor/contrib/gotoSymbol/browser/referencesModel":["in {0} on line {1} at column {2}","{0} in {1} on line {2} at column {3}","1 symbol in {0}, full path {1}","{0} symbols in {1}, full path {2}","No results found","Found 1 symbol in {0}","Found {0} symbols in {1}","Found {0} symbols in {1} files"],"vs/editor/contrib/gotoSymbol/browser/symbolNavigation":["Whether there are symbol locations that can be navigated via keyboard-only.","Symbol {0} of {1}, {2} for next","Symbol {0} of {1}"],"vs/editor/contrib/hover/browser/hover":["Show or Focus Hover","The hover will not automatically take focus.","The hover will take focus only if it is already visible.","The hover will automatically take focus when it appears.","Show Definition Preview Hover","Scroll Up Hover","Scroll Down Hover","Scroll Left Hover","Scroll Right Hover","Page Up Hover","Page Down Hover","Go To Top Hover","Go To Bottom Hover"],"vs/editor/contrib/hover/browser/markdownHoverParticipant":["Loading...","Rendering paused for long line for performance reasons. This can be configured via `editor.stopRenderingLineAfter`.","Tokenization is skipped for long lines for performance reasons. This can be configured via `editor.maxTokenizationLineLength`."],"vs/editor/contrib/hover/browser/markerHoverParticipant":["View Problem","No quick fixes available","Checking for quick fixes...","No quick fixes available","Quick Fix..."],"vs/editor/contrib/inPlaceReplace/browser/inPlaceReplace":["Replace with Previous Value","Replace with Next Value"],"vs/editor/contrib/indentation/browser/indentation":["Convert Indentation to Spaces","Convert Indentation to Tabs","Configured Tab Size","Default Tab Size","Current Tab Size","Select Tab Size for Current File","Indent Using Tabs","Indent Using Spaces","Change Tab Display Size","Detect Indentation from Content","Reindent Lines","Reindent Selected Lines"],"vs/editor/contrib/inlayHints/browser/inlayHintsHover":["Double-click to insert","cmd + click","ctrl + click","option + click","alt + click","Go to Definition ({0}), right click for more","Go to Definition ({0})","Execute Command"],"vs/editor/contrib/inlineCompletions/browser/commands":["Show Next Inline Suggestion","Show Previous Inline Suggestion","Trigger Inline Suggestion","Accept Next Word Of Inline Suggestion","Accept Word","Accept Next Line Of Inline Suggestion","Accept Line","Accept Inline Suggestion","Accept","Hide Inline Suggestion","Always Show Toolbar"],"vs/editor/contrib/inlineCompletions/browser/hoverParticipant":["Suggestion:"],"vs/editor/contrib/inlineCompletions/browser/inlineCompletionContextKeys":["Whether an inline suggestion is visible","Whether the inline suggestion starts with whitespace","Whether the inline suggestion starts with whitespace that is less than what would be inserted by tab","Whether suggestions should be suppressed for the current suggestion"],"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsController":["Inspect this in the accessible view ({0})"],"vs/editor/contrib/inlineCompletions/browser/inlineCompletionsHintsWidget":["Icon for show next parameter hint.","Icon for show previous parameter hint.","{0} ({1})","Previous","Next"],"vs/editor/contrib/lineSelection/browser/lineSelection":["Expand Line Selection"],"vs/editor/contrib/linesOperations/browser/linesOperations":["Copy Line Up","&&Copy Line Up","Copy Line Down","Co&&py Line Down","Duplicate Selection","&&Duplicate Selection","Move Line Up","Mo&&ve Line Up","Move Line Down","Move &&Line Down","Sort Lines Ascending","Sort Lines Descending","Delete Duplicate Lines","Trim Trailing Whitespace","Delete Line","Indent Line","Outdent Line","Insert Line Above","Insert Line Below","Delete All Left","Delete All Right","Join Lines","Transpose Characters around the Cursor","Transform to Uppercase","Transform to Lowercase","Transform to Title Case","Transform to Snake Case","Transform to Camel Case","Transform to Kebab Case"],"vs/editor/contrib/linkedEditing/browser/linkedEditing":["Start Linked Editing","Background color when the editor auto renames on type."],"vs/editor/contrib/links/browser/links":["Failed to open this link because it is not well-formed: {0}","Failed to open this link because its target is missing.","Execute command","Follow link","cmd + click","ctrl + click","option + click","alt + click","Execute command {0}","Open Link"],"vs/editor/contrib/message/browser/messageController":["Whether the editor is currently showing an inline message"],"vs/editor/contrib/multicursor/browser/multicursor":["Cursor added: {0}","Cursors added: {0}","Add Cursor Above","&&Add Cursor Above","Add Cursor Below","A&&dd Cursor Below","Add Cursors to Line Ends","Add C&&ursors to Line Ends","Add Cursors To Bottom","Add Cursors To Top","Add Selection To Next Find Match","Add &&Next Occurrence","Add Selection To Previous Find Match","Add P&&revious Occurrence","Move Last Selection To Next Find Match","Move Last Selection To Previous Find Match","Select All Occurrences of Find Match","Select All &&Occurrences","Change All Occurrences","Focus Next Cursor","Focuses the next cursor","Focus Previous Cursor","Focuses the previous cursor"],"vs/editor/contrib/parameterHints/browser/parameterHints":["Trigger Parameter Hints"],"vs/editor/contrib/parameterHints/browser/parameterHintsWidget":["Icon for show next parameter hint.","Icon for show previous parameter hint.","{0}, hint","Foreground color of the active item in the parameter hint."],"vs/editor/contrib/peekView/browser/peekView":["Whether the current code editor is embedded inside peek","Close","Background color of the peek view title area.","Color of the peek view title.","Color of the peek view title info.","Color of the peek view borders and arrow.","Background color of the peek view result list.","Foreground color for line nodes in the peek view result list.","Foreground color for file nodes in the peek view result list.","Background color of the selected entry in the peek view result list.","Foreground color of the selected entry in the peek view result list.","Background color of the peek view editor.","Background color of the gutter in the peek view editor.","Background color of sticky scroll in the peek view editor.","Match highlight color in the peek view result list.","Match highlight color in the peek view editor.","Match highlight border in the peek view editor."],"vs/editor/contrib/quickAccess/browser/gotoLineQuickAccess":["Open a text editor first to go to a line.","Go to line {0} and character {1}.","Go to line {0}.","Current Line: {0}, Character: {1}. Type a line number between 1 and {2} to navigate to.","Current Line: {0}, Character: {1}. Type a line number to navigate to."],"vs/editor/contrib/quickAccess/browser/gotoSymbolQuickAccess":["To go to a symbol, first open a text editor with symbol information.","The active text editor does not provide symbol information.","No matching editor symbols","No editor symbols","Open to the Side","Open to the Bottom","symbols ({0})","properties ({0})","methods ({0})","functions ({0})","constructors ({0})","variables ({0})","classes ({0})","structs ({0})","events ({0})","operators ({0})","interfaces ({0})","namespaces ({0})","packages ({0})","type parameters ({0})","modules ({0})","properties ({0})","enumerations ({0})","enumeration members ({0})","strings ({0})","files ({0})","arrays ({0})","numbers ({0})","booleans ({0})","objects ({0})","keys ({0})","fields ({0})","constants ({0})"],"vs/editor/contrib/readOnlyMessage/browser/contribution":["Cannot edit in read-only input","Cannot edit in read-only editor"],"vs/editor/contrib/rename/browser/rename":["No result.","An unknown error occurred while resolving rename location","Renaming '{0}' to '{1}'","Renaming {0} to {1}","Successfully renamed '{0}' to '{1}'. Summary: {2}","Rename failed to apply edits","Rename failed to compute edits","Rename Symbol","Enable/disable the ability to preview changes before renaming"],"vs/editor/contrib/rename/browser/renameInputField":["Whether the rename input widget is visible","Rename input. Type new name and press Enter to commit.","{0} to Rename, {1} to Preview"],"vs/editor/contrib/smartSelect/browser/smartSelect":["Expand Selection","&&Expand Selection","Shrink Selection","&&Shrink Selection"],"vs/editor/contrib/snippet/browser/snippetController2":["Whether the editor in current in snippet mode","Whether there is a next tab stop when in snippet mode","Whether there is a previous tab stop when in snippet mode","Go to next placeholder..."],"vs/editor/contrib/snippet/browser/snippetVariables":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sun","Mon","Tue","Wed","Thu","Fri","Sat","January","February","March","April","May","June","July","August","September","October","November","December","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"vs/editor/contrib/stickyScroll/browser/stickyScrollActions":["Toggle Editor Sticky Scroll","&&Toggle Editor Sticky Scroll","Sticky Scroll","&&Sticky Scroll","Focus Sticky Scroll","&&Focus Sticky Scroll","Select next sticky scroll line","Select previous sticky scroll line","Go to focused sticky scroll line","Select Editor"],"vs/editor/contrib/suggest/browser/suggest":["Whether any suggestion is focused","Whether suggestion details are visible","Whether there are multiple suggestions to pick from","Whether inserting the current suggestion yields in a change or has everything already been typed","Whether suggestions are inserted when pressing Enter","Whether the current suggestion has insert and replace behaviour","Whether the default behaviour is to insert or replace","Whether the current suggestion supports to resolve further details"],"vs/editor/contrib/suggest/browser/suggestController":["Accepting '{0}' made {1} additional edits","Trigger Suggest","Insert","Insert","Replace","Replace","Insert","show less","show more","Reset Suggest Widget Size"],"vs/editor/contrib/suggest/browser/suggestWidget":["Background color of the suggest widget.","Border color of the suggest widget.","Foreground color of the suggest widget.","Foreground color of the selected entry in the suggest widget.","Icon foreground color of the selected entry in the suggest widget.","Background color of the selected entry in the suggest widget.","Color of the match highlights in the suggest widget.","Color of the match highlights in the suggest widget when an item is focused.","Foreground color of the suggest widget status.","Loading...","No suggestions.","Suggest","{0} {1}, {2}","{0} {1}","{0}, {1}","{0}, docs: {1}"],"vs/editor/contrib/suggest/browser/suggestWidgetDetails":["Close","Loading..."],"vs/editor/contrib/suggest/browser/suggestWidgetRenderer":["Icon for more information in the suggest widget.","Read More"],"vs/editor/contrib/suggest/browser/suggestWidgetStatus":["{0} ({1})"],"vs/editor/contrib/symbolIcons/browser/symbolIcons":["The foreground color for array symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for boolean symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for class symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for color symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for constant symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for constructor symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for enumerator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for enumerator member symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for event symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for field symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for file symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for folder symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for function symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for interface symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for key symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for keyword symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for method symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for module symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for namespace symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for null symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for number symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for object symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for operator symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for package symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for property symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for reference symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for snippet symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for string symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for struct symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for text symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for type parameter symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for unit symbols. These symbols appear in the outline, breadcrumb, and suggest widget.","The foreground color for variable symbols. These symbols appear in the outline, breadcrumb, and suggest widget."],"vs/editor/contrib/toggleTabFocusMode/browser/toggleTabFocusMode":["Toggle Tab Key Moves Focus","Pressing Tab will now move focus to the next focusable element","Pressing Tab will now insert the tab character"],"vs/editor/contrib/tokenization/browser/tokenization":["Developer: Force Retokenize"],"vs/editor/contrib/unicodeHighlighter/browser/unicodeHighlighter":["Icon shown with a warning message in the extensions editor.","This document contains many non-basic ASCII unicode characters","This document contains many ambiguous unicode characters","This document contains many invisible unicode characters","Configure Unicode Highlight Options","The character {0} could be confused with the ASCII character {1}, which is more common in source code.","The character {0} could be confused with the character {1}, which is more common in source code.","The character {0} is invisible.","The character {0} is not a basic ASCII character.","Adjust settings","Disable Highlight In Comments","Disable highlighting of characters in comments","Disable Highlight In Strings","Disable highlighting of characters in strings","Disable Ambiguous Highlight","Disable highlighting of ambiguous characters","Disable Invisible Highlight","Disable highlighting of invisible characters","Disable Non ASCII Highlight","Disable highlighting of non basic ASCII characters","Show Exclude Options","Exclude {0} (invisible character) from being highlighted","Exclude {0} from being highlighted",'Allow unicode characters that are more common in the language "{0}".'],"vs/editor/contrib/unusualLineTerminators/browser/unusualLineTerminators":["Unusual Line Terminators","Detected unusual line terminators","The file '{0}' contains one or more unusual line terminator characters, like Line Separator (LS) or Paragraph Separator (PS).\n\nIt is recommended to remove them from the file. This can be configured via `editor.unusualLineTerminators`.","&&Remove Unusual Line Terminators","Ignore"],"vs/editor/contrib/wordHighlighter/browser/highlightDecorations":["Background color of a symbol during read-access, like reading a variable. The color must not be opaque so as not to hide underlying decorations.","Background color of a symbol during write-access, like writing to a variable. The color must not be opaque so as not to hide underlying decorations.","Background color of a textual occurrence for a symbol. The color must not be opaque so as not to hide underlying decorations.","Border color of a symbol during read-access, like reading a variable.","Border color of a symbol during write-access, like writing to a variable.","Border color of a textual occurrence for a symbol.","Overview ruler marker color for symbol highlights. The color must not be opaque so as not to hide underlying decorations.","Overview ruler marker color for write-access symbol highlights. The color must not be opaque so as not to hide underlying decorations.","Overview ruler marker color of a textual occurrence for a symbol. The color must not be opaque so as not to hide underlying decorations."],"vs/editor/contrib/wordHighlighter/browser/wordHighlighter":["Go to Next Symbol Highlight","Go to Previous Symbol Highlight","Trigger Symbol Highlight"],"vs/editor/contrib/wordOperations/browser/wordOperations":["Delete Word"],"vs/platform/action/common/actionCommonCategories":["Developer","View","Help","Test","File","Preferences"],"vs/platform/actionWidget/browser/actionList":["{0} to apply, {1} to preview","{0} to apply","{0}, Disabled Reason: {1}","Action Widget"],"vs/platform/actionWidget/browser/actionWidget":["Background color for toggled action items in action bar.","Whether the action widget list is visible","Hide action widget","Select previous action","Select next action","Accept selected action","Preview selected action"],"vs/platform/actions/browser/menuEntryActionViewItem":["{0} ({1})","{0} ({1})",`{0} [{1}] {2}`],"vs/platform/actions/browser/toolbar":["Hide","Reset Menu"],"vs/platform/actions/common/menuService":["Hide '{0}'"],"vs/platform/audioCues/browser/audioCueService":["Error on Line","Error","Warning on Line","Warning","Folded Area on Line","Folded","Breakpoint on Line","Breakpoint","Inline Suggestion on Line","Terminal Quick Fix","Quick Fix","Debugger Stopped on Breakpoint","Breakpoint","No Inlay Hints on Line","No Inlay Hints","Task Completed","Task Completed","Task Failed","Task Failed","Terminal Command Failed","Command Failed","Terminal Bell","Terminal Bell","Notebook Cell Completed","Notebook Cell Completed","Notebook Cell Failed","Notebook Cell Failed","Diff Line Inserted","Diff Line Deleted","Diff Line Modified","Chat Request Sent","Chat Request Sent","Chat Response Received","Chat Response Pending","Chat Response Pending","Clear","Clear","Save","Save","Format","Format"],"vs/platform/configuration/common/configurationRegistry":["Default Language Configuration Overrides","Configure settings to be overridden for the {0} language.","Configure editor settings to be overridden for a language.","This setting does not support per-language configuration.","Configure editor settings to be overridden for a language.","This setting does not support per-language configuration.","Cannot register an empty property","Cannot register '{0}'. This matches property pattern '\\\\[.*\\\\]$' for describing language specific editor settings. Use 'configurationDefaults' contribution.","Cannot register '{0}'. This property is already registered.","Cannot register '{0}'. The associated policy {1} is already registered with {2}."],"vs/platform/contextkey/browser/contextKeyService":["A command that returns information about context keys"],"vs/platform/contextkey/common/contextkey":["Empty context key expression","Did you forget to write an expression? You can also put 'false' or 'true' to always evaluate to false or true, respectively.","'in' after 'not'.","closing parenthesis ')'","Unexpected token","Did you forget to put && or || before the token?","Unexpected end of expression","Did you forget to put a context key?",`Expected: {0} Received: '{1}'.`],"vs/platform/contextkey/common/contextkeys":["Whether the operating system is macOS","Whether the operating system is Linux","Whether the operating system is Windows","Whether the platform is a web browser","Whether the operating system is macOS on a non-browser platform","Whether the operating system is iOS","Whether the platform is a mobile web browser","Quality type of VS Code","Whether keyboard focus is inside an input box"],"vs/platform/contextkey/common/scanner":["Did you mean {0}?","Did you mean {0} or {1}?","Did you mean {0}, {1} or {2}?","Did you forget to open or close the quote?","Did you forget to escape the '/' (slash) character? Put two backslashes before it to escape, e.g., '\\\\/'."],"vs/platform/history/browser/contextScopedHistoryWidget":["Whether suggestion are visible"],"vs/platform/keybinding/common/abstractKeybindingService":["({0}) was pressed. Waiting for second key of chord...","({0}) was pressed. Waiting for next key of chord...","The key combination ({0}, {1}) is not a command.","The key combination ({0}, {1}) is not a command."],"vs/platform/list/browser/listService":["Workbench","Maps to `Control` on Windows and Linux and to `Command` on macOS.","Maps to `Alt` on Windows and Linux and to `Option` on macOS.","The modifier to be used to add an item in trees and lists to a multi-selection with the mouse (for example in the explorer, open editors and scm view). The 'Open to Side' mouse gestures - if supported - will adapt such that they do not conflict with the multiselect modifier.","Controls how to open items in trees and lists using the mouse (if supported). Note that some trees and lists might choose to ignore this setting if it is not applicable.","Controls whether lists and trees support horizontal scrolling in the workbench. Warning: turning on this setting has a performance implication.","Controls whether clicks in the scrollbar scroll page by page.","Controls tree indentation in pixels.","Controls whether the tree should render indent guides.","Controls whether lists and trees have smooth scrolling.","A multiplier to be used on the `deltaX` and `deltaY` of mouse wheel scroll events.","Scrolling speed multiplier when pressing `Alt`.","Highlight elements when searching. Further up and down navigation will traverse only the highlighted elements.","Filter elements when searching.","Controls the default find mode for lists and trees in the workbench.","Simple keyboard navigation focuses elements which match the keyboard input. Matching is done only on prefixes.","Highlight keyboard navigation highlights elements which match the keyboard input. Further up and down navigation will traverse only the highlighted elements.","Filter keyboard navigation will filter out and hide all the elements which do not match the keyboard input.","Controls the keyboard navigation style for lists and trees in the workbench. Can be simple, highlight and filter.","Please use 'workbench.list.defaultFindMode' and 'workbench.list.typeNavigationMode' instead.","Use fuzzy matching when searching.","Use contiguous matching when searching.","Controls the type of matching used when searching lists and trees in the workbench.","Controls how tree folders are expanded when clicking the folder names. Note that some trees and lists might choose to ignore this setting if it is not applicable.","Controls whether sticky scrolling is enabled in trees.","Controls the number of sticky elements displayed in the tree when `#workbench.tree.enableStickyScroll#` is enabled.","Controls how type navigation works in lists and trees in the workbench. When set to `trigger`, type navigation begins once the `list.triggerTypeNavigation` command is run."],"vs/platform/markers/common/markers":["Error","Warning","Info"],"vs/platform/quickinput/browser/commandsQuickAccess":["recently used","similar commands","commonly used","other commands","similar commands","{0}, {1}","Command '{0}' resulted in an error"],"vs/platform/quickinput/browser/helpQuickAccess":["{0}, {1}"],"vs/platform/quickinput/browser/quickInput":["Back","Press 'Enter' to confirm your input or 'Escape' to cancel","{0}/{1}","Type to narrow down results."],"vs/platform/quickinput/browser/quickInputController":["Toggle all checkboxes","{0} Results","{0} Selected","OK","Custom","Back ({0})","Back"],"vs/platform/quickinput/browser/quickInputList":["Quick Input"],"vs/platform/quickinput/browser/quickInputUtils":["Click to execute command '{0}'"],"vs/platform/theme/common/colorRegistry":["Overall foreground color. This color is only used if not overridden by a component.","Overall foreground for disabled elements. This color is only used if not overridden by a component.","Overall foreground color for error messages. This color is only used if not overridden by a component.","Foreground color for description text providing additional information, for example for a label.","The default color for icons in the workbench.","Overall border color for focused elements. This color is only used if not overridden by a component.","An extra border around elements to separate them from others for greater contrast.","An extra border around active elements to separate them from others for greater contrast.","The background color of text selections in the workbench (e.g. for input fields or text areas). Note that this does not apply to selections within the editor.","Color for text separators.","Foreground color for links in text.","Foreground color for links in text when clicked on and on mouse hover.","Foreground color for preformatted text segments.","Background color for preformatted text segments.","Background color for block quotes in text.","Border color for block quotes in text.","Background color for code blocks in text.","Shadow color of widgets such as find/replace inside the editor.","Border color of widgets such as find/replace inside the editor.","Input box background.","Input box foreground.","Input box border.","Border color of activated options in input fields.","Background color of activated options in input fields.","Background hover color of options in input fields.","Foreground color of activated options in input fields.","Input box foreground color for placeholder text.","Input validation background color for information severity.","Input validation foreground color for information severity.","Input validation border color for information severity.","Input validation background color for warning severity.","Input validation foreground color for warning severity.","Input validation border color for warning severity.","Input validation background color for error severity.","Input validation foreground color for error severity.","Input validation border color for error severity.","Dropdown background.","Dropdown list background.","Dropdown foreground.","Dropdown border.","Button foreground color.","Button separator color.","Button background color.","Button background color when hovering.","Button border color.","Secondary button foreground color.","Secondary button background color.","Secondary button background color when hovering.","Badge background color. Badges are small information labels, e.g. for search results count.","Badge foreground color. Badges are small information labels, e.g. for search results count.","Scrollbar shadow to indicate that the view is scrolled.","Scrollbar slider background color.","Scrollbar slider background color when hovering.","Scrollbar slider background color when clicked on.","Background color of the progress bar that can show for long running operations.","Background color of error text in the editor. The color must not be opaque so as not to hide underlying decorations.","Foreground color of error squigglies in the editor.","If set, color of double underlines for errors in the editor.","Background color of warning text in the editor. The color must not be opaque so as not to hide underlying decorations.","Foreground color of warning squigglies in the editor.","If set, color of double underlines for warnings in the editor.","Background color of info text in the editor. The color must not be opaque so as not to hide underlying decorations.","Foreground color of info squigglies in the editor.","If set, color of double underlines for infos in the editor.","Foreground color of hint squigglies in the editor.","If set, color of double underlines for hints in the editor.","Border color of active sashes.","Editor background color.","Editor default foreground color.","Background color of sticky scroll in the editor","Background color of sticky scroll on hover in the editor","Border color of sticky scroll in the editor"," Shadow color of sticky scroll in the editor","Background color of editor widgets, such as find/replace.","Foreground color of editor widgets, such as find/replace.","Border color of editor widgets. The color is only used if the widget chooses to have a border and if the color is not overridden by a widget.","Border color of the resize bar of editor widgets. The color is only used if the widget chooses to have a resize border and if the color is not overridden by a widget.","Quick picker background color. The quick picker widget is the container for pickers like the command palette.","Quick picker foreground color. The quick picker widget is the container for pickers like the command palette.","Quick picker title background color. The quick picker widget is the container for pickers like the command palette.","Quick picker color for grouping labels.","Quick picker color for grouping borders.","Keybinding label background color. The keybinding label is used to represent a keyboard shortcut.","Keybinding label foreground color. The keybinding label is used to represent a keyboard shortcut.","Keybinding label border color. The keybinding label is used to represent a keyboard shortcut.","Keybinding label border bottom color. The keybinding label is used to represent a keyboard shortcut.","Color of the editor selection.","Color of the selected text for high contrast.","Color of the selection in an inactive editor. The color must not be opaque so as not to hide underlying decorations.","Color for regions with the same content as the selection. The color must not be opaque so as not to hide underlying decorations.","Border color for regions with the same content as the selection.","Color of the current search match.","Color of the other search matches. The color must not be opaque so as not to hide underlying decorations.","Color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.","Border color of the current search match.","Border color of the other search matches.","Border color of the range limiting the search. The color must not be opaque so as not to hide underlying decorations.","Color of the Search Editor query matches.","Border color of the Search Editor query matches.","Color of the text in the search viewlet's completion message.","Highlight below the word for which a hover is shown. The color must not be opaque so as not to hide underlying decorations.","Background color of the editor hover.","Foreground color of the editor hover.","Border color of the editor hover.","Background color of the editor hover status bar.","Color of active links.","Foreground color of inline hints","Background color of inline hints","Foreground color of inline hints for types","Background color of inline hints for types","Foreground color of inline hints for parameters","Background color of inline hints for parameters","The color used for the lightbulb actions icon.","The color used for the lightbulb auto fix actions icon.","The color used for the lightbulb AI icon.","Background color for text that got inserted. The color must not be opaque so as not to hide underlying decorations.","Background color for text that got removed. The color must not be opaque so as not to hide underlying decorations.","Background color for lines that got inserted. The color must not be opaque so as not to hide underlying decorations.","Background color for lines that got removed. The color must not be opaque so as not to hide underlying decorations.","Background color for the margin where lines got inserted.","Background color for the margin where lines got removed.","Diff overview ruler foreground for inserted content.","Diff overview ruler foreground for removed content.","Outline color for the text that got inserted.","Outline color for text that got removed.","Border color between the two text editors.","Color of the diff editor's diagonal fill. The diagonal fill is used in side-by-side diff views.","The background color of unchanged blocks in the diff editor.","The foreground color of unchanged blocks in the diff editor.","The background color of unchanged code in the diff editor.","List/Tree background color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree foreground color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree outline color for the focused item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree outline color for the focused item when the list/tree is active and selected. An active list/tree has keyboard focus, an inactive does not.","List/Tree background color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree icon foreground color for the selected item when the list/tree is active. An active list/tree has keyboard focus, an inactive does not.","List/Tree background color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree icon foreground color for the selected item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree background color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree outline color for the focused item when the list/tree is inactive. An active list/tree has keyboard focus, an inactive does not.","List/Tree background when hovering over items using the mouse.","List/Tree foreground when hovering over items using the mouse.","List/Tree drag and drop background when moving items over other items when using the mouse.","List/Tree drag and drop border color when moving items between items when using the mouse.","List/Tree foreground color of the match highlights when searching inside the list/tree.","List/Tree foreground color of the match highlights on actively focused items when searching inside the list/tree.","List/Tree foreground color for invalid items, for example an unresolved root in explorer.","Foreground color of list items containing errors.","Foreground color of list items containing warnings.","Background color of the type filter widget in lists and trees.","Outline color of the type filter widget in lists and trees.","Outline color of the type filter widget in lists and trees, when there are no matches.","Shadow color of the type filter widget in lists and trees.","Background color of the filtered match.","Border color of the filtered match.","Tree stroke color for the indentation guides.","Tree stroke color for the indentation guides that are not active.","Table border color between columns.","Background color for odd table rows.","List/Tree foreground color for items that are deemphasized. ","Background color of checkbox widget.","Background color of checkbox widget when the element it's in is selected.","Foreground color of checkbox widget.","Border color of checkbox widget.","Border color of checkbox widget when the element it's in is selected.","Please use quickInputList.focusBackground instead","Quick picker foreground color for the focused item.","Quick picker icon foreground color for the focused item.","Quick picker background color for the focused item.","Border color of menus.","Foreground color of menu items.","Background color of menu items.","Foreground color of the selected menu item in menus.","Background color of the selected menu item in menus.","Border color of the selected menu item in menus.","Color of a separator menu item in menus.","Toolbar background when hovering over actions using the mouse","Toolbar outline when hovering over actions using the mouse","Toolbar background when holding the mouse over actions","Highlight background color of a snippet tabstop.","Highlight border color of a snippet tabstop.","Highlight background color of the final tabstop of a snippet.","Highlight border color of the final tabstop of a snippet.","Color of focused breadcrumb items.","Background color of breadcrumb items.","Color of focused breadcrumb items.","Color of selected breadcrumb items.","Background color of breadcrumb item picker.","Current header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","Current content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","Incoming header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","Incoming content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","Common ancestor header background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","Common ancestor content background in inline merge-conflicts. The color must not be opaque so as not to hide underlying decorations.","Border color on headers and the splitter in inline merge-conflicts.","Current overview ruler foreground for inline merge-conflicts.","Incoming overview ruler foreground for inline merge-conflicts.","Common ancestor overview ruler foreground for inline merge-conflicts.","Overview ruler marker color for find matches. The color must not be opaque so as not to hide underlying decorations.","Overview ruler marker color for selection highlights. The color must not be opaque so as not to hide underlying decorations.","Minimap marker color for find matches.","Minimap marker color for repeating editor selections.","Minimap marker color for the editor selection.","Minimap marker color for infos.","Minimap marker color for warnings.","Minimap marker color for errors.","Minimap background color.",'Opacity of foreground elements rendered in the minimap. For example, "#000000c0" will render the elements with 75% opacity.',"Minimap slider background color.","Minimap slider background color when hovering.","Minimap slider background color when clicked on.","The color used for the problems error icon.","The color used for the problems warning icon.","The color used for the problems info icon.","The foreground color used in charts.","The color used for horizontal lines in charts.","The red color used in chart visualizations.","The blue color used in chart visualizations.","The yellow color used in chart visualizations.","The orange color used in chart visualizations.","The green color used in chart visualizations.","The purple color used in chart visualizations."],"vs/platform/theme/common/iconRegistry":["The id of the font to use. If not set, the font that is defined first is used.","The font character associated with the icon definition.","Icon for the close action in widgets.","Icon for goto previous editor location.","Icon for goto next editor location."],"vs/platform/undoRedo/common/undoRedoService":["The following files have been closed and modified on disk: {0}.","The following files have been modified in an incompatible way: {0}.","Could not undo '{0}' across all files. {1}","Could not undo '{0}' across all files. {1}","Could not undo '{0}' across all files because changes were made to {1}","Could not undo '{0}' across all files because there is already an undo or redo operation running on {1}","Could not undo '{0}' across all files because an undo or redo operation occurred in the meantime","Would you like to undo '{0}' across all files?","&&Undo in {0} Files","Undo this &&File","Could not undo '{0}' because there is already an undo or redo operation running.","Would you like to undo '{0}'?","&&Yes","No","Could not redo '{0}' across all files. {1}","Could not redo '{0}' across all files. {1}","Could not redo '{0}' across all files because changes were made to {1}","Could not redo '{0}' across all files because there is already an undo or redo operation running on {1}","Could not redo '{0}' across all files because an undo or redo operation occurred in the meantime","Could not redo '{0}' because there is already an undo or redo operation running."],"vs/platform/workspace/common/workspace":["Code Workspace"]}); //# sourceMappingURL=../../../min-maps/vs/editor/editor.main.nls.js.map ================================================ FILE: modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/css/cssMode.js ================================================ /*!----------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt *-----------------------------------------------------------------------------*/ define("vs/language/css/cssMode", ["require","require"],(require)=>{ "use strict";var moduleExports=(()=>{var tn=Object.create;var Y=Object.defineProperty;var rn=Object.getOwnPropertyDescriptor;var on=Object.getOwnPropertyNames;var sn=Object.getPrototypeOf,an=Object.prototype.hasOwnProperty;var un=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(t,i)=>(typeof require<"u"?require:t)[i]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var dn=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),cn=(n,t)=>{for(var i in t)Y(n,i,{get:t[i],enumerable:!0})},J=(n,t,i,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of on(t))!an.call(n,e)&&e!==i&&Y(n,e,{get:()=>t[e],enumerable:!(r=rn(t,e))||r.enumerable});return n},pe=(n,t,i)=>(J(n,t,"default"),i&&J(i,t,"default")),he=(n,t,i)=>(i=n!=null?tn(sn(n)):{},J(t||!n||!n.__esModule?Y(i,"default",{value:n,enumerable:!0}):i,n)),ln=n=>J(Y({},"__esModule",{value:!0}),n);var ve=dn((Wn,me)=>{var gn=he(un("vs/editor/editor.api"));me.exports=gn});var Sn={};cn(Sn,{CompletionAdapter:()=>H,DefinitionAdapter:()=>O,DiagnosticsAdapter:()=>K,DocumentColorAdapter:()=>$,DocumentFormattingEditProvider:()=>X,DocumentHighlightAdapter:()=>j,DocumentLinkAdapter:()=>le,DocumentRangeFormattingEditProvider:()=>B,DocumentSymbolAdapter:()=>z,FoldingRangeAdapter:()=>q,HoverAdapter:()=>U,ReferenceAdapter:()=>N,RenameAdapter:()=>V,SelectionRangeAdapter:()=>Q,WorkerManager:()=>E,fromPosition:()=>_,fromRange:()=>ge,setupMode:()=>Rn,toRange:()=>T,toTextEdit:()=>W});var d={};pe(d,he(ve()));var fn=2*60*1e3,E=class{constructor(t){this._defaults=t,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>fn&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=d.editor.createWebWorker({moduleId:"vs/language/css/cssWorker",label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...t){let i;return this._getClient().then(r=>{i=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(t)}).then(r=>i)}};var ye;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647})(ye||(ye={}));var ee;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647})(ee||(ee={}));var x;(function(n){function t(r,e){return r===Number.MAX_VALUE&&(r=ee.MAX_VALUE),e===Number.MAX_VALUE&&(e=ee.MAX_VALUE),{line:r,character:e}}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&a.uinteger(e.line)&&a.uinteger(e.character)}n.is=i})(x||(x={}));var v;(function(n){function t(r,e,o,s){if(a.uinteger(r)&&a.uinteger(e)&&a.uinteger(o)&&a.uinteger(s))return{start:x.create(r,e),end:x.create(o,s)};if(x.is(r)&&x.is(e))return{start:r,end:e};throw new Error("Range#create called with invalid arguments["+r+", "+e+", "+o+", "+s+"]")}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&x.is(e.start)&&x.is(e.end)}n.is=i})(v||(v={}));var se;(function(n){function t(r,e){return{uri:r,range:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.string(e.uri)||a.undefined(e.uri))}n.is=i})(se||(se={}));var Te;(function(n){function t(r,e,o,s){return{targetUri:r,targetRange:e,targetSelectionRange:o,originSelectionRange:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.targetRange)&&a.string(e.targetUri)&&(v.is(e.targetSelectionRange)||a.undefined(e.targetSelectionRange))&&(v.is(e.originSelectionRange)||a.undefined(e.originSelectionRange))}n.is=i})(Te||(Te={}));var ae;(function(n){function t(r,e,o,s){return{red:r,green:e,blue:o,alpha:s}}n.create=t;function i(r){var e=r;return a.numberRange(e.red,0,1)&&a.numberRange(e.green,0,1)&&a.numberRange(e.blue,0,1)&&a.numberRange(e.alpha,0,1)}n.is=i})(ae||(ae={}));var xe;(function(n){function t(r,e){return{range:r,color:e}}n.create=t;function i(r){var e=r;return v.is(e.range)&&ae.is(e.color)}n.is=i})(xe||(xe={}));var ke;(function(n){function t(r,e,o){return{label:r,textEdit:e,additionalTextEdits:o}}n.create=t;function i(r){var e=r;return a.string(e.label)&&(a.undefined(e.textEdit)||C.is(e))&&(a.undefined(e.additionalTextEdits)||a.typedArray(e.additionalTextEdits,C.is))}n.is=i})(ke||(ke={}));var S;(function(n){n.Comment="comment",n.Imports="imports",n.Region="region"})(S||(S={}));var Ie;(function(n){function t(r,e,o,s,u){var l={startLine:r,endLine:e};return a.defined(o)&&(l.startCharacter=o),a.defined(s)&&(l.endCharacter=s),a.defined(u)&&(l.kind=u),l}n.create=t;function i(r){var e=r;return a.uinteger(e.startLine)&&a.uinteger(e.startLine)&&(a.undefined(e.startCharacter)||a.uinteger(e.startCharacter))&&(a.undefined(e.endCharacter)||a.uinteger(e.endCharacter))&&(a.undefined(e.kind)||a.string(e.kind))}n.is=i})(Ie||(Ie={}));var ue;(function(n){function t(r,e){return{location:r,message:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&se.is(e.location)&&a.string(e.message)}n.is=i})(ue||(ue={}));var b;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(b||(b={}));var Ce;(function(n){n.Unnecessary=1,n.Deprecated=2})(Ce||(Ce={}));var _e;(function(n){function t(i){var r=i;return r!=null&&a.string(r.href)}n.is=t})(_e||(_e={}));var ne;(function(n){function t(r,e,o,s,u,l){var f={range:r,message:e};return a.defined(o)&&(f.severity=o),a.defined(s)&&(f.code=s),a.defined(u)&&(f.source=u),a.defined(l)&&(f.relatedInformation=l),f}n.create=t;function i(r){var e,o=r;return a.defined(o)&&v.is(o.range)&&a.string(o.message)&&(a.number(o.severity)||a.undefined(o.severity))&&(a.integer(o.code)||a.string(o.code)||a.undefined(o.code))&&(a.undefined(o.codeDescription)||a.string((e=o.codeDescription)===null||e===void 0?void 0:e.href))&&(a.string(o.source)||a.undefined(o.source))&&(a.undefined(o.relatedInformation)||a.typedArray(o.relatedInformation,ue.is))}n.is=i})(ne||(ne={}));var D;(function(n){function t(r,e){for(var o=[],s=2;s0&&(u.arguments=o),u}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.title)&&a.string(e.command)}n.is=i})(D||(D={}));var C;(function(n){function t(o,s){return{range:o,newText:s}}n.replace=t;function i(o,s){return{range:{start:o,end:o},newText:s}}n.insert=i;function r(o){return{range:o,newText:""}}n.del=r;function e(o){var s=o;return a.objectLiteral(s)&&a.string(s.newText)&&v.is(s.range)}n.is=e})(C||(C={}));var R;(function(n){function t(r,e,o){var s={label:r};return e!==void 0&&(s.needsConfirmation=e),o!==void 0&&(s.description=o),s}n.create=t;function i(r){var e=r;return e!==void 0&&a.objectLiteral(e)&&a.string(e.label)&&(a.boolean(e.needsConfirmation)||e.needsConfirmation===void 0)&&(a.string(e.description)||e.description===void 0)}n.is=i})(R||(R={}));var y;(function(n){function t(i){var r=i;return typeof r=="string"}n.is=t})(y||(y={}));var I;(function(n){function t(o,s,u){return{range:o,newText:s,annotationId:u}}n.replace=t;function i(o,s,u){return{range:{start:o,end:o},newText:s,annotationId:u}}n.insert=i;function r(o,s){return{range:o,newText:"",annotationId:s}}n.del=r;function e(o){var s=o;return C.is(s)&&(R.is(s.annotationId)||y.is(s.annotationId))}n.is=e})(I||(I={}));var te;(function(n){function t(r,e){return{textDocument:r,edits:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&re.is(e.textDocument)&&Array.isArray(e.edits)}n.is=i})(te||(te={}));var L;(function(n){function t(r,e,o){var s={kind:"create",uri:r};return e!==void 0&&(e.overwrite!==void 0||e.ignoreIfExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind==="create"&&a.string(e.uri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(L||(L={}));var F;(function(n){function t(r,e,o,s){var u={kind:"rename",oldUri:r,newUri:e};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(u.options=o),s!==void 0&&(u.annotationId=s),u}n.create=t;function i(r){var e=r;return e&&e.kind==="rename"&&a.string(e.oldUri)&&a.string(e.newUri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(F||(F={}));var M;(function(n){function t(r,e,o){var s={kind:"delete",uri:r};return e!==void 0&&(e.recursive!==void 0||e.ignoreIfNotExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind==="delete"&&a.string(e.uri)&&(e.options===void 0||(e.options.recursive===void 0||a.boolean(e.options.recursive))&&(e.options.ignoreIfNotExists===void 0||a.boolean(e.options.ignoreIfNotExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(M||(M={}));var de;(function(n){function t(i){var r=i;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(e){return a.string(e.kind)?L.is(e)||F.is(e)||M.is(e):te.is(e)}))}n.is=t})(de||(de={}));var Z=function(){function n(t,i){this.edits=t,this.changeAnnotations=i}return n.prototype.insert=function(t,i,r){var e,o;if(r===void 0?e=C.insert(t,i):y.is(r)?(o=r,e=I.insert(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.insert(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.replace=function(t,i,r){var e,o;if(r===void 0?e=C.replace(t,i):y.is(r)?(o=r,e=I.replace(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.replace(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.delete=function(t,i){var r,e;if(i===void 0?r=C.del(t):y.is(i)?(e=i,r=I.del(t,i)):(this.assertChangeAnnotations(this.changeAnnotations),e=this.changeAnnotations.manage(i),r=I.del(t,e)),this.edits.push(r),e!==void 0)return e},n.prototype.add=function(t){this.edits.push(t)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(t){if(t===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},n}(),be=function(){function n(t){this._annotations=t===void 0?Object.create(null):t,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(t,i){var r;if(y.is(t)?r=t:(r=this.nextId(),i=t),this._annotations[r]!==void 0)throw new Error("Id "+r+" is already in use.");if(i===void 0)throw new Error("No annotation provided for id "+r);return this._annotations[r]=i,this._size++,r},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),Kn=function(){function n(t){var i=this;this._textEditChanges=Object.create(null),t!==void 0?(this._workspaceEdit=t,t.documentChanges?(this._changeAnnotations=new be(t.changeAnnotations),t.changeAnnotations=this._changeAnnotations.all(),t.documentChanges.forEach(function(r){if(te.is(r)){var e=new Z(r.edits,i._changeAnnotations);i._textEditChanges[r.textDocument.uri]=e}})):t.changes&&Object.keys(t.changes).forEach(function(r){var e=new Z(t.changes[r]);i._textEditChanges[r]=e})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(t){if(re.is(t)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i={uri:t.uri,version:t.version},r=this._textEditChanges[i.uri];if(!r){var e=[],o={textDocument:i,edits:e};this._workspaceEdit.documentChanges.push(o),r=new Z(e,this._changeAnnotations),this._textEditChanges[i.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var r=this._textEditChanges[t];if(!r){var e=[];this._workspaceEdit.changes[t]=e,r=new Z(e),this._textEditChanges[t]=r}return r}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new be,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var e;R.is(i)||y.is(i)?e=i:r=i;var o,s;if(e===void 0?o=L.create(t,r):(s=y.is(e)?e:this._changeAnnotations.manage(e),o=L.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(t,i,r,e){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var o;R.is(r)||y.is(r)?o=r:e=r;var s,u;if(o===void 0?s=F.create(t,i,e):(u=y.is(o)?o:this._changeAnnotations.manage(o),s=F.create(t,i,e,u)),this._workspaceEdit.documentChanges.push(s),u!==void 0)return u},n.prototype.deleteFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var e;R.is(i)||y.is(i)?e=i:r=i;var o,s;if(e===void 0?o=M.create(t,r):(s=y.is(e)?e:this._changeAnnotations.manage(e),o=M.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();var we;(function(n){function t(r){return{uri:r}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)}n.is=i})(we||(we={}));var Ee;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.integer(e.version)}n.is=i})(Ee||(Ee={}));var re;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&(e.version===null||a.integer(e.version))}n.is=i})(re||(re={}));var Re;(function(n){function t(r,e,o,s){return{uri:r,languageId:e,version:o,text:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.string(e.languageId)&&a.integer(e.version)&&a.string(e.text)}n.is=i})(Re||(Re={}));var A;(function(n){n.PlainText="plaintext",n.Markdown="markdown"})(A||(A={}));(function(n){function t(i){var r=i;return r===n.PlainText||r===n.Markdown}n.is=t})(A||(A={}));var ce;(function(n){function t(i){var r=i;return a.objectLiteral(i)&&A.is(r.kind)&&a.string(r.value)}n.is=t})(ce||(ce={}));var p;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(p||(p={}));var ie;(function(n){n.PlainText=1,n.Snippet=2})(ie||(ie={}));var Se;(function(n){n.Deprecated=1})(Se||(Se={}));var Pe;(function(n){function t(r,e,o){return{newText:r,insert:e,replace:o}}n.create=t;function i(r){var e=r;return e&&a.string(e.newText)&&v.is(e.insert)&&v.is(e.replace)}n.is=i})(Pe||(Pe={}));var We;(function(n){n.asIs=1,n.adjustIndentation=2})(We||(We={}));var De;(function(n){function t(i){return{label:i}}n.create=t})(De||(De={}));var Le;(function(n){function t(i,r){return{items:i||[],isIncomplete:!!r}}n.create=t})(Le||(Le={}));var oe;(function(n){function t(r){return r.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}n.fromPlainText=t;function i(r){var e=r;return a.string(e)||a.objectLiteral(e)&&a.string(e.language)&&a.string(e.value)}n.is=i})(oe||(oe={}));var Fe;(function(n){function t(i){var r=i;return!!r&&a.objectLiteral(r)&&(ce.is(r.contents)||oe.is(r.contents)||a.typedArray(r.contents,oe.is))&&(i.range===void 0||v.is(i.range))}n.is=t})(Fe||(Fe={}));var Me;(function(n){function t(i,r){return r?{label:i,documentation:r}:{label:i}}n.create=t})(Me||(Me={}));var Ae;(function(n){function t(i,r){for(var e=[],o=2;o=0;g--){var m=l[g],k=o.offsetAt(m.range.start),c=o.offsetAt(m.range.end);if(c<=f)u=u.substring(0,k)+m.newText+u.substring(c,u.length);else throw new Error("Overlapping edit");f=k}return u}n.applyEdits=r;function e(o,s){if(o.length<=1)return o;var u=o.length/2|0,l=o.slice(0,u),f=o.slice(u);e(l,s),e(f,s);for(var g=0,m=0,k=0;g0&&t.push(i.length),this._lineOffsets=t}return this._lineOffsets},n.prototype.positionAt=function(t){t=Math.max(Math.min(t,this._content.length),0);var i=this.getLineOffsets(),r=0,e=i.length;if(e===0)return x.create(0,t);for(;rt?e=o:r=o+1}var s=r-1;return x.create(s,t-i[s])},n.prototype.offsetAt=function(t){var i=this.getLineOffsets();if(t.line>=i.length)return this._content.length;if(t.line<0)return 0;var r=i[t.line],e=t.line+1"u"}n.undefined=r;function e(c){return c===!0||c===!1}n.boolean=e;function o(c){return t.call(c)==="[object String]"}n.string=o;function s(c){return t.call(c)==="[object Number]"}n.number=s;function u(c,w,G){return t.call(c)==="[object Number]"&&w<=c&&c<=G}n.numberRange=u;function l(c){return t.call(c)==="[object Number]"&&-2147483648<=c&&c<=2147483647}n.integer=l;function f(c){return t.call(c)==="[object Number]"&&0<=c&&c<=2147483647}n.uinteger=f;function g(c){return t.call(c)==="[object Function]"}n.func=g;function m(c){return c!==null&&typeof c=="object"}n.objectLiteral=m;function k(c,w){return Array.isArray(c)&&c.every(w)}n.typedArray=k})(a||(a={}));var K=class{constructor(t,i,r){this._languageId=t;this._worker=i;this._disposables=[];this._listener=Object.create(null);let e=s=>{let u=s.getLanguageId();if(u!==this._languageId)return;let l;this._listener[s.uri.toString()]=s.onDidChangeContent(()=>{window.clearTimeout(l),l=window.setTimeout(()=>this._doValidate(s.uri,u),500)}),this._doValidate(s.uri,u)},o=s=>{d.editor.setModelMarkers(s,this._languageId,[]);let u=s.uri.toString(),l=this._listener[u];l&&(l.dispose(),delete this._listener[u])};this._disposables.push(d.editor.onDidCreateModel(e)),this._disposables.push(d.editor.onWillDisposeModel(o)),this._disposables.push(d.editor.onDidChangeModelLanguage(s=>{o(s.model),e(s.model)})),this._disposables.push(r(s=>{d.editor.getModels().forEach(u=>{u.getLanguageId()===this._languageId&&(o(u),e(u))})})),this._disposables.push({dispose:()=>{d.editor.getModels().forEach(o);for(let s in this._listener)this._listener[s].dispose()}}),d.editor.getModels().forEach(e)}dispose(){this._disposables.forEach(t=>t&&t.dispose()),this._disposables.length=0}_doValidate(t,i){this._worker(t).then(r=>r.doValidation(t.toString())).then(r=>{let e=r.map(s=>vn(t,s)),o=d.editor.getModel(t);o&&o.getLanguageId()===i&&d.editor.setModelMarkers(o,i,e)}).then(void 0,r=>{console.error(r)})}};function mn(n){switch(n){case b.Error:return d.MarkerSeverity.Error;case b.Warning:return d.MarkerSeverity.Warning;case b.Information:return d.MarkerSeverity.Info;case b.Hint:return d.MarkerSeverity.Hint;default:return d.MarkerSeverity.Info}}function vn(n,t){let i=typeof t.code=="number"?String(t.code):t.code;return{severity:mn(t.severity),startLineNumber:t.range.start.line+1,startColumn:t.range.start.character+1,endLineNumber:t.range.end.line+1,endColumn:t.range.end.character+1,message:t.message,code:i,source:t.source}}var H=class{constructor(t,i){this._worker=t;this._triggerCharacters=i}get triggerCharacters(){return this._triggerCharacters}provideCompletionItems(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doComplete(o.toString(),_(i))).then(s=>{if(!s)return;let u=t.getWordUntilPosition(i),l=new d.Range(i.lineNumber,u.startColumn,i.lineNumber,u.endColumn),f=s.items.map(g=>{let m={label:g.label,insertText:g.insertText||g.label,sortText:g.sortText,filterText:g.filterText,documentation:g.documentation,detail:g.detail,command:xn(g.command),range:l,kind:Tn(g.kind)};return g.textEdit&&(yn(g.textEdit)?m.range={insert:T(g.textEdit.insert),replace:T(g.textEdit.replace)}:m.range=T(g.textEdit.range),m.insertText=g.textEdit.newText),g.additionalTextEdits&&(m.additionalTextEdits=g.additionalTextEdits.map(W)),g.insertTextFormat===ie.Snippet&&(m.insertTextRules=d.languages.CompletionItemInsertTextRule.InsertAsSnippet),m});return{isIncomplete:s.isIncomplete,suggestions:f}})}};function _(n){if(n)return{character:n.column-1,line:n.lineNumber-1}}function ge(n){if(n)return{start:{line:n.startLineNumber-1,character:n.startColumn-1},end:{line:n.endLineNumber-1,character:n.endColumn-1}}}function T(n){if(n)return new d.Range(n.start.line+1,n.start.character+1,n.end.line+1,n.end.character+1)}function yn(n){return typeof n.insert<"u"&&typeof n.replace<"u"}function Tn(n){let t=d.languages.CompletionItemKind;switch(n){case p.Text:return t.Text;case p.Method:return t.Method;case p.Function:return t.Function;case p.Constructor:return t.Constructor;case p.Field:return t.Field;case p.Variable:return t.Variable;case p.Class:return t.Class;case p.Interface:return t.Interface;case p.Module:return t.Module;case p.Property:return t.Property;case p.Unit:return t.Unit;case p.Value:return t.Value;case p.Enum:return t.Enum;case p.Keyword:return t.Keyword;case p.Snippet:return t.Snippet;case p.Color:return t.Color;case p.File:return t.File;case p.Reference:return t.Reference}return t.Property}function W(n){if(n)return{range:T(n.range),text:n.newText}}function xn(n){return n&&n.command==="editor.action.triggerSuggest"?{id:n.command,title:n.title,arguments:n.arguments}:void 0}var U=class{constructor(t){this._worker=t}provideHover(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.doHover(e.toString(),_(i))).then(o=>{if(o)return{range:T(o.range),contents:In(o.contents)}})}};function kn(n){return n&&typeof n=="object"&&typeof n.kind=="string"}function Qe(n){return typeof n=="string"?{value:n}:kn(n)?n.kind==="plaintext"?{value:n.value.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}:{value:n.value}:{value:"```"+n.language+` `+n.value+"\n```\n"}}function In(n){if(n)return Array.isArray(n)?n.map(Qe):[Qe(n)]}var j=class{constructor(t){this._worker=t}provideDocumentHighlights(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDocumentHighlights(e.toString(),_(i))).then(o=>{if(o)return o.map(s=>({range:T(s.range),kind:Cn(s.kind)}))})}};function Cn(n){switch(n){case P.Read:return d.languages.DocumentHighlightKind.Read;case P.Write:return d.languages.DocumentHighlightKind.Write;case P.Text:return d.languages.DocumentHighlightKind.Text}return d.languages.DocumentHighlightKind.Text}var O=class{constructor(t){this._worker=t}provideDefinition(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDefinition(e.toString(),_(i))).then(o=>{if(o)return[Ge(o)]})}};function Ge(n){return{uri:d.Uri.parse(n.uri),range:T(n.range)}}var N=class{constructor(t){this._worker=t}provideReferences(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.findReferences(o.toString(),_(i))).then(s=>{if(s)return s.map(Ge)})}},V=class{constructor(t){this._worker=t}provideRenameEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doRename(o.toString(),_(i),r)).then(s=>_n(s))}};function _n(n){if(!n||!n.changes)return;let t=[];for(let i in n.changes){let r=d.Uri.parse(i);for(let e of n.changes[i])t.push({resource:r,versionId:void 0,textEdit:{range:T(e.range),text:e.newText}})}return{edits:t}}var z=class{constructor(t){this._worker=t}provideDocumentSymbols(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentSymbols(r.toString())).then(e=>{if(e)return e.map(o=>bn(o)?Je(o):{name:o.name,detail:"",containerName:o.containerName,kind:Ye(o.kind),range:T(o.location.range),selectionRange:T(o.location.range),tags:[]})})}};function bn(n){return"children"in n}function Je(n){return{name:n.name,detail:n.detail??"",kind:Ye(n.kind),range:T(n.range),selectionRange:T(n.selectionRange),tags:n.tags??[],children:(n.children??[]).map(t=>Je(t))}}function Ye(n){let t=d.languages.SymbolKind;switch(n){case h.File:return t.File;case h.Module:return t.Module;case h.Namespace:return t.Namespace;case h.Package:return t.Package;case h.Class:return t.Class;case h.Method:return t.Method;case h.Property:return t.Property;case h.Field:return t.Field;case h.Constructor:return t.Constructor;case h.Enum:return t.Enum;case h.Interface:return t.Interface;case h.Function:return t.Function;case h.Variable:return t.Variable;case h.Constant:return t.Constant;case h.String:return t.String;case h.Number:return t.Number;case h.Boolean:return t.Boolean;case h.Array:return t.Array}return t.Function}var le=class{constructor(t){this._worker=t}provideLinks(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentLinks(r.toString())).then(e=>{if(e)return{links:e.map(o=>({range:T(o.range),url:o.target}))}})}},X=class{constructor(t){this._worker=t}provideDocumentFormattingEdits(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.format(e.toString(),null,Ze(i)).then(s=>{if(!(!s||s.length===0))return s.map(W)}))}},B=class{constructor(t){this._worker=t;this.canFormatMultipleRanges=!1}provideDocumentRangeFormattingEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.format(o.toString(),ge(i),Ze(r)).then(u=>{if(!(!u||u.length===0))return u.map(W)}))}};function Ze(n){return{tabSize:n.tabSize,insertSpaces:n.insertSpaces}}var $=class{constructor(t){this._worker=t}provideDocumentColors(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentColors(r.toString())).then(e=>{if(e)return e.map(o=>({color:o.color,range:T(o.range)}))})}provideColorPresentations(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getColorPresentations(e.toString(),i.color,ge(i.range))).then(o=>{if(o)return o.map(s=>{let u={label:s.label};return s.textEdit&&(u.textEdit=W(s.textEdit)),s.additionalTextEdits&&(u.additionalTextEdits=s.additionalTextEdits.map(W)),u})})}},q=class{constructor(t){this._worker=t}provideFoldingRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getFoldingRanges(e.toString(),i)).then(o=>{if(o)return o.map(s=>{let u={start:s.startLine+1,end:s.endLine+1};return typeof s.kind<"u"&&(u.kind=wn(s.kind)),u})})}};function wn(n){switch(n){case S.Comment:return d.languages.FoldingRangeKind.Comment;case S.Imports:return d.languages.FoldingRangeKind.Imports;case S.Region:return d.languages.FoldingRangeKind.Region}}var Q=class{constructor(t){this._worker=t}provideSelectionRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getSelectionRanges(e.toString(),i.map(_))).then(o=>{if(o)return o.map(s=>{let u=[];for(;s;)u.push({range:T(s.range)}),s=s.parent;return u})})}};function Rn(n){let t=[],i=[],r=new E(n);t.push(r);let e=(...s)=>r.getLanguageServiceWorker(...s);function o(){let{languageId:s,modeConfiguration:u}=n;nn(i),u.completionItems&&i.push(d.languages.registerCompletionItemProvider(s,new H(e,["/","-",":"]))),u.hovers&&i.push(d.languages.registerHoverProvider(s,new U(e))),u.documentHighlights&&i.push(d.languages.registerDocumentHighlightProvider(s,new j(e))),u.definitions&&i.push(d.languages.registerDefinitionProvider(s,new O(e))),u.references&&i.push(d.languages.registerReferenceProvider(s,new N(e))),u.documentSymbols&&i.push(d.languages.registerDocumentSymbolProvider(s,new z(e))),u.rename&&i.push(d.languages.registerRenameProvider(s,new V(e))),u.colors&&i.push(d.languages.registerColorProvider(s,new $(e))),u.foldingRanges&&i.push(d.languages.registerFoldingRangeProvider(s,new q(e))),u.diagnostics&&i.push(new K(s,e,n.onDidChange)),u.selectionRanges&&i.push(d.languages.registerSelectionRangeProvider(s,new Q(e))),u.documentFormattingEdits&&i.push(d.languages.registerDocumentFormattingEditProvider(s,new X(e))),u.documentRangeFormattingEdits&&i.push(d.languages.registerDocumentRangeFormattingEditProvider(s,new B(e)))}return o(),t.push(en(i)),en(t)}function en(n){return{dispose:()=>nn(n)}}function nn(n){for(;n.length;)n.pop().dispose()}return ln(Sn);})(); return moduleExports; }); ================================================ FILE: modules/backend/vuecomponents/monacoeditor/assets/vendor/monaco/vs/language/css/cssWorker.js ================================================ /*!----------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) * Released under the MIT license * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt *-----------------------------------------------------------------------------*/ define("vs/language/css/cssWorker", ["require","require"],(require)=>{ "use strict";var moduleExports=(()=>{var $n=Object.defineProperty;var ds=Object.getOwnPropertyDescriptor;var hs=Object.getOwnPropertyNames;var ps=Object.prototype.hasOwnProperty;var us=(n,e)=>{for(var t in e)$n(n,t,{get:e[t],enumerable:!0})},ms=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of hs(e))!ps.call(n,i)&&i!==t&&$n(n,i,{get:()=>e[i],enumerable:!(r=ds(e,i))||r.enumerable});return n};var fs=n=>ms($n({},"__esModule",{value:!0}),n);var sl={};us(sl,{CSSWorker:()=>Vn,create:()=>ol});var d;(function(n){n[n.Ident=0]="Ident",n[n.AtKeyword=1]="AtKeyword",n[n.String=2]="String",n[n.BadString=3]="BadString",n[n.UnquotedString=4]="UnquotedString",n[n.Hash=5]="Hash",n[n.Num=6]="Num",n[n.Percentage=7]="Percentage",n[n.Dimension=8]="Dimension",n[n.UnicodeRange=9]="UnicodeRange",n[n.CDO=10]="CDO",n[n.CDC=11]="CDC",n[n.Colon=12]="Colon",n[n.SemiColon=13]="SemiColon",n[n.CurlyL=14]="CurlyL",n[n.CurlyR=15]="CurlyR",n[n.ParenthesisL=16]="ParenthesisL",n[n.ParenthesisR=17]="ParenthesisR",n[n.BracketL=18]="BracketL",n[n.BracketR=19]="BracketR",n[n.Whitespace=20]="Whitespace",n[n.Includes=21]="Includes",n[n.Dashmatch=22]="Dashmatch",n[n.SubstringOperator=23]="SubstringOperator",n[n.PrefixOperator=24]="PrefixOperator",n[n.SuffixOperator=25]="SuffixOperator",n[n.Delim=26]="Delim",n[n.EMS=27]="EMS",n[n.EXS=28]="EXS",n[n.Length=29]="Length",n[n.Angle=30]="Angle",n[n.Time=31]="Time",n[n.Freq=32]="Freq",n[n.Exclamation=33]="Exclamation",n[n.Resolution=34]="Resolution",n[n.Comma=35]="Comma",n[n.Charset=36]="Charset",n[n.EscapedJavaScript=37]="EscapedJavaScript",n[n.BadEscapedJavaScript=38]="BadEscapedJavaScript",n[n.Comment=39]="Comment",n[n.SingleLineComment=40]="SingleLineComment",n[n.EOF=41]="EOF",n[n.CustomToken=42]="CustomToken"})(d||(d={}));var Kr=function(){function n(e){this.source=e,this.len=e.length,this.position=0}return n.prototype.substring=function(e,t){return t===void 0&&(t=this.position),this.source.substring(e,t)},n.prototype.eos=function(){return this.len<=this.position},n.prototype.pos=function(){return this.position},n.prototype.goBackTo=function(e){this.position=e},n.prototype.goBack=function(e){this.position-=e},n.prototype.advance=function(e){this.position+=e},n.prototype.nextChar=function(){return this.source.charCodeAt(this.position++)||0},n.prototype.peekChar=function(e){return e===void 0&&(e=0),this.source.charCodeAt(this.position+e)||0},n.prototype.lookbackChar=function(e){return e===void 0&&(e=0),this.source.charCodeAt(this.position-e)||0},n.prototype.advanceIfChar=function(e){return e===this.source.charCodeAt(this.position)?(this.position++,!0):!1},n.prototype.advanceIfChars=function(e){if(this.position+e.length>this.source.length)return!1;for(var t=0;t=St&&t<=kt?(this.stream.advance(e+1),this.stream.advanceWhileChar(function(r){return r>=St&&r<=kt||e===0&&r===ti}),!0):!1},n.prototype._newline=function(e){var t=this.stream.peekChar();switch(t){case at:case _t:case st:return this.stream.advance(1),e.push(String.fromCharCode(t)),t===at&&this.stream.advanceIfChar(st)&&e.push(` `),!0}return!1},n.prototype._escape=function(e,t){var r=this.stream.peekChar();if(r===Kn){this.stream.advance(1),r=this.stream.peekChar();for(var i=0;i<6&&(r>=St&&r<=kt||r>=tn&&r<=Gr||r>=nn&&r<=Jr);)this.stream.advance(1),r=this.stream.peekChar(),i++;if(i>0){try{var o=parseInt(this.stream.substring(this.stream.pos()-i),16);o&&e.push(String.fromCharCode(o))}catch{}return r===Gn||r===Hn?this.stream.advance(1):this._newline([]),!0}if(r!==at&&r!==_t&&r!==st)return this.stream.advance(1),e.push(String.fromCharCode(r)),!0;if(t)return this._newline(e)}return!1},n.prototype._stringChar=function(e,t){var r=this.stream.peekChar();return r!==0&&r!==e&&r!==Kn&&r!==at&&r!==_t&&r!==st?(this.stream.advance(1),t.push(String.fromCharCode(r)),!0):!1},n.prototype._string=function(e){if(this.stream.peekChar()===ei||this.stream.peekChar()===Zr){var t=this.stream.nextChar();for(e.push(String.fromCharCode(t));this._stringChar(t,e)||this._escape(e,!0););return this.stream.peekChar()===t?(this.stream.nextChar(),e.push(String.fromCharCode(t)),d.String):d.BadString}return null},n.prototype._unquotedChar=function(e){var t=this.stream.peekChar();return t!==0&&t!==Kn&&t!==ei&&t!==Zr&&t!==ri&&t!==ii&&t!==Gn&&t!==Hn&&t!==st&&t!==_t&&t!==at?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._unquotedString=function(e){for(var t=!1;this._unquotedChar(e)||this._escape(e);)t=!0;return t},n.prototype._whitespace=function(){var e=this.stream.advanceWhileChar(function(t){return t===Gn||t===Hn||t===st||t===_t||t===at});return e>0},n.prototype._name=function(e){for(var t=!1;this._identChar(e)||this._escape(e);)t=!0;return t},n.prototype.ident=function(e){var t=this.stream.pos(),r=this._minus(e);if(r){if(this._minus(e)||this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}}else if(this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}return this.stream.goBackTo(t),!1},n.prototype._identFirstChar=function(e){var t=this.stream.peekChar();return t===Yr||t>=tn&&t<=Hr||t>=nn&&t<=Xr||t>=128&&t<=65535?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._minus=function(e){var t=this.stream.peekChar();return t===Ye?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._identChar=function(e){var t=this.stream.peekChar();return t===Yr||t===Ye||t>=tn&&t<=Hr||t>=nn&&t<=Xr||t>=St&&t<=kt||t>=128&&t<=65535?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._unicodeRange=function(){if(this.stream.advanceIfChar(Ts)){var e=function(i){return i>=St&&i<=kt||i>=tn&&i<=Gr||i>=nn&&i<=Jr},t=this.stream.advanceWhileChar(e)+this.stream.advanceWhileChar(function(i){return i===Ms});if(t>=1&&t<=6)if(this.stream.advanceIfChar(Ye)){var r=this.stream.advanceWhileChar(e);if(r>=1&&r<=6)return!0}else return!0}return!1},n}();function q(n,e){if(n.length0?n.lastIndexOf(e)===t:t===0?n===e:!1}function oi(n,e,t){t===void 0&&(t=4);var r=Math.abs(n.length-e.length);if(r>t)return 0;var i=[],o=[],s,a;for(s=0;s0;)(e&1)===1&&(t+=n),n+=n,e=e>>>1;return t}var E=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),u;(function(n){n[n.Undefined=0]="Undefined",n[n.Identifier=1]="Identifier",n[n.Stylesheet=2]="Stylesheet",n[n.Ruleset=3]="Ruleset",n[n.Selector=4]="Selector",n[n.SimpleSelector=5]="SimpleSelector",n[n.SelectorInterpolation=6]="SelectorInterpolation",n[n.SelectorCombinator=7]="SelectorCombinator",n[n.SelectorCombinatorParent=8]="SelectorCombinatorParent",n[n.SelectorCombinatorSibling=9]="SelectorCombinatorSibling",n[n.SelectorCombinatorAllSiblings=10]="SelectorCombinatorAllSiblings",n[n.SelectorCombinatorShadowPiercingDescendant=11]="SelectorCombinatorShadowPiercingDescendant",n[n.Page=12]="Page",n[n.PageBoxMarginBox=13]="PageBoxMarginBox",n[n.ClassSelector=14]="ClassSelector",n[n.IdentifierSelector=15]="IdentifierSelector",n[n.ElementNameSelector=16]="ElementNameSelector",n[n.PseudoSelector=17]="PseudoSelector",n[n.AttributeSelector=18]="AttributeSelector",n[n.Declaration=19]="Declaration",n[n.Declarations=20]="Declarations",n[n.Property=21]="Property",n[n.Expression=22]="Expression",n[n.BinaryExpression=23]="BinaryExpression",n[n.Term=24]="Term",n[n.Operator=25]="Operator",n[n.Value=26]="Value",n[n.StringLiteral=27]="StringLiteral",n[n.URILiteral=28]="URILiteral",n[n.EscapedValue=29]="EscapedValue",n[n.Function=30]="Function",n[n.NumericValue=31]="NumericValue",n[n.HexColorValue=32]="HexColorValue",n[n.RatioValue=33]="RatioValue",n[n.MixinDeclaration=34]="MixinDeclaration",n[n.MixinReference=35]="MixinReference",n[n.VariableName=36]="VariableName",n[n.VariableDeclaration=37]="VariableDeclaration",n[n.Prio=38]="Prio",n[n.Interpolation=39]="Interpolation",n[n.NestedProperties=40]="NestedProperties",n[n.ExtendsReference=41]="ExtendsReference",n[n.SelectorPlaceholder=42]="SelectorPlaceholder",n[n.Debug=43]="Debug",n[n.If=44]="If",n[n.Else=45]="Else",n[n.For=46]="For",n[n.Each=47]="Each",n[n.While=48]="While",n[n.MixinContentReference=49]="MixinContentReference",n[n.MixinContentDeclaration=50]="MixinContentDeclaration",n[n.Media=51]="Media",n[n.Keyframe=52]="Keyframe",n[n.FontFace=53]="FontFace",n[n.Import=54]="Import",n[n.Namespace=55]="Namespace",n[n.Invocation=56]="Invocation",n[n.FunctionDeclaration=57]="FunctionDeclaration",n[n.ReturnStatement=58]="ReturnStatement",n[n.MediaQuery=59]="MediaQuery",n[n.MediaCondition=60]="MediaCondition",n[n.MediaFeature=61]="MediaFeature",n[n.FunctionParameter=62]="FunctionParameter",n[n.FunctionArgument=63]="FunctionArgument",n[n.KeyframeSelector=64]="KeyframeSelector",n[n.ViewPort=65]="ViewPort",n[n.Document=66]="Document",n[n.AtApplyRule=67]="AtApplyRule",n[n.CustomPropertyDeclaration=68]="CustomPropertyDeclaration",n[n.CustomPropertySet=69]="CustomPropertySet",n[n.ListEntry=70]="ListEntry",n[n.Supports=71]="Supports",n[n.SupportsCondition=72]="SupportsCondition",n[n.NamespacePrefix=73]="NamespacePrefix",n[n.GridLine=74]="GridLine",n[n.Plugin=75]="Plugin",n[n.UnknownAtRule=76]="UnknownAtRule",n[n.Use=77]="Use",n[n.ModuleConfiguration=78]="ModuleConfiguration",n[n.Forward=79]="Forward",n[n.ForwardVisibility=80]="ForwardVisibility",n[n.Module=81]="Module",n[n.UnicodeRange=82]="UnicodeRange"})(u||(u={}));var A;(function(n){n[n.Mixin=0]="Mixin",n[n.Rule=1]="Rule",n[n.Variable=2]="Variable",n[n.Function=3]="Function",n[n.Keyframe=4]="Keyframe",n[n.Unknown=5]="Unknown",n[n.Module=6]="Module",n[n.Forward=7]="Forward",n[n.ForwardVisibility=8]="ForwardVisibility"})(A||(A={}));function on(n,e){var t=null;return!n||en.end?null:(n.accept(function(r){return r.offset===-1&&r.length===-1?!0:r.offset<=e&&r.end>=e?(t?r.length<=t.length&&(t=r):t=r,!0):!1}),t)}function lt(n,e){for(var t=on(n,e),r=[];t;)r.unshift(t),t=t.parent;return r}function ai(n){var e=n.findParent(u.Declaration),t=e&&e.getValue();return t&&t.encloses(n)?e:null}var F=function(){function n(e,t,r){e===void 0&&(e=-1),t===void 0&&(t=-1),this.parent=null,this.offset=e,this.length=t,r&&(this.nodeType=r)}return Object.defineProperty(n.prototype,"end",{get:function(){return this.offset+this.length},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"type",{get:function(){return this.nodeType||u.Undefined},set:function(e){this.nodeType=e},enumerable:!1,configurable:!0}),n.prototype.getTextProvider=function(){for(var e=this;e&&!e.textProvider;)e=e.parent;return e?e.textProvider:function(){return"unknown"}},n.prototype.getText=function(){return this.getTextProvider()(this.offset,this.length)},n.prototype.matches=function(e){return this.length===e.length&&this.getTextProvider()(this.offset,this.length)===e},n.prototype.startsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.offset,e.length)===e},n.prototype.endsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.end-e.length,e.length)===e},n.prototype.accept=function(e){if(e(this)&&this.children)for(var t=0,r=this.children;t=0&&e.parent.children.splice(r,1)}e.parent=this;var i=this.children;return i||(i=this.children=[]),t!==-1?i.splice(t,0,e):i.push(e),e},n.prototype.attachTo=function(e,t){return t===void 0&&(t=-1),e&&e.adoptChild(this,t),this},n.prototype.collectIssues=function(e){this.issues&&e.push.apply(e,this.issues)},n.prototype.addIssue=function(e){this.issues||(this.issues=[]),this.issues.push(e)},n.prototype.hasIssue=function(e){return Array.isArray(this.issues)&&this.issues.some(function(t){return t.getRule()===e})},n.prototype.isErroneous=function(e){return e===void 0&&(e=!1),this.issues&&this.issues.length>0?!0:e&&Array.isArray(this.children)&&this.children.some(function(t){return t.isErroneous(!0)})},n.prototype.setNode=function(e,t,r){return r===void 0&&(r=-1),t?(t.attachTo(this,r),this[e]=t,!0):!1},n.prototype.addChild=function(e){return e?(this.children||(this.children=[]),e.attachTo(this),this.updateOffsetAndLength(e),!0):!1},n.prototype.updateOffsetAndLength=function(e){(e.offsetthis.end||this.length===-1)&&(this.length=t-this.offset)},n.prototype.hasChildren=function(){return!!this.children&&this.children.length>0},n.prototype.getChildren=function(){return this.children?this.children.slice(0):[]},n.prototype.getChild=function(e){return this.children&&e=0;r--)if(t=this.children[r],t.offset<=e)return t}return null},n.prototype.findChildAtOffset=function(e,t){var r=this.findFirstChildBeforeOffset(e);return r&&r.end>=e?t&&r.findChildAtOffset(e,!0)||r:null},n.prototype.encloses=function(e){return this.offset<=e.offset&&this.offset+this.length>=e.offset+e.length},n.prototype.getParent=function(){for(var e=this.parent;e instanceof ee;)e=e.parent;return e},n.prototype.findParent=function(e){for(var t=this;t&&t.type!==e;)t=t.parent;return t},n.prototype.findAParent=function(){for(var e=[],t=0;t{let o=i[0];return typeof e[o]<"u"?e[o]:r}),t}function js(n,e,...t){return Us(e,t)}function H(n){return js}var U=H(),j=function(){function n(e,t){this.id=e,this.message=t}return n}();var f={NumberExpected:new j("css-numberexpected",U("expected.number","number expected")),ConditionExpected:new j("css-conditionexpected",U("expected.condt","condition expected")),RuleOrSelectorExpected:new j("css-ruleorselectorexpected",U("expected.ruleorselector","at-rule or selector expected")),DotExpected:new j("css-dotexpected",U("expected.dot","dot expected")),ColonExpected:new j("css-colonexpected",U("expected.colon","colon expected")),SemiColonExpected:new j("css-semicolonexpected",U("expected.semicolon","semi-colon expected")),TermExpected:new j("css-termexpected",U("expected.term","term expected")),ExpressionExpected:new j("css-expressionexpected",U("expected.expression","expression expected")),OperatorExpected:new j("css-operatorexpected",U("expected.operator","operator expected")),IdentifierExpected:new j("css-identifierexpected",U("expected.ident","identifier expected")),PercentageExpected:new j("css-percentageexpected",U("expected.percentage","percentage expected")),URIOrStringExpected:new j("css-uriorstringexpected",U("expected.uriorstring","uri or string expected")),URIExpected:new j("css-uriexpected",U("expected.uri","URI expected")),VariableNameExpected:new j("css-varnameexpected",U("expected.varname","variable name expected")),VariableValueExpected:new j("css-varvalueexpected",U("expected.varvalue","variable value expected")),PropertyValueExpected:new j("css-propertyvalueexpected",U("expected.propvalue","property value expected")),LeftCurlyExpected:new j("css-lcurlyexpected",U("expected.lcurly","{ expected")),RightCurlyExpected:new j("css-rcurlyexpected",U("expected.rcurly","} expected")),LeftSquareBracketExpected:new j("css-rbracketexpected",U("expected.lsquare","[ expected")),RightSquareBracketExpected:new j("css-lbracketexpected",U("expected.rsquare","] expected")),LeftParenthesisExpected:new j("css-lparentexpected",U("expected.lparen","( expected")),RightParenthesisExpected:new j("css-rparentexpected",U("expected.rparent",") expected")),CommaExpected:new j("css-commaexpected",U("expected.comma","comma expected")),PageDirectiveOrDeclarationExpected:new j("css-pagedirordeclexpected",U("expected.pagedirordecl","page directive or declaraton expected")),UnknownAtRule:new j("css-unknownatrule",U("unknown.atrule","at-rule unknown")),UnknownKeyword:new j("css-unknownkeyword",U("unknown.keyword","unknown keyword")),SelectorExpected:new j("css-selectorexpected",U("expected.selector","selector expected")),StringLiteralExpected:new j("css-stringliteralexpected",U("expected.stringliteral","string literal expected")),WhitespaceExpected:new j("css-whitespaceexpected",U("expected.whitespace","whitespace expected")),MediaQueryExpected:new j("css-mediaqueryexpected",U("expected.mediaquery","media query expected")),IdentifierOrWildcardExpected:new j("css-idorwildcardexpected",U("expected.idorwildcard","identifier or wildcard expected")),WildcardExpected:new j("css-wildcardexpected",U("expected.wildcard","wildcard expected")),IdentifierOrVariableExpected:new j("css-idorvarexpected",U("expected.idorvar","identifier or variable expected"))};var Oi;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647})(Oi||(Oi={}));var gn;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647})(gn||(gn={}));var Q;(function(n){function e(r,i){return r===Number.MAX_VALUE&&(r=gn.MAX_VALUE),i===Number.MAX_VALUE&&(i=gn.MAX_VALUE),{line:r,character:i}}n.create=e;function t(r){var i=r;return v.objectLiteral(i)&&v.uinteger(i.line)&&v.uinteger(i.character)}n.is=t})(Q||(Q={}));var W;(function(n){function e(r,i,o,s){if(v.uinteger(r)&&v.uinteger(i)&&v.uinteger(o)&&v.uinteger(s))return{start:Q.create(r,i),end:Q.create(o,s)};if(Q.is(r)&&Q.is(i))return{start:r,end:i};throw new Error("Range#create called with invalid arguments["+r+", "+i+", "+o+", "+s+"]")}n.create=e;function t(r){var i=r;return v.objectLiteral(i)&&Q.is(i.start)&&Q.is(i.end)}n.is=t})(W||(W={}));var tt;(function(n){function e(r,i){return{uri:r,range:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.range)&&(v.string(i.uri)||v.undefined(i.uri))}n.is=t})(tt||(tt={}));var Wi;(function(n){function e(r,i,o,s){return{targetUri:r,targetRange:i,targetSelectionRange:o,originSelectionRange:s}}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.targetRange)&&v.string(i.targetUri)&&(W.is(i.targetSelectionRange)||v.undefined(i.targetSelectionRange))&&(W.is(i.originSelectionRange)||v.undefined(i.originSelectionRange))}n.is=t})(Wi||(Wi={}));var bn;(function(n){function e(r,i,o,s){return{red:r,green:i,blue:o,alpha:s}}n.create=e;function t(r){var i=r;return v.numberRange(i.red,0,1)&&v.numberRange(i.green,0,1)&&v.numberRange(i.blue,0,1)&&v.numberRange(i.alpha,0,1)}n.is=t})(bn||(bn={}));var er;(function(n){function e(r,i){return{range:r,color:i}}n.create=e;function t(r){var i=r;return W.is(i.range)&&bn.is(i.color)}n.is=t})(er||(er={}));var tr;(function(n){function e(r,i,o){return{label:r,textEdit:i,additionalTextEdits:o}}n.create=e;function t(r){var i=r;return v.string(i.label)&&(v.undefined(i.textEdit)||T.is(i))&&(v.undefined(i.additionalTextEdits)||v.typedArray(i.additionalTextEdits,T.is))}n.is=t})(tr||(tr={}));var nr;(function(n){n.Comment="comment",n.Imports="imports",n.Region="region"})(nr||(nr={}));var rr;(function(n){function e(r,i,o,s,a){var l={startLine:r,endLine:i};return v.defined(o)&&(l.startCharacter=o),v.defined(s)&&(l.endCharacter=s),v.defined(a)&&(l.kind=a),l}n.create=e;function t(r){var i=r;return v.uinteger(i.startLine)&&v.uinteger(i.startLine)&&(v.undefined(i.startCharacter)||v.uinteger(i.startCharacter))&&(v.undefined(i.endCharacter)||v.uinteger(i.endCharacter))&&(v.undefined(i.kind)||v.string(i.kind))}n.is=t})(rr||(rr={}));var ir;(function(n){function e(r,i){return{location:r,message:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&tt.is(i.location)&&v.string(i.message)}n.is=t})(ir||(ir={}));var mt;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(mt||(mt={}));var Li;(function(n){n.Unnecessary=1,n.Deprecated=2})(Li||(Li={}));var Ui;(function(n){function e(t){var r=t;return r!=null&&v.string(r.href)}n.is=e})(Ui||(Ui={}));var It;(function(n){function e(r,i,o,s,a,l){var c={range:r,message:i};return v.defined(o)&&(c.severity=o),v.defined(s)&&(c.code=s),v.defined(a)&&(c.source=a),v.defined(l)&&(c.relatedInformation=l),c}n.create=e;function t(r){var i,o=r;return v.defined(o)&&W.is(o.range)&&v.string(o.message)&&(v.number(o.severity)||v.undefined(o.severity))&&(v.integer(o.code)||v.string(o.code)||v.undefined(o.code))&&(v.undefined(o.codeDescription)||v.string((i=o.codeDescription)===null||i===void 0?void 0:i.href))&&(v.string(o.source)||v.undefined(o.source))&&(v.undefined(o.relatedInformation)||v.typedArray(o.relatedInformation,ir.is))}n.is=t})(It||(It={}));var Ge;(function(n){function e(r,i){for(var o=[],s=2;s0&&(a.arguments=o),a}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.title)&&v.string(i.command)}n.is=t})(Ge||(Ge={}));var T;(function(n){function e(o,s){return{range:o,newText:s}}n.replace=e;function t(o,s){return{range:{start:o,end:o},newText:s}}n.insert=t;function r(o){return{range:o,newText:""}}n.del=r;function i(o){var s=o;return v.objectLiteral(s)&&v.string(s.newText)&&W.is(s.range)}n.is=i})(T||(T={}));var ut;(function(n){function e(r,i,o){var s={label:r};return i!==void 0&&(s.needsConfirmation=i),o!==void 0&&(s.description=o),s}n.create=e;function t(r){var i=r;return i!==void 0&&v.objectLiteral(i)&&v.string(i.label)&&(v.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(v.string(i.description)||i.description===void 0)}n.is=t})(ut||(ut={}));var le;(function(n){function e(t){var r=t;return typeof r=="string"}n.is=e})(le||(le={}));var Ke;(function(n){function e(o,s,a){return{range:o,newText:s,annotationId:a}}n.replace=e;function t(o,s,a){return{range:{start:o,end:o},newText:s,annotationId:a}}n.insert=t;function r(o,s){return{range:o,newText:"",annotationId:s}}n.del=r;function i(o){var s=o;return T.is(s)&&(ut.is(s.annotationId)||le.is(s.annotationId))}n.is=i})(Ke||(Ke={}));var nt;(function(n){function e(r,i){return{textDocument:r,edits:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&yn.is(i.textDocument)&&Array.isArray(i.edits)}n.is=t})(nt||(nt={}));var Mt;(function(n){function e(r,i,o){var s={kind:"create",uri:r};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(r){var i=r;return i&&i.kind==="create"&&v.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||v.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||v.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Mt||(Mt={}));var Tt;(function(n){function e(r,i,o,s){var a={kind:"rename",oldUri:r,newUri:i};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(a.options=o),s!==void 0&&(a.annotationId=s),a}n.create=e;function t(r){var i=r;return i&&i.kind==="rename"&&v.string(i.oldUri)&&v.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||v.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||v.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Tt||(Tt={}));var Pt;(function(n){function e(r,i,o){var s={kind:"delete",uri:r};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(r){var i=r;return i&&i.kind==="delete"&&v.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||v.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||v.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Pt||(Pt={}));var vn;(function(n){function e(t){var r=t;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(i){return v.string(i.kind)?Mt.is(i)||Tt.is(i)||Pt.is(i):nt.is(i)}))}n.is=e})(vn||(vn={}));var fn=function(){function n(e,t){this.edits=e,this.changeAnnotations=t}return n.prototype.insert=function(e,t,r){var i,o;if(r===void 0?i=T.insert(e,t):le.is(r)?(o=r,i=Ke.insert(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),i=Ke.insert(e,t,o)),this.edits.push(i),o!==void 0)return o},n.prototype.replace=function(e,t,r){var i,o;if(r===void 0?i=T.replace(e,t):le.is(r)?(o=r,i=Ke.replace(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),i=Ke.replace(e,t,o)),this.edits.push(i),o!==void 0)return o},n.prototype.delete=function(e,t){var r,i;if(t===void 0?r=T.del(e):le.is(t)?(i=t,r=Ke.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(t),r=Ke.del(e,i)),this.edits.push(r),i!==void 0)return i},n.prototype.add=function(e){this.edits.push(e)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(e){if(e===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},n}(),ji=function(){function n(e){this._annotations=e===void 0?Object.create(null):e,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(e,t){var r;if(le.is(e)?r=e:(r=this.nextId(),t=e),this._annotations[r]!==void 0)throw new Error("Id "+r+" is already in use.");if(t===void 0)throw new Error("No annotation provided for id "+r);return this._annotations[r]=t,this._size++,r},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),pl=function(){function n(e){var t=this;this._textEditChanges=Object.create(null),e!==void 0?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new ji(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach(function(r){if(nt.is(r)){var i=new fn(r.edits,t._changeAnnotations);t._textEditChanges[r.textDocument.uri]=i}})):e.changes&&Object.keys(e.changes).forEach(function(r){var i=new fn(e.changes[r]);t._textEditChanges[r]=i})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(e){if(yn.is(e)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var t={uri:e.uri,version:e.version},r=this._textEditChanges[t.uri];if(!r){var i=[],o={textDocument:t,edits:i};this._workspaceEdit.documentChanges.push(o),r=new fn(i,this._changeAnnotations),this._textEditChanges[t.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var r=this._textEditChanges[e];if(!r){var i=[];this._workspaceEdit.changes[e]=i,r=new fn(i),this._textEditChanges[e]=r}return r}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new ji,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i;ut.is(t)||le.is(t)?i=t:r=t;var o,s;if(i===void 0?o=Mt.create(e,r):(s=le.is(i)?i:this._changeAnnotations.manage(i),o=Mt.create(e,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(e,t,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var o;ut.is(r)||le.is(r)?o=r:i=r;var s,a;if(o===void 0?s=Tt.create(e,t,i):(a=le.is(o)?o:this._changeAnnotations.manage(o),s=Tt.create(e,t,i,a)),this._workspaceEdit.documentChanges.push(s),a!==void 0)return a},n.prototype.deleteFile=function(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i;ut.is(t)||le.is(t)?i=t:r=t;var o,s;if(i===void 0?o=Pt.create(e,r):(s=le.is(i)?i:this._changeAnnotations.manage(i),o=Pt.create(e,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();var Vi;(function(n){function e(r){return{uri:r}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)}n.is=t})(Vi||(Vi={}));var At;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&v.integer(i.version)}n.is=t})(At||(At={}));var yn;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&(i.version===null||v.integer(i.version))}n.is=t})(yn||(yn={}));var Bi;(function(n){function e(r,i,o,s){return{uri:r,languageId:i,version:o,text:s}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&v.string(i.languageId)&&v.integer(i.version)&&v.string(i.text)}n.is=t})(Bi||(Bi={}));var ce;(function(n){n.PlainText="plaintext",n.Markdown="markdown"})(ce||(ce={}));(function(n){function e(t){var r=t;return r===n.PlainText||r===n.Markdown}n.is=e})(ce||(ce={}));var wn;(function(n){function e(t){var r=t;return v.objectLiteral(t)&&ce.is(r.kind)&&v.string(r.value)}n.is=e})(wn||(wn={}));var R;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(R||(R={}));var re;(function(n){n.PlainText=1,n.Snippet=2})(re||(re={}));var Ne;(function(n){n.Deprecated=1})(Ne||(Ne={}));var $i;(function(n){function e(r,i,o){return{newText:r,insert:i,replace:o}}n.create=e;function t(r){var i=r;return i&&v.string(i.newText)&&W.is(i.insert)&&W.is(i.replace)}n.is=t})($i||($i={}));var qi;(function(n){n.asIs=1,n.adjustIndentation=2})(qi||(qi={}));var or;(function(n){function e(t){return{label:t}}n.create=e})(or||(or={}));var sr;(function(n){function e(t,r){return{items:t||[],isIncomplete:!!r}}n.create=e})(sr||(sr={}));var Nt;(function(n){function e(r){return r.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}n.fromPlainText=e;function t(r){var i=r;return v.string(i)||v.objectLiteral(i)&&v.string(i.language)&&v.string(i.value)}n.is=t})(Nt||(Nt={}));var ar;(function(n){function e(t){var r=t;return!!r&&v.objectLiteral(r)&&(wn.is(r.contents)||Nt.is(r.contents)||v.typedArray(r.contents,Nt.is))&&(t.range===void 0||W.is(t.range))}n.is=e})(ar||(ar={}));var Ki;(function(n){function e(t,r){return r?{label:t,documentation:r}:{label:t}}n.create=e})(Ki||(Ki={}));var Gi;(function(n){function e(t,r){for(var i=[],o=2;o=0;h--){var p=l[h],m=o.offsetAt(p.range.start),g=o.offsetAt(p.range.end);if(g<=c)a=a.substring(0,m)+p.newText+a.substring(g,a.length);else throw new Error("Overlapping edit");c=m}return a}n.applyEdits=r;function i(o,s){if(o.length<=1)return o;var a=o.length/2|0,l=o.slice(0,a),c=o.slice(a);i(l,s),i(c,s);for(var h=0,p=0,m=0;h0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets},n.prototype.positionAt=function(e){e=Math.max(Math.min(e,this._content.length),0);var t=this.getLineOffsets(),r=0,i=t.length;if(i===0)return Q.create(0,e);for(;re?i=o:r=o+1}var s=r-1;return Q.create(s,e-t[s])},n.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var r=t[e.line],i=e.line+1"u"}n.undefined=r;function i(g){return g===!0||g===!1}n.boolean=i;function o(g){return e.call(g)==="[object String]"}n.string=o;function s(g){return e.call(g)==="[object Number]"}n.number=s;function a(g,w,x){return e.call(g)==="[object Number]"&&w<=g&&g<=x}n.numberRange=a;function l(g){return e.call(g)==="[object Number]"&&-2147483648<=g&&g<=2147483647}n.integer=l;function c(g){return e.call(g)==="[object Number]"&&0<=g&&g<=2147483647}n.uinteger=c;function h(g){return e.call(g)==="[object Function]"}n.func=h;function p(g){return g!==null&&typeof g=="object"}n.objectLiteral=p;function m(g,w){return Array.isArray(g)&&g.every(w)}n.typedArray=m})(v||(v={}));var xn=class n{constructor(e,t,r,i){this._uri=e,this._languageId=t,this._version=r,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let t=this.offsetAt(e.start),r=this.offsetAt(e.end);return this._content.substring(t,r)}return this._content}update(e,t){for(let r of e)if(n.isIncremental(r)){let i=Zi(r.range),o=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,o)+r.text+this._content.substring(s,this._content.length);let a=Math.max(i.start.line,0),l=Math.max(i.end.line,0),c=this._lineOffsets,h=Qi(r.text,!1,o);if(l-a===h.length)for(let m=0,g=h.length;me?i=s:r=s+1}let o=r-1;return{line:o,character:e-t[o]}}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let r=t[e.line],i=e.line+1{let m=h.range.start.line-p.range.start.line;return m===0?h.range.start.character-p.range.start.character:m}),l=0,c=[];for(let h of a){let p=i.offsetAt(h.range.start);if(pl&&c.push(s.substring(l,p)),h.newText.length&&c.push(h.newText),l=i.offsetAt(h.range.end)}return c.push(s.substr(l)),c.join("")}n.applyEdits=r})(Lt||(Lt={}));function ur(n,e){if(n.length<=1)return n;let t=n.length/2|0,r=n.slice(0,t),i=n.slice(t);ur(r,e),ur(i,e);let o=0,s=0,a=0;for(;ot.line||e.line===t.line&&e.character>t.character?{start:t,end:e}:n}function Bs(n){let e=Zi(n.range);return e!==n.range?{newText:n.newText,range:e}:n}var eo;(function(n){n.LATEST={textDocument:{completion:{completionItem:{documentationFormat:[ce.Markdown,ce.PlainText]}},hover:{contentFormat:[ce.Markdown,ce.PlainText]}}}})(eo||(eo={}));var rt;(function(n){n[n.Unknown=0]="Unknown",n[n.File=1]="File",n[n.Directory=2]="Directory",n[n.SymbolicLink=64]="SymbolicLink"})(rt||(rt={}));var to={E:"Edge",FF:"Firefox",S:"Safari",C:"Chrome",IE:"IE",O:"Opera"};function no(n){switch(n){case"experimental":return`\u26A0\uFE0F Property is experimental. Be cautious when using it.\uFE0F `;case"nonstandard":return`\u{1F6A8}\uFE0F Property is nonstandard. Avoid using it. `;case"obsolete":return`\u{1F6A8}\uFE0F\uFE0F\uFE0F Property is obsolete. Avoid using it. `;default:return""}}function ze(n,e,t){var r;if(e?r={kind:"markdown",value:qs(n,t)}:r={kind:"plaintext",value:$s(n,t)},r.value!=="")return r}function Sn(n){return n=n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&"),n.replace(//g,">")}function $s(n,e){if(!n.description||n.description==="")return"";if(typeof n.description!="string")return n.description.value;var t="";if(e?.documentation!==!1){n.status&&(t+=no(n.status)),t+=n.description;var r=ro(n.browsers);r&&(t+=` (`+r+")"),"syntax"in n&&(t+=` Syntax: `.concat(n.syntax))}return n.references&&n.references.length>0&&e?.references!==!1&&(t.length>0&&(t+=` `),t+=n.references.map(function(i){return"".concat(i.name,": ").concat(i.url)}).join(" | ")),t}function qs(n,e){if(!n.description||n.description==="")return"";var t="";if(e?.documentation!==!1){n.status&&(t+=no(n.status)),typeof n.description=="string"?t+=Sn(n.description):t+=n.description.kind===ce.Markdown?n.description.value:Sn(n.description.value);var r=ro(n.browsers);r&&(t+=` (`+Sn(r)+")"),"syntax"in n&&n.syntax&&(t+=` Syntax: `.concat(Sn(n.syntax)))}return n.references&&n.references.length>0&&e?.references!==!1&&(t.length>0&&(t+=` `),t+=n.references.map(function(i){return"[".concat(i.name,"](").concat(i.url,")")}).join(" | ")),t}function ro(n){return n===void 0&&(n=[]),n.length===0?null:n.map(function(e){var t="",r=e.match(/([A-Z]+)(\d+)?/),i=r[1],o=r[2];return i in to&&(t+=to[i]),o&&(t+=" "+o),t}).join(", ")}var Ut=H(),ao=[{func:"rgb($red, $green, $blue)",desc:Ut("css.builtin.rgb","Creates a Color from red, green, and blue values.")},{func:"rgba($red, $green, $blue, $alpha)",desc:Ut("css.builtin.rgba","Creates a Color from red, green, blue, and alpha values.")},{func:"hsl($hue, $saturation, $lightness)",desc:Ut("css.builtin.hsl","Creates a Color from hue, saturation, and lightness values.")},{func:"hsla($hue, $saturation, $lightness, $alpha)",desc:Ut("css.builtin.hsla","Creates a Color from hue, saturation, lightness, and alpha values.")},{func:"hwb($hue $white $black)",desc:Ut("css.builtin.hwb","Creates a Color from hue, white and black.")}],jt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rebeccapurple:"#663399",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},mr={currentColor:"The value of the 'color' property. The computed value of the 'currentColor' keyword is the computed value of the 'color' property. If the 'currentColor' keyword is set on the 'color' property itself, it is treated as 'color:inherit' at parse time.",transparent:"Fully transparent. This keyword can be considered a shorthand for rgba(0,0,0,0) which is its computed value."};function Je(n,e){var t=n.getText(),r=t.match(/^([-+]?[0-9]*\.?[0-9]+)(%?)$/);if(r){r[2]&&(e=100);var i=parseFloat(r[1])/e;if(i>=0&&i<=1)return i}throw new Error}function io(n){var e=n.getText(),t=e.match(/^([-+]?[0-9]*\.?[0-9]+)(deg|rad|grad|turn)?$/);if(t)switch(t[2]){case"deg":return parseFloat(e)%360;case"rad":return parseFloat(e)*180/Math.PI%360;case"grad":return parseFloat(e)*.9%360;case"turn":return parseFloat(e)*360%360;default:if(typeof t[2]>"u")return parseFloat(e)%360}throw new Error}function lo(n){var e=n.getName();return e?/^(rgb|rgba|hsl|hsla|hwb)$/gi.test(e):!1}var oo=48,Ks=57,Gs=65;var kn=97,Hs=102;function J(n){return n=kn&&n<=Hs?n-kn+10:0)}function so(n){if(n[0]!=="#")return null;switch(n.length){case 4:return{red:J(n.charCodeAt(1))*17/255,green:J(n.charCodeAt(2))*17/255,blue:J(n.charCodeAt(3))*17/255,alpha:1};case 5:return{red:J(n.charCodeAt(1))*17/255,green:J(n.charCodeAt(2))*17/255,blue:J(n.charCodeAt(3))*17/255,alpha:J(n.charCodeAt(4))*17/255};case 7:return{red:(J(n.charCodeAt(1))*16+J(n.charCodeAt(2)))/255,green:(J(n.charCodeAt(3))*16+J(n.charCodeAt(4)))/255,blue:(J(n.charCodeAt(5))*16+J(n.charCodeAt(6)))/255,alpha:1};case 9:return{red:(J(n.charCodeAt(1))*16+J(n.charCodeAt(2)))/255,green:(J(n.charCodeAt(3))*16+J(n.charCodeAt(4)))/255,blue:(J(n.charCodeAt(5))*16+J(n.charCodeAt(6)))/255,alpha:(J(n.charCodeAt(7))*16+J(n.charCodeAt(8)))/255}}return null}function co(n,e,t,r){if(r===void 0&&(r=1),n=n/60,e===0)return{red:t,green:t,blue:t,alpha:r};var i=function(a,l,c){for(;c<0;)c+=6;for(;c>=6;)c-=6;return c<1?(l-a)*c+a:c<3?l:c<4?(l-a)*(4-c)+a:a},o=t<=.5?t*(e+1):t+e-t*e,s=t*2-o;return{red:i(s,o,n+2),green:i(s,o,n),blue:i(s,o,n-2),alpha:r}}function fr(n){var e=n.red,t=n.green,r=n.blue,i=n.alpha,o=Math.max(e,t,r),s=Math.min(e,t,r),a=0,l=0,c=(s+o)/2,h=o-s;if(h>0){switch(l=Math.min(c<=.5?h/(2*c):h/(2-2*c),1),o){case e:a=(t-r)/h+(t=1){var i=e/(e+t);return{red:i,green:i,blue:i,alpha:r}}var o=co(n,1,.5,r),s=o.red;s*=1-e-t,s+=e;var a=o.green;a*=1-e-t,a+=e;var l=o.blue;return l*=1-e-t,l+=e,{red:s,green:a,blue:l,alpha:r}}function ho(n){var e=fr(n),t=Math.min(n.red,n.green,n.blue),r=1-Math.max(n.red,n.green,n.blue);return{h:e.h,w:t,b:r,a:e.a}}function po(n){if(n.type===u.HexColorValue){var e=n.getText();return so(e)}else if(n.type===u.Function){var t=n,r=t.getName(),i=t.getArguments().getChildren();if(i.length===1){var o=i[0].getChildren();if(o.length===1&&o[0].type===u.Expression&&(i=o[0].getChildren(),i.length===3)){var s=i[2];if(s instanceof ht){var a=s.getLeft(),l=s.getRight(),c=s.getOperator();a&&l&&c&&c.matches("/")&&(i=[i[0],i[1],a,l])}}}if(!r||i.length<3||i.length>4)return null;try{var h=i.length===4?Je(i[3],1):1;if(r==="rgb"||r==="rgba")return{red:Je(i[0],255),green:Je(i[1],255),blue:Je(i[2],255),alpha:h};if(r==="hsl"||r==="hsla"){var p=io(i[0]),m=Je(i[1],100),g=Je(i[2],100);return co(p,m,g,h)}else if(r==="hwb"){var p=io(i[0]),w=Je(i[1],100),x=Je(i[2],100);return Js(p,w,x,h)}}catch{return null}}else if(n.type===u.Identifier){if(n.parent&&n.parent.type!==u.Term)return null;var y=n.parent;if(y&&y.parent&&y.parent.type===u.BinaryExpression){var D=y.parent;if(D.parent&&D.parent.type===u.ListEntry&&D.parent.key===D)return null}var M=n.getText().toLowerCase();if(M==="none")return null;var z=jt[M];if(z)return so(z)}return null}var gr={bottom:"Computes to \u2018100%\u2019 for the vertical position if one or two values are given, otherwise specifies the bottom edge as the origin for the next offset.",center:"Computes to \u201850%\u2019 (\u2018left 50%\u2019) for the horizontal position if the horizontal position is not otherwise specified, or \u201850%\u2019 (\u2018top 50%\u2019) for the vertical position if it is.",left:"Computes to \u20180%\u2019 for the horizontal position if one or two values are given, otherwise specifies the left edge as the origin for the next offset.",right:"Computes to \u2018100%\u2019 for the horizontal position if one or two values are given, otherwise specifies the right edge as the origin for the next offset.",top:"Computes to \u20180%\u2019 for the vertical position if one or two values are given, otherwise specifies the top edge as the origin for the next offset."},br={"no-repeat":"Placed once and not repeated in this direction.",repeat:"Repeated in this direction as often as needed to cover the background painting area.","repeat-x":"Computes to \u2018repeat no-repeat\u2019.","repeat-y":"Computes to \u2018no-repeat repeat\u2019.",round:"Repeated as often as will fit within the background positioning area. If it doesn\u2019t fit a whole number of times, it is rescaled so that it does.",space:"Repeated as often as will fit within the background positioning area without being clipped and then the images are spaced out to fill the area."},vr={dashed:"A series of square-ended dashes.",dotted:"A series of round dots.",double:"Two parallel solid lines with some space between them.",groove:"Looks as if it were carved in the canvas.",hidden:"Same as \u2018none\u2019, but has different behavior in the border conflict resolution rules for border-collapsed tables.",inset:"Looks as if the content on the inside of the border is sunken into the canvas.",none:"No border. Color and width are ignored.",outset:"Looks as if the content on the inside of the border is coming out of the canvas.",ridge:"Looks as if it were coming out of the canvas.",solid:"A single line segment."},uo=["medium","thick","thin"],yr={"border-box":"The background is painted within (clipped to) the border box.","content-box":"The background is painted within (clipped to) the content box.","padding-box":"The background is painted within (clipped to) the padding box."},wr={"margin-box":"Uses the margin box as reference box.","fill-box":"Uses the object bounding box as reference box.","stroke-box":"Uses the stroke bounding box as reference box.","view-box":"Uses the nearest SVG viewport as reference box."},xr={initial:"Represents the value specified as the property\u2019s initial value.",inherit:"Represents the computed value of the property on the element\u2019s parent.",unset:"Acts as either `inherit` or `initial`, depending on whether the property is inherited or not."},Sr={"var()":"Evaluates the value of a custom variable.","calc()":"Evaluates an mathematical expression. The following operators can be used: + - * /."},kr={"url()":"Reference an image file by URL","image()":"Provide image fallbacks and annotations.","-webkit-image-set()":"Provide multiple resolutions. Remember to use unprefixed image-set() in addition.","image-set()":"Provide multiple resolutions of an image and const the UA decide which is most appropriate in a given situation.","-moz-element()":"Use an element in the document as an image. Remember to use unprefixed element() in addition.","element()":"Use an element in the document as an image.","cross-fade()":"Indicates the two images to be combined and how far along in the transition the combination is.","-webkit-gradient()":"Deprecated. Use modern linear-gradient() or radial-gradient() instead.","-webkit-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","-moz-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","-o-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","linear-gradient()":"A linear gradient is created by specifying a straight gradient line, and then several colors placed along that line.","-webkit-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","-moz-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","-o-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","repeating-linear-gradient()":"Same as linear-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop\u2019s position and the first specified color-stop\u2019s position.","-webkit-radial-gradient()":"Radial gradient. Remember to use unprefixed version in addition.","-moz-radial-gradient()":"Radial gradient. Remember to use unprefixed version in addition.","radial-gradient()":"Colors emerge from a single point and smoothly spread outward in a circular or elliptical shape.","-webkit-repeating-radial-gradient()":"Repeating radial gradient. Remember to use unprefixed version in addition.","-moz-repeating-radial-gradient()":"Repeating radial gradient. Remember to use unprefixed version in addition.","repeating-radial-gradient()":"Same as radial-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop\u2019s position and the first specified color-stop\u2019s position."},Cr={ease:"Equivalent to cubic-bezier(0.25, 0.1, 0.25, 1.0).","ease-in":"Equivalent to cubic-bezier(0.42, 0, 1.0, 1.0).","ease-in-out":"Equivalent to cubic-bezier(0.42, 0, 0.58, 1.0).","ease-out":"Equivalent to cubic-bezier(0, 0, 0.58, 1.0).",linear:"Equivalent to cubic-bezier(0.0, 0.0, 1.0, 1.0).","step-end":"Equivalent to steps(1, end).","step-start":"Equivalent to steps(1, start).","steps()":"The first parameter specifies the number of intervals in the function. The second parameter, which is optional, is either the value \u201Cstart\u201D or \u201Cend\u201D.","cubic-bezier()":"Specifies a cubic-bezier curve. The four values specify points P1 and P2 of the curve as (x1, y1, x2, y2).","cubic-bezier(0.6, -0.28, 0.735, 0.045)":"Ease-in Back. Overshoots.","cubic-bezier(0.68, -0.55, 0.265, 1.55)":"Ease-in-out Back. Overshoots.","cubic-bezier(0.175, 0.885, 0.32, 1.275)":"Ease-out Back. Overshoots.","cubic-bezier(0.6, 0.04, 0.98, 0.335)":"Ease-in Circular. Based on half circle.","cubic-bezier(0.785, 0.135, 0.15, 0.86)":"Ease-in-out Circular. Based on half circle.","cubic-bezier(0.075, 0.82, 0.165, 1)":"Ease-out Circular. Based on half circle.","cubic-bezier(0.55, 0.055, 0.675, 0.19)":"Ease-in Cubic. Based on power of three.","cubic-bezier(0.645, 0.045, 0.355, 1)":"Ease-in-out Cubic. Based on power of three.","cubic-bezier(0.215, 0.610, 0.355, 1)":"Ease-out Cubic. Based on power of three.","cubic-bezier(0.95, 0.05, 0.795, 0.035)":"Ease-in Exponential. Based on two to the power ten.","cubic-bezier(1, 0, 0, 1)":"Ease-in-out Exponential. Based on two to the power ten.","cubic-bezier(0.19, 1, 0.22, 1)":"Ease-out Exponential. Based on two to the power ten.","cubic-bezier(0.47, 0, 0.745, 0.715)":"Ease-in Sine.","cubic-bezier(0.445, 0.05, 0.55, 0.95)":"Ease-in-out Sine.","cubic-bezier(0.39, 0.575, 0.565, 1)":"Ease-out Sine.","cubic-bezier(0.55, 0.085, 0.68, 0.53)":"Ease-in Quadratic. Based on power of two.","cubic-bezier(0.455, 0.03, 0.515, 0.955)":"Ease-in-out Quadratic. Based on power of two.","cubic-bezier(0.25, 0.46, 0.45, 0.94)":"Ease-out Quadratic. Based on power of two.","cubic-bezier(0.895, 0.03, 0.685, 0.22)":"Ease-in Quartic. Based on power of four.","cubic-bezier(0.77, 0, 0.175, 1)":"Ease-in-out Quartic. Based on power of four.","cubic-bezier(0.165, 0.84, 0.44, 1)":"Ease-out Quartic. Based on power of four.","cubic-bezier(0.755, 0.05, 0.855, 0.06)":"Ease-in Quintic. Based on power of five.","cubic-bezier(0.86, 0, 0.07, 1)":"Ease-in-out Quintic. Based on power of five.","cubic-bezier(0.23, 1, 0.320, 1)":"Ease-out Quintic. Based on power of five."},_r={"circle()":"Defines a circle.","ellipse()":"Defines an ellipse.","inset()":"Defines an inset rectangle.","polygon()":"Defines a polygon."},Cn={length:["em","rem","ex","px","cm","mm","in","pt","pc","ch","vw","vh","vmin","vmax"],angle:["deg","rad","grad","turn"],time:["ms","s"],frequency:["Hz","kHz"],resolution:["dpi","dpcm","dppx"],percentage:["%","fr"]},mo=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","const","video","wbr"],fo=["circle","clipPath","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","foreignObject","g","hatch","hatchpath","image","line","linearGradient","marker","mask","mesh","meshpatch","meshrow","metadata","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","solidcolor","stop","svg","switch","symbol","text","textPath","tspan","use","view"],go=["@bottom-center","@bottom-left","@bottom-left-corner","@bottom-right","@bottom-right-corner","@left-bottom","@left-middle","@left-top","@right-bottom","@right-middle","@right-top","@top-center","@top-left","@top-left-corner","@top-right","@top-right-corner"];function Vt(n){return Object.keys(n).map(function(e){return n[e]})}function he(n){return typeof n<"u"}var bo=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;re.offset?o-e.offset:0}return e},n.prototype.markError=function(e,t,r,i){this.token!==this.lastErrorToken&&(e.addIssue(new mn(e,t,ne.Error,void 0,this.token.offset,this.token.len)),this.lastErrorToken=this.token),(r||i)&&this.resync(r,i)},n.prototype.parseStylesheet=function(e){var t=e.version,r=e.getText(),i=function(o,s){if(e.version!==t)throw new Error("Underlying model has changed, AST is no longer valid");return r.substr(o,s)};return this.internalParse(r,this._parseStylesheet,i)},n.prototype.internalParse=function(e,t,r){this.scanner.setSource(e),this.token=this.scanner.scan();var i=t.bind(this)();return i&&(r?i.textProvider=r:i.textProvider=function(o,s){return e.substr(o,s)}),i},n.prototype._parseStylesheet=function(){for(var e=this.create(ci);e.addChild(this._parseStylesheetStart()););var t=!1;do{var r=!1;do{r=!1;var i=this._parseStylesheetStatement();for(i&&(e.addChild(i),r=!0,t=!1,!this.peek(d.EOF)&&this._needsSemicolonAfter(i)&&!this.accept(d.SemiColon)&&this.markError(e,f.SemiColonExpected));this.accept(d.SemiColon)||this.accept(d.CDO)||this.accept(d.CDC);)r=!0,t=!1}while(r);if(this.peek(d.EOF))break;t||(this.peek(d.AtKeyword)?this.markError(e,f.UnknownAtRule):this.markError(e,f.RuleOrSelectorExpected),t=!0),this.consumeToken()}while(!this.peek(d.EOF));return this.finish(e)},n.prototype._parseStylesheetStart=function(){return this._parseCharset()},n.prototype._parseStylesheetStatement=function(e){return e===void 0&&(e=!1),this.peek(d.AtKeyword)?this._parseStylesheetAtStatement(e):this._parseRuleset(e)},n.prototype._parseStylesheetAtStatement=function(e){return e===void 0&&(e=!1),this._parseImport()||this._parseMedia(e)||this._parsePage()||this._parseFontFace()||this._parseKeyframe()||this._parseSupports(e)||this._parseViewPort()||this._parseNamespace()||this._parseDocument()||this._parseUnknownAtRule()},n.prototype._tryParseRuleset=function(e){var t=this.mark();if(this._parseSelector(e)){for(;this.accept(d.Comma)&&this._parseSelector(e););if(this.accept(d.CurlyL))return this.restoreAtMark(t),this._parseRuleset(e)}return this.restoreAtMark(t),null},n.prototype._parseRuleset=function(e){e===void 0&&(e=!1);var t=this.create(Te),r=t.getSelectors();if(!r.addChild(this._parseSelector(e)))return null;for(;this.accept(d.Comma);)if(!r.addChild(this._parseSelector(e)))return this.finish(t,f.SelectorExpected);return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseRuleSetDeclarationAtStatement=function(){return this._parseUnknownAtRule()},n.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseRuleSetDeclarationAtStatement():this._parseDeclaration()},n.prototype._needsSemicolonAfter=function(e){switch(e.type){case u.Keyframe:case u.ViewPort:case u.Media:case u.Ruleset:case u.Namespace:case u.If:case u.For:case u.Each:case u.While:case u.MixinDeclaration:case u.FunctionDeclaration:case u.MixinContentDeclaration:return!1;case u.ExtendsReference:case u.MixinContentReference:case u.ReturnStatement:case u.MediaQuery:case u.Debug:case u.Import:case u.AtApplyRule:case u.CustomPropertyDeclaration:return!0;case u.VariableDeclaration:return e.needsSemicolon;case u.MixinReference:return!e.getContent();case u.Declaration:return!e.getNestedProperties()}return!1},n.prototype._parseDeclarations=function(e){var t=this.create(Ft);if(!this.accept(d.CurlyL))return null;for(var r=e();t.addChild(r)&&!this.peek(d.CurlyR);){if(this._needsSemicolonAfter(r)&&!this.accept(d.SemiColon))return this.finish(t,f.SemiColonExpected,[d.SemiColon,d.CurlyR]);for(r&&this.prevToken&&this.prevToken.type===d.SemiColon&&(r.semicolonPosition=this.prevToken.offset);this.accept(d.SemiColon););r=e()}return this.accept(d.CurlyR)?this.finish(t):this.finish(t,f.RightCurlyExpected,[d.CurlyR,d.SemiColon])},n.prototype._parseBody=function(e,t){return e.setDeclarations(this._parseDeclarations(t))?this.finish(e):this.finish(e,f.LeftCurlyExpected,[d.CurlyR,d.SemiColon])},n.prototype._parseSelector=function(e){var t=this.create(Ee),r=!1;for(e&&(r=t.addChild(this._parseCombinator()));t.addChild(this._parseSimpleSelector());)r=!0,t.addChild(this._parseCombinator());return r?this.finish(t):null},n.prototype._parseDeclaration=function(e){var t=this._tryParseCustomPropertyDeclaration(e);if(t)return t;var r=this.create(ae);return r.setProperty(this._parseProperty())?this.accept(d.Colon)?(this.prevToken&&(r.colonPosition=this.prevToken.offset),r.setValue(this._parseExpr())?(r.addChild(this._parsePrio()),this.peek(d.SemiColon)&&(r.semicolonPosition=this.token.offset),this.finish(r)):this.finish(r,f.PropertyValueExpected)):this.finish(r,f.ColonExpected,[d.Colon],e||[d.SemiColon]):null},n.prototype._tryParseCustomPropertyDeclaration=function(e){if(!this.peekRegExp(d.Ident,/^--/))return null;var t=this.create(hi);if(!t.setProperty(this._parseProperty()))return null;if(!this.accept(d.Colon))return this.finish(t,f.ColonExpected,[d.Colon]);this.prevToken&&(t.colonPosition=this.prevToken.offset);var r=this.mark();if(this.peek(d.CurlyL)){var i=this.create(di),o=this._parseDeclarations(this._parseRuleSetDeclaration.bind(this));if(i.setDeclarations(o)&&!o.isErroneous(!0)&&(i.addChild(this._parsePrio()),this.peek(d.SemiColon)))return this.finish(i),t.setPropertySet(i),t.semicolonPosition=this.token.offset,this.finish(t);this.restoreAtMark(r)}var s=this._parseExpr();return s&&!s.isErroneous(!0)&&(this._parsePrio(),this.peekOne.apply(this,bo(bo([],e||[],!1),[d.SemiColon,d.EOF],!1)))?(t.setValue(s),this.peek(d.SemiColon)&&(t.semicolonPosition=this.token.offset),this.finish(t)):(this.restoreAtMark(r),t.addChild(this._parseCustomPropertyValue(e)),t.addChild(this._parsePrio()),he(t.colonPosition)&&this.token.offset===t.colonPosition+1?this.finish(t,f.PropertyValueExpected):this.finish(t))},n.prototype._parseCustomPropertyValue=function(e){var t=this;e===void 0&&(e=[d.CurlyR]);var r=this.create(F),i=function(){return s===0&&a===0&&l===0},o=function(){return e.indexOf(t.token.type)!==-1},s=0,a=0,l=0;e:for(;;){switch(this.token.type){case d.SemiColon:if(i())break e;break;case d.Exclamation:if(i())break e;break;case d.CurlyL:s++;break;case d.CurlyR:if(s--,s<0){if(o()&&a===0&&l===0)break e;return this.finish(r,f.LeftCurlyExpected)}break;case d.ParenthesisL:a++;break;case d.ParenthesisR:if(a--,a<0){if(o()&&l===0&&s===0)break e;return this.finish(r,f.LeftParenthesisExpected)}break;case d.BracketL:l++;break;case d.BracketR:if(l--,l<0)return this.finish(r,f.LeftSquareBracketExpected);break;case d.BadString:break e;case d.EOF:var c=f.RightCurlyExpected;return l>0?c=f.RightSquareBracketExpected:a>0&&(c=f.RightParenthesisExpected),this.finish(r,c)}this.consumeToken()}return this.finish(r)},n.prototype._tryToParseDeclaration=function(e){var t=this.mark();return this._parseProperty()&&this.accept(d.Colon)?(this.restoreAtMark(t),this._parseDeclaration(e)):(this.restoreAtMark(t),null)},n.prototype._parseProperty=function(){var e=this.create(ct),t=this.mark();return(this.acceptDelim("*")||this.acceptDelim("_"))&&this.hasWhitespace()?(this.restoreAtMark(t),null):e.setIdentifier(this._parsePropertyIdentifier())?this.finish(e):null},n.prototype._parsePropertyIdentifier=function(){return this._parseIdent()},n.prototype._parseCharset=function(){if(!this.peek(d.Charset))return null;var e=this.create(F);return this.consumeToken(),this.accept(d.String)?this.accept(d.SemiColon)?this.finish(e):this.finish(e,f.SemiColonExpected):this.finish(e,f.IdentifierExpected)},n.prototype._parseImport=function(){if(!this.peekKeyword("@import"))return null;var e=this.create(dt);return this.consumeToken(),!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral())?this.finish(e,f.URIOrStringExpected):(!this.peek(d.SemiColon)&&!this.peek(d.EOF)&&e.setMedialist(this._parseMediaQueryList()),this.finish(e))},n.prototype._parseNamespace=function(){if(!this.peekKeyword("@namespace"))return null;var e=this.create(Si);return this.consumeToken(),!e.addChild(this._parseURILiteral())&&(e.addChild(this._parseIdent()),!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral()))?this.finish(e,f.URIExpected,[d.SemiColon]):this.accept(d.SemiColon)?this.finish(e):this.finish(e,f.SemiColonExpected)},n.prototype._parseFontFace=function(){if(!this.peekKeyword("@font-face"))return null;var e=this.create(an);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseViewPort=function(){if(!this.peekKeyword("@-ms-viewport")&&!this.peekKeyword("@-o-viewport")&&!this.peekKeyword("@viewport"))return null;var e=this.create(bi);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseKeyframe=function(){if(!this.peekRegExp(d.AtKeyword,this.keyframeRegex))return null;var e=this.create(ln),t=this.create(F);return this.consumeToken(),e.setKeyword(this.finish(t)),t.matches("@-ms-keyframes")&&this.markError(t,f.UnknownKeyword),e.setIdentifier(this._parseKeyframeIdent())?this._parseBody(e,this._parseKeyframeSelector.bind(this)):this.finish(e,f.IdentifierExpected,[d.CurlyR])},n.prototype._parseKeyframeIdent=function(){return this._parseIdent([A.Keyframe])},n.prototype._parseKeyframeSelector=function(){var e=this.create(Qn);if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return null;for(;this.accept(d.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return this.finish(e,f.PercentageExpected);return this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._tryParseKeyframeSelector=function(){var e=this.create(Qn),t=this.mark();if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return null;for(;this.accept(d.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return this.restoreAtMark(t),null;return this.peek(d.CurlyL)?this._parseBody(e,this._parseRuleSetDeclaration.bind(this)):(this.restoreAtMark(t),null)},n.prototype._parseSupports=function(e){if(e===void 0&&(e=!1),!this.peekKeyword("@supports"))return null;var t=this.create(Et);return this.consumeToken(),t.addChild(this._parseSupportsCondition()),this._parseBody(t,this._parseSupportsDeclaration.bind(this,e))},n.prototype._parseSupportsDeclaration=function(e){return e===void 0&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},n.prototype._parseSupportsCondition=function(){var e=this.create(Ze);if(this.acceptIdent("not"))e.addChild(this._parseSupportsConditionInParens());else if(e.addChild(this._parseSupportsConditionInParens()),this.peekRegExp(d.Ident,/^(and|or)$/i))for(var t=this.token.text.toLowerCase();this.acceptIdent(t);)e.addChild(this._parseSupportsConditionInParens());return this.finish(e)},n.prototype._parseSupportsConditionInParens=function(){var e=this.create(Ze);if(this.accept(d.ParenthesisL))return this.prevToken&&(e.lParent=this.prevToken.offset),!e.addChild(this._tryToParseDeclaration([d.ParenthesisR]))&&!this._parseSupportsCondition()?this.finish(e,f.ConditionExpected):this.accept(d.ParenthesisR)?(this.prevToken&&(e.rParent=this.prevToken.offset),this.finish(e)):this.finish(e,f.RightParenthesisExpected,[d.ParenthesisR],[]);if(this.peek(d.Ident)){var t=this.mark();if(this.consumeToken(),!this.hasWhitespace()&&this.accept(d.ParenthesisL)){for(var r=1;this.token.type!==d.EOF&&r!==0;)this.token.type===d.ParenthesisL?r++:this.token.type===d.ParenthesisR&&r--,this.consumeToken();return this.finish(e)}else this.restoreAtMark(t)}return this.finish(e,f.LeftParenthesisExpected,[],[d.ParenthesisL])},n.prototype._parseMediaDeclaration=function(e){return e===void 0&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},n.prototype._parseMedia=function(e){if(e===void 0&&(e=!1),!this.peekKeyword("@media"))return null;var t=this.create(cn);return this.consumeToken(),t.addChild(this._parseMediaQueryList())?this._parseBody(t,this._parseMediaDeclaration.bind(this,e)):this.finish(t,f.MediaQueryExpected)},n.prototype._parseMediaQueryList=function(){var e=this.create(dn);if(!e.addChild(this._parseMediaQuery()))return this.finish(e,f.MediaQueryExpected);for(;this.accept(d.Comma);)if(!e.addChild(this._parseMediaQuery()))return this.finish(e,f.MediaQueryExpected);return this.finish(e)},n.prototype._parseMediaQuery=function(){var e=this.create(hn),t=this.mark();if(this.acceptIdent("not"),this.peek(d.ParenthesisL))this.restoreAtMark(t),e.addChild(this._parseMediaCondition());else{if(this.acceptIdent("only"),!e.addChild(this._parseIdent()))return null;this.acceptIdent("and")&&e.addChild(this._parseMediaCondition())}return this.finish(e)},n.prototype._parseRatio=function(){var e=this.mark(),t=this.create(Ri);return this._parseNumeric()?this.acceptDelim("/")?this._parseNumeric()?this.finish(t):this.finish(t,f.NumberExpected):(this.restoreAtMark(e),null):null},n.prototype._parseMediaCondition=function(){var e=this.create(Ci);this.acceptIdent("not");for(var t=!0;t;){if(!this.accept(d.ParenthesisL))return this.finish(e,f.LeftParenthesisExpected,[],[d.CurlyL]);if(this.peek(d.ParenthesisL)||this.peekIdent("not")?e.addChild(this._parseMediaCondition()):e.addChild(this._parseMediaFeature()),!this.accept(d.ParenthesisR))return this.finish(e,f.RightParenthesisExpected,[],[d.CurlyL]);t=this.acceptIdent("and")||this.acceptIdent("or")}return this.finish(e)},n.prototype._parseMediaFeature=function(){var e=this,t=[d.ParenthesisR],r=this.create(_i),i=function(){return e.acceptDelim("<")||e.acceptDelim(">")?(e.hasWhitespace()||e.acceptDelim("="),!0):!!e.acceptDelim("=")};if(r.addChild(this._parseMediaFeatureName())){if(this.accept(d.Colon)){if(!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}else if(i()){if(!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t);if(i()&&!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}}else if(r.addChild(this._parseMediaFeatureValue())){if(!i())return this.finish(r,f.OperatorExpected,[],t);if(!r.addChild(this._parseMediaFeatureName()))return this.finish(r,f.IdentifierExpected,[],t);if(i()&&!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}else return this.finish(r,f.IdentifierExpected,[],t);return this.finish(r)},n.prototype._parseMediaFeatureName=function(){return this._parseIdent()},n.prototype._parseMediaFeatureValue=function(){return this._parseRatio()||this._parseTermExpression()},n.prototype._parseMedium=function(){var e=this.create(F);return e.addChild(this._parseIdent())?this.finish(e):null},n.prototype._parsePageDeclaration=function(){return this._parsePageMarginBox()||this._parseRuleSetDeclaration()},n.prototype._parsePage=function(){if(!this.peekKeyword("@page"))return null;var e=this.create(Fi);if(this.consumeToken(),e.addChild(this._parsePageSelector())){for(;this.accept(d.Comma);)if(!e.addChild(this._parsePageSelector()))return this.finish(e,f.IdentifierExpected)}return this._parseBody(e,this._parsePageDeclaration.bind(this))},n.prototype._parsePageMarginBox=function(){if(!this.peek(d.AtKeyword))return null;var e=this.create(Ei);return this.acceptOneKeyword(go)||this.markError(e,f.UnknownAtRule,[],[d.CurlyL]),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parsePageSelector=function(){if(!this.peek(d.Ident)&&!this.peek(d.Colon))return null;var e=this.create(F);return e.addChild(this._parseIdent()),this.accept(d.Colon)&&!e.addChild(this._parseIdent())?this.finish(e,f.IdentifierExpected):this.finish(e)},n.prototype._parseDocument=function(){if(!this.peekKeyword("@-moz-document"))return null;var e=this.create(ki);return this.consumeToken(),this.resync([],[d.CurlyL]),this._parseBody(e,this._parseStylesheetStatement.bind(this))},n.prototype._parseUnknownAtRule=function(){if(!this.peek(d.AtKeyword))return null;var e=this.create(un);e.addChild(this._parseUnknownAtRuleName());var t=function(){return i===0&&o===0&&s===0},r=0,i=0,o=0,s=0;e:for(;;){switch(this.token.type){case d.SemiColon:if(t())break e;break;case d.EOF:return i>0?this.finish(e,f.RightCurlyExpected):s>0?this.finish(e,f.RightSquareBracketExpected):o>0?this.finish(e,f.RightParenthesisExpected):this.finish(e);case d.CurlyL:r++,i++;break;case d.CurlyR:if(i--,r>0&&i===0){if(this.consumeToken(),s>0)return this.finish(e,f.RightSquareBracketExpected);if(o>0)return this.finish(e,f.RightParenthesisExpected);break e}if(i<0){if(o===0&&s===0)break e;return this.finish(e,f.LeftCurlyExpected)}break;case d.ParenthesisL:o++;break;case d.ParenthesisR:if(o--,o<0)return this.finish(e,f.LeftParenthesisExpected);break;case d.BracketL:s++;break;case d.BracketR:if(s--,s<0)return this.finish(e,f.LeftSquareBracketExpected);break}this.consumeToken()}return e},n.prototype._parseUnknownAtRuleName=function(){var e=this.create(F);return this.accept(d.AtKeyword)?this.finish(e):e},n.prototype._parseOperator=function(){if(this.peekDelim("/")||this.peekDelim("*")||this.peekDelim("+")||this.peekDelim("-")||this.peek(d.Dashmatch)||this.peek(d.Includes)||this.peek(d.SubstringOperator)||this.peek(d.PrefixOperator)||this.peek(d.SuffixOperator)||this.peekDelim("=")){var e=this.createNode(u.Operator);return this.consumeToken(),this.finish(e)}else return null},n.prototype._parseUnaryOperator=function(){if(!this.peekDelim("+")&&!this.peekDelim("-"))return null;var e=this.create(F);return this.consumeToken(),this.finish(e)},n.prototype._parseCombinator=function(){if(this.peekDelim(">")){var e=this.create(F);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptDelim(">")){if(!this.hasWhitespace()&&this.acceptDelim(">"))return e.type=u.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return e.type=u.SelectorCombinatorParent,this.finish(e)}else if(this.peekDelim("+")){var e=this.create(F);return this.consumeToken(),e.type=u.SelectorCombinatorSibling,this.finish(e)}else if(this.peekDelim("~")){var e=this.create(F);return this.consumeToken(),e.type=u.SelectorCombinatorAllSiblings,this.finish(e)}else if(this.peekDelim("/")){var e=this.create(F);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptIdent("deep")&&!this.hasWhitespace()&&this.acceptDelim("/"))return e.type=u.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return null},n.prototype._parseSimpleSelector=function(){var e=this.create(De),t=0;for(e.addChild(this._parseElementName())&&t++;(t===0||!this.hasWhitespace())&&e.addChild(this._parseSimpleSelectorBody());)t++;return t>0?this.finish(e):null},n.prototype._parseSimpleSelectorBody=function(){return this._parsePseudo()||this._parseHash()||this._parseClass()||this._parseAttrib()},n.prototype._parseSelectorIdent=function(){return this._parseIdent()},n.prototype._parseHash=function(){if(!this.peek(d.Hash)&&!this.peekDelim("#"))return null;var e=this.createNode(u.IdentifierSelector);if(this.acceptDelim("#")){if(this.hasWhitespace()||!e.addChild(this._parseSelectorIdent()))return this.finish(e,f.IdentifierExpected)}else this.consumeToken();return this.finish(e)},n.prototype._parseClass=function(){if(!this.peekDelim("."))return null;var e=this.createNode(u.ClassSelector);return this.consumeToken(),this.hasWhitespace()||!e.addChild(this._parseSelectorIdent())?this.finish(e,f.IdentifierExpected):this.finish(e)},n.prototype._parseElementName=function(){var e=this.mark(),t=this.createNode(u.ElementNameSelector);return t.addChild(this._parseNamespacePrefix()),!t.addChild(this._parseSelectorIdent())&&!this.acceptDelim("*")?(this.restoreAtMark(e),null):this.finish(t)},n.prototype._parseNamespacePrefix=function(){var e=this.mark(),t=this.createNode(u.NamespacePrefix);return!t.addChild(this._parseIdent())&&this.acceptDelim("*"),this.acceptDelim("|")?this.finish(t):(this.restoreAtMark(e),null)},n.prototype._parseAttrib=function(){if(!this.peek(d.BracketL))return null;var e=this.create(zi);return this.consumeToken(),e.setNamespacePrefix(this._parseNamespacePrefix()),e.setIdentifier(this._parseIdent())?(e.setOperator(this._parseOperator())&&(e.setValue(this._parseBinaryExpr()),this.acceptIdent("i"),this.acceptIdent("s")),this.accept(d.BracketR)?this.finish(e):this.finish(e,f.RightSquareBracketExpected)):this.finish(e,f.IdentifierExpected)},n.prototype._parsePseudo=function(){var e=this,t=this._tryParsePseudoIdentifier();if(t){if(!this.hasWhitespace()&&this.accept(d.ParenthesisL)){var r=function(){var i=e.create(F);if(!i.addChild(e._parseSelector(!1)))return null;for(;e.accept(d.Comma)&&i.addChild(e._parseSelector(!1)););return e.peek(d.ParenthesisR)?e.finish(i):null};if(t.addChild(this.try(r)||this._parseBinaryExpr()),!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return this.finish(t)}return null},n.prototype._tryParsePseudoIdentifier=function(){if(!this.peek(d.Colon))return null;var e=this.mark(),t=this.createNode(u.PseudoSelector);return this.consumeToken(),this.hasWhitespace()?(this.restoreAtMark(e),null):(this.accept(d.Colon),this.hasWhitespace()||!t.addChild(this._parseIdent())?this.finish(t,f.IdentifierExpected):this.finish(t))},n.prototype._tryParsePrio=function(){var e=this.mark(),t=this._parsePrio();return t||(this.restoreAtMark(e),null)},n.prototype._parsePrio=function(){if(!this.peek(d.Exclamation))return null;var e=this.createNode(u.Prio);return this.accept(d.Exclamation)&&this.acceptIdent("important")?this.finish(e):null},n.prototype._parseExpr=function(e){e===void 0&&(e=!1);var t=this.create(pn);if(!t.addChild(this._parseBinaryExpr()))return null;for(;;){if(this.peek(d.Comma)){if(e)return this.finish(t);this.consumeToken()}else if(!this.hasWhitespace())break;if(!t.addChild(this._parseBinaryExpr()))break}return this.finish(t)},n.prototype._parseUnicodeRange=function(){if(!this.peekIdent("u"))return null;var e=this.create(li);return this.acceptUnicodeRange()?this.finish(e):null},n.prototype._parseNamedLine=function(){if(!this.peek(d.BracketL))return null;var e=this.createNode(u.GridLine);for(this.consumeToken();e.addChild(this._parseIdent()););return this.accept(d.BracketR)?this.finish(e):this.finish(e,f.RightSquareBracketExpected)},n.prototype._parseBinaryExpr=function(e,t){var r=this.create(ht);if(!r.setLeft(e||this._parseTerm()))return null;if(!r.setOperator(t||this._parseOperator()))return this.finish(r);if(!r.setRight(this._parseTerm()))return this.finish(r,f.TermExpected);r=this.finish(r);var i=this._parseOperator();return i&&(r=this._parseBinaryExpr(r,i)),this.finish(r)},n.prototype._parseTerm=function(){var e=this.create(Di);return e.setOperator(this._parseUnaryOperator()),e.setExpression(this._parseTermExpression())?this.finish(e):null},n.prototype._parseTermExpression=function(){return this._parseURILiteral()||this._parseUnicodeRange()||this._parseFunction()||this._parseIdent()||this._parseStringLiteral()||this._parseNumeric()||this._parseHexColor()||this._parseOperation()||this._parseNamedLine()},n.prototype._parseOperation=function(){if(!this.peek(d.ParenthesisL))return null;var e=this.create(F);return this.consumeToken(),e.addChild(this._parseExpr()),this.accept(d.ParenthesisR)?this.finish(e):this.finish(e,f.RightParenthesisExpected)},n.prototype._parseNumeric=function(){if(this.peek(d.Num)||this.peek(d.Percentage)||this.peek(d.Resolution)||this.peek(d.Length)||this.peek(d.EMS)||this.peek(d.EXS)||this.peek(d.Angle)||this.peek(d.Time)||this.peek(d.Dimension)||this.peek(d.Freq)){var e=this.create(zt);return this.consumeToken(),this.finish(e)}return null},n.prototype._parseStringLiteral=function(){if(!this.peek(d.String)&&!this.peek(d.BadString))return null;var e=this.createNode(u.StringLiteral);return this.consumeToken(),this.finish(e)},n.prototype._parseURILiteral=function(){if(!this.peekRegExp(d.Ident,/^url(-prefix)?$/i))return null;var e=this.mark(),t=this.createNode(u.URILiteral);return this.accept(d.Ident),this.hasWhitespace()||!this.peek(d.ParenthesisL)?(this.restoreAtMark(e),null):(this.scanner.inURL=!0,this.consumeToken(),t.addChild(this._parseURLArgument()),this.scanner.inURL=!1,this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected))},n.prototype._parseURLArgument=function(){var e=this.create(F);return!this.accept(d.String)&&!this.accept(d.BadString)&&!this.acceptUnquotedString()?null:this.finish(e)},n.prototype._parseIdent=function(e){if(!this.peek(d.Ident))return null;var t=this.create(te);return e&&(t.referenceTypes=e),t.isCustomProperty=this.peekRegExp(d.Ident,/^--/),this.consumeToken(),this.finish(t)},n.prototype._parseFunction=function(){var e=this.mark(),t=this.create(Pe);if(!t.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(d.ParenthesisL))return this.restoreAtMark(e),null;if(t.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)t.getArguments().addChild(this._parseFunctionArgument())||this.markError(t,f.ExpressionExpected);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},n.prototype._parseFunctionIdentifier=function(){if(!this.peek(d.Ident))return null;var e=this.create(te);if(e.referenceTypes=[A.Function],this.acceptIdent("progid")){if(this.accept(d.Colon))for(;this.accept(d.Ident)&&this.acceptDelim("."););return this.finish(e)}return this.consumeToken(),this.finish(e)},n.prototype._parseFunctionArgument=function(){var e=this.create(we);return e.setValue(this._parseExpr(!0))?this.finish(e):null},n.prototype._parseHexColor=function(){if(this.peekRegExp(d.Hash,/^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/g)){var e=this.create(Dt);return this.consumeToken(),this.finish(e)}else return null},n}();function yo(n,e){var t=0,r=n.length;if(r===0)return 0;for(;te+t||this.offset===e&&this.length===t?this.findInScope(e,t):null},n.prototype.findInScope=function(e,t){t===void 0&&(t=0);var r=e+t,i=yo(this.children,function(s){return s.offset>r});if(i===0)return this;var o=this.children[i-1];return o.offset<=e&&o.offset+o.length>=e+t?o.findInScope(e,t):this},n.prototype.addSymbol=function(e){this.symbols.push(e)},n.prototype.getSymbol=function(e,t){for(var r=0;r{"use strict";var n={470:r=>{function i(a){if(typeof a!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(a))}function o(a,l){for(var c,h="",p=0,m=-1,g=0,w=0;w<=a.length;++w){if(w2){var x=h.lastIndexOf("/");if(x!==h.length-1){x===-1?(h="",p=0):p=(h=h.slice(0,x)).length-1-h.lastIndexOf("/"),m=w,g=0;continue}}else if(h.length===2||h.length===1){h="",p=0,m=w,g=0;continue}}l&&(h.length>0?h+="/..":h="..",p=2)}else h.length>0?h+="/"+a.slice(m+1,w):h=a.slice(m+1,w),p=w-m-1;m=w,g=0}else c===46&&g!==-1?++g:g=-1}return h}var s={resolve:function(){for(var a,l="",c=!1,h=arguments.length-1;h>=-1&&!c;h--){var p;h>=0?p=arguments[h]:(a===void 0&&(a=process.cwd()),p=a),i(p),p.length!==0&&(l=p+"/"+l,c=p.charCodeAt(0)===47)}return l=o(l,!c),c?l.length>0?"/"+l:"/":l.length>0?l:"."},normalize:function(a){if(i(a),a.length===0)return".";var l=a.charCodeAt(0)===47,c=a.charCodeAt(a.length-1)===47;return(a=o(a,!l)).length!==0||l||(a="."),a.length>0&&c&&(a+="/"),l?"/"+a:a},isAbsolute:function(a){return i(a),a.length>0&&a.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var a,l=0;l0&&(a===void 0?a=c:a+="/"+c)}return a===void 0?".":s.normalize(a)},relative:function(a,l){if(i(a),i(l),a===l||(a=s.resolve(a))===(l=s.resolve(l)))return"";for(var c=1;cw){if(l.charCodeAt(m+y)===47)return l.slice(m+y+1);if(y===0)return l.slice(m+y)}else p>w&&(a.charCodeAt(c+y)===47?x=y:y===0&&(x=0));break}var D=a.charCodeAt(c+y);if(D!==l.charCodeAt(m+y))break;D===47&&(x=y)}var M="";for(y=c+x+1;y<=h;++y)y!==h&&a.charCodeAt(y)!==47||(M.length===0?M+="..":M+="/..");return M.length>0?M+l.slice(m+x):(m+=x,l.charCodeAt(m)===47&&++m,l.slice(m))},_makeLong:function(a){return a},dirname:function(a){if(i(a),a.length===0)return".";for(var l=a.charCodeAt(0),c=l===47,h=-1,p=!0,m=a.length-1;m>=1;--m)if((l=a.charCodeAt(m))===47){if(!p){h=m;break}}else p=!1;return h===-1?c?"/":".":c&&h===1?"//":a.slice(0,h)},basename:function(a,l){if(l!==void 0&&typeof l!="string")throw new TypeError('"ext" argument must be a string');i(a);var c,h=0,p=-1,m=!0;if(l!==void 0&&l.length>0&&l.length<=a.length){if(l.length===a.length&&l===a)return"";var g=l.length-1,w=-1;for(c=a.length-1;c>=0;--c){var x=a.charCodeAt(c);if(x===47){if(!m){h=c+1;break}}else w===-1&&(m=!1,w=c+1),g>=0&&(x===l.charCodeAt(g)?--g==-1&&(p=c):(g=-1,p=w))}return h===p?p=w:p===-1&&(p=a.length),a.slice(h,p)}for(c=a.length-1;c>=0;--c)if(a.charCodeAt(c)===47){if(!m){h=c+1;break}}else p===-1&&(m=!1,p=c+1);return p===-1?"":a.slice(h,p)},extname:function(a){i(a);for(var l=-1,c=0,h=-1,p=!0,m=0,g=a.length-1;g>=0;--g){var w=a.charCodeAt(g);if(w!==47)h===-1&&(p=!1,h=g+1),w===46?l===-1?l=g:m!==1&&(m=1):l!==-1&&(m=-1);else if(!p){c=g+1;break}}return l===-1||h===-1||m===0||m===1&&l===h-1&&l===c+1?"":a.slice(l,h)},format:function(a){if(a===null||typeof a!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof a);return function(l,c){var h=c.dir||c.root,p=c.base||(c.name||"")+(c.ext||"");return h?h===c.root?h+p:h+"/"+p:p}(0,a)},parse:function(a){i(a);var l={root:"",dir:"",base:"",ext:"",name:""};if(a.length===0)return l;var c,h=a.charCodeAt(0),p=h===47;p?(l.root="/",c=1):c=0;for(var m=-1,g=0,w=-1,x=!0,y=a.length-1,D=0;y>=c;--y)if((h=a.charCodeAt(y))!==47)w===-1&&(x=!1,w=y+1),h===46?m===-1?m=y:D!==1&&(D=1):m!==-1&&(D=-1);else if(!x){g=y+1;break}return m===-1||w===-1||D===0||D===1&&m===w-1&&m===g+1?w!==-1&&(l.base=l.name=g===0&&p?a.slice(1,w):a.slice(g,w)):(g===0&&p?(l.name=a.slice(1,m),l.base=a.slice(1,w)):(l.name=a.slice(g,m),l.base=a.slice(g,w)),l.ext=a.slice(m,w)),g>0?l.dir=a.slice(0,g-1):p&&(l.dir="/"),l},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,r.exports=s},447:(r,i,o)=>{var s;if(o.r(i),o.d(i,{URI:()=>M,Utils:()=>pe}),typeof process=="object")s=process.platform==="win32";else if(typeof navigator=="object"){var a=navigator.userAgent;s=a.indexOf("Windows")>=0}var l,c,h=(l=function(C,b){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(k,_){k.__proto__=_}||function(k,_){for(var N in _)Object.prototype.hasOwnProperty.call(_,N)&&(k[N]=_[N])})(C,b)},function(C,b){if(typeof b!="function"&&b!==null)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");function k(){this.constructor=C}l(C,b),C.prototype=b===null?Object.create(b):(k.prototype=b.prototype,new k)}),p=/^\w[\w\d+.-]*$/,m=/^\//,g=/^\/\//;function w(C,b){if(!C.scheme&&b)throw new Error('[UriError]: Scheme is missing: {scheme: "", authority: "'.concat(C.authority,'", path: "').concat(C.path,'", query: "').concat(C.query,'", fragment: "').concat(C.fragment,'"}'));if(C.scheme&&!p.test(C.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(C.path){if(C.authority){if(!m.test(C.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(g.test(C.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}var x="",y="/",D=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/,M=function(){function C(b,k,_,N,O,B){B===void 0&&(B=!1),typeof b=="object"?(this.scheme=b.scheme||x,this.authority=b.authority||x,this.path=b.path||x,this.query=b.query||x,this.fragment=b.fragment||x):(this.scheme=function(Ce,se){return Ce||se?Ce:"file"}(b,B),this.authority=k||x,this.path=function(Ce,se){switch(Ce){case"https":case"http":case"file":se?se[0]!==y&&(se=y+se):se=y}return se}(this.scheme,_||x),this.query=N||x,this.fragment=O||x,w(this,B))}return C.isUri=function(b){return b instanceof C||!!b&&typeof b.authority=="string"&&typeof b.fragment=="string"&&typeof b.path=="string"&&typeof b.query=="string"&&typeof b.scheme=="string"&&typeof b.fsPath=="string"&&typeof b.with=="function"&&typeof b.toString=="function"},Object.defineProperty(C.prototype,"fsPath",{get:function(){return oe(this,!1)},enumerable:!1,configurable:!0}),C.prototype.with=function(b){if(!b)return this;var k=b.scheme,_=b.authority,N=b.path,O=b.query,B=b.fragment;return k===void 0?k=this.scheme:k===null&&(k=x),_===void 0?_=this.authority:_===null&&(_=x),N===void 0?N=this.path:N===null&&(N=x),O===void 0?O=this.query:O===null&&(O=x),B===void 0?B=this.fragment:B===null&&(B=x),k===this.scheme&&_===this.authority&&N===this.path&&O===this.query&&B===this.fragment?this:new P(k,_,N,O,B)},C.parse=function(b,k){k===void 0&&(k=!1);var _=D.exec(b);return _?new P(_[2]||x,ke(_[4]||x),ke(_[5]||x),ke(_[7]||x),ke(_[9]||x),k):new P(x,x,x,x,x)},C.file=function(b){var k=x;if(s&&(b=b.replace(/\\/g,y)),b[0]===y&&b[1]===y){var _=b.indexOf(y,2);_===-1?(k=b.substring(2),b=y):(k=b.substring(2,_),b=b.substring(_)||y)}return new P("file",k,b,x,x)},C.from=function(b){var k=new P(b.scheme,b.authority,b.path,b.query,b.fragment);return w(k,!0),k},C.prototype.toString=function(b){return b===void 0&&(b=!1),me(this,b)},C.prototype.toJSON=function(){return this},C.revive=function(b){if(b){if(b instanceof C)return b;var k=new P(b);return k._formatted=b.external,k._fsPath=b._sep===z?b.fsPath:null,k}return b},C}(),z=s?1:void 0,P=function(C){function b(){var k=C!==null&&C.apply(this,arguments)||this;return k._formatted=null,k._fsPath=null,k}return h(b,C),Object.defineProperty(b.prototype,"fsPath",{get:function(){return this._fsPath||(this._fsPath=oe(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),b.prototype.toString=function(k){return k===void 0&&(k=!1),k?me(this,!0):(this._formatted||(this._formatted=me(this,!1)),this._formatted)},b.prototype.toJSON=function(){var k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=z),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k},b}(M),L=((c={})[58]="%3A",c[47]="%2F",c[63]="%3F",c[35]="%23",c[91]="%5B",c[93]="%5D",c[64]="%40",c[33]="%21",c[36]="%24",c[38]="%26",c[39]="%27",c[40]="%28",c[41]="%29",c[42]="%2A",c[43]="%2B",c[44]="%2C",c[59]="%3B",c[61]="%3D",c[32]="%20",c);function $(C,b){for(var k=void 0,_=-1,N=0;N=97&&O<=122||O>=65&&O<=90||O>=48&&O<=57||O===45||O===46||O===95||O===126||b&&O===47)_!==-1&&(k+=encodeURIComponent(C.substring(_,N)),_=-1),k!==void 0&&(k+=C.charAt(N));else{k===void 0&&(k=C.substr(0,N));var B=L[O];B!==void 0?(_!==-1&&(k+=encodeURIComponent(C.substring(_,N)),_=-1),k+=B):_===-1&&(_=N)}}return _!==-1&&(k+=encodeURIComponent(C.substring(_))),k!==void 0?k:C}function ue(C){for(var b=void 0,k=0;k1&&C.scheme==="file"?"//".concat(C.authority).concat(C.path):C.path.charCodeAt(0)===47&&(C.path.charCodeAt(1)>=65&&C.path.charCodeAt(1)<=90||C.path.charCodeAt(1)>=97&&C.path.charCodeAt(1)<=122)&&C.path.charCodeAt(2)===58?b?C.path.substr(1):C.path[1].toLowerCase()+C.path.substr(2):C.path,s&&(k=k.replace(/\//g,"\\")),k}function me(C,b){var k=b?ue:$,_="",N=C.scheme,O=C.authority,B=C.path,Ce=C.query,se=C.fragment;if(N&&(_+=N,_+=":"),(O||N==="file")&&(_+=y,_+=y),O){var ge=O.indexOf("@");if(ge!==-1){var Xe=O.substr(0,ge);O=O.substr(ge+1),(ge=Xe.indexOf(":"))===-1?_+=k(Xe,!1):(_+=k(Xe.substr(0,ge),!1),_+=":",_+=k(Xe.substr(ge+1),!1)),_+="@"}(ge=(O=O.toLowerCase()).indexOf(":"))===-1?_+=k(O,!1):(_+=k(O.substr(0,ge),!1),_+=O.substr(ge))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58)(Me=B.charCodeAt(1))>=65&&Me<=90&&(B="/".concat(String.fromCharCode(Me+32),":").concat(B.substr(3)));else if(B.length>=2&&B.charCodeAt(1)===58){var Me;(Me=B.charCodeAt(0))>=65&&Me<=90&&(B="".concat(String.fromCharCode(Me+32),":").concat(B.substr(2)))}_+=k(B,!0)}return Ce&&(_+="?",_+=k(Ce,!1)),se&&(_+="#",_+=b?se:$(se,!1)),_}function ve(C){try{return decodeURIComponent(C)}catch{return C.length>3?C.substr(0,3)+ve(C.substr(3)):C}}var ye=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function ke(C){return C.match(ye)?C.replace(ye,function(b){return ve(b)}):C}var pe,G=o(470),Ie=function(C,b,k){if(k||arguments.length===2)for(var _,N=0,O=b.length;N{for(var o in i)t.o(i,o)&&!t.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:i[o]})},t.o=(r,i)=>Object.prototype.hasOwnProperty.call(r,i),t.r=r=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t(447)})();var{URI:qt,Utils:En}=xo;var ea=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;r0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]=0;s--){var a=this.nodePath[s];if(a instanceof ct)this.getCompletionsForDeclarationProperty(a.getParent(),o);else if(a instanceof pn)a.parent instanceof Rt?this.getVariableProposals(null,o):this.getCompletionsForExpression(a,o);else if(a instanceof De){var l=a.findAParent(u.ExtendsReference,u.Ruleset);if(l)if(l.type===u.ExtendsReference)this.getCompletionsForExtendsReference(l,a,o);else{var c=l;this.getCompletionsForSelector(c,c&&c.isNested(),o)}}else if(a instanceof we)this.getCompletionsForFunctionArgument(a,a.getParent(),o);else if(a instanceof Ft)this.getCompletionsForDeclarations(a,o);else if(a instanceof $e)this.getCompletionsForVariableDeclaration(a,o);else if(a instanceof Te)this.getCompletionsForRuleSet(a,o);else if(a instanceof Rt)this.getCompletionsForInterpolation(a,o);else if(a instanceof Qe)this.getCompletionsForFunctionDeclaration(a,o);else if(a instanceof et)this.getCompletionsForMixinReference(a,o);else if(a instanceof Pe)this.getCompletionsForFunctionArgument(null,a,o);else if(a instanceof Et)this.getCompletionsForSupports(a,o);else if(a instanceof Ze)this.getCompletionsForSupportsCondition(a,o);else if(a instanceof qe)this.getCompletionsForExtendsReference(a,null,o);else if(a.type===u.URILiteral)this.getCompletionForUriLiteralValue(a,o);else if(a.parent===null)this.getCompletionForTopLevel(o);else if(a.type===u.StringLiteral&&this.isImportPathParent(a.parent.type))this.getCompletionForImportPath(a,o);else continue;if(o.items.length>0||this.offset>a.offset)return this.finalize(o)}return this.getCompletionsForStylesheet(o),o.items.length===0&&this.variablePrefix&&this.currentWord.indexOf(this.variablePrefix)===0&&this.getVariableProposals(null,o),this.finalize(o)}finally{this.position=null,this.currentWord=null,this.textDocument=null,this.styleSheet=null,this.symbolContext=null,this.defaultReplaceRange=null,this.nodePath=null}},n.prototype.isImportPathParent=function(e){return e===u.Import},n.prototype.finalize=function(e){return e},n.prototype.findInNodePath=function(){for(var e=[],t=0;t=0;r--){var i=this.nodePath[r];if(e.indexOf(i.type)!==-1)return i}return null},n.prototype.getCompletionsForDeclarationProperty=function(e,t){return this.getPropertyProposals(e,t)},n.prototype.getPropertyProposals=function(e,t){var r=this,i=this.isTriggerPropertyValueCompletionEnabled,o=this.isCompletePropertyWithSemicolonEnabled,s=this.cssDataManager.getProperties();return s.forEach(function(a){var l,c,h=!1;e?(l=r.getCompletionRange(e.getProperty()),c=a.name,he(e.colonPosition)||(c+=": ",h=!0)):(l=r.getCompletionRange(null),c=a.name+": ",h=!0),!e&&o&&(c+="$0;"),e&&!e.semicolonPosition&&o&&r.offset>=r.textDocument.offsetAt(l.end)&&(c+="$0;");var p={label:a.name,documentation:ze(a,r.doesSupportMarkdown()),tags:Gt(a)?[Ne.Deprecated]:[],textEdit:T.replace(l,c),insertTextFormat:re.Snippet,kind:R.Property};a.restrictions||(h=!1),i&&h&&(p.command=_o);var m=typeof a.relevance=="number"?Math.min(Math.max(a.relevance,0),99):50,g=(255-m).toString(16),w=q(a.name,"-")?Re.VendorPrefixed:Re.Normal;p.sortText=w+"_"+g,t.items.push(p)}),this.completionParticipants.forEach(function(a){a.onCssProperty&&a.onCssProperty({propertyName:r.currentWord,range:r.defaultReplaceRange})}),t},Object.defineProperty(n.prototype,"isTriggerPropertyValueCompletionEnabled",{get:function(){var e,t;return(t=(e=this.documentSettings)===null||e===void 0?void 0:e.triggerPropertyValueCompletion)!==null&&t!==void 0?t:!0},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isCompletePropertyWithSemicolonEnabled",{get:function(){var e,t;return(t=(e=this.documentSettings)===null||e===void 0?void 0:e.completePropertyWithSemicolon)!==null&&t!==void 0?t:!0},enumerable:!1,configurable:!0}),n.prototype.getCompletionsForDeclarationValue=function(e,t){for(var r=this,i=e.getFullPropertyName(),o=this.cssDataManager.getProperty(i),s=e.getValue()||null;s&&s.hasChildren();)s=s.findChildAtOffset(this.offset,!1);if(this.completionParticipants.forEach(function(w){w.onCssPropertyValue&&w.onCssPropertyValue({propertyName:i,propertyValue:r.currentWord,range:r.getCompletionRange(s)})}),o){if(o.restrictions)for(var a=0,l=o.restrictions;a=e.offset+2&&this.getVariableProposals(null,t),t},n.prototype.getVariableProposals=function(e,t){for(var r=this.getSymbolContext().findSymbolsAtOffset(this.offset,A.Variable),i=0,o=r;i0){var o=this.currentWord.match(/^-?\d[\.\d+]*/);o&&(i=o[0],r.isIncomplete=i.length===this.currentWord.length)}else this.currentWord.length===0&&(r.isIncomplete=!0);if(t&&t.parent&&t.parent.type===u.Term&&(t=t.getParent()),e.restrictions)for(var s=0,a=e.restrictions;s=r.end;if(i)return this.getCompletionForTopLevel(t);var o=!r||this.offset<=r.offset;return o?this.getCompletionsForSelector(e,e.isNested(),t):this.getCompletionsForDeclarations(e.getDeclarations(),t)},n.prototype.getCompletionsForSelector=function(e,t,r){var i=this,o=this.findInNodePath(u.PseudoSelector,u.IdentifierSelector,u.ClassSelector,u.ElementNameSelector);!o&&this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord,this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord),this.defaultReplaceRange=W.create(Q.create(this.position.line,this.position.character-this.currentWord.length),this.position));var s=this.cssDataManager.getPseudoClasses();s.forEach(function(y){var D=bt(y.name),M={label:y.name,textEdit:T.replace(i.getCompletionRange(o),D),documentation:ze(y,i.doesSupportMarkdown()),tags:Gt(y)?[Ne.Deprecated]:[],kind:R.Function,insertTextFormat:y.name!==D?We:void 0};q(y.name,":-")&&(M.sortText=Re.VendorPrefixed),r.items.push(M)});var a=this.cssDataManager.getPseudoElements();if(a.forEach(function(y){var D=bt(y.name),M={label:y.name,textEdit:T.replace(i.getCompletionRange(o),D),documentation:ze(y,i.doesSupportMarkdown()),tags:Gt(y)?[Ne.Deprecated]:[],kind:R.Function,insertTextFormat:y.name!==D?We:void 0};q(y.name,"::-")&&(M.sortText=Re.VendorPrefixed),r.items.push(M)}),!t){for(var l=0,c=mo;l0){var D=w.substr(y.offset,y.length);return D.charAt(0)==="."&&!g[D]&&(g[D]=!0,r.items.push({label:D,textEdit:T.replace(i.getCompletionRange(o),D),kind:R.Keyword})),!1}return!0}),e&&e.isNested()){var x=e.getSelectors().findFirstChildBeforeOffset(this.offset);x&&e.getSelectors().getChildren().indexOf(x)===0&&this.getPropertyProposals(null,r)}return r},n.prototype.getCompletionsForDeclarations=function(e,t){if(!e||this.offset===e.offset)return t;var r=e.findFirstChildBeforeOffset(this.offset);if(!r)return this.getCompletionsForDeclarationProperty(null,t);if(r instanceof sn){var i=r;if(!he(i.colonPosition)||this.offset<=i.colonPosition)return this.getCompletionsForDeclarationProperty(i,t);if(he(i.semicolonPosition)&&i.semicolonPositione.colonPosition&&this.getVariableProposals(e.getValue(),t),t},n.prototype.getCompletionsForExpression=function(e,t){var r=e.getParent();if(r instanceof we)return this.getCompletionsForFunctionArgument(r,r.getParent(),t),t;var i=e.findParent(u.Declaration);if(!i)return this.getTermProposals(void 0,null,t),t;var o=e.findChildAtOffset(this.offset,!0);return o?o instanceof zt||o instanceof te?this.getCompletionsForDeclarationValue(i,t):t:this.getCompletionsForDeclarationValue(i,t)},n.prototype.getCompletionsForFunctionArgument=function(e,t,r){var i=t.getIdentifier();return i&&i.matches("var")&&(!t.getArguments().hasChildren()||t.getArguments().getChild(0)===e)&&this.getVariableProposalsForCSSVarFunction(r),r},n.prototype.getCompletionsForFunctionDeclaration=function(e,t){var r=e.getDeclarations();return r&&this.offset>r.offset&&this.offsete.lParent&&(!he(e.rParent)||this.offset<=e.rParent)?this.getCompletionsForDeclarationProperty(null,t):t},n.prototype.getCompletionsForSupports=function(e,t){var r=e.getDeclarations(),i=!r||this.offset<=r.offset;if(i){var o=e.findFirstChildBeforeOffset(this.offset);return o instanceof Ze?this.getCompletionsForSupportsCondition(o,t):t}return this.getCompletionForTopLevel(t)},n.prototype.getCompletionsForExtendsReference=function(e,t,r){return r},n.prototype.getCompletionForUriLiteralValue=function(e,t){var r,i,o;if(e.hasChildren()){var a=e.getChild(0);r=a.getText(),i=this.position,o=this.getCompletionRange(a)}else{r="",i=this.position;var s=this.textDocument.positionAt(e.offset+4);o=W.create(s,s)}return this.completionParticipants.forEach(function(l){l.onCssURILiteralValue&&l.onCssURILiteralValue({uriValue:r,position:i,range:o})}),t},n.prototype.getCompletionForImportPath=function(e,t){var r=this;return this.completionParticipants.forEach(function(i){i.onCssImportPath&&i.onCssImportPath({pathValue:e.getText(),position:r.position,range:r.getCompletionRange(e)})}),t},n.prototype.hasCharacterAtPosition=function(e,t){var r=this.textDocument.getText();return e>=0&&e=0&&` \r":{[()]},*>+`.indexOf(r.charAt(t))===-1;)t--;return r.substring(t+1,e)}function Fo(n){return n.toLowerCase()in jt||/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)}var zo=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),pa=H(),Rr=function(){function n(){this.parent=null,this.children=null,this.attributes=null}return n.prototype.findAttribute=function(e){if(this.attributes)for(var t=0,r=this.attributes;t"),this.writeLine(t,i.join(""))},n}(),Le;(function(n){function e(r,i){return i+t(r)+i}n.ensure=e;function t(r){var i=r.match(/^['"](.*)["']$/);return i?i[1]:r}n.remove=t})(Le||(Le={}));var Do=function(){function n(){this.id=0,this.attr=0,this.tag=0}return n}();function Ro(n,e){for(var t=new Rr,r=0,i=n.getChildren();r1){var c=e.cloneWithParent();t.addChild(c.findRoot()),t=c}t.append(s[l])}}break;case u.SelectorPlaceholder:if(o.matches("@at-root"))return t;case u.ElementNameSelector:var h=o.getText();t.addAttr("name",h==="*"?"element":be(h));break;case u.ClassSelector:t.addAttr("class",be(o.getText().substring(1)));break;case u.IdentifierSelector:t.addAttr("id",be(o.getText().substring(1)));break;case u.MixinDeclaration:t.addAttr("class",o.getName());break;case u.PseudoSelector:t.addAttr(be(o.getText()),"");break;case u.AttributeSelector:var p=o,m=p.getIdentifier();if(m){var g=p.getValue(),w=p.getOperator(),x=void 0;if(g&&w)switch(be(w.getText())){case"|=":x="".concat(Le.remove(be(g.getText())),"-\u2026");break;case"^=":x="".concat(Le.remove(be(g.getText())),"\u2026");break;case"$=":x="\u2026".concat(Le.remove(be(g.getText())));break;case"~=":x=" \u2026 ".concat(Le.remove(be(g.getText()))," \u2026 ");break;case"*=":x="\u2026".concat(Le.remove(be(g.getText())),"\u2026");break;default:x=Le.remove(be(g.getText()));break}t.addAttr(be(m.getText()),x)}break}}return t}function be(n){var e=new Fe;e.setSource(n);var t=e.scanUnquotedString();return t?t.text:n}var Io=function(){function n(e){this.cssDataManager=e}return n.prototype.selectorToMarkedString=function(e){var t=fa(e);if(t){var r=new Eo('"').print(t);return r.push(this.selectorToSpecificityMarkedString(e)),r}else return[]},n.prototype.simpleSelectorToMarkedString=function(e){var t=Ro(e),r=new Eo('"').print(t);return r.push(this.selectorToSpecificityMarkedString(e)),r},n.prototype.isPseudoElementIdentifier=function(e){var t=e.match(/^::?([\w-]+)/);return t?!!this.cssDataManager.getPseudoElement("::"+t[1]):!1},n.prototype.selectorToSpecificityMarkedString=function(e){var t=this,r=function(o){var s=new Do;e:for(var a=0,l=o.getChildren();a0){for(var p=new Do,m=0,g=c.getChildren();mp.id){p=z;continue}else if(z.idp.attr){p=z;continue}else if(z.attrp.tag){p=z;continue}}}s.id+=p.id,s.attr+=p.attr,s.tag+=p.tag;continue e}s.attr++;break}if(c.getChildren().length>0){var z=r(c);s.id+=z.id,s.attr+=z.attr,s.tag+=z.tag}}return s},i=r(e);return pa("specificity","[Selector Specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity): ({0}, {1}, {2})",i.id,i.attr,i.tag)},n}();var ua=function(){function n(e){this.prev=null,this.element=e}return n.prototype.processSelector=function(e){var t=null;if(!(this.element instanceof yt)&&e.getChildren().some(function(h){return h.hasChildren()&&h.getChild(0).type===u.SelectorCombinator})){var r=this.element.findRoot();r.parent instanceof yt&&(t=this.element,this.element=r.parent,this.element.removeChild(r),this.prev=null)}for(var i=0,o=e.getChildren();i=0;s--){var a=t[s].getSelectors().getChild(0);a&&o.processSelector(a)}return o.processSelector(n),e}var In=function(){function n(e,t){this.clientCapabilities=e,this.cssDataManager=t,this.selectorPrinting=new Io(t)}return n.prototype.configure=function(e){this.defaultSettings=e},n.prototype.doHover=function(e,t,r,i){i===void 0&&(i=this.defaultSettings);function o(y){return W.create(e.positionAt(y.offset),e.positionAt(y.end))}for(var s=e.offsetAt(t),a=lt(r,s),l=null,c=0;c0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]=o.length/2&&s.push({property:D.name,score:M})}),s.sort(function(D,M){return M.score-D.score||D.property.localeCompare(M.property)});for(var a=3,l=0,c=s;l=0;l--){var c=a[l];if(c instanceof ae){var h=c.getProperty();if(h&&h.offset===o&&h.end===s){this.getFixesForUnknownProperty(e,h,r,i);return}}}},n}();var Uo=function(){function n(e){this.fullPropertyName=e.getFullPropertyName().toLowerCase(),this.node=e}return n}();function Yt(n,e,t,r){var i=n[e];i.value=t,t&&(Fr(i.properties,r)||i.properties.push(r))}function xa(n,e,t){Yt(n,"top",e,t),Yt(n,"right",e,t),Yt(n,"bottom",e,t),Yt(n,"left",e,t)}function ie(n,e,t,r){e==="top"||e==="right"||e==="bottom"||e==="left"?Yt(n,e,t,r):xa(n,t,r)}function Ir(n,e,t){switch(e.length){case 1:ie(n,void 0,e[0],t);break;case 2:ie(n,"top",e[0],t),ie(n,"bottom",e[0],t),ie(n,"right",e[1],t),ie(n,"left",e[1],t);break;case 3:ie(n,"top",e[0],t),ie(n,"right",e[1],t),ie(n,"left",e[1],t),ie(n,"bottom",e[2],t);break;case 4:ie(n,"top",e[0],t),ie(n,"right",e[1],t),ie(n,"bottom",e[2],t),ie(n,"left",e[3],t);break}}function Mr(n,e){for(var t=0,r=e;t"u"))switch(i.fullPropertyName){case"box-sizing":return{top:{value:!1,properties:[]},right:{value:!1,properties:[]},bottom:{value:!1,properties:[]},left:{value:!1,properties:[]}};case"width":e.width=i;break;case"height":e.height=i;break;default:var s=i.fullPropertyName.split("-");switch(s[0]){case"border":switch(s[1]){case void 0:case"top":case"right":case"bottom":case"left":switch(s[2]){case void 0:ie(e,s[1],ka(o),i);break;case"width":ie(e,s[1],Qt(o,!1),i);break;case"style":ie(e,s[1],Tn(o,!0),i);break}break;case"width":Ir(e,Lo(o.getChildren(),!1),i);break;case"style":Ir(e,Sa(o.getChildren(),!0),i);break}break;case"padding":s.length===1?Ir(e,Lo(o.getChildren(),!0),i):ie(e,s[1],Qt(o,!0),i);break}break}}return e}var Ue=H(),jo=function(){function n(){this.data={}}return n.prototype.add=function(e,t,r){var i=this.data[e];i||(i={nodes:[],names:[]},this.data[e]=i),i.names.push(t),r&&i.nodes.push(r)},n}(),Vo=function(){function n(e,t,r){var i=this;this.cssDataManager=r,this.warnings=[],this.settings=t,this.documentText=e.getText(),this.keyframes=new jo,this.validProperties={};var o=t.getSetting(Oo.ValidProperties);Array.isArray(o)&&o.forEach(function(s){if(typeof s=="string"){var a=s.trim().toLowerCase();a.length&&(i.validProperties[a]=!0)}})}return n.entries=function(e,t,r,i,o){var s=new n(t,r,i);return e.acceptVisitor(s),s.completeValidations(),s.getEntries(o)},n.prototype.isValidPropertyDeclaration=function(e){var t=e.fullPropertyName;return this.validProperties[t]},n.prototype.fetch=function(e,t){for(var r=[],i=0,o=e;i0)for(var x=this.fetch(r,"float"),y=0;y0)for(var x=this.fetch(r,"vertical-align"),y=0;y1)for(var $=0;$")||this.peekDelim("<")||this.peekIdent("and")||this.peekIdent("or")||this.peekDelim("%")){var t=this.createNode(u.Operator);return this.consumeToken(),this.finish(t)}return n.prototype._parseOperator.call(this)},e.prototype._parseUnaryOperator=function(){if(this.peekIdent("not")){var t=this.create(F);return this.consumeToken(),this.finish(t)}return n.prototype._parseUnaryOperator.call(this)},e.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseKeyframe()||this._parseImport()||this._parseMedia(!0)||this._parseFontFace()||this._parseWarnAndDebug()||this._parseControlStatement()||this._parseFunctionDeclaration()||this._parseExtends()||this._parseMixinReference()||this._parseMixinContent()||this._parseMixinDeclaration()||this._parseRuleset(!0)||this._parseSupports(!0)||n.prototype._parseRuleSetDeclarationAtStatement.call(this):this._parseVariableDeclaration()||this._tryParseRuleset(!0)||n.prototype._parseRuleSetDeclaration.call(this)},e.prototype._parseDeclaration=function(t){var r=this._tryParseCustomPropertyDeclaration(t);if(r)return r;var i=this.create(ae);if(!i.setProperty(this._parseProperty()))return null;if(!this.accept(d.Colon))return this.finish(i,f.ColonExpected,[d.Colon],t||[d.SemiColon]);this.prevToken&&(i.colonPosition=this.prevToken.offset);var o=!1;if(i.setValue(this._parseExpr())&&(o=!0,i.addChild(this._parsePrio())),this.peek(d.CurlyL))i.setNestedProperties(this._parseNestedProperties());else if(!o)return this.finish(i,f.PropertyValueExpected);return this.peek(d.SemiColon)&&(i.semicolonPosition=this.token.offset),this.finish(i)},e.prototype._parseNestedProperties=function(){var t=this.create(Yn);return this._parseBody(t,this._parseDeclaration.bind(this))},e.prototype._parseExtends=function(){if(this.peekKeyword("@extend")){var t=this.create(qe);if(this.consumeToken(),!t.getSelectors().addChild(this._parseSimpleSelector()))return this.finish(t,f.SelectorExpected);for(;this.accept(d.Comma);)t.getSelectors().addChild(this._parseSimpleSelector());return this.accept(d.Exclamation)&&!this.acceptIdent("optional")?this.finish(t,f.UnknownKeyword):this.finish(t)}return null},e.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||this._parseSelectorPlaceholder()||n.prototype._parseSimpleSelectorBody.call(this)},e.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var t=this.createNode(u.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(d.Num)||this.accept(d.Dimension)||t.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(t)}return null},e.prototype._parseSelectorPlaceholder=function(){if(this.peekDelim("%")){var t=this.createNode(u.SelectorPlaceholder);return this.consumeToken(),this._parseIdent(),this.finish(t)}else if(this.peekKeyword("@at-root")){var t=this.createNode(u.SelectorPlaceholder);return this.consumeToken(),this.finish(t)}return null},e.prototype._parseElementName=function(){var t=this.mark(),r=n.prototype._parseElementName.call(this);return r&&!this.hasWhitespace()&&this.peek(d.ParenthesisL)?(this.restoreAtMark(t),null):r},e.prototype._tryParsePseudoIdentifier=function(){return this._parseInterpolation()||n.prototype._tryParsePseudoIdentifier.call(this)},e.prototype._parseWarnAndDebug=function(){if(!this.peekKeyword("@debug")&&!this.peekKeyword("@warn")&&!this.peekKeyword("@error"))return null;var t=this.createNode(u.Debug);return this.consumeToken(),t.addChild(this._parseExpr()),this.finish(t)},e.prototype._parseControlStatement=function(t){return t===void 0&&(t=this._parseRuleSetDeclaration.bind(this)),this.peek(d.AtKeyword)?this._parseIfStatement(t)||this._parseForStatement(t)||this._parseEachStatement(t)||this._parseWhileStatement(t):null},e.prototype._parseIfStatement=function(t){return this.peekKeyword("@if")?this._internalParseIfStatement(t):null},e.prototype._internalParseIfStatement=function(t){var r=this.create(pi);if(this.consumeToken(),!r.setExpression(this._parseExpr(!0)))return this.finish(r,f.ExpressionExpected);if(this._parseBody(r,t),this.acceptKeyword("@else")){if(this.peekIdent("if"))r.setElseClause(this._internalParseIfStatement(t));else if(this.peek(d.CurlyL)){var i=this.create(gi);this._parseBody(i,t),r.setElseClause(i)}}return this.finish(r)},e.prototype._parseForStatement=function(t){if(!this.peekKeyword("@for"))return null;var r=this.create(ui);return this.consumeToken(),r.setVariable(this._parseVariable())?this.acceptIdent("from")?r.addChild(this._parseBinaryExpr())?!this.acceptIdent("to")&&!this.acceptIdent("through")?this.finish(r,On.ThroughOrToExpected,[d.CurlyR]):r.addChild(this._parseBinaryExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,On.FromExpected,[d.CurlyR]):this.finish(r,f.VariableNameExpected,[d.CurlyR])},e.prototype._parseEachStatement=function(t){if(!this.peekKeyword("@each"))return null;var r=this.create(mi);this.consumeToken();var i=r.getVariables();if(!i.addChild(this._parseVariable()))return this.finish(r,f.VariableNameExpected,[d.CurlyR]);for(;this.accept(d.Comma);)if(!i.addChild(this._parseVariable()))return this.finish(r,f.VariableNameExpected,[d.CurlyR]);return this.finish(i),this.acceptIdent("in")?r.addChild(this._parseExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,On.InExpected,[d.CurlyR])},e.prototype._parseWhileStatement=function(t){if(!this.peekKeyword("@while"))return null;var r=this.create(fi);return this.consumeToken(),r.addChild(this._parseBinaryExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR])},e.prototype._parseFunctionBodyDeclaration=function(){return this._parseVariableDeclaration()||this._parseReturnStatement()||this._parseWarnAndDebug()||this._parseControlStatement(this._parseFunctionBodyDeclaration.bind(this))},e.prototype._parseFunctionDeclaration=function(){if(!this.peekKeyword("@function"))return null;var t=this.create(Qe);if(this.consumeToken(),!t.setIdentifier(this._parseIdent([A.Function])))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.CurlyR]);if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}return this.accept(d.ParenthesisR)?this._parseBody(t,this._parseFunctionBodyDeclaration.bind(this)):this.finish(t,f.RightParenthesisExpected,[d.CurlyR])},e.prototype._parseReturnStatement=function(){if(!this.peekKeyword("@return"))return null;var t=this.createNode(u.ReturnStatement);return this.consumeToken(),t.addChild(this._parseExpr())?this.finish(t):this.finish(t,f.ExpressionExpected)},e.prototype._parseMixinDeclaration=function(){if(!this.peekKeyword("@mixin"))return null;var t=this.create(Ae);if(this.consumeToken(),!t.setIdentifier(this._parseIdent([A.Mixin])))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(this.accept(d.ParenthesisL)){if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.CurlyR])}return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseParameterDeclaration=function(){var t=this.create(Be);return t.setIdentifier(this._parseVariable())?(this.accept(en),this.accept(d.Colon)&&!t.setDefaultValue(this._parseExpr(!0))?this.finish(t,f.VariableValueExpected,[],[d.Comma,d.ParenthesisR]):this.finish(t)):null},e.prototype._parseMixinContent=function(){if(!this.peekKeyword("@content"))return null;var t=this.create(Ii);if(this.consumeToken(),this.accept(d.ParenthesisL)){if(t.getArguments().addChild(this._parseFunctionArgument())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getArguments().addChild(this._parseFunctionArgument()))return this.finish(t,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return this.finish(t)},e.prototype._parseMixinReference=function(){if(!this.peekKeyword("@include"))return null;var t=this.create(et);this.consumeToken();var r=this._parseIdent([A.Mixin]);if(!t.setIdentifier(r))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(!this.hasWhitespace()&&this.acceptDelim(".")&&!this.hasWhitespace()){var i=this._parseIdent([A.Mixin]);if(!i)return this.finish(t,f.IdentifierExpected,[d.CurlyR]);var o=this.create(Zn);r.referenceTypes=[A.Module],o.setIdentifier(r),t.setIdentifier(i),t.addChild(o)}if(this.accept(d.ParenthesisL)){if(t.getArguments().addChild(this._parseFunctionArgument())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getArguments().addChild(this._parseFunctionArgument()))return this.finish(t,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return(this.peekIdent("using")||this.peek(d.CurlyL))&&t.setContent(this._parseMixinContentDeclaration()),this.finish(t)},e.prototype._parseMixinContentDeclaration=function(){var t=this.create(Mi);if(this.acceptIdent("using")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.CurlyL]);if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.CurlyL])}return this.peek(d.CurlyL)&&this._parseBody(t,this._parseMixinReferenceBodyStatement.bind(this)),this.finish(t)},e.prototype._parseMixinReferenceBodyStatement=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},e.prototype._parseFunctionArgument=function(){var t=this.create(we),r=this.mark(),i=this._parseVariable();if(i)if(this.accept(d.Colon))t.setIdentifier(i);else{if(this.accept(en))return t.setValue(i),this.finish(t);this.restoreAtMark(r)}return t.setValue(this._parseExpr(!0))?(this.accept(en),t.addChild(this._parsePrio()),this.finish(t)):t.setValue(this._tryParsePrio())?this.finish(t):null},e.prototype._parseURLArgument=function(){var t=this.mark(),r=n.prototype._parseURLArgument.call(this);if(!r||!this.peek(d.ParenthesisR)){this.restoreAtMark(t);var i=this.create(F);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return r},e.prototype._parseOperation=function(){if(!this.peek(d.ParenthesisL))return null;var t=this.create(F);for(this.consumeToken();t.addChild(this._parseListElement());)this.accept(d.Comma);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseListElement=function(){var t=this.create(Ti),r=this._parseBinaryExpr();if(!r)return null;if(this.accept(d.Colon)){if(t.setKey(r),!t.setValue(this._parseBinaryExpr()))return this.finish(t,f.ExpressionExpected)}else t.setValue(r);return this.finish(t)},e.prototype._parseUse=function(){if(!this.peekKeyword("@use"))return null;var t=this.create(vi);if(this.consumeToken(),!t.addChild(this._parseStringLiteral()))return this.finish(t,f.StringLiteralExpected);if(!this.peek(d.SemiColon)&&!this.peek(d.EOF)){if(!this.peekRegExp(d.Ident,/as|with/))return this.finish(t,f.UnknownKeyword);if(this.acceptIdent("as")&&!t.setIdentifier(this._parseIdent([A.Module]))&&!this.acceptDelim("*"))return this.finish(t,f.IdentifierOrWildcardExpected);if(this.acceptIdent("with")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.ParenthesisR]);if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}}return!this.accept(d.SemiColon)&&!this.accept(d.EOF)?this.finish(t,f.SemiColonExpected):this.finish(t)},e.prototype._parseModuleConfigDeclaration=function(){var t=this.create(yi);return t.setIdentifier(this._parseVariable())?!this.accept(d.Colon)||!t.setValue(this._parseExpr(!0))?this.finish(t,f.VariableValueExpected,[],[d.Comma,d.ParenthesisR]):this.accept(d.Exclamation)&&(this.hasWhitespace()||!this.acceptIdent("default"))?this.finish(t,f.UnknownKeyword):this.finish(t):null},e.prototype._parseForward=function(){if(!this.peekKeyword("@forward"))return null;var t=this.create(wi);if(this.consumeToken(),!t.addChild(this._parseStringLiteral()))return this.finish(t,f.StringLiteralExpected);if(this.acceptIdent("with")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.ParenthesisR]);if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}if(!this.peek(d.SemiColon)&&!this.peek(d.EOF)){if(!this.peekRegExp(d.Ident,/as|hide|show/))return this.finish(t,f.UnknownKeyword);if(this.acceptIdent("as")){var r=this._parseIdent([A.Forward]);if(!t.setIdentifier(r))return this.finish(t,f.IdentifierExpected);if(this.hasWhitespace()||!this.acceptDelim("*"))return this.finish(t,f.WildcardExpected)}if((this.peekIdent("hide")||this.peekIdent("show"))&&!t.addChild(this._parseForwardVisibility()))return this.finish(t,f.IdentifierOrVariableExpected)}return!this.accept(d.SemiColon)&&!this.accept(d.EOF)?this.finish(t,f.SemiColonExpected):this.finish(t)},e.prototype._parseForwardVisibility=function(){var t=this.create(xi);for(t.setIdentifier(this._parseIdent());t.addChild(this._parseVariable()||this._parseIdent());)this.accept(d.Comma);return t.getChildren().length>1?t:null},e.prototype._parseSupportsCondition=function(){return this._parseInterpolation()||n.prototype._parseSupportsCondition.call(this)},e}(gt);var Na=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),S=H(),Ko=function(n){Na(e,n);function e(t,r){var i=n.call(this,"$",t,r)||this;return qo(e.scssModuleLoaders),qo(e.scssModuleBuiltIns),i}return e.prototype.isImportPathParent=function(t){return t===u.Forward||t===u.Use||n.prototype.isImportPathParent.call(this,t)},e.prototype.getCompletionForImportPath=function(t,r){var i=t.getParent().type;if(i===u.Forward||i===u.Use)for(var o=0,s=e.scssModuleBuiltIns;o0){var t=typeof e.documentation=="string"?{kind:"markdown",value:e.documentation}:{kind:"markdown",value:e.documentation.value};t.value+=` `,t.value+=e.references.map(function(r){return"[".concat(r.name,"](").concat(r.url,")")}).join(" | "),e.documentation=t}})}var Oa=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Go=47,Wa=10,La=13,Ua=12,jr=96,Vr=46,ja=d.CustomToken,Wn=ja++,Ln=function(n){Oa(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.scanNext=function(t){var r=this.escapedJavaScript();return r!==null?this.finishToken(t,r):this.stream.advanceIfChars([Vr,Vr,Vr])?this.finishToken(t,Wn):n.prototype.scanNext.call(this,t)},e.prototype.comment=function(){return n.prototype.comment.call(this)?!0:!this.inURL&&this.stream.advanceIfChars([Go,Go])?(this.stream.advanceWhileChar(function(t){switch(t){case Wa:case La:case Ua:return!1;default:return!0}}),!0):!1},e.prototype.escapedJavaScript=function(){var t=this.stream.peekChar();return t===jr?(this.stream.advance(1),this.stream.advanceWhileChar(function(r){return r!==jr}),this.stream.advanceIfChar(jr)?d.EscapedJavaScript:d.BadEscapedJavaScript):null},e}(Fe);var Ba=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Ho=function(n){Ba(e,n);function e(){return n.call(this,new Ln)||this}return e.prototype._parseStylesheetStatement=function(t){return t===void 0&&(t=!1),this.peek(d.AtKeyword)?this._parseVariableDeclaration()||this._parsePlugin()||n.prototype._parseStylesheetAtStatement.call(this,t):this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseFunction()||this._parseRuleset(!0)},e.prototype._parseImport=function(){if(!this.peekKeyword("@import")&&!this.peekKeyword("@import-once"))return null;var t=this.create(dt);if(this.consumeToken(),this.accept(d.ParenthesisL)){if(!this.accept(d.Ident))return this.finish(t,f.IdentifierExpected,[d.SemiColon]);do if(!this.accept(d.Comma))break;while(this.accept(d.Ident));if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.SemiColon])}return!t.addChild(this._parseURILiteral())&&!t.addChild(this._parseStringLiteral())?this.finish(t,f.URIOrStringExpected,[d.SemiColon]):(!this.peek(d.SemiColon)&&!this.peek(d.EOF)&&t.setMedialist(this._parseMediaQueryList()),this.finish(t))},e.prototype._parsePlugin=function(){if(!this.peekKeyword("@plugin"))return null;var t=this.createNode(u.Plugin);return this.consumeToken(),t.addChild(this._parseStringLiteral())?this.accept(d.SemiColon)?this.finish(t):this.finish(t,f.SemiColonExpected):this.finish(t,f.StringLiteralExpected)},e.prototype._parseMediaQuery=function(){var t=n.prototype._parseMediaQuery.call(this);if(!t){var r=this.create(hn);return r.addChild(this._parseVariable())?this.finish(r):null}return t},e.prototype._parseMediaDeclaration=function(t){return t===void 0&&(t=!1),this._tryParseRuleset(t)||this._tryToParseDeclaration()||this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseDetachedRuleSetMixin()||this._parseStylesheetStatement(t)},e.prototype._parseMediaFeatureName=function(){return this._parseIdent()||this._parseVariable()},e.prototype._parseVariableDeclaration=function(t){t===void 0&&(t=[]);var r=this.create($e),i=this.mark();if(!r.setVariable(this._parseVariable(!0)))return null;if(this.accept(d.Colon)){if(this.prevToken&&(r.colonPosition=this.prevToken.offset),r.setValue(this._parseDetachedRuleSet()))r.needsSemicolon=!1;else if(!r.setValue(this._parseExpr()))return this.finish(r,f.VariableValueExpected,[],t);r.addChild(this._parsePrio())}else return this.restoreAtMark(i),null;return this.peek(d.SemiColon)&&(r.semicolonPosition=this.token.offset),this.finish(r)},e.prototype._parseDetachedRuleSet=function(){var t=this.mark();if(this.peekDelim("#")||this.peekDelim("."))if(this.consumeToken(),!this.hasWhitespace()&&this.accept(d.ParenthesisL)){var r=this.create(Ae);if(r.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)r.getParameters().addChild(this._parseMixinParameter())||this.markError(r,f.IdentifierExpected,[],[d.ParenthesisR]);if(!this.accept(d.ParenthesisR))return this.restoreAtMark(t),null}else return this.restoreAtMark(t),null;if(!this.peek(d.CurlyL))return null;var i=this.create(K);return this._parseBody(i,this._parseDetachedRuleSetBody.bind(this)),this.finish(i)},e.prototype._parseDetachedRuleSetBody=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},e.prototype._addLookupChildren=function(t){if(!t.addChild(this._parseLookupValue()))return!1;for(var r=!1;this.peek(d.BracketL)&&(r=!0),!!t.addChild(this._parseLookupValue());)r=!1;return!r},e.prototype._parseLookupValue=function(){var t=this.create(F),r=this.mark();return this.accept(d.BracketL)?(t.addChild(this._parseVariable(!1,!0))||t.addChild(this._parsePropertyIdentifier()))&&this.accept(d.BracketR)||this.accept(d.BracketR)?t:(this.restoreAtMark(r),null):(this.restoreAtMark(r),null)},e.prototype._parseVariable=function(t,r){t===void 0&&(t=!1),r===void 0&&(r=!1);var i=!t&&this.peekDelim("$");if(!this.peekDelim("@")&&!i&&!this.peek(d.AtKeyword))return null;for(var o=this.create(pt),s=this.mark();this.acceptDelim("@")||!t&&this.acceptDelim("$");)if(this.hasWhitespace())return this.restoreAtMark(s),null;return!this.accept(d.AtKeyword)&&!this.accept(d.Ident)?(this.restoreAtMark(s),null):!r&&this.peek(d.BracketL)&&!this._addLookupChildren(o)?(this.restoreAtMark(s),null):o},e.prototype._parseTermExpression=function(){return this._parseVariable()||this._parseEscaped()||n.prototype._parseTermExpression.call(this)||this._tryParseMixinReference(!1)},e.prototype._parseEscaped=function(){if(this.peek(d.EscapedJavaScript)||this.peek(d.BadEscapedJavaScript)){var t=this.createNode(u.EscapedValue);return this.consumeToken(),this.finish(t)}if(this.peekDelim("~")){var t=this.createNode(u.EscapedValue);return this.consumeToken(),this.accept(d.String)||this.accept(d.EscapedJavaScript)?this.finish(t):this.finish(t,f.TermExpected)}return null},e.prototype._parseOperator=function(){var t=this._parseGuardOperator();return t||n.prototype._parseOperator.call(this)},e.prototype._parseGuardOperator=function(){if(this.peekDelim(">")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim("="),t}else if(this.peekDelim("=")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim("<"),t}else if(this.peekDelim("<")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim("="),t}return null},e.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseKeyframe()||this._parseMedia(!0)||this._parseImport()||this._parseSupports(!0)||this._parseDetachedRuleSetMixin()||this._parseVariableDeclaration()||n.prototype._parseRuleSetDeclarationAtStatement.call(this):this._tryParseMixinDeclaration()||this._tryParseRuleset(!0)||this._tryParseMixinReference()||this._parseFunction()||this._parseExtend()||n.prototype._parseRuleSetDeclaration.call(this)},e.prototype._parseKeyframeIdent=function(){return this._parseIdent([A.Keyframe])||this._parseVariable()},e.prototype._parseKeyframeSelector=function(){return this._parseDetachedRuleSetMixin()||n.prototype._parseKeyframeSelector.call(this)},e.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||n.prototype._parseSimpleSelectorBody.call(this)},e.prototype._parseSelector=function(t){var r=this.create(Ee),i=!1;for(t&&(i=r.addChild(this._parseCombinator()));r.addChild(this._parseSimpleSelector());){i=!0;var o=this.mark();if(r.addChild(this._parseGuard())&&this.peek(d.CurlyL))break;this.restoreAtMark(o),r.addChild(this._parseCombinator())}return i?this.finish(r):null},e.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var t=this.createNode(u.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(d.Num)||this.accept(d.Dimension)||t.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(t)}return null},e.prototype._parseSelectorIdent=function(){if(!this.peekInterpolatedIdent())return null;var t=this.createNode(u.SelectorInterpolation),r=this._acceptInterpolatedIdent(t);return r?this.finish(t):null},e.prototype._parsePropertyIdentifier=function(t){t===void 0&&(t=!1);var r=/^[\w-]+/;if(!this.peekInterpolatedIdent()&&!this.peekRegExp(this.token.type,r))return null;var i=this.mark(),o=this.create(te);o.isCustomProperty=this.acceptDelim("-")&&this.acceptDelim("-");var s=!1;return t?o.isCustomProperty?s=o.addChild(this._parseIdent()):s=o.addChild(this._parseRegexp(r)):o.isCustomProperty?s=this._acceptInterpolatedIdent(o):s=this._acceptInterpolatedIdent(o,r),s?(!t&&!this.hasWhitespace()&&(this.acceptDelim("+"),this.hasWhitespace()||this.acceptIdent("_")),this.finish(o)):(this.restoreAtMark(i),null)},e.prototype.peekInterpolatedIdent=function(){return this.peek(d.Ident)||this.peekDelim("@")||this.peekDelim("$")||this.peekDelim("-")},e.prototype._acceptInterpolatedIdent=function(t,r){for(var i=this,o=!1,s=function(){var l=i.mark();return i.acceptDelim("-")&&(i.hasWhitespace()||i.acceptDelim("-"),i.hasWhitespace())?(i.restoreAtMark(l),null):i._parseInterpolation()},a=r?function(){return i.acceptRegexp(r)}:function(){return i.accept(d.Ident)};(a()||t.addChild(this._parseInterpolation()||this.try(s)))&&(o=!0,!this.hasWhitespace()););return o},e.prototype._parseInterpolation=function(){var t=this.mark();if(this.peekDelim("@")||this.peekDelim("$")){var r=this.createNode(u.Interpolation);return this.consumeToken(),this.hasWhitespace()||!this.accept(d.CurlyL)?(this.restoreAtMark(t),null):r.addChild(this._parseIdent())?this.accept(d.CurlyR)?this.finish(r):this.finish(r,f.RightCurlyExpected):this.finish(r,f.IdentifierExpected)}return null},e.prototype._tryParseMixinDeclaration=function(){var t=this.mark(),r=this.create(Ae);if(!r.setIdentifier(this._parseMixinDeclarationIdentifier())||!this.accept(d.ParenthesisL))return this.restoreAtMark(t),null;if(r.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)r.getParameters().addChild(this._parseMixinParameter())||this.markError(r,f.IdentifierExpected,[],[d.ParenthesisR]);return this.accept(d.ParenthesisR)?(r.setGuard(this._parseGuard()),this.peek(d.CurlyL)?this._parseBody(r,this._parseMixInBodyDeclaration.bind(this)):(this.restoreAtMark(t),null)):(this.restoreAtMark(t),null)},e.prototype._parseMixInBodyDeclaration=function(){return this._parseFontFace()||this._parseRuleSetDeclaration()},e.prototype._parseMixinDeclarationIdentifier=function(){var t;if(this.peekDelim("#")||this.peekDelim(".")){if(t=this.create(te),this.consumeToken(),this.hasWhitespace()||!t.addChild(this._parseIdent()))return null}else if(this.peek(d.Hash))t=this.create(te),this.consumeToken();else return null;return t.referenceTypes=[A.Mixin],this.finish(t)},e.prototype._parsePseudo=function(){if(!this.peek(d.Colon))return null;var t=this.mark(),r=this.create(qe);return this.consumeToken(),this.acceptIdent("extend")?this._completeExtends(r):(this.restoreAtMark(t),n.prototype._parsePseudo.call(this))},e.prototype._parseExtend=function(){if(!this.peekDelim("&"))return null;var t=this.mark(),r=this.create(qe);return this.consumeToken(),this.hasWhitespace()||!this.accept(d.Colon)||!this.acceptIdent("extend")?(this.restoreAtMark(t),null):this._completeExtends(r)},e.prototype._completeExtends=function(t){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected);var r=t.getSelectors();if(!r.addChild(this._parseSelector(!0)))return this.finish(t,f.SelectorExpected);for(;this.accept(d.Comma);)if(!r.addChild(this._parseSelector(!0)))return this.finish(t,f.SelectorExpected);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseDetachedRuleSetMixin=function(){if(!this.peek(d.AtKeyword))return null;var t=this.mark(),r=this.create(et);return r.addChild(this._parseVariable(!0))&&(this.hasWhitespace()||!this.accept(d.ParenthesisL))?(this.restoreAtMark(t),null):this.accept(d.ParenthesisR)?this.finish(r):this.finish(r,f.RightParenthesisExpected)},e.prototype._tryParseMixinReference=function(t){t===void 0&&(t=!0);for(var r=this.mark(),i=this.create(et),o=this._parseMixinDeclarationIdentifier();o;){this.acceptDelim(">");var s=this._parseMixinDeclarationIdentifier();if(s)i.getNamespaces().addChild(o),o=s;else break}if(!i.setIdentifier(o))return this.restoreAtMark(r),null;var a=!1;if(this.accept(d.ParenthesisL)){if(a=!0,i.getArguments().addChild(this._parseMixinArgument())){for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)if(!i.getArguments().addChild(this._parseMixinArgument()))return this.finish(i,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(i,f.RightParenthesisExpected);o.referenceTypes=[A.Mixin]}else o.referenceTypes=[A.Mixin,A.Rule];return this.peek(d.BracketL)?t||this._addLookupChildren(i):i.addChild(this._parsePrio()),!a&&!this.peek(d.SemiColon)&&!this.peek(d.CurlyR)&&!this.peek(d.EOF)?(this.restoreAtMark(r),null):this.finish(i)},e.prototype._parseMixinArgument=function(){var t=this.create(we),r=this.mark(),i=this._parseVariable();return i&&(this.accept(d.Colon)?t.setIdentifier(i):this.restoreAtMark(r)),t.setValue(this._parseDetachedRuleSet()||this._parseExpr(!0))?this.finish(t):(this.restoreAtMark(r),null)},e.prototype._parseMixinParameter=function(){var t=this.create(Be);if(this.peekKeyword("@rest")){var r=this.create(F);return this.consumeToken(),this.accept(Wn)?(t.setIdentifier(this.finish(r)),this.finish(t)):this.finish(t,f.DotExpected,[],[d.Comma,d.ParenthesisR])}if(this.peek(Wn)){var i=this.create(F);return this.consumeToken(),t.setIdentifier(this.finish(i)),this.finish(t)}var o=!1;return t.setIdentifier(this._parseVariable())&&(this.accept(d.Colon),o=!0),!t.setDefaultValue(this._parseDetachedRuleSet()||this._parseExpr(!0))&&!o?null:this.finish(t)},e.prototype._parseGuard=function(){if(!this.peekIdent("when"))return null;var t=this.create(Pi);if(this.consumeToken(),t.isNegated=this.acceptIdent("not"),!t.getConditions().addChild(this._parseGuardCondition()))return this.finish(t,f.ConditionExpected);for(;this.acceptIdent("and")||this.accept(d.Comma);)if(!t.getConditions().addChild(this._parseGuardCondition()))return this.finish(t,f.ConditionExpected);return this.finish(t)},e.prototype._parseGuardCondition=function(){if(!this.peek(d.ParenthesisL))return null;var t=this.create(Ai);return this.consumeToken(),t.addChild(this._parseExpr()),this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseFunction=function(){var t=this.mark(),r=this.create(Pe);if(!r.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(d.ParenthesisL))return this.restoreAtMark(t),null;if(r.getArguments().addChild(this._parseMixinArgument())){for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)if(!r.getArguments().addChild(this._parseMixinArgument()))return this.finish(r,f.ExpressionExpected)}return this.accept(d.ParenthesisR)?this.finish(r):this.finish(r,f.RightParenthesisExpected)},e.prototype._parseFunctionIdentifier=function(){if(this.peekDelim("%")){var t=this.create(te);return t.referenceTypes=[A.Function],this.consumeToken(),this.finish(t)}return n.prototype._parseFunctionIdentifier.call(this)},e.prototype._parseURLArgument=function(){var t=this.mark(),r=n.prototype._parseURLArgument.call(this);if(!r||!this.peek(d.ParenthesisR)){this.restoreAtMark(t);var i=this.create(F);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return r},e}(gt);var $a=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),I=H(),Jo=function(n){$a(e,n);function e(t,r){return n.call(this,"@",t,r)||this}return e.prototype.createFunctionProposals=function(t,r,i,o){for(var s=0,a=t;s 50%"),example:"percentage(@number);",type:"percentage"},{name:"round",description:I("less.builtin.round","rounds a number to a number of places"),example:"round(number, [places: 0]);"},{name:"sqrt",description:I("less.builtin.sqrt","calculates square root of a number"),example:"sqrt(number);"},{name:"sin",description:I("less.builtin.sin","sine function"),example:"sin(number);"},{name:"tan",description:I("less.builtin.tan","tangent function"),example:"tan(number);"},{name:"atan",description:I("less.builtin.atan","arctangent - inverse of tangent function"),example:"atan(number);"},{name:"pi",description:I("less.builtin.pi","returns pi"),example:"pi();"},{name:"pow",description:I("less.builtin.pow","first argument raised to the power of the second argument"),example:"pow(@base, @exponent);"},{name:"mod",description:I("less.builtin.mod","first argument modulus second argument"),example:"mod(number, number);"},{name:"min",description:I("less.builtin.min","returns the lowest of one or more values"),example:"min(@x, @y);"},{name:"max",description:I("less.builtin.max","returns the lowest of one or more values"),example:"max(@x, @y);"}],e.colorProposals=[{name:"argb",example:"argb(@color);",description:I("less.builtin.argb","creates a #AARRGGBB")},{name:"hsl",example:"hsl(@hue, @saturation, @lightness);",description:I("less.builtin.hsl","creates a color")},{name:"hsla",example:"hsla(@hue, @saturation, @lightness, @alpha);",description:I("less.builtin.hsla","creates a color")},{name:"hsv",example:"hsv(@hue, @saturation, @value);",description:I("less.builtin.hsv","creates a color")},{name:"hsva",example:"hsva(@hue, @saturation, @value, @alpha);",description:I("less.builtin.hsva","creates a color")},{name:"hue",example:"hue(@color);",description:I("less.builtin.hue","returns the `hue` channel of `@color` in the HSL space")},{name:"saturation",example:"saturation(@color);",description:I("less.builtin.saturation","returns the `saturation` channel of `@color` in the HSL space")},{name:"lightness",example:"lightness(@color);",description:I("less.builtin.lightness","returns the `lightness` channel of `@color` in the HSL space")},{name:"hsvhue",example:"hsvhue(@color);",description:I("less.builtin.hsvhue","returns the `hue` channel of `@color` in the HSV space")},{name:"hsvsaturation",example:"hsvsaturation(@color);",description:I("less.builtin.hsvsaturation","returns the `saturation` channel of `@color` in the HSV space")},{name:"hsvvalue",example:"hsvvalue(@color);",description:I("less.builtin.hsvvalue","returns the `value` channel of `@color` in the HSV space")},{name:"red",example:"red(@color);",description:I("less.builtin.red","returns the `red` channel of `@color`")},{name:"green",example:"green(@color);",description:I("less.builtin.green","returns the `green` channel of `@color`")},{name:"blue",example:"blue(@color);",description:I("less.builtin.blue","returns the `blue` channel of `@color`")},{name:"alpha",example:"alpha(@color);",description:I("less.builtin.alpha","returns the `alpha` channel of `@color`")},{name:"luma",example:"luma(@color);",description:I("less.builtin.luma","returns the `luma` value (perceptual brightness) of `@color`")},{name:"saturate",example:"saturate(@color, 10%);",description:I("less.builtin.saturate","return `@color` 10% points more saturated")},{name:"desaturate",example:"desaturate(@color, 10%);",description:I("less.builtin.desaturate","return `@color` 10% points less saturated")},{name:"lighten",example:"lighten(@color, 10%);",description:I("less.builtin.lighten","return `@color` 10% points lighter")},{name:"darken",example:"darken(@color, 10%);",description:I("less.builtin.darken","return `@color` 10% points darker")},{name:"fadein",example:"fadein(@color, 10%);",description:I("less.builtin.fadein","return `@color` 10% points less transparent")},{name:"fadeout",example:"fadeout(@color, 10%);",description:I("less.builtin.fadeout","return `@color` 10% points more transparent")},{name:"fade",example:"fade(@color, 50%);",description:I("less.builtin.fade","return `@color` with 50% transparency")},{name:"spin",example:"spin(@color, 10);",description:I("less.builtin.spin","return `@color` with a 10 degree larger in hue")},{name:"mix",example:"mix(@color1, @color2, [@weight: 50%]);",description:I("less.builtin.mix","return a mix of `@color1` and `@color2`")},{name:"greyscale",example:"greyscale(@color);",description:I("less.builtin.greyscale","returns a grey, 100% desaturated color")},{name:"contrast",example:"contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]);",description:I("less.builtin.contrast","return `@darkcolor` if `@color1 is> 43% luma` otherwise return `@lightcolor`, see notes")},{name:"multiply",example:"multiply(@color1, @color2);"},{name:"screen",example:"screen(@color1, @color2);"},{name:"overlay",example:"overlay(@color1, @color2);"},{name:"softlight",example:"softlight(@color1, @color2);"},{name:"hardlight",example:"hardlight(@color1, @color2);"},{name:"difference",example:"difference(@color1, @color2);"},{name:"exclusion",example:"exclusion(@color1, @color2);"},{name:"average",example:"average(@color1, @color2);"},{name:"negation",example:"negation(@color1, @color2);"}],e}(vt);function Yo(n,e){var t=qa(n);return Ka(t,e)}function qa(n){function e(p){return n.positionAt(p.offset).line}function t(p){return n.positionAt(p.offset+p.len).line}function r(){switch(n.languageId){case"scss":return new Nn;case"less":return new Ln;default:return new Fe}}function i(p,m){var g=e(p),w=t(p);return g!==w?{startLine:g,endLine:w,kind:m}:null}var o=[],s=[],a=r();a.ignoreComment=!1,a.setSource(n.getText());for(var l=a.scan(),c=null,h=function(){switch(l.type){case d.CurlyL:case xt:{s.push({line:e(l),type:"brace",isStart:!0});break}case d.CurlyR:{if(s.length!==0){var p=Xo(s,"brace");if(!p)break;var m=t(l);p.type==="brace"&&(c&&t(c)!==m&&m--,p.line!==m&&o.push({startLine:p.line,endLine:m,kind:void 0}))}break}case d.Comment:{var g=function(D){return D==="#region"?{line:e(l),type:"comment",isStart:!0}:{line:t(l),type:"comment",isStart:!1}},w=function(D){var M=D.text.match(/^\s*\/\*\s*(#region|#endregion)\b\s*(.*?)\s*\*\//);if(M)return g(M[1]);if(n.languageId==="scss"||n.languageId==="less"){var z=D.text.match(/^\s*\/\/\s*(#region|#endregion)\b\s*(.*?)\s*/);if(z)return g(z[1])}return null},x=w(l);if(x)if(x.isStart)s.push(x);else{var p=Xo(s,"comment");if(!p)break;p.type==="comment"&&p.line!==x.line&&o.push({startLine:p.line,endLine:x.line,kind:"region"})}else{var y=i(l,"comment");y&&o.push(y)}break}}c=l,l=a.scan()};l.type!==d.EOF;)h();return o}function Xo(n,e){if(n.length===0)return null;for(var t=n.length-1;t>=0;t--)if(n[t].type===e&&n[t].isStart)return n.splice(t,1)[0];return null}function Ka(n,e){var t=e&&e.rangeLimit||Number.MAX_VALUE,r=n.sort(function(s,a){var l=s.startLine-a.startLine;return l===0&&(l=s.endLine-a.endLine),l}),i=[],o=-1;return r.forEach(function(s){s.startLine=0;c--)if(this.__items[c].match(l))return!0;return!1},o.prototype.set_indent=function(l,c){this.is_empty()&&(this.__indent_count=l||0,this.__alignment_count=c||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},o.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},o.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},o.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var l=this.__parent.current_line;return l.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),l.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),l.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,l.__items[0]===" "&&(l.__items.splice(0,1),l.__character_count-=1),!0}return!1},o.prototype.is_empty=function(){return this.__items.length===0},o.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},o.prototype.push=function(l){this.__items.push(l);var c=l.lastIndexOf(` `);c!==-1?this.__character_count=l.length-c:this.__character_count+=l.length},o.prototype.pop=function(){var l=null;return this.is_empty()||(l=this.__items.pop(),this.__character_count-=l.length),l},o.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},o.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},o.prototype.trim=function(){for(;this.last()===" ";)this.__items.pop(),this.__character_count-=1},o.prototype.toString=function(){var l="";return this.is_empty()?this.__parent.indent_empty_lines&&(l=this.__parent.get_indent_string(this.__indent_count)):(l=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),l+=this.__items.join("")),l};function s(l,c){this.__cache=[""],this.__indent_size=l.indent_size,this.__indent_string=l.indent_char,l.indent_with_tabs||(this.__indent_string=new Array(l.indent_size+1).join(l.indent_char)),c=c||"",l.indent_level>0&&(c=new Array(l.indent_level+1).join(this.__indent_string)),this.__base_string=c,this.__base_string_length=c.length}s.prototype.get_indent_size=function(l,c){var h=this.__base_string_length;return c=c||0,l<0&&(h=0),h+=l*this.__indent_size,h+=c,h},s.prototype.get_indent_string=function(l,c){var h=this.__base_string;return c=c||0,l<0&&(l=0,h=""),c+=l*this.__indent_size,this.__ensure_cache(c),h+=this.__cache[c],h},s.prototype.__ensure_cache=function(l){for(;l>=this.__cache.length;)this.__add_column()},s.prototype.__add_column=function(){var l=this.__cache.length,c=0,h="";this.__indent_size&&l>=this.__indent_size&&(c=Math.floor(l/this.__indent_size),l-=c*this.__indent_size,h=new Array(c+1).join(this.__indent_string)),l&&(h+=new Array(l+1).join(" ")),this.__cache.push(h)};function a(l,c){this.__indent_cache=new s(l,c),this.raw=!1,this._end_with_newline=l.end_with_newline,this.indent_size=l.indent_size,this.wrap_line_length=l.wrap_line_length,this.indent_empty_lines=l.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new o(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}a.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},a.prototype.get_line_number=function(){return this.__lines.length},a.prototype.get_indent_string=function(l,c){return this.__indent_cache.get_indent_string(l,c)},a.prototype.get_indent_size=function(l,c){return this.__indent_cache.get_indent_size(l,c)},a.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},a.prototype.add_new_line=function(l){return this.is_empty()||!l&&this.just_added_newline()?!1:(this.raw||this.__add_outputline(),!0)},a.prototype.get_code=function(l){this.trim(!0);var c=this.current_line.pop();c&&(c[c.length-1]===` `&&(c=c.replace(/\n+$/g,"")),this.current_line.push(c)),this._end_with_newline&&this.__add_outputline();var h=this.__lines.join(` `);return l!==` `&&(h=h.replace(/[\n]/g,l)),h},a.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},a.prototype.set_indent=function(l,c){return l=l||0,c=c||0,this.next_line.set_indent(l,c),this.__lines.length>1?(this.current_line.set_indent(l,c),!0):(this.current_line.set_indent(),!1)},a.prototype.add_raw_token=function(l){for(var c=0;c1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},a.prototype.just_added_newline=function(){return this.current_line.is_empty()},a.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},a.prototype.ensure_empty_line_above=function(l,c){for(var h=this.__lines.length-2;h>=0;){var p=this.__lines[h];if(p.is_empty())break;if(p.item(0).indexOf(l)!==0&&p.item(-1)!==c){this.__lines.splice(h+1,0,new o(this)),this.previous_line=this.__lines[this.__lines.length-2];break}h--}},i.exports.Output=a},,,,function(i){function o(l,c){this.raw_options=s(l,c),this.disabled=this._get_boolean("disabled"),this.eol=this._get_characters("eol","auto"),this.end_with_newline=this._get_boolean("end_with_newline"),this.indent_size=this._get_number("indent_size",4),this.indent_char=this._get_characters("indent_char"," "),this.indent_level=this._get_number("indent_level"),this.preserve_newlines=this._get_boolean("preserve_newlines",!0),this.max_preserve_newlines=this._get_number("max_preserve_newlines",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean("indent_with_tabs",this.indent_char===" "),this.indent_with_tabs&&(this.indent_char=" ",this.indent_size===1&&(this.indent_size=4)),this.wrap_line_length=this._get_number("wrap_line_length",this._get_number("max_char")),this.indent_empty_lines=this._get_boolean("indent_empty_lines"),this.templating=this._get_selection_list("templating",["auto","none","django","erb","handlebars","php","smarty"],["auto"])}o.prototype._get_array=function(l,c){var h=this.raw_options[l],p=c||[];return typeof h=="object"?h!==null&&typeof h.concat=="function"&&(p=h.concat()):typeof h=="string"&&(p=h.split(/[^a-zA-Z0-9_\/\-]+/)),p},o.prototype._get_boolean=function(l,c){var h=this.raw_options[l],p=h===void 0?!!c:!!h;return p},o.prototype._get_characters=function(l,c){var h=this.raw_options[l],p=c||"";return typeof h=="string"&&(p=h.replace(/\\r/,"\r").replace(/\\n/,` `).replace(/\\t/," ")),p},o.prototype._get_number=function(l,c){var h=this.raw_options[l];c=parseInt(c,10),isNaN(c)&&(c=0);var p=parseInt(h,10);return isNaN(p)&&(p=c),p},o.prototype._get_selection=function(l,c,h){var p=this._get_selection_list(l,c,h);if(p.length!==1)throw new Error("Invalid Option Value: The option '"+l+`' can only be one of the following values: `+c+` You passed in: '`+this.raw_options[l]+"'");return p[0]},o.prototype._get_selection_list=function(l,c,h){if(!c||c.length===0)throw new Error("Selection list cannot be empty.");if(h=h||[c[0]],!this._is_valid_selection(h,c))throw new Error("Invalid Default Value!");var p=this._get_array(l,h);if(!this._is_valid_selection(p,c))throw new Error("Invalid Option Value: The option '"+l+`' can contain only the following values: `+c+` You passed in: '`+this.raw_options[l]+"'");return p},o.prototype._is_valid_selection=function(l,c){return l.length&&c.length&&!l.some(function(h){return c.indexOf(h)===-1})};function s(l,c){var h={};l=a(l);var p;for(p in l)p!==c&&(h[p]=l[p]);if(c&&l[c])for(p in l[c])h[p]=l[c][p];return h}function a(l){var c={},h;for(h in l){var p=h.replace(/-/g,"_");c[p]=l[h]}return c}i.exports.Options=o,i.exports.normalizeOpts=a,i.exports.mergeOpts=s},,function(i){var o=RegExp.prototype.hasOwnProperty("sticky");function s(a){this.__input=a||"",this.__input_length=this.__input.length,this.__position=0}s.prototype.restart=function(){this.__position=0},s.prototype.back=function(){this.__position>0&&(this.__position-=1)},s.prototype.hasNext=function(){return this.__position=0&&a=0&&l=a.length&&this.__input.substring(l-a.length,l).toLowerCase()===a},i.exports.InputScanner=s},,,,,function(i){function o(s,a){s=typeof s=="string"?s:s.source,a=typeof a=="string"?a:a.source,this.__directives_block_pattern=new RegExp(s+/ beautify( \w+[:]\w+)+ /.source+a,"g"),this.__directive_pattern=/ (\w+)[:](\w+)/g,this.__directives_end_ignore_pattern=new RegExp(s+/\sbeautify\signore:end\s/.source+a,"g")}o.prototype.get_directives=function(s){if(!s.match(this.__directives_block_pattern))return null;var a={};this.__directive_pattern.lastIndex=0;for(var l=this.__directive_pattern.exec(s);l;)a[l[1]]=l[2],l=this.__directive_pattern.exec(s);return a},o.prototype.readIgnored=function(s){return s.readUntilAfter(this.__directives_end_ignore_pattern)},i.exports.Directives=o},,function(i,o,s){var a=s(16).Beautifier,l=s(17).Options;function c(h,p){var m=new a(h,p);return m.beautify()}i.exports=c,i.exports.defaultOptions=function(){return new l}},function(i,o,s){var a=s(17).Options,l=s(2).Output,c=s(8).InputScanner,h=s(13).Directives,p=new h(/\/\*/,/\*\//),m=/\r\n|[\r\n]/,g=/\r\n|[\r\n]/g,w=/\s/,x=/(?:\s|\n)+/g,y=/\/\*(?:[\s\S]*?)((?:\*\/)|$)/g,D=/\/\/(?:[^\n\r\u2028\u2029]*)/g;function M(z,P){this._source_text=z||"",this._options=new a(P),this._ch=null,this._input=null,this.NESTED_AT_RULE={"@page":!0,"@font-face":!0,"@keyframes":!0,"@media":!0,"@supports":!0,"@document":!0},this.CONDITIONAL_GROUP_RULE={"@media":!0,"@supports":!0,"@document":!0}}M.prototype.eatString=function(z){var P="";for(this._ch=this._input.next();this._ch;){if(P+=this._ch,this._ch==="\\")P+=this._input.next();else if(z.indexOf(this._ch)!==-1||this._ch===` `)break;this._ch=this._input.next()}return P},M.prototype.eatWhitespace=function(z){for(var P=w.test(this._input.peek()),L=0;w.test(this._input.peek());)this._ch=this._input.next(),z&&this._ch===` `&&(L===0||L0&&this._indentLevel--},M.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var z=this._source_text,P=this._options.eol;P==="auto"&&(P=` `,z&&m.test(z||"")&&(P=z.match(m)[0])),z=z.replace(g,` `);var L=z.match(/^[\t ]*/)[0];this._output=new l(this._options,L),this._input=new c(z),this._indentLevel=0,this._nestedLevel=0,this._ch=null;for(var $=0,ue=!1,oe=!1,me=!1,ve=!1,ye=!1,ke=this._ch,pe,G,Ie;pe=this._input.read(x),G=pe!=="",Ie=ke,this._ch=this._input.next(),this._ch==="\\"&&this._input.hasNext()&&(this._ch+=this._input.next()),ke=this._ch,this._ch;)if(this._ch==="/"&&this._input.peek()==="*"){this._output.add_new_line(),this._input.back();var fe=this._input.read(y),C=p.get_directives(fe);C&&C.ignore==="start"&&(fe+=p.readIgnored(this._input)),this.print_string(fe),this.eatWhitespace(!0),this._output.add_new_line()}else if(this._ch==="/"&&this._input.peek()==="/")this._output.space_before_token=!0,this._input.back(),this.print_string(this._input.read(D)),this.eatWhitespace(!0);else if(this._ch==="@")if(this.preserveSingleSpace(G),this._input.peek()==="{")this.print_string(this._ch+this.eatString("}"));else{this.print_string(this._ch);var b=this._input.peekUntilAfter(/[: ,;{}()[\]\/='"]/g);b.match(/[ :]$/)&&(b=this.eatString(": ").replace(/\s$/,""),this.print_string(b),this._output.space_before_token=!0),b=b.replace(/\s$/,""),b==="extend"?ve=!0:b==="import"&&(ye=!0),b in this.NESTED_AT_RULE?(this._nestedLevel+=1,b in this.CONDITIONAL_GROUP_RULE&&(me=!0)):!ue&&$===0&&b.indexOf(":")!==-1&&(oe=!0,this.indent())}else this._ch==="#"&&this._input.peek()==="{"?(this.preserveSingleSpace(G),this.print_string(this._ch+this.eatString("}"))):this._ch==="{"?(oe&&(oe=!1,this.outdent()),me?(me=!1,ue=this._indentLevel>=this._nestedLevel):ue=this._indentLevel>=this._nestedLevel-1,this._options.newline_between_rules&&ue&&this._output.previous_line&&this._output.previous_line.item(-1)!=="{"&&this._output.ensure_empty_line_above("/",","),this._output.space_before_token=!0,this._options.brace_style==="expand"?(this._output.add_new_line(),this.print_string(this._ch),this.indent(),this._output.set_indent(this._indentLevel)):(this.indent(),this.print_string(this._ch)),this.eatWhitespace(!0),this._output.add_new_line()):this._ch==="}"?(this.outdent(),this._output.add_new_line(),Ie==="{"&&this._output.trim(!0),ye=!1,ve=!1,oe&&(this.outdent(),oe=!1),this.print_string(this._ch),ue=!1,this._nestedLevel&&this._nestedLevel--,this.eatWhitespace(!0),this._output.add_new_line(),this._options.newline_between_rules&&!this._output.just_added_blankline()&&this._input.peek()!=="}"&&this._output.add_new_line(!0)):this._ch===":"?(ue||me)&&!(this._input.lookBack("&")||this.foundNestedPseudoClass())&&!this._input.lookBack("(")&&!ve&&$===0?(this.print_string(":"),oe||(oe=!0,this._output.space_before_token=!0,this.eatWhitespace(!0),this.indent())):(this._input.lookBack(" ")&&(this._output.space_before_token=!0),this._input.peek()===":"?(this._ch=this._input.next(),this.print_string("::")):this.print_string(":")):this._ch==='"'||this._ch==="'"?(this.preserveSingleSpace(G),this.print_string(this._ch+this.eatString(this._ch)),this.eatWhitespace(!0)):this._ch===";"?$===0?(oe&&(this.outdent(),oe=!1),ve=!1,ye=!1,this.print_string(this._ch),this.eatWhitespace(!0),this._input.peek()!=="/"&&this._output.add_new_line()):(this.print_string(this._ch),this.eatWhitespace(!0),this._output.space_before_token=!0):this._ch==="("?this._input.lookBack("url")?(this.print_string(this._ch),this.eatWhitespace(),$++,this.indent(),this._ch=this._input.next(),this._ch===")"||this._ch==='"'||this._ch==="'"?this._input.back():this._ch&&(this.print_string(this._ch+this.eatString(")")),$&&($--,this.outdent()))):(this.preserveSingleSpace(G),this.print_string(this._ch),this.eatWhitespace(),$++,this.indent()):this._ch===")"?($&&($--,this.outdent()),this.print_string(this._ch)):this._ch===","?(this.print_string(this._ch),this.eatWhitespace(!0),this._options.selector_separator_newline&&!oe&&$===0&&!ye&&!ve?this._output.add_new_line():this._output.space_before_token=!0):(this._ch===">"||this._ch==="+"||this._ch==="~")&&!oe&&$===0?this._options.space_around_combinator?(this._output.space_before_token=!0,this.print_string(this._ch),this._output.space_before_token=!0):(this.print_string(this._ch),this.eatWhitespace(),this._ch&&w.test(this._ch)&&(this._ch="")):this._ch==="]"?this.print_string(this._ch):this._ch==="["?(this.preserveSingleSpace(G),this.print_string(this._ch)):this._ch==="="?(this.eatWhitespace(),this.print_string("="),w.test(this._ch)&&(this._ch="")):this._ch==="!"&&!this._input.lookBack("\\")?(this.print_string(" "),this.print_string(this._ch)):(this.preserveSingleSpace(G),this.print_string(this._ch));var k=this._output.get_code(P);return k},i.exports.Beautifier=M},function(i,o,s){var a=s(6).Options;function l(c){a.call(this,c,"css"),this.selector_separator_newline=this._get_boolean("selector_separator_newline",!0),this.newline_between_rules=this._get_boolean("newline_between_rules",!0);var h=this._get_boolean("space_around_selector_separator");this.space_around_combinator=this._get_boolean("space_around_combinator")||h;var p=this._get_selection_list("brace_style",["collapse","expand","end-expand","none","preserve-inline"]);this.brace_style="collapse";for(var m=0;m0&&ns(r,c-1);)c--;c===0||ts(r,c-1)?l=c:c0){var x=t.insertSpaces?Xn(" ",a*o):Xn(" ",o);w=w.split(` `).join(` `+x),e.start.character===0&&(w=x+w)}return[{range:e,newText:w}]}function es(n){return n.replace(/^\s+/,"")}var Ga=123,Ha=125;function Ja(n,e){for(;e>=0;){var t=n.charCodeAt(e);if(t===Ga)return!0;if(t===Ha)return!1;e--}return!1}function Ve(n,e,t){if(n&&n.hasOwnProperty(e)){var r=n[e];if(r!==null)return r}return t}function Xa(n,e,t){for(var r=e,i=0,o=t.tabSize||4;r && ]#",relevance:50,description:"@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor. Needs to be specified if the counter system is 'additive'.",restrictions:["integer","string","image","identifier"]},{name:"align-content",values:[{name:"center",description:"Lines are packed toward the center of the flex container."},{name:"flex-end",description:"Lines are packed toward the end of the flex container."},{name:"flex-start",description:"Lines are packed toward the start of the flex container."},{name:"space-around",description:"Lines are evenly distributed in the flex container, with half-size spaces on either end."},{name:"space-between",description:"Lines are evenly distributed in the flex container."},{name:"stretch",description:"Lines stretch to take up the remaining space."}],syntax:"normal | | | ? ",relevance:62,description:"Aligns a flex container\u2019s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.",restrictions:["enum"]},{name:"align-items",values:[{name:"baseline",description:"If the flex item\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item\u2019s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"normal | stretch | | [ ? ]",relevance:85,description:"Aligns flex items along the cross axis of the current line of the flex container.",restrictions:["enum"]},{name:"justify-items",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"},{name:"legacy"}],syntax:"normal | stretch | | ? [ | left | right ] | legacy | legacy && [ left | right | center ]",relevance:53,description:"Defines the default justify-self for all items of the box, giving them the default way of justifying each box along the appropriate axis",restrictions:["enum"]},{name:"justify-self",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"}],syntax:"auto | normal | stretch | | ? [ | left | right ]",relevance:53,description:"Defines the way of justifying a box inside its container along the appropriate axis.",restrictions:["enum"]},{name:"align-self",values:[{name:"auto",description:"Computes to the value of 'align-items' on the element\u2019s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself."},{name:"baseline",description:"If the flex item\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item\u2019s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"auto | normal | stretch | | ? ",relevance:72,description:"Allows the default alignment along the cross axis to be overridden for individual flex items.",restrictions:["enum"]},{name:"all",browsers:["E79","FF27","S9.1","C37","O24"],values:[],syntax:"initial | inherit | unset | revert",relevance:53,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/all"}],description:"Shorthand that resets all properties except 'direction' and 'unicode-bidi'.",restrictions:["enum"]},{name:"alt",browsers:["S9"],values:[],relevance:50,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/alt"}],description:"Provides alternative text for assistive technology to replace the generated content of a ::before or ::after element.",restrictions:["string","enum"]},{name:"animation",values:[{name:"alternate",description:"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."},{name:"alternate-reverse",description:"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."},{name:"backwards",description:"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."},{name:"both",description:"Both forwards and backwards fill modes are applied."},{name:"forwards",description:"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."},{name:"infinite",description:"Causes the animation to repeat forever."},{name:"none",description:"No animation is performed"},{name:"normal",description:"Normal playback."},{name:"reverse",description:"All iterations of the animation are played in the reverse direction from the way they were specified."}],syntax:"#",relevance:82,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/animation"}],description:"Shorthand property combines six of the animation properties into a single property.",restrictions:["time","timing-function","enum","identifier","number"]},{name:"animation-delay",syntax:"